diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
index d005d7e..baace6a 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -148,7 +148,23 @@
 	    return averageCoverage;
 	}
 	
-	/**
+	public PositionListWritable getStartReads() {
+        return startReads;
+    }
+
+    public void setStartReads(PositionListWritable startReads) {
+        this.startReads = startReads;
+    }
+
+    public PositionListWritable getEndReads() {
+        return endReads;
+    }
+
+    public void setEndReads(PositionListWritable endReads) {
+        this.endReads = endReads;
+    }
+
+    /**
 	 * Returns the length of the byte-array version of this node
 	 */
 	public int getSerializedLength() {
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
index 88b0339..6424f0a 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixMapper.java
@@ -90,12 +90,17 @@
             curReverseKmer.setByReadReverse(KMER_SIZE, array, 0);
             curKmerDir = curForwardKmer.compareTo(curReverseKmer) <= 0 ? KmerDir.FORWARD : KmerDir.REVERSE;
             setNextKmer(array[KMER_SIZE]);
-            //set value.nodeId
-            setNodeId(mateId, readID, 1);
-            //set value.edgeList
+            //set nodeId
+            setNodeId(mateId, readID, 0);
+            //set value.edgeList and value.threads/readId
             setEdgeListForNextKmer();
-            //set coverage = 1
+            //set value.coverage = 1
             outputNode.setAvgCoverage(1);
+            //set value.startReads because this is the first kmer in read
+            if(curKmerDir == KmerDir.FORWARD)
+                outputNode.setStartReads(nodeIdList);
+            else 
+                outputNode.setEndReads(nodeIdList);
             //output mapper result
             setMapperOutput(output);
             
@@ -105,9 +110,9 @@
             	setPreKmerByOldCurKmer();
             	setCurKmerByOldNextKmer();
             	setNextKmer(array[i]);
-        	    //set value.nodeId
+        	    //set nodeId
             	setNodeId(mateId, readID, i - KMER_SIZE + 1);
-                //set value.edgeList
+                //set value.edgeList and value.threads/readId
                 setEdgeListForPreKmer();
                 setEdgeListForNextKmer();
                 //set coverage = 1
@@ -120,9 +125,9 @@
             outputNode.reset();
         	setPreKmerByOldCurKmer();
         	setCurKmerByOldNextKmer();
-        	//set value.nodeId
+        	//set nodeId
         	setNodeId(mateId, readID, array.length - KMER_SIZE + 1);
-            //set value.edgeList
+            //set value.edgeList and value.threads/readId
             setEdgeListForPreKmer();
             //set coverage = 1
             outputNode.setAvgCoverage(1);
@@ -135,7 +140,6 @@
         nodeId.set(mateId, readID, posId);
         nodeIdList.reset();
         nodeIdList.append(nodeId);
-        outputNode.setNodeIdList(nodeIdList);
     }
     
     public void setEdgeListForPreKmer(){
@@ -146,11 +150,13 @@
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preForwardKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForPreKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_RR, nodeIdList);
     					break;
     				case REVERSE:
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preReverseKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForPreKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_RF, nodeIdList);
     					break;
     			}
     			break;
@@ -160,11 +166,13 @@
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preForwardKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForPreKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_FR, nodeIdList);
     					break;
     				case REVERSE:
     				    edgeListForPreKmer.reset();
     				    edgeListForPreKmer.append(preReverseKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForPreKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_FF, nodeIdList);
     					break;
     			}
     			break;
@@ -179,11 +187,13 @@
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextForwardKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_FF, edgeListForNextKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_FF, nodeIdList);
     					break;
     				case REVERSE:
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextReverseKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_FR, edgeListForNextKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_FR, nodeIdList);
     					break;
     			}
     			break;
@@ -193,11 +203,13 @@
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextForwardKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_RF, edgeListForNextKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_RF, nodeIdList);
     					break;
     				case REVERSE:
     					edgeListForNextKmer.reset();
     					edgeListForNextKmer.append(nextReverseKmer);
     					outputNode.setEdgeList(DirectionFlag.DIR_RR, edgeListForNextKmer);
+    					outputNode.setThreadList(DirectionFlag.DIR_RR, nodeIdList);
     					break;
     			}
     			break;
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
index 3a21bae..7ce1ce9 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GenomixReducer.java
@@ -38,10 +38,12 @@
 		
 		while (values.hasNext()) {
 		    tmpNode.set(values.next());
-		    outputNode.getNodeIdList().unionUpdate(tmpNode.getNodeIdList());
 		    for (byte d: DirectionFlag.values) {
 		        outputNode.getEdgeList(d).unionUpdate(tmpNode.getEdgeList(d));
+		        outputNode.getThreadList(d).unionUpdate(tmpNode.getThreadList(d));
 		    }
+		    outputNode.getStartReads().unionUpdate(tmpNode.getStartReads());
+		    outputNode.getEndReads().unionUpdate(tmpNode.getEndReads());
 		    averageCoverage += tmpNode.getAvgCoverage();
 		}
 		outputNode.setAvgCoverage(averageCoverage);
diff --git a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
index d92dc18..b1ab865 100644
--- a/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
+++ b/genomix/genomix-hadoop/src/main/java/edu/uci/ics/genomix/hadoop/graph/GenerateGraphViz.java
@@ -49,7 +49,7 @@
                 gv.addln(outputEdge);
                 /** add readIdSet **/
                 outputNode += " [shape=record, label = \"<f0> " + key.toString() 
-                        + "|<f1> " + value.getNodeIdList().printReadIdSet()
+                        + "|<f1> " + value.getThreadList(DirectionFlag.DIR_FF).printReadIdSet()
                         + "\"]\n";
                 gv.addln(outputNode);
             }
