diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphInputFormat.java
similarity index 90%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphInputFormat.java
index 2bbc1c2..8ab6784 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -9,13 +9,13 @@
 import org.apache.hadoop.mapreduce.RecordReader;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
+import edu.uci.ics.genomix.type.KmerCountValue;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexReader;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexInputFormat;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexInputFormat.BinaryVertexReader;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
-import edu.uci.ics.genomix.type.KmerCountValue;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat.BinaryVertexReader;
 
 public class BinaryLoadGraphInputFormat extends
 	BinaryVertexInputFormat<BytesWritable, ByteWritable, NullWritable, MessageWritable>{
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphOutputFormat.java
similarity index 93%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphOutputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphOutputFormat.java
index 9b1a579..8bf13b8 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/BinaryLoadGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/BinaryLoadGraphOutputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -8,9 +8,9 @@
 import org.apache.hadoop.mapreduce.RecordWriter;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexOutputFormat;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexWriter;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexOutputFormat;
 
 public class BinaryLoadGraphOutputFormat extends 
 	BinaryVertexOutputFormat<BytesWritable, ByteWritable, NullWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/GraphVertexOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
similarity index 87%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/GraphVertexOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
index 8fa34c3..0c94512 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/GraphVertexOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/GraphVertexOperation.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.DataOutputStream;
 import java.io.FileNotFoundException;
@@ -15,16 +15,17 @@
 import org.apache.hadoop.io.SequenceFile;
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
-import edu.uci.ics.pregelix.SequenceFile.GenerateSequenceFile;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
-import edu.uci.ics.pregelix.hdfs.HDFSOperation;
-import edu.uci.ics.pregelix.type.KmerCountValue;
+import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.KmerUtil;
+import edu.uci.ics.genomix.pregelix.SequenceFile.GenerateSequenceFile;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.io.LogAlgorithmMessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.hdfs.HDFSOperation;
 
 public class GraphVertexOperation {
-	public static final int k = 55; //kmer, k: the length of kmer
+	public static final int k = 3; //kmer, k: the length of kmer
 	static private final Path TMP_DIR = new Path(
 			GenerateSequenceFile.class.getSimpleName() + "_INTERIM");
 	/**
@@ -33,86 +34,29 @@
 	 */
 	public static boolean isPathVertex(ByteWritable vertexValue){
 		byte value = vertexValue.get();
-		byte[] bit = new byte[8];
-		for(int i = 0; i < 8; i++)
-			bit[i] = (byte) ((value >> i) & 0x01);
-		
-		//check out-degree
-		if(((bit[0]==1)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==1)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==1)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==1))
-				){
-			//check in-degree
-			if(((bit[4]==1)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==1)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==1)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==1))
-					)
-				return true;
-			else
-				return false;
-		}
-		else
-			return false;
+		if(KmerUtil.inDegree(value) == 1 && KmerUtil.outDegree(value) == 1)
+			return true;
+		return false;
 	}
