diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Packet.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Packet.java
index 22e62d2..88482ce 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Packet.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Packet.java
@@ -1076,48 +1076,37 @@
      * @return the next value of the data of the Packet as VM-sensitive value.
      */
     public Value getNextValueAsUntaggedValue(byte tag) {
-        Value value = null;
         switch (tag) {
-        case JDWPConstants.Tag.BOOLEAN_TAG:
-            value = new Value(this.getNextValueAsBoolean());
-            break;
-        case JDWPConstants.Tag.BYTE_TAG:
-            value = new Value(this.getNextValueAsByte());
-            break;
-        case JDWPConstants.Tag.CHAR_TAG:
-            value = new Value(this.getNextValueAsChar());
-            break;
-        case JDWPConstants.Tag.DOUBLE_TAG:
-            value = new Value(this.getNextValueAsDouble());
-            break;
-        case JDWPConstants.Tag.FLOAT_TAG:
-            value = new Value(this.getNextValueAsFloat());
-            break;
-        case JDWPConstants.Tag.INT_TAG:
-            value = new Value(this.getNextValueAsInt());
-            break;
-        case JDWPConstants.Tag.LONG_TAG:
-            value = new Value(this.getNextValueAsLong());
-            break;
-        case JDWPConstants.Tag.SHORT_TAG:
-            value = new Value(this.getNextValueAsShort());
-            break;
-        case JDWPConstants.Tag.STRING_TAG:
-        case JDWPConstants.Tag.ARRAY_TAG:
-        case JDWPConstants.Tag.CLASS_LOADER_TAG:
-        case JDWPConstants.Tag.CLASS_OBJECT_TAG:
-        case JDWPConstants.Tag.OBJECT_TAG:
-        case JDWPConstants.Tag.THREAD_GROUP_TAG:
-        case JDWPConstants.Tag.THREAD_TAG:
-            value = new Value(tag, this.getNextValueAsObjectID());
-            break;
-        case JDWPConstants.Tag.VOID_TAG:
-            // no bytes to read.
-            break;
-        default:
-            throw new TestErrorException("Illegal tag value = " + tag);
+            case JDWPConstants.Tag.BOOLEAN_TAG:
+                return Value.createBoolean(this.getNextValueAsBoolean());
+            case JDWPConstants.Tag.BYTE_TAG:
+                return Value.createByte(this.getNextValueAsByte());
+            case JDWPConstants.Tag.CHAR_TAG:
+                return Value.createChar(this.getNextValueAsChar());
+            case JDWPConstants.Tag.DOUBLE_TAG:
+                return Value.createDouble(this.getNextValueAsDouble());
+            case JDWPConstants.Tag.FLOAT_TAG:
+                return Value.createFloat(this.getNextValueAsFloat());
+            case JDWPConstants.Tag.INT_TAG:
+                return Value.createInt(this.getNextValueAsInt());
+            case JDWPConstants.Tag.LONG_TAG:
+                return Value.createLong(this.getNextValueAsLong());
+            case JDWPConstants.Tag.SHORT_TAG:
+                return Value.createShort(this.getNextValueAsShort());
+            case JDWPConstants.Tag.STRING_TAG:
+            case JDWPConstants.Tag.ARRAY_TAG:
+            case JDWPConstants.Tag.CLASS_LOADER_TAG:
+            case JDWPConstants.Tag.CLASS_OBJECT_TAG:
+            case JDWPConstants.Tag.OBJECT_TAG:
+            case JDWPConstants.Tag.THREAD_GROUP_TAG:
+            case JDWPConstants.Tag.THREAD_TAG:
+                return Value.createObjectValue(tag, this.getNextValueAsObjectID());
+            case JDWPConstants.Tag.VOID_TAG:
+                // no bytes to read.
+                return null;
+            default:
+                throw new TestErrorException("Illegal tag value = " + tag);
         }
-        return value;
     }
 
     /**
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Value.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Value.java
index e515404..c7b0584 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Value.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Value.java
@@ -33,96 +33,120 @@
  */
 public class Value {
 
-    private byte tag;
-
-    private Number numberValue;
-
-    private boolean booleanValue;
-
-    private char charValue;
-
     /**
-     * Creates new value with no tag.
+     * Creates new boolean value.
      */
-    public Value() {
-        tag = JDWPConstants.Tag.NO_TAG;
-    }
-
-    /**
-     * Creates new ID value with specified tag.
-     */
-    public Value(byte tag, long value) {
-        this.tag = tag;
-        this.numberValue = new Long(value);
+    public static Value createBoolean(boolean value) {
+        return new Value(value);
     }
 
     /**
      * Creates new byte value.
      */
-    public Value(byte value) {
-        this.tag = JDWPConstants.Tag.BYTE_TAG;
-        this.numberValue = new Byte(value);
-    }
-
-    /**
-     * Creates new short value.
-     */
-    public Value(short value) {
-        this.tag = JDWPConstants.Tag.SHORT_TAG;
-        this.numberValue = new Short(value);
-    }
-
-    /**
-     * Creates new int value.
-     */
-    public Value(int value) {
-        this.tag = JDWPConstants.Tag.INT_TAG;
-        this.numberValue = new Integer(value);
-    }
-
-    /**
-     * Creates new long value.
-     */
-    public Value(long value) {
-        this.tag = JDWPConstants.Tag.LONG_TAG;
-        this.numberValue = new Long(value);
-    }
-
-    /**
-     * Creates new short value.
-     */
-    public Value(float value) {
-        this.tag = JDWPConstants.Tag.FLOAT_TAG;
-        this.numberValue = new Float(value);
-    }
-
-    /**
-     * Creates new double value.
-     */
-    public Value(double value) {
-        this.tag = JDWPConstants.Tag.DOUBLE_TAG;
-        this.numberValue = new Double(value);
-    }
-
-    /**
-     * Creates new boolean value.
-     */
-    public Value(boolean value) {
-        this.tag = JDWPConstants.Tag.BOOLEAN_TAG;
-        this.booleanValue = value;
+    public static Value createByte(byte value) {
+        return new Value(JDWPConstants.Tag.BYTE_TAG, Byte.valueOf(value));
     }
 
     /**
      * Creates new char value.
      */
-    public Value(char value) {
+    public static Value createChar(char value) {
+        return new Value(value);
+    }
+
+    /**
+     * Creates new short value.
+     */
+    public static Value createShort(short value) {
+        return new Value(JDWPConstants.Tag.SHORT_TAG, Short.valueOf(value));
+    }
+
+    /**
+     * Creates new int value.
+     */
+    public static Value createInt(int value) {
+        return new Value(JDWPConstants.Tag.INT_TAG, Integer.valueOf(value));
+    }
+
+    /**
+     * Creates new long value.
+     */
+    public static Value createLong(long value) {
+        return new Value(JDWPConstants.Tag.LONG_TAG, Long.valueOf(value));
+    }
+
+    /**
+     * Creates new float value.
+     */
+    public static Value createFloat(float value) {
+        return new Value(JDWPConstants.Tag.FLOAT_TAG, Float.valueOf(value));
+    }
+
+    /**
+     * Creates new double value.
+     */
+    public static Value createDouble(double value) {
+        return new Value(JDWPConstants.Tag.DOUBLE_TAG, Double.valueOf(value));
+    }
+
+    /**
+     * Creates void value.
+     */
+    public static Value createVoidValue() {
+        return new Value(JDWPConstants.Tag.VOID_TAG, Long.valueOf(0));
+    }
+
+    /**
+     * Creates object value.
+     */
+    public static Value createObjectValue(byte tag, long value) {
+        if (isPrimitiveTag(tag)) {
+            throw new AssertionError(JDWPConstants.Tag.getName(tag) + " is primitive");
+        }
+        return new Value(tag, Long.valueOf(value));
+    }
+
+    private final byte tag;
+
+    private final Number numberValue;
+
+    private final boolean booleanValue;
+
+    private final char charValue;
+
+    /**
+     * Creates new value.
+     */
+    private Value(byte tag, Number numberValue) {
+        this.tag = tag;
+        this.numberValue = numberValue;
+        this.booleanValue = false;
+        this.charValue = 0;
+    }
+
+    /**
+     * Creates new boolean value.
+     */
+    private Value(boolean value) {
+        this.tag = JDWPConstants.Tag.BOOLEAN_TAG;
+        this.booleanValue = value;
+        this.numberValue = null;
+        this.charValue = 0;
+    }
+
+    /**
+     * Creates new char value.
+     */
+    private Value(char value) {
         this.tag = JDWPConstants.Tag.CHAR_TAG;
         this.charValue = value;
+        this.numberValue = null;
+        this.booleanValue = false;
     }
 
     /**
      * Returns tag of this value.
-     * 
+     *
      * @return Returns the tag.
      */
     public byte getTag() {
@@ -131,7 +155,7 @@
 
     /**
      * Returns byte representation of this value.
-     * 
+     *
      * @return byte value
      */
     public byte getByteValue() {
@@ -140,7 +164,7 @@
 
     /**
      * Returns short representation of this value.
-     * 
+     *
      * @return short value
      */
     public short getShortValue() {
@@ -149,7 +173,7 @@
 
     /**
      * Returns int representation of this value.
-     * 
+     *
      * @return int value
      */
     public int getIntValue() {
@@ -158,7 +182,7 @@
 
     /**
      * Returns long representation of this value.
-     * 
+     *
      * @return long value
      */
     public long getLongValue() {
@@ -167,7 +191,7 @@
 
     /**
      * Returns float representation of this value.
-     * 
+     *
      * @return float value
      */
     public float getFloatValue() {
@@ -176,7 +200,7 @@
 
     /**
      * Returns double representation of this value.
-     * 
+     *
      * @return double value
      */
     public double getDoubleValue() {
@@ -185,7 +209,7 @@
 
     /**
      * Returns boolean representation of this value.
-     * 
+     *
      * @return boolean value
      */
     public boolean getBooleanValue() {
@@ -194,13 +218,39 @@
 
     /**
      * Returns char representation of this value.
-     * 
+     *
      * @return char value
      */
     public char getCharValue() {
         return charValue;
     }
 
+    private static boolean isPrimitiveTag(byte tag) {
+        switch (tag) {
+            case JDWPConstants.Tag.BOOLEAN_TAG:
+            case JDWPConstants.Tag.BYTE_TAG:
+            case JDWPConstants.Tag.CHAR_TAG:
+            case JDWPConstants.Tag.SHORT_TAG:
+            case JDWPConstants.Tag.INT_TAG:
+            case JDWPConstants.Tag.LONG_TAG:
+            case JDWPConstants.Tag.FLOAT_TAG:
+            case JDWPConstants.Tag.DOUBLE_TAG:
+            case JDWPConstants.Tag.VOID_TAG:
+                return true;
+            case JDWPConstants.Tag.NO_TAG:
+            case JDWPConstants.Tag.ARRAY_TAG:
+            case JDWPConstants.Tag.CLASS_LOADER_TAG:
+            case JDWPConstants.Tag.CLASS_OBJECT_TAG:
+            case JDWPConstants.Tag.OBJECT_TAG:
+            case JDWPConstants.Tag.STRING_TAG:
+            case JDWPConstants.Tag.THREAD_TAG:
+            case JDWPConstants.Tag.THREAD_GROUP_TAG:
+                return false;
+            default:
+                throw new TestErrorException("Illegal tag value: " + tag);
+        }
+    }
+
     /**
      * Compares with other value.
      */
@@ -210,7 +260,7 @@
             return false;
 
         Value value0 = (Value) arg0;
-        if (value0.tag != value0.tag)
+        if (tag != value0.tag)
             return false;
 
         switch (tag) {
@@ -275,8 +325,7 @@
         case JDWPConstants.Tag.STRING_TAG:
             return "StringID: " + getLongValue();
         case JDWPConstants.Tag.ARRAY_TAG:
-            return "ObjectID: " + getLongValue();
-
+            return "ArrayID: " + getLongValue();
         case JDWPConstants.Tag.CLASS_LOADER_TAG:
             return "ClassLoaderID: " + getLongValue();
         case JDWPConstants.Tag.CLASS_OBJECT_TAG:
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValuesTest.java
index a853dde..a282e7f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValuesTest.java
@@ -72,21 +72,21 @@
                 ArrayRegion valuesRegion = new ArrayRegion(
                         JDWPConstants.Tag.INT_TAG, 10);
                 for (int j = 0; j < valuesRegion.getLength(); j++) {
-                    valuesRegion.setValue(j, new Value(-j));
+                    valuesRegion.setValue(j, Value.createInt(-j));
                 }
                 checkArrayValues(valuesRegion, classID, fieldID);
             } else if (name.equals("longArray")) {
                 ArrayRegion valuesRegion = new ArrayRegion(
                         JDWPConstants.Tag.LONG_TAG, 10);
                 for (int j = 0; j < valuesRegion.getLength(); j++) {
-                    valuesRegion.setValue(j, new Value((long)-j));
+                    valuesRegion.setValue(j, Value.createLong((long)-j));
                 }
                 checkArrayValues(valuesRegion, classID, fieldID);
             } else if (name.equals("byteArray")) {
                 ArrayRegion valuesRegion = new ArrayRegion(
                         JDWPConstants.Tag.BYTE_TAG, 10);
                 for (int j = 0; j < valuesRegion.getLength(); j++) {
-                    valuesRegion.setValue(j, new Value((byte)-j));
+                    valuesRegion.setValue(j, Value.createByte((byte)-j));
                 }
                 checkArrayValues(valuesRegion, classID, fieldID);
             }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Test.java
index 63a9c2c..b53d95a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Test.java
@@ -108,7 +108,7 @@
         assertTrue("Failed to find method", targetMethodID != 0);
 
         // Invoke test method with null argument.
-        Value nullObjectValue = new Value(JDWPConstants.Tag.OBJECT_TAG, 0);
+        Value nullObjectValue = Value.createObjectValue(JDWPConstants.Tag.OBJECT_TAG, 0);
         packet = new CommandPacket(
                 JDWPCommands.ClassTypeCommandSet.CommandSetID,
                 JDWPCommands.ClassTypeCommandSet.InvokeMethodCommand);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodTest.java
index 36db152..c92fb14 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethodTest.java
@@ -169,7 +169,7 @@
         packet.setNextValueAsThreadID(targetThreadID);
         packet.setNextValueAsMethodID(targetMethodID);
         packet.setNextValueAsInt(1);
-            packet.setNextValueAsValue(new Value(false));
+            packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(0);
         logWriter.println(" Send ClassType.InvokeMethod without Exception");
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
@@ -199,7 +199,7 @@
         packet.setNextValueAsThreadID(targetThreadID);
         packet.setNextValueAsMethodID(targetMethodID);
         packet.setNextValueAsInt(1);
-            packet.setNextValueAsValue(new Value(true));
+            packet.setNextValueAsValue(Value.createBoolean(true));
         packet.setNextValueAsInt(0);
         logWriter.println(" Send ClassType.InvokeMethod with Exception");
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
@@ -334,7 +334,7 @@
         packet.setNextValueAsThreadID(targetThreadID);
         packet.setNextValueAsMethodID(testMethodID);
         packet.setNextValueAsInt(1);
-            packet.setNextValueAsValue(new Value(false));
+            packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(0);
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
         short errorCode = reply.getErrorCode();
@@ -461,7 +461,7 @@
         packet.setNextValueAsThreadID(targetThreadID);
         packet.setNextValueAsMethodID(nonStaticMethodID);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(false));
+        packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(0);
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
         short errorCode = reply.getErrorCode();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Test.java
index 6b5531d..83dda3c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Test.java
@@ -114,7 +114,7 @@
         assertTrue("Failed to find constructor", targetMethodID != 0);
 
         // Make NewInstance without Exception
-        Value nullObjectValue = new Value(JDWPConstants.Tag.OBJECT_TAG, 0);
+        Value nullObjectValue = Value.createObjectValue(JDWPConstants.Tag.OBJECT_TAG, 0);
         packet = new CommandPacket(
                 JDWPCommands.ClassTypeCommandSet.CommandSetID,
                 JDWPCommands.ClassTypeCommandSet.NewInstanceCommand);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceStringTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceStringTest.java
index ef2e3c3..53ae4de 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceStringTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceStringTest.java
@@ -71,8 +71,8 @@
                 long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
                 Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
                 constructorArguments.add(byteArrayValue);
-                constructorArguments.add(new Value(0));
-                constructorArguments.add(new Value(1));
+                constructorArguments.add(Value.createInt(0));
+                constructorArguments.add(Value.createInt(1));
             }
         });
     }
@@ -92,8 +92,8 @@
                 Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
                 Value stringCharsetValue = getStaticFieldValue(debuggeeClassId, "STRING_CHARSET");
                 constructorArguments.add(byteArrayValue);
-                constructorArguments.add(new Value(0));
-                constructorArguments.add(new Value(1));
+                constructorArguments.add(Value.createInt(0));
+                constructorArguments.add(Value.createInt(1));
                 constructorArguments.add(stringCharsetValue);
             }
         });
@@ -135,8 +135,8 @@
                         Value byteArrayValue = getStaticFieldValue(debuggeeClassId, "BYTE_ARRAY");
                         Value charsetValue = getStaticFieldValue(debuggeeClassId, "CHARSET");
                         constructorArguments.add(byteArrayValue);
-                        constructorArguments.add(new Value(0));
-                        constructorArguments.add(new Value(1));
+                        constructorArguments.add(Value.createInt(0));
+                        constructorArguments.add(Value.createInt(1));
                         constructorArguments.add(charsetValue);
                     }
                 });
@@ -190,8 +190,8 @@
                 long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
                 Value charArrayValue = getStaticFieldValue(debuggeeClassId, "CHAR_ARRAY");
                 constructorArguments.add(charArrayValue);
-                constructorArguments.add(new Value(0));
-                constructorArguments.add(new Value(1));
+                constructorArguments.add(Value.createInt(0));
+                constructorArguments.add(Value.createInt(1));
             }
         });
     }
