diff --git a/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertex.java b/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertex.java
index 9629b5b..998788a 100644
--- a/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertex.java
+++ b/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertex.java
@@ -26,29 +26,52 @@
  * @author yingyib
  */
 public class UpdateVertex extends Vertex<VLongWritable, Text, FloatWritable, VLongWritable> {
+    private final long MAX_VALUE_SIZE = 32768 / 2;
+    private VLongWritable msg = new VLongWritable();
+    private Text tempValue = new Text();
 
     @Override
     public void compute(Iterator<VLongWritable> msgIterator) throws Exception {
-        if (getSuperstep() < 14) {
-            Text value = getVertexValue();
-            String newValue = value.toString() + value.toString();
-            value.set(newValue);
-            activate();
-        } else if (getSuperstep() >= 14 && getSuperstep() < 28) {
-            Text value = getVertexValue();
-            String valueStr = value.toString();
-            char[] valueChars = valueStr.toCharArray();
-            if (valueChars.length <= 1) {
-                throw new IllegalStateException("illegal value length: " + valueChars.length);
-            }
-            char[] newValueChars = new char[valueChars.length / 2];
-            for (int i = 0; i < newValueChars.length; i++) {
-                newValueChars[i] = valueChars[i];
-            }
-            value.set(new String(newValueChars));
-            activate();
+        if (getSuperstep() == 1) {
+            updateAndSendMsg();
+        } else if (getSuperstep() > 1 && getSuperstep() < 30) {
+            verifyVertexSize(msgIterator);
+            updateAndSendMsg();
         } else {
             voteToHalt();
         }
     }
+
+    private void verifyVertexSize(Iterator<VLongWritable> msgIterator) {
+        /**
+         * verify the size
+         */
+        int valueSize = getVertexValue().getLength();
+        long expectedValueSize = msgIterator.next().get();
+        if (valueSize != expectedValueSize) {
+            throw new IllegalStateException("verte value size:" + valueSize + ", expected value size:"
+                    + expectedValueSize);
+        }
+    }
+
+    private void updateAndSendMsg() {
+        long newValueSize = (long) (Math.random()) % MAX_VALUE_SIZE;
+        msg.set(newValueSize);
+        char[] charArray = new char[(int) newValueSize];
+        for (int i = 0; i < charArray.length; i++) {
+            charArray[i] = 'a';
+        }
+        /**
+         * set the vertex value
+         */
+        tempValue.set(new String(charArray));
+        setVertexValue(tempValue);
+
+        /**
+         * send a self-message
+         */
+        msg.set(newValueSize);
+        sendMsg(getVertexId(), msg);
+        activate();
+    }
 }
diff --git a/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertexOutputFormat.java b/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertexOutputFormat.java
index 5c16302..493a33e 100644
--- a/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertexOutputFormat.java
+++ b/pregelix-example/src/test/java/edu/uci/ics/pregelix/example/UpdateVertexOutputFormat.java
@@ -47,9 +47,6 @@
         public void writeVertex(Vertex<VLongWritable, Text, FloatWritable, ?> vertex) throws IOException,
                 InterruptedException {
             int len = vertex.getVertexValue().toString().toCharArray().length;
-            if (len != 1) {
-                throw new IllegalStateException("invalid value length: " + len);
-            }
             getRecordWriter().write(new Text(vertex.getVertexId().toString()), new Text(Integer.toString(len)));
         }
     }