-	/**
-	 * Head Vertex:  out-degree = 1, in-degree != 1
+	/** 
+	 * Head Vertex:  in-degree != 1, out-degree = 1, 
 	 * @param vertexValue 
 	 */
 	public static boolean isHead(ByteWritable vertexValue){
 		byte value = vertexValue.get();
-		byte[] bit = new byte[8];
-		for(int i = 0; i < 8; i++)
-			bit[i] = (byte) ((value >> i) & 0x01);
-		
-		//check out-degree
-		if(((bit[0]==1)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==1)&&(bit[2]==0)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==1)&&(bit[3]==0))
-				|| ((bit[0]==0)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==1))
-				){
-			//check in-degree
-			if(!((bit[4]==1)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==0))
-					&& !((bit[4]==0)&&(bit[5]==1)&&(bit[6]==0)&&(bit[7]==0))
-					&& !((bit[4]==0)&&(bit[5]==0)&&(bit[6]==1)&&(bit[7]==0))
-					&& !((bit[4]==0)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==1))
-					)
-				return true;
-			else
-				return false;
-		}
-		else
-			return false;
+		if(KmerUtil.inDegree(value) != 1 && KmerUtil.outDegree(value) == 1)
+			return true;
+		return false;
 	}
 	/**
-	 * Rear Vertex:  out-degree != 1, in-degree = 1
+	 * Rear Vertex:  in-degree = 1, out-degree != 1, 
 	 * @param vertexValue 
 	 */
 	public static boolean isRear(ByteWritable vertexValue){
 		byte value = vertexValue.get();
-		byte[] bit = new byte[8];
-		for(int i = 0; i < 8; i++)
-			bit[i] = (byte) ((value >> i) & 0x01);
-		
-		//check out-degree
-		if(!((bit[0]==1)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==0))
-				&& !((bit[0]==0)&&(bit[1]==1)&&(bit[2]==0)&&(bit[3]==0))
-				&& !((bit[0]==0)&&(bit[1]==0)&&(bit[2]==1)&&(bit[3]==0))
-				&& !((bit[0]==0)&&(bit[1]==0)&&(bit[2]==0)&&(bit[3]==1))
-				){
-			//check in-degree
-			if(((bit[4]==1)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==1)&&(bit[6]==0)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==1)&&(bit[7]==0))
-					|| ((bit[4]==0)&&(bit[5]==0)&&(bit[6]==0)&&(bit[7]==1))
-					)
-				return true;
-			else
-				return false;
-		}
-		else
-			return false;
+		if(KmerUtil.inDegree(value) == 1 && KmerUtil.outDegree(value) != 1)
+			return true;
+		return false;
 	}
 	/**
 	 * write Kmer to Sequence File for test
@@ -152,19 +96,19 @@
 		int value = vertexValue & 0xff;
 		int tmp = value & first;
 		if(tmp != 0)
-			return 0;
+			return Kmer.GENE_CODE.A;
 		else{
 			tmp = value & second;
 			if(tmp != 0)
-				return 1;
+				return Kmer.GENE_CODE.C;
 			else{
 				tmp = value & third;
 				if(tmp != 0)
-					return 2;
+					return Kmer.GENE_CODE.G;
 				else{
 					tmp = value & fourth;
 					if(tmp != 0)
-						return 3;
+						return Kmer.GENE_CODE.T;
 					else
 						return 4;
 				}
@@ -187,19 +131,19 @@
 		int value = vertexValue & 0xff;
 		int tmp = value & first;
 		if(tmp != 0)
-			return 0;
+			return Kmer.GENE_CODE.A;
 		else{
 			tmp = value & second;
 			if(tmp != 0)
-				return 1;
+				return Kmer.GENE_CODE.C;
 			else{
 				tmp = value & third;
 				if(tmp != 0)
-					return 2;
+					return Kmer.GENE_CODE.G;
 				else{
 					tmp = value & fourth;
 					if(tmp != 0)
-						return 3;
+						return Kmer.GENE_CODE.T;
 					else
 						return 4;
 				}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LoadGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
similarity index 95%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LoadGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
index 9892376..d928555 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LoadGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -15,8 +15,8 @@
 import edu.uci.ics.pregelix.api.io.text.TextVertexOutputFormat;
 import edu.uci.ics.pregelix.api.io.text.TextVertexOutputFormat.TextVertexWriter;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphInputFormat.java
similarity index 89%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphInputFormat.java
index 5aad613..625d588 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -10,12 +10,12 @@
 
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexReader;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexInputFormat;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
-import edu.uci.ics.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.io.LogAlgorithmMessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
 import edu.uci.ics.genomix.type.KmerCountValue;
 
 public class LogAlgorithmForMergeGraphInputFormat extends
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
similarity index 89%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
index 9d4672a..dbaa528 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphOutputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -8,10 +8,10 @@
 import org.apache.hadoop.mapreduce.RecordWriter;
 import org.apache.hadoop.mapreduce.TaskAttemptContext;
 
+import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexOutputFormat;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.io.VertexWriter;
-import edu.uci.ics.pregelix.api.io.binary.BinaryVertexOutputFormat;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
 
 public class LogAlgorithmForMergeGraphOutputFormat extends 
 	BinaryVertexOutputFormat<BytesWritable, ValueStateWritable, NullWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
index 8ccb03e..c521074 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/LogAlgorithmForMergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
@@ -17,13 +17,13 @@
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 import edu.uci.ics.pregelix.dataflow.util.IterationUtils;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.LogAlgorithmMessageWritable;
-import edu.uci.ics.pregelix.example.io.ValueStateWritable;
-import edu.uci.ics.pregelix.type.Message;
-import edu.uci.ics.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.LogAlgorithmMessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.ValueStateWritable;
+import edu.uci.ics.genomix.pregelix.type.Message;
+import edu.uci.ics.genomix.pregelix.type.State;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/MergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
similarity index 73%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/MergeGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
index 3fdcd6d..0a77a94 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/MergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/MergeGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
@@ -14,14 +14,16 @@
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
 
+import edu.uci.ics.genomix.type.Kmer;
+import edu.uci.ics.genomix.type.KmerUtil;
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 import edu.uci.ics.pregelix.dataflow.util.IterationUtils;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
-import edu.uci.ics.pregelix.hdfs.HDFSOperation;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.hdfs.HDFSOperation;
 
 /*
  * vertexId: BytesWritable
@@ -71,17 +73,20 @@
 		} catch (FileNotFoundException e1) { e1.printStackTrace();}
 		tmpVertextId.set(GraphVertexOperation.generateValidDataFromBytesWritable(getVertexId()),0,numBytes);
 		if (getSuperstep() == 1) {
-			if(GraphVertexOperation.isHead(getVertexValue())){
-				//tmpSourceVertextId = tmpVertextId; 
-				tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpVertextId.getBytes(),
-						getVertexValue().get()), 0, numBytes); 
+			if(GraphVertexOperation.isHead(getVertexValue())){ 
+				tmpDestVertexId.set(tmpVertextId);
+				//change
+				Kmer.moveKmer(GraphVertexOperation.k, tmpDestVertexId.getBytes(), 
+						(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get()));
+				//tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpDestVertexId.getBytes(),
+				//		getVertexValue().get()), 0, numBytes); 
 				tmpMsg.setSourceVertexId(tmpVertextId.getBytes());
 				tmpMsg.setLengthOfChain(0);
 				tmpMsg.setChainVertexId(tmpChainVertexId.getBytes());
 				sendMsg(tmpDestVertexId,tmpMsg);
 				//test
-				//GraphVertexOperation.testMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
-				//		tmpDestVertexId.getBytes(),tmpMsg);
+				GraphVertexOperation.testMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
+						tmpDestVertexId.getBytes(),tmpMsg);
 				}
 		}
 		//path node sends message back to head node
@@ -97,11 +102,19 @@
 							tmpMsg.setChainVertexId(tmpVertextId.getBytes());
 						}
 						else{
+							/*
 							tmpMsg.incrementLength();
 							tmpMsg.setChainVertexId(GraphVertexOperation.updateChainVertexId(
-									tmpMsg.getChainVertexId(),
+									tmpChainVertexId,
 									tmpMsg.getLengthOfChain()-1,
-									tmpVertextId.getBytes()));
+									tmpVertextId));
+							 */
+							 //change
+							tmpMsg.setChainVertexId(KmerUtil.mergeKmerWithNextCode(
+									tmpMsg.getLengthOfChain(),
+									tmpMsg.getChainVertexId(),
+									(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get())));
+							tmpMsg.incrementLength();
 							deleteVertex(getVertexId());
 						}
 						sendMsg(tmpDestVertexId,tmpMsg);
@@ -132,7 +145,6 @@
 					//test
 		        	GraphVertexOperation.testLastMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
 		        			tmpDestVertexId.getBytes(),tmpMsg);
-					
 				}
 			}
 		}
