         override protected function requestColumnFromSource(proxyColumn:ProxyColumn):void 
         {
             var metadata:Object = proxyColumn.getProxyMetadata();
+            var raw_rows:Array;
+            var data_remap_src:Object = null;
+            var key_remap_src:Object = null;
+            var keyType:String;
+            
+            if (metadata[GROUP_META] == GraphMLConverter.NODE)
+            {
+                raw_rows = (nodeColumnData.getSessionState() as Array);
+
+                key_remap_src = nodeIdToKey;
+
+                keyType = nodeKeyType.value;
+            }
+            else if (metadata[GROUP_META] == GraphMLConverter.EDGE)
+            {
+                raw_rows = (edgeColumnData.getSessionState() as Array);
+
+                data_remap_src = (metadata[COLUMNNAME_META] == GraphMLConverter.SOURCE ||
+                                 metadata[COLUMNNAME_META] == GraphMLConverter.TARGET) ? nodeIdToKey : null;
+
+                key_remap_src = edgeIdToKey;
+
+                keyType = edgeKeyType.value;
+            }
+
+            if (!raw_rows) return;
+
+            var data_column:Array = getPropertyArray(raw_rows, metadata[COLUMNNAME_META], data_remap_src);
+            var key_column:Array = getPropertyArray(raw_rows, GraphMLConverter.ID, key_remap_src);
+
+            /* TODO: Add type autodetection and proper handling of numeric types. */
+
+            
+            var key_vector:Vector.<IQualifiedKey> = new Vector.<IQualifiedKey>();
+            var data_vector:Vector.<String> = new Vector.<String>(data_column);
+
+            function setRecords():void
+            {
+                    var new_column:IAttributeColumn;
+                    new_column = new StringColumn(metadata);
+                    (new_column as StringColumn).setRecords(key_vector, data_vector);
+                    proxyColumn.setInternalColumn(new_column);
+            }
+
+            (WeaveAPI.QKeyManager as QKeyManager).getQKeysAsync(keyType, key_column, proxyColumn, setRecords, key_vector);
+        }
+
+        private static function getPropertyArray(objects:Array, property:String, mapping:Object):Array
+        {
+            var output:Array = new Array(objects.length);
+            for (var idx:int = objects.length - 1; idx >= 0; idx--)
+            {
+                if (mapping)
+                {
+                    output[idx] = mapping[objects[idx][property]];
+                }
+                else
+                {
+                    output[idx] = objects[idx][property];
+                }
+            }
+            return output;
         }
         
         /* Implements from IDataSource */


            if (!handleKeyPropertyChange(edgeKeyPropertyName, edgeKeyToId, edgeIdToKey))
            {
                edgeKeyToId = {};
                edgeIdToKey = {};
            }

            return;

            return partitions;
        }

        public function setFile(content:Object):void
        {
            var results:Object = GraphMLConverter.parse(content as XML);

            // Store results.nodeKeys and results.edgeKeys somewhere
            
            nodeProperties.setSessionState(results.nodeKeys);
            nodeColumnData.setSessionState(results.nodes);

            edgeProperties.setSessionState(results.edgeKeys);
            edgeColumnData.setSessionState(results.edges);
        }
    }
