starting changes to NodeWritable
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 807dc7f..6baf86c 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
@@ -20,11 +20,15 @@
     
     private static final int SIZE_FLOAT = 4;
     
-    private PositionListWritable nodeIdList;
-    private VKmerListWritable forwardForwardList;
-    private VKmerListWritable forwardReverseList;
-    private VKmerListWritable reverseForwardList;
-    private VKmerListWritable reverseReverseList;
+    // edge list
+    private VKmerListWritable edges[] = {null, null, null, null};
+    
+    // connections within the same read -- used for resolving repeats and scaffolding
+    private PositionListWritable threads[] = {null, null, null, null};
+    
+    private PositionListWritable startReads;  // first kmer in read (or last but kmer was flipped)
+    private PositionListWritable endReads;  //last kmer in read (or first but kmer was flipped)
+    
     private VKmerBytesWritable kmer;
     private float averageCoverage;
     
@@ -37,44 +41,59 @@
         public static final byte DIR_MASK = 0b11 << 0;
     }
     
+    public enum Dir {
+        FF(0b00 << 0),
+        FR(0b01 << 0),
+        RF(0b10 << 0),
+        RR(0b11 << 0);
+        
+		private byte value;
+        private Dir(int val) {
+            value = (byte) val;
+        }
+        public byte getValue() {
+        	return value;
+        }
+    }
+    
     public NodeWritable() {
-        nodeIdList = new PositionListWritable();
-        forwardForwardList = new VKmerListWritable();
-        forwardReverseList = new VKmerListWritable();
-        reverseForwardList = new VKmerListWritable();
-        reverseReverseList = new VKmerListWritable();
+        for (Dir d: Dir.values()) {
+            edges[d.getValue()] = new VKmerListWritable();
+            threads[d.getValue()] = new PositionListWritable();
+        }
+        startReads = new PositionListWritable();
+        endReads = new PositionListWritable();
         kmer = new VKmerBytesWritable();  // in graph construction - not set kmerlength Optimization: VKmer
         averageCoverage = 0;
     }
     
-    public NodeWritable(PositionListWritable nodeIdList, VKmerListWritable FFList, VKmerListWritable FRList,
-            VKmerListWritable RFList, VKmerListWritable RRList, VKmerBytesWritable kmer, float coverage) {
+    public NodeWritable(VKmerListWritable[] edges, PositionListWritable[] threads,
+            PositionListWritable startReads, PositionListWritable endReads,
+            VKmerBytesWritable kmer, float coverage) {
         this();
-        set(nodeIdList, FFList, FRList, RFList, RRList, kmer, coverage);
+        set(edges, threads, startReads, endReads, kmer, coverage);
     }
     
     public void set(NodeWritable node){
-        set(node.nodeIdList, node.forwardForwardList, node.forwardReverseList, node.reverseForwardList, 
-                node.reverseReverseList, node.kmer, node.averageCoverage);
+        set(node.edges, node.threads, node.startReads, node.endReads, node.kmer, node.averageCoverage);
     }
     
-    public void set(PositionListWritable nodeIdList, VKmerListWritable FFList, VKmerListWritable FRList,
-            VKmerListWritable RFList, VKmerListWritable RRList, VKmerBytesWritable kmer2, float coverage) {
-        this.nodeIdList.set(nodeIdList);
-        this.forwardForwardList.setCopy(FFList);
-        this.forwardReverseList.setCopy(FRList);
-        this.reverseForwardList.setCopy(RFList);
-        this.reverseReverseList.setCopy(RRList);
+    public void set(VKmerListWritable[] edges, PositionListWritable[] threads,
+            PositionListWritable startReads, PositionListWritable endReads, 
+            VKmerBytesWritable kmer2, float coverage) {
+        for (Dir d: Dir.values()) {
+            this.edges[d.getValue()].setCopy(edges[d.getValue()]);
+            this.threads[d.getValue()].set(threads[d.getValue()]);
+        }
         this.kmer.setAsCopy(kmer2);
         this.averageCoverage = coverage;
     }
 
     public void reset() {
-        this.nodeIdList.reset();
-        this.forwardForwardList.reset();
-        this.forwardReverseList.reset();
-        this.reverseForwardList.reset();
-        this.reverseReverseList.reset();
+        for (Dir d: Dir.values()) {
+            edges[d.getValue()].reset();
+            threads[d.getValue()].reset();
+        }
         this.kmer.reset(0);
         averageCoverage = 0;
     }