 				for (i = 1; i < rows.length; i++)
 					outputArrayOrVector[i-1] = rows[i][columnIndex];
 			}
-		}
-		
-		private function getNumberFromString(value:String):Number
-		{
-			if (stringIsNullValue(value))
-				return NaN;
-			// First trim out any commas since Number() does not work if numbers have commas. 
-			return Number(value.split(",").join(""));
-		}
-		
-		private function stringIsNullValue(value:String):Boolean
-		{
-			for each (var nullValue:String in nullValues)
-				if (ObjectUtil.stringCompare(value, nullValue, true) == 0)
-					return true;
-			return false;
+			return outputArrayOrVector;
+		}
+		
+		private function stringsToNumbers(strings:Vector.<String>, forced:Boolean):Vector.<Number>
+		{
+			var numbers:Vector.<Number> = new Vector.<Number>(strings.length);
+			var i:int = strings.length;
+			outerLoop: while (i--)
+			{
+				var string:String = StringUtil.trim(strings[i]);
+				for each (var nullValue:String in nullValues)
+				{
+					var a:String = nullValue && nullValue.toLocaleLowerCase();
+					var b:String = string && string.toLocaleLowerCase();
+					if (a == b)
+					{
+						numbers[i] = NaN;
+						continue outerLoop;
+					}
+				}
+
+				// if a string is 2 characters or more and begins with a '0', treat it as a string.
+				if (!forced && string.length > 1 && string.charAt(0) == '0' && string.charAt(1) != '.')
+					return null;
+
+				if (string.indexOf(',') >= 0)
+					string = string.split(',').join('');
+				
+				var number:Number = Number(string);
+				if (isNaN(number) && !forced)
+					return null;
+				
+				numbers[i] = number;
+			}
+			return numbers;
 		}
 		
 		private const nullValues:Array = [null, "", "null", "\\N", "NaN"];

	import mx.rpc.AsyncToken;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.utils.ObjectUtil;
	
	import weave.api.core.ILinkableHashMap;
	import weave.api.data.ColumnMetadata;

		 * @param rows The rows to get values from.
		 * @param columnIndex If this is -1, record index values will be returned.  Otherwise, this specifies which column to get values from.
		 * @param outputArrayOrVector Output Array or Vector to store the values from the specified column, excluding the first row, which is the header.
		 * @return outputArrayOrVector
		 */		
		private function getColumnValues(rows:Array, columnIndex:int, outputArrayOrVector:*):*
		{
			outputArrayOrVector.length = rows.length - 1;
			var i:int;
