 			}
 		}
 		private static var _debugCompareCount:int = 0;
-		private static function _debugCompare(a:Object, b:Object):int
+		private static var _debugCompareFunction:Function = null;
+		private static function _debugCompareCounter(a:Object, b:Object):int
 		{
 			_debugCompareCount++;
-			return ObjectUtil.compare(a, b);
+			return _debugCompareFunction(a, b);
 		}
 	}
 }

		public function beginSort(arrayToSort:*, compareFunction:Function = null):void
		{
			// initialize
			compare = compareFunction || defaultCompare;
			original = arrayToSort || [];
			source = original;
			length = original.length;

		
		private function iterate(stopTime:int):Number
		{
			if (compare === null)
			{
				if (original.length && original[0] is Number)
					original.sort(Array.NUMERIC);
				else
					original.sort();
				return 1;
			}
			
			var time:int = getTimer();
			
			while (getTimer() < stopTime)
