diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
index e4317f0..a1a15a6 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/ValueStateWritable.java
@@ -4,7 +4,6 @@
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.genomix.pregelix.operator.NaiveAlgorithmForPathMergeVertex;
 import edu.uci.ics.genomix.pregelix.type.State;
 import edu.uci.ics.genomix.type.GeneCode;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
@@ -19,7 +18,7 @@
 
 	public ValueStateWritable() {
 		state = State.NON_VERTEX;
-		mergeChain = new VKmerBytesWritable(-1);
+		mergeChain = new VKmerBytesWritable(0);
 	}
 
 	public ValueStateWritable(byte adjMap, byte state, VKmerBytesWritable mergeChain) {
@@ -53,7 +52,7 @@
 	public int getLengthOfMergeChain() {
 		return mergeChain.getKmerLength();
 	}
-
+	
 	public VKmerBytesWritable getMergeChain() {
 		return mergeChain;
 	}
@@ -87,8 +86,8 @@
 	
 	@Override
 	public String toString() {
-		if(mergeChain.getKmerLength() == -1 || mergeChain.getKmerLength() == 0)
-			return GeneCode.getSymbolFromBitMap(adjMap);
+		//if(mergeChain.getKmerLength() == -1 || mergeChain.getKmerLength() == 0)
+		//	return GeneCode.getSymbolFromBitMap(adjMap);
 		return 	GeneCode.getSymbolFromBitMap(adjMap) + "\t" +
 				getLengthOfMergeChain() + "\t" +
 				mergeChain.toString();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java
index 6db02c7..5187f1c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/NaiveAlgorithmForPathMergeVertex.java
@@ -156,6 +156,10 @@
 	@Override
 	public void compute(Iterator<NaiveAlgorithmMessageWritable> msgIterator) {
 		initVertex();
+		/*if(getVertexId().toString().equals("TCCTACGAATTAATGCTCTCCCACGCAACATCACCATATCTTCACGGGAGAGCCG"))
+			System.out.println();
+		if(getVertexId().toString().equals("ATCCTACGAATTAATGCTCTCCCACGCAACATCACCATATCTTCACGGGAGAGCC"))
+			System.out.println();*/
 		if (getSuperstep() == 1) {
 			if(GraphVertexOperation.isHeadVertex(getVertexValue().getAdjMap())){ 
 				msg.set(getVertexId(), chainVertexId, getVertexId(), (byte)0, false);
@@ -171,12 +175,8 @@
 		//head node sends message to path node
 		else if(getSuperstep()%2 == 1 && getSuperstep() <= maxIteration){
 			while (msgIterator.hasNext()){
-				//if(getSuperstep() == 3 && GraphVertexOperation.isRearVertex(getVertexValue().getAdjMap()))
-				//	voteToHalt();
-				//else{
 				msg = msgIterator.next();
 				sendMsgToPathVertex();
-				//}
 			}
 		}
 		//path node sends message back to head node
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/TwoStepLogAlgorithmForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/TwoStepLogAlgorithmForPathMergeVertex.java
index 0ac4345..712b614 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/TwoStepLogAlgorithmForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/TwoStepLogAlgorithmForPathMergeVertex.java
@@ -177,7 +177,7 @@
 	 * path send message to head 
 	 */
 	public void responseMsgToHeadVertex(){
-		if(getVertexValue().getLengthOfMergeChain() == -1){
+		if(getVertexValue().getLengthOfMergeChain() == 0){
 			getVertexValue().setMergeChain(getVertexId());
 			setVertexValue(getVertexValue());
 		}
@@ -327,6 +327,10 @@
 	@Override
 	public void compute(Iterator<LogAlgorithmMessageWritable> msgIterator) {
 		initVertex();
+		/*if(getVertexId().toString().equals("TCCTACGAATTAATGCTCTCCCACGCAACATCACCATATCTTCACGGGAGAGCCG"))
+			System.out.println();
+		if(getVertexId().toString().equals("ATCCTACGAATTAATGCTCTCCCACGCAACATCACCATATCTTCACGGGAGAGCC"))
+			System.out.println();*/
 		if (getSuperstep() == 1) 
 			startSendMsg();
 		else if(getSuperstep() == 2)
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java
index c17abc9..88bec61 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateSmallFile.java
@@ -1,7 +1,9 @@
 package edu.uci.ics.genomix.pregelix.sequencefile;
 
+import java.io.File;
 import java.io.IOException;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -39,10 +41,12 @@
 	 */
 	public static void main(String[] args) throws IOException {
 		// TODO Auto-generated method stub
-		Path dir = new Path("data");
+		Path dir = new Path("data/test8m");
+		Path outDir = new Path("data/input/test");
+		FileUtils.cleanDirectory(new File("data/input/test"));
 		Path inFile = new Path(dir, "part-0");
-		Path outFile = new Path(dir, "part-0-out-20000000");
-		generateNumOfLinesFromBigFile(inFile,outFile,20000000);
+		Path outFile = new Path(outDir, "part-0-out-100");
+		generateNumOfLinesFromBigFile(inFile,outFile,100);
 	}
 
 }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
index 50f1679..79538b8 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
@@ -56,20 +56,20 @@
 		OutputStreamWriter writer;
 		try {
 			writer = new OutputStreamWriter(new FileOutputStream("graph/55/SinglePath_55"));
-			writer.write(simplePath(55,320,1));
+			writer.write(simplePath(55,60,1));
 			writer.close();
-			/*writer = new OutputStreamWriter(new FileOutputStream("graph/55/SimplePath_55"));
+			writer = new OutputStreamWriter(new FileOutputStream("graph/55/SimplePath_55"));
 			writer.write(simplePath(55,60,3));
 			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/55/TreePath"));
+			writer = new OutputStreamWriter(new FileOutputStream("graph/55/TreePath_55"));
 			writer.write(treePath(55, 5, 5, 3));
 			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/55/CyclePath"));
+			writer = new OutputStreamWriter(new FileOutputStream("graph/55/CyclePath_55"));
 			writer.write(cyclePath(55,60));
 			writer.close();
-			writer = new OutputStreamWriter(new FileOutputStream("graph/55/BridgePath"));
+			writer = new OutputStreamWriter(new FileOutputStream("graph/55/BridgePath_55"));
 			writer.write(bridgePath(55,2));
-			writer.close();*/
+			writer.close();
 		} catch (IOException e) {
 			e.printStackTrace();
 		}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java
index b3ba49d..d79bb91 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/GraphBuildTest.java
@@ -34,15 +34,14 @@
 	private static final String ACTUAL_RESULT_DIR = "graphbuildresult";
 	private static final String PATH_TO_HADOOP_CONF = "src/test/resources/hadoop/conf";
 
-	private static final String DATA_PATH = "data/TwoKmer";
-	private static final String HDFS_INPUT_PATH = "/CyclePath2";
-	private static final String HDFS_OUTPUT_PATH = "/CyclePath2_result";
+	private static final String DATA_PATH = "data/TreePath_55";
+	private static final String HDFS_INPUT_PATH = "/test";
+	private static final String HDFS_OUTPUT_PATH = "/result";
 
 	private static final String DUMPED_RESULT = ACTUAL_RESULT_DIR
 			+ HDFS_OUTPUT_PATH + "/result.txt";
-	private static final String CONVERT_RESULT = DUMPED_RESULT + ".txt";
+	private static final String CONVERT_RESULT = "graph/result.txt.txt";
 	private static final String EXPECTED_PATH = "src/test/resources/expected/result2";
-	private static final String EXPECTED_REVERSE_PATH = "src/test/resources/expected/result_reverse";
 
 	private static final String HADOOP_CONF_PATH = ACTUAL_RESULT_DIR
 			+ File.separator + "conf.xml";
@@ -65,7 +64,7 @@
 		FileInputFormat.setInputPaths(conf, HDFS_INPUT_PATH);
 		FileOutputFormat.setOutputPath(conf, new Path(HDFS_OUTPUT_PATH));
 
-		conf.setInt(GenomixJob.KMER_LENGTH, 5);
+		conf.setInt(GenomixJob.KMER_LENGTH, 55);
 		driver = new Driver(
 				edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.CC_HOST,
 				edu.uci.ics.hyracks.hdfs.utils.HyracksUtils.TEST_HYRACKS_CC_CLIENT_PORT,
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
index 353fc6d..217f59a 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/MergePathTest.java
@@ -19,8 +19,10 @@
 
 public class MergePathTest {
 	public static final String PATH_TO_TESTSTORE = "testcase/pathmerge/"; 
-	public static final String NAIVE_DATA_INPUT = "genomix_result/pathmerge/naive_35";
-	public static final String LOG_DATA_INPUT = "genomix_result/pathmerge/log_12";
+	//"genomix_result/pathmerge/new_naive";
+	public static final String NAIVE_DATA_INPUT = "genomix_result/pathmerge/new_naive";//"actual/NaiveAlgorithmForMergeGraph/BinaryOutput/test";
+	//"genomix_result/pathmerge/new_log";
+	public static final String LOG_DATA_INPUT = "genomix_result/pathmerge/new_log";//"actual/TwoStepLogAlgorithmForMergeGraph/BinaryOutput/test";
 	public static final String TEXT_OUTPUT = PATH_TO_TESTSTORE + "textfile";
 	public static final String CHAIN_OUTPUT = PATH_TO_TESTSTORE + "chain";
 	
@@ -56,14 +58,13 @@
 				if (key == null || value == null){
 					break;
 				}
-				if(value.getLengthOfMergeChain() != -1
-						&& value.getState() == State.FINAL_VERTEX){
-					bw.write(value.getLengthOfMergeChain() + "\t" +
-							value.getMergeChain().toString() + "\t" +
-							GeneCode.getSymbolFromBitMap(value.getAdjMap()));
-					
-					bw.newLine();
-				}
+				/*bw.write(value.getLengthOfMergeChain() + "\t" +
+						value.getMergeChain().toString() + "\t" +
+						GeneCode.getSymbolFromBitMap(value.getAdjMap()) + "\t" +
+						key.toString());*/
+				bw.write(key.toString() + "\t" + 
+						value.toString());
+				bw.newLine();
 		    }
 		    reader.close();
 		}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestCase.java
index 67b6f21..4b6d367 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestCase.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestCase.java
@@ -77,7 +77,7 @@
 	private void compareResults() throws Exception {
 		dfs.copyToLocalFile(FileOutputFormat.getOutputPath(job), new Path(
 				resultFileDir));
-		GenerateTextFile.generateFromPathmergeResult(5, resultFileDir, textFileDir);
+		GenerateTextFile.generateFromPathmergeResult(55, resultFileDir, textFileDir);
 		// TestUtils.compareWithResultDir(new File(expectedFileDir), new
 		// File(resultFileDir));
 	}
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestSuite.java
index 43555c5..eee9e39 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/pathmerge/PathMergeSmallTestSuite.java
@@ -20,7 +20,6 @@
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.FileReader;
-import java.io.FilenameFilter;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
@@ -31,7 +30,6 @@
 import junit.framework.TestSuite;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -46,18 +44,19 @@
 	private static final Logger LOGGER = Logger
 			.getLogger(PathMergeSmallTestSuite.class.getName());
 
-	public static final String PreFix = "data/PathTestSet";
+	public static final String PreFix = "data/input";
 	public static final String[] TestDir = { PreFix + File.separator
-		+ "TwoKmer", PreFix + File.separator
+		+ "test"};
+		/*+ "TwoKmer", PreFix + File.separator
 		+ "ThreeKmer", PreFix + File.separator
 		+ "SinglePath", PreFix + File.separator
 		+ "SimplePath", PreFix + File.separator
 		+ "Path", PreFix + File.separator
 		+ "BridgePath", PreFix + File.separator
 		+ "CyclePath", PreFix + File.separator
-		+ "CyclePath2", PreFix + File.separator
+		+ "RingPath", PreFix + File.separator
 		+ "LongPath", PreFix + File.separator
-		+ "TreePath"};
+		+ "TreePath"};*/
 	private static final String ACTUAL_RESULT_DIR = "actual";
 	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";
