 	import weave.api.registerLinkableChild;
 	import weave.api.reportError;
 	import weave.compiler.StandardLib;
+	import weave.core.LinkableHashMap;
 	import weave.core.LinkableNumber;
 	import weave.core.StageUtils;
 	import weave.data.AttributeColumns.SecondaryKeyNumColumn;

				}
				else
				{
					minIndex = _previousSortedValues.lastIndexOf(kClass[iBin]);
					minIndex = minIndex +1;
				}
				

		
		private function _handleJenksBreaks():void
		{
			var k:int,
				value:Number,
				data:Array = _sortedValues,
				kclass:Array = [],
				countNum:int = 1;
			
			// don't attempt to generate more bins than there are distinct values
			value = data[0];
			for (k = 1; k < data.length; k++)
			{
				if (value != data[k])
				{
					value = data[k];
					countNum++;
					if (countNum >= numOfBins.value)
						break;
				}
			}
				
			// the calculation of classes will never include the upper and
			// lower bounds, so we need to explicitly set them
			kclass[countNum] = data[data.length - 1];
			kclass[0] = data[0];
			
			// the lower_class_limits matrix is used as indexes into itself
			// here: the `k` variable is reused in each iteration.
			k = data.length - 1;
			while (countNum > 1) {
				kclass[countNum - 1] = data[_lower_class_limits[k][countNum] - 2];
				k = _lower_class_limits[k][countNum] - 1;
				countNum--;
			}
			
			for (var iBin:int = 0; iBin < kclass.length - 1; iBin++)
			{
				var minIndex:Number;
				if(iBin == 0)
