diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
index 16df821..c287c1b 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritableFactory.java
@@ -31,8 +31,7 @@
      * @param start
      */
     public VKmerBytesWritable getKmerByRead(int k, byte[] array, int start) {
-        kmer.reset(k);
-        kmer.setByRead(array, start);
+        kmer.setByRead(k, array, start);
         return kmer;
     }
 
@@ -44,8 +43,7 @@
      * @param start
      */
     public VKmerBytesWritable getKmerByReadReverse(int k, byte[] array, int start) {
-        kmer.reset(k);
-        kmer.setByReadReverse(array, start);
+        kmer.setByReadReverse(k, array, start);
         return kmer;
     }
 
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
index 73edd9d..af5b2ed 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/VKmerBytesWritable.java
@@ -441,7 +441,7 @@
      * @param stringBytes
      * @param start
      */
-    public void setByRead(byte[] stringBytes, int start) {
+    private void setByRead(byte[] stringBytes, int start) {
         byte l = 0;
         int bytecount = 0;
         int bcount = this.bytesUsed - 1;
@@ -474,7 +474,7 @@
      * @param start
      *            position
      */
-    public void setByReadReverse(byte[] array, int start) {
+    private void setByReadReverse(byte[] array, int start) {
         byte l = 0;
         int bytecount = 0;
         int bcount = bytesUsed - 1;
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
index 7808719..36115d3 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableFactoryTest.java
@@ -29,8 +29,8 @@
 
     @Test
     public void TestGetLastKmer() {
-        VKmerBytesWritable kmer = new VKmerBytesWritable(9);
-        kmer.setByRead(array, 0);
+        VKmerBytesWritable kmer = new VKmerBytesWritable();
+        kmer.setByRead(9, array, 0);
         Assert.assertEquals("AGCTGACCG", kmer.toString());
         VKmerBytesWritable lastKmer;
         for (int i = 8; i > 0; i--) {
@@ -50,8 +50,8 @@
 
     @Test
     public void TestGetFirstKmer() {
-        VKmerBytesWritable kmer = new VKmerBytesWritable(9);
-        kmer.setByRead(array, 0);
+        VKmerBytesWritable kmer = new VKmerBytesWritable();
+        kmer.setByRead(9, array, 0);
         Assert.assertEquals("AGCTGACCG", kmer.toString());
         VKmerBytesWritable firstKmer;
         for (int i = 8; i > 0; i--) {
@@ -71,8 +71,8 @@
 
     @Test
     public void TestGetSubKmer() {
-        VKmerBytesWritable kmer = new VKmerBytesWritable(9);
-        kmer.setByRead(array, 0);
+        VKmerBytesWritable kmer = new VKmerBytesWritable();
+        kmer.setByRead(9, array, 0);
         Assert.assertEquals("AGCTGACCG", kmer.toString());
         VKmerBytesWritable subKmer;
         for (int istart = 0; istart < kmer.getKmerLetterLength() - 1; istart++) {
@@ -85,8 +85,8 @@
 
     @Test
     public void TestMergeNext() {
-        VKmerBytesWritable kmer = new VKmerBytesWritable(9);
-        kmer.setByRead(array, 0);
+        VKmerBytesWritable kmer = new VKmerBytesWritable();
+        kmer.setByRead(9, array, 0);
         Assert.assertEquals("AGCTGACCG", kmer.toString());
 
         String text = "AGCTGACCG";
@@ -106,8 +106,8 @@
 
     @Test
     public void TestMergePre() {
-        VKmerBytesWritable kmer = new VKmerBytesWritable(9);
-        kmer.setByRead(array, 0);
+        VKmerBytesWritable kmer = new VKmerBytesWritable();
+        kmer.setByRead(9, array, 0);
         Assert.assertEquals("AGCTGACCG", kmer.toString());
         String text = "AGCTGACCG";
         for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
@@ -126,11 +126,11 @@
 
     @Test
     public void TestMergeTwoKmer() {
-        VKmerBytesWritable kmer1 = new VKmerBytesWritable(9);
-        kmer1.setByRead(array, 0);
+        VKmerBytesWritable kmer1 = new VKmerBytesWritable();
+        kmer1.setByRead(9, array, 0);
         String text1 = "AGCTGACCG";
-        VKmerBytesWritable kmer2 = new VKmerBytesWritable(9);
-        kmer2.setByRead(array, 1);
+        VKmerBytesWritable kmer2 = new VKmerBytesWritable();
+        kmer2.setByRead(9, array, 1);
         String text2 = "GCTGACCGT";
         Assert.assertEquals(text1, kmer1.toString());
         Assert.assertEquals(text2, kmer2.toString());
@@ -138,8 +138,8 @@
         VKmerBytesWritable merged = kmerFactory.mergeTwoKmer(kmer1, kmer2);
         Assert.assertEquals(text1 + text2, merged.toString());
 
-        VKmerBytesWritable kmer3 = new VKmerBytesWritable(3);
-        kmer3.setByRead(array, 1);
+        VKmerBytesWritable kmer3 = new VKmerBytesWritable();
+        kmer3.setByRead(3, array, 1);
         String text3 = "GCT";
         Assert.assertEquals(text3, kmer3.toString());
 
@@ -148,17 +148,17 @@
         merged = kmerFactory.mergeTwoKmer(kmer3, kmer1);
         Assert.assertEquals(text3 + text1, merged.toString());
 
-        VKmerBytesWritable kmer4 = new VKmerBytesWritable(8);
-        kmer4.setByRead(array, 0);
+        VKmerBytesWritable kmer4 = new VKmerBytesWritable();
+        kmer4.setByRead(8, array, 0);
         String text4 = "AGCTGACC";
         Assert.assertEquals(text4, kmer4.toString());
         merged = kmerFactory.mergeTwoKmer(kmer4, kmer3);
         Assert.assertEquals(text4 + text3, merged.toString());
 
-        VKmerBytesWritable kmer5 = new VKmerBytesWritable(7);
-        kmer5.setByRead(array, 0);
+        VKmerBytesWritable kmer5 = new VKmerBytesWritable();
+        kmer5.setByRead(7, array, 0);
         String text5 = "AGCTGAC";
-        VKmerBytesWritable kmer6 = new VKmerBytesWritable(9);
+        VKmerBytesWritable kmer6 = new VKmerBytesWritable();
         kmer6.setByRead(9, array, 1);
         String text6 = "GCTGACCGT";
         merged = kmerFactory.mergeTwoKmer(kmer5, kmer6);
@@ -192,17 +192,16 @@
 
     @Test
     public void TestReverseKmer() {
-        VKmerBytesWritable kmer = new VKmerBytesWritable(7);
-        kmer.setByRead(array, 0);
+        VKmerBytesWritable kmer = new VKmerBytesWritable();
+        kmer.setByRead(7, array, 0);
         Assert.assertEquals(kmer.toString(), "AGCTGAC");
         VKmerBytesWritable reversed = kmerFactory.reverse(kmer);
         Assert.assertEquals(reversed.toString(), "CAGTCGA");
         
-        kmer.reset(8);
-        kmer.setByRead(("AATAGAAC").getBytes(), 0);
+        kmer.setByRead(8, ("AATAGAAC").getBytes(), 0);
         Assert.assertEquals(kmer.toString(), "AATAGAAC");
         reversed.reset(8);
         reversed = kmerFactory.reverse(kmer);
-        Assert.assertEquals(reversed.toString(), "GTTCTATT");
+        Assert.assertEquals(reversed.toString(), "CAAGATAA");
     }
 }
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
index 9ca4488..fc97664 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerListWritableTest.java
@@ -23,7 +23,7 @@
             kmer = new VKmerBytesWritable(i);
             String randomString = generaterRandomString(i);
             byte[] array = randomString.getBytes();
-            kmer.setByRead(array, 0);
+            kmer.setByRead(i, array, 0);
             kmerList.reset();
             kmerList.append(kmer);
             Assert.assertEquals(randomString, kmerList.getPosition(0).toString());
@@ -36,7 +36,7 @@
             kmer = new VKmerBytesWritable(5);
             String randomString = generaterRandomString(5);
             byte[] array = randomString.getBytes();
-            kmer.setByRead(array, 0);
+            kmer.setByRead(5, array, 0);
             kmerList.append(kmer);
             Assert.assertEquals(kmerList.getPosition(i).toString(), randomString);
             Assert.assertEquals(i + 1, kmerList.getCountOfPosition());
@@ -62,7 +62,7 @@
             kmer = new VKmerBytesWritable(5);
             String randomString = generaterRandomString(5);
             byte[] array = randomString.getBytes();
-            kmer.setByRead(array, 0);
+            kmer.setByRead(5, array, 0);
             kmerList.append(kmer);
             Assert.assertEquals(randomString, kmerList.getPosition(i).toString());
             Assert.assertEquals(i + 1, kmerList.getCountOfPosition());
@@ -78,7 +78,7 @@
             iterator = copyList.iterator();
             byte[] array = kmerList.getPosition(j).toString().getBytes();
             VKmerBytesWritable deletePos = new VKmerBytesWritable(5);
-            deletePos.setByRead(array, 0);
+            deletePos.setByRead(5, array, 0);
             boolean removed = false;
             while(iterator.hasNext()){
                 tmpKmer = iterator.next();
@@ -109,9 +109,9 @@
         
         VKmerListWritable edgeList = new VKmerListWritable();
         VKmerBytesWritable k = new VKmerBytesWritable(3);
-        k.setByRead(("AAA").getBytes(), 0);
+        k.setByRead(3, ("AAA").getBytes(), 0);
         edgeList.append(k);
-        k.setByRead(("CCC").getBytes(), 0);
+        k.setByRead(3, ("CCC").getBytes(), 0);
         edgeList.append(k);
         for(VKmerBytesWritable edge : edgeList){
         	System.out.println(edge.toString());
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
index 2493b7e..1b60c3c 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/VKmerBytesWritableTest.java
@@ -37,17 +37,17 @@
     @Test
     public void TestCompressKmer() {
         VKmerBytesWritable kmer = new VKmerBytesWritable(k);
-        kmer.setByRead(array, 0);
+        kmer.setByRead(k, array, 0);
         Assert.assertEquals(kmer.toString(), "AATAGAA");
 
-        kmer.setByRead(array, 1);
+        kmer.setByRead(k, array, 1);
         Assert.assertEquals(kmer.toString(), "ATAGAAG");
     }
 
     @Test
     public void TestMoveKmer() {
         VKmerBytesWritable kmer = new VKmerBytesWritable(k);
-        kmer.setByRead(array, 0);
+        kmer.setByRead(k, array, 0);
         Assert.assertEquals(kmer.toString(), "AATAGAA");
 
         for (int i = k; i < array.length - 1; i++) {
@@ -63,17 +63,17 @@
     @Test
     public void TestCompressKmerReverse() {
         VKmerBytesWritable kmer = new VKmerBytesWritable(k);
-        kmer.setByRead(array, 0);
+        kmer.setByRead(k, array, 0);
         Assert.assertEquals(kmer.toString(), "AATAGAA");
 
-        kmer.setByReadReverse(array, 1);
+        kmer.setByReadReverse(k, array, 1);
         Assert.assertEquals(kmer.toString(), "CTTCTAT");
     }
 
     @Test
     public void TestMoveKmerReverse() {
         VKmerBytesWritable kmer = new VKmerBytesWritable(k);
-        kmer.setByRead(array, 0);
+        kmer.setByRead(k, array, 0);
         Assert.assertEquals(kmer.toString(), "AATAGAA");
 
         for (int i = k; i < array.length - 1; i++) {
@@ -91,7 +91,7 @@
         VKmerBytesWritable kmer = new VKmerBytesWritable(9);
         String text = "AGCTGACCG";
         byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G' };
-        kmer.setByRead(array, 0);
+        kmer.setByRead(9, array, 0);
 
         for (int i = 0; i < 9; i++) {
             Assert.assertEquals(text.charAt(i), (char) (GeneCode.getSymbolFromCode(kmer.getGeneCodeAtPosition(i))));
@@ -105,7 +105,7 @@
         for (int k = 3; k <= 10; k++) {
             VKmerBytesWritable kmer = new VKmerBytesWritable(k);
             VKmerBytesWritable kmerAppend = new VKmerBytesWritable(k);
-            kmer.setByRead(array, 0);
+            kmer.setByRead(k, array, 0);
             Assert.assertEquals(string.substring(0, k), kmer.toString());
             for (int b = 0; b < k; b++) {
                 byte byteActual = KmerBytesWritable.getOneByteFromKmerAtPosition(b, kmer.getBytes(),
@@ -127,12 +127,12 @@
         byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
         String text = "AGCTGACCGT";
         VKmerBytesWritable kmer1 = new VKmerBytesWritable(8);
-        kmer1.setByRead(array, 0);
+        kmer1.setByRead(8, array, 0);
         String text1 = "AGCTGACC";
         Assert.assertEquals(text1, kmer1.toString());
 
         VKmerBytesWritable kmer2 = new VKmerBytesWritable(8);
-        kmer2.setByRead(array, 1);
+        kmer2.setByRead(8, array, 1);
         String text2 = "GCTGACCG";
         Assert.assertEquals(text2, kmer2.toString());
 
@@ -151,8 +151,8 @@
             for (int jk = 1; jk <= 10; jk++) {
                 kmer1 = new VKmerBytesWritable(ik);
                 kmer2 = new VKmerBytesWritable(jk);
-                kmer1.setByRead(array, 0);
-                kmer2.setByRead(array, 0);
+                kmer1.setByRead(ik, array, 0);
+                kmer2.setByRead(jk, array, 0);
                 text1 = text.substring(0, ik);
                 text2 = text.substring(0, jk);
                 Assert.assertEquals(text1, kmer1.toString());
@@ -174,13 +174,13 @@
 
         String text1 = "AAGCTAA";
         VKmerBytesWritable kmer1 = new VKmerBytesWritable(text1.length());
-        kmer1.setByRead(resultArray, 0);
+        kmer1.setByRead(text1.length(), resultArray, 0);
         Assert.assertEquals(text1, kmer1.toString());
 
         // kmer2 is the rc of the end of the read
         String text2 = "GGTTGTT";
         VKmerBytesWritable kmer2 = new VKmerBytesWritable(text2.length());
-        kmer2.setByReadReverse(resultArray, result.length() - text2.length());
+        kmer2.setByReadReverse(text2.length(), resultArray, result.length() - text2.length());
         Assert.assertEquals(text2, kmer2.toString());
 
         VKmerBytesWritable merge = new VKmerBytesWritable(kmer1);
@@ -211,13 +211,13 @@
 
         String text1 = "AACAACCC";
         VKmerBytesWritable kmer1 = new VKmerBytesWritable(text1.length());
-        kmer1.setByRead(resultArray, 5);
+        kmer1.setByRead(text1.length(), resultArray, 5);
         Assert.assertEquals(text1, kmer1.toString());
 
         // kmer2 is the rc of the end of the read
         String text2 = "TTGTGCC";
         VKmerBytesWritable kmer2 = new VKmerBytesWritable(text2.length());
-        kmer2.setByReadReverse(resultArray, 0);
+        kmer2.setByReadReverse(text2.length(), resultArray, 0);
         Assert.assertEquals(text2, kmer2.toString());
 
         VKmerBytesWritable merge = new VKmerBytesWritable(kmer1);
@@ -253,8 +253,8 @@
         String test4 = "AGA"; // rc = TCT
         VKmerBytesWritable k3 = new VKmerBytesWritable(3);
         VKmerBytesWritable k4 = new VKmerBytesWritable(3);
-        k3.setByRead(test3.getBytes(), 0);
-        k4.setByRead(test4.getBytes(), 0);
+        k3.setByRead(3, test3.getBytes(), 0);
+        k4.setByRead(3, test4.getBytes(), 0);
         k3.mergeWithRFKmer(3, k4);
         Assert.assertEquals("TCTA", k3.toString());
         // Assert.assertEquals("CTAT", k3); // this is an incorrect test case--
@@ -266,8 +266,8 @@
         test2 = "AGA";
         VKmerBytesWritable k1 = new VKmerBytesWritable(3);
         VKmerBytesWritable k2 = new VKmerBytesWritable(3);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
+        k1.setByRead(3, test1.getBytes(), 0);
+        k2.setByRead(3, test2.getBytes(), 0);
         k1.mergeWithRFKmer(3, k2);
         Assert.assertEquals("TCTA", k1.toString());
         
@@ -277,8 +277,8 @@
         test2 = "ATA"; //TAT
         k1 = new VKmerBytesWritable(3);
         k2 = new VKmerBytesWritable(3);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
+        k1.setByRead(3, test1.getBytes(), 0);
+        k2.setByRead(3, test2.getBytes(), 0);
         k1.mergeWithFRKmer(3, k2);
         Assert.assertEquals("CTAT", k1.toString());
         
@@ -286,8 +286,8 @@
         test2 = "CTA"; //TAT
         k1 = new VKmerBytesWritable(3);
         k2 = new VKmerBytesWritable(3);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
+        k1.setByRead(3, test1.getBytes(), 0);
+        k2.setByRead(3, test2.getBytes(), 0);
         k1.mergeWithFRKmer(3, k2);
         Assert.assertEquals("ATAG", k1.toString());
         
@@ -295,8 +295,8 @@
         test2 = "GAAC";
         k1 = new VKmerBytesWritable(5);
         k2 = new VKmerBytesWritable(4);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(4, test2.getBytes(), 0);
         k1.mergeWithRFKmer(3, k2);
         Assert.assertEquals("GTTCTAT", k1.toString());
     }
@@ -306,10 +306,10 @@
         byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
         String text = "AGCTGACCGT";
         VKmerBytesWritable kmer1 = new VKmerBytesWritable(8);
-        kmer1.setByRead(array, 0);
+        kmer1.setByRead(8, array, 0);
         String text1 = "AGCTGACC";
         VKmerBytesWritable kmer2 = new VKmerBytesWritable(8);
-        kmer2.setByRead(array, 1);
+        kmer2.setByRead(8, array, 1);
         String text2 = "GCTGACCG";
         Assert.assertEquals(text2, kmer2.toString());
         VKmerBytesWritable merge = new VKmerBytesWritable(kmer2);
@@ -327,8 +327,8 @@
             for (int jk = 1; jk <= 10; jk++) {
                 kmer1 = new VKmerBytesWritable(ik);
                 kmer2 = new VKmerBytesWritable(jk);
-                kmer1.setByRead(array, 0);
-                kmer2.setByRead(array, 0);
+                kmer1.setByRead(ik, array, 0);
+                kmer2.setByRead(jk, array, 0);
                 text1 = text.substring(0, ik);
                 text2 = text.substring(0, jk);
                 Assert.assertEquals(text1, kmer1.toString());
@@ -350,9 +350,9 @@
         VKmerBytesWritable k1 = new VKmerBytesWritable(5);
         VKmerBytesWritable k2 = new VKmerBytesWritable(5);
         VKmerBytesWritable k3 = new VKmerBytesWritable(5);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
-        k3.setByRead(test3.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(5, test2.getBytes(), 0);
+        k3.setByRead(5, test3.getBytes(), 0);
         k1.mergeWithRFKmer(5, k2);
         Assert.assertEquals("CTAGAT", k1.toString());
         k1.mergeWithRRKmer(5, k3);
@@ -367,9 +367,9 @@
         VKmerBytesWritable k1 = new VKmerBytesWritable(5);
         VKmerBytesWritable k2 = new VKmerBytesWritable(5);
         VKmerBytesWritable k3 = new VKmerBytesWritable(5);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
-        k3.setByRead(test3.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(5, test2.getBytes(), 0);
+        k3.setByRead(5, test3.getBytes(), 0);
         k1.mergeWithRFKmer(5, k2);
         Assert.assertEquals("CTAGAT", k1.toString());
         k1.mergeWithRFKmer(5, k3);
@@ -384,9 +384,9 @@
         VKmerBytesWritable k1 = new VKmerBytesWritable(5);
         VKmerBytesWritable k2 = new VKmerBytesWritable(5);
         VKmerBytesWritable k3 = new VKmerBytesWritable(5);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
-        k3.setByRead(test3.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(5, test2.getBytes(), 0);
+        k3.setByRead(5, test3.getBytes(), 0);
         k2.mergeWithRFKmer(5, k1);
         Assert.assertEquals("ATCTAG", k2.toString());
         k2.mergeWithFRKmer(5, k3);
@@ -401,9 +401,9 @@
         VKmerBytesWritable k1 = new VKmerBytesWritable(5);
         VKmerBytesWritable k2 = new VKmerBytesWritable(5);
         VKmerBytesWritable k3 = new VKmerBytesWritable(5);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
-        k3.setByRead(test3.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(5, test2.getBytes(), 0);
+        k3.setByRead(5, test3.getBytes(), 0);
         k2.mergeWithRFKmer(5, k1);
         Assert.assertEquals("ATCTAG", k2.toString());
         k2.mergeWithFFKmer(5, k3);
@@ -418,9 +418,9 @@
         VKmerBytesWritable k1 = new VKmerBytesWritable(5);
         VKmerBytesWritable k2 = new VKmerBytesWritable(5);
         VKmerBytesWritable k3 = new VKmerBytesWritable(5);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
-        k3.setByRead(test3.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(5, test2.getBytes(), 0);
+        k3.setByRead(5, test3.getBytes(), 0);
         k2.mergeWithRFKmer(5, k1);
         Assert.assertEquals("ATCTAG", k2.toString());
         k2.mergeWithFFKmer(5, k3);
@@ -435,9 +435,9 @@
         VKmerBytesWritable k1 = new VKmerBytesWritable(5);
         VKmerBytesWritable k2 = new VKmerBytesWritable(5);
         VKmerBytesWritable k3 = new VKmerBytesWritable(5);
-        k1.setByRead(test1.getBytes(), 0);
-        k2.setByRead(test2.getBytes(), 0);
-        k3.setByRead(test3.getBytes(), 0);
+        k1.setByRead(5, test1.getBytes(), 0);
+        k2.setByRead(5, test2.getBytes(), 0);
+        k3.setByRead(5, test3.getBytes(), 0);
         k1.mergeWithRFKmer(5, k2);
         Assert.assertEquals("CTAGAT", k1.toString());
         k1.mergeWithRFKmer(5, k3);
@@ -465,7 +465,7 @@
         index = msgString.indexOf(match);
         // does this test belong in VKmer so it can have variable-length kmers?
 //        kmer.reset(msgString.length() - index);
-        kmer.setByRead(msgString.substring(index).getBytes(), 0);
+        kmer.setByRead(kmerSize, msgString.substring(index).getBytes(), 0);
         System.out.println(kmer.toString());
         
         //FR test
@@ -474,7 +474,7 @@
         msgString = GeneCode.reverseComplement(R2);
         index = msgString.indexOf(match);
         kmer.reset(msgString.length() - index);
-        kmer.setByRead(msgString.substring(index).getBytes(), 0);
+        kmer.setByRead(kmerSize, msgString.substring(index).getBytes(), 0);
         System.out.println(kmer.toString());
         
         //RF test
@@ -483,7 +483,7 @@
         msgString = GeneCode.reverseComplement(F2);
         index = msgString.lastIndexOf(match) + kmerSize - 2;
         kmer.reset(index + 1);
-        kmer.setByReadReverse(msgString.substring(0, index + 1).getBytes(), 0);
+        kmer.setByReadReverse(kmerSize, msgString.substring(0, index + 1).getBytes(), 0);
         System.out.println(kmer.toString());
         
         //RR test
@@ -492,7 +492,7 @@
         msgString = R2;
         index = msgString.lastIndexOf(match) + kmerSize - 2;
         kmer.reset(index + 1);
-        kmer.setByRead(msgString.substring(0, index + 1).getBytes(), 0);
+        kmer.setByRead(kmerSize, msgString.substring(0, index + 1).getBytes(), 0);
         System.out.println(kmer.toString());
         
         String[][] connectedTable = new String[][]{
@@ -521,21 +521,21 @@
         Map<VKmerBytesWritable, Set<Long>> map = new HashMap<VKmerBytesWritable, Set<Long>>();
         VKmerBytesWritable k1 = new VKmerBytesWritable(3);
         Set<Long> set1 = new HashSet<Long>();
-        k1.setByRead(("CTA").getBytes(), 0);
+        k1.setByRead(3, ("CTA").getBytes(), 0);
         set1.add((long)1);
         map.put(k1, set1);
         VKmerBytesWritable k2 = new VKmerBytesWritable(3);
-        k2.setByRead(("GTA").getBytes(), 0);
+        k2.setByRead(3, ("GTA").getBytes(), 0);
         Set<Long> set2 = new HashSet<Long>();
         set2.add((long) 2);
         map.put(k2, set2);
         VKmerBytesWritable k3 = new VKmerBytesWritable(3);
-        k3.setByRead(("ATG").getBytes(), 0);
+        k3.setByRead(3, ("ATG").getBytes(), 0);
         Set<Long> set3 = new HashSet<Long>();
         set3.add((long) 2);
         map.put(k3, set3);
         VKmerBytesWritable k4 = new VKmerBytesWritable(3);
-        k4.setByRead(("AAT").getBytes(), 0);
+        k4.setByRead(3, ("AAT").getBytes(), 0);
         Set<Long> set4 = new HashSet<Long>();
         set4.add((long) 1);
         map.put(k4, set4);
