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 0232054..6e69677 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
@@ -87,7 +87,7 @@
         }
         startReads.reset();
         endReads.reset();
-        this.kmer.reset(0);
+        kmer.reset(0);
         averageCoverage = 0;
     }
 
@@ -103,51 +103,20 @@
         return kmer.getKmerLetterLength();
     }
     
-    public VKmerListWritable getFFList() {
-        return edges[DirectionFlag.DIR_FF];
-    }
-
-    public VKmerListWritable getFRList() {
-        return edges[DirectionFlag.DIR_FR];
-    }
-
-    public VKmerListWritable getRFList() {
-        return edges[DirectionFlag.DIR_RF];
-    }
-
-    public VKmerListWritable getRRList() {
-        return edges[DirectionFlag.DIR_RR];
+    public VKmerListWritable getListFromDir(byte dir) {
+        return edges[dir & DirectionFlag.DIR_MASK];
     }
     
-	public void setFFList(VKmerListWritable forwardForwardList) {
-		this.edges[DirectionFlag.DIR_FF].setCopy(forwardForwardList);
-	}
-
-	public void setFRList(VKmerListWritable forwardReverseList) {
-		this.edges[DirectionFlag.DIR_FR].setCopy(forwardReverseList);
-	}
-
-	public void setRFList(VKmerListWritable reverseForwardList) {
-		this.edges[DirectionFlag.DIR_RF].setCopy(reverseForwardList);
-	}
-
-	public void setRRList(VKmerListWritable reverseReverseList) {
-		this.edges[DirectionFlag.DIR_RR].setCopy(reverseReverseList);
-	}
-
-	public VKmerListWritable getListFromDir(byte dir) {
-        switch (dir & DirectionFlag.DIR_MASK) {
-            case DirectionFlag.DIR_FF:
-                return getFFList();
-            case DirectionFlag.DIR_FR:
-                return getFRList();
-            case DirectionFlag.DIR_RF:
-                return getRFList();
-            case DirectionFlag.DIR_RR:
-                return getRRList();
-            default:
-                throw new RuntimeException("Unrecognized direction in getListFromDir: " + dir);
-        }
+    public void setEdgeList(byte dir, VKmerListWritable edgeList) {
+        this.edges[dir & DirectionFlag.DIR_MASK].setCopy(edgeList);
+    }
+    
+    public PositionListWritable getThreadList(byte dir) {
+        return threads[dir & DirectionFlag.DIR_MASK];
+    }
+    
+    public void setThreadList(byte dir, PositionListWritable threadList) {
+        this.threads[dir & DirectionFlag.DIR_MASK].set(threadList);
     }
 	
 	/**
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
index 39a7535..88b0339 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
@@ -12,6 +12,7 @@
 import org.apache.hadoop.mapred.OutputCollector;
 import org.apache.hadoop.mapred.Reporter;
 
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
@@ -144,12 +145,12 @@
     				case FORWARD:
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preForwardKmer);
-    					outputNode.setRRList(edgeListForPreKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForPreKmer);
     					break;
     				case REVERSE:
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preReverseKmer);
-    					outputNode.setRFList(edgeListForPreKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForPreKmer);
     					break;
     			}
     			break;
@@ -158,12 +159,12 @@
     				case FORWARD:
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preForwardKmer);
-    					outputNode.setFRList(edgeListForPreKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForPreKmer);
     					break;
     				case REVERSE:
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preReverseKmer);
-    					outputNode.setFFList(edgeListForPreKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForPreKmer);
     					break;
     			}
     			break;
@@ -177,12 +178,12 @@
     				case FORWARD:
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextForwardKmer);
-    					outputNode.setFFList(edgeListForNextKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForNextKmer);
     					break;
     				case REVERSE:
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextReverseKmer);
-    					outputNode.setFRList(edgeListForNextKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForNextKmer);
     					break;
     			}
     			break;
@@ -191,12 +192,12 @@
     				case FORWARD:
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextForwardKmer);
-    					outputNode.setRFList(edgeListForNextKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForNextKmer);
     					break;
     				case REVERSE:
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextReverseKmer);
-    					outputNode.setRRList(edgeListForNextKmer);
+    					outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForNextKmer);
     					break;
     			}
     			break;
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 e8e41c4..716b3d6 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
@@ -10,6 +10,7 @@
 import org.apache.hadoop.mapred.Reporter;
 
 import edu.uci.ics.genomix.type.NodeWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 @SuppressWarnings("deprecation")
@@ -38,10 +39,9 @@
 		while (values.hasNext()) {
 		    tmpNode.set(values.next());
 		    outputNode.getNodeIdList().unionUpdate(tmpNode.getNodeIdList());
-		    outputNode.getFFList().unionUpdate(tmpNode.getFFList()); //appendList need to check if insert node exists
-		    outputNode.getFRList().unionUpdate(tmpNode.getFRList());
-		    outputNode.getRFList().unionUpdate(tmpNode.getRFList());
-		    outputNode.getRRList().unionUpdate(tmpNode.getRRList());
+		    for (byte d: DirectionFlag.values) {
+		        outputNode.getListFromDir(d).unionUpdate(tmpNode.getListFromDir(d));
+		    }
 		    averageCoverage += tmpNode.getAvgCoverage();
 		}
 		outputNode.setAvgCoverage(averageCoverage);
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 d5f16c2..bad818b 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
@@ -12,6 +12,7 @@
 
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 public class GenerateGraphViz {
 
@@ -68,22 +69,22 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value){
         String outputEdge = "";
         Iterator<VKmerBytesWritable> kmerIterator;
-        kmerIterator = value.getFFList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next(); 
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"black\" label =\"FF\"]\n";
         }
-        kmerIterator = value.getFRList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"blue\" label =\"FR\"]\n";
         }
-        kmerIterator = value.getRFList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"green\" label =\"RF\"]\n";
         }
-        kmerIterator = value.getRRList().iterator();
+        kmerIterator = value.getListFromDir(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 bdc8627..81f5576 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
@@ -18,6 +18,7 @@
 import java.nio.ByteBuffer;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.io.LongWritable;
@@ -27,7 +28,7 @@
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
-
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 import edu.uci.ics.hyracks.api.comm.IFrameWriter;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
@@ -177,20 +178,20 @@
             public void setEdgeListForCurAndNextKmer(KmerDir curKmerDir, NodeWritable curNode, KmerDir nextKmerDir,
                     NodeWritable nextNode) {
                 if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.FORWARD) {
-                    curNode.getFFList().append(kmerSize, nextForwardKmer);
-                    nextNode.getRRList().append(kmerSize, curForwardKmer);
+                    curNode.getListFromDir(DirectionFlag.DIR_FF).append(kmerSize, nextForwardKmer);
+                    nextNode.getListFromDir(DirectionFlag.DIR_RR).append(kmerSize, curForwardKmer);
                 }
                 if (curKmerDir == KmerDir.FORWARD && nextKmerDir == KmerDir.REVERSE) {
-                    curNode.getFRList().append(kmerSize, nextReverseKmer);
-                    nextNode.getFRList().append(kmerSize, curForwardKmer);
+                    curNode.getListFromDir(DirectionFlag.DIR_FR).append(kmerSize, nextReverseKmer);
+                    nextNode.getListFromDir(DirectionFlag.DIR_FR).append(kmerSize, curForwardKmer);
                 }
                 if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.FORWARD) {
-                    curNode.getRFList().append(kmerSize, nextForwardKmer);
-                    nextNode.getRFList().append(kmerSize, curReverseKmer);
+                    curNode.getListFromDir(DirectionFlag.DIR_RF).append(kmerSize, nextForwardKmer);
+                    nextNode.getListFromDir(DirectionFlag.DIR_RF).append(kmerSize, curReverseKmer);
                 }
                 if (curKmerDir == KmerDir.REVERSE && nextKmerDir == KmerDir.REVERSE) {
-                    curNode.getRRList().append(kmerSize, nextReverseKmer);
-                    nextNode.getFFList().append(kmerSize, curReverseKmer);
+                    curNode.getListFromDir(DirectionFlag.DIR_RR).append(kmerSize, nextReverseKmer);
+                    nextNode.getListFromDir(DirectionFlag.DIR_FF).append(kmerSize, curReverseKmer);
                 }
             }
 
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 5943f0a..7a09c3c 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.getFFList());
-            vertexValue.setFRList(node.getFRList());
-            vertexValue.setRFList(node.getRFList());
-            vertexValue.setRRList(node.getRRList());
+            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));
             // 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 89abdc2..b60d33f 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
@@ -13,6 +13,7 @@
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
+import edu.uci.ics.genomix.type.NodeWritable.DirectionFlag;
 
 public class GenerateGraphViz {
 
@@ -121,22 +122,22 @@
     public static String convertEdgeToGraph(String outputNode, NodeWritable value){
         String outputEdge = "";
         Iterator<VKmerBytesWritable> kmerIterator;
-        kmerIterator = value.getFFList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next(); 
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"black\" label =\"FF\"]\n";
         }
-        kmerIterator = value.getFRList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_FR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"blue\" label =\"FR\"]\n";
         }
-        kmerIterator = value.getRFList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RF).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"green\" label =\"RF\"]\n";
         }
-        kmerIterator = value.getRRList().iterator();
+        kmerIterator = value.getListFromDir(DirectionFlag.DIR_RR).iterator();
         while(kmerIterator.hasNext()){
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"red\" label =\"RR\"]\n";
