 				if (!columnId)
 				{
 					// support for time slider
-					var metaArray:Array = this.metadata.getSessionState() as Array;
-					if (metaArray)
+					for (var i:int = 0; i < columnIds.length; i++)
 					{
-						for (var i:int = 0; i < metaArray.length; i++)
+						var meta:Object = getColumnMetadata(columnIds[i]);
+						var found:int = 0;
+						for (var key:String in metadata)
 						{
-							var found:int = 0;
-							for (var key:String in metaArray[i])
+							if (meta[key] != metadata[key])
 							{
-								if (metaArray[i][key] != metadata[key])
-								{
-									found = 0;
-									break;
-								}
-								found++;
-							}
-							if (found)
-							{
-								columnId = i;
+								found = 0;
 								break;
 							}
+							found++;
+						}
+						if (found)
+						{
+							columnId = i;
+							break;
 						}
 					}
 					

		 */
		private function getColumnMetadata(id:Object):Object
		{
			var meta:Object = metadata.getSessionState();
			if (id is String && meta is Array)
				return meta[columnIds.indexOf(id)];
			else if (meta)
				return meta[id];
			return null;
		}
		


		public function CSVDataSource()
		{
			registerLinkableChild(hierarchyRefresh, metadata);
		}

		public const csvData:LinkableVariable = registerLinkableChild(this, new LinkableVariable(Array), handleCSVDataChange);
		public const keyType:LinkableString = newLinkableChild(this, LinkableString, updateKeys);
		public const keyColName:LinkableString = newLinkableChild(this, LinkableString, updateKeys);
		
		public const metadata:LinkableVariable = registerLinkableChild(this, new LinkableVariable(null, typeOfIsObject));
		private function typeOfIsObject(value:Object):Boolean
		{
			return typeof value == 'object';
		}
		
		public const url:LinkableFile = newLinkableChild(this, LinkableFile, parseRawData);
		
