 					return jsonCache.getJsonPromise(dataset.c_geographyLink);
 				});
 		}
+
+		private var _variablesInfoCached:Object;
+		private var _variablesInfoProcessed:Object;
+
 		
 		public function getVariables(dataSetIdentifier:String):WeavePromise/*/<any>/*/
 		{
 			return getVariablesPromise(dataSetIdentifier).then(
 				function (result:Object):Object
 				{
+					if (result.variables === _variablesInfoCached)
+						return _variablesInfoProcessed;
+
 					var variablesInfo:Object = JS.copyObject(result.variables);
 					delete variablesInfo["for"];
 					delete variablesInfo["in"];

						var title:String = StandardLib.substitute('{0} ({1})', StandardLib.replace(label, '!!', '\u2014'), key);
						variablesInfo[key]['title'] = title;
					}
					
					return variablesInfo;
				});
		}
		

			.then(
				function (geographyInfo:Object):WeavePromise
				{
					if (geographyInfo == null) return null;
					geography_id = dataSource.geographicScope.value;
					geography_filters = dataSource.geographicFilters.getSessionState();
					api_key = dataSource.apiKey.value;
					requires = ArrayUtils.copy(geographyInfo[geography_id].requires || []);
