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 ac52e0d..0df5e6b 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
@@ -1,8 +1,6 @@
 package edu.uci.ics.genomix.pregelix.operator;
 
 import java.util.Iterator;
-import java.util.logging.Logger;
-
 import org.apache.hadoop.io.NullWritable;
 
 import edu.uci.ics.genomix.type.GeneCode;
@@ -52,9 +50,6 @@
  * Naive Algorithm for path merge graph
  */
 public class NaiveAlgorithmForPathMergeVertex extends Vertex<KmerBytesWritable, ValueStateWritable, NullWritable, NaiveAlgorithmMessageWritable>{
-	//public static Logger logger = Logger.getLogger(NaiveAlgorithmForPathMergeVertex.class.getName()); 
-
-	
 	public static final String KMER_SIZE = "NaiveAlgorithmForPathMergeVertex.kmerSize";
 	public static final String ITERATIONS = "NaiveAlgorithmForPathMergeVertex.iteration";
 	public static int kmerSize = -1;
@@ -186,12 +181,6 @@
 				responseMsgToHeadVertex();
 			}
 		}
-		/*String log = "Iterator:" + getSuperstep();
-		log += getVertexId().toString() + "\t";
-		log += getVertexValue().getMergeChain().toString() + "\t";
-		log += GeneCode.getSymbolFromBitMap(getVertexValue().getAdjMap()) + "\t";
-		log += getVertexValue().getState();
-		logger.info(log);*/
 		voteToHalt();
 	}
 
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 2fe0227..11a2447 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
@@ -98,13 +98,14 @@
 			if((adjMap & (1 << x)) != 0){
 				destVertexId.set(getNextDestVertexId(vertexId, x));
 				sendMsg(destVertexId, msg);
-				String log = "Iterator:" + getSuperstep();
+				/*String log = "Iterator:" + getSuperstep() + "\t";
 				log += getVertexId().toString() + "\t";
 				log += getVertexValue().getMergeChain().toString() + "\t";
 				log += GeneCode.getSymbolFromBitMap(getVertexValue().getAdjMap()) + "\t";
 				log += getVertexValue().getState() + "\t";
 				log += "Dest: " + destVertexId.toString();
 				logger.info(log);
+				System.out.println(log);*/
 			}
 		}
 	}
@@ -144,7 +145,7 @@
 		msg.reset();
 		msg.setMessage(Message.START);
 		msg.setSourceVertexId(getVertexId());
-		if(getVertexId().toString().equals("CGGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGG")){
+		/*if(getVertexId().toString().equals("GGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGGC")){
 			String log = "Iterator:" + getSuperstep();
 			log += getVertexId().toString() + "\t";
 			log += getVertexValue().getMergeChain().toString() + "\t";
@@ -152,7 +153,8 @@
 			log += getVertexValue().getState() + "\t";
 			log += "Dest: " + destVertexId.toString();
 			logger.info(log);
-		}
+			System.out.println(log);
+		}*/
 		sendMsg(destVertexId, msg);
 		voteToHalt();
 	}
@@ -163,7 +165,7 @@
 		msg.reset();
 		msg.setMessage(Message.END);
 		msg.setSourceVertexId(getVertexId());
-		if(getVertexId().toString().equals("CGGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGG")){
+		/*if(getVertexId().toString().equals("GGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGGC")){
 			String log = "Iterator:" + getSuperstep();
 			log += getVertexId().toString() + "\t";
 			log += getVertexValue().getMergeChain().toString() + "\t";
@@ -171,7 +173,8 @@
 			log += getVertexValue().getState() + "\t";
 			log += "Dest: " + destVertexId.toString();
 			logger.info(log);
-		}
+			System.out.println(log);
+		}*/
 		sendMsg(destVertexId, msg);
 		voteToHalt();
 	}
@@ -278,9 +281,9 @@
 	public void startSendMsg(){
 		if(GraphVertexOperation.isHeadVertex(getVertexValue().getAdjMap())){
 			msg.set(null, null, (byte)0, Message.START);
-			if(getVertexId().toString().equals("CGGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGG")){
-				sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
-			}
+			sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
+			//if(getVertexId().toString().equals("CGGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGG")){
+			//}
 			voteToHalt();
 		}
 		if(GraphVertexOperation.isRearVertex(getVertexValue().getAdjMap())){
@@ -298,12 +301,15 @@
 	 */
 	public void initState(Iterator<LogAlgorithmMessageWritable> msgIterator){
 		while(msgIterator.hasNext()){
+			/*if(getVertexId().toString().equals("GGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGGC")){
 			String log = "Iterator:" + getSuperstep();
 			log += getVertexId().toString() + "\t";
 			log += getVertexValue().getMergeChain().toString() + "\t";
 			log += GeneCode.getSymbolFromBitMap(getVertexValue().getAdjMap()) + "\t";
 			log += getVertexValue().getState();
 			logger.info(log);
+			System.out.println(log);
+			}*/
 			if(!GraphVertexOperation.isPathVertex(getVertexValue().getAdjMap())){
 				msgIterator.next();
 				voteToHalt();
@@ -362,6 +368,10 @@
 	@Override
 	public void compute(Iterator<LogAlgorithmMessageWritable> msgIterator) {
 		initVertex();
+		/*if(getVertexId().toString().equals("GGAACGATGGGCAGGCAGAGTGTTCTACCTTTTCTCTGTATTTTACGATGAAGGC")){
+			System.out.println("found");
+			//sendMsgToAllNextNodes(getVertexId(), getVertexValue().getAdjMap());
+		}*/
 		if (getSuperstep() == 1) 
 			startSendMsg();
 		else if(getSuperstep() == 2)
