diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.classpath b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.classpath
index 64c5e31..eca7bdb 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.classpath
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.core.prefs
index 016a4aa..1a53062 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.core.prefs
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.core.prefs
@@ -1,15 +1,14 @@
-#Sat Sep 24 21:54:32 CEST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.ui.prefs
index ab3baa5..f27f47d 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.ui.prefs
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/.settings/org.eclipse.jdt.ui.prefs
@@ -1,4 +1,3 @@
-#Tue Apr 29 16:19:14 CEST 2008
 eclipse.preferences.version=1
 editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
 formatter_profile=org.eclipse.jdt.ui.default.eclipse_profile
@@ -7,22 +6,29 @@
 sp_cleanup.add_generated_serial_version_id=false
 sp_cleanup.add_missing_annotations=true
 sp_cleanup.add_missing_deprecated_annotations=true
+sp_cleanup.add_missing_methods=false
 sp_cleanup.add_missing_nls_tags=false
 sp_cleanup.add_missing_override_annotations=true
+sp_cleanup.add_missing_override_annotations_interface_methods=true
 sp_cleanup.add_serial_version_id=false
 sp_cleanup.always_use_blocks=true
 sp_cleanup.always_use_parentheses_in_expressions=false
 sp_cleanup.always_use_this_for_non_static_field_access=false
 sp_cleanup.always_use_this_for_non_static_method_access=false
+sp_cleanup.convert_functional_interfaces=false
 sp_cleanup.convert_to_enhanced_for_loop=false
+sp_cleanup.correct_indentation=false
 sp_cleanup.format_source_code=true
+sp_cleanup.format_source_code_changes_only=false
+sp_cleanup.insert_inferred_type_arguments=false
 sp_cleanup.make_local_variable_final=false
 sp_cleanup.make_parameters_final=false
 sp_cleanup.make_private_fields_final=true
-sp_cleanup.make_variable_declarations_final=true
+sp_cleanup.make_type_abstract_if_missing_method=false
+sp_cleanup.make_variable_declarations_final=false
 sp_cleanup.never_use_blocks=false
 sp_cleanup.never_use_parentheses_in_expressions=true
-sp_cleanup.on_save_use_additional_actions=false
+sp_cleanup.on_save_use_additional_actions=true
 sp_cleanup.organize_imports=true
 sp_cleanup.qualify_static_field_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true
@@ -30,12 +36,13 @@
 sp_cleanup.qualify_static_member_accesses_with_declaring_class=false
 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
 sp_cleanup.remove_private_constructors=true
-sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_redundant_type_arguments=true
+sp_cleanup.remove_trailing_whitespaces=true
 sp_cleanup.remove_trailing_whitespaces_all=true
 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
 sp_cleanup.remove_unnecessary_casts=true
 sp_cleanup.remove_unnecessary_nls_tags=false
-sp_cleanup.remove_unused_imports=false
+sp_cleanup.remove_unused_imports=true
 sp_cleanup.remove_unused_local_variables=false
 sp_cleanup.remove_unused_private_fields=true
 sp_cleanup.remove_unused_private_members=false
@@ -43,8 +50,10 @@
 sp_cleanup.remove_unused_private_types=true
 sp_cleanup.sort_members=false
 sp_cleanup.sort_members_all=false
+sp_cleanup.use_anonymous_class_creation=false
 sp_cleanup.use_blocks=false
 sp_cleanup.use_blocks_only_for_return_and_throw=false
+sp_cleanup.use_lambda=false
 sp_cleanup.use_parentheses_in_expressions=false
 sp_cleanup.use_this_for_non_static_field_access=false
 sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/META-INF/MANIFEST.MF b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/META-INF/MANIFEST.MF
