 		###
 		reduce: ( promisesOrValues, reduceFunction, initialValue ) ->
 			# Wrap the reduce function with one that handles promises and then delegates to it.
+			whenResolved = @when
 			reduceArguments = [
 				( previousValueOrPromise, currentValueOrPromise, currentIndex ) ->
-					return @when( previousValueOrPromise, ( previousValue ) ->
-						return @when( currentValueOrPromise, ( currentValue ) ->
+					return whenResolved( previousValueOrPromise, ( previousValue ) ->
+						return whenResolved( currentValueOrPromise, ( currentValue ) ->
 							return reduceFunction( previousValue, currentValue, currentIndex, promisesOrValues )
 						)
 					)

			if ( arguments.length is 3 )
				reduceArguments.push( initialValue )
			
			return Ext.create( 'Deft.util.Deferred' ).resolve( @reduceArray.apply( promisesOrValues, reduceArguments ) ).promise
		
		###*
		Internal reduce implementation - includes fallback when Array.reduce is not available.

			while index < length
				# Skip holes
				if index of array
					reduced = reduceFunction( reduced, array[ index ], index, array )
				index++
			
			return reduced
