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 782869a..d9d6642 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
@@ -11,7 +11,7 @@
 import org.apache.hadoop.io.SequenceFile;
 
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 public class GenerateGraphViz {
 
@@ -31,7 +31,7 @@
         String outputEdge = "";
         for (File f : srcPath.listFiles((FilenameFilter) (new WildcardFileFilter("part*")))) {
             SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, new Path(f.getAbsolutePath()), conf);
-            KmerBytesWritable key = new KmerBytesWritable();
+            VKmerBytesWritable key = new VKmerBytesWritable();
             VertexValueWritable value = new VertexValueWritable();
             
             while (reader.next(key, value)) {
@@ -58,25 +58,25 @@
     
     public String convertEdgeToGraph(String outputNode, VertexValueWritable value){
         String outputEdge = "";
-        Iterator<KmerBytesWritable> kmerIterator;
+        Iterator<VKmerBytesWritable> kmerIterator;
         kmerIterator = value.getFFList().iterator();
         while(kmerIterator.hasNext()){
-            KmerBytesWritable edge = kmerIterator.next(); 
+            VKmerBytesWritable edge = kmerIterator.next(); 
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"black\" label =\"FF\"]\n";
         }
         kmerIterator = value.getFRList().iterator();
         while(kmerIterator.hasNext()){
-            KmerBytesWritable edge = kmerIterator.next();
+            VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"black\" label =\"FR\"]\n";
         }
         kmerIterator = value.getRFList().iterator();
         while(kmerIterator.hasNext()){
-            KmerBytesWritable edge = kmerIterator.next();
+            VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"red\" label =\"RF\"]\n";
         }
         kmerIterator = value.getRRList().iterator();
         while(kmerIterator.hasNext()){
-            KmerBytesWritable edge = kmerIterator.next();
+            VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"red\" label =\"RR\"]\n";
         }
         return outputEdge;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
index 5cb6aac..3f4e409 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bridgeremove/BridgeAddVertex.java
@@ -72,7 +72,7 @@
         if(getSuperstep() == 1){
             if(getVertexId().toString().equals("ATA")){
             	VKmerBytesWritable vertexId = new VKmerBytesWritable(kmerSize);
-                vertexId.setByRead("GTA".getBytes(), 0);
+                vertexId.setByRead(kmerSize, "GTA".getBytes(), 0);
                 getVertexValue().getFRList().append(vertexId);
                 
                 //add bridge vertex
@@ -92,7 +92,7 @@
                 kmerFRList.append(getVertexId());
                 vertexValue.setFRList(kmerFRList);
                 VKmerBytesWritable otherVertexId = new VKmerBytesWritable(kmerSize);
-                otherVertexId.setByRead("ACG".getBytes(), 0);
+                otherVertexId.setByRead(kmerSize, "ACG".getBytes(), 0);
                 VKmerListWritable kmerRFList = new VKmerListWritable();
                 kmerRFList.append(otherVertexId);
                 vertexValue.setRFList(kmerRFList);
@@ -103,7 +103,7 @@
             } 
             else if(getVertexId().toString().equals("ACG")){
                 VKmerBytesWritable brdgeVertexId = new VKmerBytesWritable(kmerSize);
-                brdgeVertexId.setByRead("GTA".getBytes(), 0);
+                brdgeVertexId.setByRead(kmerSize, "GTA".getBytes(), 0);
                 getVertexValue().getRFList().append(brdgeVertexId);
             }
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
index 3df090c..0c96412 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/bubblemerge/BubbleAddVertex.java
@@ -65,7 +65,7 @@
         if(getSuperstep() == 1){
             if(getVertexId().toString().equals("ATA")){
                 VKmerBytesWritable vertexId = new VKmerBytesWritable(kmerSize);
-                vertexId.setByRead("GTA".getBytes(), 0);
+                vertexId.setByRead(kmerSize, "GTA".getBytes(), 0);
                 getVertexValue().getFRList().append(vertexId);
                 
                 //add bridge vertex
@@ -85,7 +85,7 @@
                 kmerFRList.append(getVertexId());
                 vertexValue.setFRList(kmerFRList);
                 VKmerBytesWritable otherVertexId = new VKmerBytesWritable(kmerSize);
-                otherVertexId.setByRead("AGA".getBytes(), 0);
+                otherVertexId.setByRead(kmerSize, "AGA".getBytes(), 0);
                 VKmerListWritable kmerRFList = new VKmerListWritable();
                 kmerRFList.append(otherVertexId);
                 vertexValue.setRFList(kmerRFList);
@@ -96,7 +96,7 @@
             } 
             else if(getVertexId().toString().equals("AGA")){
                 VKmerBytesWritable brdgeVertexId = new VKmerBytesWritable(kmerSize);
-                brdgeVertexId.setByRead("GTA".getBytes(), 0);
+                brdgeVertexId.setByRead(kmerSize, "GTA".getBytes(), 0);
                 getVertexValue().getRFList().append(brdgeVertexId);
             }
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
index ca4b088..ece573c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
@@ -653,32 +653,28 @@
                 match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length()); 
                 msgString = msg.getActualKmer().toString();
                 index = msgString.indexOf(match);
-//                tmpKmer.reset(msgString.length() - index);
-                tmpKmer.setByRead(msgString.substring(index).getBytes(), 0);
+                tmpKmer.setByRead(msgString.length() - index, msgString.substring(index).getBytes(), 0);
                 break;
             case MessageFlag.DIR_FR:
                 selfString = getVertexValue().getKmer().toString();
                 match = selfString.substring(selfString.length() - kmerSize + 1,selfString.length()); 
                 msgString = GeneCode.reverseComplement(msg.getActualKmer().toString());
                 index = msgString.indexOf(match);
-//                tmpKmer.reset(msgString.length() - index);
-                tmpKmer.setByReadReverse(msgString.substring(index).getBytes(), 0);
+                tmpKmer.setByReadReverse(msgString.length() - index, msgString.substring(index).getBytes(), 0);
                 break;
             case MessageFlag.DIR_RF:
                 selfString = getVertexValue().getKmer().toString();
                 match = selfString.substring(0,kmerSize - 1); 
                 msgString = GeneCode.reverseComplement(msg.getActualKmer().toString());
                 index = msgString.lastIndexOf(match) + kmerSize - 2;
-//                tmpKmer.reset(index + 1);
-                tmpKmer.setByReadReverse(msgString.substring(0, index + 1).getBytes(), 0);
+                tmpKmer.setByReadReverse(index + 1, msgString.substring(0, index + 1).getBytes(), 0);
                 break;
             case MessageFlag.DIR_RR:
                 selfString = getVertexValue().getKmer().toString();
                 match = selfString.substring(0,kmerSize - 1); 
                 msgString = msg.getActualKmer().toString();
                 index = msgString.lastIndexOf(match) + kmerSize - 2;
-//                tmpKmer.reset(index + 1); // TODO: fix ALL of these resets (only if you need to)
-                tmpKmer.setByRead(msgString.substring(0, index + 1).getBytes(), 0);
+                tmpKmer.setByRead(index + 1, msgString.substring(0, index + 1).getBytes(), 0);
                 break;
         }
        
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
index 027d295..1c981f2 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/MapReduceVertex.java
@@ -49,10 +49,9 @@
         else
             kmerList.reset();
         if(fakeVertex == null){
-//            fakeVertex = new KmerBytesWritable(kmerSize + 1); // TODO check if merge is correct
             fakeVertex = new VKmerBytesWritable();
             String random = generaterRandomString(kmerSize + 1);
-            fakeVertex.setByRead(random.getBytes(), 0); 
+            fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0); 
         }
         if(destVertexId == null)
             destVertexId = new VKmerBytesWritable(kmerSize);
@@ -108,9 +107,8 @@
             incomingMsg = msgIterator.next();
             String kmerString = incomingMsg.getActualKmer().toString();
             tmpKmer.reset(kmerString.length());
-//            reverseKmer.reset(kmerString.length());//kmerbyteswritable 
-            tmpKmer.setByRead(kmerString.getBytes(), 0);
-            reverseKmer.setByReadReverse(kmerString.getBytes(), 0);
+            tmpKmer.setByRead(kmerString.length(), kmerString.getBytes(), 0);
+            reverseKmer.setByReadReverse(kmerString.length(), kmerString.getBytes(), 0);
 
             if(reverseKmer.compareTo(tmpKmer) < 0)
                 tmpKmer.setAsCopy(reverseKmer);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
index da83dcf..6b7ad1f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
@@ -76,7 +76,7 @@
 //            fakeVertex = new KmerBytesWritable(kmerSize + 1);
             fakeVertex = new VKmerBytesWritable();
             String random = generaterRandomString(kmerSize + 1);
-            fakeVertex.setByRead(random.getBytes(), 0); 
+            fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0); 
         }
         isFakeVertex = ((byte)getVertexValue().getState() & State.FAKEFLAG_MASK) > 0 ? true : false;
         if(destVertexId == null)
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
index e4e797f..83958fe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/splitrepeat/SplitRepeatVertex.java
@@ -341,9 +341,9 @@
                         
                         if(!neighborEdgeIntersection.isEmpty()){
                             if(count == 0)
-                                createdVertexId.setByRead("AAA".getBytes(), 0);//kmerSize + 1 generaterRandomString(kmerSize).getBytes()
+                                createdVertexId.setByRead("AAA".length(), "AAA".getBytes(), 0);//kmerSize + 1 generaterRandomString(kmerSize).getBytes()
                             else
-                                createdVertexId.setByRead("GGG".getBytes(), 0);
+                                createdVertexId.setByRead("GGG".length(), "GGG".getBytes(), 0);
                             count++;
                             
                             /** create new/created vertex **/
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
index 4a540b8..cff87c7 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipAddVertex.java
@@ -69,7 +69,7 @@
         if(getSuperstep() == 1){
             if(getVertexId().toString().equals("CTA")){
                 VKmerBytesWritable vertexId = new VKmerBytesWritable(kmerSize);
-                vertexId.setByRead("AGC".getBytes(), 0);
+                vertexId.setByRead(kmerSize, "AGC".getBytes(), 0);
                 getVertexValue().getRFList().append(vertexId);
                 
                 //add tip vertex
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
index e8ca60f..9daeaa3 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
@@ -14,7 +14,7 @@
 
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.type.State2;
-import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 public class MergePathTest {
     public static final String PATH_TO_TESTSTORE = "testcase/pathmerge/";
@@ -50,7 +50,7 @@
         for (int i = 0; i < nc; i++) {
             Path path = new Path(input + "/part-" + i);
             SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            VKmerBytesWritable key = new VKmerBytesWritable(kmerSize);
             VertexValueWritable value = new VertexValueWritable();
 
             while (reader.next(key, value)) {
@@ -90,7 +90,7 @@
         for (int i = 0; i < nc; i++) {
             Path path = new Path(input + "/part-" + i);
             SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            VKmerBytesWritable key = new VKmerBytesWritable(kmerSize);
             VertexValueWritable value = new VertexValueWritable();
 
             while (reader.next(key, value)) {
@@ -115,7 +115,7 @@
         for (int i = 0; i < nc; i++) {
             Path path = new Path(input + "/part-" + i);
             SequenceFile.Reader reader = new SequenceFile.Reader(fileSys, path, conf);
-            KmerBytesWritable key = new KmerBytesWritable(kmerSize);
+            VKmerBytesWritable key = new VKmerBytesWritable(kmerSize);
             VertexValueWritable value = new VertexValueWritable();
 
             while (reader.next(key, value)) {