@@ -242,8 +242,8 @@
                 long debuggeeClassId = getClassIDBySignature(getDebuggeeClassSignature());
                 Value intArrayValue = getStaticFieldValue(debuggeeClassId, "INT_ARRAY");
                 constructorArguments.add(intArrayValue);
-                constructorArguments.add(new Value(0));
-                constructorArguments.add(new Value(1));
+                constructorArguments.add(Value.createInt(0));
+                constructorArguments.add(Value.createInt(1));
             }
         });
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagTest.java
index 57b2bf3..5dc24a2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagTest.java
@@ -110,7 +110,7 @@
                         assertTrue("Invalid string id", stringId != -1);
                         assertTrue("Null string id", stringId != 0);
                         // Pass created string to constructor.
-                        constructorArguments.add(new Value(JDWPConstants.Tag.STRING_TAG, stringId));
+                        constructorArguments.add(Value.createObjectValue(JDWPConstants.Tag.STRING_TAG, stringId));
                     }
                 }, new Checker(JDWPConstants.Tag.THREAD_GROUP_TAG));
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTest.java
index 4628e25..dc4bd1c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTest.java
@@ -168,7 +168,7 @@
         packet.setNextValueAsThreadID(targetThreadID);
         packet.setNextValueAsMethodID(targetMethodID);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(false));
