diff --git a/plugins/org.eclipse.dltk.python.debug.ui/.classpath b/plugins/org.eclipse.dltk.python.debug.ui/.classpath
index 64c5e31..eca7bdb 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/.classpath
+++ b/plugins/org.eclipse.dltk.python.debug.ui/.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.python.debug.ui/.settings/org.eclipse.jdt.core.prefs b/plugins/org.eclipse.dltk.python.debug.ui/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0c68a61
--- /dev/null
+++ b/plugins/org.eclipse.dltk.python.debug.ui/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/.settings/org.eclipse.jdt.ui.prefs b/plugins/org.eclipse.dltk.python.debug.ui/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..43df84b
--- /dev/null
+++ b/plugins/org.eclipse.dltk.python.debug.ui/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,59 @@
+eclipse.preferences.version=1
+editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true
+sp_cleanup.add_default_serial_version_id=true
+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=true
+sp_cleanup.insert_inferred_type_arguments=false
+sp_cleanup.make_local_variable_final=true
+sp_cleanup.make_parameters_final=false
+sp_cleanup.make_private_fields_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=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
+sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true
+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_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=true
+sp_cleanup.remove_unused_local_variables=false
+sp_cleanup.remove_unused_private_fields=true
+sp_cleanup.remove_unused_private_members=false
+sp_cleanup.remove_unused_private_methods=true
+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=true
+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
+sp_cleanup.use_this_for_non_static_method_access=false
+sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.dltk.python.debug.ui/META-INF/MANIFEST.MF
index fcee4f6..a7405b6 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.dltk.python.debug.ui/META-INF/MANIFEST.MF
@@ -25,10 +25,10 @@
  org.eclipse.dltk.python.ui,
  org.eclipse.dltk.python.debug,
  org.eclipse.dltk.debug
-Eclipse-LazyStart: true
+Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.dltk.python.internal.debug.ui,
  org.eclipse.dltk.python.internal.debug.ui.console,
  org.eclipse.dltk.python.internal.debug.ui.interpreters,
  org.eclipse.dltk.python.internal.debug.ui.launchConfigurations,
  org.eclipse.dltk.python.internal.debug.ui.launcher
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugModelPresentation.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugModelPresentation.java
index 51202c6..aa69976 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugModelPresentation.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugModelPresentation.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui;
 
