 	coefficient * numerator / denominator
 
 shuffleSet = (set) ->
-	set.sort(randomBoundedFloat).values
+	values = set.copy()
+	for index in [values.length - 1...0]
+	    randomIndex = randomBoundedInteger(0, index)
+
+		tmp = values[index]
+		values[index] = values[randomIndex]
+		values[randomIndex] = tmp
+
+	values
 
 floatGenerator = (min, max, mean, stdev) ->
 	if mean and stdev

			when "integer"
				integerGenerator(config.min, config.max)
			when "set"
				{ values, replacement, shuffle, weights }
				setGenerator(values, replacement, shuffle, weights)
			when "color" then randomColor
			when "a-z", "A-Z" then randomCharacter(config.kind is "a-z")

	createGenerators: (configs, mutator) ->
		configs[0] ?= {}

	toString: ->
		"[object Stochator]"

if module?.exports
	module.exports = Stochator
else
	this.Stochator = Stochator