@@ -141,10 +153,17 @@
 			if (msgIterator.hasNext()){
 				tmpMsg = msgIterator.next();
 				if(!tmpMsg.isRear()){
-					byte[] lastKmer = GraphVertexOperation.getLastKmer(tmpMsg.getChainVertexId(), 
-							tmpMsg.getLengthOfChain());
-					tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(lastKmer,
-							tmpMsg.getNeighberInfo()), 0, numBytes);
+					byte[] lastKmer = KmerUtil.getLastKmerFromChain(GraphVertexOperation.k,
+							tmpMsg.getLengthOfChain(),
+							tmpMsg.getChainVertexId());
+					//byte[] lastKmer = GraphVertexOperation.getLastKmer(tmpMsg.getChainVertexId(), 
+					//		tmpMsg.getLengthOfChain());
+					tmpDestVertexId.set(lastKmer, 0, numBytes);
+					//change
+					Kmer.moveKmer(GraphVertexOperation.k, tmpDestVertexId.getBytes(), 
+							(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get()));
+					//tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(lastKmer,
+					//		tmpMsg.getNeighberInfo()), 0, numBytes);
 					tmpMsg.setSourceVertexId(tmpVertextId.getBytes());
 					sendMsg(tmpDestVertexId,tmpMsg);
 					//test
@@ -152,8 +171,12 @@
 							tmpDestVertexId.getBytes(),tmpMsg);
 				}
 				else{	
-					tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpVertextId.getBytes(),
-							getVertexValue().get()), 0, numBytes);
+					tmpDestVertexId.set(tmpVertextId);
+					//change
+					Kmer.moveKmer(GraphVertexOperation.k, tmpDestVertexId.getBytes(), 
+							(byte)GraphVertexOperation.findSucceedNode(getVertexValue().get()));
+					//tmpDestVertexId.set(GraphVertexOperation.getDestVertexId(tmpVertextId.getBytes(),
+					//		getVertexValue().get()), 0, numBytes);
 					sendMsg(tmpDestVertexId,tmpMsg);
 					//test
 					GraphVertexOperation.testMessageCommunication(writer,getSuperstep(),tmpVertextId.getBytes(),
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/ConvertToSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/ConvertToSequenceFile.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/ConvertToSequenceFile.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/ConvertToSequenceFile.java
index 304d764..1aff95d 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/ConvertToSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/ConvertToSequenceFile.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.SequenceFile;
+package edu.uci.ics.genomix.pregelix.SequenceFile;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/GenerateSequenceFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/GenerateSequenceFile.java
similarity index 99%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/GenerateSequenceFile.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/GenerateSequenceFile.java
index b8fc24d..b7fed48 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/GenerateSequenceFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/GenerateSequenceFile.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.SequenceFile;
+package edu.uci.ics.genomix.pregelix.SequenceFile;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -12,8 +12,8 @@
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
 import edu.uci.ics.genomix.type.KmerCountValue;
-import edu.uci.ics.pregelix.GraphVertexOperation;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
 
 public class GenerateSequenceFile {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/generateSmallFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/generateSmallFile.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/generateSmallFile.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/generateSmallFile.java
index ae4c2f5..eec2559 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/SequenceFile/generateSmallFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/SequenceFile/generateSmallFile.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.SequenceFile;
+package edu.uci.ics.genomix.pregelix.SequenceFile;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TestLoadGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestLoadGraphVertex.java
similarity index 88%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TestLoadGraphVertex.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestLoadGraphVertex.java
index 3992a56..3449df6 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TestLoadGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestLoadGraphVertex.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.util.Arrays;
 import java.util.Iterator;
@@ -9,9 +9,9 @@
 
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 /*
  * vertexId: BytesWritable
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java
new file mode 100644
index 0000000..247ca42
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TestMemory.java
@@ -0,0 +1,32 @@
+package edu.uci.ics.genomix.pregelix;
+/**
+* Class: TestMemory
+* @author: Anbang Xu
+* @description: Prints JVM memory utilization statistics
+*/
+public class TestMemory {
+     
+    public static void main(String [] args) {
+         
+        int mb = 1024*1024;
+         
+        //Getting the runtime reference from system
+        Runtime runtime = Runtime.getRuntime();
+         
+        System.out.println("##### Heap utilization statistics [MB] #####");
+         
+        //Print used memory
+        System.out.println("Used Memory:"
+            + (runtime.totalMemory() - runtime.freeMemory()) / mb);
+ 
+        //Print free memory
+        System.out.println("Free Memory:"
+            + runtime.freeMemory() / mb);
+         
+        //Print total available memory
+        System.out.println("Total Memory:" + runtime.totalMemory() / mb);
+ 
+        //Print Maximum available memory
+        System.out.println("Max Memory:" + runtime.maxMemory() / mb);
+    }
+}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TextLoadGraphInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TextLoadGraphInputFormat.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TextLoadGraphInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TextLoadGraphInputFormat.java
index b7fda73..e3c660e 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/TextLoadGraphInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/TextLoadGraphInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.io.IOException;
 
@@ -15,7 +15,7 @@
 import edu.uci.ics.pregelix.api.io.VertexReader;
 import edu.uci.ics.pregelix.api.io.text.TextVertexInputFormat;
 import edu.uci.ics.pregelix.api.util.BspUtils;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 public class TextLoadGraphInputFormat extends
 		TextVertexInputFormat<BytesWritable, ByteWritable, NullWritable, MessageWritable>{
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexInputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
index 31274ac..51eceee 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexInputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.api.io.binary;
+package edu.uci.ics.genomix.pregelix.api.io.binary;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexOutputFormat.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
index 399cbca..2bfaf90 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/api/io/binary/BinaryVertexOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/api/io/binary/BinaryVertexOutputFormat.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.api.io.binary;
+package edu.uci.ics.genomix.pregelix.api.io.binary;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/bitwise/BitwiseOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/bitwise/BitwiseOperation.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/bitwise/BitwiseOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/bitwise/BitwiseOperation.java
index b064707..8d90e92 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/bitwise/BitwiseOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/bitwise/BitwiseOperation.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.bitwise;
+package edu.uci.ics.genomix.pregelix.bitwise;
 
 public class BitwiseOperation {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/client/Client.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/client/Client.java
similarity index 97%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/client/Client.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/client/Client.java
index 9cf2e3f..5507713 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/client/Client.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/client/Client.java
@@ -1,5 +1,5 @@
 
-package edu.uci.ics.pregelix.example.client;
+package edu.uci.ics.genomix.pregelix.example.client;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/LogAlgorithmMessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/LogAlgorithmMessageWritable.java
similarity index 97%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/LogAlgorithmMessageWritable.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/LogAlgorithmMessageWritable.java
index 262ce7f..d77a26f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/LogAlgorithmMessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/LogAlgorithmMessageWritable.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.example.io;
+package edu.uci.ics.genomix.pregelix.example.io;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -7,7 +7,7 @@
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
 
 public class LogAlgorithmMessageWritable implements WritableComparable<LogAlgorithmMessageWritable>{
 	/**
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/MessageWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/MessageWritable.java
similarity index 96%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/MessageWritable.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/MessageWritable.java
index e18a062..b477eb5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/MessageWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/MessageWritable.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.example.io;
+package edu.uci.ics.genomix.pregelix.example.io;
 
 import java.io.DataInput;
 import java.io.DataOutput;
@@ -7,7 +7,7 @@
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.pregelix.GraphVertexOperation;
+import edu.uci.ics.genomix.pregelix.GraphVertexOperation;
 
 public class MessageWritable implements WritableComparable<MessageWritable>{
 	/**
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/ValueStateWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/ValueStateWritable.java
similarity index 94%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/ValueStateWritable.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/ValueStateWritable.java
index 78d4f0c..97275be 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/example/io/ValueStateWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/example/io/ValueStateWritable.java
@@ -1,10 +1,10 @@
-package edu.uci.ics.pregelix.example.io;
+package edu.uci.ics.genomix.pregelix.example.io;
 
 import java.io.*;
 
 import org.apache.hadoop.io.WritableComparable;
 
-import edu.uci.ics.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.type.State;
 
 
 public class ValueStateWritable implements WritableComparable<ValueStateWritable> {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
new file mode 100644
index 0000000..fe95252
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Graph.java
@@ -0,0 +1,58 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+public class Graph {
+	
+	/**
+    * Construct a DOT graph in memory, convert it
+    * to image and store the image in the file system.
+	 * @throws Exception 
+    */
+   private void start(String fileName) throws Exception
+   {
+		File filePathTo = new File("graph/" + fileName);
+		BufferedReader br = new BufferedReader(new FileReader(filePathTo));
+		String line = "";
+		String[] split;
+		
+		String precursor = "";
+		String[] adjMap;
+		char[] succeeds;
+		String succeed = "";
+		String output;
+		
+		GraphViz gv = new GraphViz();
+		gv.addln(gv.start_graph());
+		while((line = br.readLine()) != null){
+			split = line.split("\t");
+			precursor = split[0];
+			adjMap = split[1].split("\\|"); 
+			if(adjMap.length > 1){
+				succeeds = adjMap[1].toCharArray();
+				for(int i = 0; i < succeeds.length; i++){
+					succeed = precursor.substring(1) + succeeds[i]; 
+					output = precursor + " -> " + succeed;
+					gv.addln(output);
+				}
+			}
+		}
+		gv.addln(gv.end_graph());
+		System.out.println(gv.getDotSource());
+
+		String type = "ps";
+		File out = new File("graph/" + fileName + "_out." + type); // Linux
+		gv.writeGraphToFile(gv.getGraph(gv.getDotSource(), type), out);
+   }
+	   
+	public static void main(String[] args) throws Exception
+	{
+		Graph g = new Graph();
+		g.start("SinglePath");
+	}
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java
new file mode 100644
index 0000000..c2178bc
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/GraphViz.java
@@ -0,0 +1,288 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+// GraphViz.java - a simple API to call dot from Java programs
+
+/*$Id$*/
+/*
+ ******************************************************************************
+ *                                                                            *
+ *              (c) Copyright 2003 Laszlo Szathmary                           *
+ *                                                                            *
+ * This program is free software; you can redistribute it and/or modify it    *
+ * under the terms of the GNU Lesser General Public License as published by   *
+ * the Free Software Foundation; either version 2.1 of the License, or        *
+ * (at your option) any later version.                                        *
+ *                                                                            *
+ * This program is distributed in the hope that it will be useful, but        *
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public    *
+ * License for more details.                                                  *
+ *                                                                            *
+ * You should have received a copy of the GNU Lesser General Public License   *
+ * along with this program; if not, write to the Free Software Foundation,    *
+ * Inc., 675 Mass Ave, Cambridge, MA 02139, USA.                              *
+ *                                                                            *
+ ******************************************************************************
+ */
+
+import java.io.BufferedReader;
+import java.io.DataInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.InputStreamReader;
+
+/**
+ * <dl>
+ * <dt>Purpose: GraphViz Java API
+ * <dd>
+ *
+ * <dt>Description:
+ * <dd> With this Java class you can simply call dot
+ *      from your Java programs
+ * <dt>Example usage:
+ * <dd>
+ * <pre>
+ *    GraphViz gv = new GraphViz();
+ *    gv.addln(gv.start_graph());
+ *    gv.addln("A -> B;");
+ *    gv.addln("A -> C;");
+ *    gv.addln(gv.end_graph());
+ *    System.out.println(gv.getDotSource());
+ *
+ *    String type = "gif";
+ *    File out = new File("out." + type);   // out.gif in this example
+ *    gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
+ * </pre>
+ * </dd>
+ *
+ * </dl>
+ *
+ * @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you
+ * can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.
+ * @version v0.3, 2010/11/29 (November) -- Windows support + ability 
+ * to read the graph from a text file
+ * @version v0.2, 2010/07/22 (July) -- bug fix
+ * @version v0.1, 2003/12/04 (December) -- first release
+ * @author  Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
+ */
+public class GraphViz
+{
+   /**
+    * The dir. where temporary files will be created.
+    */
+   private static String TEMP_DIR = "/tmp";	// Linux
+ //  private static String TEMP_DIR = "c:/temp";	// Windows
+
+   /**
+    * Where is your dot program located? It will be called externally.
+    */
+   private static String DOT = "/usr/bin/dot";	// Linux
+//   private static String DOT = "c:/Program Files/Graphviz2.26.3/bin/dot.exe";	// Windows
+
+   /**
+    * The source of the graph written in dot language.
+    */
+	private StringBuilder graph = new StringBuilder();
+
+   /**
+    * Constructor: creates a new GraphViz object that will contain
+    * a graph.
+    */
+   public GraphViz() {
+   }
+
+   /**
+    * Returns the graph's source description in dot language.
+    * @return Source of the graph in dot language.
+    */
+   public String getDotSource() {
+      return graph.toString();
+   }
+
+   /**
+    * Adds a string to the graph's source (without newline).
+    */
+   public void add(String line) {
+      graph.append(line);
+   }
+
+   /**
+    * Adds a string to the graph's source (with newline).
+    */
+   public void addln(String line) {
+      graph.append(line + "\n");
+   }
+
+   /**
+    * Adds a newline to the graph's source.
+    */
+   public void addln() {
+      graph.append('\n');
+   }
+
+   /**
+    * Returns the graph as an image in binary format.
+    * @param dot_source Source of the graph to be drawn.
+    * @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+    * @return A byte array containing the image of the graph.
+    */
+   public byte[] getGraph(String dot_source, String type)
+   {
+      File dot;
+      byte[] img_stream = null;
+   
+      try {
+         dot = writeDotSourceToFile(dot_source);
+         if (dot != null)
+         {
+            img_stream = get_img_stream(dot, type);
+            if (dot.delete() == false) 
+               System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
+            return img_stream;
+         }
+         return null;
+      } catch (java.io.IOException ioe) { return null; }
+   }
+
+   /**
+    * Writes the graph's image in a file.
+    * @param img   A byte array containing the image of the graph.
+    * @param file  Name of the file to where we want to write.
+    * @return Success: 1, Failure: -1
+    */
+   public int writeGraphToFile(byte[] img, String file)
+   {
+      File to = new File(file);
+      return writeGraphToFile(img, to);
+   }
+
+   /**
+    * Writes the graph's image in a file.
+    * @param img   A byte array containing the image of the graph.
+    * @param to    A File object to where we want to write.
+    * @return Success: 1, Failure: -1
+    */
+   public int writeGraphToFile(byte[] img, File to)
+   {
+      try {
+         FileOutputStream fos = new FileOutputStream(to);
+         fos.write(img);
+         fos.close();
+      } catch (java.io.IOException ioe) { return -1; }
+      return 1;
+   }
+
+   /**
+    * It will call the external dot program, and return the image in
+    * binary format.
+    * @param dot Source of the graph (in dot language).
+    * @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
+    * @return The image of the graph in .gif format.
+    */
+   private byte[] get_img_stream(File dot, String type)
+   {
+      File img;
+      byte[] img_stream = null;
+
+      try {
+         img = File.createTempFile("graph_", "."+type, new File(GraphViz.TEMP_DIR));
+         Runtime rt = Runtime.getRuntime();
+         
+         // patch by Mike Chenault
+         String[] args = {DOT, "-T"+type, dot.getAbsolutePath(), "-o", img.getAbsolutePath()};
+         Process p = rt.exec(args);
+         
+         p.waitFor();
+
+         FileInputStream in = new FileInputStream(img.getAbsolutePath());
+         img_stream = new byte[in.available()];
+         in.read(img_stream);
+         // Close it if we need to
+         if( in != null ) in.close();
+
+         if (img.delete() == false) 
+            System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
+      }
+      catch (java.io.IOException ioe) {
+         System.err.println("Error:    in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR+"\n");
+         System.err.println("       or in calling external command");
+         ioe.printStackTrace();
+      }
+      catch (java.lang.InterruptedException ie) {
+         System.err.println("Error: the execution of the external program was interrupted");
+         ie.printStackTrace();
+      }
+
+      return img_stream;
+   }
+
+   /**
+    * Writes the source of the graph in a file, and returns the written file
+    * as a File object.
+    * @param str Source of the graph (in dot language).
+    * @return The file (as a File object) that contains the source of the graph.
+    */
+   private File writeDotSourceToFile(String str) throws java.io.IOException
+   {
+      File temp;
+      try {
+         temp = File.createTempFile("graph_", ".dot.tmp", new File(GraphViz.TEMP_DIR));
+         FileWriter fout = new FileWriter(temp);
+         fout.write(str);
+         fout.close();
+      }
+      catch (Exception e) {
+         System.err.println("Error: I/O error while writing the dot source to temp file!");
+         return null;
+      }
+      return temp;
+   }
+
+   /**
+    * Returns a string that is used to start a graph.
+    * @return A string to open a graph.
+    */
+   public String start_graph() {
+      return "digraph G {";
+   }
+
+   /**
+    * Returns a string that is used to end a graph.
+    * @return A string to close a graph.
+    */
+   public String end_graph() {
+      return "}";
+   }
+
+   /**
+    * Read a DOT graph from a text file.
+    * 
+    * @param input Input text file containing the DOT graph
+    * source.
+    */
+   public void readSource(String input)
+   {
+	   StringBuilder sb = new StringBuilder();
+	   
+	   try
+	   {
+		   FileInputStream fis = new FileInputStream(input);
+		   DataInputStream dis = new DataInputStream(fis);
+		   BufferedReader br = new BufferedReader(new InputStreamReader(dis));
+		   String line;
+		   while ((line = br.readLine()) != null) {
+			   sb.append(line);
+		   }
+		   dis.close();
+	   } 
+	   catch (Exception e) {
+		   System.err.println("Error: " + e.getMessage());
+	   }
+	   
+	   this.graph = sb;
+   }
+   
+} // end of class GraphViz
+
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Proba.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Proba.java
new file mode 100644
index 0000000..6bd66e5
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/graph/Proba.java
@@ -0,0 +1,69 @@
+package edu.uci.ics.genomix.pregelix.graph;
+
+import java.io.File;
+
+public class Proba
+{
+   public static void main(String[] args)
+   {
+      Proba p = new Proba();
+      p.start();
+//      p.start2();
+   }
+
+   /**
+    * Construct a DOT graph in memory, convert it
+    * to image and store the image in the file system.
+    */
+   private void start()
+   {
+      GraphViz gv = new GraphViz();
+      gv.addln(gv.start_graph());
+      gv.addln("A -> B;");
+      gv.addln("B -> C;");
+      gv.addln("C -> D;");
+      gv.addln("D -> E;");
+      gv.addln("E -> A;");
+      gv.addln(gv.end_graph()); 
+      System.out.println(gv.getDotSource());
+      
+//      String type = "gif";
+//      String type = "dot";
+//      String type = "fig";    // open with xfig
+//      String type = "pdf";
+      String type = "ps";
+//      String type = "svg";    // open with inkscape
+//      String type = "png";
+//      String type = "plain";
+      File out = new File("graph_out." + type);   // Linux
+//      File out = new File("c:/eclipse.ws/graphviz-java-api/out." + type);    // Windows
+      gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
+   }
+   
+   /**
+    * Read the DOT source from a file,
+    * convert to image and store the image in the file system.
+    */
+   private void start2()
+   {
+      String dir = "/home/jabba/eclipse2/laszlo.sajat/graphviz-java-api";     // Linux
+      String input = dir + "/sample/simple.dot";
+//	   String input = "c:/eclipse.ws/graphviz-java-api/sample/simple.dot";    // Windows
+	   
+	   GraphViz gv = new GraphViz();
+	   gv.readSource(input);
+	   System.out.println(gv.getDotSource());
+   		
+      String type = "gif";
+//    String type = "dot";
+//    String type = "fig";    // open with xfig
+//    String type = "pdf";
+//    String type = "ps";
+//    String type = "svg";    // open with inkscape
+//    String type = "png";
+//      String type = "plain";
+	   File out = new File("/tmp/simple." + type);   // Linux
+//	   File out = new File("c:/eclipse.ws/graphviz-java-api/tmp/simple." + type);   // Windows
+	   gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
+   }
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/hdfs/HDFSOperation.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/hdfs/HDFSOperation.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
index ea972ef..824722a 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/hdfs/HDFSOperation.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/hdfs/HDFSOperation.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.hdfs;
+package edu.uci.ics.genomix.pregelix.hdfs;
 
 import java.io.IOException;
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/testDeleteVertexId.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testDeleteVertexId.java
similarity index 89%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/testDeleteVertexId.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testDeleteVertexId.java
index 061b8b5..fd6f0c5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/testDeleteVertexId.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testDeleteVertexId.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import java.util.Arrays;
 import java.util.Iterator;
@@ -9,9 +9,9 @@
 
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.bitwise.BitwiseOperation;
-import edu.uci.ics.pregelix.example.client.Client;
-import edu.uci.ics.pregelix.example.io.MessageWritable;
+import edu.uci.ics.genomix.pregelix.bitwise.BitwiseOperation;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
+import edu.uci.ics.genomix.pregelix.example.io.MessageWritable;
 
 /*
  * vertexId: BytesWritable
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
new file mode 100644
index 0000000..2dac10d
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/GenerateTestInput.java
@@ -0,0 +1,77 @@
+package edu.uci.ics.genomix.pregelix.testcase;
+
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+
+public class GenerateTestInput {
+
+	/**
+	 * Simple Path
+	 */
+	public static String simplePath(int k, int length, int numLines){
+		RandomString rs = new RandomString(k, length);
+		String output = "";
+		for(int i = 0; i < numLines; i++)
+			output += rs.nextString(0) + "\r\n";
+		return output;
+	}
+	/**
+	 * Tree Path
+	 */
+	public static String treePath(int k, int x, int y, int z){
+		RandomString rs = new RandomString(k, x + y + k - 1);
+		String s1 = rs.nextString(0);
+		rs.setLength(x + y + z + k - 1);
+		rs.addString(s1.substring(0, x));
+		String s2 = rs.nextString(x);
+		rs.setLength(x + y + z + k - 1);
+		rs.addString(s2.substring(0,x + y));
+		String s3 = rs.nextString(x + y);
+		return s1 + "\r\n" + s2 + "\r\n" + s3;
+	}
+	/**
+	 * Cycle Path  
+	 */
+	public static String cyclePath(int k, int length){
+		RandomString rs = new RandomString(k, length);
+		String s1 = rs.nextString(0);
+		String s2 = s1 + s1.substring(1, k + 1);
+		return s2;
+	}
+	/**
+	 * Bridge Path
+	 */
+	public static String bridgePath(int k, int x){
+		RandomString rs = new RandomString(k, x + k + 2 + k - 1);
+		String s1 = rs.nextString(0);
+		rs.setLength(x + k + 2);
+		rs.addString(s1.substring(0, k + 2));
+		String s2 = rs.nextString(k + 2) + s1.substring(x + k + 2, x + k + 2 + k - 1);
+		return s1 + "\r\n" + s2;
+	}
+
+	public static void main(String[] args) {
+		// TODO Auto-generated method stub
+		OutputStreamWriter writer;
+		try {
+			writer = new OutputStreamWriter(new FileOutputStream("SinglePath"));
+			writer.write(simplePath(5,10,1));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("SimplePath"));
+			writer.write(simplePath(5,10,3));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("TreePath"));
+			writer.write(treePath(5, 5, 5, 3));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("CyclePath"));
+			writer.write(cyclePath(5,10));
+			writer.close();
+			writer = new OutputStreamWriter(new FileOutputStream("BridgePath"));
+			writer.write(bridgePath(5,2));
+			writer.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java
new file mode 100644
index 0000000..337c5d8
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/testcase/RandomString.java
@@ -0,0 +1,63 @@
+package edu.uci.ics.genomix.pregelix.testcase;
+
+import java.util.ArrayList;
+import java.util.Random;
+
+public class RandomString
+{
+
+  private static final char[] symbols = new char[4];
+
+  static {
+	  symbols[0] = 'A';
+	  symbols[1] = 'C';
+	  symbols[2] = 'G';
+	  symbols[3] = 'T';
+  }
+
+  private final Random random = new Random(); 
+
+  private char[] buf;
+  
+  private ArrayList<String> existKmer = new ArrayList<String>();;
+  
+  private int k;
+
+  public RandomString(int k, int length)
+  {
+    if (length < 1)
+      throw new IllegalArgumentException("length < 1: " + length);
+    buf = new char[length];
+    this.k = k;
+  }
+
+  public String nextString(int startIdx)
+  {
+	String tmp = "";
+    for (int idx = startIdx; idx < buf.length;){ 
+    	buf[idx] = symbols[random.nextInt(4)]; 
+    	if(idx >= k - 1){
+    		tmp = new String(buf, idx-k+1, k);
+    		if(!existKmer.contains(tmp)){
+    			existKmer.add(tmp);
+    			idx++;
+    		}
+    	}
+    	else
+    		idx++;
+    }
+    	
+    return new String(buf);
+  }
+  
+  public void setLength(int length){
+	  buf = new char[length];
+  }
+  
+  public void addString(String s){
+	  char[] tmp = s.toCharArray();
+	  for(int i = 0; i < tmp.length; i++)
+		  buf[i] = tmp[i];
+  }
+
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Message.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
similarity index 75%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Message.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
index 5280fef..f965d64 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Message.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/Message.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.type;
+package edu.uci.ics.genomix.pregelix.type;
 
 public class Message {
 	
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/State.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
similarity index 86%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/State.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
index c62688e..2a2a3f3 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/State.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.type;
+package edu.uci.ics.genomix.pregelix.type;
 
 public class State {
 	public static final int NON_VERTEX = 0;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Kmer.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Kmer.java
deleted file mode 100644
index f35da10..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/Kmer.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package edu.uci.ics.pregelix.type;
-
-public class Kmer {
-
-	public final static byte[] GENE_SYMBOL = { 'A', 'C', 'G', 'T' };
-
-	public final static class GENE_CODE {
-
-		/**
-		 * make sure this 4 ids equal to the sequence id of char in
-		 * {@GENE_SYMBOL}
-		 */
-		public static final byte A = 0;
-		public static final byte C = 1;
-		public static final byte G = 2;
-		public static final byte T = 3;
-
-		public static byte getCodeFromSymbol(byte ch) {
-			byte r = 0;
-			switch (ch) {
-			case 'A':
-			case 'a':
-				r = A;
-				break;
-			case 'C':
-			case 'c':
-				r = C;
-				break;
-			case 'G':
-			case 'g':
-				r = G;
-				break;
-			case 'T':
-			case 't':
-				r = T;
-				break;
-			}
-			return r;
-		}
-
-		public static byte getSymbolFromCode(byte code) {
-			if (code > 3) {
-				return '!';
-			}
-			return GENE_SYMBOL[code];
-		}
-
-		public static byte getAdjBit(byte t) {
-			byte r = 0;
-			switch (t) {
-			case 'A':
-			case 'a':
-				r = 1 << A;
-				break;
-			case 'C':
-			case 'c':
-				r = 1 << C;
-				break;
-			case 'G':
-			case 'g':
-				r = 1 << G;
-				break;
-			case 'T':
-			case 't':
-				r = 1 << T;
-				break;
-			}
-			return r;
-		}
-
-		public static byte mergePreNextAdj(byte pre, byte next) {
-			return (byte) (pre << 4 | (next & 0x0f));
-		}
-
-		public static String getSymbolFromBitMap(byte code) {
-			int left = (code >> 4) & 0x0F;
-			int right = code & 0x0F;
-			StringBuilder str = new StringBuilder();
-			for (int i = A; i <= T; i++) {
-				if ((left & (1 << i)) != 0) {
-					str.append((char)GENE_SYMBOL[i]);
-				}
-			}
-			str.append('|');
-			for (int i = A; i <= T; i++) {
-				if ((right & (1 << i)) != 0) {
-					str.append((char)GENE_SYMBOL[i]);
-				}
-			}
-			return str.toString();
-		}
-	}
-
-	public static String recoverKmerFrom(int k, byte[] keyData, int keyStart,
-			int keyLength) {
-		StringBuilder strKmer = new StringBuilder();
-		int byteId = keyStart + keyLength - 1;
-		byte currentbyte = keyData[byteId];
-		for (int geneCount = 0; geneCount < k; geneCount++) {
-			if (geneCount % 4 == 0 && geneCount > 0) {
-				currentbyte = keyData[--byteId];
-			}
-			strKmer.append((char) GENE_SYMBOL[(currentbyte >> ((geneCount % 4) * 2)) & 0x03]);
-		}
-		return strKmer.toString();
-	}
-	
-	public static int getByteNumFromK(int k){
-		int x = k/4;
-		if (k%4 !=0){
-			x+=1;
-		}
-		return x;
-	}
-
-	/**
-	 * Compress Kmer into bytes array AATAG will compress as [0 0 0 G][A T A A]
-	 * 
-	 * @param kmer
-	 * @param input
-	 *            array
-	 * @param start
-	 *            position
-	 * @return initialed kmer array
-	 */
-	public static byte[] CompressKmer(int k, byte[] array, int start) {
-		final int byteNum = getByteNumFromK(k);
-		byte[] bytes = new byte[byteNum];
-
-		byte l = 0;
-		int bytecount = 0;
-		int bcount = byteNum - 1;
-		for (int i = start; i < start + k; i++) {
-			byte code = GENE_CODE.getCodeFromSymbol(array[i]);
-			l |= (byte) (code << bytecount);
-			bytecount += 2;
-			if (bytecount == 8) {
-				bytes[bcount--] = l;
-				l = 0;
-				bytecount = 0;
-			}
-		}
-		if (bcount >= 0) {
-			bytes[0] = l;
-		}
-		return bytes;
-	}
-
-	/**
-	 * Shift Kmer to accept new input
-	 * 
-	 * @param kmer
-	 * @param bytes
-	 *            Kmer Array
-	 * @param c
-	 *            Input new gene character
-	 * @return the shiftout gene, in gene code format
-	 */
-	public static byte MoveKmer(int k, byte[] kmer, byte c) {
-		int byteNum = kmer.length;
-		byte output = (byte) (kmer[byteNum - 1] & 0x03);
-		for (int i = byteNum - 1; i > 0; i--) {
-			byte in = (byte) (kmer[i - 1] & 0x03);
-			kmer[i] = (byte) (((kmer[i] >>> 2) & 0x3f) | (in << 6));
-		}
-
-		int pos = ((k - 1) % 4) * 2;
-		byte code = (byte) (GENE_CODE.getCodeFromSymbol(c) << pos);
-		kmer[0] = (byte) (((kmer[0] >>> 2) & 0x3f) | code);
-		return (byte) (1 << output);
-	}
-
-	public static void main(String[] argv) {
-		byte[] array = { 'A', 'A', 'T', 'A', 'G', 'A', 'A', 'G' };
-		int k = 5;
-		byte[] kmer = CompressKmer(k, array, 0);
-		for (byte b : kmer) {
-			System.out.print(Integer.toBinaryString(b));
-			System.out.print(' ');
-		}
-		System.out.println();
-		System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
-
-		for (int i = k; i < array.length-1; i++) {
-			byte out = MoveKmer(k, kmer, array[i]);
-
-			System.out.println((int) out);
-			for (byte b : kmer) {
-				System.out.print(Integer.toBinaryString(b));
-				System.out.print(' ');
-			}
-			System.out.println();
-			System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
-		}
-
-		byte out = MoveKmer(k, kmer, array[array.length - 1]);
-
-		System.out.println((int) out);
-		for (byte b : kmer) {
-			System.out.print(Integer.toBinaryString(b));
-			System.out.print(' ');
-		}
-		System.out.println();
-		System.out.println(recoverKmerFrom(k, kmer, 0, kmer.length));
-
-	}
-
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerBytesWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerBytesWritable.java
deleted file mode 100644
index 230b3f7..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerBytesWritable.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.pregelix.type;
-
-import java.io.IOException;
-import java.io.DataInput;
-import java.io.DataOutput;
-import org.apache.hadoop.io.BinaryComparable;
-import org.apache.hadoop.io.WritableComparable;
-import org.apache.hadoop.io.WritableComparator;
-
-public class KmerBytesWritable extends BinaryComparable implements WritableComparable<BinaryComparable> {
-    private static final int LENGTH_BYTES = 4;
-    private static final byte[] EMPTY_BYTES = {};
-    private byte size;
-    private byte[] bytes;
-
-    public KmerBytesWritable() {
-        this(EMPTY_BYTES);
-    }
-
-    public KmerBytesWritable(byte[] bytes) {
-        this.bytes = bytes;
-        this.size = (byte) bytes.length;
-    }
-
-    @Override
-    public byte[] getBytes() {
-        return bytes;
-    }
-
-    @Deprecated
-    public byte[] get() {
-        return getBytes();
-    }
-
-    @Override
-    public int getLength() {
-        return (int) size;
-    }
-
-    @Deprecated
-    public int getSize() {
-        return getLength();
-    }
-
-    public void setSize(byte size) {
-        if ((int) size > getCapacity()) {
-            setCapacity((byte) (size * 3 / 2));
-        }
-        this.size = size;
-    }
-
-    public int getCapacity() {
-        return bytes.length;
-    }
-
-    public void setCapacity(byte new_cap) {
-        if (new_cap != getCapacity()) {
-            byte[] new_data = new byte[new_cap];
-            if (new_cap < size) {
-                size = new_cap;
-            }
-            if (size != 0) {
-                System.arraycopy(bytes, 0, new_data, 0, size);
-            }
-            bytes = new_data;
-        }
-    }
-
-    public void set(KmerBytesWritable newData) {
-        set(newData.bytes, (byte) 0, newData.size);
-    }
-
-    public void set(byte[] newData, byte offset, byte length) {
-        setSize((byte) 0);
-        setSize(length);
-        System.arraycopy(newData, offset, bytes, 0, size);
-    }
-
-    public void readFields(DataInput in) throws IOException {
-        setSize((byte) 0); // clear the old data
-        setSize(in.readByte());
-        in.readFully(bytes, 0, size);
-    }
-
-    @Override
-    public void write(DataOutput out) throws IOException {
-        out.writeByte(size);
-        out.write(bytes, 0, size);
-    }
-
-    @Override
-    public int hashCode() {
-        return super.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object right_obj) {
-        if (right_obj instanceof KmerBytesWritable)
-            return super.equals(right_obj);
-        return false;
-    }
-
-    @Override
-    public String toString() {
-        StringBuffer sb = new StringBuffer(3 * size);
-        for (int idx = 0; idx < (int) size; idx++) {
-            // if not the first, put a blank separator in
-            if (idx != 0) {
-                sb.append(' ');
-            }
-            String num = Integer.toHexString(0xff & bytes[idx]);
-            // if it is only one digit, add a leading 0.
-            if (num.length() < 2) {
-                sb.append('0');
-            }
-            sb.append(num);
-        }
-        return sb.toString();
-    }
-
-    public static class Comparator extends WritableComparator {
-        public Comparator() {
-            super(KmerBytesWritable.class);
-        }
-
-        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
-            return compareBytes(b1, s1 + LENGTH_BYTES, l1 - LENGTH_BYTES, b2, s2 + LENGTH_BYTES, l2 - LENGTH_BYTES);
-        }
-    }
-
-    static { // register this comparator
-        WritableComparator.define(KmerBytesWritable.class, new Comparator());
-    }
-}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerCountValue.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerCountValue.java
deleted file mode 100644
index 1900eca..0000000
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/pregelix/type/KmerCountValue.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * you may obtain a copy of the License from
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package edu.uci.ics.pregelix.type;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import org.apache.hadoop.io.Writable;
-
-
-public class KmerCountValue implements  Writable{
-	private byte adjBitMap;
-	private byte count;
-
-	public KmerCountValue(byte bitmap, byte count) {
-		reset(bitmap, count);
-	}
-	
-	public KmerCountValue() {
-		adjBitMap = 0;
-		count = 0;
-	}
-
-	@Override
-	public void readFields(DataInput arg0) throws IOException {
-		adjBitMap = arg0.readByte();
-		count = arg0.readByte();
-	}
-
-	@Override
-	public void write(DataOutput arg0) throws IOException {
-		arg0.writeByte(adjBitMap);
-		arg0.writeByte(count);
-	}
-
-	@Override
-	public String toString() {
-		return Kmer.GENE_CODE.getSymbolFromBitMap(adjBitMap) + '\t' + String.valueOf(count);
-	}
-
-	public void reset(byte bitmap, byte count) {
-		this.adjBitMap = bitmap;
-		this.count = count;
-	}
-	public byte getAdjBitMap() {
-        return adjBitMap;
-    }
-	
-	public void setAdjBitMap(byte adjBitMap) {
-		this.adjBitMap = adjBitMap;
-	}
-
-	public void setCount(byte count) {
-		this.count = count;
-	}
-
-	public byte getCount() {
-	    return count;
-	}
-}
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobGen/JobGenerator.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
similarity index 84%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobGen/JobGenerator.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
index 625c1d4..7e740cd 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobGen/JobGenerator.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobGen/JobGenerator.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.JobGen;
+package edu.uci.ics.genomix.pregelix.JobGen;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -10,17 +10,16 @@
 import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 
-import edu.uci.ics.pregelix.BinaryLoadGraphInputFormat;
-import edu.uci.ics.pregelix.BinaryLoadGraphOutputFormat;
-import edu.uci.ics.pregelix.LoadGraphVertex;
-import edu.uci.ics.pregelix.LogAlgorithmForMergeGraphInputFormat;
-import edu.uci.ics.pregelix.LogAlgorithmForMergeGraphOutputFormat;
-import edu.uci.ics.pregelix.LogAlgorithmForMergeGraphVertex;
-import edu.uci.ics.pregelix.MergeGraphVertex;
-import edu.uci.ics.pregelix.TestLoadGraphVertex;
-import edu.uci.ics.pregelix.TextLoadGraphInputFormat;
-import edu.uci.ics.pregelix.testDeleteVertexId;
-import edu.uci.ics.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.BinaryLoadGraphInputFormat;
+import edu.uci.ics.genomix.pregelix.BinaryLoadGraphOutputFormat;
+import edu.uci.ics.genomix.pregelix.LoadGraphVertex;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphInputFormat;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphOutputFormat;
+import edu.uci.ics.genomix.pregelix.LogAlgorithmForMergeGraphVertex;
+import edu.uci.ics.genomix.pregelix.MergeGraphVertex;
+import edu.uci.ics.genomix.pregelix.TestLoadGraphVertex;
+import edu.uci.ics.genomix.pregelix.TextLoadGraphInputFormat;
+import edu.uci.ics.genomix.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 
 
@@ -100,8 +99,8 @@
 	 */
 	public static void main(String[] args) throws IOException {
 		// TODO Auto-generated method stub
-		genBinaryLoadGraph();
-		//genMergeGraph();
+		//genBinaryLoadGraph();
+		genMergeGraph();
 		//genLogAlgorithmForMergeGraph();
 		//genSequenceLoadGraph();
 		//genBasicBinaryLoadGraph();
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestCase.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestCase.java
similarity index 97%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestCase.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestCase.java
index 7af814c..98a7eea 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestCase.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestCase.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.JobRun;
+package edu.uci.ics.genomix.pregelix.JobRun;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -13,6 +13,7 @@
 import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
 import org.junit.Test;
 
+import edu.uci.ics.genomix.pregelix.example.util.TestUtils;
 import edu.uci.ics.hyracks.api.job.JobSpecification;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
 import edu.uci.ics.pregelix.core.jobgen.JobGen;
@@ -22,7 +23,6 @@
 import edu.uci.ics.pregelix.core.jobgen.JobGenOuterJoinSort;
 import edu.uci.ics.pregelix.core.util.PregelixHyracksIntegrationUtil;
 import edu.uci.ics.pregelix.dataflow.util.IterationUtils;
-import edu.uci.ics.pregelix.example.util.TestUtils;
 
 public class RunJobTestCase extends TestCase{
 	
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
similarity index 97%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestSuite.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
index 251e223..e657b94 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/JobRun/RunJobTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/RunJobTestSuite.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix.JobRun;
+package edu.uci.ics.genomix.pregelix.JobRun;
 
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
@@ -41,7 +41,7 @@
 	private static final String PATH_TO_ONLY = "src/test/resources/only.txt";
 	private static final String FILE_EXTENSION_OF_RESULTS = "result";
 
-	private static final String DATA_PATH = "data/input/part-1-out-50000";//sequenceFileMergeTest
+	private static final String DATA_PATH = "data/input/SinglePath.seq";//sequenceFileMergeTest
 	private static final String HDFS_PATH = "/webmap/";
 	
 	private static final String HYRACKS_APP_NAME = "pregelix";
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/LoadGraphVertexTest.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/LoadGraphVertexTest.java
similarity index 95%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/LoadGraphVertexTest.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/LoadGraphVertexTest.java
index e88098d..3087377 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/LoadGraphVertexTest.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/LoadGraphVertexTest.java
@@ -1,4 +1,4 @@
-package edu.uci.ics.pregelix;
+package edu.uci.ics.genomix.pregelix;
 
 import static org.junit.Assert.*;
 
@@ -14,9 +14,9 @@
 
 import org.junit.Test;
 
-import edu.uci.ics.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.LoadGraphVertex.SimpleLoadGraphVertexOutputFormat;
+import edu.uci.ics.genomix.pregelix.example.client.Client;
 import edu.uci.ics.pregelix.api.job.PregelixJob;
-import edu.uci.ics.pregelix.example.client.Client;
 
 public class LoadGraphVertexTest {
 
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/example/util/TestUtils.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
similarity index 98%
rename from genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/example/util/TestUtils.java
rename to genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
index d89ec46..4ea3c1d 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/pregelix/example/util/TestUtils.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/example/util/TestUtils.java
@@ -12,7 +12,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package edu.uci.ics.pregelix.example.util;
+package edu.uci.ics.genomix.pregelix.example.util;
 
 import java.io.BufferedReader;
 import java.io.File;
