diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
new file mode 100644
index 0000000..4684a06
--- /dev/null
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/IntermediateNodeWritable.java
@@ -0,0 +1,141 @@
+package edu.uci.ics.genomix.type;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+import org.apache.hadoop.io.WritableComparable;
+
+public class IntermediateNodeWritable implements WritableComparable<IntermediateNodeWritable>, Serializable{
+
+    private static final long serialVersionUID = 1L;
+    public static final IntermediateNodeWritable EMPTY_NODE = new IntermediateNodeWritable();
+    
+    private KmerListWritable forwardForwardList;
+    private KmerListWritable forwardReverseList;
+    private KmerListWritable reverseForwardList;
+    private KmerListWritable reverseReverseList;
+    private long uuid;
+    
+    public IntermediateNodeWritable(){
+        forwardForwardList = new KmerListWritable();
+        forwardReverseList = new KmerListWritable();
+        reverseForwardList = new KmerListWritable();
+        reverseReverseList = new KmerListWritable();
+        uuid = 0L;
+    }
+    
+    public IntermediateNodeWritable(KmerListWritable FFList, KmerListWritable FRList,
+            KmerListWritable RFList, KmerListWritable RRList, long uuid) {
+        this();
+        set(FFList, FRList, RFList, RRList, uuid);
+    }
+    
+    public void set(IntermediateNodeWritable node){
+        set(node.forwardForwardList, node.forwardReverseList, node.reverseForwardList, 
+                node.reverseReverseList, node.uuid);
+    }
+    
+    public void set(KmerListWritable FFList, KmerListWritable FRList,
+            KmerListWritable RFList, KmerListWritable RRList, long uuid) {
+        this.forwardForwardList.set(FFList);
+        this.forwardReverseList.set(FRList);
+        this.reverseForwardList.set(RFList);
+        this.reverseReverseList.set(RRList);
+        this.uuid = uuid;
+    }
+
+    public void reset(int kmerSize) {
+        forwardForwardList.reset();
+        forwardReverseList.reset();
+        reverseForwardList.reset();
+        reverseReverseList.reset();
+        uuid = 0;
+    }
+    
+    public KmerListWritable getFFList() {
+        return forwardForwardList;
+    }
+
+    public void setFFList(KmerListWritable forwardForwardList) {
+        this.forwardForwardList = forwardForwardList;
+    }
+
+    public KmerListWritable getFReList() {
+        return forwardReverseList;
+    }
+
+    public void setFRList(KmerListWritable forwardReverseList) {
+        this.forwardReverseList = forwardReverseList;
+    }
+
+    public KmerListWritable getRFList() {
+        return reverseForwardList;
+    }
+
+    public void setRFList(KmerListWritable reverseForwardList) {
+        this.reverseForwardList = reverseForwardList;
+    }
+
+    public KmerListWritable getRRList() {
+        return reverseReverseList;
+    }
+
+    public void setRRList(KmerListWritable reverseReverseList) {
+        this.reverseReverseList = reverseReverseList;
+    }
+
+    @Override
+    public void readFields(DataInput in) throws IOException {
+        this.forwardForwardList.readFields(in);
+        this.forwardReverseList.readFields(in);
+        this.reverseForwardList.readFields(in);
+        this.reverseReverseList.readFields(in);
+        this.uuid = in.readLong();
+    }
+
+    @Override
+    public void write(DataOutput out) throws IOException {
+        this.forwardForwardList.write(out);
+        this.forwardReverseList.write(out);
+        this.reverseForwardList.write(out);
+        this.reverseReverseList.write(out);
+        out.writeLong(this.uuid);
+    }
+
+    @Override
+    public int compareTo(IntermediateNodeWritable other) {
+        // TODO Auto-generated method stub
+        return this.uuid > other.uuid ? 1 : ((this.uuid == other.uuid) ? 0 : -1);
+    }
+    
+    @Override
+    public int hashCode() {
+        return Long.valueOf(this.uuid).hashCode(); 
+    }
+    
+    @Override
+    public boolean equals(Object o) {
+        if (o instanceof IntermediateNodeWritable) {
+            IntermediateNodeWritable nw = (IntermediateNodeWritable) o;
+            return (this.forwardForwardList.equals(nw.forwardForwardList)
+                    && this.forwardReverseList.equals(nw.forwardReverseList)
+                    && this.reverseForwardList.equals(nw.reverseForwardList)
+                    && this.reverseReverseList.equals(nw.reverseReverseList) && (this.uuid == nw.uuid));
+        }
+        return false;
+    }
+    
+    @Override
+    public String toString() {
+        StringBuilder sbuilder = new StringBuilder();
+        sbuilder.append('(');
+        sbuilder.append(forwardForwardList.toString()).append('\t');
+        sbuilder.append(forwardReverseList.toString()).append('\t');
+        sbuilder.append(reverseForwardList.toString()).append('\t');
+        sbuilder.append(reverseReverseList.toString()).append('\t');
+        sbuilder.append(uuid).append(')');
+        return sbuilder.toString();
+    }
+}
diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
index c4a6865..4240b1d 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/KmerListWritable.java
@@ -87,6 +87,18 @@
         return posIter;
     }
     
+    public void set(KmerListWritable otherList) {
+        set(otherList.valueCount, otherList.storage, otherList.offset);
+    }
+
+    public void set(int valueCount, byte[] newData, int offset) {
+        this.valueCount = valueCount;
+        setSize(valueCount * KMER_LENGTH);
+        if (valueCount > 0) {
+            System.arraycopy(newData, offset, storage, this.offset, valueCount * KMER_LENGTH);
+        }
+    }
+    
     @Override
     public Iterator<KmerBytesWritable> iterator() {
         Iterator<KmerBytesWritable> it = new Iterator<KmerBytesWritable>() {
diff --git a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
index ae511e8..2b7dd81 100644
--- a/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
+++ b/genomix/genomix-hyracks/src/main/java/edu/uci/ics/genomix/hyracks/newgraph/dataflow/ReadsKeyValueParserFactory.java
@@ -26,7 +26,9 @@
 
 import edu.uci.ics.genomix.hyracks.data.primitive.PositionReference;
 import edu.uci.ics.genomix.type.GeneCode;
+import edu.uci.ics.genomix.type.IntermediateNodeWritable;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
+import edu.uci.ics.genomix.type.KmerListWritable;
 import edu.uci.ics.hyracks.api.comm.IFrameWriter;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
@@ -69,8 +71,11 @@
         return new IKeyValueParser<LongWritable, Text>() {
 
             private KmerBytesWritable kmer = new KmerBytesWritable(kmerSize);
+            private KmerBytesWritable nextKmer = new KmerBytesWritable(kmerSize);
             private PositionReference pos = new PositionReference();
-
+            private KmerListWritable kmerList = new KmerListWritable();
+            private IntermediateNodeWritable interMediateNode = new IntermediateNodeWritable();
+            
             @Override
             public void parse(LongWritable key, Text value, IFrameWriter writer) throws HyracksDataException {
                 String[] geneLine = value.toString().split("\\t"); // Read the Real Gene Line
@@ -103,6 +108,10 @@
                     return;
                 }
                 kmer.setByRead(array, 0);
+                nextKmer.set(kmer);
+                nextKmer.shiftKmerWithNextChar(array[kmerSize]);
+                kmerList.append(nextKmer);
+                interMediateNode.setFFList(kmerList);
                 InsertToFrame(kmer, readID, 1, writer);
 
                 /** middle kmer */
