         	var web_service:String = metadata[WEB_SERVICE];
         	var geography_name:String = metadata[GEOGRAPHY_NAME];
         	var variable_name:String = metadata[VARIABLE_NAME];
-        	var geography_requires:Array = metadata[GEOGRAPHY_REQUIRES];
+        	var key_column_names:Array = WeaveAPI.CSVParser.parseCSVRow(metadata[GEOGRAPHY_REQUIRES]);
+
+        	if (key_column_names)
+        		key_column_names.push(geography_name);
+        	else 
+        		key_column_names = [geography_name];
 
         	var params:Object = {
         		get: variable_name,
         		"for": geography_name + ":*"
         	};
-
-        	var key_column_names:Array = geography_requires ? geography_requires.slice(0) : [];
-        	key_column_names.push(geography_name);
 
         	metadata[ColumnMetadata.KEY_TYPE] =  key_column_names.join(0);
 

								var metadata:Object = {};
								metadata[VARIABLES_LINK] = data[VARIABLES_LINK];
								metadata[WEB_SERVICE] = data[WEB_SERVICE];
								metadata[GEOGRAPHY_REQUIRES] = geography.requires;
								metadata[GEOGRAPHY_NAME] = geography.name;
								metadata[GEOGRAPHY_LEVEL_ID] = geography.geoLevelId;
								children.push(createGeographyNode(metadata));

                _rootNode = createTopLevelNode();
            return _rootNode;
        }

        private var _indexedNodes:Object = {};
        private function setIndexedNode(metadata:Object, node:IWeaveTreeNode):ColumnTreeNode
        {
        	var key:String = Compiler.stringify(VectorUtils.getItems(metadata, META_ID_FIELDS));
        	return _indexedNodes[key] = node;
        }
        private function getIndexedNode(metadata:Object):ColumnTreeNode
        {
        	var key:String = Compiler.stringify(VectorUtils.getItems(metadata, META_ID_FIELDS));
        	return _indexedNodes[key];
        }
		
		override public function findHierarchyNode(metadata:Object):IWeaveTreeNode
		{
			return getIndexedNode(metadata);
		}
		
		override protected function generateHierarchyNode(metadata:Object):IWeaveTreeNode
