diff --git a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
index d1fcd6b..3fd9ef1 100644
--- a/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
+++ b/genomix/genomix-data/src/main/java/edu/uci/ics/genomix/type/NodeWritable.java
@@ -31,32 +31,11 @@
 
     // merge/update directions
     public static class DirectionFlag {
-        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;
-        public static final byte DIR_RR = 0b100 << 0;
-        public static final byte DIR_MASK = 0b111 << 0;
-    }
-    
-    public static class SpecialVertexFlag extends DirectionFlag {
-        public static final byte IS_NON = 0b00 << 5;
-        public static final byte IS_RANDOMTAIL = 0b00 << 5;
-        public static final byte IS_STOP = 0b00 << 5;
-        public static final byte IS_HEAD = 0b01 << 5;
-        public static final byte IS_FINAL = 0b10 << 5;
-        public static final byte IS_RANDOMHEAD = 0b11 << 5;
-        public static final byte IS_OLDHEAD = 0b11 << 5;
-
-        public static final byte VERTEX_MASK = 0b11 << 5;
-        public static final byte VERTEX_CLEAR = (byte) 11001111;
-    }
-    
-    public static class MergeDirFlag extends SpecialVertexFlag{
-        public static final byte NO_MERGE = 0b00 << 3;
-        public static final byte SHOULD_MERGEWITHNEXT = 0b01 << 3;
-        public static final byte SHOULD_MERGEWITHPREV = 0b10 << 3;
-        public static final byte SHOULD_MERGE_MASK = 0b11 << 3;
+        public static final byte DIR_FF = 0b00 << 0;
+        public static final byte DIR_FR = 0b01 << 0;
+        public static final byte DIR_RF = 0b10 << 0;
+        public static final byte DIR_RR = 0b11 << 0;
+        public static final byte DIR_MASK = 0b11 << 0;
     }
 
     private PositionWritable nodeID;
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java
index f9a3444..ba5b601 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForPathMergeInputFormat.java
@@ -10,7 +10,7 @@
 import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
 import edu.uci.ics.pregelix.api.graph.Vertex;
@@ -71,7 +71,7 @@
                 vertexValue.setRFList(node.getRFList());
                 vertexValue.setRRList(node.getRRList());
                 vertexValue.setKmer(node.getKmer());
-                vertexValue.setState(State.NON_VERTEX);
+                vertexValue.setState(State.IS_NON);
                 vertex.setVertexValue(vertexValue);
             }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java
index b9af850..13ca02c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/NaiveAlgorithmForPathMergeInputFormat.java
@@ -14,7 +14,7 @@
 import edu.uci.ics.pregelix.api.util.BspUtils;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat;
 import edu.uci.ics.genomix.pregelix.api.io.binary.BinaryVertexInputFormat.BinaryVertexReader;
 
@@ -74,7 +74,7 @@
             vertexValue.setRFList(node.getRFList());
             vertexValue.setRRList(node.getRRList());
             vertexValue.setKmer(node.getKmer());
