Update comment.
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
index c84658a..736dc56 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerBytesWritable.java
@@ -73,6 +73,11 @@
         set(right);
     }
 
+    /**
+     * Deep copy of the given kmer
+     * 
+     * @param newData
+     */
     public void set(KmerBytesWritable newData) {
         if (newData == null) {
             this.set(0, EMPTY_BYTES, 0);
@@ -81,12 +86,29 @@
         }
     }
 
+    /**
+     * Deep copy of the given bytes data
+     * It will not change the kmerlength
+     * 
+     * @param newData
+     * @param offset
+     */
     public void set(byte[] newData, int offset) {
         if (kmerlength > 0) {
             System.arraycopy(newData, offset, bytes, this.offset, size);
         }
     }
 
+    /**
+     * Deep copy of the given data, and also set to new kmerlength
+     * 
+     * @param k
+     *            : new kmer length
+     * @param newData
+     *            : data storage
+     * @param offset
+     *            : start offset
+     */
     public void set(int k, byte[] newData, int offset) {
         reset(k);
         if (k > 0) {
@@ -105,6 +127,14 @@
         clearLeadBit();
     }
 
+    /**
+     * Point this datablock to the given bytes array
+     * It works like the pointer to new datablock.
+     * kmerlength will not change
+     * 
+     * @param newData
+     * @param offset
+     */
     public void setNewReference(byte[] newData, int offset) {
         this.bytes = newData;
         this.offset = offset;
@@ -113,6 +143,15 @@
         }
     }
 
+    /**
+     * Point this datablock to the given bytes array
+     * It works like the pointer to new datablock.
+     * It also set the new kmerlength
+     * 
+     * @param k
+     * @param newData
+     * @param offset
+     */
     public void setNewReference(int k, byte[] newData, int offset) {
         this.kmerlength = k;
         this.size = KmerUtil.getByteNumFromK(k);
@@ -144,6 +183,13 @@
         }
     }
 
+    /**
+     * Get one genecode (A|G|C|T) from the given kmer index
+     * e.g. Get the 4th gene of the kmer ACGTA will return T
+     * 
+     * @param pos
+     * @return
+     */
     public byte getGeneCodeAtPosition(int pos) {
         if (pos >= kmerlength) {
             throw new IllegalArgumentException("gene position out of bound");
@@ -299,28 +345,6 @@
     }
 
     /**
-     * Merge kmer with next neighbor in gene-code format.
-     * The k of new kmer will increase by 1
-     * e.g. AAGCT merge with A => AAGCTA
-     * 
-     * @param nextCode
-     *            : next neighbor in gene-code format
-     */
-    public void mergeNextCode(byte nextCode) {
-        this.kmerlength += 1;
-        setSize(KmerUtil.getByteNumFromK(kmerlength));
-        if (kmerlength % 4 == 1) {
-            for (int i = getLength() - 1; i > 0; i--) {
-                bytes[offset + i] = bytes[offset + i - 1];
-            }
-            bytes[offset] = (byte) (nextCode & 0x3);
-        } else {
-            bytes[offset] = (byte) (bytes[offset] | ((nextCode & 0x3) << (((kmerlength - 1) % 4) << 1)));
-        }
-        clearLeadBit();
-    }
-
-    /**
      * Merge Kmer with the next connected Kmer
      * e.g. AAGCTAA merge with AACAACC, if the initial kmerSize = 3
      * then it will return AAGCTAACAACC
@@ -328,6 +352,7 @@
      * @param initialKmerSize
      *            : the initial kmerSize
      * @param kmer
+     *            : the next kmer
      */
     public void mergeNextKmer(int initialKmerSize, KmerBytesWritable kmer) {
         int preKmerLength = kmerlength;
@@ -344,6 +369,16 @@
         clearLeadBit();
     }
 
+    /**
+     * Merge Kmer with the previous connected Kmer
+     * e.g. AACAACC merge with AAGCTAA, if the initial kmerSize = 3
+     * then it will return AAGCTAACAACC
+     * 
+     * @param initialKmerSize
+     *            : the initial kmerSize
+     * @param preKmer
+     *            : the previous kmer
+     */
     public void mergePreKmer(int initialKmerSize, KmerBytesWritable preKmer) {
         int preKmerLength = kmerlength;
         int preSize = size;
@@ -385,7 +420,7 @@
     public static byte getOneByteFromKmerAtPosition(int k, byte[] buffer, int start, int length) {
         int position = start + length - 1 - k / 4;
         if (position < start) {
-            throw new IllegalArgumentException("Buffer for kmer storage is invalid");
+            throw new IllegalArgumentException("Buffer of kmer storage is invalid");
         }
         int shift = (k % 4) << 1;
         byte data = (byte) (((0xff) & buffer[position]) >> shift);
@@ -401,10 +436,6 @@
         }
     }
 
-    /**
-     * Don't read the kmerlength from datastream,
-     * Read it from configuration
-     */
     @Override
     public void readFields(DataInput in) throws IOException {
         this.kmerlength = in.readInt();
diff --git a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
index 9480aa7..5a59a87 100644
--- a/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
+++ b/genomix/genomix-data/src/test/java/edu/uci/ics/genomix/data/test/KmerBytesWritableTest.java
@@ -91,23 +91,6 @@
     }
 
     @Test
-    public void TestMergeNext() {
-        KmerBytesWritable kmer = new KmerBytesWritable(9);
-        byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G' };
-        kmer.setByRead(array, 0);
-        Assert.assertEquals("AGCTGACCG", kmer.toString());
-
-        String text = "AGCTGACCG";
-        for (int i = 0; i < 10; i++) {
-            for (byte x = GeneCode.A; x <= GeneCode.T; x++) {
-                kmer.mergeNextCode(x);
-                text = text + (char) GeneCode.GENE_SYMBOL[x];
-                Assert.assertEquals(text, kmer.toString());
-            }
-        }
-    }
-
-    @Test
     public void TestGetOneByteFromKmer() {
         byte[] array = { 'A', 'G', 'C', 'T', 'G', 'A', 'C', 'C', 'G', 'T' };
         String string = "AGCTGACCGT";