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 e7b0509..ffcb449 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
@@ -114,6 +114,7 @@
             RR((byte)(0b11 << 0));
             
             public static final byte MASK = (byte)(0b11 << 0); 
+            public static final byte CLEAR = (byte)(0b1111100 << 0);
             private final byte val;
             
             private EDGETYPE(byte val){
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
index 8c64cea..1b1d748 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -560,22 +560,6 @@
         return null;
     }
     
-    public boolean isTandemRepeat(VertexValueWritable value){
-            VKmerBytesWritable kmerToCheck;
-            for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
-                Iterator<VKmerBytesWritable> it = value.getEdgeList(et).getKeyIterator();
-                while(it.hasNext()){
-                    kmerToCheck = it.next();
-                    if(kmerToCheck.equals(getVertexId())){
-                        repeatEdgetype = et;
-                        repeatKmer.setAsCopy(kmerToCheck);
-                        return true;
-                    }
-                }
-            }
-            return false;
-        }
-    
     /**
      * set statistics counter
      */
@@ -689,7 +673,7 @@
     
 //2013.9.21 ------------------------------------------------------------------//
     /**
-     * get destination vertex 
+     * get destination vertex ex. RemoveTip
      */
     public VKmerBytesWritable getDestVertexId(DIR direction){
         int degree = getVertexValue().getDegree(direction);
@@ -706,4 +690,40 @@
         //degree in this direction == 0
         throw new IllegalArgumentException("degree > 0, getDestVertexId(DIR direction) only can use for degree == 1 + \n" + getVertexValue().toString());
     }
