 
 								
 
-								var metadata:Object = {};
-								metadata[WEB_SERVICE] = data[WEB_SERVICE];
-								metadata[GEOGRAPHY_NAME] = data[GEOGRAPHY_NAME];
-								metadata[GEOGRAPHY_REQUIRES] = data[GEOGRAPHY_REQUIRES];
+								var metadata:Object = VectorUtils.getItems(data, node.idFields);
 								metadata[VARIABLE_NAME] = key;
-								metadata.label = column.label;
+								metadata[CONCEPT_NAME] = concept_name;
+								metadata[ColumnMetadata.TITLE] = column.label;
 								concepts[concept_name][key] = metadata;
 							}
 
 							for (key in concepts)
 							{
-								children.push(createConceptNode({
-									variables: concepts[key],
-									name: key
-								}));
+								var concept_metadata:Object = VectorUtils.getItems(data, node.idFields);
+								concept_metadata[CONCEPT_NAME] = key;
+								concept_metadata.variables = concepts[key];
+								children.push(createConceptNode(concept_metadata));
 							}
 							StandardLib.sortOn(children, "label");
 						}


		public function createVariableNode(data:Object):ColumnTreeNode
		{
			return setIndexedNode(data, new ColumnTreeNode({
				dataSource: this,
				data: data,
				label: data.label,
				hasChildBranches: false
			}));
		}

		private function handleFault(event:FaultEvent, token:Object = null):void

                _rootNode = createTopLevelNode();
            return _rootNode;
        }
		
		override protected function generateHierarchyNode(metadata:Object):IWeaveTreeNode
		{
