 			if (url.value)
 			{
 				// when using url, we don't want to set session state of csvData
-				handleParsedRows(asyncParser.parseResult);
+				handleParsedRows(csvParser.parseResult);
 			}
 			else
 			{
-				csvData.setSessionState(asyncParser.parseResult);
+				csvData.setSessionState(csvParser.parseResult);
 			}
 		}
 		

	import flash.net.URLRequest;
	import flash.utils.getQualifiedClassName;
	
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.utils.StringUtil;


		public function CSVDataSource()
		{
			registerLinkableChild(rawDataPromise, url);
		}

		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:LinkableString = newLinkableChild(this, LinkableString);
		
		public const delimiter:LinkableString = registerLinkableChild(this, new LinkableString(',', verifyDelimiter), parseRawData);
		private function verifyDelimiter(value:String):Boolean { return value && value.length == 1 && value != '"'; }
		
		private const rawDataPromise:LinkablePromise = registerLinkableChild(this, new LinkablePromise(getRawData, null, "Downloading CSV data"), parseRawData);
		private function getRawData():AsyncToken
		{
			if (!url.value)
				return null;
			return WeaveAPI.URLRequestUtils.getURL(rawDataPromise, new URLRequest(url.value));
		}
		private function parseRawData():void
		{
			if (rawDataPromise.error)
				reportError(rawDataPromise.error);
			
			if (detectLinkableObjectChange(parseRawData, delimiter))
			{
				if (csvParser)
					disposeObject(csvParser);
				csvParser = registerLinkableChild(this, new CSVParser(true, delimiter.value), handleCSVParser);
			}
			
			/*if (linkableObjectIsBusy(rawDataPromise))
				return;*/
			
			csvParser.parseCSV(String(rawDataPromise.result || ''));
		}
		
		private var csvParser:CSVParser;
		
		/**
		 * Called when csv parser finishes its task
		 */
