refactor
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java
index 913e960..e16fe23 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/connect/SocketTransportImpl.java
@@ -46,6 +46,7 @@
 	 * Listens for connections initiated by target VMs. 
 	 */
 	public void listen(int port) throws IOException {
+		closeListen();
 		fServerSocket = new ServerSocket(port);
 	}
 	
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFieldID.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFieldID.java
index 8201696..04495c9 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFieldID.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFieldID.java
@@ -21,14 +21,6 @@
 	}
 	
 	/**
-	 * @return Returns true if two IDs refer to the same entity in the target VM.
-	 * @see java.lang.Object#equals(Object)
-	 */
-	public boolean equals(Object object) {
-		return object != null && object.getClass().equals(this.getClass()) && fValue == ((JdwpFieldID)object).fValue;
-	}
-	
-	/**
 	 * @return Returns VM specific size of ID.
 	 */
 	public int getSize() {
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFrameID.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFrameID.java
index bad34b2..746b6ac 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFrameID.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpFrameID.java
@@ -19,15 +19,7 @@
 	public JdwpFrameID(VirtualMachineImpl vmImpl) {
 		super(vmImpl);
 	}
-	
-	/**
-	 * @return Returns true if two IDs refer to the same entity in the target VM.
-	 * @see java.lang.Object#equals(Object)
-	 */
-	public boolean equals(Object object) {
-		return object != null && object.getClass().equals(this.getClass()) && fValue == ((JdwpFrameID)object).fValue;
-	}
-	
+		
 	/**
 	 * @return Returns VM specific size of ID.
 	 */
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpID.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpID.java
index e3d3567..8a3dc44 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpID.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpID.java
@@ -67,7 +67,9 @@
 	 * @return Returns true if two IDs refer to the same entity in the target VM.
 	 * @see java.lang.Object#equals(Object)
 	 */
-	public abstract boolean equals(Object ID);
+	public boolean equals(Object object) {
+		return object != null && object.getClass().equals(this.getClass()) && fValue == ((JdwpID)object).fValue;
+	}
 	
 	/**
 	 * @return Returns a has code for this object.
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpMethodID.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpMethodID.java
index 9674087..cc46f58 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpMethodID.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpMethodID.java
@@ -21,14 +21,6 @@
 	}
 	
 	/**
-	 * @return Returns true if two IDs refer to the same entity in the target VM.
-	 * @see java.lang.Object#equals(Object)
-	 */
-	public boolean equals(Object object) {
-		return object != null && object.getClass().equals(this.getClass()) && fValue == ((JdwpMethodID)object).fValue;
-	}
-	
-	/**
 	 * @return Returns VM specific size of ID.
 	 */
 	public int getSize() {
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpObjectID.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpObjectID.java
index f4bc7db..a77102a 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpObjectID.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpObjectID.java
@@ -21,14 +21,6 @@
 	}
 	
 	/**
-	 * @return Returns true if two IDs refer to the same entity in the target VM.
-	 * @see java.lang.Object#equals(Object)
-	 */
-	public boolean equals(Object object) {
-		return object != null && object.getClass().equals(this.getClass()) && fValue == ((JdwpObjectID)object).fValue;
-	}
-	
-	/**
 	 * @return Returns VM specific size of ID.
 	 */
 	public int getSize() {
diff --git a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpReferenceTypeID.java b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpReferenceTypeID.java
index 09cbcfb..62a09cc 100644
--- a/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpReferenceTypeID.java
+++ b/org.eclipse.jdt.debug/jdi/org/eclipse/jdi/internal/jdwp/JdwpReferenceTypeID.java
@@ -21,14 +21,6 @@
 	}
 	
 	/**
-	 * @return Returns true if two IDs refer to the same entity in the target VM.
-	 * @see java.lang.Object#equals(Object)
-	 */
-	public boolean equals(Object object) {
-		return object != null && object.getClass().equals(this.getClass()) && fValue == ((JdwpReferenceTypeID)object).fValue;
-	}
-	
-	/**
 	 * @return Returns VM specific size of ID.
 	 */
 	public int getSize() {