-            vertexValue.setState(State.NON_VERTEX);
+            vertexValue.setState(State.IS_NON);
             vertex.setVertexValue(vertexValue);
         }
 
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
index 2defa0c..9274c80 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/io/VertexValueWritable.java
@@ -5,13 +5,32 @@
 import org.apache.hadoop.io.WritableComparable;
 
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
-import edu.uci.ics.genomix.pregelix.type.State;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.PositionListWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
 
 public class VertexValueWritable implements WritableComparable<VertexValueWritable> {
 
+    public static class VertexStateFlag {
+        public static final byte IS_NON = 0b00 << 5;
+        public static final byte IS_RANDOMTAIL = 0b00 << 5;
+        public static final byte IS_STOP = 0b00 << 5;
+        public static final byte IS_HEAD = 0b01 << 5;
+        public static final byte IS_FINAL = 0b10 << 5;
+        public static final byte IS_RANDOMHEAD = 0b11 << 5;
+        public static final byte IS_OLDHEAD = 0b11 << 5;
+
+        public static final byte VERTEX_MASK = 0b11 << 5;
+        public static final byte VERTEX_CLEAR = (byte) 11001111;
+    }
+    
+    public static class State extends VertexStateFlag{
+        public static final byte NO_MERGE = 0b00 << 3;
+        public static final byte SHOULD_MERGEWITHNEXT = 0b01 << 3;
+        public static final byte SHOULD_MERGEWITHPREV = 0b10 << 3;
+        public static final byte SHOULD_MERGE_MASK = 0b11 << 3;
+    }
+    
     private AdjacencyListWritable incomingList;
     private AdjacencyListWritable outgoingList;
     private byte state;
@@ -21,7 +40,7 @@
     public VertexValueWritable() {
         incomingList = new AdjacencyListWritable();
         outgoingList = new AdjacencyListWritable();
-        state = State.NON_VERTEX;
+        state = State.IS_NON;
         kmer = new KmerBytesWritable(0);
         mergeDest = new PositionWritable();
     }
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
index c29e1b3..5f6440f 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/log/LogAlgorithmLogFormatter.java
@@ -4,7 +4,7 @@
 
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.type.Message;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.type.State2;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 
 public class LogAlgorithmLogFormatter extends Formatter {
@@ -83,7 +83,7 @@
                 builder.append("Chain Length: " + msg.getLengthOfChain() + "\r\n");
             }
 
-            builder.append("State is: " + State.STATE_CONTENT.getContentFromCode(state) + "\r\n");
+            builder.append("State is: " + State2.STATE_CONTENT.getContentFromCode(state) + "\r\n");
         }
         if (operation == 2) {
             chain = mergeChain.toString();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
index cd84272..3eb1023 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/BasicPathMergeVertex.java
@@ -10,6 +10,7 @@
 import edu.uci.ics.pregelix.api.graph.Vertex;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.type.AdjMessage;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
@@ -44,18 +45,18 @@
             maxIteration = getContext().getConfiguration().getInt(ITERATIONS, 1000000);
         outFlag = (byte)0;
         outgoingMsg.reset();
-        headFlag = (byte)(getVertexValue().getState() & MessageFlag.IS_HEAD);
+        headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
     }
     
     /**
      * reset headFlag
      */
     public void resetHeadFlag(){
-        headFlag = (byte)(getVertexValue().getState() & MessageFlag.IS_HEAD);
+        headFlag = (byte)(getVertexValue().getState() & State.IS_HEAD);
     }
     
     public byte getHeadFlag(){
-        return (byte)(getVertexValue().getState() & MessageFlag.IS_HEAD);
+        return (byte)(getVertexValue().getState() & State.IS_HEAD);
     }
     
     /**
@@ -316,8 +317,8 @@
     public void sendMergeMsg(){
         if(selfFlag == MessageFlag.IS_HEAD){
             byte newState = getVertexValue().getState(); 
-            newState &= ~MessageFlag.IS_HEAD;
-            newState |= MessageFlag.IS_OLDHEAD;
+            newState &= ~State.IS_HEAD;
+            newState |= State.IS_OLDHEAD;
             getVertexValue().setState(newState);
             resetSelfFlag();
             outFlag |= MessageFlag.IS_HEAD;
@@ -360,7 +361,7 @@
     public void broadcastMergeMsg(){
         if(headFlag > 0)
             outFlag |= MessageFlag.IS_HEAD;
-        switch(getVertexValue().getState() & MessageFlag.SHOULD_MERGE_MASK) {
+        switch(getVertexValue().getState() & State.SHOULD_MERGE_MASK) {
             case MessageFlag.SHOULD_MERGEWITHNEXT:
                 setSuccessorAdjMsg();
                 if(ifFlipWithPredecessor())
@@ -392,7 +393,7 @@
      */
     public void sendUpdateMsgToPredecessor(){
         byte state = getVertexValue().getState();
-        state |= MessageFlag.SHOULD_MERGEWITHNEXT;
+        state |= State.SHOULD_MERGEWITHNEXT;
         getVertexValue().setState(state);
         if(getVertexValue().getFFList().getLength() > 0)
             getVertexValue().setMergeDest(getVertexValue().getFFList().getPosition(0));
@@ -407,7 +408,7 @@
      */
     public void sendUpdateMsgToSuccessor(){
         byte state = getVertexValue().getState();
-        state |= MessageFlag.SHOULD_MERGEWITHPREV;
+        state |= State.SHOULD_MERGEWITHPREV;
         getVertexValue().setState(state);
         if(getVertexValue().getRFList().getLength() > 0)
             getVertexValue().setMergeDest(getVertexValue().getRFList().getPosition(0));
@@ -479,7 +480,7 @@
         
         if((inFlag & MessageFlag.IS_HEAD) > 0){
             byte state = getVertexValue().getState();
-            state |= MessageFlag.IS_HEAD;
+            state |= State.IS_HEAD;
             getVertexValue().setState(state);
         }
         
@@ -509,8 +510,8 @@
      */
     public void setHeadState(){
         byte state = getVertexValue().getState();
-        state &= MessageFlag.VERTEX_CLEAR;
-        state |= MessageFlag.IS_HEAD;
+        state &= State.VERTEX_CLEAR;
+        state |= State.IS_HEAD;
         getVertexValue().setState(state);
     }
     
@@ -519,8 +520,8 @@
      */
     public void setFinalState(){
         byte state = getVertexValue().getState();
-        state &= MessageFlag.VERTEX_CLEAR;
-        state |= MessageFlag.IS_FINAL;
+        state &= State.VERTEX_CLEAR;
+        state |= State.IS_FINAL;
         getVertexValue().setState(state);
     }
     
@@ -529,8 +530,8 @@
      */
     public void setStopFlag(){
         byte state = incomingMsg.getFlag();
-        state &= MessageFlag.VERTEX_CLEAR;
-        state |= MessageFlag.IS_STOP;
+        state &= State.VERTEX_CLEAR;
+        state |= State.IS_STOP;
         getVertexValue().setState(state);
     }
     
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/NaiveAlgorithmForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/NaiveAlgorithmForPathMergeVertex.java
index 0b636ee..ba0d304 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/NaiveAlgorithmForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/NaiveAlgorithmForPathMergeVertex.java
@@ -14,8 +14,8 @@
 import edu.uci.ics.genomix.pregelix.format.NaiveAlgorithmForPathMergeOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.type.Message;
-import edu.uci.ics.genomix.pregelix.type.State;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /*
@@ -171,9 +171,9 @@
      */
     public void setState() {
         if (incomingMsg.getFlag() == Message.START) {
-            getVertexValue().setState(State.START_VERTEX);
-        } else if (incomingMsg.getFlag() == Message.END && getVertexValue().getState() != State.START_VERTEX) {
-            getVertexValue().setState(State.END_VERTEX);
+            getVertexValue().setState(State.IS_HEAD);
+        } else if (incomingMsg.getFlag() == Message.END && getVertexValue().getState() != State.IS_HEAD) {
+            getVertexValue().setState(State.IS_HEAD);//is tail
             voteToHalt();
         } else
             voteToHalt();
@@ -208,7 +208,7 @@
                     sendMsg(destVertexId, outgoingMsg);
                 } else {
                     mergeChainVertex();
-                    getVertexValue().setState(State.FINAL_VERTEX);
+                    getVertexValue().setState(State.IS_FINAL);
                     //String source = getVertexValue().getKmer().toString();
                     //System.out.println();
                 }
@@ -223,7 +223,7 @@
         deleteVertex(getVertexId());
         outgoingMsg.setNeighberNode(getVertexValue().getOutgoingList());
         outgoingMsg.setChainVertexId(getVertexValue().getKmer());
-        if (getVertexValue().getState() == State.END_VERTEX)
+        if (getVertexValue().getState() == State.IS_HEAD)//is_tail
             outgoingMsg.setFlag(Message.STOP);
         destVertexId.set(incomingMsg.getSourceVertexId());
         sendMsg(destVertexId, outgoingMsg);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P3ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P3ForPathMergeVertex.java
index 69e1fb6..a22d393 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P3ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P3ForPathMergeVertex.java
@@ -15,7 +15,7 @@
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.type.Message;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.type.State2;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /*
@@ -177,7 +177,7 @@
             if (random < pseudoRate)
                 markPseudoHead();
             else{
-                getVertexValue().setState(State.NON_VERTEX);
+                getVertexValue().setState(State2.NON_VERTEX);
                 voteToHalt();
             }
             /*if (getVertexId().toString().equals("CCTCA") || getVertexId().toString().equals("CTCAG")) //AGTAC CCTCA CTCAG CGCCC ACGCC
@@ -192,9 +192,9 @@
      */
     public void setState() {
         if (incomingMsg.getFlag() == Message.START) {
-            getVertexValue().setState(State.START_VERTEX);
-        } else if (incomingMsg.getFlag() == Message.END && getVertexValue().getState() != State.START_VERTEX) {
-            getVertexValue().setState(State.END_VERTEX);
+            getVertexValue().setState(State2.START_VERTEX);
+        } else if (incomingMsg.getFlag() == Message.END && getVertexValue().getState() != State2.START_VERTEX) {
+            getVertexValue().setState(State2.END_VERTEX);
             voteToHalt();
         } else
             voteToHalt();
@@ -204,7 +204,7 @@
      * mark the pseudoHead
      */
     public void markPseudoHead() {
-        getVertexValue().setState(State.PSEUDOHEAD);
+        getVertexValue().setState(State2.PSEUDOHEAD);
         outgoingMsg.setFlag(Message.FROMPSEUDOHEAD);
         destVertexId
                 .set(getPreDestVertexId(getVertexValue()));
@@ -216,13 +216,13 @@
      */
     public void markPseudoRear() {
         if (incomingMsg.getFlag() == Message.FROMPSEUDOHEAD 
-                && getVertexValue().getState() != State.START_VERTEX) {
-            getVertexValue().setState(State.PSEUDOREAR);
+                && getVertexValue().getState() != State2.START_VERTEX) {
+            getVertexValue().setState(State2.PSEUDOREAR);
             voteToHalt();
         }
         else if(incomingMsg.getFlag() == Message.FROMPSEUDOHEAD 
-                && getVertexValue().getState() == State.START_VERTEX){
-            getVertexValue().setState(State.START_HALT);
+                && getVertexValue().getState() == State2.START_VERTEX){
+            getVertexValue().setState(State2.START_HALT);
         }
     }
  
@@ -257,7 +257,7 @@
                     sendMsg(destVertexId, outgoingMsg);
                 } else {
                     mergeChainVertex();
-                    getVertexValue().setState(State.FINAL_VERTEX);
+                    getVertexValue().setState(State2.FINAL_VERTEX);
                     //String source = getVertexValue().getKmer().toString();
                     //System.out.println();
                 }
@@ -272,7 +272,7 @@
         deleteVertex(getVertexId());
         outgoingMsg.setNeighberNode(getVertexValue().getOutgoingList());
         outgoingMsg.setChainVertexId(getVertexValue().getKmer());
-        if (getVertexValue().getState() == State.END_VERTEX)
+        if (getVertexValue().getState() == State2.END_VERTEX)
             outgoingMsg.setFlag(Message.STOP);
         sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
     }
@@ -282,7 +282,7 @@
      */
     public void sendMsgToPathVertexPartitionPhase(Iterator<MessageWritable> msgIterator) {
         if (getSuperstep() == 4) {
-            if(getVertexValue().getState() != State.START_HALT){
+            if(getVertexValue().getState() != State2.START_HALT){
                 outgoingMsg.setSourceVertexId(getVertexId());
                 destVertexId.set(getNextDestVertexId(getVertexValue()));
                 sendMsg(destVertexId, outgoingMsg);
@@ -302,14 +302,14 @@
                         voteToHalt();
                     } else {
                         //check head or pseudoHead
-                        if (getVertexValue().getState() == State.START_VERTEX
+                        if (getVertexValue().getState() == State2.START_VERTEX
                                 && incomingMsg.getFlag() == Message.STOP) {
-                            getVertexValue().setState(State.FINAL_VERTEX);
+                            getVertexValue().setState(State2.FINAL_VERTEX);
                             //String source = getVertexValue().getKmer().toString();
                             //System.out.println();
-                        } else if(getVertexValue().getState() == State.PSEUDOHEAD
+                        } else if(getVertexValue().getState() == State2.PSEUDOHEAD
                                 && incomingMsg.getFlag() == Message.STOP)
-                            getVertexValue().setState(State.END_VERTEX);
+                            getVertexValue().setState(State2.END_VERTEX);
                     }
                 }
             }
@@ -320,15 +320,15 @@
      * path node sends message back to head node in partition phase
      */
     public void responseMsgToHeadVertexPartitionPhase() {
-        if (getVertexValue().getState() == State.PSEUDOHEAD)
+        if (getVertexValue().getState() == State2.PSEUDOHEAD)
             outgoingMsg.setFlag(Message.FROMPSEUDOHEAD);
         else {
             deleteVertex(getVertexId());
             outgoingMsg.setNeighberNode(getVertexValue().getOutgoingList()); //incomingMsg.getNeighberNode()
             outgoingMsg.setChainVertexId(getVertexValue().getKmer());
-            if (getVertexValue().getState() == State.PSEUDOREAR)
+            if (getVertexValue().getState() == State2.PSEUDOREAR)
                 outgoingMsg.setFlag(Message.FROMPSEUDOREAR);
-            else if (getVertexValue().getState() == State.END_VERTEX)
+            else if (getVertexValue().getState() == State2.END_VERTEX)
                 outgoingMsg.setFlag(Message.STOP);
         }
         sendMsg(incomingMsg.getSourceVertexId(), outgoingMsg);
@@ -344,25 +344,25 @@
             mergeChainVertex();
             getVertexValue().setOutgoingList(incomingMsg.getNeighberNode());
             //check head or pseudoHead
-            if (getVertexValue().getState() == State.START_VERTEX
+            if (getVertexValue().getState() == State2.START_VERTEX
                     && incomingMsg.getFlag() == Message.STOP) {
-                getVertexValue().setState(State.FINAL_VERTEX);
+                getVertexValue().setState(State2.FINAL_VERTEX);
                 //String source = getVertexValue().getKmer().toString();
                 //System.out.println();
-            } else if(getVertexValue().getState() == State.PSEUDOHEAD
+            } else if(getVertexValue().getState() == State2.PSEUDOHEAD
                     && incomingMsg.getFlag() == Message.STOP)
-                getVertexValue().setState(State.END_VERTEX);
+                getVertexValue().setState(State2.END_VERTEX);
         }
     }
     /**
      * After partition phase, reset state: ex. psudoHead and psudoRear -> null
      */
     public void resetState() {
-        if (getVertexValue().getState() == State.PSEUDOHEAD || getVertexValue().getState() == State.PSEUDOREAR) {
-            getVertexValue().setState(State.NON_VERTEX);
+        if (getVertexValue().getState() == State2.PSEUDOHEAD || getVertexValue().getState() == State2.PSEUDOREAR) {
+            getVertexValue().setState(State2.NON_VERTEX);
         }
-        if(getVertexValue().getState() == State.START_HALT)
-            getVertexValue().setState(State.START_VERTEX);
+        if(getVertexValue().getState() == State2.START_HALT)
+            getVertexValue().setState(State2.START_VERTEX);
     }
 
     @Override
@@ -388,7 +388,7 @@
             finalProcessPartitionPhase(msgIterator);
         } else if (getSuperstep() % 2 == 1 && getSuperstep() <= maxIteration) {
             resetState();
-            if(getVertexValue().getState() == State.START_VERTEX)
+            if(getVertexValue().getState() == State2.START_VERTEX)
                 sendMsgToPathVertexMergePhase(msgIterator);
             voteToHalt();
         } else if (getSuperstep() % 2 == 0 && getSuperstep() <= maxIteration) {
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 e702bbd..d0a6da2 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
@@ -11,6 +11,7 @@
 import edu.uci.ics.genomix.pregelix.format.NaiveAlgorithmForPathMergeOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
 
 /*
@@ -85,7 +86,7 @@
         outFlag = (byte)0;
         inFlag = (byte)0;
         // Node may be marked as head b/c it's a real head or a real tail
-        headFlag = (byte) (MessageFlag.IS_HEAD & getVertexValue().getState());
+        headFlag = (byte) (State.IS_HEAD & getVertexValue().getState());
         outgoingMsg.reset();
     }
 
@@ -101,7 +102,7 @@
      * set nextID to the element that's next (in the node's FF or FR list), returning true when there is a next neighbor
      */
     protected boolean setNextInfo(VertexValueWritable value) {
-        if(headFlag > 0 && (getVertexValue().getState() & MessageFlag.SHOULD_MERGEWITHPREV) > 0){
+        if(headFlag > 0 && (getVertexValue().getState() & State.SHOULD_MERGEWITHPREV) > 0){
             return false;
         }
         if (value.getFFList().getCountOfPosition() > 0) {
@@ -121,7 +122,7 @@
      * set prevID to the element that's previous (in the node's RR or RF list), returning true when there is a previous neighbor
      */
     protected boolean setPrevInfo(VertexValueWritable value) {
-        if(headFlag > 0 && (getVertexValue().getState() & MessageFlag.SHOULD_MERGEWITHNEXT) > 0){
+        if(headFlag > 0 && (getVertexValue().getState() & State.SHOULD_MERGEWITHNEXT) > 0){
             return false;
         }
         if (value.getRRList().getCountOfPosition() > 0) {
@@ -213,7 +214,7 @@
             //merge kmer
             while (msgIterator.hasNext()) {
                 incomingMsg = msgIterator.next();
-                selfFlag = (byte) (MessageFlag.VERTEX_MASK & getVertexValue().getState());
+                selfFlag = (byte) (State.VERTEX_MASK & getVertexValue().getState());
                 processMerge();
                 
                 //head meets head, stop
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P5ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P5ForPathMergeVertex.java
index a67d645..c8d45dc 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P5ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P5ForPathMergeVertex.java
@@ -15,9 +15,9 @@
 import edu.uci.ics.genomix.pregelix.format.NaiveAlgorithmForPathMergeOutputFormat;
 import edu.uci.ics.genomix.pregelix.io.MessageWritable;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.pregelix.type.Message;
 import edu.uci.ics.genomix.pregelix.type.MessageFlag;
-import edu.uci.ics.genomix.pregelix.type.State;
 import edu.uci.ics.genomix.pregelix.util.VertexUtil;
 
 /*
@@ -242,7 +242,7 @@
     public void setState() {
         if (incomingMsg.getFlag() == Message.START) {
             getVertexValue().setState(MessageFlag.IS_HEAD); //State.START_VERTEX
-        } else if (incomingMsg.getFlag() == Message.END && getVertexValue().getState() != State.START_VERTEX) {
+        } else if (incomingMsg.getFlag() == Message.END && getVertexValue().getState() != State.IS_HEAD) {
             getVertexValue().setState(MessageFlag.IS_HEAD);
             getVertexValue().setKmer(getVertexValue().getKmer());
             //voteToHalt();
@@ -432,8 +432,8 @@
             initState(msgIterator);
         else if (getSuperstep() % 4 == 3){
             // Node may be marked as head b/c it's a real head or a real tail
-            headFlag = (byte) (State.START_VERTEX & getVertexValue().getState());
-            tailFlag = (byte) (State.END_VERTEX & getVertexValue().getState());
+            headFlag = (byte) (State.IS_HEAD & getVertexValue().getState());
+            tailFlag = (byte) (State.IS_HEAD & getVertexValue().getState()); //is_tail
             outFlag = (byte) (headFlag | tailFlag);
             
             // only PATH vertices are present. Find the ID's for my neighbors
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java
index 9c20ce6..515bdbf 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/ConvertNodeToIdValue.java
@@ -12,7 +12,8 @@
 import org.apache.hadoop.io.SequenceFile.CompressionType;
 
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
+
 import edu.uci.ics.genomix.type.NodeWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
 
@@ -39,7 +40,7 @@
             outputValue.setRFList(node.getRFList());
             outputValue.setRRList(node.getRRList());
             outputValue.setKmer(node.getKmer());
-            outputValue.setState(State.NON_VERTEX);
+            outputValue.setState(State.IS_HEAD);
             writer.append(outputKey, outputValue);
         }
         writer.close();
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
index f31c1d0..9d7b735 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
@@ -13,7 +13,7 @@
 import org.apache.hadoop.io.SequenceFile;
 
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.io.VertexValueWritable.State;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 import edu.uci.ics.genomix.type.PositionWritable;
 
@@ -85,7 +85,7 @@
                     break;
                 }
                 if (value.getLengthOfKmer() != -1 && value.getLengthOfKmer() <= maxLength
-                        && value.getState() == State.FINAL_VERTEX) {
+                        && value.getState() == State.IS_FINAL) {
                     bw.write(key.toString() + "\t" + value.toString());
                     bw.newLine();
                 }
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
new file mode 100644
index 0000000..6e1bc4b
--- /dev/null
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/DirectionFlag.java
@@ -0,0 +1,12 @@
+package edu.uci.ics.genomix.pregelix.type;
+
+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_FF = 0b001 << 0;
+    public static final byte DIR_FR = 0b010 << 0;
+    public static final byte DIR_RF = 0b011 << 0;
+    public static final byte DIR_RR = 0b100 << 0;
+    public static final byte DIR_MASK = 0b111 << 0;
+}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
index 09ea917..7b1b4e5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
@@ -1,8 +1,6 @@
 package edu.uci.ics.genomix.pregelix.type;
 
-import edu.uci.ics.genomix.type.NodeWritable.MergeDirFlag;
-
-public class MessageFlag extends MergeDirFlag {
+public class MessageFlag extends DirectionFlag {
     
     //public static final byte FLIP = 1 << 6;
 
@@ -12,3 +10,5 @@
         return "ERROR_BAD_MESSAGE";
     }
 }
+
+
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State2.java
similarity index 98%
rename from genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
rename to genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State2.java
index 6730299..aa22972 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State2.java
@@ -1,6 +1,6 @@
 package edu.uci.ics.genomix.pregelix.type;
 
-public class State {
+public class State2 {
 
     public static final byte NON_VERTEX = 0;
     public static final byte START_VERTEX = 1;
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 499abdc..e8ca60f 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
@@ -13,7 +13,7 @@
 import org.junit.Test;
 
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
-import edu.uci.ics.genomix.pregelix.type.State;
+import edu.uci.ics.genomix.pregelix.type.State2;
 import edu.uci.ics.genomix.type.KmerBytesWritable;
 
 public class MergePathTest {
@@ -57,7 +57,7 @@
                 if (key == null || value == null) {
                     break;
                 }
-                if (value.getState() == State.FINAL_VERTEX) {
+                if (value.getState() == State2.FINAL_VERTEX) {
                     /*bw.write(value.getMergeChain().toString()
                     		+ "\t" + GeneCode.getSymbolFromBitMap(value.getAdjMap()));
                     bw.newLine();*/
