diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
index 11d0998..34fb0f6 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/PositionListWritable.java
@@ -132,6 +132,9 @@
     
     public static int getCountByDataLength(int length) {
         if (length % PositionWritable.LENGTH != 0) {
+            for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
+                System.out.println(ste);
+            }
             throw new IllegalArgumentException("Length of positionlist is invalid");
         }
         return length / PositionWritable.LENGTH;
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/MapReadToNodeOperator.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/MapReadToNodeOperator.java
index e7f9ee2..cddbe4d 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/MapReadToNodeOperator.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/MapReadToNodeOperator.java
@@ -149,6 +149,9 @@
                 // minus 1 position of the incoming list to get the correct predecessor
                 for (PositionWritable pos : node.getIncomingList()) {
                     if (pos.getPosInRead() == 0) {
+                        for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
+                            System.out.println(ste);
+                        }
                         throw new IllegalArgumentException("The incoming position list contain invalid posInRead");
                     }
                     pos.set(pos.getReadID(), (byte) (pos.getPosInRead() - 1));
@@ -159,6 +162,9 @@
             offset += lengthPos;
             int lengthKmer = buffer.getInt(offset);
             if (node.getKmer().getLength() != lengthKmer) {
+                for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
+                    System.out.println(ste);
+                }
                 throw new IllegalStateException("Size of Kmer is invalid ");
             }
             setKmer(node.getKmer(), buffer.array(), offset + INT_LENGTH, isInitial);
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/aggregators/MergeReadIDAggregateFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/aggregators/MergeReadIDAggregateFactory.java
index f1ebdff..8c8c7fd 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/aggregators/MergeReadIDAggregateFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/dataflow/aggregators/MergeReadIDAggregateFactory.java
@@ -4,6 +4,8 @@
 import java.io.IOException;
 import java.nio.ByteBuffer;
 
+import edu.uci.ics.genomix.data.KmerUtil;
+import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
@@ -22,9 +24,11 @@
     private static final long serialVersionUID = 1L;
 
     private final int ValidPosCount;
+    private final int kmerLength;
 
     public MergeReadIDAggregateFactory(int readLength, int kmerLength) {
         ValidPosCount = getPositionCount(readLength, kmerLength);
+        this.kmerLength = kmerLength;
     }
 
     public static int getPositionCount(int readLength, int kmerLength) {
@@ -102,8 +106,14 @@
                     fieldOffset += BYTE_SIZE;
 
                     // read poslist
+                    int lengthPosList = fieldBuffer.getInt(fieldOffset);
+                    PositionListWritable.getCountByDataLength(lengthPosList);
                     fieldOffset += writeBytesToStorage(storages[posInRead], fieldBuffer, fieldOffset);
                     // read Kmer
+                    lengthPosList = fieldBuffer.getInt(fieldOffset);
+                    if (lengthPosList != KmerUtil.getByteNumFromK(kmerLength)){
+                        throw new IllegalStateException("Size of Kmer is invalid "); 
+                    }
                     fieldOffset += writeBytesToStorage(storages[posInRead], fieldBuffer, fieldOffset);
 
                     positionArray.count += 1;
