 			promise.depend(url, scriptName, inputs, hierarchyRefresh);
 			if (!cacheFile)
 			{
-				cacheFileName = getQualifiedClassName(WeaveAnalystDataSource).split('::').join('.') + '.cache';
 				// register static LinkableFile as a child of the globalHashMap so it will not be disposed when an instance of this data source is disposed.
-				cacheFile = registerLinkableChild(WeaveAPI.globalHashMap, new LinkableFile(URLRequestUtils.LOCAL_FILE_URL_SCHEME + cacheFileName), parseCacheFile);
+				cacheFile = registerLinkableChild(WeaveAPI.globalHashMap, new LinkableFile(URLRequestUtils.LOCAL_FILE_URL_SCHEME + CACHE_FILE_NAME), parseCacheFile);
 			}
 			registerLinkableChild(this, cacheFile, runScript);
 		}
 		
 		private static const CACHE_STATE:String = 'sessionState';
 		private static const CACHE_OUTPUT_STATE:String = 'outputCSV';
-		private static var cacheFileName:String;
+		private static const CACHE_FILE_NAME:String = 'WeaveAnalystDataSource.cache';
 		private static var cacheFile:LinkableFile = null;
 		private static var cache:Object;
 		private static function parseCacheFile():void

			{
				// ignore error
			}
		}
		private static function saveCache(source:WeaveAnalystDataSource):void
		{

			// if callbacks are delayed, we assume that hierarchyRefresh will be explicitly triggered later.
			if (getCallbackCollection(this).callbacksAreDelayed)
				return;

			if (linkableObjectIsBusy(cacheFile))
				return;
			
			// read from cache if present
			if (loadCache(this))
				return;
			
			// force retrieval of referenced columns
			for each (var refCol:ReferencedColumn in getLinkableDescendants(inputs, ReferencedColumn))
