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 648f28e..e901de6 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
@@ -68,14 +68,24 @@
     public KmerBytesWritable(int k) {
         this.kmerlength = k;
         this.size = KmerUtil.getByteNumFromK(kmerlength);
-        this.bytes = new byte[this.size];
+        if (k > 0) {
+            this.bytes = new byte[this.size];
+        } else {
+            this.bytes = EMPTY_BYTES;
+        }
     }
 
     public KmerBytesWritable(KmerBytesWritable right) {
-        this.kmerlength = right.kmerlength;
-        this.size = right.size;
-        this.bytes = new byte[right.size];
-        set(right);
+        if (right != null) {
+            this.kmerlength = right.kmerlength;
+            this.size = right.size;
+            this.bytes = new byte[right.size];
+            set(right);
+        }else{
+            this.kmerlength = 0;
+            this.size = 0;
+            this.bytes = EMPTY_BYTES;
+        }
     }
 
     public byte getGeneCodeAtPosition(int pos) {
@@ -216,19 +226,26 @@
         clearLeadBit();
         return output;
     }
-    
-    protected void clearLeadBit(){
+
+    protected void clearLeadBit() {
         if (kmerlength % 4 != 0) {
             bytes[0] &= (1 << ((kmerlength % 4) << 1)) - 1;
         }
     }
 
     public void set(KmerBytesWritable newData) {
-        set(newData.bytes, 0, newData.size);
+        if (kmerlength != newData.kmerlength){
+            throw new IllegalArgumentException("kmerSize is different, try to use VKmerBytesWritable instead");
+        }
+        if (kmerlength > 0 ){
+            set(newData.bytes, 0, newData.size);
+        }
     }
 
     public void set(byte[] newData, int offset, int length) {
-        System.arraycopy(newData, offset, bytes, 0, size);
+        if (kmerlength > 0){
+            System.arraycopy(newData, offset, bytes, 0, size);
+        }
     }
 
     /**
@@ -239,16 +256,20 @@
     public void readFields(DataInput in) throws IOException {
         this.kmerlength = in.readInt();
         this.size = KmerUtil.getByteNumFromK(kmerlength);
-        if (this.bytes.length < this.size) {
-            this.bytes = new byte[this.size];
+        if (this.kmerlength > 0) {
+            if (this.bytes.length < this.size) {
+                this.bytes = new byte[this.size];
+            }
+            in.readFully(bytes, 0, size);
         }
-        in.readFully(bytes, 0, size);
     }
 
     @Override
     public void write(DataOutput out) throws IOException {
         out.writeInt(kmerlength);
-        out.write(bytes, 0, size);
+        if (kmerlength > 0) {
+            out.write(bytes, 0, size);
+        }
     }
 
     @Override
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 5a4329e..b958ec6 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
@@ -89,13 +89,20 @@
         super.setByReadReverse(array, start);
     }
 
+    @Override
     public void set(KmerBytesWritable newData) {
-        set(newData.kmerlength, newData.bytes, 0, newData.size);
+        if (newData == null){
+            this.set(0,null,0,0);
+        }else{
+            this.set(newData.kmerlength, newData.bytes, 0, newData.size);
+        }
     }
 
     public void set(int k, byte[] newData, int offset, int length) {
         reset(k);
-        System.arraycopy(newData, offset, bytes, 0, size);
+        if (k > 0 ){
+            System.arraycopy(newData, offset, bytes, 0, size);
+        }
     }
 
     /**
