diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
index 6e69677..d005d7e 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -103,7 +103,7 @@
         return kmer.getKmerLetterLength();
     }
     
-    public VKmerListWritable getListFromDir(byte dir) {
+    public VKmerListWritable getEdgeList(byte dir) {
         return edges[dir & DirectionFlag.DIR_MASK];
     }
     
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
index 716b3d6..3a21bae 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
@@ -40,7 +40,7 @@
 		    tmpNode.set(values.next());
 		    outputNode.getNodeIdList().unionUpdate(tmpNode.getNodeIdList());
 		    for (byte d: DirectionFlag.values) {
-		        outputNode.getListFromDir(d).unionUpdate(tmpNode.getListFromDir(d));
+		        outputNode.getEdgeList(d).unionUpdate(tmpNode.getEdgeList(d));
 		    }
 		    averageCoverage += tmpNode.getAvgCoverage();
 		}
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
index bad818b..d92dc18 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
@@ -69,22 +69,22 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value){
         String outputEdge = "";
         Iterator<VKmerBytesWritable> kmerIterator;
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FF).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next(); 
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"black\" label =\"FF\"]\n";
         }
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FR).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"blue\" label =\"FR\"]\n";
         }
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RF).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"green\" label =\"RF\"]\n";
         }
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RR).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"red\" label =\"RR\"]\n";
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
index 81f5576..88c76ce 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
@@ -178,20 +178,20 @@
             public void setEdgeListForCurAndNextKmer(KmerDir curKmerDir, NodeWritable curNode, KmerDir nextKmerDir,
                     NodeWritable nextNode) {
                 if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.FORWARD) {
-                    curNode.getListFromDir(DirectionFlag.DIR_FF).append(kmerSize, nextForwardKmer);
-                    nextNode.getListFromDir(DirectionFlag.DIR_RR).append(kmerSize, curForwardKmer);
+                    curNode.getEdgeList(DirectionFlag.DIR_FF).append(kmerSize, nextForwardKmer);
+                    nextNode.getEdgeList(DirectionFlag.DIR_RR).append(kmerSize, curForwardKmer);
                 }
                 if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.REVERSE) {
-                    curNode.getListFromDir(DirectionFlag.DIR_FR).append(kmerSize, nextReverseKmer);
-                    nextNode.getListFromDir(DirectionFlag.DIR_FR).append(kmerSize, curForwardKmer);
+                    curNode.getEdgeList(DirectionFlag.DIR_FR).append(kmerSize, nextReverseKmer);
+                    nextNode.getEdgeList(DirectionFlag.DIR_FR).append(kmerSize, curForwardKmer);
                 }
                 if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.FORWARD) {
-                    curNode.getListFromDir(DirectionFlag.DIR_RF).append(kmerSize, nextForwardKmer);
-                    nextNode.getListFromDir(DirectionFlag.DIR_RF).append(kmerSize, curReverseKmer);
+                    curNode.getEdgeList(DirectionFlag.DIR_RF).append(kmerSize, nextForwardKmer);
+                    nextNode.getEdgeList(DirectionFlag.DIR_RF).append(kmerSize, curReverseKmer);
                 }
                 if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.REVERSE) {
-                    curNode.getListFromDir(DirectionFlag.DIR_RR).append(kmerSize, nextReverseKmer);
-                    nextNode.getListFromDir(DirectionFlag.DIR_FF).append(kmerSize, curReverseKmer);
+                    curNode.getEdgeList(DirectionFlag.DIR_RR).append(kmerSize, nextReverseKmer);
+                    nextNode.getEdgeList(DirectionFlag.DIR_FF).append(kmerSize, curReverseKmer);
                 }
             }
 
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/AggregateKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/AggregateKmerAggregateFactory.java
index eb367a1..1d204f1 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/AggregateKmerAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/AggregateKmerAggregateFactory.java
@@ -80,7 +80,7 @@
                 readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
                 localUniNode.getNodeIdList().appendList(readNode.getNodeIdList());
                 for (byte d: DirectionFlag.values) {
-                    localUniNode.getListFromDir(d).appendList(readNode.getListFromDir(d));
+                    localUniNode.getEdgeList(d).appendList(readNode.getEdgeList(d));
                 }
                 localUniNode.addCoverage(readNode);
                 // make an empty field
@@ -94,7 +94,7 @@
                 readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
                 localUniNode.getNodeIdList().appendList(readNode.getNodeIdList());
                 for (byte d: DirectionFlag.values) {
-                    localUniNode.getListFromDir(d).appendList(readNode.getListFromDir(d));
+                    localUniNode.getEdgeList(d).appendList(readNode.getEdgeList(d));
                 }
                 localUniNode.addCoverage(readNode);
             }
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/MergeKmerAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/MergeKmerAggregateFactory.java
index 89a0e35..3d072db 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/MergeKmerAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/aggregators/MergeKmerAggregateFactory.java
@@ -73,7 +73,7 @@
                 readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
                 localUniNode.getNodeIdList().unionUpdate(readNode.getNodeIdList());
                 for (byte d: DirectionFlag.values) {
-                    localUniNode.getListFromDir(d).unionUpdate(readNode.getListFromDir(d));
+                    localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
                 }
                 localUniNode.addCoverage(readNode);
                 //make a fake feild to cheat caller
@@ -92,7 +92,7 @@
                 readNode.setAsReference(accessor.getBuffer().array(), getOffSet(accessor, tIndex, 1));
                 localUniNode.getNodeIdList().unionUpdate(readNode.getNodeIdList());
                 for (byte d: DirectionFlag.values) {
-                    localUniNode.getListFromDir(d).unionUpdate(readNode.getListFromDir(d));
+                    localUniNode.getEdgeList(d).unionUpdate(readNode.getEdgeList(d));
                 }
                 localUniNode.addCoverage(readNode);
             }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
index 7a09c3c..ca6a3e4 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
@@ -72,10 +72,10 @@
              */
             node.set(getRecordReader().getCurrentValue());
             vertexValue.setNodeIdList(node.getNodeIdList());
-            vertexValue.setFFList(node.getListFromDir(DirectionFlag.DIR_FF));
-            vertexValue.setFRList(node.getListFromDir(DirectionFlag.DIR_FR));
-            vertexValue.setRFList(node.getListFromDir(DirectionFlag.DIR_RF));
-            vertexValue.setRRList(node.getListFromDir(DirectionFlag.DIR_RR));
+            vertexValue.setFFList(node.getEdgeList(DirectionFlag.DIR_FF));
+            vertexValue.setFRList(node.getEdgeList(DirectionFlag.DIR_FR));
+            vertexValue.setRFList(node.getEdgeList(DirectionFlag.DIR_RF));
+            vertexValue.setRRList(node.getEdgeList(DirectionFlag.DIR_RR));
             // TODO make this more efficient (don't use toString)
             vertexValue.setActualKmer(new VKmerBytesWritable(vertexId));
             vertexValue.setState(State.IS_NON);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
index b60d33f..91f0109 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
@@ -122,22 +122,22 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value){
         String outputEdge = "";
         Iterator<VKmerBytesWritable> kmerIterator;
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FF).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_FF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next(); 
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"black\" label =\"FF\"]\n";
         }
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FR).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_FR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"blue\" label =\"FR\"]\n";
         }
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RF).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_RF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"green\" label =\"RF\"]\n";
         }
-        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RR).iterator();
+        kmerIterator = value.getEdgeList(DirectionFlag.DIR_RR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"red\" label =\"RR\"]\n";