index 463d331..d7c8563 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/META-INF/MANIFEST.MF
@@ -6,4 +6,4 @@
 Require-Bundle: org.eclipse.dltk.javascript.rhino
 Bundle-Vendor: %pluginProvider
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/Base64Helper.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/Base64Helper.java
index f2e06dc..8f0dfb3 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/Base64Helper.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/Base64Helper.java
@@ -11,50 +11,32 @@
  *******************************************************************************/
 package org.eclipse.dltk.rhino.dbgp;
 
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.StandardCharsets;
 
 public class Base64Helper {
 
 	/**
-	 * Encoding of the data
-	 */
-	private static final String DATA_ENCODING = "UTF-8"; //$NON-NLS-1$
-
-	/**
-	 * Encoding of the base64 digits - to be used instead of the default
-	 * encoding.
-	 */
-	private static final String BYTE_ENCODING = "ISO-8859-1"; //$NON-NLS-1$
-
-	/**
 	 * Empty string constant
 	 */
 	private static final String EMPTY = ""; //$NON-NLS-1$
 
 	public static String encodeString(String s) {
 		if (s != null && s.length() != 0) {
-			try {
-				final byte[] encode = Base64.encode(s.getBytes(DATA_ENCODING));
-				return new String(encode, BYTE_ENCODING);
-			} catch (UnsupportedEncodingException e) {
-				e.printStackTrace();
-			}
+			final byte[] encode = Base64
+					.encode(s.getBytes(StandardCharsets.UTF_8));
+			return new String(encode, StandardCharsets.ISO_8859_1);
 		}
 		return EMPTY;
 	}
 
 	public static String decodeString(String base64) {
 		if (base64 != null && base64.length() != 0) {
-			try {
-				final byte[] bytes = base64.getBytes(BYTE_ENCODING);
-				final int length = discardWhitespace(bytes);
-				if (length > 0) {
-					final int decodedLength = Base64.decodeInlplace(bytes,
-							length);
-					return new String(bytes, 0, decodedLength, DATA_ENCODING);
-				}
-			} catch (UnsupportedEncodingException e) {
-				e.printStackTrace();
+			final byte[] bytes = base64.getBytes(StandardCharsets.ISO_8859_1);
+			final int length = discardWhitespace(bytes);
+			if (length > 0) {
+				final int decodedLength = Base64.decodeInlplace(bytes, length);
+				return new String(bytes, 0, decodedLength,
+						StandardCharsets.UTF_8);
 			}
 		}
 		return EMPTY;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakCommand.java
index 393b511..1e12aca 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class BreakCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,12 +18,12 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, final HashMap options) {
 		this.debugger.stackmanager.suspend();
 		this.debugger.printResponse("<response command=\"break\"\r\n"
-				+ "          success=\"1\"\r\n"
-				+ "          transaction_id=\"" + options.get("-i")
-				+ "\">\r\n" + "</response>\r\n" + "");
+				+ "          success=\"1\"\r\n" + "          transaction_id=\""
+				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
 
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakPoint.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakPoint.java
index d513ba1..263f7d7 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakPoint.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/BreakPoint.java
@@ -83,7 +83,8 @@
 				expression = expression.trim();
 		}
 		if (isWatch) {
-			this.isModification = expression.charAt(expression.length() - 1) == '1';
+			this.isModification = expression
+					.charAt(expression.length() - 1) == '1';
 			this.isAccess = expression.charAt(expression.length() - 2) == '1';
 			this.expression = expression.substring(0, expression.length() - 2);
 
@@ -106,6 +107,7 @@
 		}
 	}
 
+	@Override
 	public int hashCode() {
 		final int prime = 31;
 		int result = 1;
@@ -114,6 +116,7 @@
 		return result;
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (this == obj)
 			return true;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/CombinedReader.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/CombinedReader.java
index 179374d..15cd6ec 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/CombinedReader.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/CombinedReader.java
@@ -3,31 +3,36 @@
 import java.io.IOException;
 import java.io.Reader;
 
-public class CombinedReader extends Reader{
+public class CombinedReader extends Reader {
 
 	private final Reader bf;
-	
+
 	public CombinedReader(Reader bf) {
 		super();
 		this.bf = bf;
 	}
 
+	@Override
 	public void close() throws IOException {
 		bf.close();
 	}
-	int count=0;
 
+	int count = 0;
+
+	@Override
 	public int read(char[] cbuf, int off, int len) throws IOException {
-		if (count<1){
-			cbuf[off++]='\r';
+		if (count < 1) {
+			cbuf[off++] = '\r';
 			len--;
-			count=1;
-			if (len==0)return 1;
-			
-			cbuf[off++]='\n';
+			count = 1;
+			if (len == 0)
+				return 1;
+
+			cbuf[off++] = '\n';
 			len--;
-			count=2;
-			if (len==0)return 2;
+			count = 2;
+			if (len == 0)
+				return 2;
 		}
 		return bf.read(cbuf, off, len);
 	}
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextGetCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextGetCommand.java
index ee60c3f..54184ae 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextGetCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextGetCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -16,7 +16,7 @@
 	private static final int GLOBAL_CONTEXT_ID = 1;
 	private static final int CLASS_CONTEXT_ID = 2;
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -27,6 +27,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		StringBuffer properties = new StringBuffer();
 		try {
@@ -39,7 +40,8 @@
 			DBGPDebugFrame stackFrame = this.debugger.stackmanager
 					.getStackFrame(level);
 			Scriptable this1 = stackFrame.getThis();
-			if (this1 != null && (context == LOCAL_CONTEXT_ID || context == -1)) {
+			if (this1 != null
+					&& (context == LOCAL_CONTEXT_ID || context == -1)) {
 				this.debugger.printProperty("this", "this", this1, properties,
 						0, false);
 			}
@@ -120,8 +122,8 @@
 														// of the lazy behavior
 														// of plugins in Eclipse
 					{
-						this.debugger.printProperty(id.toString(), id
-								.toString(), value, properties, 0, true);
+						this.debugger.printProperty(id.toString(),
+								id.toString(), value, properties, 0, true);
 					}
 				}
 			}
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextNamesCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextNamesCommand.java
index 2ad324a..94c2a5b 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextNamesCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/ContextNamesCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class ContextNamesCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,16 +18,16 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		String object = (String) options.get("-i");
 		this.debugger.runTransctionId = object;
-		
-		this.debugger.printResponse("<response command=\"context_names\"\r\n"				
+
+		this.debugger.printResponse("<response command=\"context_names\"\r\n"
 				+ "          transaction_id=\"" + options.get("-i") + "\">"
-				+ "    <context name=\"Local\" id=\"0\"/>\r\n" + 
-						"    <context name=\"Global\" id=\"1\"/>\r\n" + 
-						"    <context name=\"Class\" id=\"2\"/>\r\n" + 
-						""
+				+ "    <context name=\"Local\" id=\"0\"/>\r\n"
+				+ "    <context name=\"Global\" id=\"1\"/>\r\n"
+				+ "    <context name=\"Class\" id=\"2\"/>\r\n" + ""
 				+ "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugFrame.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugFrame.java
index c8e4348..90a61e6 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugFrame.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugFrame.java
@@ -52,6 +52,7 @@
 		return result;
 	}
 
+	@Override
 	public void onEnter(Context cx, Scriptable activation, Scriptable thisObj,
 			Object[] args) {
 		this.args = args;
@@ -62,15 +63,18 @@
 
 	}
 
+	@Override
 	public void onExceptionThrown(Context cx, Throwable ex) {
 		stackManager.exceptionThrown(ex);
 	}
 
+	@Override
 	public void onExit(Context cx, boolean byThrow, Object resultOrException) {
 
 		stackManager.exit(this);
 	}
 
+	@Override
 	public void onLineChange(Context cx, int lineNumber) {
 		this.lineNumber = lineNumber;
 		if (callOnEnter) {
@@ -130,8 +134,8 @@
 				value = value.substring("this.".length());
 				cs = thisObj;
 			}
-			Object evaluateString = context.evaluateString(cs, value, "eval",
-					0, null);
+			Object evaluateString = context.evaluateString(cs, value, "eval", 0,
+					null);
 			return evaluateString;
 
 		} catch (Throwable e) {
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugger.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugger.java
index 9234c0d..2d96b89 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugger.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/DBGPDebugger.java
@@ -30,8 +30,8 @@
 import org.mozilla.javascript.debug.IDeguggerWithWatchPoints;
 import org.mozilla.javascript.xml.XMLObject;
 
-public class DBGPDebugger extends Thread implements Debugger, Observer,
-		IDeguggerWithWatchPoints {
+public class DBGPDebugger extends Thread
+		implements Debugger, Observer, IDeguggerWithWatchPoints {
 
 	private Socket socket;
 	private OutputStream out;
@@ -203,8 +203,8 @@
 						Object pvalue = null;
 						try {
 							if (ids[a] instanceof Integer) {
-								pvalue = p
-										.get(((Integer) ids[a]).intValue(), p);
+								pvalue = p.get(((Integer) ids[a]).intValue(),
+										p);
 							} else
 								pvalue = p.get(ids[a].toString(), p);
 						} catch (Exception e) {
@@ -230,8 +230,8 @@
 				if (value == UniqueTag.NOT_FOUND) {
 					vlEncoded = "";
 				} else
-					vlEncoded = Base64Helper.encodeString(value != null ? value
-							.toString() : "null");
+					vlEncoded = Base64Helper.encodeString(
+							value != null ? value.toString() : "null");
 			} else {
 				vlEncoded = Base64Helper.encodeString("Undefined");
 			}
@@ -317,8 +317,9 @@
 			{
 				counter++;
 				if (ids[a] instanceof Integer) {
-					printProperty(ids[a].toString(), fullName + "[" + ids[a]
-							+ "]", pvalue, stringBuffer, level + 1, false);
+					printProperty(ids[a].toString(),
+							fullName + "[" + ids[a] + "]", pvalue, stringBuffer,
+							level + 1, false);
 				} else {
 					printProperty(ids[a].toString(), fullName + "." + ids[a],
 							pvalue, stringBuffer, level + 1, false);
@@ -356,6 +357,7 @@
 		return data_type;
 	}
 
+	@Override
 	public void run() {
 		try {
 			DataInputStream ds = new DataInputStream(socket.getInputStream());
@@ -404,14 +406,17 @@
 
 	}
 
+	@Override
 	public DebugFrame getFrame(Context cx, DebuggableScript fnOrScript) {
 		return new DBGPDebugFrame(cx, fnOrScript, this);
 	}
 
+	@Override
 	public void handleCompilationDone(Context cx, DebuggableScript fnOrScript,
 			String source) {
 	}
 
+	@Override
 	public void update(Observable arg0, Object arg1) {
 		if (runTransctionId != null)
 			printResponse("<response command=\"run\"\r\n" + "status=\"break\""
@@ -426,9 +431,10 @@
 		System.exit(0);
 	}
 
+	@Override
 	public void access(String property, ScriptableObject object) {
-		ArrayList list = (ArrayList) stackmanager.getManager().getWatchPoints(
-				property);
+		ArrayList list = (ArrayList) stackmanager.getManager()
+				.getWatchPoints(property);
 		if (list != null) {
 			int size = list.size();
 
@@ -451,10 +457,11 @@
 
 	WeakHashMap cache = new WeakHashMap();
 
+	@Override
 	public void modification(String property, ScriptableObject object) {
 
-		ArrayList list = (ArrayList) stackmanager.getManager().getWatchPoints(
-				property);
+		ArrayList list = (ArrayList) stackmanager.getManager()
+				.getWatchPoints(property);
 		if (list != null && stackmanager.getStackDepth() > 0) {
 			int size = list.size();
 			for (int a = 0; a < size; a++) {
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/EvalCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/EvalCommand.java
index c58ac20..747e786 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/EvalCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/EvalCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class EvalCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		String value = Base64Helper.decodeString((String) options.get("--"));
 		if (value.length() == 0)
@@ -25,10 +26,10 @@
 		StringBuffer valueBuffer = new StringBuffer();
 		if (this.debugger.stackmanager.getStackDepth() == 0 || value == null) {
 			this.debugger.printProperty(value, value, "", valueBuffer, 0, true);
-			this.debugger.printResponse("<response command=\"eval\"\r\n"
-					+ " transaction_id=\"" + options.get("-i")
-					+ "\" success=\"1\" " + ">\r\n" + valueBuffer
-					+ "</response>\r\n" + "");
+			this.debugger.printResponse(
+					"<response command=\"eval\"\r\n" + " transaction_id=\""
+							+ options.get("-i") + "\" success=\"1\" " + ">\r\n"
+							+ valueBuffer + "</response>\r\n" + "");
 			return;
 		}
 		Object evaluated = "<error evaluating>";
@@ -46,8 +47,7 @@
 		this.debugger.printProperty(shName, value, evaluated, valueBuffer, 0,
 				true);
 		this.debugger.printResponse("<response command=\"eval\"\r\n"
-				+ " transaction_id=\"" + options.get("-i")
-				+ "\" success=\"1\" " + ">\r\n" + valueBuffer
-				+ "</response>\r\n" + "");
+				+ " transaction_id=\"" + options.get("-i") + "\" success=\"1\" "
+				+ ">\r\n" + valueBuffer + "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureGetCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureGetCommand.java
index 3490183..63550a3 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureGetCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureGetCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class FeatureGetCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.printResponse("<response command=\"feature_get\"\r\n"
 				+ "          feature_name=\"supports_async\"\r\n"
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureSetCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureSetCommand.java
index 9f898c2..db18649 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureSetCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/FeatureSetCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class FeatureSetCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,11 +18,11 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.printResponse("<response command=\"feature_set\"\r\n"
 				+ "          feature_name=\"max_children\"\r\n"
-				+ "          success=\"1\"\r\n"
-				+ "          transaction_id=\"" + options.get("-i")
-				+ "\">\r\n" + "</response>\r\n" + "");
+				+ "          success=\"1\"\r\n" + "          transaction_id=\""
+				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/GetBreakPointCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/GetBreakPointCommand.java
index 0f77795..56c275b 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/GetBreakPointCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/GetBreakPointCommand.java
@@ -12,48 +12,25 @@
 		this.debugger = debugger;
 	}
 
-	
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		String id = (String) options.get("-d");
 
 		BreakPoint breakpoint = this.debugger.stackmanager.getBreakpoint(id);
 		this.debugger.printResponse("<response command=\"breakpoint_get\"\r\n"
-				+ " transaction_id=\""
-				+ options.get("-i")
-				+ "\">\r\n"
-				+"<breakpoint"
-				+ " id=\""
-				+ id
-				+ "\""
-				+ " type=\""
-				+ breakpoint.getType()
-				+ "\""
-				+ " state=\""
-				+ breakpoint.getState()
-				+ "\""
-				+ " filename=\""
-				+ breakpoint.file
-				+ "\""
-				+ " lineno=\""
-				+ breakpoint.line
-				+ "\""
-				+ " function=\""
-				+ breakpoint.method
-				+ "\""
-				+ " exception=\""
-				+ "\""
-				+ " hit_value=\""
-				+ breakpoint.hitValue
-				+ "\""
-				+ " hit_condition=\""
-				+ breakpoint.getHitCondition()
-				+ "\""
-				+ " hit_count=\""
-				+ breakpoint.currentHitCount + "\""
-				+" >\r\n"
-				+"<expression>"+Base64Helper.encodeString(breakpoint.expression)+"</expression>"
-				+ "</breakpoint>\r\n"
-				+ "</response>\r\n" + "");
+				+ " transaction_id=\"" + options.get("-i") + "\">\r\n"
+				+ "<breakpoint" + " id=\"" + id + "\"" + " type=\""
+				+ breakpoint.getType() + "\"" + " state=\""
+				+ breakpoint.getState() + "\"" + " filename=\""
+				+ breakpoint.file + "\"" + " lineno=\"" + breakpoint.line + "\""
+				+ " function=\"" + breakpoint.method + "\"" + " exception=\""
+				+ "\"" + " hit_value=\"" + breakpoint.hitValue + "\""
+				+ " hit_condition=\"" + breakpoint.getHitCondition() + "\""
+				+ " hit_count=\"" + breakpoint.currentHitCount + "\"" + " >\r\n"
+				+ "<expression>"
+				+ Base64Helper.encodeString(breakpoint.expression)
+				+ "</expression>" + "</breakpoint>\r\n" + "</response>\r\n"
+				+ "");
 	}
 
 }
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertyGetCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertyGetCommand.java
index 18b4793..3a4a5db 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertyGetCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertyGetCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class PropertyGetCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		String longName = (String) options.get("-n");
 		int level = 0;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertySetCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertySetCommand.java
index 07809c2..d981b61 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertySetCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/PropertySetCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class PropertySetCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		String name = ((String) options.get("-n"));
 		int num = Integer.parseInt((String) options.get("-d"));
@@ -37,7 +38,7 @@
 			debugger.setProperty(name, value);
 		}
 		this.debugger.printResponse("<response command=\"property_set\"\r\n"
-				+ " transaction_id=\"" + options.get("-i")
-				+ "\" success=\"1\" " + ">\r\n" + "</response>\r\n" + "");
+				+ " transaction_id=\"" + options.get("-i") + "\" success=\"1\" "
+				+ ">\r\n" + "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RemoveBreakPointCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RemoveBreakPointCommand.java
index bd919ce..c888584 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RemoveBreakPointCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RemoveBreakPointCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class RemoveBreakPointCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,9 +18,11 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.stackmanager.removeBreakpoint((String) options.get("-d"));
-		this.debugger.printResponse("<response command=\"breakpoint_remove\"\r\n"
-				+ " transaction_id=\"" + options.get("-i") + "\" />");
+		this.debugger
+				.printResponse("<response command=\"breakpoint_remove\"\r\n"
+						+ " transaction_id=\"" + options.get("-i") + "\" />");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RunCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RunCommand.java
index fb3bf16..b68ba1e 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RunCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/RunCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class RunCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		String object = (String) options.get("-i");
 		this.debugger.runTransctionId = object;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/SetBreakPointCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/SetBreakPointCommand.java
index 7504ced..da95483 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/SetBreakPointCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/SetBreakPointCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class SetBreakPointCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		BreakPoint p = new BreakPoint(options);
 		this.debugger.stackmanager.registerBreakPoint(p);
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackDepthCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackDepthCommand.java
index c34c201..367534a 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackDepthCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackDepthCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class StackDepthCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,11 +18,13 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, final HashMap options) {
 		this.debugger.printResponse("<response command=\"stack_depth\"\r\n"
-				+ "          depth=\"" + (this.debugger.stackmanager.getStackDepth())
-				+ "\"\r\n" + "          transaction_id=\""
-				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
+				+ "          depth=\""
+				+ (this.debugger.stackmanager.getStackDepth()) + "\"\r\n"
+				+ "          transaction_id=\"" + options.get("-i") + "\">\r\n"
+				+ "</response>\r\n" + "");
 
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackGetCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackGetCommand.java
index 9b4ecf6..45062bc 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackGetCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StackGetCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -8,7 +8,7 @@
 
 final class StackGetCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -19,6 +19,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, final HashMap options) {
 		String string = (String) options.get("-d");
 		int level = -1;
@@ -28,7 +29,8 @@
 		StringBuffer stack = new StringBuffer();
 		if (this.debugger.stackmanager.getStackDepth() >= level) {
 			if (level == -1) {
-				for (int a = 0; a < this.debugger.stackmanager.getStackDepth(); a++) {
+				for (int a = 0; a < this.debugger.stackmanager
+						.getStackDepth(); a++) {
 					appendLevel(a, stack);
 				}
 			} else {
@@ -36,8 +38,8 @@
 				appendLevel(level, stack);
 			}
 			this.debugger.printResponse("<response command=\"stack_get\"\r\n"
-					+ "\r\n" + "          transaction_id=\""
-					+ options.get("-i") + "\">\r\n" +
+					+ "\r\n" + "          transaction_id=\"" + options.get("-i")
+					+ "\">\r\n" +
 
 					stack + "</response>\r\n" + "");
 		}
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdErrCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdErrCommand.java
index 73b6175..aeed4c4 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdErrCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdErrCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class StdErrCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,10 +18,10 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.printResponse("<response command=\"stderr\"\r\n"
-				+ "          success=\"1\"\r\n"
-				+ "          transaction_id=\"" + options.get("-i")
-				+ "\">\r\n" + "</response>\r\n" + "");
+				+ "          success=\"1\"\r\n" + "          transaction_id=\""
+				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdInCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdInCommand.java
index 8185931..5a07a75 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdInCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdInCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class StdInCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,10 +18,10 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.printResponse("<response command=\"srdin\"\r\n"
-				+ "          success=\"1\"\r\n"
-				+ "          transaction_id=\"" + options.get("-i")
-				+ "\">\r\n" + "</response>\r\n" + "");
+				+ "          success=\"1\"\r\n" + "          transaction_id=\""
+				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdOutCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdOutCommand.java
index 6f227ee..6946f2b 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdOutCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StdOutCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class StdOutCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,10 +18,10 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.printResponse("<response command=\"stdout\"\r\n"
-				+ "          success=\"1\"\r\n"
-				+ "          transaction_id=\"" + options.get("-i")
-				+ "\">\r\n" + "</response>\r\n" + "");
+				+ "          success=\"1\"\r\n" + "          transaction_id=\""
+				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepIntoCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepIntoCommand.java
index 3bfd2f9..9a3083c 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepIntoCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepIntoCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class StepIntoCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		Object tid = options.get("-i");
 		this.debugger.runTransctionId = (String) tid;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOutCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOutCommand.java
index 96eaeee..41f7e63 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOutCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOutCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class StepOutCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		Object tid = options.get("-i");
 		this.debugger.runTransctionId = (String) tid;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOverCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOverCommand.java
index a1a9d50..ef6f752 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOverCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StepOverCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class StepOverCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		Object tid = options.get("-i");
 		this.debugger.runTransctionId = (String) tid;
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StopCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StopCommand.java
index 0384764..23c6b98 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StopCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/StopCommand.java
@@ -1,15 +1,13 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
 import java.util.HashMap;
 
-import org.eclipse.dltk.rhino.dbgp.DBGPDebugger.Command;
-
 final class StopCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -20,11 +18,11 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 		this.debugger.printResponse("<response command=\"run\"\r\n"
-				+ "status=\"stopped\"" + " reason=\"ok\""
-				+ " transaction_id=\"" + options.get("-i") + "\">\r\n"
-				+ "</response>\r\n" + "");
+				+ "status=\"stopped\"" + " reason=\"ok\"" + " transaction_id=\""
+				+ options.get("-i") + "\">\r\n" + "</response>\r\n" + "");
 		System.exit(0);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/UpdateBreakPointCommand.java b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/UpdateBreakPointCommand.java
index 776068c..7f2df53 100644
--- a/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/UpdateBreakPointCommand.java
+++ b/plugins/org.eclipse.dltk.javascript.rhino.dbgp/src/org/eclipse/dltk/rhino/dbgp/UpdateBreakPointCommand.java
@@ -1,5 +1,5 @@
 /**
- * 
+ *
  */
 package org.eclipse.dltk.rhino.dbgp;
 
@@ -7,7 +7,7 @@
 
 final class UpdateBreakPointCommand extends DBGPDebugger.Command {
 	/**
-	 * 
+	 *
 	 */
 	private final DBGPDebugger debugger;
 
@@ -18,6 +18,7 @@
 		this.debugger = debugger;
 	}
 
+	@Override
 	void parseAndExecute(String command, HashMap options) {
 
 		String id = (String) options.get("-d");