+        packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(0);
         logWriter.println(" Send ClassType.NewInstance (without Exception)");
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
@@ -219,7 +219,7 @@
         packet.setNextValueAsThreadID(targetThreadID);
         packet.setNextValueAsMethodID(targetMethodID);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(true));
+        packet.setNextValueAsValue(Value.createBoolean(true));
         packet.setNextValueAsInt(0);
         logWriter.println(" Send ClassType.NewInstance (with Exception)");
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValuesTest.java
index 57668b5..d9122a5 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValuesTest.java
@@ -67,48 +67,48 @@
         if (fieldInfo.getSignature().length()>=1) {
             switch (fieldInfo.getSignature().charAt(0)) {
             case 'B': // byte
-                testField(classID, fieldInfo, new Value(Byte.MIN_VALUE));
-                testField(classID, fieldInfo, new Value(Byte.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((byte)0));
+                testField(classID, fieldInfo, Value.createByte(Byte.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createByte(Byte.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createByte((byte)0));
                 break;
             case 'C': // char
-                testField(classID, fieldInfo, new Value((char)Character.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((char)Character.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createChar(Character.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createChar(Character.MIN_VALUE));
                 break;
             case 'F': // float
-                testField(classID, fieldInfo, new Value((float)Float.MIN_VALUE));
-                testField(classID, fieldInfo, new Value((float)Float.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((float)Float.NaN));
-                testField(classID, fieldInfo, new Value((float)Float.NEGATIVE_INFINITY));
-                testField(classID, fieldInfo, new Value((float)Float.POSITIVE_INFINITY));
-                testField(classID, fieldInfo, new Value((float)0));
+                testField(classID, fieldInfo, Value.createFloat(Float.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createFloat(Float.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createFloat(Float.NaN));
+                testField(classID, fieldInfo, Value.createFloat(Float.NEGATIVE_INFINITY));
+                testField(classID, fieldInfo, Value.createFloat(Float.POSITIVE_INFINITY));
+                testField(classID, fieldInfo, Value.createFloat(0));
                 break;
             case 'D': // double
-                testField(classID, fieldInfo, new Value((double)Double.MIN_VALUE));
-                testField(classID, fieldInfo, new Value((double)Double.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((double)Double.NaN));
-                testField(classID, fieldInfo, new Value((double)Double.NEGATIVE_INFINITY));
-                testField(classID, fieldInfo, new Value((double)Double.POSITIVE_INFINITY));
-                testField(classID, fieldInfo, new Value((double)0));
+                testField(classID, fieldInfo, Value.createDouble(Double.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createDouble(Double.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createDouble(Double.NaN));
+                testField(classID, fieldInfo, Value.createDouble(Double.NEGATIVE_INFINITY));
+                testField(classID, fieldInfo, Value.createDouble(Double.POSITIVE_INFINITY));
+                testField(classID, fieldInfo, Value.createDouble(0));
                 break;
             case 'I': // int
-                testField(classID, fieldInfo, new Value((int)Integer.MIN_VALUE));
-                testField(classID, fieldInfo, new Value((int)Integer.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((int)0));
+                testField(classID, fieldInfo, Value.createInt(Integer.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createInt(Integer.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createInt(0));
                 break;
             case 'J': // long
-                testField(classID, fieldInfo, new Value((long)Long.MIN_VALUE));
-                testField(classID, fieldInfo, new Value((long)Long.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((long)0));
+                testField(classID, fieldInfo, Value.createLong(Long.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createLong(Long.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createLong(0));
                 break;
             case 'S': // short
-                testField(classID, fieldInfo, new Value((short)Short.MIN_VALUE));
-                testField(classID, fieldInfo, new Value((short)Short.MAX_VALUE));
-                testField(classID, fieldInfo, new Value((short)0));
+                testField(classID, fieldInfo, Value.createShort(Short.MIN_VALUE));
+                testField(classID, fieldInfo, Value.createShort(Short.MAX_VALUE));
+                testField(classID, fieldInfo, Value.createShort((short)0));
                 break;
             case 'Z': // boolean
-                testField(classID, fieldInfo, new Value((boolean)Boolean.FALSE.booleanValue()));
-                testField(classID, fieldInfo, new Value((boolean)Boolean.TRUE.booleanValue()));
+                testField(classID, fieldInfo, Value.createBoolean(Boolean.FALSE.booleanValue()));
+                testField(classID, fieldInfo, Value.createBoolean(Boolean.TRUE.booleanValue()));
                 break;
             }
         }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTest.java
index 4d1c361..9f433fc 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTest.java
@@ -100,7 +100,7 @@
                 "testInvokeMethodStatic1");
         assertTrue("Failed to find method", targetMethodID != 0);
 
-        Value throwValue = new Value(shouldThrow);
+        Value throwValue = Value.createBoolean(shouldThrow);
         // Invoke test method with null argument.
         packet = new CommandPacket(
                 JDWPCommands.InterfaceTypeCommandSet.CommandSetID,
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Test.java
index 9ac6ca6..7364c96 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Test.java
@@ -135,7 +135,7 @@
         assertTrue("Failed to find method", targetMethodID != 0);
 
         // Invoke test method with null argument.
-        Value nullObjectValue = new Value(JDWPConstants.Tag.OBJECT_TAG, 0);
+        Value nullObjectValue = Value.createObjectValue(JDWPConstants.Tag.OBJECT_TAG, 0);
         packet = new CommandPacket(
                 JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
                 JDWPCommands.ObjectReferenceCommandSet.InvokeMethodCommand);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Test.java
index 99f6eb7..bde8a34 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Test.java
@@ -125,7 +125,7 @@
         logWriter.println(" Method ID=" + targetMethodID);
 
         // The method argument.
-        Value throwValue = new Value(shouldThrow);
+        Value throwValue = Value.createBoolean(shouldThrow);
         // Invoke method.
         packet = new CommandPacket(
                 JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultTest.java
index fcb432d..8ef0015 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultTest.java
@@ -125,7 +125,7 @@
         logWriter.println(" Method ID=" + targetMethodID);
 
         // The method argument.
-        Value throwValue = new Value(shouldThrow);
+        Value throwValue = Value.createBoolean(shouldThrow);
         // Invoke method.
         packet = new CommandPacket(
                 JDWPCommands.ObjectReferenceCommandSet.CommandSetID,
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodTest.java
index ab83eda..6a1f74d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodTest.java
@@ -126,7 +126,7 @@
         packet.setNextValueAsMethodID(constructorID);
         if ( testNumber == 1 ) {
             packet.setNextValueAsInt(1); // number of parameters
-            packet.setNextValueAsValue(new Value(false));
+            packet.setNextValueAsValue(Value.createBoolean(false));
         }
         if ( testNumber == 2 ) {
             packet.setNextValueAsInt(0); // number of parameters
@@ -207,7 +207,7 @@
         packet.setNextValueAsClassID(typeID);
         packet.setNextValueAsMethodID(targetMethodID);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(false));
+        packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(0);
         logWriter.println("\nSend ObjectReference.InvokeMethod without exception...");
         ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
@@ -241,7 +241,7 @@
         packet.setNextValueAsClassID(typeID);
         packet.setNextValueAsMethodID(targetMethodID);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(true));
+        packet.setNextValueAsValue(Value.createBoolean(true));
         packet.setNextValueAsInt(0);
         logWriter.println("\nSend ObjectReference.InvokeMethod with exception...");
         reply = debuggeeWrapper.vmMirror.performCommand(packet);
@@ -322,7 +322,7 @@
         packet.setNextValueAsClassID(typeIDChild);
         packet.setNextValueAsMethodID(targetMethodIDChild);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(false));
+        packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(JDWPConstants.InvokeOptions.INVOKE_NONVIRTUAL);
         logWriter.println
         ("\nSend ObjectReference.InvokeMethod:: nonvirtual child method without exception...");
@@ -357,7 +357,7 @@
         packet.setNextValueAsClassID(typeIDSuper);
         packet.setNextValueAsMethodID(targetMethodIDSuper);
         packet.setNextValueAsInt(1);
-        packet.setNextValueAsValue(new Value(false));
+        packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(JDWPConstants.InvokeOptions.INVOKE_NONVIRTUAL);
         logWriter.println
         ("\nSend ObjectReference.InvokeMethod: nonvirtual super method without exception...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/GetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/GetValues002Test.java
index 02d234b..034c041 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/GetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/GetValues002Test.java
@@ -32,7 +32,7 @@
      */
     public void testGetValues001_Boolean() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.BOOLEAN_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.BOOLEAN_PARAM_VALUE);
+        Value oldValue = Value.createBoolean(StackTrace002Debuggee.BOOLEAN_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointBoolean");
         suspensionMethodInfo.addVariable("param", oldValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointBoolean");
@@ -48,7 +48,7 @@
      */
     public void testGetValues002_Byte() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.BYTE_SIGNAL);
-        Value expectedValue = new Value(StackTrace002Debuggee.BYTE_PARAM_VALUE);
+        Value expectedValue = Value.createByte(StackTrace002Debuggee.BYTE_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointByte");
         suspensionMethodInfo.addVariable("param", expectedValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointByte");
@@ -64,7 +64,7 @@
      */
     public void testGetValues003_Char() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.CHAR_SIGNAL);
-        Value expectedValue = new Value(StackTrace002Debuggee.CHAR_PARAM_VALUE);
+        Value expectedValue = Value.createChar(StackTrace002Debuggee.CHAR_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointChar");
         suspensionMethodInfo.addVariable("param", expectedValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointChar");
@@ -80,7 +80,7 @@
      */
     public void testGetValues004_Short() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.SHORT_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.SHORT_PARAM_VALUE);
+        Value oldValue = Value.createShort(StackTrace002Debuggee.SHORT_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointShort");
         suspensionMethodInfo.addVariable("param", oldValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointShort");
@@ -96,7 +96,7 @@
      */
     public void testGetValues005_Int() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.INT_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointInt");
         suspensionMethodInfo.addVariable("param", oldValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointInt");
@@ -112,8 +112,8 @@
      */
     public void testGetValues005_Int2() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.INT_METHOD2_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value nextValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE * 2);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value nextValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE * 2);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointInt2");
         suspensionMethodInfo.addVariable("param", oldValue, null /* no set value */, nextValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointInt2");
@@ -130,7 +130,7 @@
      */
     public void testGetValues006_Long() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.LONG_METHOD_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.LONG_PARAM_VALUE);
+        Value oldValue = Value.createLong(StackTrace002Debuggee.LONG_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointLong");
         suspensionMethodInfo.addVariable("param", oldValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointLong");
@@ -146,7 +146,7 @@
      */
     public void testGetValues007_Float() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.FLOAT_METHOD);
-        Value oldValue = new Value(StackTrace002Debuggee.FLOAT_PARAM_VALUE);
+        Value oldValue = Value.createFloat(StackTrace002Debuggee.FLOAT_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointFloat");
         suspensionMethodInfo.addVariable("param", oldValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointFloat");
@@ -162,7 +162,7 @@
      */
     public void testGetValues008_Double() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.DOUBLE_METHOD);
-        Value oldValue = new Value(StackTrace002Debuggee.DOUBLE_PARAM_VALUE);
+        Value oldValue = Value.createDouble(StackTrace002Debuggee.DOUBLE_PARAM_VALUE);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointDouble");
         suspensionMethodInfo.addVariable("param", oldValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointDouble");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFrames002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFrames002Test.java
index e948249..2fa4d2e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFrames002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFrames002Test.java
@@ -364,7 +364,7 @@
         invokeCommand.setNextValueAsThreadID(breakpointThreadID);
         invokeCommand.setNextValueAsMethodID(toInvokeMethodID);
         invokeCommand.setNextValueAsInt(1); // args number
-        invokeCommand.setNextValueAsValue(new Value(timeOfMethodInvocation));
+        invokeCommand.setNextValueAsValue(Value.createLong(timeOfMethodInvocation));
         invokeCommand
                 .setNextValueAsInt(JDWPConstants.InvokeOptions.INVOKE_SINGLE_THREADED);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValues002Test.java
index d528758..257a652 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValues002Test.java
@@ -32,8 +32,8 @@
      */
     public void testSetValues001_Boolean() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.BOOLEAN_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.BOOLEAN_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.BOOLEAN_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createBoolean(StackTrace002Debuggee.BOOLEAN_PARAM_VALUE);
+        Value newValue = Value.createBoolean(StackTrace002Debuggee.BOOLEAN_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointBoolean");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointBoolean");
@@ -49,8 +49,8 @@
      */
     public void testSetValues002_Byte() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.BYTE_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.BYTE_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.BYTE_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createByte(StackTrace002Debuggee.BYTE_PARAM_VALUE);
+        Value newValue = Value.createByte(StackTrace002Debuggee.BYTE_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointByte");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointByte");
@@ -66,8 +66,8 @@
      */
     public void testSetValues003_Char() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.CHAR_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.CHAR_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.CHAR_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createChar(StackTrace002Debuggee.CHAR_PARAM_VALUE);
+        Value newValue = Value.createChar(StackTrace002Debuggee.CHAR_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointChar");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointChar");
@@ -83,8 +83,8 @@
      */
     public void testSetValues004_Short() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.SHORT_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.SHORT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.SHORT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createShort(StackTrace002Debuggee.SHORT_PARAM_VALUE);
+        Value newValue = Value.createShort(StackTrace002Debuggee.SHORT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointShort");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointShort");
@@ -100,8 +100,8 @@
      */
     public void testSetValues005_Int() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.INT_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointInt");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointInt");
@@ -118,8 +118,8 @@
     public void testSetValues005_IntConstant() {
         StackFrameTester tester = new StackFrameTester(
                 StackTrace002Debuggee.INT_CONSTANT_METHOD_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointIntConstant");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointIntConstant");
@@ -136,10 +136,10 @@
     public void testSetValues005_IntTwoConstants() {
         StackFrameTester tester = new StackFrameTester(
                 StackTrace002Debuggee.INT_TWO_CONSTANTS_METHOD_SIGNAL);
-        Value oldValueForLocal1 = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValueForLocal1 = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
-        Value oldValueForLocal2 = new Value(-StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValueForLocal2 = new Value(-StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValueForLocal1 = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValueForLocal1 = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValueForLocal2 = Value.createInt(-StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValueForLocal2 = Value.createInt(-StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointIntTwoConstants");
         suspensionMethodInfo.addVariable("param1", oldValueForLocal1, newValueForLocal1);
         suspensionMethodInfo.addVariable("param2", oldValueForLocal2, newValueForLocal2);
@@ -159,8 +159,8 @@
     public void testSetValues005_IntConstantWithException() {
         StackFrameTester tester = new StackFrameTester(
                 StackTrace002Debuggee.INT_CONSTANT_METHOD_WITH_EXCEPTION_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo =
                 tester.addTestMethod("breakpointIntConstantWithException");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
@@ -179,8 +179,8 @@
     public void testSetValues005_IntConstantWithExceptionInCallee() {
         StackFrameTester tester = new StackFrameTester(
                 StackTrace002Debuggee.INT_CONSTANT_METHOD_WITH_EXCEPTION_IN_CALLEE_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo =
                 tester.addTestMethod("breakpointIntConstantWithException");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
@@ -200,8 +200,8 @@
     public void testSetValues005_IntConstantWithExceptionInCaller() {
         StackFrameTester tester = new StackFrameTester(
                 StackTrace002Debuggee.INT_CONSTANT_METHOD_WITH_EXCEPTION_IN_CALLER_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         // Throwing an exception will unwind the frame where we set the value. So we expect to
         // read the initial value on second suspension.
         Value expectedValueAfterSet = oldValue;
@@ -224,8 +224,8 @@
     public void testSetValues005_IntConstantWithExceptionAndNativeTransition() {
         StackFrameTester tester = new StackFrameTester(
                 StackTrace002Debuggee.INT_CONSTANT_METHOD_WITH_EXCEPTION_FROM_NATIVE_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE);
+        Value newValue = Value.createInt(StackTrace002Debuggee.INT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo =
                 tester.addTestMethod("breakpointIntConstantWithException");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
@@ -243,8 +243,8 @@
      */
     public void testSetValues006_Long() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.LONG_METHOD_SIGNAL);
-        Value oldValue = new Value(StackTrace002Debuggee.LONG_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.LONG_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createLong(StackTrace002Debuggee.LONG_PARAM_VALUE);
+        Value newValue = Value.createLong(StackTrace002Debuggee.LONG_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointLong");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointLong");
@@ -260,8 +260,8 @@
      */
     public void testSetValues007_Float() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.FLOAT_METHOD);
-        Value oldValue = new Value(StackTrace002Debuggee.FLOAT_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.FLOAT_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createFloat(StackTrace002Debuggee.FLOAT_PARAM_VALUE);
+        Value newValue = Value.createFloat(StackTrace002Debuggee.FLOAT_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointFloat");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointFloat");
@@ -277,8 +277,8 @@
      */
     public void testSetValues008_Double() {
         StackFrameTester tester = new StackFrameTester(StackTrace002Debuggee.DOUBLE_METHOD);
-        Value oldValue = new Value(StackTrace002Debuggee.DOUBLE_PARAM_VALUE);
-        Value newValue = new Value(StackTrace002Debuggee.DOUBLE_PARAM_VALUE_TO_SET);
+        Value oldValue = Value.createDouble(StackTrace002Debuggee.DOUBLE_PARAM_VALUE);
+        Value newValue = Value.createDouble(StackTrace002Debuggee.DOUBLE_PARAM_VALUE_TO_SET);
         MethodInfo suspensionMethodInfo = tester.addTestMethod("breakpointDouble");
         suspensionMethodInfo.addVariable("param", oldValue, newValue);
         MethodInfo methodInfo = tester.addTestMethod("runBreakpointDouble");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValuesTest.java
index 39763d0..cc1d5d7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/SetValuesTest.java
@@ -203,9 +203,9 @@
 
         packet.setNextValueAsInt(varTags.length-2);
         packet.setNextValueAsInt(varInfoByName("boolLocalVariable").getSlot());
-        packet.setNextValueAsValue(new Value(false));
+        packet.setNextValueAsValue(Value.createBoolean(false));
         packet.setNextValueAsInt(varInfoByName("intLocalVariable").getSlot());
-        packet.setNextValueAsValue(new Value((int)12345));
+        packet.setNextValueAsValue(Value.createInt(12345));
 
         ReplyPacket reply = debuggeeWrapper.vmMirror.performCommand(packet);
         checkReplyPacket(reply, "StackFrame::SetValues command");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn002Test.java
index 97ab6c2..befaf77 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn002Test.java
@@ -76,7 +76,7 @@
                 JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
                 JDWPCommands.ThreadReferenceCommandSet.ForceEarlyReturnCommand);
         forceEarlyReturnPacket.setNextValueAsThreadID(testedThreadID);
-        forceEarlyReturnPacket.setNextValueAsValue(new Value(EXPECTED_LONG));
+        forceEarlyReturnPacket.setNextValueAsValue(Value.createLong(EXPECTED_LONG));
 
         // Perform the command
         logWriter.println("==> Perform " + thisCommandName);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn003Test.java
index 5f8cad3..17b3f27 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn003Test.java
@@ -80,7 +80,7 @@
                 JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
                 JDWPCommands.ThreadReferenceCommandSet.ForceEarlyReturnCommand);
         forceEarlyReturnPacket.setNextValueAsThreadID(testedThreadID);
-        forceEarlyReturnPacket.setNextValueAsValue(new Value(EXPECTED_FLOAT));
+        forceEarlyReturnPacket.setNextValueAsValue(Value.createFloat(EXPECTED_FLOAT));
 
         // Perform the command
         logWriter.println("==> Perform " + thisCommandName);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn004Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn004Test.java
index 0cc91c2..e660143 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn004Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn004Test.java
@@ -80,7 +80,7 @@
                 JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
                 JDWPCommands.ThreadReferenceCommandSet.ForceEarlyReturnCommand);
         forceEarlyReturnPacket.setNextValueAsThreadID(testedThreadID);
-        forceEarlyReturnPacket.setNextValueAsValue(new Value(EXPECTED_DOUBLE));
+        forceEarlyReturnPacket.setNextValueAsValue(Value.createDouble(EXPECTED_DOUBLE));
 
         // Perform the command
         logWriter.println("==> Perform " + thisCommandName);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn005Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn005Test.java
index 83cc7ce..10b2f2d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn005Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn005Test.java
@@ -22,7 +22,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.Value;
-import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants.Tag;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
@@ -80,7 +79,7 @@
                 JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
                 JDWPCommands.ThreadReferenceCommandSet.ForceEarlyReturnCommand);
         forceEarlyReturnPacket.setNextValueAsThreadID(testedThreadID);
-        forceEarlyReturnPacket.setNextValueAsValue(new Value(Tag.VOID_TAG, 0));
+        forceEarlyReturnPacket.setNextValueAsValue(Value.createVoidValue());
 
         // Perform the command
         logWriter.println("==> Perform " + thisCommandName);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn006Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn006Test.java
index 04023b2..43946d6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn006Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturn006Test.java
@@ -109,8 +109,8 @@
                 JDWPCommands.ThreadReferenceCommandSet.CommandSetID,
                 JDWPCommands.ThreadReferenceCommandSet.ForceEarlyReturnCommand);
         forceEarlyReturnPacket.setNextValueAsThreadID(testedThreadID);
-        forceEarlyReturnPacket.setNextValueAsValue(new Value(Tag.OBJECT_TAG,
-                testObjID));
+        forceEarlyReturnPacket
+                .setNextValueAsValue(Value.createObjectValue(Tag.OBJECT_TAG, testObjID));
 
         // Perform the command
         logWriter.println("==> Perform " + thisCommandName);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnTest.java
index 6838b7c..19f3a21 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnTest.java
@@ -150,7 +150,7 @@
     public void testForceEarlyReturn_ReturnInt() {
         thisTestName = "testForceEarlyReturn_ReturnInt";
         testThreadName = ForceEarlyReturnDebuggee.THREAD_INT;
-        expectedValue = new Value(EXPECTED_INT);
+        expectedValue = Value.createInt(EXPECTED_INT);
         RunTestForceEarlyReturn();
     }
 
@@ -166,7 +166,7 @@
     public void testForceEarlyReturn_ReturnShort() {
         thisTestName = "testForceEarlyReturn_ReturnShort";
         testThreadName = ForceEarlyReturnDebuggee.THREAD_SHORT;
-        expectedValue = new Value(EXPECTED_SHORT);
+        expectedValue = Value.createShort(EXPECTED_SHORT);
         RunTestForceEarlyReturn();
     }
 
@@ -182,7 +182,7 @@
     public void testForceEarlyReturn_ReturnByte() {
         thisTestName = "testForceEarlyReturn_ReturnByte";
         testThreadName = ForceEarlyReturnDebuggee.THREAD_BYTE;
-        expectedValue = new Value(EXPECTED_BYTE);
+        expectedValue = Value.createByte(EXPECTED_BYTE);
         RunTestForceEarlyReturn();
     }
 
@@ -198,7 +198,7 @@
     public void testForceEarlyReturn_ReturnChar() {
         thisTestName = "testForceEarlyReturn_ReturnChar";
         testThreadName = ForceEarlyReturnDebuggee.THREAD_CHAR;
-        expectedValue = new Value(EXPECTED_CHAR);
+        expectedValue = Value.createChar(EXPECTED_CHAR);
         RunTestForceEarlyReturn();
     }
 
@@ -214,7 +214,7 @@
     public void testForceEarlyReturn_ReturnBoolean() {
         thisTestName = "testForceEarlyReturn_ReturnBoolean";
         testThreadName = ForceEarlyReturnDebuggee.THREAD_BOOLEAN;
-        expectedValue = new Value(EXPECTED_BOOLEAN);
+        expectedValue = Value.createBoolean(EXPECTED_BOOLEAN);
         RunTestForceEarlyReturn();
     }
 
@@ -228,7 +228,7 @@
     public void testForceEarlyReturn_NotSuspended() {
         thisTestName = "testForceEarlyReturn_NotSuspended";
         testThreadName = "test";
-        expectedValue = new Value(Tag.VOID_TAG, 0);
+        expectedValue = Value.createVoidValue();
 
         logWriter.println("==> " + thisTestName + " for " + thisCommandName
                 + ": START...");
