 					_uniqueSecondaryKeys.push(keyB);
 				if (! _keyToNumericDataMapping[qkeyA])
 					_keyToNumericDataMapping[qkeyA] = new Dictionary();
-				if (_dataType == String)
+				if (dataObject is String)
 				{
-					var iString:int = _uniqueStrings.indexOf(dataObject);
+					var iString:int = _uniqueStrings.indexOf(dataObject as String);
+					if (iString < 0)
+					{
+						//iString = _uniqueStrings.push(dataObject as String) - 1;
+						iString = _uniqueStrings.length;
+						_uniqueStrings[iString] = dataObject as String;
+					}
 					_keyToNumericDataMapping[qkeyA][keyB] = iString;
 					_keyToNumericDataMappingAB[qkeyAB] = iString;
 				}
 				else
 				{
-					var number:Number = StandardLib.asNumber(dataObject);
-					_keyToNumericDataMapping[qkeyA][keyB] = number;
-					_keyToNumericDataMappingAB[qkeyAB] = number;
+					_keyToNumericDataMapping[qkeyA][keyB] = dataObject;//Number(dataObject);
+					_keyToNumericDataMappingAB[qkeyAB] = dataObject;//Number(dataObject);
 					
-					_minNumber = isNaN(_minNumber) ? number : Math.min(_minNumber, number);
-					_maxNumber = isNaN(_maxNumber) ? number : Math.max(_maxNumber, number);
+					_minNumber = isNaN(_minNumber) ? dataObject : Math.min(_minNumber, dataObject);
+					_maxNumber = isNaN(_maxNumber) ? dataObject : Math.max(_maxNumber, dataObject);
 				}
 			}
 			

				_maxNumber = NaN;
			}
			_metadata.attribute(ColumnMetadata.DATA_TYPE).setChildren(dataType);
			_dataType = dataType == DataTypes.NUMBER ? Number : String;
			
			// save a mapping from keys to data
			for (index = 0; index < keysA.length; index++)

			_keyToNumericDataMapping = new Dictionary();
			
			//if it's string data - create list of unique strings
			var dataType:String = _metadata.attribute(ColumnMetadata.DATA_TYPE);
			if (data[0] is String || (dataType && dataType != DataTypes.NUMBER))
			{
				if (!dataType)
