 		else "rgba(#{Utils.round(@_r, 0)}, #{Utils.round(@_g, 0)}, #{Utils.round(@_b, 0)}, #{@_roundA})"
 
 	toHsl: ->
-		hsl = rgbToHsl(@_r, @_g, @_b)
-		return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: @_a }
+		@_hsl = rgbToHsl(@_r, @_g, @_b) if @_hsl == undefined
+		return { h: @_hsl.h * 360, s: @_hsl.s, l: @_hsl.l, a: @_a }
 
 	toHslString: ->
 		hsl = rgbToHsl(@_r, @_g, @_b)


		if colorB instanceof Color

			result = new Color
				r: Utils.modulate(fraction, [0, 1], [colorA._r, colorB._r], limit)
				g: Utils.modulate(fraction, [0, 1], [colorA._g, colorB._g], limit)
				b: Utils.modulate(fraction, [0, 1], [colorA._b, colorB._b], limit)
				a: Utils.modulate(fraction, [0, 1], [colorA._a, colorB._a], limit)

		return result


	##############################################################
	## Class methods

	@mix: (colorA, colorB, fraction = .5, limit = false, model = "husl") ->

		result = null

