diff --git a/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/ComputeUpdateFunctionFactory.java b/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/ComputeUpdateFunctionFactory.java
index 656adc6..d46457c 100644
--- a/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/ComputeUpdateFunctionFactory.java
+++ b/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/ComputeUpdateFunctionFactory.java
@@ -168,43 +168,43 @@
                 tbAlive.reset();
 
                 vertex = (Vertex) tuple[3];
-                if (!vertex.isPartitionTerminated()) {
-                    vertex.setOutputWriters(writers);
-                    vertex.setOutputAppenders(appenders);
-                    vertex.setOutputTupleBuilders(tbs);
 
-                    MsgList msgContentList = (MsgList) tuple[1];
-                    msgContentList.reset(msgIterator);
-
-                    if (!msgIterator.hasNext() && vertex.isHalted()) {
-                        return;
-                    }
-                    if (vertex.isHalted()) {
-                        vertex.activate();
-                    }
-
-                    try {
-                        if (msgContentList.segmentStart()) {
-                            vertex.open();
-                        }
-                        vertex.compute(msgIterator);
-                        if (msgContentList.segmentEnd()) {
-                            vertex.close();
-                        }
-                        vertex.finishCompute();
-                    } catch (Exception e) {
-                        throw new HyracksDataException(e);
-                    }
-
-                    /**
-                     * this partition should not terminate
-                     */
-                    if (terminate && (!vertex.isHalted() || vertex.hasMessage() || vertex.createdNewLiveVertex()))
-                        terminate = false;
-                } else {
+                if (vertex.isPartitionTerminated()) {
                     vertex.voteToHalt();
+                    return;
+                }
+                vertex.setOutputWriters(writers);
+                vertex.setOutputAppenders(appenders);
+                vertex.setOutputTupleBuilders(tbs);
+
+                MsgList msgContentList = (MsgList) tuple[1];
+                msgContentList.reset(msgIterator);
+
+                if (!msgIterator.hasNext() && vertex.isHalted()) {
+                    return;
+                }
+                if (vertex.isHalted()) {
+                    vertex.activate();
                 }
 
+                try {
+                    if (msgContentList.segmentStart()) {
+                        vertex.open();
+                    }
+                    vertex.compute(msgIterator);
+                    if (msgContentList.segmentEnd()) {
+                        vertex.close();
+                    }
+                    vertex.finishCompute();
+                } catch (Exception e) {
+                    throw new HyracksDataException(e);
+                }
+
+                /**
+                 * this partition should not terminate
+                 */
+                if (terminate && (!vertex.isHalted() || vertex.hasMessage() || vertex.createdNewLiveVertex()))
+                    terminate = false;
                 aggregator.step(vertex);
             }
 
diff --git a/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/StartComputeUpdateFunctionFactory.java b/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/StartComputeUpdateFunctionFactory.java
index ed4c522..eba75c9 100644
--- a/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/StartComputeUpdateFunctionFactory.java
+++ b/pregelix/pregelix-runtime/src/main/java/edu/uci/ics/pregelix/runtime/function/StartComputeUpdateFunctionFactory.java
@@ -172,30 +172,29 @@
                 tbAlive.reset();
 
                 vertex = (Vertex) tuple[1];
-                if (!vertex.isPartitionTerminated()) {
-                    vertex.setOutputWriters(writers);
-                    vertex.setOutputAppenders(appenders);
-                    vertex.setOutputTupleBuilders(tbs);
-
-                    if (!msgIterator.hasNext() && vertex.isHalted()) {
-                        return;
-                    }
-                    if (vertex.isHalted()) {
-                        vertex.activate();
-                    }
-
-                    try {
-                        vertex.open();
-                        vertex.compute(msgIterator);
-                        vertex.close();
-                        vertex.finishCompute();
-                    } catch (Exception e) {
-                        throw new HyracksDataException(e);
-                    }
-                } else {
+                if (vertex.isPartitionTerminated()) {
                     vertex.voteToHalt();
+                    return;
+                }
+                vertex.setOutputWriters(writers);
+                vertex.setOutputAppenders(appenders);
+                vertex.setOutputTupleBuilders(tbs);
+
+                if (!msgIterator.hasNext() && vertex.isHalted()) {
+                    return;
+                }
+                if (vertex.isHalted()) {
+                    vertex.activate();
                 }
 
+                try {
+                    vertex.open();
+                    vertex.compute(msgIterator);
+                    vertex.close();
+                    vertex.finishCompute();
+                } catch (Exception e) {
+                    throw new HyracksDataException(e);
+                }
                 /**
                  * this partition should not terminate
                  */
@@ -206,6 +205,7 @@
                  * call the global aggregator
                  */
                 aggregator.step(vertex);
+
             }
 
             @Override
