diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
index 09d353d..3349aaf 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
@@ -17,8 +17,8 @@
     protected byte[] storage;
     protected int offset;
     protected int valueCount;
-    public int kmerByteSize = 2; 
-    public int kmerlength = 5;
+    public int kmerByteSize = 0; 
+    public int kmerlength = 0;
     protected static final byte[] EMPTY = {};
     
     protected KmerBytesWritable posIter = new KmerBytesWritable();
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 76a6171..19f6374 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
@@ -10,11 +10,6 @@
 
 public class NodeWritable implements WritableComparable<NodeWritable>, Serializable{
 
-//    public static class KMER{
-//        public static final byte EXIST = 0;
-//        public static final byte NON_EXIST = 1;
-//    }
-    
     private static final long serialVersionUID = 1L;
     public static final NodeWritable EMPTY_NODE = new NodeWritable(0);
     
@@ -24,7 +19,7 @@
     private KmerListWritable reverseForwardList;
     private KmerListWritable reverseReverseList;
     private KmerBytesWritable kmer;
-//    private byte kmerMark;
+    private int kmerlength = 0;
     
     // merge/update directions
     public static class DirectionFlag {
@@ -39,14 +34,14 @@
         this(0);
     }
     
-    public NodeWritable(int kmerSize) {
+    public NodeWritable(int kmerlenth) {
+        this.kmerlength = kmerlenth;
         nodeIdList = new PositionListWritable();
-        forwardForwardList = new KmerListWritable(kmerSize);
-        forwardReverseList = new KmerListWritable(kmerSize);
-        reverseForwardList = new KmerListWritable(kmerSize);
-        reverseReverseList = new KmerListWritable(kmerSize);
-        kmer = new KmerBytesWritable(kmerSize);
-//        kmerMark = KMER.NON_EXIST;
+        forwardForwardList = new KmerListWritable(kmerlenth);
+        forwardReverseList = new KmerListWritable(kmerlenth);
+        reverseForwardList = new KmerListWritable(kmerlenth);
+        reverseReverseList = new KmerListWritable(kmerlenth);
+        kmer = new KmerBytesWritable(); //in graph construction - not set kmerlength Optimization: VKmer
     }
     
     public NodeWritable(PositionListWritable nodeIdList, KmerListWritable FFList, KmerListWritable FRList,
@@ -68,17 +63,16 @@
         this.reverseForwardList.set(RFList);
         this.reverseReverseList.set(RRList);
         this.kmer.set(kmer);
-//        kmerMark = KMER.EXIST;
     }
 
     public void reset(int kmerSize) {
-        nodeIdList.reset();
-        forwardForwardList.reset(kmerSize);
-        forwardReverseList.reset(kmerSize);
-        reverseForwardList.reset(kmerSize);
-        reverseReverseList.reset(kmerSize);
-        kmer.reset(kmerSize);
-//        kmerMark = KMER.NON_EXIST;
+        this.kmerlength = kmerSize;
+        this.nodeIdList.reset();
+        this.forwardForwardList.reset(kmerSize);
+        this.forwardReverseList.reset(kmerSize);
+        this.reverseForwardList.reset(kmerSize);
+        this.reverseReverseList.reset(kmerSize);
+        this.kmer.reset(0);
     }
     
     
@@ -95,7 +89,6 @@
     }
 
     public void setKmer(KmerBytesWritable kmer) {
-//        kmerMark = KMER.EXIST;
         this.kmer.set(kmer);
     }
     
@@ -149,28 +142,28 @@
                 throw new RuntimeException("Unrecognized direction in getListFromDir: " + dir);
         }
     }
+	
     @Override
     public void write(DataOutput out) throws IOException {
-//        out.writeByte(kmerMark);
-//        this.nodeIdList.write(out);
+        out.writeInt(kmerlength);
+        this.nodeIdList.write(out);
         this.forwardForwardList.write(out);
-//        this.forwardReverseList.write(out);
-//        this.reverseForwardList.write(out);
-//        this.reverseReverseList.write(out);
-//        if(kmerMark == KMER.EXIST) 
-//        this.kmer.write(out);
+        this.forwardReverseList.write(out);
+        this.reverseForwardList.write(out);
+        this.reverseReverseList.write(out);
+        this.kmer.write(out);
     }
 
     @Override
     public void readFields(DataInput in) throws IOException {
-//        kmerMark = in.readByte();
-//        this.nodeIdList.readFields(in);
+        this.kmerlength = in.readInt();
+        reset(kmerlength);
+        this.nodeIdList.readFields(in);
         this.forwardForwardList.readFields(in);
-//        this.forwardReverseList.readFields(in);
-//        this.reverseForwardList.readFields(in);
-//        this.reverseReverseList.readFields(in);
-//        if(kmerMark == KMER.EXIST)
-//        this.kmer.readFields(in);
+        this.forwardReverseList.readFields(in);
+        this.reverseForwardList.readFields(in);
+        this.reverseReverseList.readFields(in);
+        this.kmer.readFields(in);
     }
 
     @Override
@@ -199,13 +192,13 @@
     @Override
     public String toString() {
         StringBuilder sbuilder = new StringBuilder();
-        sbuilder.append('(');
+        sbuilder.append('{');
         sbuilder.append(nodeIdList.toString()).append('\t');
         sbuilder.append(forwardForwardList.toString()).append('\t');
         sbuilder.append(forwardReverseList.toString()).append('\t');
         sbuilder.append(reverseForwardList.toString()).append('\t');
         sbuilder.append(reverseReverseList.toString()).append('\t');
-        sbuilder.append(kmer.toString()).append(')');
+        sbuilder.append(kmer.toString()).append('}');
         return sbuilder.toString();
     }
 
diff --git a/genomix/genomix-hadoop/data/webmap/test.txt b/genomix/genomix-hadoop/data/webmap/test.txt
index 17770fa..990dbd1 100644
--- a/genomix/genomix-hadoop/data/webmap/test.txt
+++ b/genomix/genomix-hadoop/data/webmap/test.txt
@@ -1 +1,3 @@
 1	AATAGAAG
+2	TATAGACC
+3	CATAGATT
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 e877504..1633c26 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
@@ -33,11 +33,6 @@
 			Reporter reporter) throws IOException {
 		outputNode.reset(KMER_SIZE);
 		
-//		//copy first item to outputNode
-//		if(values.hasNext()){
-//		    NodeWritable tmpNode = values.next();
-//		    outputNode.set(tmpNode);
-//		}
 		while (values.hasNext()) {
 		    tmpNode.set(values.next());
 		    outputNode.getNodeIdList().appendList(tmpNode.getNodeIdList());
