diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/DebuggeeRegister.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/DebuggeeRegister.java
index 26f5ef4..5da44e0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/DebuggeeRegister.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/DebuggeeRegister.java
@@ -25,7 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.framework;
 
-import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -72,7 +71,7 @@
      * 
      * @return array of DebuggeeWrappers
      */
-    public List getAllRegistered() {
+    public List<DebuggeeWrapper> getAllRegistered() {
         return registered;
     }
 
@@ -80,8 +79,7 @@
      * Stops each of registered DebuggeeWrappers by invoking DebuggeeWrapper.stop().
      */
     public void stopAllRegistered() {
-        for (Iterator iter = registered.iterator(); iter.hasNext(); ) {
-            DebuggeeWrapper wrapper = (DebuggeeWrapper)iter.next();
+        for (DebuggeeWrapper wrapper : registered) {
             if (wrapper != null) {
                 wrapper.stop();
             }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java
index f840b06..56fefee 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/StreamRedirector.java
@@ -59,6 +59,7 @@
     /**
      * Reads all lines from stream and puts them to logWriter.
      */
+    @Override
     public void run() {
         logWriter.println("Redirector started: " + name);
         try {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
index 7bc97a5..59f3282 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/TestOptions.java
@@ -219,25 +219,8 @@
     }
 
     /**
-     * Returns string with all options for agent including specified connection
-     * address (only for debugger in listening mode). It just calls
-     * <ul>
-     * <li><code>getDebuggeeAgentOptions(address, true)</code></li>
-     * </ul>
-     *  
-     * @deprecated This method is used as workaround for old tests and will be removed soon. 
-     *  
-     * @param address - address to attach
-     * 
-     * @return string with all agent options
-     */
-    public String getDebuggeeAgentOptions(String address) {
-        return getDebuggeeAgentOptions(address, true);
-    }
-    
-    /**
      * Returns VM classpath value to run debuggee with.
-     * 
+     *
      * @return system property "java.class.path" by default.
      */
     public String getDebuggeeClassPath() {
@@ -485,7 +468,7 @@
      * @return string value of given property or default value if no such property found 
      */
     protected String getProperty(String name, String defaultValue) {
-        String value = (String)internalProperties.get(name);
+        String value = internalProperties.get(name);
         if (value != null) {
             return value;
         }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/CommandPacket.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/CommandPacket.java
index 89d8128..bc1d6c2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/CommandPacket.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/CommandPacket.java
@@ -118,6 +118,7 @@
      * @return the representation of the CommandPacket as array of bytes in the
      *         JDWP format.
      */
+    @Override
     public byte[] toBytesArray() {
         byte res[] = super.toBytesArray();
         res[COMMAND_SET_INDEX] = command_set;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Field.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Field.java
index e12edfe..84f2f6a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Field.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Field.java
@@ -280,6 +280,7 @@
      * @see java.lang.Object#equals(java.lang.Object)
      * @return boolean
      */
+    @Override
     public boolean equals(Object obj) {
         if (!(obj instanceof Field)) {
             return false;
@@ -302,6 +303,7 @@
      * @see java.lang.Object#toString()
      * @return String
      */
+    @Override
     public String toString() {
         String str = "Field: id=" + id + ", classID=" + classID + ", name='"
                 + name + "', signature='" + signature + "', modBits=";
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Frame.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Frame.java
index 3018ae6..10f37df 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Frame.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Frame.java
@@ -27,7 +27,6 @@
 package org.apache.harmony.jpda.tests.framework.jdwp;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 
 /**
  * This class provides description of frame.
@@ -41,7 +40,7 @@
 
     protected long id;
 
-    protected ArrayList vars;
+    protected ArrayList<Variable> vars;
 
     /**
      * Default constructor.
@@ -65,7 +64,7 @@
      * @param vars
      *            list of variables
      */
-    Frame(long threadID, long id, Location location, ArrayList vars) {
+    Frame(long threadID, long id, Location location, ArrayList<Variable> vars) {
         this.threadID = threadID;
         this.id = id;
         this.loc = location;
@@ -134,7 +133,7 @@
      * 
      * @return list of frame variables
      */
-    public ArrayList getVars() {
+    public ArrayList<Variable> getVars() {
         return vars;
     }
 
@@ -144,7 +143,7 @@
      * @param vars
      *            list of new frame variables
      */
-    public void setVars(ArrayList vars) {
+    public void setVars(ArrayList<Variable> vars) {
         this.vars = vars;
     }
 
@@ -154,13 +153,13 @@
      * @see java.lang.Object#toString()
      * @return String
      */
+    @Override
     public String toString() {
         String string = "Frame: id=" + id + ", threadID=" + threadID
                 + ", location=" + loc.toString() + "\n";
         string += "--- Variables ---";
-        Iterator it = vars.iterator();
-        while (it.hasNext()) {
-            string += ((Variable) it.next()).toString();
+        for (Variable var : vars) {
+            string += var.toString();
         }
         return string;
     }
@@ -171,6 +170,7 @@
      * @see java.lang.Object#equals(java.lang.Object)
      * @return boolean
      */
+    @Override
     public boolean equals(Object obj) {
         if (!(obj instanceof Frame)) {
             return false;
@@ -482,6 +482,7 @@
          * @see java.lang.Object#toString()
          * @return String
          */
+        @Override
         public String toString() {
             return "Variable: codeIndex=" + codeIndex + ", name=" + name
                     + ", signature=" + signature + ", length=" + length
@@ -495,6 +496,7 @@
          * @see java.lang.Object#equals(java.lang.Object)
          * @return boolean
          */
+        @Override
         public boolean equals(Object obj) {
             if (!(obj instanceof Variable)) {
                 return false;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPDebuggeeWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPDebuggeeWrapper.java
index d178635..400c6be 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPDebuggeeWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/JDWPDebuggeeWrapper.java
@@ -60,7 +60,7 @@
     public TransportWrapper createTransportWrapper() {
         String name = settings.getTransportWrapperClassName();
         try {
-            Class cls = Class.forName(name);
+            Class<?> cls = Class.forName(name);
             return (TransportWrapper) cls.newInstance();
         } catch (Exception e) {
             throw new TestErrorException(e);
@@ -96,6 +96,7 @@
    /**
      * Resumes debuggee VM.
      */
+    @Override
     public void resume() {
         vmMirror.resume();
     }
@@ -103,6 +104,7 @@
     /**
      * Disposes debuggee VM.
      */
+    @Override
     public void dispose() {
         vmMirror.dispose();
     }
@@ -110,6 +112,7 @@
     /**
      * Exit target Virtual Machine
      */
+    @Override
     public void exit(int exitStatus) {
         vmMirror.exit(exitStatus);
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Location.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Location.java
index a903e5a..9363b44 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Location.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/Location.java
@@ -59,6 +59,7 @@
     /**
      * Converts Location to string format for printing.
      */
+    @Override
     public String toString() {
         return "Location: tag="+tag+", classID="+classID+", methodID="+methodID+", index="+index;
     }
@@ -66,6 +67,7 @@
     /**
      * Compares this with other Location object.
      */
+    @Override
     public boolean equals(Object obj) {
         if (!(obj instanceof Location))
             return false;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/PacketDispatcher.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/PacketDispatcher.java
index 43c04a3..feceb8f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/PacketDispatcher.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/PacketDispatcher.java
@@ -29,7 +29,6 @@
 import java.io.IOException;
 import java.io.InterruptedIOException;
 import java.util.ArrayList;
-import java.util.Enumeration;
 import java.util.Hashtable;
 
 import org.apache.harmony.jpda.tests.framework.LogWriter;
@@ -138,7 +137,7 @@
                 // then return it
                 synchronized (eventQueue) {
                     if (!eventQueue.isEmpty()) {
-                        return (EventPacket) eventQueue.remove(0);
+                        return eventQueue.remove(0);
                     }
 
                     // if eventQueue is empty and connection is already closed
@@ -156,7 +155,7 @@
                 synchronized (eventQueue) {
                     if (!eventQueue.isEmpty()) {
                         // event received
-                        EventPacket event = (EventPacket) eventQueue.remove(0);
+                        EventPacket event = eventQueue.remove(0);
                         return event;
                     }
 
@@ -233,7 +232,7 @@
                 Integer Id = new Integer(replyPacket.getId());
 
                 // obtain the current command packet by command id
-                CommandPacket command = (CommandPacket) commands.remove(Id);
+                CommandPacket command = commands.remove(Id);
                 if (command == null) {
                     // we received reply's id that does not correspond to any
                     // command
@@ -262,6 +261,7 @@
          * @param timeout
          *            reply wait timeout
          * @return
+         *            a reply packet
          * @throws TimeoutException
          *             if no reply was received
          */
@@ -313,7 +313,7 @@
                 // receive the reply
                 ReplyPacket currentReply = null;
                 synchronized (replies) {
-                    currentReply = (ReplyPacket) replies.remove(Id);
+                    currentReply = replies.remove(Id);
                 }
 
                 // if reply is ok, return it
@@ -403,12 +403,10 @@
                 throw connectionException;
 
             // receive the reply
-            ReplyPacket currentReply = null;
             long endTimeMlsecForWait = System.currentTimeMillis() + timeout;
             synchronized (replies) {
                 while (true) {
-                    currentReply = (ReplyPacket) replies.remove(new Integer(
-                            commandId));
+                    ReplyPacket currentReply = replies.remove(new Integer(commandId));
                     // if reply is ok, return it
                     if (currentReply != null) {
                         return currentReply;
@@ -430,15 +428,13 @@
         /**
          * This method is called when connection is closed. It notifies all the
          * waiting threads.
-         * 
+         *
          */
         public void terminate() {
 
             synchronized (commands) {
                 // enumerate all waiting commands
-                for (Enumeration en = commands.keys(); en.hasMoreElements();) {
-                    CommandPacket command = (CommandPacket) commands.get(en
-                            .nextElement());
+                for (CommandPacket command : commands.values()) {
                     synchronized (command) {
                         // notify the waiting object
                         command.notifyAll();
@@ -493,6 +489,7 @@
      * Reads packets from connection and dispatches them between waiting
      * threads.
      */
+    @Override
     public void run() {
 
         connectionException = null;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ParsedEvent.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ParsedEvent.java
index 926fee2..b4f4611 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ParsedEvent.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ParsedEvent.java
@@ -175,7 +175,7 @@
         private Event_VM_START(byte suspendPolicy, Packet packet) {
             super(suspendPolicy, packet, JDWPConstants.EventKind.VM_START);
         }
-    };
+    }
 
     /**
      * The class implements JDWP SINGLE_STEP event.
@@ -394,7 +394,7 @@
         private Event_THREAD_START(byte suspendPolicy, Packet packet) {
             super(suspendPolicy, packet, JDWPConstants.EventKind.THREAD_START);
         }
-    };
+    }
 
     /**
      * The class implements JDWP THREAD_DEATH event.
@@ -410,7 +410,7 @@
         private Event_THREAD_DEATH(byte suspendPolicy, Packet packet) {
             super(suspendPolicy, packet, JDWPConstants.EventKind.THREAD_DEATH);
         }
-    };
+    }
 
     /**
      * The class implements JDWP CLASS_PREPARE event.
@@ -466,7 +466,7 @@
         public long getTypeID() {
             return typeID;
         }
-    };
+    }
 
     /**
      * The class implements JDWP CLASS_UNLOAD event.
@@ -492,7 +492,7 @@
         public String getSignature() {
             return signature;
         }
-    };
+    }
 
     /**
      * The class implements JDWP FIELD_ACCESS event.
@@ -548,7 +548,7 @@
         public long getTypeID() {
             return typeID;
         }
-    };
+    }
 
     /**
      * The class implements JDWP FIELD_MODIFICATION event.
@@ -614,7 +614,7 @@
         public Value getValueToBe() {
             return valueToBe;
         }
-    };
+    }
 
     /**
      * The class implements JDWP VM_DEATH event.
@@ -628,7 +628,7 @@
         private Event_VM_DEATH(byte suspendPolicy, Packet packet) {
             super(suspendPolicy, packet, JDWPConstants.EventKind.VM_DEATH);
         }
-    };
+    }
 
     /**
      * Returns array of ParsedEvent extracted from given EventPacket.
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ReplyPacket.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ReplyPacket.java
index 4a42eca..9df0ccb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ReplyPacket.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/ReplyPacket.java
@@ -83,6 +83,7 @@
      * @return the representation of the ReplyPacket as array of bytes in the
      *         JDWP format.
      */
+    @Override
     public byte[] toBytesArray() {
         byte res[] = super.toBytesArray();
         super.writeAtByteArray(error_code, res, ERROR_CODE_INDEX,
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java
index 1787921..74fe05f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/SocketTransportWrapper.java
@@ -59,6 +59,7 @@
      *            no semi-colon.
      * @return string representation of listening address
      */
+    @Override
     public String startListening(String address) throws IOException {
         String hostName = null;
         InetAddress hostAddr = null;
@@ -101,6 +102,7 @@
     /**
      * Stops listening for connection on current address.
      */
+    @Override
     public void stopListening() throws IOException {
         if (serverSocket != null) {
             serverSocket.close();
@@ -114,6 +116,7 @@
      * @param acceptTimeout timeout for accepting in milliseconds
      * @param handshakeTimeout timeout for handshaking in milliseconds
      */
+    @Override
     public void accept(long acceptTimeout, long handshakeTimeout) throws IOException {
         synchronized (serverSocket) {
             serverSocket.setSoTimeout((int) acceptTimeout);
@@ -135,6 +138,7 @@
      * @param attachTimeout timeout for attaching in milliseconds
      * @param handshakeTimeout timeout for handshaking in milliseconds
      */
+    @Override
     public void attach(String address, long attachTimeout, long handshakeTimeout) throws IOException {
         if (address == null) {
             throw new IOException("Illegal socket address: " + address);
@@ -189,6 +193,7 @@
     /**
      * Closes transport connection.
      */
+    @Override
     public void close() throws IOException {
         if (input != null) {
             input.close();
@@ -210,6 +215,7 @@
      * 
      * @return true if transport connection is open
      */
+    @Override
     public boolean isOpen() {
         return (transportSocket != null 
                     && transportSocket.isConnected() 
@@ -221,6 +227,7 @@
      * 
      * @return packet as byte array or null or empty packet if connection was closed
      */
+    @Override
     public byte[] readPacket() throws IOException {
 
         // read packet header
@@ -278,6 +285,7 @@
      * @param packet
      *            packet as byte array
      */
+    @Override
     public void writePacket(byte[] packet) throws IOException {
         output.write(packet);
         output.flush();
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 8a360ef..e515404 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
@@ -204,6 +204,7 @@
     /**
      * Compares with other value.
      */
+    @Override
     public boolean equals(Object arg0) {
         if (!(arg0 instanceof Value))
             return false;
@@ -251,6 +252,7 @@
     /**
      * Converts this value to string representation for printing.
      */
+    @Override
     public String toString() {
 
         switch (tag) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
index f3aa955..b992bd6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/framework/jdwp/VmMirror.java
@@ -1060,9 +1060,9 @@
 
     /**
      * Sets ClassUnload event request for given class name pattern.
-     * 
-     * @param classSignature
-     *            class signature
+     *
+     * @param classRegexp
+     *            class pattern
      * @return ReplyPacket for setting request
      */
     public ReplyPacket setClassUnload(String classRegexp) {
@@ -2171,15 +2171,15 @@
      *            ID of the thread
      * @return A list of frames
      */
-    public final List getAllThreadFrames(long threadID) {
+    public final List<Frame> getAllThreadFrames(long threadID) {
         if (!isThreadSuspended(threadID)) {
-            return new ArrayList(0);
+            return new ArrayList<Frame>(0);
         }
 
         ReplyPacket reply = getThreadFrames(threadID, 0, -1);
         int framesCount = reply.getNextValueAsInt();
         if (framesCount == 0) {
-            return new ArrayList(0);
+            return new ArrayList<Frame>(0);
         }
 
         ArrayList<Frame> frames = new ArrayList<Frame>(framesCount);
@@ -2226,7 +2226,7 @@
      * @return A list containing all variables (arguments and locals) declared
      *         within the method.
      */
-    public final List getVariableTable(long classID, long methodID) {
+    public final List<Variable> getVariableTable(long classID, long methodID) {
         CommandPacket command = new CommandPacket(
                 JDWPCommands.MethodCommandSet.CommandSetID,
                 JDWPCommands.MethodCommandSet.VariableTableCommand);
@@ -2277,7 +2277,7 @@
         command.setNextValueAsFrameID(frame.getID());
         int slots = frame.getVars().size();
         command.setNextValueAsInt(slots);
-        Iterator it = frame.getVars().iterator();
+        Iterator<?> it = frame.getVars().iterator();
         while (it.hasNext()) {
             Frame.Variable var = (Frame.Variable) it.next();
             command.setNextValueAsInt(var.getSlot());
@@ -2483,12 +2483,12 @@
      *            The reference type ID
      * @return A list of Field objects representing each field of the class
      */
-    public final List getAllFields(long classID) {
+    public final List<Field> getAllFields(long classID) {
         ArrayList<Field> fields = new ArrayList<Field>(0);
 
         long superID = getSuperclassId(classID);
         if (superID != 0) {
-            List superClassFields = getAllFields(superID);
+            List<Field> superClassFields = getAllFields(superID);
             for (int i = 0; i < superClassFields.size(); i++) {
                 fields.add((Field) superClassFields.toArray()[i]);
             }
@@ -2735,8 +2735,8 @@
      * @return A list of Variable objects representing each visible local
      *         variable within the given frame.
      */
-    public final List getLocalVars(Frame frame) {
-        List vars = getVariableTable(frame.getLocation().classID, frame
+    public final List<Variable> getLocalVars(Frame frame) {
+        List<Variable> vars = getVariableTable(frame.getLocation().classID, frame
                 .getLocation().methodID);
         if (vars == null) {
             return null;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/ArrayReferenceDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/ArrayReferenceDebuggee.java
index fb2eb44..c5c1c24 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/ArrayReferenceDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/ArrayReferenceDebuggee.java
@@ -41,7 +41,7 @@
 
     static Thread[] threadArray = { new Thread() };
     static ThreadGroup[] threadGroupArray = { new ThreadGroup("name") };
-    static Class[] classArray = { ArrayReferenceDebuggee.class };
+    static Class<?>[] classArray = { ArrayReferenceDebuggee.class };
     static ClassLoader[] ClassLoaderArray = { ArrayReferenceDebuggee.class.getClassLoader() };
     static MyThread[] myThreadArray = { new MyThread() };
     static Object[][] objectArrayArray = { threadArray };
@@ -61,6 +61,7 @@
         }
     }
 
+    @Override
     public void run() {
         logWriter.println("-- ArrayReferenceDebuggee: STARTED ...");
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/GetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/GetValuesTest.java
index 118a4be..98c256e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/GetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/GetValuesTest.java
@@ -25,8 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.ArrayReference;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.ArrayRegion;
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
@@ -48,7 +46,7 @@
      * <BR>Receives fields with ReferenceType.fields command,
      * receives values with ArrayReference.GetValues then checks them.
      */
-    public void testGetValues001() throws UnsupportedEncodingException {
+    public void testGetValues001() {
         logWriter.println("==> GetValuesTest.testGetValues001 started...");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
@@ -135,8 +133,7 @@
     }
 
     private void checkArrayValues(long classID, long fieldID, int error, int length,
-            int checksNumber, byte expectedArrayTag, byte expectedElementTag, boolean checkValues)
-    throws UnsupportedEncodingException {
+            int checksNumber, byte expectedArrayTag, byte expectedElementTag, boolean checkValues) {
         CommandPacket packet = new CommandPacket(
                 JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
                 JDWPCommands.ReferenceTypeCommandSet.GetValuesCommand);
@@ -186,8 +183,7 @@
     }
 
     private void checkArrayRegion(long arrayID, int error, int firstIndex, int length,
-            byte expectedArrayTag, byte expectedElementTag, boolean checkValues)
-        throws UnsupportedEncodingException {
+            byte expectedArrayTag, byte expectedElementTag, boolean checkValues) {
 
         CommandPacket packet = new CommandPacket(
                 JDWPCommands.ArrayReferenceCommandSet.CommandSetID,
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/JDWPArrayReferenceTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/JDWPArrayReferenceTestCase.java
index 8a544bc..39d8e46 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/JDWPArrayReferenceTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/JDWPArrayReferenceTestCase.java
@@ -34,6 +34,7 @@
      * all testcases in this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return ArrayReferenceDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/LengthTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/LengthTest.java
index f9dafca..e323c36 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/LengthTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/LengthTest.java
@@ -25,8 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.ArrayReference;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
@@ -48,7 +46,7 @@
      * <BR>Receives fields with ReferenceType.fields command,
      * checks length with ArrayReference.Length command.
      */
-    public void testLength001() throws UnsupportedEncodingException {
+    public void testLength001() {
         logWriter.println("testLength001 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Debuggee.java
index 7a31e34..52fc091 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Debuggee.java
@@ -40,6 +40,7 @@
 
     static SetValues002Debuggee objectArrayField[]; // JDWP_TAG_ARRAY = 91
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: SetValues002Debuggee: START");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Test.java
index 7a21bd7..daf15ab 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayReference/SetValues002Test.java
@@ -49,6 +49,7 @@
      * Returns full name of debuggee class which is used by this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ArrayReference.SetValues002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceDebuggee.java
index 31fc1a4..9c5d2d5 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceDebuggee.java
@@ -34,6 +34,7 @@
  */
 public class NewInstanceDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         String[] checkString = {"line1"};
         int[] checkInt = {1};
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceTest.java
index 8c7d23c..b648cfe 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ArrayType/NewInstanceTest.java
@@ -44,6 +44,7 @@
      * Returns full name of debuggee class which is used by this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ArrayType.NewInstanceDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassLoaderReference/VisibleClassesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassLoaderReference/VisibleClassesTest.java
index 855c853..ee8fb3f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassLoaderReference/VisibleClassesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassLoaderReference/VisibleClassesTest.java
@@ -42,6 +42,7 @@
      * Returns full name of debuggee class which is used by this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Debuggee.java
index cc9d79e..0840c42 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Debuggee.java
@@ -25,6 +25,8 @@
  * Debuggee for ReflectedType002Test unit test.
  */
 public class ReflectedType002Debuggee extends SyncDebuggee {
+    @SuppressWarnings("unused")
+    @Override
     public void run() {
         // Preload test classes.
         Object[] objectArray = new Object[0];
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Test.java
index ad08d7c..bfb85a7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedType002Test.java
@@ -18,12 +18,7 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ClassObjectReference;
 
-import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
-import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
-import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
-import org.apache.harmony.jpda.tests.jdwp.ClassObjectReference.AbstractReflectedTypeTestCase.TypeSignatureAndTag;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -37,6 +32,7 @@
      * Returns full name of debuggee class which is used by this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return ReflectedType002Debuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedTypeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedTypeTest.java
index 9c67e48..2f6fd77 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedTypeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassObjectReference/ReflectedTypeTest.java
@@ -25,12 +25,7 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.ClassObjectReference;
 
-import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
-import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
-import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
-import org.apache.harmony.jpda.tests.jdwp.ClassObjectReference.AbstractReflectedTypeTestCase.TypeSignatureAndTag;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -47,6 +42,7 @@
      * Returns full name of debuggee class which is used by this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS_NAME;
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/ClassTypeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/ClassTypeDebuggee.java
index dabd603..3f298a9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/ClassTypeDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/ClassTypeDebuggee.java
@@ -52,6 +52,7 @@
     public static short f_pub_short;
     public static boolean f_pub_boolean;
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("ClassTypeDebuggee started");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod002Test.java
index 7702538..ebda04d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod002Test.java
@@ -38,6 +38,7 @@
  * JDWP unit test for ClassType.InvokeMethod command.
  */
 public class InvokeMethod002Test extends JDWPSyncTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Debuggee.java
index d9478d1..2997091 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/InvokeMethod003Debuggee.java
@@ -35,6 +35,7 @@
         logWriter.println("InvokeMethod003Debuggee.execMethod()");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("InvokeMethod003Debuggee");
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 1bf26b1..63a9c2c 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
@@ -32,6 +32,7 @@
  * JDWP unit test for ClassType.InvokeMethod command.
  */
 public class InvokeMethod003Test extends JDWPSyncTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ClassType.InvokeMethod003Debuggee";
     }
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 6576065..36db152 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
@@ -43,6 +43,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/JDWPClassTypeTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/JDWPClassTypeTestCase.java
index 9f04e15..722bcb6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/JDWPClassTypeTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/JDWPClassTypeTestCase.java
@@ -42,6 +42,7 @@
      * testcases in this test.
      * @return full name of debuggee class.
      */
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ClassType.ClassTypeDebuggee";
     }
@@ -98,6 +99,7 @@
             this.modBits = modBits;
         }
 
+        @Override
         public String toString() {
             return "fieldID=" + fieldID + "; name='" + name + "'; signature='" + signature
             + "'; modbits=" + modBits;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Debuggee.java
index 71a96d4..d8d38e4 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstance002Debuggee.java
@@ -18,7 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ClassType;
 
-import org.apache.harmony.jpda.tests.framework.LogWriter;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
@@ -26,6 +25,7 @@
 
     static class TestClass {
         // Field used to check correct execution of constructor.
+        @SuppressWarnings("unused")
         private final int checkField;
 
         // Constructor invoked from JDWP ClassType.NewInstance command.
@@ -42,9 +42,11 @@
         logWriter.println("NewInstance002Debuggee.execMethod()");
     }
 
+    @Override
     public void run() {
         // Preload TestClass so it is available during the test.
-        Class c = null;
+        @SuppressWarnings("unused")
+        Class<?> c = null;
         try {
             c = Class.forName("org.apache.harmony.jpda.tests.jdwp.ClassType.NewInstance002Debuggee$TestClass");
         } catch (ClassNotFoundException e) {
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 dbfe2e7..6b5531d 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
@@ -33,6 +33,7 @@
  */
 public class NewInstance002Test extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ClassType.NewInstance002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagDebuggee.java
index c47ee59..0d76ba2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/NewInstanceTagDebuggee.java
@@ -21,8 +21,6 @@
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
-import java.nio.charset.Charset;
-
 public class NewInstanceTagDebuggee extends SyncDebuggee {
     static class MyObject extends Object {
     }
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 a7513f0..4628e25 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
@@ -40,6 +40,7 @@
  */
 public class NewInstanceTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Debuggee.java
index 2c23aba..15f6531 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Debuggee.java
@@ -39,6 +39,7 @@
     static SetValues002Debuggee_ExtraClass objectField;
     static SetValues002Debuggee_ExtraClass objectFieldCopy;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: SetValues002Debuggee: START");
         SetValues002DebuggeeObject = new SetValues002Debuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Test.java
index 360e916..3ed6c92 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Test.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ClassType::SetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ClassType/SetValues002Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ClassType.SetValues002Debuggee";
     }
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 fc204c9..57668b5 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
@@ -25,8 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.ClassType;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
@@ -47,7 +45,7 @@
      * Then sets values for these fields with ClassType.SetValues command
      * and checks set values using ReferenceType.GetValues command.
      */
-    public void testSetValues001() throws UnsupportedEncodingException {
+    public void testSetValues001() {
         logWriter.println("testSetValues001 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
@@ -62,7 +60,7 @@
         }
     }
 
-    private void testField(long classID, FieldInfo fieldInfo) throws UnsupportedEncodingException {
+    private void testField(long classID, FieldInfo fieldInfo) {
 
         //System.err.println("testField: "+fieldInfo.toString());
         // if field has primitive type
@@ -116,7 +114,7 @@
         }
     }
 
-    private void testField(long classID, FieldInfo fieldInfo, Value value) throws UnsupportedEncodingException {
+    private void testField(long classID, FieldInfo fieldInfo, Value value) {
 
         logWriter.println("\n==> testField: ");
         logWriter.println("    classID = " + classID);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SuperClassTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SuperClassTest.java
index 267ab23..c1f390b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SuperClassTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ClassType/SuperClassTest.java
@@ -25,8 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.ClassType;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
@@ -77,7 +75,7 @@
      * <BR>&nbsp;&nbsp; - superclass for <A HREF="ClassTypeDebuggee.html">ClassTypeDebuggee</A>
      * class is <A HREF="../../share/SyncDebuggee.html">SyncDebuggee</A> class.;
      */
-    public void testSuperClass001() throws UnsupportedEncodingException {
+    public void testSuperClass001() {
         logWriter.println("testSuperClassTest001 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
@@ -142,7 +140,7 @@
      * <BR>&nbsp;&nbsp; - INVALID_OBJECT is returned if classID is non-existent;
      * <BR>&nbsp;&nbsp; - INVALID_OBJECT is returned if instead of classID FieldID is passed;
      */
-    public void testSuperClass002() throws UnsupportedEncodingException {
+    public void testSuperClass002() {
         logWriter.println("testSuperClassTest002 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
@@ -184,7 +182,7 @@
      * <BR>Then does the following check:
      * <BR>&nbsp;&nbsp; - INVALID_CLASS is returned if instead of classID ObjectID is passed;
      */
-    public void testSuperClass003() throws UnsupportedEncodingException {
+    public void testSuperClass003() {
         logWriter.println("testSuperClassTest003 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java
index 96fa1c6..db04a57 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/LaunchedDebugger.java
@@ -67,6 +67,7 @@
      * Overrides inherited method to resume debuggee VM and then to establish
      * sync connection with debuggee and server.
      */
+    @Override
     protected void internalSetUp() throws Exception {
 
         // estabslish synch connection with test
@@ -81,7 +82,7 @@
 
     	// establish synch connection with debuggee
         logWriter.println("Establish synch connection between debugger and debuggee");
-    	synchronizer = new JPDADebuggeeSynchronizer(logWriter, settings);;
+        synchronizer = new JPDADebuggeeSynchronizer(logWriter, settings);
         synchronizer.startClient();
         logWriter.println("Established synch connection between debugger and debuggee");
     }
@@ -89,6 +90,7 @@
     /**
      * Creates wrapper for debuggee process.
      */
+    @Override
     protected JDWPUnitDebuggeeWrapper createDebuggeeWrapper() {
         return new JPDADebuggerOnDemandDebuggeeWrapper(settings, logWriter);
     }
@@ -96,6 +98,7 @@
     /**
      * Receives initial EXCEPTION event if debuggee is suspended on event.
      */
+    @Override
     protected void receiveInitialEvent() {
         if (settings.isDebuggeeSuspend()) {
             initialEvent = 
@@ -109,6 +112,7 @@
     /**
      * Overrides inherited method to close sync connection upon exit.
      */
+    @Override
     protected void internalTearDown() {
         // close synch connection with debuggee
         if (synchronizer != null) {
@@ -126,7 +130,8 @@
         super.internalTearDown();
     }
 
-	protected String getDebuggeeClassName() {
+	@Override
+    protected String getDebuggeeClassName() {
         return null;
     }
     
@@ -181,7 +186,8 @@
         }
         return frameInfos;
     }
-    
+
+    @Override
     protected long getClassIDBySignature(String signature) {
         logWriter.println("=> Getting reference type ID for class: " + signature);
         CommandPacket packet = new CommandPacket(
@@ -223,7 +229,8 @@
         }
         logWriter.println(" ");
     }
-    
+
+    @Override
     protected String getMethodName(long classID, long methodID) {
         CommandPacket packet = new CommandPacket(
                 JDWPCommands.ReferenceTypeCommandSet.CommandSetID,
@@ -276,6 +283,7 @@
          * Attaches to already launched debuggee process and
          * establishes JDWP connection.
          */
+        @Override
         public void start() {
             try {
                 transport = createTransportWrapper();
@@ -289,6 +297,7 @@
         /**
          * Closes all connections but does not wait for debuggee process to exit.
          */
+        @Override
         public void stop() {
             disposeConnection();
             closeConnection();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchDebuggee.java
index 897c4b6..3b7eda0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchDebuggee.java
@@ -36,6 +36,7 @@
  */
 public class OnthrowDebuggerLaunchDebuggee extends Debuggee {
 
+    @Override
     public void onStart() {
         super.onStart();
 
@@ -59,6 +60,7 @@
         logWriter.println("DEBUGGEE: established synch connection with debugger");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
@@ -73,6 +75,7 @@
         return new JPDADebuggeeSynchronizer(logWriter, settings);
     }
 
+    @Override
     public void onFinish() {
         logWriter.println("DEBUGGEE: finished");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchTest.java
index 0cd8297..325b5dd 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowDebuggerLaunchTest.java
@@ -133,7 +133,7 @@
      * loop from debugger. Messages of three types: OK, FAIL, END. In case of
      * FAIL or END messages, loop is ended.
      *
-     * @param DEBUGGER_NAME
+     * @param debuggerName
      *            name of debugger that debuggee will launch
      * @param isSuspendDebuggee
      *            option defines should debuggee be suspended on start
@@ -193,6 +193,7 @@
 
     ////////////////////////////////////////////////////////////////////////////////////////////
 
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS;
     }
@@ -214,10 +215,12 @@
     /**
      * Creates wrapper object for accessing test options;
      */
+    @Override
     protected JPDATestOptions createTestOptions() {
         return new LaunchedDebugger.JPDADebuggerOnDemandOptions();
     }
 
+    @Override
     protected void internalSetUp() throws Exception {
         super.internalSetUp();
 
@@ -250,6 +253,7 @@
      * Overrides inherited method to stop started debuggee VM and close all
      * connections.
      */
+    @Override
     protected void internalTearDown() {
         if (debuggerSynchronizer != null) {
             logWriter.println("Close synch connection with debugger");
@@ -266,8 +270,8 @@
     /**
      * Prepares command line for launching debuggee.
      *
-     * @param debuggerCmd cmd to launch debugger. Value of parameter "launch"
-     * @param agentAddress address for connection with debugger
+     * @param debuggerName name of debugger that debuggee will launch
+     * @param transportAddress address for connection with debugger
      * @param isSuspendDebuggee should debuggee be suspended on start
      * @param isOnuncaught should debuggee waits for uncaught exception (see JDWP agent launch options)
      * @return command line for launching debuggee
@@ -291,7 +295,7 @@
      * Prepares command line for launching debuggee.
      *
      * @param debuggerCmd cmd to launch debugger. Value of parameter "launch"
-     * @param agentAddress address for connection with debugger
+     * @param transportAddress address for connection with debugger
      * @param isSuspendDebuggee should debuggee be suspended on start
      * @param isOnuncaught should debuggee waits for uncaught exception (see JDWP agent launch options)
      * @return command line for launching debuggee
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowLaunchDebugger002.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowLaunchDebugger002.java
index ffb91d3..43c1e71 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowLaunchDebugger002.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/DebuggerOnDemand/OnthrowLaunchDebugger002.java
@@ -40,6 +40,7 @@
 
 public class OnthrowLaunchDebugger002 extends LaunchedDebugger {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Deoptimization/DeoptimizationWithExceptionHandlingDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Deoptimization/DeoptimizationWithExceptionHandlingDebuggee.java
index 57723c3..2ba86bc 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Deoptimization/DeoptimizationWithExceptionHandlingDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Deoptimization/DeoptimizationWithExceptionHandlingDebuggee.java
@@ -32,6 +32,7 @@
         runDebuggee(DeoptimizationWithExceptionHandlingDebuggee.class);
     }
 
+    @Override
     public void run() {
         logWriter.println("--> DeoptimizationWithExceptionHandlingDebuggee started");
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/EventModifiers/CountModifierTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/EventModifiers/CountModifierTest.java
index c000e8b..e0d726a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/EventModifiers/CountModifierTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/EventModifiers/CountModifierTest.java
@@ -49,7 +49,6 @@
             LOCATION_COUNT_FIELD_NAME = "locationEventCount";
     private static final String
             EXCEPTION_EVENT_COUNT_FIELD_NAME = "exceptionEventCount";
-    private static final String THREAD_RUN_COUNT_FIELD_NAME = "threadRunCount";
     private static final String
             FIELD_READ_WRITE_COUNT_FIELD_NAME = "fieldReadWriteCount";
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Debuggee.java
index 7a6b566..a7e092d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Debuggee.java
@@ -124,6 +124,7 @@
       breakpointObjectSetter("this is a new object field value");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Test.java
index bbc65c8..3b7dd7f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint002Test.java
@@ -19,13 +19,13 @@
 package org.apache.harmony.jpda.tests.jdwp.Events;
 
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
-import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.EventThread;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 /**
  * JDWP Unit test for BREAKPOINT event in methods possibly inlined.
  */
 public class Breakpoint002Test extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return Breakpoint002Debuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Debuggee.java
index 4c6556f..899952f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Debuggee.java
@@ -36,6 +36,7 @@
         return Long.toString(val);
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Test.java
index 9fda030..6b1b738 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/Breakpoint003Test.java
@@ -22,7 +22,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.Location;
-import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.EventThread;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.Value;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
@@ -31,6 +30,7 @@
  * JDWP Unit test for BREAKPOINT event in framework code.
  */
 public class Breakpoint003Test extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return Breakpoint003Debuggee.class.getName();
     }
@@ -44,7 +44,6 @@
         test("testBreakPointInIntegerParseInt",
              "parseInt",
              breakpoint1,
-             0,
              JDWPConstants.Tag.STRING_TAG,
              Breakpoint003Debuggee.VALUE_STRING);
 
@@ -53,9 +52,8 @@
         test("testBreakPointInLongToString",
              "toString",
              breakpoint2,
-             0,
              JDWPConstants.Tag.LONG_TAG,
-             Breakpoint003Debuggee.VALUE_LONG);
+             Long.valueOf(Breakpoint003Debuggee.VALUE_LONG));
     }
 
     private int setBreakPoint(String className, String methodName) {
@@ -71,7 +69,6 @@
     private void test(String testName,
                       String methodName,
                       int breakpointReqID,
-                      int slot,
                       byte tag,
                       Object expectedValue) {
         logWriter.println(testName + " started");
@@ -118,7 +115,7 @@
             String strLocalVariable = getStringValue(longVal);
             assertEquals("Invalid String value", strLocalVariable, expectedValue);
         } else if (tag == JDWPConstants.Tag.LONG_TAG) {
-            assertEquals("Invalid long value", longVal, expectedValue);
+            assertEquals("Invalid long value", longVal, ((Long)expectedValue).longValue());
         }
 
         logWriter.println(testName + " done");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointDebuggee.java
index 1d3fece..0d70b5a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointDebuggee.java
@@ -27,7 +27,7 @@
 
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
-;
+
 
 /**
  * Debuggee for BreakpointTest unit test.
@@ -42,6 +42,7 @@
         logWriter.println("breakpointTest");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointMultipleTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointMultipleTest.java
index 0a58df3..3e8d22f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointMultipleTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointMultipleTest.java
@@ -31,6 +31,7 @@
  * JDWP Unit test for multiple BREAKPOINT events.
  */
 public class BreakpointMultipleTest extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return BreakpointDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointOnCatchTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointOnCatchTest.java
index 58e2ba7..0556d71 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointOnCatchTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointOnCatchTest.java
@@ -18,7 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.Events;
 
-import org.apache.harmony.jpda.tests.framework.TestErrorException;
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.Location;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointTest.java
index afa28c4..cec8ccb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/BreakpointTest.java
@@ -25,13 +25,10 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.Events;
 
-import org.apache.harmony.jpda.tests.framework.Breakpoint;
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
-import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent.EventThread;
-import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -40,6 +37,7 @@
  * JDWP Unit test for BREAKPOINT event.
  */
 public class BreakpointTest extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return BreakpointDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareDebuggee.java
index abdd4ba..7e762ee 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareDebuggee.java
@@ -38,6 +38,7 @@
         runDebuggee(ClassPrepareDebuggee.class);
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java
index 461ad55..6c831f3 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassPrepareTest.java
@@ -37,6 +37,7 @@
  */
 public class ClassPrepareTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return ClassPrepareDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadDebuggee.java
index c87211e..1dbd028 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadDebuggee.java
@@ -49,15 +49,16 @@
 	public static void main(String[] args) {
         runDebuggee(ClassUnloadDebuggee.class);
     }
-    
+
+    @Override
     public void run() {
         logWriter.println("--> ClassUnloadDebuggee started");
         
         // Test class prepare
         logWriter.println("--> Load and prepare tested class");
         CustomLoader loader = new CustomLoader(logWriter);
-        
-        Class cls = null;
+
+        Class<?> cls = null;
         try {
 			cls = Class.forName(TESTED_CLASS_NAME, true, loader);
 	        logWriter.println("--> Tested class loaded: " + cls);
@@ -164,6 +165,7 @@
             this.logWriter = writer;
         }
 
+        @Override
         public Class<?> loadClass(String name) throws ClassNotFoundException {
             if (TESTED_CLASS_NAME.equals(name)) {
                 // load only tested class with this loader
@@ -172,6 +174,7 @@
             return getParent().loadClass(name);
         }
 
+        @Override
         public Class<?> findClass(String name) throws ClassNotFoundException {
             try {
                 logWriter.println("-->> CustomClassLoader: Find class: " + name);
@@ -183,7 +186,7 @@
 	            byte bytes[] = new byte[size];
 	            int len = loadClassData(is, bytes, size);
                 logWriter.println("-->> CustomClassLoader: Loaded class bytes: " + len);
-	            Class cls = defineClass(name, bytes, 0, len);
+	            Class<?> cls = defineClass(name, bytes, 0, len);
                 logWriter.println("-->> CustomClassLoader: Defined class: " + cls);
 //	            resolveClass(cls);
 //                logWriter.println("-->> CustomClassLoader: Resolved class: " + cls);
@@ -201,6 +204,7 @@
             return len;
         }
 
+        @Override
         protected void finalize() throws Throwable {
             logWriter.println("-->> CustomClassLoader: Class loader finalized => tested class UNLOADED");
             ClassUnloadDebuggee.classUnloaded = true;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadTest.java
index 5ab2e11..2806a6d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ClassUnloadTest.java
@@ -44,6 +44,7 @@
 	public static final String TESTED_CLASS_SIGNATURE =
 		"L" + TESTED_CLASS_NAME.replace('.', '/') + ";";
 
+    @Override
     protected String getDebuggeeClassName() {
         return ClassUnloadDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Debuggee.java
index 2bc8839..0e74d36 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Debuggee.java
@@ -42,6 +42,7 @@
         runDebuggee(CombinedEvents002Debuggee.class);
     }
     
+    @Override
     public void run() {
         // Force class loading so it is visible by the test.
         new CombinedEvents002Debuggee_TestedClass();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Test.java
index ff2905f..bfc427f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents002Test.java
@@ -25,6 +25,7 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.Events;
 
+import org.apache.harmony.jpda.tests.framework.TestErrorException;
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.Location;
@@ -150,15 +151,18 @@
                     " event for '" + TESTED_CLASS_NAME + "'... ");
             ReplyPacket reply = null;
             switch (eventKind) {
-            case JDWPConstants.EventKind.METHOD_ENTRY:
-                reply = debuggeeWrapper.vmMirror.setMethodEntry(TESTED_CLASS_NAME);
-                break;
-            case JDWPConstants.EventKind.METHOD_EXIT:
-                reply = debuggeeWrapper.vmMirror.setMethodExit(TESTED_CLASS_NAME);
-                break;
-            case JDWPConstants.EventKind.METHOD_EXIT_WITH_RETURN_VALUE:
-                reply = debuggeeWrapper.vmMirror.setMethodExitWithReturnValue(TESTED_CLASS_NAME);
-                break;
+                case JDWPConstants.EventKind.METHOD_ENTRY:
+                    reply = debuggeeWrapper.vmMirror.setMethodEntry(TESTED_CLASS_NAME);
+                    break;
+                case JDWPConstants.EventKind.METHOD_EXIT:
+                    reply = debuggeeWrapper.vmMirror.setMethodExit(TESTED_CLASS_NAME);
+                    break;
+                case JDWPConstants.EventKind.METHOD_EXIT_WITH_RETURN_VALUE:
+                    reply =
+                        debuggeeWrapper.vmMirror.setMethodExitWithReturnValue(TESTED_CLASS_NAME);
+                    break;
+                default:
+                    throw new TestErrorException("Unexpected event: " + eventKindName);
             }
             checkReplyPacket(reply, "Set " + eventKindName + " event.");  //DBG needless ?
             int requestId = reply.getNextValueAsInt();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Debuggee.java
index 9e8e09d..6625ee0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Debuggee.java
@@ -41,6 +41,7 @@
     public void emptyMethod() {
     }
      
+    @Override
     public void run() {
         logWriter.println("-> CombinedEvents003Debuggee: Starting...");
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Test.java
index 52c31bf..5cf7cab 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEvents003Test.java
@@ -50,6 +50,7 @@
 
     private boolean eventVmDeathReceived = false;
 
+    @Override
     protected String getDebuggeeClassName() {
         return CombinedEvents003Debuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsDebuggee.java
index 7c80acb..25d2b27 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsDebuggee.java
@@ -45,6 +45,7 @@
     }
     
        
+    @Override
     public void run() {
         logWriter.println("-> CombinedEventsDebuggee: Starting...");
         combinedEventsDebuggee = this;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsTest.java
index 519bde0..cfe6db9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedEventsTest.java
@@ -51,6 +51,7 @@
     private boolean eventVmDeathReceived = false;
     private boolean eventMethodExitReceived = false;
 
+    @Override
     protected String getDebuggeeClassName() {
         return CombinedEventsDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedExceptionEventsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedExceptionEventsDebuggee.java
index f994331..5724fcd 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedExceptionEventsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/CombinedExceptionEventsDebuggee.java
@@ -37,6 +37,7 @@
         runDebuggee(CombinedExceptionEventsDebuggee.class);
     }
 
+    @Override
     public void run() {
         logWriter.println("-> CombinedExceptionEventsDebuggee: Starting...");
 
@@ -57,6 +58,7 @@
 
     private void testCaughtException() {
         Thread t = new Thread(new Runnable() {
+            @Override
             public void run() {
                 // Catch a different exception to test catch location is
                 // properly reported.
@@ -78,6 +80,7 @@
 
     private void testUncaughtException() {
         Thread t = new Thread(new Runnable() {
+            @Override
             public void run() {
                 // Catch a different exception to test catch location is
                 // properly reported.
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/EventDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/EventDebuggee.java
index 7c1bf54..8d23adb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/EventDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/EventDebuggee.java
@@ -42,6 +42,7 @@
             super(testedThreadName);   
         }
         
+        @Override
         public void run() {
             logWriter.println("-> SimpleThread: Running...");
         } 
@@ -51,6 +52,7 @@
         runDebuggee(EventDebuggee.class);
     }
     
+    @Override
     public void run() {
         logWriter.println("-> EventDebuggee: STARTED");
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtDebuggee.java
index 7d1b932..bcac930 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtDebuggee.java
@@ -42,6 +42,7 @@
         runDebuggee(ExceptionCaughtDebuggee.class);
     }
 
+    @Override
     public void run() {
         logWriter.println("-- ExceptionCatchDebuggee: STARTED");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtTest.java
index 895f35d..09811e2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionCaughtTest.java
@@ -40,6 +40,7 @@
  */
 public class ExceptionCaughtTest extends ExceptionBaseTest {
 
+    @Override
     protected String getDebuggeeClassName() {
         return ExceptionCaughtDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtDebuggee.java
index 6fb87aa..1e6bb67 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtDebuggee.java
@@ -38,6 +38,7 @@
         runDebuggee(ExceptionUncaughtDebuggee.class);
     }
 
+    @Override
     public void run() {
         logWriter.println("-- ExceptionUncaughtDebuggee: STARTED");
 
@@ -51,6 +52,7 @@
         logWriter.println("-- ExceptionUncaughtDebuggee: SGNL_CONTINUE has been received!");
 
         Thread t = new Thread(new Runnable() {
+            @Override
             public void run() {
                 // Catch a different exception to test catch location is properly reported.
                 try {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtTest.java
index 0e801cf..bb2451c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionUncaughtTest.java
@@ -33,6 +33,7 @@
 
     private static final String THROW_EXCEPTION_METHOD = "throwDebuggeeException";
 
+    @Override
     protected String getDebuggeeClassName() {
         return ExceptionUncaughtDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionWithLocationDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionWithLocationDebuggee.java
index 0563a11..2816c4f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionWithLocationDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/ExceptionWithLocationDebuggee.java
@@ -46,9 +46,11 @@
         }
     }
 
+    @Override
     public void run() {
         logWriter.println("ExceptionWithLocationDebuggee: STARTED");
         // load and prepare DebuggeeException class
+        @SuppressWarnings("unused")
         DebuggeeException ex = new DebuggeeException("dummy exception");
 
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldAccessTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldAccessTest.java
index bd6ef89..3c517b5 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldAccessTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldAccessTest.java
@@ -38,6 +38,7 @@
  * JDWP Unit test for FIELD_ACCESS event.
  */
 public class FieldAccessTest extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return FieldDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldDebuggee.java
index eacb4a5..25a09e3 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldDebuggee.java
@@ -40,6 +40,7 @@
     
     private int testIntField = 0;
     
+    @Override
     public void run(){
         
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Debuggee.java
index a42efbc..bd86c9e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Debuggee.java
@@ -61,6 +61,7 @@
     /**
      * This debuggee accesses all class fields and synchronizes with debugger.
      */
+    @Override
     public void run() {
 
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Test.java
index a2cbea2..a2a9272 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModification002Test.java
@@ -37,6 +37,7 @@
  * JDWP Unit test for FIELD_MODIFICATION event.
  */
 public class FieldModification002Test extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return FieldModification002Debuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModificationTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModificationTest.java
index a8a5dd0..213ab86 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModificationTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldModificationTest.java
@@ -38,6 +38,7 @@
  * JDWP Unit test for FIELD_MODIFICATION event.
  */
 public class FieldModificationTest extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return FieldDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationDebuggee.java
index a8c707d..17eb09d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationDebuggee.java
@@ -46,6 +46,7 @@
         testIntField = currentValue + 1;  // field modification
     }
 
+    @Override
     public void run() {
         logWriter.println("FieldWithLocationDebuggee started");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationTest.java
index f047bc0..f008608 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/FieldWithLocationTest.java
@@ -18,11 +18,11 @@
 
 package org.apache.harmony.jpda.tests.jdwp.Events;
 
+import org.apache.harmony.jpda.tests.framework.TestErrorException;
 import org.apache.harmony.jpda.tests.framework.jdwp.EventBuilder;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.TaggedObject;
-import org.apache.harmony.jpda.tests.framework.jdwp.VmMirror;
 
 /**
  *
@@ -103,6 +103,9 @@
             accessedField = ((ParsedEvent.Event_FIELD_ACCESS)event).getObject();
         } else if (fieldEventKind == JDWPConstants.EventKind.FIELD_MODIFICATION) {
             accessedField = ((ParsedEvent.Event_FIELD_MODIFICATION)event).getObject();
+        } else {
+            throw new TestErrorException(
+                    "Unexpected event " + JDWPConstants.EventKind.getName(fieldEventKind));
         }
 
         // Check the field receiver is an instance of our debuggee class.
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/JDWPEventTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/JDWPEventTestCase.java
index c3f3031..f38f05b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/JDWPEventTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/JDWPEventTestCase.java
@@ -32,6 +32,7 @@
  */
 class JDWPEventTestCase extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return EventDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryDebuggee.java
index 0f344d4..786d3e2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryDebuggee.java
@@ -42,6 +42,7 @@
         logWriter.println("sampleMethod() is called");
     }
     
+    @Override
     public void run() {
         logWriter.println("MethodEntryDebuggee started");
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryTest.java
index 017017a..cd2bb16 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodEntryTest.java
@@ -39,6 +39,7 @@
  */
 public class MethodEntryTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return MethodEntryDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitTest.java
index 87e7655..d834649 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitTest.java
@@ -39,6 +39,7 @@
  */
 public class MethodExitTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return MethodEntryDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueDebuggee.java
index e8dbb29..e5a5a83 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueDebuggee.java
@@ -97,6 +97,7 @@
         logWriter.println("--> calling voidMethod()");
     }
     
+    @Override
     public void run() {
         logWriter.println("--> MethodExitWithReturnValueDebuggee started");
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueTest.java
index 19aba2a..177c12e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MethodExitWithReturnValueTest.java
@@ -31,6 +31,7 @@
 
 public class MethodExitWithReturnValueTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return MethodExitWithReturnValueDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterAndEnteredDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterAndEnteredDebuggee.java
index 50f27c8..9c237e8 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterAndEnteredDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterAndEnteredDebuggee.java
@@ -23,13 +23,14 @@
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
 public class MonitorContendedEnterAndEnteredDebuggee extends SyncDebuggee {
-    
+
     static final String TESTED_THREAD = "BLOCKED_THREAD";
-    
+
     static Object lock = new MonitorWaitMockMonitor();
 
     BlockedThread thread;
 
+    @Override
     public void run() {
         thread = new BlockedThread(logWriter,TESTED_THREAD);
 
@@ -54,14 +55,15 @@
         }
     }
 
-    class BlockedThread extends Thread {
-        private LogWriter logWriter; 
+    static class BlockedThread extends Thread {
+        private LogWriter logWriter;
 
         public BlockedThread(LogWriter writer, String name){
             logWriter = writer;
             this.setName(name);
         }
-                
+
+        @Override
         public void run() {
             logWriter.println("--> BlockedThread: start to run");
             
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterTest.java
index cc6b660..5ede1fa 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnterTest.java
@@ -29,6 +29,7 @@
 public class MonitorContendedEnterTest extends JDWPSyncTestCase {
     String monitorSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitMockMonitor;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.Events.MonitorContendedEnterAndEnteredDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnteredTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnteredTest.java
index 1a62b9e..57fe6d0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnteredTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorContendedEnteredTest.java
@@ -29,6 +29,7 @@
 public class MonitorContendedEnteredTest extends JDWPSyncTestCase {
     String monitorSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitMockMonitor;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.Events.MonitorContendedEnterAndEnteredDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitAndWaitedDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitAndWaitedDebuggee.java
index cc60552..9a5e5d9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitAndWaitedDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitAndWaitedDebuggee.java
@@ -25,6 +25,7 @@
 
     public static long TIMEOUT = 500;
 
+    @Override
     public void run() {
         MonitorWaitMockMonitor monitor = new MonitorWaitMockMonitor();
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitTest.java
index ca78e91..f8e5c2b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitTest.java
@@ -29,6 +29,7 @@
 public class MonitorWaitTest extends JDWPSyncTestCase {
     String monitorSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitMockMonitor;";
     
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitAndWaitedDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitedTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitedTest.java
index 18361de..dd7af6d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitedTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitedTest.java
@@ -29,6 +29,7 @@
 public class MonitorWaitedTest extends JDWPSyncTestCase {
     String monitorSignature = "Lorg/apache/harmony/jpda/tests/jdwp/Events/MonitorWaitMockMonitor;";
     
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.Events.MonitorWaitAndWaitedDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepDebuggee.java
index be5b816..b67cb72 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepDebuggee.java
@@ -28,7 +28,6 @@
 
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
-;
 
 /**
  * Debuggee for SingleStepTest unit test.
@@ -45,6 +44,7 @@
         logWriter.println("Line3");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepTest.java
index 0c44ee7..076afee 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepTest.java
@@ -46,6 +46,7 @@
 
     private String DEBUGGEE_CLASS_NAME = "org.apache.harmony.jpda.tests.jdwp.Events.SingleStepDebuggee";
 
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS_NAME;
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionDebuggee.java
index 37d3282..cd7d2db 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionDebuggee.java
@@ -43,6 +43,7 @@
         logWriter.println("methodCalledThroughReflection");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionTest.java
index 3c94d10..e773ed7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepThroughReflectionTest.java
@@ -45,6 +45,7 @@
     // The method where we expect to suspend with the single-step.
     private static final String EVENT_METHOD = "methodCalledThroughReflection";
 
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS_NAME;
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepWithLocationTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepWithLocationTest.java
index bb3d3e3..c101ab9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepWithLocationTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/SingleStepWithLocationTest.java
@@ -36,6 +36,7 @@
 
     private static final String BREAKPOINT_METHOD_NAME = "breakpointTest";
 
+    @Override
     protected String getDebuggeeClassName() {
         return SingleStepDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/VMDeath002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/VMDeath002Test.java
index f492d7b..242dde1 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/VMDeath002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Events/VMDeath002Test.java
@@ -45,6 +45,7 @@
 
     static String DEBUGGEE_CLASS_NAME = "org.apache.harmony.jpda.tests.jdwp.Events.EventDebuggee";
 
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS_NAME;
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodDebuggee.java
index 2e9f401..3db3b20 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodDebuggee.java
@@ -18,9 +18,7 @@
 
 package org.apache.harmony.jpda.tests.jdwp.InterfaceType;
 
-import org.apache.harmony.jpda.tests.framework.LogWriter;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
-import org.apache.harmony.jpda.tests.share.JPDATestOptions;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
 /**
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 1301748..4d1c361 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
@@ -18,12 +18,9 @@
 
 package org.apache.harmony.jpda.tests.jdwp.InterfaceType;
 
-import org.apache.harmony.jpda.tests.framework.LogWriter;
 import org.apache.harmony.jpda.tests.framework.jdwp.*;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.debuggee.*;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
-import org.apache.harmony.jpda.tests.share.JPDATestOptions;
 
 /**
  * JDWP unit test to exercise InterfaceType.InvokeMethod command.
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTestInterface.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTestInterface.java
index d36f0d9..d1a4588 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTestInterface.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/InterfaceType/InvokeMethodTestInterface.java
@@ -18,9 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.InterfaceType;
 
-import org.apache.harmony.jpda.tests.framework.LogWriter;
-import org.apache.harmony.jpda.tests.share.JPDATestOptions;
-
 /**
  * Used for InterfaceType.InvokeMethodTest
  */
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/BytecodesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/BytecodesTest.java
index 0956a50..7399f79 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/BytecodesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/BytecodesTest.java
@@ -25,7 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.Method;
 
-import java.io.UnsupportedEncodingException;
 import java.util.Arrays;
 
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
@@ -44,7 +43,7 @@
      * <BR>It runs MethodDebuggee. Gets methods with ReferenceType.Methods command,
      * prints it's bytecodes received with Method.Bytecodes command.
      */
-    public void testBytecodesTest001() throws UnsupportedEncodingException {
+    public void testBytecodesTest001() {
         logWriter.println("testBytecodesTest001 started");
 
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/JDWPMethodTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/JDWPMethodTestCase.java
index 0054a0e..152713b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/JDWPMethodTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/JDWPMethodTestCase.java
@@ -34,6 +34,7 @@
 
 public class JDWPMethodTestCase extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return MethodDebuggee.class.getName();
     }
@@ -77,6 +78,7 @@
         public String getSignature() {
             return signature;
         }
+        @Override
         public String toString() {
             return ""+methodID+" "+name+" "+signature+" "+modBits;
         }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/LineTableTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/LineTableTest.java
index 3b0ecf6..c84065d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/LineTableTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/LineTableTest.java
@@ -25,8 +25,6 @@
  */
 package org.apache.harmony.jpda.tests.jdwp.Method;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
@@ -42,7 +40,7 @@
      * For each received method sends Method.LineTable command
      * and prints returned LineTable.
      */
-    public void testLineTableTest001() throws UnsupportedEncodingException {
+    public void testLineTableTest001() {
         logWriter.println("testLineTableTest001 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/MethodDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/MethodDebuggee.java
index 7ec479b..274475f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/MethodDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/Method/MethodDebuggee.java
@@ -30,6 +30,7 @@
 
 public class MethodDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("Hello World!");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java
index f06b516..b210d9b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/AttachConnectorTest.java
@@ -30,7 +30,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.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -39,6 +38,7 @@
  */
 public class AttachConnectorTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.ConnectorKindDebuggee";
     }
@@ -101,6 +101,7 @@
         logWriter.println("==> testAttachConnector001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java
index e108ade..36e6bd1 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/BreakpointTest.java
@@ -31,7 +31,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -44,6 +43,7 @@
 
     private String METHOD_NAME = "printWord";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee";
     }
@@ -128,6 +128,7 @@
         }
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java
index 97de978..161bac0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassObjectIDTest.java
@@ -27,7 +27,6 @@
 
 import org.apache.harmony.jpda.tests.framework.TestOptions;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -40,6 +39,7 @@
 
     //private String METHOD_NAME = "printWord";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee";
     }
@@ -89,6 +89,7 @@
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java
index 75b14f0..0252def 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ClassPrepareTest.java
@@ -31,7 +31,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.jdwp.Events.ClassPrepareDebuggee;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -40,6 +39,7 @@
  */
 public class ClassPrepareTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return ClassPrepareDebuggee.class.getName();
     }
@@ -87,8 +87,6 @@
 
         //ckeck if received events are expected
         int result = 0;
-        int autoEvents = 0;
-        int wrongEvents = 0;
         for (int i = 0; i < eventsCount; i++) {
             ParsedEvent event = parsedEvents[i];
             logWriter.println("=> Event #" + i + ";");
@@ -106,7 +104,6 @@
             // check if event is expected
             if (eventKind == JDWPConstants.EventKind.VM_DEATH) {
                 if (parsedEvents[i].getRequestID() == 0) {
-                    autoEvents++;
                     logWriter.println("=> found auto VM_DEATH event!");
                     // for automatical event suspend policy can be changed
                 } else {
@@ -115,7 +112,6 @@
                     result = 1;
                 }
             } else {
-                wrongEvents++;
                 logWriter.println("## FAILURE: unexpected event kind: "
                         + eventKind);
                 result = 2;
@@ -130,6 +126,7 @@
         logWriter.println("==> testClassPrepare001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ConnectorKindDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ConnectorKindDebuggee.java
index 0035e64..216bda3 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ConnectorKindDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ConnectorKindDebuggee.java
@@ -33,6 +33,7 @@
  */
 public class ConnectorKindDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
     int i=0;
         while(true) {   
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java
index 5dba1c6..8656ee8 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee.java
@@ -35,7 +35,8 @@
    static EnableCollectionObject001_02 patternObject;
    static boolean patternObject_Finalized = false; 
 
-   public void run() {
+   @Override
+public void run() {
        logWriter.println("--> Debuggee: EnableCollectionDebuggee: START");
        
        checkedObject = new EnableCollectionObject001_01();
@@ -114,14 +115,16 @@
 }
 
 class EnableCollectionObject001_01 {
-   protected void finalize() throws Throwable {
+   @Override
+protected void finalize() throws Throwable {
        EnableCollectionDebuggee.checkedObject_Finalized = true;
     super.finalize();
    }
 }   
 
 class EnableCollectionObject001_02 {
-   protected void finalize() throws Throwable {
+   @Override
+protected void finalize() throws Throwable {
        EnableCollectionDebuggee.patternObject_Finalized = true;
        super.finalize();
    }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java
index f9b8abe..ae1f874 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionTest.java
@@ -32,7 +32,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.Value;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -48,6 +47,7 @@
 
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/MultiSession/EnableCollectionDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.EnableCollectionDebuggee";
     }
@@ -147,6 +147,7 @@
         logWriter.println("==> testEnableCollection001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EventDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EventDebuggee.java
index 69d88d9..0d10c9d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EventDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/EventDebuggee.java
@@ -42,6 +42,7 @@
             super(testedThreadName);   
         }
         
+        @Override
         public void run() {
             logWriter.println("-> SimpleThread: Running...");
         } 
@@ -51,6 +52,7 @@
         runDebuggee(EventDebuggee.class);
     }
     
+    @Override
     public void run() {
         logWriter.println("-> EventDebuggee: STARTED");
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionDebuggee.java
index a52a60a..a1e18a1 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionDebuggee.java
@@ -40,6 +40,7 @@
         runDebuggee(ExceptionDebuggee.class);
     }
     
+    @Override
     public void run(){
         
         logWriter.println("--> ExceptionDebuggee: STARTED");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java
index 3f63819..6fc5c28 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ExceptionTest.java
@@ -30,7 +30,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.jdwp.Events.ExceptionCaughtDebuggee;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -39,6 +38,7 @@
  */
 public class ExceptionTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return ExceptionCaughtDebuggee.class.getName();
     }
@@ -88,8 +88,6 @@
 
         // ckeck if received events are expected
         int result = 0;
-        int autoEvents = 0;
-        int wrongEvents = 0;
         for (int i = 0; i < eventsCount; i++) {
             ParsedEvent event = parsedEvents[i];
             logWriter.println("=> Event #" + i + ";");
@@ -107,7 +105,6 @@
             // check if event is expected
             if (eventKind == JDWPConstants.EventKind.VM_DEATH) {
                 if (parsedEvents[i].getRequestID() == 0) {
-                    autoEvents++;
                     logWriter.println("=> found auto VM_DEATH event!");
                     // for automatical event suspend policy can be changed
                 } else {
@@ -116,7 +113,6 @@
                     result = 1;
                 }
             } else {
-                wrongEvents++;
                 logWriter.println("## FAILURE: unexpected event kind: "
                         + eventKind);
                 result = 2;
@@ -131,6 +127,7 @@
         logWriter.println("==> testException001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java
index 6cafc9e..71a2001 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldAccessTest.java
@@ -29,7 +29,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -37,6 +36,7 @@
  * JDWP Unit test for verifying canceling of FIELD_ACCESS event after re-connection.
  */
 public class FieldAccessTest extends JDWPEventTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return FieldDebuggee.class.getName();
     }
@@ -83,8 +83,6 @@
 
         // ckeck if received events are expected
         int result = 0;
-        int autoEvents = 0;
-        int wrongEvents = 0;
         for (int i = 0; i < eventsCount; i++) {
             ParsedEvent event = parsedEvents[i];
             logWriter.println("=> Event #" + i + ";");
@@ -102,7 +100,6 @@
             // check if event is expected
             if (eventKind == JDWPConstants.EventKind.VM_DEATH) {
                 if (parsedEvents[i].getRequestID() == 0) {
-                    autoEvents++;
                     logWriter.println("=> found auto VM_DEATH event!");
                     // for automatical event suspend policy can be changed
                 } else {
@@ -111,7 +108,6 @@
                     result = 1;
                 }
             } else {
-                wrongEvents++;
                 logWriter.println("## FAILURE: unexpected event kind: "
                         + eventKind);
                 result = 2;
@@ -126,6 +122,7 @@
         logWriter.println("==> testFieldAccess001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldDebuggee.java
index ad88fe1..8b4f83d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldDebuggee.java
@@ -40,6 +40,7 @@
     
     private int testIntField = 0;
     
+    @Override
     public void run(){
         
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java
index 5e3fd0a..f684d09 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/FieldModificationTest.java
@@ -29,7 +29,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -38,6 +37,7 @@
  */
 public class FieldModificationTest extends JDWPEventTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return FieldDebuggee.class.getName();
     }
@@ -84,8 +84,6 @@
 
         //ckeck if received events are expected
         int result = 0;
-        int autoEvents = 0;
-        int wrongEvents = 0;
         for (int i = 0; i < eventsCount; i++) {
             ParsedEvent event = parsedEvents[i];
             logWriter.println("=> Event #" + i + ";");
@@ -103,7 +101,6 @@
             // check if event is expected
             if (eventKind == JDWPConstants.EventKind.VM_DEATH) {
                 if (parsedEvents[i].getRequestID() == 0) {
-                    autoEvents++;
                     logWriter.println("=> found auto VM_DEATH event!");
                     // for automatical event suspend policy can be changed
                 } else {
@@ -112,7 +109,6 @@
                     result = 1;
                 }
             } else {
-                wrongEvents++;
                 logWriter.println("## FAILURE: unexpected event kind: "
                         + eventKind);
                 result = 2;
@@ -127,6 +123,7 @@
         logWriter.println("==> testFieldModification001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/JDWPEventTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/JDWPEventTestCase.java
index aab73dd..97f22be 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/JDWPEventTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/JDWPEventTestCase.java
@@ -32,6 +32,7 @@
  */
 abstract class JDWPEventTestCase extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return EventDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java
index 284e677..cabcc27 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ListenConnectorTest.java
@@ -29,7 +29,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.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -38,6 +37,7 @@
  */
 public class ListenConnectorTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.ConnectorKindDebuggee";
     }
@@ -45,6 +45,7 @@
     /**
      * Sets kind of connection: listen kind.
      */
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setListenConnectorKind();
         logWriter.println("LISTEN connector kind");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java
index 2dc80d0..f53a3f2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MethodEntryExitTest.java
@@ -31,7 +31,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -46,6 +45,7 @@
 
     String classNameRegexp = "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee";
     }
@@ -139,6 +139,7 @@
         }
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if(settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MultiSessionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MultiSessionDebuggee.java
index 3058c35..721f8f2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MultiSessionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/MultiSessionDebuggee.java
@@ -35,6 +35,7 @@
 
     
 
+    @Override
     public void run() {
         logWriter.println("Debuggee is started");
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java
index 9d70592..75e0c00 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/RefTypeIDTest.java
@@ -27,7 +27,6 @@
 
 import org.apache.harmony.jpda.tests.framework.TestOptions;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -40,6 +39,7 @@
 
     private final String METHOD_NAME = "printWord";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.MultiSessionDebuggee";
     }
@@ -90,6 +90,7 @@
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeDebuggee.java
index 2e11ef1..8214466 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeDebuggee.java
@@ -35,6 +35,7 @@
 
     
 
+    @Override
     public void run() {
         logWriter.println("Debuggee is started");
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java
index ac31faf..aeb2bcf 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ResumeTest.java
@@ -27,7 +27,6 @@
 
 import org.apache.harmony.jpda.tests.framework.TestOptions;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -36,6 +35,7 @@
  */
 public class ResumeTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.MultiSession.ResumeDebuggee";
     }
@@ -70,6 +70,7 @@
         logWriter.println("TEST PASSED");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepDebuggee.java
index e7d15a2..d00b3d0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepDebuggee.java
@@ -27,7 +27,6 @@
 
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
-;
 
 /**
  * Debuggee for SingleStepTest unit test.
@@ -45,6 +44,7 @@
         logWriter.println("Line3");
     }
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java
index 72df3b6..2d90eac 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/SingleStepTest.java
@@ -33,7 +33,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -46,6 +45,7 @@
 
     private String DEBUGGEE_CLASS_NAME = "org.apache.harmony.jpda.tests.jdwp.MultiSession.SingleStepDebuggee";
 
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS_NAME;
     }
@@ -137,8 +137,6 @@
 
         //ckeck if received events are expected
         int result = 0;
-        int autoEvents = 0;
-        int wrongEvents = 0;
         for (int i = 0; i < eventsCount; i++) {
             ParsedEvent event = parsedEvents[i];
             logWriter.println("=> Event #" + i + ";");
@@ -156,7 +154,6 @@
             // check if event is expected
             if (eventKind == JDWPConstants.EventKind.VM_DEATH) {
                 if (parsedEvents[i].getRequestID() == 0) {
-                    autoEvents++;
                     logWriter.println("=> found auto VM_DEATH event!");
                     // for automatical event suspend policy can be changed
                 } else {
@@ -165,7 +162,6 @@
                     result = 1;
                 }
             } else {
-                wrongEvents++;
                 logWriter.println("## FAILURE: unexpected event kind: "
                         + eventKind);
                 result = 2;
@@ -180,6 +176,7 @@
         logWriter.println("==> testSingleStep001 PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java
index 84259b0..9717bb6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadEndTest.java
@@ -33,7 +33,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -121,6 +120,7 @@
         }
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java
index 3bb54cd..600e5a6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/ThreadStartTest.java
@@ -33,7 +33,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -125,6 +124,7 @@
         }
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java
index 6a6de6c..fdd9af4 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/MultiSession/VMDeathTest.java
@@ -33,7 +33,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 
 
@@ -46,6 +45,7 @@
 
     static final String DEBUGGEE_CLASS_NAME = "org.apache.harmony.jpda.tests.jdwp.Events.EventDebuggee";
 
+    @Override
     protected String getDebuggeeClassName() {
         return DEBUGGEE_CLASS_NAME;
     }
@@ -107,8 +107,6 @@
 
         //ckeck if received events are expected
         int result = 0;
-        int autoEvents = 0;
-        int wrongEvents = 0;
         for (int i = 0; i < eventsCount; i++) {
             ParsedEvent event = parsedEvents[i];
             logWriter.println("=> Event #" + i + ";");
@@ -126,7 +124,6 @@
             // check if event is expected
             if (eventKind == JDWPConstants.EventKind.VM_DEATH) {
                 if (parsedEvents[i].getRequestID() == 0) {
-                    autoEvents++;
                     logWriter.println("=> found auto VM_DEATH event!");
                     // for automatical event suspend policy can be changed
                 } else {
@@ -135,7 +132,6 @@
                     result = 1;
                 }
             } else {
-                wrongEvents++;
                 logWriter.println("## FAILURE: unexpected event kind: "
                         + eventKind);
                 result = 2;
@@ -150,6 +146,7 @@
         logWriter.println("==> test PASSED!");
     }
 
+    @Override
     protected void beforeConnectionSetUp() {
         settings.setAttachConnectorKind();
         if (settings.getTransportAddress() == null) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionDebuggee.java
index ae0286c..a0f8408 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionDebuggee.java
@@ -35,6 +35,7 @@
     static DisableCollectionObject001_02 patternObject;
     static boolean patternObject_Finalized = false; 
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: DisableCollectionDebuggee: START");
         
@@ -109,6 +110,7 @@
 }
 
 class DisableCollectionObject001_01 {
+    @Override
     protected void finalize() throws Throwable {
         DisableCollectionDebuggee.checkedObject_Finalized = true;
         super.finalize();
@@ -116,6 +118,7 @@
 }   
 
 class DisableCollectionObject001_02 {
+    @Override
     protected void finalize() throws Throwable {
         DisableCollectionDebuggee.patternObject_Finalized = true;
         super.finalize();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionTest.java
index fbd51e8..6c85642 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionTest.java
@@ -44,6 +44,7 @@
 
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/DisableCollectionDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.DisableCollectionDebuggee";
     }
@@ -102,7 +103,7 @@
         assertEquals("Invalid value tag for checked object,",
                 JDWPConstants.Tag.OBJECT_TAG, checkedObjectFieldTag,
                 JDWPConstants.Tag.getName(JDWPConstants.Tag.OBJECT_TAG),
-                JDWPConstants.Tag.getName((byte) (checkedObjectFieldTag)));
+                JDWPConstants.Tag.getName(checkedObjectFieldTag));
 
         long checkedObjectID = checkedObjectFieldValue.getLongValue();
         logWriter.println("=> Returned checked ObjectID = " + checkedObjectID);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java
index a889371..dae5522 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee.java
@@ -35,6 +35,7 @@
     static EnableCollectionObject001_02 patternObject;
     static boolean patternObject_Finalized = false;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: EnableCollectionDebuggee: START");
         
@@ -131,6 +132,7 @@
 }
 
 class EnableCollectionObject001_01 {
+    @Override
     protected void finalize() throws Throwable {
         EnableCollectionDebuggee.checkedObject_Finalized = true;
         super.finalize();
@@ -138,6 +140,7 @@
 }   
 
 class EnableCollectionObject001_02 {
+    @Override
     protected void finalize() throws Throwable {
         EnableCollectionDebuggee.patternObject_Finalized = true;
         super.finalize();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionTest.java
index 7996945..0df0c1a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionTest.java
@@ -45,6 +45,7 @@
     static final String thisCommandName = "ObjectReference::EnableCollection command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/EnableCollectionDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.EnableCollectionDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee.java
index 563afad..1a22c62 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee.java
@@ -45,6 +45,7 @@
     static GetValues002Debuggee getValues002DebuggeeField;
     
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValues002Debuggee: START");
         getValues002DebuggeeField = new GetValues002Debuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Test.java
index 291d14a..a3d1c1a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Test.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ObjectReference::GetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues002Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValues002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Debuggee.java
index 53ec567..7adaed6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Debuggee.java
@@ -38,11 +38,12 @@
     String stringField; // JDWP_TAG_STRING = 115
     Thread threadField; // JDWP_TAG_THREAD = 116
     ThreadGroup threadGroupField; // JDWP_TAG_THREAD_GROUP = 103
-    Class classField; // JDWP_TAG_CLASS_OBJECT = 99
+    Class<?> classField; // JDWP_TAG_CLASS_OBJECT = 99
     ClassLoader classLoaderField; // DWP_TAG_CLASS_LOADER = 108
-    
-    
-    
+
+
+
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValues003Debuggee: START");
         testedObject = new GetValues003Debuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Test.java
index 27da25d..6d784a4 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Test.java
@@ -43,6 +43,7 @@
     static final String thisCommandName = "ObjectReference::GetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValues003Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValues003Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesDebuggee.java
index a7a1d8f..0ae2204 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesDebuggee.java
@@ -40,9 +40,10 @@
     GetValuesDebuggee[] objectArrayField;
     Thread threadField;
     ThreadGroup threadGroupField;
-    Class classField;
+    Class<?> classField;
     ClassLoader classLoaderField;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValuesDebuggee: START");
         getValuesDebuggeeObject = new GetValuesDebuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesTest.java
index a234a74..5bcc955 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ObjectReference::GetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/GetValuesDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.GetValuesDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Debuggee.java
index 7bd81a0..19199b8 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod002Debuggee.java
@@ -18,7 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ObjectReference;
 
-import org.apache.harmony.jpda.tests.framework.LogWriter;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
@@ -42,9 +41,11 @@
         logWriter.println("InvokeMethod002Debuggee.execMethod()");
     }
 
+    @Override
     public void run() {
         // Preload TestClass so it is available during the test.
-        Class c = null;
+        @SuppressWarnings("unused")
+        Class<?> c = null;
         try {
             c = Class.forName("org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethod002Debuggee$TestClass");
         } catch (ClassNotFoundException e) {
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 1123bde..9ac6ca6 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
@@ -32,6 +32,7 @@
  * JDWP unit test for ObjectReference.InvokeMethod command.
  */
 public class InvokeMethod002Test extends JDWPSyncTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethod002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Debuggee.java
index 3819d9c..b0595f1 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Debuggee.java
@@ -37,9 +37,11 @@
         logWriter.println("InvokeMethod003Debuggee.execMethod()");
     }
 
+    @Override
     public void run() {
         // Preload TestClass so it is available during the test.
-        Class c = null;
+        @SuppressWarnings("unused")
+        Class<?> c = null;
         try {
             c = Class.forName("org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethod003Debuggee$TestClass");
         } catch (ClassNotFoundException e) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Test.java
index a639699..2cc7203 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethod003Test.java
@@ -32,6 +32,7 @@
  * JDWP unit test for ObjectReference.InvokeMethod command.
  */
 public class InvokeMethod003Test extends JDWPSyncTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.InvokeMethod003Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Debuggee.java
index efb3dbc..3c0dd6e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefault002Debuggee.java
@@ -62,9 +62,11 @@
         logWriter.println("InvokeMethodDefault002Debuggee.execMethod()");
     }
 
+    @Override
     public void run() {
         // Preload TestClass so it is available during the test.
-        Class c = null;
+        @SuppressWarnings("unused")
+        Class<?> c = null;
         String packageName = "org.apache.harmony.jpda.tests.jdwp.";
         try {
             c = Class.forName(
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 7aaf026..99f6eb7 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
@@ -28,6 +28,7 @@
  * overridden default method.
  */
 public class InvokeMethodDefault002Test extends JDWPSyncTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return InvokeMethodDefault002Debuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultDebuggee.java
index b3b5e97..d51f5de 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/InvokeMethodDefaultDebuggee.java
@@ -54,9 +54,11 @@
         logWriter.println("InvokeMethodDefaultDebuggee.execMethod()");
     }
 
+    @Override
     public void run() {
         // Preload TestClass so it is available during the test.
-        Class c = null;
+        @SuppressWarnings("unused")
+        Class<?> c = null;
         String packageName = "org.apache.harmony.jpda.tests.jdwp.";
         try {
             c = Class.forName(
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 0f2a386..fcb432d 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
@@ -27,6 +27,7 @@
  * JDWP unit test for ObjectReference.InvokeMethod command.
  */
 public class InvokeMethodDefaultTest extends JDWPSyncTestCase {
+    @Override
     protected String getDebuggeeClassName() {
         return InvokeMethodDefaultDebuggee.class.getName();
     }
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 7012ddd..ab83eda 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
@@ -52,6 +52,7 @@
  */
 public class InvokeMethodTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java
index 070b34d..9dcc3f9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee.java
@@ -37,6 +37,7 @@
     static IsCollectedObject001_03 checkedObject_03;
     static volatile boolean checkedObject_03_Finalized = false;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: IsCollectedDebuggee: START");
         
@@ -116,6 +117,7 @@
 }
 
 class IsCollectedObject001_01 {
+    @Override
     protected void finalize() throws Throwable {
         IsCollectedDebuggee.checkedObject_01_Finalized = true;
         super.finalize();
@@ -123,6 +125,7 @@
 }   
 
 class IsCollectedObject001_02 {
+    @Override
     protected void finalize() throws Throwable {
         IsCollectedDebuggee.checkedObject_02_Finalized = true;
         super.finalize();
@@ -130,6 +133,7 @@
 }   
 
 class IsCollectedObject001_03 {
+    @Override
     protected void finalize() throws Throwable {
         IsCollectedDebuggee.checkedObject_03_Finalized = true;
         super.finalize();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedTest.java
index b88bb07..e400ec7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedTest.java
@@ -44,6 +44,7 @@
 
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/IsCollectedDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.IsCollectedDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoDebuggee.java
index 0442205..a688d9b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoDebuggee.java
@@ -32,6 +32,7 @@
     
     static Object lockObject;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: MonitorInfoDebuggee: START");
         lockObject = new Object();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoTest.java
index 465240e..7457393 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ObjectReference.MonitorInfo command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/MonitorInfoDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.MonitorInfoDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeDebuggee.java
index cc269c0..8993458 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeDebuggee.java
@@ -35,6 +35,7 @@
     static String[] stringArrayField;
     static String stringField = "stringField";
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: ReferenceTypeDebuggee: START");
         class_ReferenceType001Object = new Class_ReferenceType001();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeTest.java
index 4f69d56..d24f021 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeTest.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ObjectReference.ReferenceType command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferenceTypeDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.ReferenceTypeDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsDebuggee.java
index 8f68050..08edcf7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsDebuggee.java
@@ -71,7 +71,9 @@
 }
 
 class ReferringObjectsReferrer001 {
+    @SuppressWarnings("unused")
     private boolean isReferrer;
+    @SuppressWarnings("unused")
     private ReferringObjectsReferree001 reference;
     
     ReferringObjectsReferrer001(ReferringObjectsReferree001 reference) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsTest.java
index 9c588cc..d89b5fe 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsTest.java
@@ -18,8 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ObjectReference;
 
-import java.util.Random;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
@@ -44,6 +42,7 @@
 
     static final String referrerObjSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/ReferringObjectsReferrer001;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.ReferringObjectsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Debuggee.java
index 206496d..3191823 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Debuggee.java
@@ -34,6 +34,7 @@
 
     SetValues002Debuggee objectField;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: SetValues002Debuggee: START");
         setValues002DebuggeeObject = new SetValues002Debuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Test.java
index f1bd15c..50f9080 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Test.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ObjectReference.SetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues002Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValues002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Debuggee.java
index 6600750..1848e3d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Debuggee.java
@@ -39,6 +39,7 @@
     SetValues003Debuggee_ExtraClass objectField;
     static SetValues003Debuggee_ExtraClass objectFieldCopy;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: SetValues003Debuggee: START");
         setValues003DebuggeeObject = new SetValues003Debuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Test.java
index 3493790..e13841a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Test.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ObjectReference.SetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues003Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValues003Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Debuggee.java
index d9e4d00..c2b50d2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Debuggee.java
@@ -42,9 +42,10 @@
     String stringField; // JDWP_TAG_STRING = 115
     Thread threadField; // JDWP_TAG_THREAD = 116
     ThreadGroup threadGroupField; // JDWP_TAG_THREAD_GROUP = 103
-    Class classField; // JDWP_TAG_CLASS_OBJECT = 99
+    Class<?> classField; // JDWP_TAG_CLASS_OBJECT = 99
     ClassLoader classLoaderField; // DWP_TAG_CLASS_LOADER = 108
 
+    @Override
     public void run() {
 
         logWriter.println("--> Debuggee: SetValues004Debuggee: START");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Test.java
index 4ce1176..976d14b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Test.java
@@ -45,6 +45,7 @@
     static final String thisCommandName = "ObjectReference.SetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValues004Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValues004Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesDebuggee.java
index adfeaac..13e5e73 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesDebuggee.java
@@ -42,6 +42,7 @@
     private int privateIntField;
     final int finalIntField = 12345;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: SetValuesDebuggee: START");
         setValuesDebuggeeObject = new SetValuesDebuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesTest.java
index e5d0661..2db2059 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesTest.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ObjectReference.SetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ObjectReference/SetValuesDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ObjectReference.SetValuesDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassLoaderTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassLoaderTest.java
index 7fc7d61..122a8ae 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassLoaderTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassLoaderTest.java
@@ -43,6 +43,7 @@
     static final String thisCommandName = "ReferenceType.ClassLoader command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
@@ -137,8 +138,7 @@
 
         assertAllDataRead(classLoaderReply);
 
-        assertTrue("Result should be a classloader",
-                isClassLoader(returnedClassLoaderID, thisCommandName));
+        assertTrue("Result should be a classloader", isClassLoader(returnedClassLoaderID));
 
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
         logWriter.println("==> " + thisTestName + " for " + thisCommandName + ": FINISH");
@@ -149,7 +149,7 @@
      * the reference ID of java.lang.ClassLoader, then following the superclass chain and
      * comparing.
      */
-    private boolean isClassLoader(long classLoaderObjectID, String thisCommandName) {
+    private boolean isClassLoader(long classLoaderObjectID) {
         if (classLoaderObjectID == 0) {
             // 0 = null = bootstrap classloader.
             return true;
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectDebuggee.java
index 4af931e..7a4da9d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectDebuggee.java
@@ -30,6 +30,7 @@
 
 public class ClassObjectDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: ClassObjectDebuggee: START");
         ClassObjectDebuggee_ExtraClass extraObject = new ClassObjectDebuggee_ExtraClass();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectTest.java
index 2c062d4..cfa0178 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.ClassObject command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/ClassObjectDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.ClassObjectDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolDebuggee.java
index c0c7e74..46bd4c7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolDebuggee.java
@@ -23,6 +23,7 @@
 
 public class ConstantPoolDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: ContantPoolDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolTest.java
index f075906..230112f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolTest.java
@@ -45,6 +45,7 @@
     static final String debuggeeClass = "org/apache/harmony/jpda/tests/jdwp/ReferenceType/ConstantPoolDebuggee.class";
 
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.ConstantPoolDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsDebuggee.java
index 1ce800d..1f8c591 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsDebuggee.java
@@ -34,6 +34,7 @@
     String stringField;
     Object objectField;
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: FieldsDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsTest.java
index c60c316..ce454f5 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.Fields command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.FieldsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericDebuggee.java
index 9595366..1f856a5 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericDebuggee.java
@@ -29,13 +29,14 @@
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
 public class FieldsWithGenericDebuggee extends SyncDebuggee {
-    
+
     static long staticLongField;
     String[] stringArrayField;
     Object[] objectArrayField;
 //    Class<String> classObjectField_2;
-    Class classObjectField;
+    Class<?> classObjectField;
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: FieldsWithGenericDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericTest.java
index 0df6a4e..9b67139 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.FieldsWithGeneric command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/FieldsWithGenericDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.FieldsWithGenericDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Debuggee.java
index a099dd3..4b168a2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Debuggee.java
@@ -45,6 +45,7 @@
     static GetValues002Debuggee getValues002DebuggeeField;
     
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValues002Debuggee: START");
         getValues002DebuggeeField = new GetValues002Debuggee();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Test.java
index b58d1ad..3e7a54a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Test.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ReferenceType.GetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues002Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Debuggee.java
index 4d89dd1..a151a91 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Debuggee.java
@@ -32,6 +32,7 @@
     
     static int superClassStaticIntVar;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValues003Debuggee: START");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Test.java
index 3daa615..eee4820 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Test.java
@@ -42,6 +42,7 @@
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues003Debuggee;";
     static final String chekedClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/RFGetValues003CheckedClass;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues003Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Debuggee.java
index 39c9676..c5355a0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Debuggee.java
@@ -32,6 +32,7 @@
     
     static int superClassStaticIntVar;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValues004Debuggee: START");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Test.java
index 2e6d46e..2e355a1 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Test.java
@@ -42,6 +42,7 @@
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues004Debuggee;";
     static final String anotherClassSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/RFGetValues004AnotherClass;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues004Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Debuggee.java
index 00e8877..dad70a6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Debuggee.java
@@ -36,11 +36,12 @@
     static String stringField; // JDWP_TAG_STRING = 115
     static Thread threadField; // JDWP_TAG_THREAD = 116
     static ThreadGroup threadGroupField; // JDWP_TAG_THREAD_GROUP = 103
-    static Class classField; // JDWP_TAG_CLASS_OBJECT = 99
+    static Class<?> classField; // JDWP_TAG_CLASS_OBJECT = 99
     static ClassLoader classLoaderField; // DWP_TAG_CLASS_LOADER = 108
-    
-    
-    
+
+
+
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValues005Debuggee: START");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Test.java
index deb3a89..9955874 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Test.java
@@ -43,6 +43,7 @@
     static final String thisCommandName = "ReferenceType.GetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues005Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValues005Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues006Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues006Debuggee.java
index c0df0b9..9e42120 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues006Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues006Debuggee.java
@@ -27,6 +27,7 @@
     public void run() {
         logWriter.println("--> Debuggee: GetValues006Debuggee: START");
 
+        @SuppressWarnings("unused")
         GetValues006Interface instance = new GetValues006Implementer();
 
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues007Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues007Debuggee.java
index c6c19b7..9edd9fb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues007Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValues007Debuggee.java
@@ -27,6 +27,7 @@
     public void run() {
         logWriter.println("--> Debuggee: GetValues007Debuggee: START");
 
+        @SuppressWarnings("unused")
         GetValues007Interface instance = new GetValues007Implementer();
 
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesDebuggee.java
index cfd4703..4e75d2b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesDebuggee.java
@@ -36,6 +36,7 @@
     static GetValuesDebuggee getValuesDebuggeeField;
     static int[] staticArrayField;
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: GetValuesDebuggee: START");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesTest.java
index e2240d2..fbfd5be 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesTest.java
@@ -44,6 +44,7 @@
     static final String thisCommandName = "ReferenceType.GetValues command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/GetValuesDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.GetValuesDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java
index 1e15934..b165f26 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InstancesDebuggee.java
@@ -63,10 +63,12 @@
 }
 
 class MockClass {
-	private boolean isReachable;
-	MockClass(boolean isReachable){
-		this.isReachable = isReachable;
-	}
+    @SuppressWarnings("unused")
+    private boolean isReachable;
+
+    MockClass(boolean isReachable) {
+        this.isReachable = isReachable;
+    }
 }
 
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee.java
index b0e393d..5454a7d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee.java
@@ -30,6 +30,7 @@
 
 public class InterfacesDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         CheckedClass_Interfaces001 checkedClass = new CheckedClass_Interfaces001();
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesTest.java
index 346b475..7a1e1af 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.Interfaces command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/InterfacesDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.InterfacesDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsDebuggee.java
index 433bace..824e252 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsDebuggee.java
@@ -29,15 +29,18 @@
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
 public class MethodsDebuggee extends SyncDebuggee {
-    
+
+    @SuppressWarnings("unused")
     static int staticTestMethod(long longParam) {
         return 1;
     }
-    
+
+    @SuppressWarnings("unused")
     Object objectTestMethod(Object objectParam) {
         return null;
     }
-    
+
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: MethodsDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsTest.java
index 5ddc247..e7c91e3 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.Methods command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.MethodsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericDebuggee.java
index fca02ae..054200b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericDebuggee.java
@@ -29,15 +29,18 @@
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
 public class MethodsWithGenericDebuggee extends SyncDebuggee {
-    
+
+    @SuppressWarnings("unused")
     static boolean staticTestMethod(double doubleParam) {
         return true;
     }
-    
+
+    @SuppressWarnings("unused")
     Object objectTestMethod(java.util.Collection stringCollection) {
         return null;
     }
-    
+
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: MethodsWithGenericDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericTest.java
index e003be6..19792a2 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.MethodsWithGeneric command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/MethodsWithGenericDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.MethodsWithGenericDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ModifiersTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ModifiersTest.java
index bcb1dbc..7f00e11 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ModifiersTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/ModifiersTest.java
@@ -44,6 +44,7 @@
     static final String debuggeeInterfaceSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorldInterface;";
     static final String debuggeeInterfaceClassName = "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorldInterface";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesDebuggee.java
index 00986f2..bacd343 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesDebuggee.java
@@ -53,6 +53,7 @@
         logWriter.println("--> Debuggee: DUMP{" + obj1 + "}");
     }
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: NestedTypesDebuggee: START");
         StatClass_1 stat_Class_1_Obj = new StatClass_1();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesTest.java
index 3275b2d..d83da22 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesTest.java
@@ -43,6 +43,7 @@
     static final String thisCommandName = "ReferenceType.NestedTypes command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/NestedTypesDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.NestedTypesDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Debuggee.java
index 9a2a4fb..bfd7b77 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Debuggee.java
@@ -33,6 +33,7 @@
     static Object checkedObject;
 
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: Signature002Debuggee: START");
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Test.java
index 63d3d36..84fd23d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Test.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.Signature command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/Signature002Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.Signature002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureTest.java
index eda0702..7d9b4ff 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.Signature command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericDebuggee.java
index 168fea9..f7e333c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericDebuggee.java
@@ -30,6 +30,7 @@
 
 public class SignatureWithGenericDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: SignatureWithGenericDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericTest.java
index 029179e..e0a31f9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericTest.java
@@ -43,6 +43,7 @@
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/SignatureWithGenericDebuggee;";
     static final String debuggeeGenericSignature = "";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.SignatureWithGenericDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
index 304db75..b898a25 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee.java
@@ -30,6 +30,7 @@
 
 public class SourceDebugExtensionDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: SourceDebugExtensionDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
index ab24efd..c002e08 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionTest.java
@@ -43,6 +43,7 @@
     static final String thisCommandName = "ReferenceType.SourceDebugExtension command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceDebugExtensionDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.SourceDebugExtensionDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileDebuggee.java
index 583e176..0228a92 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileDebuggee.java
@@ -30,6 +30,7 @@
 
 public class SourceFileDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: SourceFileDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileTest.java
index d672bf1..1064d73 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.SourceFile command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/SourceFileDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.SourceFileDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusDebuggee.java
index d981092..a799a02 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusDebuggee.java
@@ -30,6 +30,7 @@
 
 public class StatusDebuggee extends SyncDebuggee {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("--> Debuggee: StatusDebuggee...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusTest.java
index 932c947..aa1238d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusTest.java
@@ -42,6 +42,7 @@
     static final String thisCommandName = "ReferenceType.Status command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ReferenceType/StatusDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ReferenceType.StatusDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/JDWPStackFrameTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/JDWPStackFrameTestCase.java
index 772c344..b344392 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/JDWPStackFrameTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/JDWPStackFrameTestCase.java
@@ -83,6 +83,7 @@
         
     }
     
+    @Override
     protected String getDebuggeeClassName() {
         return StackTraceDebuggee.class.getName();
     }
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 8162cfb..e948249 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
@@ -50,6 +50,7 @@
 
     private static final byte NUMBER_OF_FRAMES_TO_POP = 3;
 
+    @Override
     protected String getDebuggeeClassName() {
         return PopFramesDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesDebuggee.java
index 2b501ff..05abceb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesDebuggee.java
@@ -49,6 +49,7 @@
         runDebuggee(PopFramesDebuggee.class);
     }
 
+    @Override
     public void run() {
         logWriter.println("Entering nestledMethod1");
         nestledMethod1();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesTest.java
index 16c94dc..e9d13af 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/PopFramesTest.java
@@ -41,6 +41,7 @@
 
     private String methodToPop = "nestledMethod4";
 
+    @Override
     protected String getDebuggeeClassName() {
         return PopFramesDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/StackTraceDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/StackTraceDebuggee.java
index 17f5376..f5ee283 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/StackTraceDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StackFrame/StackTraceDebuggee.java
@@ -34,6 +34,7 @@
         runDebuggee(StackTraceDebuggee.class);
     }
 
+    @Override
     public void run() {
         String currentThreadName = Thread.currentThread().getName();
         synchronizer.sendMessage(currentThreadName);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StringReference/ValueTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StringReference/ValueTest.java
index 778fbc0..a93fe45 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StringReference/ValueTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/StringReference/ValueTest.java
@@ -26,8 +26,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.StringReference;
 
-import java.io.UnsupportedEncodingException;
-
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
@@ -42,11 +40,12 @@
  */
 public class ValueTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
 
-    protected void checkString(String testString) throws UnsupportedEncodingException {
+    protected void checkString(String testString) {
         logWriter.println("=> Test string: \"" + testString + "\"");
 
         // create new string
@@ -68,7 +67,7 @@
      * StringReference.Value command returns string which is
      * equal to string used for CreateString command.
      */
-    public void testStringReferenceValueTest001() throws UnsupportedEncodingException {
+    public void testStringReferenceValueTest001() {
         logWriter.println("StringReferenceValueTest001 started");
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenDebuggee.java
index 22fc87f..f48eeca 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenDebuggee.java
@@ -50,7 +50,8 @@
     
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
-    
+
+    @Override
     public void run() {
         ThreadGroup thrdGroupParent = new ThreadGroup(PARENT_GROUP);
         ThreadGroup thrdGroupChild = new ThreadGroup(thrdGroupParent, CHILD_GROUP);
@@ -73,7 +74,7 @@
         logWriter.println("DUMP{" + thrdGroupChild + "}");
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -85,6 +86,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(ChildrenDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenTest.java
index 22153e1..964115a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ChildrenTest.java
@@ -40,6 +40,7 @@
 public class ChildrenTest extends JDWPSyncTestCase {
 
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.ChildrenDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameDebuggee.java
index 9f7e1eb..5eb12ef 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameDebuggee.java
@@ -51,7 +51,8 @@
     
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
-    
+
+    @Override
     public void run() {
         ThreadGroup thrdGroupParent = new ThreadGroup(PARENT_GROUP);
         ThreadGroup thrdGroupChild = new ThreadGroup(thrdGroupParent, CHILD_GROUP);
@@ -72,7 +73,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -84,6 +85,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(NameDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameTest.java
index f7812bc..dc9fd58 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/NameTest.java
@@ -39,6 +39,7 @@
  */
 public class NameTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.NameDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ParentTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ParentTest.java
index 9316861..ea65bf9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ParentTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadGroupReference/ParentTest.java
@@ -39,6 +39,7 @@
  */
 public class ParentTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadGroupReference.NameDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorDebuggee.java
index a14c892..dfbf512 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorDebuggee.java
@@ -47,6 +47,7 @@
 
     DebuggeeThread thrd;
 
+    @Override
     public void run() {
         thrd = new DebuggeeThread(TESTED_THREAD, logWriter, synchronizer);
         try {
@@ -73,7 +74,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
 
@@ -86,6 +87,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized (CurrentContendedMonitorDebuggee.waitForFinish) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorTest.java
index 99388bd..b87ef6c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/CurrentContendedMonitorTest.java
@@ -39,6 +39,7 @@
  */
 public class CurrentContendedMonitorTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.CurrentContendedMonitorDebuggee";
     }
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 8a90cce..97ab6c2 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
@@ -18,11 +18,8 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ThreadReference;
 
-import org.apache.harmony.jpda.tests.framework.Breakpoint;
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
-import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
-import org.apache.harmony.jpda.tests.framework.jdwp.ParsedEvent;
 import org.apache.harmony.jpda.tests.framework.jdwp.ReplyPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.Value;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPSyncTestCase;
@@ -34,6 +31,7 @@
 
     static final long EXPECTED_LONG = 100;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ForceEarlyReturnDebuggee";
     }
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 855e305..5f8cad3 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
@@ -31,6 +31,7 @@
 
     static final float EXPECTED_FLOAT = 0.5f;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ForceEarlyReturnDebuggee";
     }
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 a0a84d5..0cc91c2 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
@@ -31,6 +31,7 @@
 
     static final double EXPECTED_DOUBLE = 2.4;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ForceEarlyReturnDebuggee";
     }
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 fd4933f..83cc7ce 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
@@ -30,6 +30,7 @@
 
     static final String thisCommandName = "ThreadReference.ForceEarlyReturn command ";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ForceEarlyReturnDebuggee";
     }
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 82d5fb8..04023b2 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
@@ -32,6 +32,7 @@
 
     static final String testObjSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/TestObject;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ForceEarlyReturnDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnDebuggee.java
index d57cf69..b6795e0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnDebuggee.java
@@ -18,9 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ThreadReference;
 
-import org.apache.harmony.jpda.tests.framework.DebuggeeSynchronizer;
-import org.apache.harmony.jpda.tests.framework.LogWriter;
-import org.apache.harmony.jpda.tests.framework.jdwp.Value;
 import org.apache.harmony.jpda.tests.share.JPDADebuggeeSynchronizer;
 import org.apache.harmony.jpda.tests.share.SyncDebuggee;
 
@@ -65,11 +62,11 @@
 
     static Object waitForFinish = new Object();
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         threadName = synchronizer.receiveMessage();
-        DebuggeeThread thrd = new DebuggeeThread(threadName, logWriter,
-                synchronizer);
+        DebuggeeThread thrd = new DebuggeeThread(threadName);
         synchronized (waitForStart) {
             thrd.start();
             try {
@@ -168,17 +165,11 @@
 
     class DebuggeeThread extends Thread {
 
-        LogWriter logWriter;
-
-        DebuggeeSynchronizer synchronizer;
-
-        public DebuggeeThread(String name, LogWriter logWriter,
-                DebuggeeSynchronizer synchronizer) {
+        public DebuggeeThread(String name) {
             super(name);
-            this.logWriter = logWriter;
-            this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized (ForceEarlyReturnDebuggee.waitForFinish) {
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 d614c84..6838b7c 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
@@ -18,7 +18,6 @@
 
 package org.apache.harmony.jpda.tests.jdwp.ThreadReference;
 
-import org.apache.harmony.jpda.tests.framework.TestErrorException;
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPConstants;
@@ -53,6 +52,7 @@
 
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/ForceEarlyReturnDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ForceEarlyReturnDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FrameCountTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FrameCountTest.java
index 6d03255..084009d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FrameCountTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FrameCountTest.java
@@ -38,6 +38,7 @@
  */
 public class FrameCountTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.FramesDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesDebuggee.java
index f2eafcc..eb47148 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesDebuggee.java
@@ -58,6 +58,7 @@
         depthCount--;
     }
 
+    @Override
     public void run() {
         THREAD_NAME = Thread.currentThread().getName();
         recursiveMethod();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesTest.java
index ee6430a..df70b8d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/FramesTest.java
@@ -44,7 +44,7 @@
     short err;
     long threadID;
 
-    class FrameStruct {
+    static class FrameStruct {
         long frameID;
         Location loc;
         FrameStruct(long frameID, Location loc) {
@@ -53,6 +53,7 @@
         }
     }
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.FramesDebuggee";
     }
@@ -77,15 +78,15 @@
         logWriter.println("==> threadID = " + threadID);
         debuggeeWrapper.vmMirror.suspendThread(threadID);
 
-        Vector allFrames = getFrames(0, -1);
+        Vector<FrameStruct> allFrames = getFrames(0, -1);
         if (err != JDWPConstants.Error.NONE) {
             printErrorAndFail("Unexpected ERROR = " + err
                     + "(" + JDWPConstants.Error.getName(err) + ")");
         }
         String methodName, classSignature;
         int i = 0;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
             logWriter.println("\t" + i + ". frameID=" + frame.frameID
@@ -131,15 +132,15 @@
         logWriter.println("==> threadID = " + threadID);
         debuggeeWrapper.vmMirror.suspendThread(threadID);
 
-        Vector allFrames = getFrames(0, -1);
+        Vector<FrameStruct> allFrames = getFrames(0, -1);
         if (err != JDWPConstants.Error.NONE) {
             printErrorAndFail("Unexpected ERROR = " + err
                     + "(" + JDWPConstants.Error.getName(err) + ")");
         }
         String methodName, classSignature;
         int i = 0;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
             logWriter.println("\t" + i + ". frameID=" + frame.frameID
@@ -186,15 +187,15 @@
         logWriter.println("==> threadID = " + threadID);
         debuggeeWrapper.vmMirror.suspendThread(threadID);
 
-        Vector allFrames = getFrames(0, -1);
+        Vector<FrameStruct> allFrames = getFrames(0, -1);
         if (err != JDWPConstants.Error.NONE) {
             printErrorAndFail("Unexpected ERROR = " + err
                     + "(" + JDWPConstants.Error.getName(err) + ")");
         }
         String methodName, classSignature;
         int i = 0;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
                logWriter.println("\t" + i + ". frameID=" + frame.frameID
@@ -246,7 +247,7 @@
         logWriter.println("==> threadID = " + threadID);
         debuggeeWrapper.vmMirror.suspendThread(threadID);
 
-        Vector allFrames = getFrames(0, -1);
+        Vector<FrameStruct> allFrames = getFrames(0, -1);
         if (err != JDWPConstants.Error.NONE) {
             printErrorAndFail("Unexpected ERROR = " + err
                     + "(" + JDWPConstants.Error.getName(err) + ")");
@@ -254,8 +255,8 @@
         String methodName, classSignature;
         int frameNumber = -1;
         int i = 0;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
             if (frameNumber < 0 && FramesDebuggee.METHOD_NAME.equals(methodName)) {
@@ -280,8 +281,8 @@
         int methodCount = 0;
         String unexpectedMethods = null;
         String depthError = null;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
             logWriter.println("\t" + i + ". frameID=" + frame.frameID
@@ -341,7 +342,7 @@
         logWriter.println("==> threadID = " + threadID);
         debuggeeWrapper.vmMirror.suspendThread(threadID);
 
-        Vector allFrames = getFrames(0, -1);
+        Vector<FrameStruct> allFrames = getFrames(0, -1);
         if (err != JDWPConstants.Error.NONE) {
             printErrorAndFail("Unexpected ERROR = " + err
                     + "(" + JDWPConstants.Error.getName(err) + ")");
@@ -349,8 +350,8 @@
         String methodName, classSignature;
         int frameNumber = -1;
         int i = 0;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
             if (frameNumber < 0 && FramesDebuggee.METHOD_NAME.equals(methodName)) {
@@ -377,8 +378,8 @@
         boolean testCondition;
         String unexpectedMethods = null;
         String depthError = null;
-        for (Enumeration e = allFrames.elements(); e.hasMoreElements(); i++) {
-            FrameStruct frame = (FrameStruct )e.nextElement();
+        for (Enumeration<FrameStruct> e = allFrames.elements(); e.hasMoreElements(); i++) {
+            FrameStruct frame = e.nextElement();
             methodName = getMethodName(frame.loc.classID, frame.loc.methodID);
             classSignature = getClassSignature(frame.loc.classID);
             logWriter.println("\t" + i + ". frameID=" + frame.frameID
@@ -418,7 +419,7 @@
         }
     }
 
-    private Vector getFrames(int startFrame, int length) {
+    private Vector<FrameStruct> getFrames(int startFrame, int length) {
 
         Vector<FrameStruct> frames = new Vector<FrameStruct>();
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptDebuggee.java
index 5c95130..b94a1e0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptDebuggee.java
@@ -45,7 +45,8 @@
     static Object waitForStart = new Object();
     static Object waitForInterrupt = new Object();
     static Object waitForFinish = new Object();
-    
+
+    @Override
     public void run() {
         DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
                 logWriter, synchronizer); 
@@ -64,7 +65,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -76,6 +77,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(InterruptDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptTest.java
index 6407363..ce38ddb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/InterruptTest.java
@@ -41,6 +41,7 @@
     static String waitForString = "java.lang.InterruptedException";
     boolean isReceived = false;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.InterruptDebuggee";
     }
@@ -95,6 +96,7 @@
 
     class RecvThread extends Thread {
 
+        @Override
         public void run() {
             logWriter.println("wait for " + waitForString);
             isReceived = synchronizer.receiveMessage(waitForString);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/NameTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/NameTest.java
index 92a12bf..78fce70 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/NameTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/NameTest.java
@@ -37,6 +37,7 @@
  */
 public class NameTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsDebuggee.java
index 3d8bdbd..2249d04 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsDebuggee.java
@@ -43,7 +43,8 @@
     
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
-    
+
+    @Override
     public void run() {
         DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
                 logWriter, synchronizer); 
@@ -62,7 +63,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -74,6 +75,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(OwnedMonitorsDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java
index efdf0be..209579c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoDebuggee.java
@@ -38,6 +38,7 @@
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
 
+    @Override
     public void run() {
         DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
                 logWriter, synchronizer);
@@ -56,7 +57,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -71,6 +72,7 @@
         // Deliberately make several stack frames with known monitor states.
 
         // 1. No monitors held in the outermost frame.
+        @Override
         public void run() {
             run1();
         }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java
index 23278df..c0b7fab 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsStackDepthInfoTest.java
@@ -33,6 +33,7 @@
 
     static final String thisCommandName = "ThreadReference.OwnedMonitorsStackDepthInfo command ";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.OwnedMonitorsStackDepthInfoDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsTest.java
index 90f05ce..b1e20a6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/OwnedMonitorsTest.java
@@ -39,6 +39,7 @@
  */
 public class OwnedMonitorsTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.OwnedMonitorsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeDebuggee.java
index 4e52a0d..3ed3410 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeDebuggee.java
@@ -61,6 +61,7 @@
         }
     }
     
+    @Override
     public void run() {
         
         logWriter.println("--> ResumeDebuggee: START...");
@@ -129,6 +130,7 @@
         threadKind = threadNumber % 3;
     }
 
+    @Override
     public void run() {
         ResumeDebuggee parent = ResumeDebuggee.resumeDebuggeeThis;
         synchronized (parent) { 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeTest.java
index 7e82f1e..9c9ec1c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeTest.java
@@ -43,6 +43,7 @@
     static final String debuggeeSignature =
             "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/ResumeDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ResumeDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Debuggee.java
index ab58d5d..bbb5aad 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Debuggee.java
@@ -47,6 +47,7 @@
         }
     }
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: Status002Debuggee: START");
         status002DebuggeeThis = this;
@@ -90,6 +91,7 @@
         super(name);
     }
 
+    @Override
     public void run() {
         Status002Debuggee parent = Status002Debuggee.status002DebuggeeThis;
         parent.logWriter.println("--> Thread: " + getName() +  ": started...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Test.java
index 16f7739..e9ab451 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status002Test.java
@@ -41,6 +41,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.Status002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Debuggee.java
index ebc7a6f..7833a6d 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Debuggee.java
@@ -47,6 +47,7 @@
         }
     }
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: Status003Debuggee: START");
         status003DebuggeeThis = this;
@@ -90,6 +91,7 @@
         super(name);
     }
 
+    @Override
     public void run() {
         Status003Debuggee parent = Status003Debuggee.status003DebuggeeThis;
         parent.logWriter.println("--> Thread: " + getName() +  ": started...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Test.java
index 8cdae61..f841ef7 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status003Test.java
@@ -41,6 +41,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.Status003Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Debuggee.java
index ae1c70e..7bccc01 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Debuggee.java
@@ -47,6 +47,7 @@
         }
     }
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: Status004Debuggee: START");
         status004DebuggeeThis = this;
@@ -90,6 +91,7 @@
         super(name);
     }
 
+    @Override
     public void run() {
         Status004Debuggee parent = Status004Debuggee.status004DebuggeeThis;
         parent.logWriter.println("--> Thread: " + getName() +  ": started...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Test.java
index d9597ee..b501861 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status004Test.java
@@ -41,6 +41,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.Status004Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Debuggee.java
index cc00f92..a79ecf9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Debuggee.java
@@ -49,6 +49,7 @@
         }
     }
 
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: Status005Debuggee: START");
         status005DebuggeeThis = this;
@@ -93,6 +94,7 @@
         super(name);
     }
 
+    @Override
     public void run() {
         Status005Debuggee parent = Status005Debuggee.status005DebuggeeThis;
         parent.logWriter.println("--> Thread: " + getName() +  ": started...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Test.java
index 3a0d759..f9991ad 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status005Test.java
@@ -41,6 +41,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.Status005Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Debuggee.java
index 7b405a4..5eb0ebf 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Debuggee.java
@@ -46,6 +46,7 @@
         }
     }
     
+    @Override
     public void run() {
         logWriter.println("--> Debuggee: Status006Debuggee: START");
         status006DebuggeeThis = this;
@@ -84,6 +85,7 @@
         super(name);
     }
 
+    @Override
     public void run() {
         Status006Debuggee parent = Status006Debuggee.status006DebuggeeThis;
         parent.logWriter.println("--> Thread: " + getName() +  ": started...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Test.java
index fb0b830..c07491c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/Status006Test.java
@@ -41,6 +41,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.Status006Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusDebuggee.java
index e005baf..62e195a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusDebuggee.java
@@ -41,7 +41,8 @@
     
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
-    
+
+    @Override
     public void run() {
         DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
                 logWriter, synchronizer); 
@@ -60,7 +61,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -72,6 +73,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(StatusDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusTest.java
index 278713e..abcaa5e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StatusTest.java
@@ -38,6 +38,7 @@
  */
 public class StatusTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.StatusDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopDebuggee.java
index 5dfd408..f0be512 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopDebuggee.java
@@ -68,7 +68,8 @@
     public static NullPointerException exception = new NullPointerException(); 
     
     static Object waitForStart = new Object();
-    
+
+    @Override
     public void run() {
         logWriter.println("StopDebuggee: started");
         DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
@@ -93,7 +94,7 @@
         logWriter.println("StopDebuggee: finishing...");
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -105,6 +106,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
             logWriter.println(getName() +  ": started");
             synchronized(waitForStart){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopTest.java
index 0fd0351..49ec7c6 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/StopTest.java
@@ -40,6 +40,7 @@
 
     static String SIGNATURE = "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/StopDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.StopDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountDebuggee.java
index d58cfac..7b75f34 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountDebuggee.java
@@ -61,6 +61,7 @@
         }
     }
     
+    @Override
     public void run() {
         
         logWriter.println("--> SuspendCountDebuggee: START...");
@@ -134,6 +135,7 @@
         threadKind = threadNumber % 3;
     }
 
+    @Override
     public void run() {
         SuspendCountDebuggee parent = SuspendCountDebuggee.suspendCountDebuggeeThis;
         synchronized (parent) { 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountTest.java
index 75965d8..59a9c1e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountTest.java
@@ -44,6 +44,7 @@
     static final String debuggeeSignature =
             "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendCountDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.SuspendCountDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendDebuggee.java
index 86a48db..0ced69a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendDebuggee.java
@@ -59,6 +59,7 @@
         }
     }
     
+    @Override
     public void run() {
         
         logWriter.println("--> SuspendDebuggee: START...");
@@ -124,6 +125,7 @@
         threadKind = threadNumber % 3;
     }
 
+    @Override
     public void run() {
         SuspendDebuggee parent = SuspendDebuggee.suspendDebuggeeThis;
         synchronized (parent) { 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendTest.java
index 21de51c..c0fbe22 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/SuspendTest.java
@@ -42,6 +42,7 @@
     static final int testStatusPassed = 0;
     static final int testStatusFailed = -1;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.SuspendDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Debuggee.java
index 0ce836a..7f47209 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Debuggee.java
@@ -64,6 +64,7 @@
         }
     }
     
+    @Override
     public void run() {
         
         logWriter.println("--> ThreadGroup002Debuggee: START...");
@@ -162,6 +163,7 @@
         threadKind = threadNumber % 3;
     }
 
+    @Override
     public void run() {
         ThreadGroup002Debuggee parent = ThreadGroup002Debuggee.ThreadGroup002DebuggeeThis;
         synchronized (parent) { 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Test.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Test.java
index a66a2b4..fd4e7d4 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Test.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Test.java
@@ -43,6 +43,7 @@
     static final String debuggeeSignature =
             "Lorg/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroup002Debuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ThreadGroup002Debuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupDebuggee.java
index c675bf2..5c39ae9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupDebuggee.java
@@ -65,7 +65,8 @@
             }
         }
     }
-    
+
+    @Override
     public void run() {
         ThreadGroup thrdGroup = new ThreadGroup(TESTED_GROUP);
         DebuggeeThread thrd = new DebuggeeThread(thrdGroup, TESTED_THREAD,
@@ -93,7 +94,7 @@
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -105,6 +106,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(ThreadGroupDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupTest.java
index 7028465..e695e4b 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/ThreadReference/ThreadGroupTest.java
@@ -37,6 +37,7 @@
  */
 public class ThreadGroupTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.ThreadReference.ThreadGroupDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesTest.java
index cccb386..d4ec585 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesTest.java
@@ -38,6 +38,7 @@
  */
 public class AllClassesTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesWithGenericTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesWithGenericTest.java
index 20f99b9..985017c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesWithGenericTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllClassesWithGenericTest.java
@@ -38,6 +38,7 @@
  */
 public class AllClassesWithGenericTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsDebuggee.java
index 66049be..41690ee 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsDebuggee.java
@@ -59,6 +59,7 @@
 
     static Object waitForStart = new Object();
 
+    @Override
     public void run() {
         DebuggeeThread thrd = new DebuggeeThread(TESTED_THREAD,
                 logWriter, synchronizer); 
@@ -83,7 +84,7 @@
         synchronizer.receiveMessage(JPDADebuggeeSynchronizer.SGNL_CONTINUE);
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -95,6 +96,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             logWriter.println(getName() +  ": started...");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsTest.java
index 239d8e3..b383b26 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/AllThreadsTest.java
@@ -38,6 +38,7 @@
  */
 public class AllThreadsTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.AllThreadsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java
index 57b7506..1cfefb0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesNewTest.java
@@ -72,6 +72,7 @@
             {"reserved32", null}
     };
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesTest.java
index cdbc834..c54b892 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CapabilitiesTest.java
@@ -37,6 +37,7 @@
  */
 public class CapabilitiesTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassPathsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassPathsTest.java
index 3a9f93e..5f7b893 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassPathsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassPathsTest.java
@@ -40,6 +40,7 @@
  */
 public class ClassPathsTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassesBySignatureTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassesBySignatureTest.java
index c56ff37..f0eacc9 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassesBySignatureTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ClassesBySignatureTest.java
@@ -40,6 +40,7 @@
 
     static final String SIGNATURE001 = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CreateStringTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CreateStringTest.java
index 150e4bf..f3453b4 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CreateStringTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/CreateStringTest.java
@@ -39,6 +39,7 @@
 
     static final String CHECKED_STRING = "Hello World!";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java
index 7acc3a5..c52fccc 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeDuringInvokeDebuggee.java
@@ -38,6 +38,7 @@
             super("DebuggeeThread");
         }
 
+        @Override
         public void run() {
             breakpointMethod();
         }
@@ -52,6 +53,7 @@
     /**
      * The method called by the DebuggeeThread through JDWP.
      */
+    @SuppressWarnings("unused")
     private void invokeMethodWithSynchronization() {
         logWriter.println("#START invokeMethodWithSynchronization");
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeObjectsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeObjectsTest.java
index 06b85cc..789dc1c 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeObjectsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeObjectsTest.java
@@ -40,6 +40,7 @@
 
     static final String CHECKED_STRING = "Hello World!";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeTest.java
index 26e2357..63ae997 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/DisposeTest.java
@@ -38,6 +38,7 @@
  */
 public class DisposeTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java
index d21ef57..a15f6cb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ExitTest.java
@@ -28,7 +28,6 @@
 import org.apache.harmony.jpda.tests.framework.jdwp.CommandPacket;
 import org.apache.harmony.jpda.tests.framework.jdwp.JDWPCommands;
 import org.apache.harmony.jpda.tests.jdwp.share.JDWPTestCase;
-import org.apache.harmony.jpda.tests.jdwp.share.JDWPUnitDebuggeeWrapper;
 
 
 /**
@@ -40,6 +39,7 @@
      */
     private static final int EXIT_CODE = 99;
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.SimpleHelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsDebuggee.java
index 4901108..d64d543 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsDebuggee.java
@@ -42,6 +42,7 @@
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
@@ -66,7 +67,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -78,6 +79,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(HoldEventsDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsTest.java
index 8392584..bdf3c26 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/HoldEventsTest.java
@@ -40,6 +40,7 @@
  */
 public class HoldEventsTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.HoldEventsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/IDSizesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/IDSizesTest.java
index abfefc1..f4826fe 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/IDSizesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/IDSizesTest.java
@@ -36,6 +36,7 @@
  */
 public class IDSizesTest extends JDWPTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.SimpleHelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsDebuggee.java
index 2ff2d5c..2733df4 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsDebuggee.java
@@ -41,8 +41,8 @@
     @Override
 	public void run() {
 		//Objects reachable for garbage collection purpose
-		ArrayList reachableObjs = new ArrayList();
-        
+		ArrayList<Object> reachableObjs = new ArrayList<Object>();
+
 		for(int i = 0; i < reachableObjNumOfClass1; i++) {
 			reachableObjs.add(new MockClass1(true));
 		}
@@ -70,16 +70,19 @@
 }
 
 class MockClass1 {
-	private boolean isReachable;
-	MockClass1(boolean isReachable){
-		this.isReachable = isReachable;
-	}
+    @SuppressWarnings("unused")
+    private boolean isReachable;
+
+    MockClass1(boolean isReachable) {
+        this.isReachable = isReachable;
+    }
 }
 
-class MockClass2{
+class MockClass2 {
+    @SuppressWarnings("unused")
     private boolean isReachable;
-    
-    MockClass2(boolean isReachable){
+
+    MockClass2(boolean isReachable) {
         this.isReachable = isReachable;
-    }    
+    }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsTest.java
index cc4ffe4..952a5fb 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsTest.java
@@ -40,6 +40,7 @@
 
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/VirtualMachine/InstanceCountsDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.InstanceCountsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesDebuggee.java
index 457b191..fe1f747 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesDebuggee.java
@@ -33,6 +33,7 @@
     static RedefineClassesDebuggee redefineClassesDebuggee;
     static RedefineClass_Debuggee redefineClass_DebuggeeObject = null;
 
+    @Override
     public void run() {
         redefineClassesDebuggee = this;
         
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesTest.java
index 957c71b..a0bc4ce 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClassesTest.java
@@ -48,6 +48,7 @@
         = "Lorg/apache/harmony/jpda/tests/jdwp/VirtualMachine/RedefineClass_Debuggee;";
     static final String byteCodeToRedefineFile = "RedefineByteCode_Debuggee001";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.RedefineClassesDebuggee";
     }
@@ -63,7 +64,7 @@
         String byteCodeFileName = null;
         String classPaths = System.getProperty("java.class.path");
         int begPos = 0;
-        int classPathsLength = classPaths.length();;
+        int classPathsLength = classPaths.length();
 
         for (int i = 0; i <= classPathsLength; i++) {
             if ( i == classPathsLength ) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsDebuggee.java
index 4dccfb6..14ef584 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsDebuggee.java
@@ -42,6 +42,7 @@
     static Object waitForStart = new Object();
     static Object waitForFinish = new Object();
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
 
@@ -66,7 +67,7 @@
         }
     }
 
-    class DebuggeeThread extends Thread {
+    static class DebuggeeThread extends Thread {
 
         LogWriter logWriter;
         DebuggeeSynchronizer synchronizer;
@@ -78,6 +79,7 @@
             this.synchronizer = synchronizer;
         }
 
+        @Override
         public void run() {
 
             synchronized(ReleaseEventsDebuggee.waitForFinish){
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsTest.java
index 241b973..5c4bc4f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ReleaseEventsTest.java
@@ -52,6 +52,7 @@
  */
 public class ReleaseEventsTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.VirtualMachine.ReleaseEventsDebuggee";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeDebuggee.java
index 41d6bc1..81af23f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeDebuggee.java
@@ -61,6 +61,7 @@
         }
     }
     
+    @Override
     public void run() {
         
         logWriter.println("--> ResumeDebuggee: START...");
@@ -130,6 +131,7 @@
         threadKind = threadNumber % 3;
     }
 
+    @Override
     public void run() {
         ResumeDebuggee parent = ResumeDebuggee.ResumeDebuggeeThis;
         synchronized (parent) { 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeTest.java
index 61aeec4..813b934 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeTest.java
@@ -44,6 +44,7 @@
     static final String debuggeeSignature =
         "Lorg/apache/harmony/jpda/tests/jdwp/VirtualMachine/ResumeDebuggee;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return ResumeDebuggee.class.getName();
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SetDefaultStratumTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SetDefaultStratumTest.java
index 723ff05..d78aa6f 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SetDefaultStratumTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SetDefaultStratumTest.java
@@ -43,6 +43,7 @@
     static final String thisCommandName = "VirtualMachine::SetDefaultStratum command";
     static final String debuggeeSignature = "Lorg/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld;";
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SuspendTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SuspendTest.java
index 26882c2..045f78e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SuspendTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/SuspendTest.java
@@ -38,6 +38,7 @@
  */
 public class SuspendTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/TopLevelThreadGroupsTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/TopLevelThreadGroupsTest.java
index eda5a97..06fac93 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/TopLevelThreadGroupsTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/TopLevelThreadGroupsTest.java
@@ -37,6 +37,7 @@
  */
 public class TopLevelThreadGroupsTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/VersionTest.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/VersionTest.java
index 78fd09a..41e2c73 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/VersionTest.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/VirtualMachine/VersionTest.java
@@ -37,6 +37,7 @@
  */
 public class VersionTest extends JDWPSyncTestCase {
 
+    @Override
     protected String getDebuggeeClassName() {
         return "org.apache.harmony.jpda.tests.jdwp.share.debuggee.HelloWorld";
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodSuspendedTwiceTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodSuspendedTwiceTestCase.java
index 5cc5057..b1fc0e0 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodSuspendedTwiceTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPInvokeMethodSuspendedTwiceTestCase.java
@@ -126,6 +126,8 @@
         ReplyPacket anotherInvokeMethodReply =
                 debuggeeWrapper.vmMirror.performCommand(anotherInvokeMethodCommand);
         // Note: the RI returns INVALID_THREAD but ALREADY_INVOKING is more explicit.
+        assertTrue("Another invoke should return an error",
+                anotherInvokeMethodReply.getErrorCode() != JDWPConstants.Error.NONE);
 //        checkReplyPacket(anotherInvokeMethodReply, "Invalid error code",
 //                JDWPConstants.Error.ALREADY_INVOKING);
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPManualDebuggeeWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPManualDebuggeeWrapper.java
index b80d692..c3671f3 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPManualDebuggeeWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPManualDebuggeeWrapper.java
@@ -76,6 +76,7 @@
      * @throws IOException
      *             if user does not confirm process launching
      */
+    @Override
     protected Process launchProcess(String cmdLine) throws IOException {
         getLogWriter().println(
                 "\n>>> Start debuggee VM with this command line:\n" + cmdLine);
@@ -93,6 +94,7 @@
      * @throws IOException
      *             if user does not confirm process exit
      */
+    @Override
     protected void WaitForProcessExit(Process process) throws IOException {
         getLogWriter().println(
                 "\n>>> Confirm that debuggee VM has exited [yes/no]:");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPRawTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPRawTestCase.java
index 9daf24f..bd1fe43 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPRawTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPRawTestCase.java
@@ -114,6 +114,7 @@
      * Overrides inherited JUnit method to provide initialization and invocation
      * of internalSetUp() and internalTearDown() methods.
      */
+    @Override
     protected void setUp() throws Exception {
         super.setUp();
 
@@ -148,6 +149,7 @@
      * Overrides inherited JUnit method to provide cleanup and invocation of
      * internalTearDown() method.
      */
+    @Override
     protected void tearDown() throws Exception {
         logWriter.println("----------------------------------------");
         internalTearDown();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java
index 5caf5c6..c36d7ac 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPSyncTestCase.java
@@ -40,6 +40,7 @@
     /**
      * This method is invoked right before starting debuggee VM.
      */
+    @Override
     protected void beforeDebuggeeStart() {
         synchronizer = createSynchronizer();
         int port = synchronizer.bindServer();
@@ -58,6 +59,7 @@
      * Overrides inherited method to resume debuggee VM and then to establish
      * sync connection.
      */
+    @Override
     protected void internalSetUp() throws Exception {
         super.internalSetUp();
 
@@ -71,6 +73,7 @@
     /**
      * Overrides inherited method to close sync connection upon exit.
      */
+    @Override
     protected void internalTearDown() {
         if (synchronizer != null) {
             if (null != finalSyncMessage) {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java
index 47d2a2b..cd48e01 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPTestCase.java
@@ -52,6 +52,7 @@
      * Overrides inherited method to launch one debuggee VM, establish JDWP
      * connection, and wait for VM_START event.
      */
+    @Override
     protected void internalSetUp() throws Exception {
         super.internalSetUp();
 
@@ -112,6 +113,7 @@
      * Overrides inherited method to stop started debuggee VM and close all
      * connections.
      */
+    @Override
     protected void internalTearDown() {
         if (debuggeeWrapper != null) {
             debuggeeWrapper.stop();
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeProcessWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeProcessWrapper.java
index ecd61a9..6910319 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeProcessWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeProcessWrapper.java
@@ -151,12 +151,10 @@
     /**
      * Splits command line into arguments preserving spaces in quoted arguments
      * either with single and double quotes (not prefixed by '\').
-     * 
-     * @param cmdLine
+     *
+     * @param cmd
      *            command line
      * @return associated Process object or null if not available
-     * @throws IOException
-     *             if error occurred in launching process
      */
 /*
     public String[] splitCommandLine(String cmd) {
@@ -262,7 +260,7 @@
     	logWriter.println("Splitted command line: " + argv);
         int size = argv.size();
         String args[] = new String[size];
-        return (String[])argv.toArray((String[])args);
+        return argv.toArray(args);
 	}
 
     /**
@@ -310,6 +308,7 @@
      * Separate thread for waiting for process exit for specified timeout.
      */
     class ProcessWaiter extends Thread {
+        @Override
         public void run() {
             try {
                 process.waitFor();
@@ -319,9 +318,11 @@
         }
     }
 
+    @Override
     public void start() {
     }
 
+    @Override
     public void stop() {
     }
 }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java
index 629fb4e..5eef3ec 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/JDWPUnitDebuggeeWrapper.java
@@ -96,6 +96,7 @@
      * Launches new debuggee process according to test run options and
      * establishes JDWP connection.
      */
+    @Override
     public void start() {
         String cmdLine = settings.getDebuggeeJavaPath() + " -cp \""
                 + settings.getDebuggeeClassPath() + "\" -agentlib:"
@@ -121,6 +122,7 @@
      * Closes all connections, stops redirectors, and waits for debuggee process
      * exit for default timeout.
      */
+    @Override
     public void stop() {
         disposeConnection();
 
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld.java
index 5050cf8..3d4d6ec 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/HelloWorld.java
@@ -33,6 +33,7 @@
  */
 public class HelloWorld extends SyncDebuggee implements HelloWorldInterface {
 
+    @Override
     public void run() {
         synchronizer.sendMessage(JPDADebuggeeSynchronizer.SGNL_READY);
         logWriter.println("Hello World");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee.java
index 2473d35..ab3ba3e 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/InvokeMethodDebuggee.java
@@ -65,6 +65,7 @@
     static testClass[] checkClassArray = {new testClass()};
     static testClass[][] checkClassArray2 = {{new testClass()}, {new testClass()}};
 
+    @SuppressWarnings("unused")
     public static String testMethod3(int i, int[] ai, int[][] aai,
             String s, String[] as, String[][] aas,
             testClass tc, testClass[] atc, testClass[][] aatc) {
@@ -75,8 +76,9 @@
         logWriter.println("InvokeMethodDebuggee.execMethod()");
     }
 
+    @Override
     public void run() {
-        Class c = null;
+        Class<?> c = null;
         try {
             c = Class.forName("org.apache.harmony.jpda.tests.jdwp.share.debuggee.InvokeMethodDebuggee$testClass1");
             c = Class.forName("org.apache.harmony.jpda.tests.jdwp.share.debuggee.testClass2");
@@ -122,6 +124,7 @@
         super(false);
     }
 
+    @Override
     public int testMethod3(boolean needThrow) throws Throwable {
         if (needThrow) {
             throw new Throwable("test exception");
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/SimpleHelloWorld.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/SimpleHelloWorld.java
index fa59a84..8fa2987 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/SimpleHelloWorld.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/jdwp/share/debuggee/SimpleHelloWorld.java
@@ -32,6 +32,7 @@
  */
 public class SimpleHelloWorld extends Debuggee {
 
+    @Override
     public void run() {
         logWriter.println("Hello World");
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/Debuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/Debuggee.java
index a87e3f8..0c18e20 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/Debuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/Debuggee.java
@@ -69,10 +69,10 @@
      * @param debuggeeClass
      *            debuggee's class
      */
-    public static void runDebuggee(Class debuggeeClass) {
+    public static void runDebuggee(Class<? extends Debuggee> debuggeeClass) {
         Debuggee debuggee = null;
         try {
-            debuggee = (Debuggee) debuggeeClass.newInstance();
+            debuggee = debuggeeClass.newInstance();
         } catch (Exception e) {
             throw new TestErrorException("Debuggee can not be started: "
                     + debuggeeClass.getName(), e);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDADebuggeeSynchronizer.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDADebuggeeSynchronizer.java
index 4ebf684..09caf4a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDADebuggeeSynchronizer.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDADebuggeeSynchronizer.java
@@ -83,6 +83,7 @@
      * @param message
      *            a message to be sent.
      */
+    @Override
     public synchronized void sendMessage(String message) {
         try {
             out.writeUTF(message);
@@ -103,6 +104,7 @@
      *         <code>message</code> otherwise - <code>false</code>.
      * 
      */
+    @Override
     public synchronized boolean receiveMessage(String message) {
         String msg;
         try {
@@ -123,6 +125,7 @@
      * 
      * @return received string or null if connection was closed.
      */
+    @Override
     public synchronized String receiveMessage() {
         String msg;
         try {
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDALogWriter.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDALogWriter.java
index 75b1d3e..09e3144 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDALogWriter.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDALogWriter.java
@@ -92,6 +92,7 @@
      * @param prefix
      *            to be set
      */
+    @Override
     public void setPrefix(String prefix) {
         super.setPrefix(prefix);
         if (prefix == null || prefix.length() <= 0) {
@@ -107,6 +108,7 @@
      * @param message
      *            error message to be printed
      */
+    @Override
     public void printError(String message) {
         if (null == errorMessage) {
             errorMessage = message;
@@ -122,6 +124,7 @@
      * @param throwable
      *            exception to be printed
      */
+    @Override
     public void printError(String message, Throwable throwable) {
         if (null == errorMessage) {
             errorMessage = message;
@@ -135,6 +138,7 @@
      * @param throwable
      *            exception to be printed
      */
+    @Override
     public void printError(Throwable throwable) {
         logStream.printStackTrace(null, throwable);
     }
@@ -145,6 +149,7 @@
      * @param message
      *            to be printed
      */
+    @Override
     public void print(String message) {
         if (enablePrint) {
             logStream.print(printPrefix + message);
@@ -157,6 +162,7 @@
      * @param message
      *            to be printed
      */
+    @Override
     public void println(String message) {
         if (enablePrint) {
             logStream.println(printPrefix + message);
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDATestOptions.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDATestOptions.java
index fb6c8d9..adf773a 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDATestOptions.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/JPDATestOptions.java
@@ -44,6 +44,7 @@
      * 
      * @return option "jpda.settings.debuggeeLaunchKind" or "auto" by default.
      */
+    @Override
     public String getDebuggeeLaunchKind() {
         return System.getProperty("jpda.settings.debuggeeLaunchKind", "auto");
     }
diff --git a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/SyncDebuggee.java b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/SyncDebuggee.java
index ac5b25b..822a741 100644
--- a/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/SyncDebuggee.java
+++ b/jdwp/src/test/java/org/apache/harmony/jpda/tests/share/SyncDebuggee.java
@@ -39,6 +39,7 @@
     /**
      * Initializes the synchronization channel.
      */
+    @Override
     public void onStart() {
         super.onStart();
         synchronizer = createSynchronizer();
@@ -55,6 +56,7 @@
     /**
      * Terminates the synchronization channel.
      */
+    @Override
     public void onFinish() {
         if (synchronizer != null) {
             synchronizer.stop();
