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 f6061fd..f9ebd15 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
@@ -639,6 +639,7 @@
         KmerBytesWritable.appendOneByteAtPosition(preKmer.lettersInKmer - initialKmerSize + k - 4 + 1, cacheByte,
                 bytes, kmerStartOffset, bytesUsed);
         clearLeadBit();
+        saveHeader(lettersInKmer);
     }
     
     public void mergeWithRRKmer(int kmerSize, KmerBytesWritable kmer) {
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/2 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/2
deleted file mode 100644
index 0f501fe..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/2
+++ /dev/null
@@ -1 +0,0 @@
-1	AATA
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/3 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/3
deleted file mode 100644
index b90246c..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/3
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAG
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/4 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/4
deleted file mode 100644
index 3f1cd5c..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/4
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAGA
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/5 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/5
deleted file mode 100644
index a720dc4..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/5
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAGAA
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/6 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/6
deleted file mode 100644
index 7a95b7c..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/6
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAGAAC
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/7 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/7
deleted file mode 100644
index ce4b8a8..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/7
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAGAACT
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/8 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/8
deleted file mode 100644
index 3959d4d..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/8
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAGAACTT
diff --git a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/9 b/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/9
deleted file mode 100644
index 89ead1e..0000000
--- a/genomix/genomix-hadoop/data/webmap/pathmerge_TestSet/9
+++ /dev/null
@@ -1 +0,0 @@
-1	AATAGAACTTA
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java
index cb163a7..1916fc2 100644
--- a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestCase.java
@@ -2,45 +2,53 @@
 
 import java.io.DataOutputStream;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
 
 import junit.framework.TestCase;
 
-import org.apache.commons.io.FileUtils;
-import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.mapred.JobConf;
-import org.apache.hadoop.mapred.MiniMRCluster;
 import org.junit.Test;
 
 import edu.uci.ics.genomix.hadoop.pmcommon.HadoopMiniClusterTest;
 
-@SuppressWarnings("deprecation")
+
+@SuppressWarnings({ "deprecation", "unused" })
 public class GraphBuildingTestCase extends TestCase{
 
     private final String RESULT_PATH;
     private final String HADOOP_CONF_PATH;
     private final String HDFS_INPUTPATH;
     private FileSystem dfs;
+    private JobConf conf;
 
     private static final int COUNT_REDUCER = 1;
     private final int SIZE_KMER;
         
     public GraphBuildingTestCase(String resultFileDir, String hadoopConfPath,
-            String hdfsInputPath, int kmerSize, FileSystem dfs){
+            String hdfsInputPath, int kmerSize, FileSystem dfs, JobConf conf){
+        super("test");
         this.RESULT_PATH = resultFileDir;
         this.HADOOP_CONF_PATH = hadoopConfPath;
         this.HDFS_INPUTPATH = hdfsInputPath;
         this.SIZE_KMER = kmerSize;
         this.dfs = dfs;
+        this.conf = conf;
+    }
+    
+    private void waitawhile() throws InterruptedException {
+        synchronized (this) {
+            this.wait(20);
+        }
     }
     
     @Test
     public void test() throws Exception {
+        setUp();
         TestMapKmerToNode();
+        tearDown();
+        waitawhile();
     }
     
     public void TestMapKmerToNode() throws Exception {
@@ -52,9 +60,9 @@
     
     
     private void dumpResult() throws IOException {
-        Path src = new Path(RESULT_PATH);
-        Path dest = new Path(RESULT_PATH);
-        dfs.copyToLocalFile(src, dest);
-//        HadoopMiniClusterTest.copyResultsToLocal(RESULT_PATH, "actual/test.txt", false, conf, true, dfs);
+//        Path src = new Path(RESULT_PATH);
+//        Path dest = new Path(RESULT_PATH);
+//        dfs.copyToLocalFile(src, dest);
+        HadoopMiniClusterTest.copyResultsToLocal(RESULT_PATH, RESULT_PATH + "/test.txt", false, conf, true, dfs);
     }
 }
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java
index 67a6e3b..dd9c05f 100644
--- a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTestSuite.java
@@ -17,6 +17,7 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.MiniMRCluster;
 
+
 @SuppressWarnings("deprecation")
 public class GraphBuildingTestSuite extends TestSuite{
 
@@ -24,9 +25,15 @@
     public static final String PreFix = "data/webmap/pathmerge_TestSet"; 
     public static final String[] TestDir = { PreFix + File.separator
         + "2", PreFix + File.separator
-        + "3"};
+        + "3", PreFix + File.separator
+        + "4", PreFix + File.separator
+        + "5", PreFix + File.separator
+        + "6", PreFix + File.separator
+        + "7", PreFix + File.separator
+        + "8", PreFix + File.separator
+        + "9"};
     
-    private JobConf conf = new JobConf();
+    private static JobConf conf = new JobConf();
     private static final String ACTUAL_RESULT_DIR = "actual";
     private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR + File.separator + "conf.xml";
     private static final String HDFS_INPUTPATH = "/webmap";
@@ -35,7 +42,7 @@
     private MiniMRCluster mrCluster;
     private static FileSystem dfs;
     
-    public void setup() throws Exception{
+    public void setUp() throws Exception{
         FileUtils.forceMkdir(new File(ACTUAL_RESULT_DIR));
         FileUtils.cleanDirectory(new File(ACTUAL_RESULT_DIR));
         startHadoop();
@@ -80,12 +87,14 @@
     
     public static Test suite() throws Exception {
         GraphBuildingTestSuite testSuite = new GraphBuildingTestSuite();
+        testSuite.setUp();
+//        FileSystem dfs = FileSystem.get(testSuite.conf);
         for (String testPathStr : TestDir) {
             File testDir = new File(testPathStr);
             String resultFileName = ACTUAL_RESULT_DIR + File.separator + 
                     "bin" + File.separator + testDir.getName();
             testSuite.addTest(new GraphBuildingTestCase(resultFileName, HADOOP_CONF_PATH, 
-                    HDFS_INPUTPATH + File.separator + testDir.getName(), SIZE_KMER, dfs));
+                    HDFS_INPUTPATH + File.separator + testDir.getName(), SIZE_KMER, dfs, conf));
         }
         return testSuite;
     }
diff --git a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/SingleGraphBuildingTest.java
similarity index 98%
rename from genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java
rename to genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/SingleGraphBuildingTest.java
index f16e0a5..ed601ec 100644
--- a/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/GraphBuildingTest.java
+++ b/genomix/genomix-hadoop/src/test/java/edu/uci/ics/genomix/hadoop/contrailgraphbuilding/SingleGraphBuildingTest.java
@@ -17,7 +17,7 @@
 import edu.uci.ics.genomix.hadoop.pmcommon.HadoopMiniClusterTest;
 
 @SuppressWarnings("deprecation")
-public class GraphBuildingTest {
+public class SingleGraphBuildingTest {
 
     private JobConf conf = new JobConf();
     private static final String ACTUAL_RESULT_DIR = "actual";
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/2/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/2/part-00000
index 6be54c5..dc6250b 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/2/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/2/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/3/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/3/part-00000
index 6f2b1d8..a672f70 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/3/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/3/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/4/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/4/part-00000
index 7fbe1a4..b47312f 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/4/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/4/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/5/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/5/part-00000
index d369b61..3b06e4c 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/5/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/5/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/6/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/6/part-00000
index 72b4009..330821c 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/6/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/6/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/7/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/7/part-00000
index 394c8c9..a7be3db 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/7/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/7/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/8/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/8/part-00000
index db653a7..50bf862 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/8/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/8/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/data/PathMergeTestSet/9/part-00000 b/genomix/genomix-pregelix/data/PathMergeTestSet/9/part-00000
index b7760c2..1b8024d 100755
--- a/genomix/genomix-pregelix/data/PathMergeTestSet/9/part-00000
+++ b/genomix/genomix-pregelix/data/PathMergeTestSet/9/part-00000
Binary files differ
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
index 5662da6..edb305f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/InitialGraphCleanInputFormat.java
@@ -76,7 +76,7 @@
             vertexValue.setRFList(node.getRFList());
             vertexValue.setRRList(node.getRRList());
             // TODO make this more efficient (don't use toString)
-            vertexValue.setActualKmer(new VKmerBytesWritable(getRecordReader().getCurrentKey().toString()));
+            vertexValue.setActualKmer(new VKmerBytesWritable(vertexId));
             vertexValue.setState(State.IS_NON);
             vertex.setVertexValue(vertexValue);
         }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
index bb20797..0b89769 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GenerateGraphViz.java
@@ -81,6 +81,9 @@
             VKmerBytesWritable edge = kmerIterator.next();
             outputEdge += outputNode + " -> " + edge.toString() + "[color = \"red\" label =\"RR\"]\n";
         }
+        //TODO should output actualKmer instead of kmer
+        if(outputEdge == "")
+            outputEdge += outputNode;
         return outputEdge;
     }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
index 3a37794..f67ff6b 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
@@ -6,8 +6,6 @@
 
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
-import edu.uci.ics.genomix.type.KmerBytesWritable;
-import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 import edu.uci.ics.genomix.type.VKmerListWritable;
 
@@ -323,7 +321,6 @@
      */
     public void processMerges(byte neighborToDeleteDir, VKmerBytesWritable nodeToDelete,
             byte neighborToMergeDir, VKmerBytesWritable nodeToAdd, 
-
             int kmerSize, VKmerBytesWritable kmer){
         switch (neighborToDeleteDir & MessageFlag.DIR_MASK) {
             case MessageFlag.DIR_FF:
@@ -345,20 +342,21 @@
         }
         // TODO: remove switch below and replace with general direction merge
 //        this.getKmer().mergeWithDirKmer(neighborToMergeDir);
-        
-        switch (neighborToMergeDir & MessageFlag.DIR_MASK) {
-            case MessageFlag.DIR_FF:
-                this.getFFList().append(nodeToAdd);
-                break;
-            case MessageFlag.DIR_FR:
-                this.getFRList().append(nodeToAdd);
-                break;
-            case MessageFlag.DIR_RF:
-                this.getRFList().append(nodeToAdd);
-                break;
-            case MessageFlag.DIR_RR:
-                this.getRRList().append(nodeToAdd);
-                break;
+        if(nodeToAdd != null){ //if null, nodeToAdd is empty and so another node may be head or tail
+            switch (neighborToMergeDir & MessageFlag.DIR_MASK) {
+                case MessageFlag.DIR_FF:
+                    this.getFFList().append(nodeToAdd);
+                    break;
+                case MessageFlag.DIR_FR:
+                    this.getFRList().append(nodeToAdd);
+                    break;
+                case MessageFlag.DIR_RF:
+                    this.getRFList().append(nodeToAdd);
+                    break;
+                case MessageFlag.DIR_RR:
+                    this.getRRList().append(nodeToAdd);
+                    break;
+            }
         }
     }
     
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
index 58ef4d6..4936d17 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
@@ -283,7 +283,7 @@
      * check if A need to be flipped with successor
      */
     public boolean ifFilpWithSuccessor(){
-        if(getVertexValue().getFRList().getLength() > 0)
+        if(getVertexValue().getFRList().getCountOfPosition() > 0)
             return true;
         else
             return false;
@@ -293,7 +293,7 @@
      * check if A need to be filpped with predecessor
      */
     public boolean ifFlipWithPredecessor(){
-        if(getVertexValue().getRFList().getLength() > 0)
+        if(getVertexValue().getRFList().getCountOfPosition() > 0)
             return true;
         else
             return false;
@@ -304,9 +304,9 @@
      */
     public void setSuccessorAdjMsg(){
         outFlag &= MessageFlag.DIR_CLEAR;
-        if(getVertexValue().getFFList().getLength() > 0)
+        if(getVertexValue().getFFList().getCountOfPosition() > 0)
             outFlag |= MessageFlag.DIR_FF;
-        else if(getVertexValue().getFRList().getLength() > 0)
+        else if(getVertexValue().getFRList().getCountOfPosition() > 0)
             outFlag |= MessageFlag.DIR_FR;
         else
             outFlag |= MessageFlag.DIR_NO;
@@ -317,9 +317,9 @@
      */
     public void setPredecessorAdjMsg(){
         outFlag &= MessageFlag.DIR_CLEAR;
-        if(getVertexValue().getRFList().getLength() > 0)
+        if(getVertexValue().getRFList().getCountOfPosition() > 0)
             outFlag |= MessageFlag.DIR_RF;
-        else if(getVertexValue().getRRList().getLength() > 0)
+        else if(getVertexValue().getRRList().getCountOfPosition() > 0)
             outFlag |= MessageFlag.DIR_RR;
         else
             outFlag |= MessageFlag.DIR_NO;
@@ -664,14 +664,14 @@
                 break;
             case MessageFlag.DIR_RF:
                 selfString = getVertexValue().getActualKmer().toString();
-                match = selfString.substring(0,kmerSize - 1); 
+                match = selfString.substring(0, kmerSize - 1); 
                 msgString = GeneCode.reverseComplement(msg.getActualKmer().toString());
                 index = msgString.lastIndexOf(match) + kmerSize - 2;
                 tmpKmer.setByReadReverse(index + 1, msgString.substring(0, index + 1).getBytes(), 0);
                 break;
             case MessageFlag.DIR_RR:
                 selfString = getVertexValue().getActualKmer().toString();
-                match = selfString.substring(0,kmerSize - 1); 
+                match = selfString.substring(0, kmerSize - 1); 
                 msgString = msg.getActualKmer().toString();
                 index = msgString.lastIndexOf(match) + kmerSize - 2;
                 tmpKmer.setByRead(index + 1, msgString.substring(0, index + 1).getBytes(), 0);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
index c042f49..d16e6d5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
@@ -46,7 +46,6 @@
     MapReduceVertex {
 
     private ArrayList<MessageWritable> receivedMsgList = new ArrayList<MessageWritable>();
-    VKmerBytesWritable tmpKmer = new VKmerBytesWritable();
     
     private boolean isFakeVertex = false;
     /**
@@ -60,11 +59,11 @@
         headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
         selfFlag = (byte)(getVertexValue().getState() & State.VERTEX_MASK);
         if(incomingMsg == null)
-            incomingMsg = new MessageWritable(kmerSize);
+            incomingMsg = new MessageWritable();
         if(outgoingMsg == null)
-            outgoingMsg = new MessageWritable(kmerSize);
+            outgoingMsg = new MessageWritable();
         else
-            outgoingMsg.reset(kmerSize);
+            outgoingMsg.reset();
         receivedMsgList.clear();
         if(reverseKmer == null)
             reverseKmer = new VKmerBytesWritable();
@@ -80,7 +79,9 @@
         }
         isFakeVertex = ((byte)getVertexValue().getState() & State.FAKEFLAG_MASK) > 0 ? true : false;
         if(destVertexId == null)
-            destVertexId = new VKmerBytesWritable(kmerSize);
+            destVertexId = new VKmerBytesWritable();
+        if(tmpKmer == null)
+            tmpKmer = new VKmerBytesWritable();
     }
 
     /**
@@ -182,13 +183,13 @@
             incomingMsg = msgIterator.next();
             /** final Vertex Responses To FakeVertex **/
             if((byte)(incomingMsg.getFlag() & MessageFlag.KILL_MASK) == MessageFlag.KILL){
-                if((byte)(incomingMsg.getFlag() & MessageFlag.DIR_MASK) == MessageFlag.DIR_FROM_DEADVERTEX){
+                if((byte)(incomingMsg.getFlag() & MessageFlag.DEAD_MASK) == MessageFlag.DIR_FROM_DEADVERTEX){
                     responseToDeadVertex();
                 } else{
                     broadcaseKillself();
                 }
             } else {
-                /** for final processing **/
+                /** for final processing (2) **/
                 if(getMsgFlag() == MessageFlag.IS_FINAL){
                     sendFinalMergeMsg();
                     break;
@@ -241,7 +242,7 @@
         }
         else if (getSuperstep() % 3 == 0 && getSuperstep() <= maxIteration) {
             if(!isFakeVertex){
-                /** for processing final merge **/
+                /** for processing final merge (1) **/
                 if(msgIterator.hasNext()){
                     incomingMsg = msgIterator.next();
                     if(getMsgFlag() == MessageFlag.IS_FINAL){
@@ -260,7 +261,7 @@
                         voteToHalt();
                 }
             }
-            /** Fake vertex agregates message and group them by actual kmer **/
+            /** Fake vertex agregates message and group them by actual kmer (2) **/
             else{
                 kmerMapper.clear();
                 /** Mapper **/
@@ -275,7 +276,7 @@
                 if(selfFlag != State.IS_HEAD)
                     voteToHalt();
             } 
-            /** Fake vertex agregates message and group them by actual kmer **/
+            /** Fake vertex agregates message and group them by actual kmer (1) **/
             else{
                 kmerMapper.clear();
                 /** Mapper **/
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index de2fcd3..4f0f39b 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -15,6 +15,7 @@
 import edu.uci.ics.genomix.pregelix.operator.bubblemerge.BubbleMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.pathmerge.P2ForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.pathmerge.MapReduceVertex;
+import edu.uci.ics.genomix.pregelix.operator.pathmerge.P4ForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.operator.splitrepeat.SplitRepeatVertex;
 import edu.uci.ics.genomix.pregelix.operator.tipremove.TipAddVertex;
 import edu.uci.ics.genomix.pregelix.operator.tipremove.TipRemoveVertex;
@@ -77,22 +78,22 @@
 //                + "P3ForMergeGraph.xml");
 //    }
     
-//    private static void generateP4ForMergeGraphJob(String jobName, String outputPath) throws IOException {
-//        PregelixJob job = new PregelixJob(jobName);
-//        job.setVertexClass(P4ForPathMergeVertex.class);
-//        job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
-//        job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
-//        job.setDynamicVertexValueSize(true);
-//        job.setOutputKeyClass(KmerBytesWritable.class);
-//        job.setOutputValueClass(VertexValueWritable.class);
-//        job.getConfiguration().setInt(P4ForPathMergeVertex.KMER_SIZE, 3);
-//        job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
-//    }
-//
-//    private static void genP4ForMergeGraph() throws IOException {
-//        generateP4ForMergeGraphJob("P4ForMergeGraph", outputBase
-//                + "P4ForMergeGraph.xml");
-//    }
+    private static void generateP4ForMergeGraphJob(String jobName, String outputPath) throws IOException {
+        PregelixJob job = new PregelixJob(jobName);
+        job.setVertexClass(P4ForPathMergeVertex.class);
+        job.setVertexInputFormatClass(InitialGraphCleanInputFormat.class);
+        job.setVertexOutputFormatClass(GraphCleanOutputFormat.class);
+        job.setDynamicVertexValueSize(true);
+        job.setOutputKeyClass(VKmerBytesWritable.class);
+        job.setOutputValueClass(VertexValueWritable.class);
+        job.getConfiguration().setInt(P4ForPathMergeVertex.KMER_SIZE, 3);
+        job.getConfiguration().writeXml(new FileOutputStream(new File(outputPath)));
+    }
+
+    private static void genP4ForMergeGraph() throws IOException {
+        generateP4ForMergeGraphJob("P4ForMergeGraph", outputBase
+                + "P4ForMergeGraph.xml");
+    }
     
     private static void generateMapReduceGraphJob(String jobName, String outputPath) throws IOException {
         PregelixJob job = new PregelixJob(jobName);
@@ -228,13 +229,16 @@
     }
     
     public static void main(String[] args) throws IOException {
-        genSplitRepeatGraph();
+        genMapReduceGraph();
+        genLogAlgorithmForMergeGraph();
+        genP4ForMergeGraph();
         genTipAddGraph();
-        genBridgeAddGraph();
         genTipRemoveGraph();
+        genBridgeAddGraph();
         genBridgeRemoveGraph();
         genBubbleAddGraph();
         genBubbleMergeGraph();
+        genSplitRepeatGraph();
     }
 
 }
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
index 7b937c8..b1b0fc0 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeSmallTestSuite.java
@@ -45,14 +45,14 @@
 
     public static final String PreFix = "data/PathMergeTestSet"; //"graphbuildresult";
     public static final String[] TestDir = { PreFix + File.separator
-    + "2", PreFix + File.separator
-    + "3", PreFix + File.separator
-    + "4", PreFix + File.separator
-    + "5", PreFix + File.separator
-    + "6", PreFix + File.separator
-    + "7", PreFix + File.separator
-    + "8", PreFix + File.separator
-    + "9"};
+//    + "2", PreFix + File.separator
+//    + "3", PreFix + File.separator
+//    + "4", PreFix + File.separator
+//    + "5", PreFix + File.separator
+//    + "6", PreFix + File.separator
+//    + "7", PreFix + File.separator
+//    + "8", PreFix + File.separator
+    + "2"};
     private static final String ACTUAL_RESULT_DIR = "data/actual/pathmerge";
     private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
     private static final String PATH_TO_CLUSTER_STORE = "src/test/resources/cluster/stores.properties";
