 	import flash.net.URLRequest;
 	import flash.utils.Dictionary;
 	
+	import mx.rpc.AsyncToken;
 	import mx.rpc.events.FaultEvent;
 	import mx.rpc.events.ResultEvent;
 	import mx.utils.ObjectUtil;
 	
 	import weave.api.WeaveAPI;
-	import weave.api.core.ICallbackCollection;
 	import weave.api.core.ILinkableHashMap;
 	import weave.api.data.ColumnMetadata;
 	import weave.api.data.DataTypes;
 	import weave.api.data.IAttributeColumn;
 	import weave.api.data.IColumnReference;
 	import weave.api.data.IQualifiedKey;
+	import weave.api.detectLinkableObjectChange;
+	import weave.api.disposeObjects;
 	import weave.api.getCallbackCollection;
 	import weave.api.getLinkableOwner;
+	import weave.api.getSessionState;
 	import weave.api.newDisposableChild;
 	import weave.api.newLinkableChild;
 	import weave.api.registerLinkableChild;
 	import weave.api.reportError;
-	import weave.core.ErrorManager;
 	import weave.core.LinkableString;
 	import weave.core.LinkableVariable;
+	import weave.core.UntypedLinkableVariable;
 	import weave.data.AttributeColumns.NumberColumn;
 	import weave.data.AttributeColumns.ProxyColumn;
 	import weave.data.AttributeColumns.ReferencedColumn;

	{
		public function CSVDataSource()
		{
			url.addImmediateCallback(this, handleURLChange);
		}

		/**
		 * Called when url session state changes
		 */		
		private function handleURLChange():void
		{
			if (url.value == '')
				url.value = null;
			if (url.value != null)
			{
				// if url is specified, do not use csvDataString
				csvData.setSessionState(null);
				WeaveAPI.URLRequestUtils.getURL(this, new URLRequest(url.value), handleCSVDownload, handleCSVDownloadError, url.value, URLLoaderDataFormat.TEXT);
			}
		}

		private const asyncParser:CSVParser = registerLinkableChild(this, new CSVParser(true), handleCSVParser);

	import weave.data.CSVParser;
	import weave.data.ColumnReferences.HierarchyColumnReference;
	import weave.data.QKeyManager;
	import weave.services.AMF3Servlet;
	import weave.services.addAsyncResponder;
	import weave.utils.ColumnUtils;
	import weave.utils.HierarchyUtils;
	
	/**
	 * 