+    
+    /**
+     * check if I am a tandemRepeat 
+     */
+    public boolean isTandemRepeat(VertexValueWritable value){
+        VKmerBytesWritable kmerToCheck;
+        for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
+            Iterator<VKmerBytesWritable> it = value.getEdgeList(et).getKeyIterator();
+            while(it.hasNext()){
+                kmerToCheck = it.next();
+                if(kmerToCheck.equals(getVertexId())){
+                    repeatEdgetype = et;
+                    repeatKmer.setAsCopy(kmerToCheck);
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
+    /**
+     * broadcastKillself ex. RemoveLow
+     */
+    public void broadcastKillself(){
+        VertexValueWritable vertex = getVertexValue();
+        for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
+            for(VKmerBytesWritable kmer : vertex.getEdgeList(et).getKeys()){
+                outFlag &= EDGETYPE.CLEAR;
+                outFlag |= et.mirror().get();
+                outgoingMsg.setFlag(outFlag);
+                outgoingMsg.setSourceVertexId(getVertexId());
+                destVertexId = kmer;
+                sendMsg(destVertexId, outgoingMsg);
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
index cef3131..a2dedbb 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/removelowcoverage/RemoveLowCoverageVertex.java
@@ -5,12 +5,14 @@
 import java.util.Iterator;
 import java.util.Set;
 
+import edu.uci.ics.genomix.config.GenomixJobConf;
 import edu.uci.ics.genomix.pregelix.client.Client;
 import edu.uci.ics.genomix.pregelix.io.VertexValueWritable;
 import edu.uci.ics.genomix.pregelix.io.message.MessageWritable;
 import edu.uci.ics.genomix.pregelix.operator.BasicGraphCleanVertex;
 import edu.uci.ics.genomix.pregelix.operator.aggregator.StatisticsAggregator;
 import edu.uci.ics.genomix.pregelix.type.StatisticsCounter;
+import edu.uci.ics.genomix.type.NodeWritable.EDGETYPE;
 import edu.uci.ics.genomix.type.VKmerBytesWritable;
 
 /**
@@ -29,7 +31,9 @@
      */
     @Override
     public void initVertex() {
-        super.initVertex();
+        super.initVertex(); 
+        if (minAverageCoverage < 0)
+            minAverageCoverage = Float.parseFloat(getContext().getConfiguration().get(GenomixJobConf.REMOVE_LOW_COVERAGE_MAX_COVERAGE));
         if(incomingMsg == null)
             incomingMsg = new MessageWritable();
         if(outgoingMsg == null)
@@ -38,11 +42,6 @@
             outgoingMsg.reset();
         if(destVertexId == null)
             destVertexId = new VKmerBytesWritable();
-        if(fakeVertex == null){
-            fakeVertex = new VKmerBytesWritable();
-            String random = generaterRandomString(kmerSize + 1);
-            fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0); 
-        }
         if(getSuperstep() == 1)
             StatisticsAggregator.preGlobalCounters.clear();
 //        else
@@ -51,32 +50,42 @@
         getVertexValue().getCounters().clear();
     }
     
+    public void lowCoverageVertexBroadcaseKillself(){
+        if(getVertexValue().getAvgCoverage() <= minAverageCoverage){
+            //broadcase kill self
+            broadcastKillself();
+            deadNodeSet.add(new VKmerBytesWritable(getVertexId()));
+        }
+    }
+    
+    public void cleanupDeadVertex(){
+        deleteVertex(getVertexId());
+        //set statistics counter: Num_RemovedLowCoverageNodes
+        updateStatisticsCounter(StatisticsCounter.Num_RemovedLowCoverageNodes);
+        getVertexValue().setCounters(counters);
+    }
+    
+    public void responseToDeadVertex(Iterator<MessageWritable> msgIterator){
+        while(msgIterator.hasNext()){
+            incomingMsg = msgIterator.next();
+            //response to dead node
+            EDGETYPE deadToMeEdgetype = EDGETYPE.fromByte(incomingMsg.getFlag());
+            getVertexValue().getEdgeList(deadToMeEdgetype).remove(incomingMsg.getSourceVertexId());
+        }
+    }
+    
     @Override
     public void compute(Iterator<MessageWritable> msgIterator) {
         initVertex(); 
-        if(getSuperstep() == 1){
-            if(getVertexValue().getAvgCoverage() <= minAverageCoverage){
-                broadcaseReallyKillself();
-                deadNodeSet.add(new VKmerBytesWritable(getVertexId()));
-            }
+        if(getSuperstep() == 1)
+            lowCoverageVertexBroadcaseKillself();
+        else if(getSuperstep() == 2){
+            if(deadNodeSet.contains(getVertexId()))
+                cleanupDeadVertex();
             else
-                voteToHalt();
-        } else if(getSuperstep() == 2){
-            if(deadNodeSet.contains(getVertexId())){
-                deleteVertex(getVertexId());
-                //set statistics counter: Num_RemovedLowCoverageNodes
-                updateStatisticsCounter(StatisticsCounter.Num_RemovedLowCoverageNodes);
-                getVertexValue().setCounters(counters);
-            }
-            else{
-                while(msgIterator.hasNext()){
-                    incomingMsg = msgIterator.next();
-                    if(isResponseKillMsg())
-                        responseToDeadVertex();
-                }
-            }
-            voteToHalt();
+                responseToDeadVertex(msgIterator);
         } 
+        voteToHalt();
     }
     
     public static void main(String[] args) throws Exception {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
index 576d0da..3da5d94 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/tipremove/TipRemoveVertex.java
@@ -82,42 +82,6 @@
             }
         }
         voteToHalt();
-        
-//        if(getSuperstep() == 1){
-//            if(VertexUtil.isIncomingTipVertex(getVertexValue())){
-//            	if(getVertexValue().getKmerLength() <= length){
-//            	    sendSettledMsgToNextNode();
-//            		deleteVertex(getVertexId());
-//                    //set statistics counter: Num_RemovedTips
-//                    updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
-//                    getVertexValue().setCounters(counters);
-//            	}
-//            }
-//            else if(VertexUtil.isOutgoingTipVertex(getVertexValue())){
-//                if(getVertexValue().getKmerLength() <= length){
-//                    sendSettledMsgToPrevNode();
-//                    deleteVertex(getVertexId());
-//                    //set statistics counter: Num_RemovedTips
-//                    updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
-//                    getVertexValue().setCounters(counters);
-//                }
-//            }
-//            else if(VertexUtil.isSingleVertex(getVertexValue())){
-//                if(getVertexValue().getKmerLength() <= length){
-//                    deleteVertex(getVertexId());
-//                    //set statistics counter: Num_RemovedTips
-//                    updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
-//                    getVertexValue().setCounters(counters);
-//                }
-//            }
-//        }
-//        else if(getSuperstep() == 2){
-//        	while(msgIterator.hasNext()){
-//        		incomingMsg = msgIterator.next();
-//        		responseToDeadVertex();
-//        	}
-//        }
-//        voteToHalt();
     }
 
     public static void main(String[] args) throws Exception {
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
index 084712a..390e5fe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/unrolltandemrepeat/UnrollTandemRepeat.java
@@ -21,6 +21,7 @@
  */
 public class UnrollTandemRepeat extends
     BasicGraphCleanVertex<VertexValueWritable, MessageWritable>{
+    
     private EdgeWritable tmpEdge = new EdgeWritable();
     
     /**
@@ -52,13 +53,13 @@
         tmpValue.setAsCopy(getVertexValue());
         tmpValue.getEdgeList(repeatEdgetype).remove(repeatKmer);
         boolean hasFlip = false;
-        /** pick one edge and flip **/
+        // pick one edge and flip 
         for(EDGETYPE et : EnumSet.allOf(EDGETYPE.class)){
             for(EdgeWritable edge : tmpValue.getEdgeList(et)){
                 EDGETYPE flipDir = et.flip();
                 tmpValue.getEdgeList(flipDir).add(edge);
                 tmpValue.getEdgeList(et).remove(edge);
-                /** setup hasFlip to go out of the loop **/
+                // setup hasFlip to go out of the loop 
                 hasFlip = true;
                 break;
             }
@@ -117,8 +118,8 @@
         if(getSuperstep() == 1){
             if(isTandemRepeat(getVertexValue()) && repeatCanBeMerged()){
                 mergeTandemRepeat();
-                //set statistics counter: Num_RemovedTips
-                updateStatisticsCounter(StatisticsCounter.Num_RemovedTips);
+                //set statistics counter: Num_TandemRepeats
+                updateStatisticsCounter(StatisticsCounter.Num_TandemRepeats);
                 getVertexValue().setCounters(counters);
             }
             voteToHalt();
