 		 * Contains the csv data that should be used elsewhere in the code
 		 */		
 		private var parsedRows:Array;
+		private var cachedDataTypes:Object = {};
 		private var columnIds:Array = [];
 		private var keysVector:Vector.<IQualifiedKey>;
 		
 		protected function handleParsedRows(rows:Array):void
 		{
+			cachedDataTypes = {};
 			parsedRows = rows;
 			columnIds = rows && rows[0] is Array ? (rows[0] as Array).concat() : [];
 			// make sure column names are unique - if not, use index values for columns with duplicate names

		// backwards compatibility
		[Deprecated] public function set csvDataString(value:String):void
		{
			asyncParser.parseCSV(value);
		}
		
		[Deprecated(replacement="getColumnById")] public function getColumnByName(name:String):IAttributeColumn { return getColumnById(name); }

			var metadata:Object = {};
			metadata[ColumnMetadata.TITLE] = getColumnTitle(id);
			metadata[ColumnMetadata.KEY_TYPE] = keyType.value || DataType.STRING;
			if (cachedDataTypes[id])
				metadata[ColumnMetadata.DATA_TYPE] = cachedDataTypes[id];
			
			// get column metadata from session state
			var meta:Object = getColumnMetadata(id);
