diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
index 4936d17..d0d1ce9 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicGraphCleanVertex.java
@@ -308,8 +308,8 @@
             outFlag |= MessageFlag.DIR_FF;
         else if(getVertexValue().getFRList().getCountOfPosition() > 0)
             outFlag |= MessageFlag.DIR_FR;
-        else
-            outFlag |= MessageFlag.DIR_NO;
+//        else
+//            outFlag |= MessageFlag.DIR_NO;
     }
     
     /**
@@ -321,8 +321,8 @@
             outFlag |= MessageFlag.DIR_RF;
         else if(getVertexValue().getRRList().getCountOfPosition() > 0)
             outFlag |= MessageFlag.DIR_RR;
-        else
-            outFlag |= MessageFlag.DIR_NO;
+//        else
+//            outFlag |= MessageFlag.DIR_NO;
     }
     
     /**
@@ -334,24 +334,26 @@
             outFlag |= MessageFlag.IS_HEAD;
         switch(getVertexValue().getState() & State.SHOULD_MERGE_MASK){
             case State.SHOULD_MERGEWITHPREV:
-                setSuccessorAdjMsg();
-                if(ifFlipWithPredecessor())
-                    outgoingMsg.setFlip(true);
-                outgoingMsg.setFlag(outFlag);
-                outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
-                outgoingMsg.setSourceVertexId(getVertexId());
-                if(getNextDestVertexId(getVertexValue()) != null)
+                if(getNextDestVertexId(getVertexValue()) != null){
+                    setSuccessorAdjMsg();
+                    if(ifFlipWithPredecessor())
+                        outgoingMsg.setFlip(true);
+                    outgoingMsg.setFlag(outFlag);
+                    outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
+                    outgoingMsg.setSourceVertexId(getVertexId());
                     sendMsg(getNextDestVertexId(getVertexValue()), outgoingMsg);
+                }
                 break;
             case State.SHOULD_MERGEWITHNEXT:
-                setPredecessorAdjMsg();
-                if(ifFilpWithSuccessor())
-                    outgoingMsg.setFlip(true);
-                outgoingMsg.setFlag(outFlag);
-                outgoingMsg.setNeighberNode(getVertexValue().getOutgoingList());
-                outgoingMsg.setSourceVertexId(getVertexId());
-                if(getPrevDestVertexId(getVertexValue()) != null)
+                if(getPrevDestVertexId(getVertexValue()) != null){
+                    setPredecessorAdjMsg();
+                    if(ifFilpWithSuccessor())
+                        outgoingMsg.setFlip(true);
+                    outgoingMsg.setFlag(outFlag);
+                    outgoingMsg.setNeighberNode(getVertexValue().getOutgoingList());
+                    outgoingMsg.setSourceVertexId(getVertexId());
                     sendMsg(getPrevDestVertexId(getVertexValue()), outgoingMsg);
+                }
                 break; 
         }
     }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
index 28d0563..a6ebb27 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -160,7 +160,6 @@
             
             curHead = isNodeRandomHead(curKmer);
             
-            
             // the headFlag and tailFlag's indicate if the node is at the beginning or end of a simple path. 
             // We prevent merging towards non-path nodes
             hasNext = setNextInfo(getVertexValue());//&& headFlag == 0;
@@ -198,12 +197,14 @@
                     }
                 }
             }
+            this.activate();
         }
         else if (getSuperstep() % 4 == 0){
             //update neighber
             while (msgIterator.hasNext()) {
                 incomingMsg = msgIterator.next();
                 processUpdate();
+                this.activate();
                 if(VertexUtil.isHeadOrRearVertexWithDegree(getVertexValue()))
                     voteToHalt();
             }
@@ -216,7 +217,7 @@
                 incomingMsg = msgIterator.next();
                 selfFlag = (byte) (State.VERTEX_MASK & getVertexValue().getState());
                 processMerge();
-                
+                this.activate();
                 //head meets head, stop
                 if(getMsgFlag() == MessageFlag.IS_HEAD && selfFlag == MessageFlag.IS_HEAD)
                     voteToHalt();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirectionFlag.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirectionFlag.java
index 51a73f1..4785205 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirectionFlag.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirectionFlag.java
@@ -3,7 +3,7 @@
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 
 public class DirectionFlag extends State {
-    public static final byte DIR_NO = 0b000 << 0;
+//    public static final byte DIR_NO = 0b000 << 0;
     public static final byte DIR_FF = 0b001 << 0;
     public static final byte DIR_FR = 0b010 << 0;
     public static final byte DIR_RF = 0b011 << 0;
diff --git a/genomix/genomix-pregelix/src/test/resources/only_pathmerge.txt b/genomix/genomix-pregelix/src/test/resources/only_pathmerge.txt
index 3d007d2..5a15ca0 100644
--- a/genomix/genomix-pregelix/src/test/resources/only_pathmerge.txt
+++ b/genomix/genomix-pregelix/src/test/resources/only_pathmerge.txt
@@ -1 +1 @@
-P4ForMergeGraph.xml
+LogAlgorithmForMergeGraph.xml