@@ -14,7 +13,8 @@
 
 public class PythonDebugModelPresentation extends ScriptDebugModelPresentation {
 	private static final String PYTHON_EDITOR_ID = "org.eclipse.dltk.python.ui.editor.PythonEditor";
-	
+
+	@Override
 	public String getEditorId(IEditorInput input, Object element) {
 		return PYTHON_EDITOR_ID;
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUILanguageToolkit.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUILanguageToolkit.java
index 3ff73a1..dd64695 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUILanguageToolkit.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUILanguageToolkit.java
@@ -7,23 +7,17 @@
 public class PythonDebugUILanguageToolkit extends
 		AbstractDebugUILanguageToolkit {
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.IDLTKDebugUILanguageToolkit#getDebugModelId()
-	 */
+	@Override
 	public String getDebugModelId() {
 		return PythonDebugConstants.DEBUG_MODEL_ID;
 	}
 	
-	/*
-	 * @see org.eclipse.dltk.debug.ui.IDLTKDebugUILanguageToolkit#getPreferenceStore()
-	 */
+	@Override
 	public IPreferenceStore getPreferenceStore() {
 		return PythonDebugUIPlugin.getDefault().getPreferenceStore();
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.AbstractDebugUILanguageToolkit#getVariablesViewPreferencePages()
-	 */
+	@Override
 	public String[] getVariablesViewPreferencePages() {
 		return new String[] {"org.eclipse.dltk.python.preferences.debug.detailFormatters"};
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPlugin.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPlugin.java
index 48df59c..90534ee 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPlugin.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPlugin.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui;
 
@@ -22,7 +21,7 @@
 
 	// The shared instance
 	private static PythonDebugUIPlugin plugin;
-	
+
 	/**
 	 * The constructor
 	 */
@@ -30,18 +29,12 @@
 		plugin = this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
 		super.stop(context);
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPreferenceInitializer.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPreferenceInitializer.java
index 0c8af0a..b368bb5 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPreferenceInitializer.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonDebugUIPreferenceInitializer.java
@@ -6,6 +6,7 @@
 public class PythonDebugUIPreferenceInitializer extends
 		DLTKDebugUIPluginPreferenceInitializer {
 
+	@Override
 	protected String getNatureId() {
 		return PythonNature.NATURE_ID;
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonEditorDebugAdapterFactory.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonEditorDebugAdapterFactory.java
index 3f5c653..543b0ab 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonEditorDebugAdapterFactory.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonEditorDebugAdapterFactory.java
@@ -9,9 +9,7 @@
 public class PythonEditorDebugAdapterFactory extends
 		ScriptEditorDebugAdapterFactory {
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.ScriptEditorDebugAdapterFactory#getBreakpointAdapter()
-	 */
+	@Override
 	protected ScriptToggleBreakpointAdapter getBreakpointAdapter() {
 		return new PythonToggleBreakpointAdapter();
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonToggleBreakpointAdapter.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonToggleBreakpointAdapter.java
index 93a28a8..875c6e0 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonToggleBreakpointAdapter.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonToggleBreakpointAdapter.java
@@ -15,70 +15,48 @@
 	private static final IScriptBreakpointLineValidator validator = ScriptBreakpointLineValidatorFactory
 			.createNonEmptyNoCommentValidator("#");
 
-	/*
-	 * @see org.eclipse.debug.ui.actions.IToggleBreakpointsTargetExtension#canToggleBreakpoints(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public boolean canToggleBreakpoints(IWorkbenchPart part,
 			ISelection selection) {
 		return canToggleLineBreakpoints(part, selection);
 	}
 
-	/*
-	 * @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleMethodBreakpoints(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public boolean canToggleMethodBreakpoints(IWorkbenchPart part,
 			ISelection selection) {
 		return false;
 	}
 
-	/*
-	 * @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#canToggleWatchpoints(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public boolean canToggleWatchpoints(IWorkbenchPart part,
 			ISelection selection) {
 		return false;
 	}
 
-	/*
-	 * @see org.eclipse.debug.ui.actions.IToggleBreakpointsTargetExtension#toggleBreakpoints(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public void toggleBreakpoints(IWorkbenchPart part, ISelection selection)
 			throws CoreException {
 		toggleLineBreakpoints(part, selection);
 	}
 
-	/*
-	 * @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#toggleMethodBreakpoints(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public void toggleMethodBreakpoints(IWorkbenchPart part,
 			ISelection selection) throws CoreException {
 		// TODO: toggle method breakpoints
 	}
 
-	/*
-	 * @see org.eclipse.debug.ui.actions.IToggleBreakpointsTarget#toggleWatchpoints(org.eclipse.ui.IWorkbenchPart,
-	 *      org.eclipse.jface.viewers.ISelection)
-	 */
+	@Override
 	public void toggleWatchpoints(IWorkbenchPart part, ISelection selection)
 			throws CoreException {
 		// TODO: toggle watchpoints
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.breakpoints.ScriptToggleBreakpointAdapter#getDebugModelId()
-	 */
+	@Override
 	protected String getDebugModelId() {
 		return PythonDebugConstants.DEBUG_MODEL_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.breakpoints.ScriptToggleBreakpointAdapter#getValidator()
-	 */
+	@Override
 	protected IScriptBreakpointLineValidator getValidator() {
 		return validator;
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonWatchExpressionDelegate.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonWatchExpressionDelegate.java
index a085a31..4358601 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonWatchExpressionDelegate.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/PythonWatchExpressionDelegate.java
@@ -7,6 +7,7 @@
 			+ Long.toString(System.currentTimeMillis());
 
 	// TODO: Correctly implement
+	@Override
 	protected String prepareExpression(String expression) {
 		return "set " + DUMMY_VAR + " " + "\"" + expression + "\"";
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonConsoleTracker.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonConsoleTracker.java
index 3ecee0f..372f6eb 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonConsoleTracker.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonConsoleTracker.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.console;
 
@@ -19,39 +18,33 @@
  * Provides links for stack traces
  */
 public class PythonConsoleTracker implements IPatternMatchListenerDelegate {
-	
+
 	/**
-	 * The console associated with this line tracker 
+	 * The console associated with this line tracker
 	 */
 	private TextConsole fConsole;
 
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.console.IPatternMatchListenerDelegate#connect(org.eclipse.ui.console.IConsole)
-     */
-    public void connect(TextConsole console) {
+    @Override
+	public void connect(TextConsole console) {
 	    fConsole = console;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.console.IPatternMatchListenerDelegate#disconnect()
-     */
-    public void disconnect() {
+    @Override
+	public void disconnect() {
         fConsole = null;
     }
-    
+
     protected TextConsole getConsole() {
         return fConsole;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.ui.console.IPatternMatchListenerDelegate#matchFound(org.eclipse.ui.console.PatternMatchEvent)
-     */
-    public void matchFound(PatternMatchEvent event) {
+    @Override
+	public void matchFound(PatternMatchEvent event) {
         try {
             int offset = event.getOffset();
             int length = event.getLength();
             IHyperlink link = new PythonFileHyperlink(fConsole);
-            fConsole.addHyperlink(link, offset, length);   
+            fConsole.addHyperlink(link, offset, length);
         } catch (BadLocationException e) {
         }
     }
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonFileHyperlink.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonFileHyperlink.java
index 4f4acd6..db28968 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonFileHyperlink.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/console/PythonFileHyperlink.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.console;
 
@@ -39,7 +38,7 @@
  * A hyperlink from a stack trace line of the form "*(*.java:*)"
  */
 public class PythonFileHyperlink implements IHyperlink {
-	
+
 	private TextConsole fConsole;
 
 	/**
@@ -49,21 +48,15 @@
 		fConsole = console;
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.console.IConsoleHyperlink#linkEntered()
-	 */
+	@Override
 	public void linkEntered() {
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.console.IConsoleHyperlink#linkExited()
-	 */
+	@Override
 	public void linkExited() {
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.console.IConsoleHyperlink#linkActivated()
-	 */
+	@Override
 	public void linkActivated() {
 		try {
 			String fileName;
@@ -73,10 +66,10 @@
                 fileName = getFileName(linkText);
                 lineNumber = getLineNumber(linkText);
             } catch (CoreException e1) {
-                ErrorDialog.openError(DLTKDebugUIPlugin.getActiveWorkbenchShell(), ConsoleMessages.PythonFileHyperlink_Error, ConsoleMessages.PythonFileHyperlink_Error, e1.getStatus()); 
+                ErrorDialog.openError(DLTKDebugUIPlugin.getActiveWorkbenchShell(), ConsoleMessages.PythonFileHyperlink_Error, ConsoleMessages.PythonFileHyperlink_Error, e1.getStatus());
                 return;
             }
-			
+
 			// documents start at 0
 			if (lineNumber > 0) {
 				lineNumber--;
@@ -105,21 +98,23 @@
 				return;
 			}
 			// did not find source
-			MessageDialog.openInformation(DLTKDebugUIPlugin.getActiveWorkbenchShell(), ConsoleMessages.PythonFileHyperlink_Information_1, MessageFormat.format(ConsoleMessages.PythonFileHyperlink_Source_not_found_for__0__2, new String[] {fileName}));  
+			MessageDialog.openInformation(DLTKDebugUIPlugin.getActiveWorkbenchShell(),
+					ConsoleMessages.PythonFileHyperlink_Information_1,
+					MessageFormat.format(ConsoleMessages.PythonFileHyperlink_Source_not_found_for__0__2, fileName));
 		} catch (CoreException e) {
-			DLTKDebugUIPlugin.errorDialog(ConsoleMessages.PythonFileHyperlink_An_exception_occurred_while_following_link__3, e); 
+			DLTKDebugUIPlugin.errorDialog(ConsoleMessages.PythonFileHyperlink_An_exception_occurred_while_following_link__3, e);
 			return;
 		}
 	}
-	
-	protected Object getSourceModule(String fileName) throws CoreException {				
+
+	protected Object getSourceModule(String fileName) throws CoreException {
 		IFile f = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(fileName));
 		return f;
 	}
 
 	/**
 	 * Returns the fully qualified name of the type to open
-	 *  
+	 *
 	 * @return fully qualified type name
 	 * @exception CoreException if unable to parse the type name
 	 */
@@ -130,13 +125,13 @@
         	String name = m.group(1);
         	return name;
         }
-        IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_parse_type_name_from_hyperlink__5, null); 
+        IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_parse_type_name_from_hyperlink__5, null);
         throw new CoreException(status);
-    }	
-	
+    }
+
 	/**
 	 * Returns the line number associated with the stack trace or -1 if none.
-	 * 
+	 *
 	 * @exception CoreException if unable to parse the number
 	 */
 	protected int getLineNumber(String linkText) throws CoreException {
@@ -147,26 +142,26 @@
         	try {
 				return Integer.parseInt(lineText);
 			} catch (NumberFormatException e) {
-				IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_parse_line_number_from_hyperlink__6, e); 
+				IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_parse_line_number_from_hyperlink__6, e);
 				throw new CoreException(status);
-			}        	
-        }		
-		IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_parse_line_number_from_hyperlink__7, null); 
-		throw new CoreException(status);			
+			}
+        }
+		IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_parse_line_number_from_hyperlink__7, null);
+		throw new CoreException(status);
 	}
-	
+
 	/**
 	 * Returns the console this link is contained in.
-	 *  
+	 *
 	 * @return console
 	 */
 	protected TextConsole getConsole() {
 		return fConsole;
 	}
-	
+
 	/**
 	 * Returns this link's text
-	 * 
+	 *
 	 * @exception CoreException if unable to retrieve the text
 	 */
 	protected String getLinkText() throws CoreException {
@@ -174,23 +169,23 @@
             IDocument document = getConsole().getDocument();
 	        IRegion region = getConsole().getRegion(this);
             int regionOffset = region.getOffset();
-            
+
 	        int lineNumber = document.getLineOfOffset(regionOffset);
 	        IRegion lineInformation = document.getLineInformation(lineNumber);
             int lineOffset = lineInformation.getOffset();
 	        String line = document.get(lineOffset, lineInformation.getLength());
-            
+
             //int regionOffsetInLine = regionOffset - lineOffset;
 
             //int linkEnd = line.indexOf(')', regionOffsetInLine);
             //int linkStart = line.lastIndexOf(' ', regionOffsetInLine);
-            
+
             //return line.substring(linkStart==-1?0:linkStart+1,linkEnd+1);
             return line.trim();
 		} catch (BadLocationException e) {
-			IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_retrieve_hyperlink_text__8, e); 
+			IStatus status = new Status(IStatus.ERROR, DLTKDebugUIPlugin.getUniqueIdentifier(), 0, ConsoleMessages.PythonFileHyperlink_Unable_to_retrieve_hyperlink_text__8, e);
 			throw new CoreException(status);
-		}		
+		}
 	}
 
 }
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleClassVariablesHandler.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleClassVariablesHandler.java
index e8696ea..7b7277e 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleClassVariablesHandler.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleClassVariablesHandler.java
@@ -12,16 +12,12 @@
 public class ToggleClassVariablesHandler extends
 		AbstractToggleClassVariableHandler {
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.handlers.AbstractToggleVariableHandler#getModelId()
-	 */
+	@Override
 	protected String getModelId() {
 		return PythonDebugConstants.DEBUG_MODEL_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.handlers.AbstractToggleVariableHandler#getPreferenceStore()
-	 */
+	@Override
 	protected IPreferenceStore getPreferenceStore() {
 		return new PreferencesAdapter(PythonDebugPlugin.getDefault()
 				.getPluginPreferences());
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleGlobalVariablesHandler.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleGlobalVariablesHandler.java
index 456bea5..823b72e 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleGlobalVariablesHandler.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleGlobalVariablesHandler.java
@@ -12,16 +12,12 @@
 public class ToggleGlobalVariablesHandler extends
 		AbstractToggleGlobalVariableHandler {
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.handlers.AbstractToggleVariableHandler#getModelId()
-	 */
+	@Override
 	protected String getModelId() {
 		return PythonDebugConstants.DEBUG_MODEL_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.handlers.AbstractToggleVariableHandler#getPreferenceStore()
-	 */
+	@Override
 	protected IPreferenceStore getPreferenceStore() {
 		return new PreferencesAdapter(PythonDebugPlugin.getDefault()
 				.getPluginPreferences());
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleLocalVariablesHandler.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleLocalVariablesHandler.java
index 7aa069c..8748590 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleLocalVariablesHandler.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/handlers/ToggleLocalVariablesHandler.java
@@ -12,16 +12,12 @@
 public class ToggleLocalVariablesHandler extends
 		AbstractToggleLocalVariableHandler {
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.handlers.AbstractToggleVariableHandler#getModelId()
-	 */
+	@Override
 	protected String getModelId() {
 		return PythonDebugConstants.DEBUG_MODEL_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.handlers.AbstractToggleVariableHandler#getPreferenceStore()
-	 */
+	@Override
 	protected IPreferenceStore getPreferenceStore() {
 		return new PreferencesAdapter(PythonDebugPlugin.getDefault()
 				.getPluginPreferences());
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/AddPythonInterpreterDialog.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/AddPythonInterpreterDialog.java
index 321493e..c61ac1a 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/AddPythonInterpreterDialog.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/AddPythonInterpreterDialog.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.interpreters;
 
@@ -23,6 +22,7 @@
 		super(requestor, shell, interpreterInstallTypes, editedInterpreter);
 	}
 
+	@Override
 	protected AbstractInterpreterLibraryBlock createLibraryBlock(AddScriptInterpreterDialog dialog) {
 		return new PythonInterpreterLibraryBlock(dialog);
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterLibraryBlock.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterLibraryBlock.java
index a16c794..771a1ff 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterLibraryBlock.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterLibraryBlock.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2007 IBM Corporation and others.
+ * Copyright (c) 2000, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.interpreters;
 
@@ -25,9 +24,11 @@
 	public PythonInterpreterLibraryBlock(AddScriptInterpreterDialog d) {
 		super(d);
 	}
+	@Override
 	protected IBaseLabelProvider getLabelProvider() {
 		return new LibraryLabelProvider();
 	}
+	@Override
 	protected IDialogSettings getDialogSettions() {
 		return PythonDebugUIPlugin.getDefault().getDialogSettings();
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterPreferencePage.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterPreferencePage.java
index cb77eca..5cfb33d 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterPreferencePage.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpreterPreferencePage.java
@@ -1,21 +1,21 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.interpreters;
 
-import org.eclipse.dltk.internal.debug.ui.interpreters.ScriptInterpreterPreferencePage;
 import org.eclipse.dltk.internal.debug.ui.interpreters.InterpretersBlock;
+import org.eclipse.dltk.internal.debug.ui.interpreters.ScriptInterpreterPreferencePage;
 
 public class PythonInterpreterPreferencePage extends ScriptInterpreterPreferencePage {
-	
-	public static final String PAGE_ID = "org.eclipse.dltk.python.preferences.interpreters";  
 
+	public static final String PAGE_ID = "org.eclipse.dltk.python.preferences.interpreters";
+
+	@Override
 	public InterpretersBlock createInterpretersBlock() {
 		return new PythonInterpretersBlock();
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpretersBlock.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpretersBlock.java
index 9648fd3..635a2f4 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpretersBlock.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/interpreters/PythonInterpretersBlock.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.interpreters;
 
@@ -17,15 +16,16 @@
 
 public class PythonInterpretersBlock extends InterpretersBlock {
 
+	@Override
 	protected AddScriptInterpreterDialog createInterpreterDialog(IInterpreterInstall standin) {
-		AddPythonInterpreterDialog dialog = new AddPythonInterpreterDialog(this, 
-				getShell(), ScriptRuntime.getInterpreterInstallTypes(getCurrentNature()), 
+		AddPythonInterpreterDialog dialog = new AddPythonInterpreterDialog(this,
+				getShell(), ScriptRuntime.getInterpreterInstallTypes(getCurrentNature()),
 				standin);
 		return dialog;
 	}
 
+	@Override
 	protected String getCurrentNature() {
 		return PythonNature.NATURE_ID;
 	}
 }
- 
\ No newline at end of file
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteLaunchConfigurationTab.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteLaunchConfigurationTab.java
index 5aefb13..5b12646 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteLaunchConfigurationTab.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteLaunchConfigurationTab.java
@@ -16,26 +16,20 @@
 		super(mode);
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#breakOnFirstLinePrefEnabled(org.eclipse.dltk.core.PreferencesLookupDelegate)
-	 */
+	@Override
 	protected boolean breakOnFirstLinePrefEnabled(
 			PreferencesLookupDelegate delegate) {
 		return delegate.getBoolean(PythonDebugPlugin.PLUGIN_ID,
 				DLTKDebugPreferenceConstants.PREF_DBGP_BREAK_ON_FIRST_LINE);
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#dbpgLoggingPrefEnabled(org.eclipse.dltk.core.PreferencesLookupDelegate)
-	 */
+	@Override
 	protected boolean dbpgLoggingPrefEnabled(PreferencesLookupDelegate delegate) {
 		return delegate.getBoolean(PythonDebugPlugin.PLUGIN_ID,
 				DLTKDebugPreferenceConstants.PREF_DBGP_ENABLE_LOGGING);
 	}
 
-	/*
-	 * @see org.eclipse.dltk.debug.ui.launchConfigurations.ScriptLaunchConfigurationTab#getNatureID()
-	 */
+	@Override
 	protected String getNatureID() {
 		return PythonNature.NATURE_ID;
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteTabGroup.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteTabGroup.java
index 3ea94cd..dfbd181 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteTabGroup.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonRemoteTabGroup.java
@@ -8,10 +8,7 @@
 public class PythonRemoteTabGroup extends AbstractLaunchConfigurationTabGroup {
 	// ~ Methods
 
-	/*
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTabGroup#createTabs(org.eclipse.debug.ui.ILaunchConfigurationDialog,
-	 *      java.lang.String)
-	 */
+	@Override
 	public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
 		ILaunchConfigurationTab[] tabs = new ILaunchConfigurationTab[] {
 				new PythonRemoteLaunchConfigurationTab(mode), new CommonTab() };
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonTabGroup.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonTabGroup.java
index 2e6a715..b0c69eb 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonTabGroup.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launchConfigurations/PythonTabGroup.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.launchConfigurations;
 
@@ -18,6 +17,7 @@
 import org.eclipse.dltk.debug.ui.launchConfigurations.ScriptArgumentsTab;
 
 public class PythonTabGroup extends AbstractLaunchConfigurationTabGroup {
+	@Override
 	public void createTabs(ILaunchConfigurationDialog dialog, String mode) {
 
 		PythonMainLaunchConfigurationTab main = new PythonMainLaunchConfigurationTab(
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launcher/PythonLaunchShortcut.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launcher/PythonLaunchShortcut.java
index 001d56d..497a6ca 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launcher/PythonLaunchShortcut.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/launcher/PythonLaunchShortcut.java
@@ -1,11 +1,10 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * Copyright (c) 2005, 2016 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
- 
  *******************************************************************************/
 package org.eclipse.dltk.python.internal.debug.ui.launcher;
 
@@ -15,11 +14,13 @@
 import org.eclipse.dltk.python.launching.PythonLaunchConfigurationConstants;
 
 public class PythonLaunchShortcut extends AbstractScriptLaunchShortcut {
+	@Override
 	protected ILaunchConfigurationType getConfigurationType() {
 		return getLaunchManager().getLaunchConfigurationType(
 				PythonLaunchConfigurationConstants.ID_PYTHON_SCRIPT);
 	}
 
+	@Override
 	protected String getNatureId() {
 		return PythonNature.NATURE_ID;
 	}
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebugPreferencePage.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebugPreferencePage.java
index 5d0b55f..2d61522 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebugPreferencePage.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebugPreferencePage.java
@@ -29,21 +29,19 @@
 	private static final String PREFERENCE_PAGE_ID = "org.eclipse.dltk.python.preferences.debug";
 	private static final String PROPERTY_PAGE_ID = "org.eclipse.dltk.python.propertyPage.debug";
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#createOptionsBlock(org.eclipse.dltk.ui.util.IStatusChangeListener,
-	 *      org.eclipse.core.resources.IProject,
-	 *      org.eclipse.ui.preferences.IWorkbenchPreferenceContainer)
-	 */
+	@Override
 	protected AbstractOptionsBlock createOptionsBlock(
 			IStatusChangeListener newStatusChangedListener, IProject project,
 			IWorkbenchPreferenceContainer container) {
 		return new AbstractDebuggingOptionsBlock(newStatusChangedListener, project,
 				getKeys(), container) {
 
+			@Override
 			protected PreferenceKey getBreakOnFirstLineKey() {
 				return BREAK_ON_FIRST_LINE;
 			}
 
+			@Override
 			protected PreferenceKey getDbgpLoggingEnabledKey() {
 				return ENABLE_DBGP_LOGGING;
 			}
@@ -54,50 +52,39 @@
 		return new PreferenceKey[] { BREAK_ON_FIRST_LINE, ENABLE_DBGP_LOGGING };
 	}
 	
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#getHelpId()
-	 */
+	@Override
 	protected String getHelpId() {
 		// TODO Auto-generated method stub
 		return null;
 	}
 	
+	@Override
 	protected String getNatureId() {
 		return PythonNature.NATURE_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageId()
-	 */
+	@Override
 	protected String getPreferencePageId() {
 		return PREFERENCE_PAGE_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#getProjectHelpId()
-	 */
+	@Override
 	protected String getProjectHelpId() {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageId()
-	 */
+	@Override
 	protected String getPropertyPageId() {
 		return PROPERTY_PAGE_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#setDescription()
-	 */
+	@Override
 	protected void setDescription() {
 		setDescription(PythonDebugPreferencesMessages.PythonDebugPreferencePage_description);
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#setPreferenceStore()
-	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(new PreferencesAdapter(PythonDebugPlugin
 				.getDefault().getPluginPreferences()));
diff --git a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebuggingEnginePreferencePage.java b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebuggingEnginePreferencePage.java
index db2d09d..9f3d31a 100644
--- a/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebuggingEnginePreferencePage.java
+++ b/plugins/org.eclipse.dltk.python.debug.ui/src/org/eclipse/dltk/python/internal/debug/ui/preferences/PythonDebuggingEnginePreferencePage.java
@@ -1,7 +1,6 @@
 package org.eclipse.dltk.python.internal.debug.ui.preferences;
 
 import org.eclipse.core.resources.IProject;
-
 import org.eclipse.dltk.debug.ui.preferences.AbstractDebuggingEngineOptionsBlock;
 import org.eclipse.dltk.python.core.PythonNature;
 import org.eclipse.dltk.python.internal.debug.PythonDebugConstants;
@@ -11,7 +10,6 @@
 import org.eclipse.dltk.ui.preferences.AbstractOptionsBlock;
 import org.eclipse.dltk.ui.preferences.PreferenceKey;
 import org.eclipse.dltk.ui.util.IStatusChangeListener;
-
 import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
 
 /**
@@ -27,21 +25,19 @@
 	private static String PREFERENCE_PAGE_ID = "org.eclipse.dltk.python.preferences.debug.engines";
 	private static String PROPERTY_PAGE_ID = "org.eclipse.dltk.python.propertyPage.debug.engines";
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#createOptionsBlock(org.eclipse.dltk.ui.util.IStatusChangeListener,
-	 *      org.eclipse.core.resources.IProject,
-	 *      org.eclipse.ui.preferences.IWorkbenchPreferenceContainer)
-	 */
+	@Override
 	protected AbstractOptionsBlock createOptionsBlock(
 			IStatusChangeListener newStatusChangedListener, IProject project,
 			IWorkbenchPreferenceContainer container) {
 		return new AbstractDebuggingEngineOptionsBlock(
 				newStatusChangedListener, project, getKeys(), container) {
 
+			@Override
 			protected String getNatureId() {
 				return PythonNature.NATURE_ID;
 			}
 
+			@Override
 			protected PreferenceKey getSavedContributionKey() {
 				return DEBUGGING_ENGINE;
 			}
@@ -49,50 +45,39 @@
 		};
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#getHelpId()
-	 */
+	@Override
 	protected String getHelpId() {
 		// TODO Auto-generated method stub
 		return null;
 	}
 	
+	@Override
 	protected String getNatureId() {
 		return PythonNature.NATURE_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.internal.ui.preferences.PropertyAndPreferencePage#getPreferencePageId()
-	 */
+	@Override
 	protected String getPreferencePageId() {
 		return PREFERENCE_PAGE_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#getProjectHelpId()
-	 */
+	@Override
 	protected String getProjectHelpId() {
 		// TODO Auto-generated method stub
 		return null;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.internal.ui.preferences.PropertyAndPreferencePage#getPropertyPageId()
-	 */
+	@Override
 	protected String getPropertyPageId() {
 		return PROPERTY_PAGE_ID;
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#setDescription()
-	 */
+	@Override
 	protected void setDescription() {
 		setDescription(PythonDebugPreferencesMessages.PythonDebugEnginePreferencePage_description);
 	}
 
-	/*
-	 * @see org.eclipse.dltk.ui.preferences.AbstractConfigurationBlockPropertyAndPreferencePage#setPreferenceStore()
-	 */
+	@Override
 	protected void setPreferenceStore() {
 		setPreferenceStore(new PreferencesAdapter(PythonDebugPlugin
 				.getDefault().getPluginPreferences()));
