diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java
index 4e10ee6..338e0d0 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java
@@ -200,9 +200,6 @@
 		}
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public <T> T getAdapter(Class<T> adapter) {
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/AbstractRemoteProcessBuilder.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/AbstractRemoteProcessBuilder.java
index 5a0e041..7859664 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/AbstractRemoteProcessBuilder.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/AbstractRemoteProcessBuilder.java
@@ -46,134 +46,65 @@
 		this(connection, Arrays.asList(command));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#command()
-	 */
 	@Override
 	public List<String> command() {
 		return fCommandArgs;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteProcessBuilder#command(java.util.List)
-	 */
 	@Override
 	public IRemoteProcessBuilder command(List<String> command) {
 		fCommandArgs = command;
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteProcessBuilder#command(java.lang.String
-	 * )
-	 */
 	@Override
 	public IRemoteProcessBuilder command(String... command) {
 		fCommandArgs = Arrays.asList(command);
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#directory()
-	 */
 	@Override
 	public IFileStore directory() {
 		return fRemoteDir;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteProcessBuilder#directory(org.eclipse
-	 * .core.filesystem.IFileStore)
-	 */
 	@Override
 	public IRemoteProcessBuilder directory(IFileStore directory) {
 		fRemoteDir = directory;
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#environment()
-	 */
 	@Override
 	public abstract Map<String, String> environment();
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteProcessBuilder#getSupportedFlags()
-	 */
 	/**
 	 * @since 5.0
 	 */
 	@Override
 	public abstract int getSupportedFlags();
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteProcessBuilder#redirectErrorStream()
-	 */
 	@Override
 	public boolean redirectErrorStream() {
 		return fRedirectErrorStream;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteProcessBuilder#redirectErrorStream
-	 * (boolean)
-	 */
 	@Override
 	public IRemoteProcessBuilder redirectErrorStream(boolean redirectErrorStream) {
 		this.fRedirectErrorStream = redirectErrorStream;
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#start()
-	 */
 	@Override
 	public IRemoteProcess start() throws IOException {
 		return start(NONE);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#start(int)
-	 */
 	/**
 	 * @since 5.0
 	 */
 	@Override
 	public abstract IRemoteProcess start(int flags) throws IOException;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#toString()
-	 */
 	@Override
 	public String toString() {
 		StringBuilder res = new StringBuilder();
@@ -184,11 +115,6 @@
 		return res.toString();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#getRemoteConnection()
-	 */
 	/**
 	 * @since 2.0
 	 */
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteProcessAdapter.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteProcessAdapter.java
index a3f6dea..bce6208 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteProcessAdapter.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/core/RemoteProcessAdapter.java
@@ -27,62 +27,32 @@
 		fProcess = process;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#destroy()
-	 */
 	@Override
 	public void destroy() {
 		fProcess.destroy();
 
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#exitValue()
-	 */
 	@Override
 	public int exitValue() {
 		return fProcess.exitValue();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getErrorStream()
-	 */
 	@Override
 	public InputStream getErrorStream() {
 		return fProcess.getErrorStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getInputStream()
-	 */
 	@Override
 	public InputStream getInputStream() {
 		return fProcess.getInputStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getOutputStream()
-	 */
 	@Override
 	public OutputStream getOutputStream() {
 		return fProcess.getOutputStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#waitFor()
-	 */
 	@Override
 	public int waitFor() throws InterruptedException {
 		return fProcess.waitFor();
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnection.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnection.java
index 3812e18..d19fd3d 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnection.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnection.java
@@ -52,21 +52,11 @@
 		this.name = name;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getConnectionType()
-	 */
 	@Override
 	public IRemoteConnectionType getConnectionType() {
 		return connectionType;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getService(java.lang.Class)
-	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public <T extends Service> T getService(Class<T> service) {
@@ -81,21 +71,11 @@
 		return obj;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#hasService(java.lang.Class)
-	 */
 	@Override
 	public <T extends Service> boolean hasService(Class<T> service) {
 		return servicesMap.get(service.getName()) != null || connectionType.hasConnectionService(service);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getName()
-	 */
 	@Override
 	public String getName() {
 		return name;
@@ -146,21 +126,11 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getAttribute(java.lang.String)
-	 */
 	@Override
 	public String getAttribute(String key) {
 		return getPreferences().get(key, EMPTY_STRING);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getSecureAttribute(java.lang.String)
-	 */
 	@Override
 	public String getSecureAttribute(String key) {
 		try {
@@ -171,21 +141,11 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getWorkingCopy()
-	 */
 	@Override
 	public IRemoteConnectionWorkingCopy getWorkingCopy() {
 		return new RemoteConnectionWorkingCopy(this);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getProperty(java.lang.String)
-	 */
 	@Override
 	public String getProperty(String key) {
 		IRemoteConnectionPropertyService propertyService = getService(IRemoteConnectionPropertyService.class);
@@ -196,11 +156,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#open(org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void open(IProgressMonitor monitor) throws RemoteConnectionException {
 		IRemoteConnectionControlService controlService = getService(IRemoteConnectionControlService.class);
@@ -209,11 +164,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#close()
-	 */
 	@Override
 	public void close() {
 		IRemoteConnectionControlService controlService = getService(IRemoteConnectionControlService.class);
@@ -222,11 +172,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#isOpen()
-	 */
 	@Override
 	public boolean isOpen() {
 		IRemoteConnectionControlService controlService = getService(IRemoteConnectionControlService.class);
@@ -238,36 +183,16 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteConnection#addConnectionChangeListener(org.eclipse.remote.core.IRemoteConnectionChangeListener
-	 * )
-	 */
 	@Override
 	public void addConnectionChangeListener(IRemoteConnectionChangeListener listener) {
 		fListeners.add(listener);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteConnection#removeConnectionChangeListener(org.eclipse.remote.core.
-	 * IRemoteConnectionChangeListener
-	 * )
-	 */
 	@Override
 	public void removeConnectionChangeListener(IRemoteConnectionChangeListener listener) {
 		fListeners.remove(listener);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#fireConnectionChangeEvent(int)
-	 */
 	@Override
 	public void fireConnectionChangeEvent(final int type) {
 		RemoteConnectionChangeEvent event = new RemoteConnectionChangeEvent(this, type);
@@ -278,11 +203,6 @@
 		connectionType.getRemoteServicesManager().fireRemoteConnectionChangeEvent(event);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Object#toString()
-	 */
 	@Override
 	public String toString() {
 		return name + " - " + connectionType.getName(); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionType.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionType.java
index 2b02780..e1d9881 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionType.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionType.java
@@ -87,41 +87,21 @@
 		return remoteServicesManager.getSecurePreferenceNode().node(id);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getRemoteServicesManager()
-	 */
 	@Override
 	public IRemoteServicesManager getRemoteServicesManager() {
 		return remoteServicesManager;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getId()
-	 */
 	@Override
 	public String getId() {
 		return id;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getName()
-	 */
 	@Override
 	public String getName() {
 		return name;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getScheme()
-	 */
 	@Override
 	public String getScheme() {
 		return scheme;
@@ -142,11 +122,6 @@
 		return canRemove;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getService(java.lang.Class)
-	 */
 	@Override
 	public  <T extends Service> T getService(Class<T> service) {
 		synchronized (serviceDefinitionMap) {
@@ -177,11 +152,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#hasService(java.lang.Class)
-	 */
 	@Override
 	public <T extends Service> boolean hasService(Class<T> service) {
 		synchronized (serviceDefinitionMap) {
@@ -224,11 +194,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#hasConnectionService(java.lang.Class)
-	 */
 	@Override
 	public <T extends IRemoteConnection.Service> boolean hasConnectionService(Class<T> service) {
 		synchronized (connectionServiceDefinitionMap) {
@@ -270,11 +235,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#hasProcessService(java.lang.Class)
-	 */
 	@Override
 	public <T extends IRemoteProcess.Service> boolean hasProcessService(Class<T> service) {
 		synchronized (processServiceDefinitionMap) {
@@ -327,11 +287,6 @@
 		remoteServicesManager.fireRemoteConnectionChangeEvent(event);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getConnection(java.lang.String)
-	 */
 	@Override
 	public IRemoteConnection getConnection(String name) {
 		synchronized (connections) {
@@ -357,11 +312,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#getConnections()
-	 */
 	@Override
 	public List<IRemoteConnection> getConnections() {
 		synchronized (connections) {
@@ -369,11 +319,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#newConnection(java.lang.String)
-	 */
 	@Override
 	public IRemoteConnectionWorkingCopy newConnection(String name) throws RemoteConnectionException {
 		synchronized (connections) {
@@ -396,11 +341,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionType#removeConnection(org.eclipse.remote.core.IRemoteConnection)
-	 */
 	@Override
 	public void removeConnection(IRemoteConnection connection) throws RemoteConnectionException {
 		synchronized (connections) {
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionWorkingCopy.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionWorkingCopy.java
index 33a6f44..104f8f0 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionWorkingCopy.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteConnectionWorkingCopy.java
@@ -55,11 +55,6 @@
 		this.connectionType = (RemoteConnectionType) original.getConnectionType();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getName()
-	 */
 	@Override
 	public String getName() {
 		if (newName != null) {
@@ -73,11 +68,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setName(java.lang.String)
-	 */
 	@Override
 	public void setName(String name) {
 		// set it only if it's changed
@@ -86,11 +76,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getAttribute(java.lang.String)
-	 */
 	@Override
 	public String getAttribute(String key) {
 		String value = newAttributes.get(key);
@@ -105,11 +90,6 @@
 		return RemoteConnection.EMPTY_STRING;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setAttribute(java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void setAttribute(String key, String value) {
 		// set only if it's changed or value is null
@@ -118,11 +98,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getSecureAttribute(java.lang.String)
-	 */
 	@Override
 	public String getSecureAttribute(String key) {
 		String value = newSecureAttributes.get(key);
@@ -137,11 +112,6 @@
 		return RemoteConnection.EMPTY_STRING;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setSecureAttribute(java.lang.String, java.lang.String)
-	 */
 	@Override
 	public void setSecureAttribute(String key, String value) {
 		// set only if it's changed or value is null
@@ -150,13 +120,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteConnection#addConnectionChangeListener(org.eclipse.remote.core.IRemoteConnectionChangeListener
-	 * )
-	 */
 	@Override
 	public void addConnectionChangeListener(IRemoteConnectionChangeListener listener) {
 		if (original != null) {
@@ -166,13 +129,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteConnection#removeConnectionChangeListener(org.eclipse.remote.core.IRemoteConnectionChangeListener
-	 * )
-	 */
 	@Override
 	public void removeConnectionChangeListener(IRemoteConnectionChangeListener listener) {
 		if (original != null) {
@@ -182,11 +138,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#fireConnectionChangeEvent(int)
-	 */
 	@Override
 	public void fireConnectionChangeEvent(int type) {
 		if (original != null && type != RemoteConnectionChangeEvent.CONNECTION_RENAMED) {
@@ -200,41 +151,21 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getConnectionType()
-	 */
 	@Override
 	public IRemoteConnectionType getConnectionType() {
 		return connectionType;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getWorkingCopy()
-	 */
 	@Override
 	public IRemoteConnectionWorkingCopy getWorkingCopy() {
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getService(java.lang.Class)
-	 */
 	@Override
 	public <T extends Service> T getService(Class<T> service) {
 		return connectionType.getConnectionService(this, service);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#hasService(java.lang.Class)
-	 */
 	@Override
 	public <T extends Service> boolean hasService(Class<T> service) {
 		if (original != null) {
@@ -244,31 +175,16 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#getOriginal()
-	 */
 	@Override
 	public IRemoteConnection getOriginal() {
 		return original;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#isDirty()
-	 */
 	@Override
 	public boolean isDirty() {
 		return newName != null || !newAttributes.isEmpty() || !newSecureAttributes.isEmpty();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#save()
-	 */
 	@Override
 	public IRemoteConnection save() throws RemoteConnectionException {
 		if (newName != null && original != null) {
@@ -336,11 +252,6 @@
 		return original;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#open(org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void open(IProgressMonitor monitor) throws RemoteConnectionException {
 		if (original != null) {
@@ -354,11 +265,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#close()
-	 */
 	@Override
 	public void close() {
 		if (original != null) {
@@ -372,11 +278,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#isOpen()
-	 */
 	@Override
 	public boolean isOpen() {
 		if (original != null) {
@@ -392,11 +293,6 @@
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteConnection#getProperty(java.lang.String)
-	 */
 	@Override
 	public String getProperty(String key) {
 		if (original != null) {
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteCorePlugin.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteCorePlugin.java
index bc564fa..c7b93d2 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteCorePlugin.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteCorePlugin.java
@@ -100,11 +100,6 @@
 	public RemoteCorePlugin() {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
@@ -135,11 +130,6 @@
 		});
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		Preferences.savePreferences();
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteDebugOptions.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteDebugOptions.java
index 066e25e..6ed2106 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteDebugOptions.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteDebugOptions.java
@@ -50,11 +50,6 @@
 		context.registerService(DebugOptionsListener.class.getName(), this, props);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.osgi.service.debug.DebugOptionsListener#optionsChanged(org.eclipse.osgi.service.debug.DebugOptions)
-	 */
 	@Override
 	public void optionsChanged(DebugOptions options) {
 		fDebugOptions = options;
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteProcess.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteProcess.java
index 67c7da4..8b00ab7 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteProcess.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteProcess.java
@@ -36,11 +36,6 @@
 		this.builder = builder;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#destroy()
-	 */
 	@Override
 	public void destroy() {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -49,11 +44,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#exitValue()
-	 */
 	@Override
 	public int exitValue() {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -63,11 +53,6 @@
 		return 0;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getErrorStream()
-	 */
 	@Override
 	public InputStream getErrorStream() {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -77,11 +62,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getInputStream()
-	 */
 	@Override
 	public InputStream getInputStream() {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -91,11 +71,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getOutputStream()
-	 */
 	@Override
 	public OutputStream getOutputStream() {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -130,11 +105,6 @@
 		return servicesMap.get(service.getName()) != null || getConnectionType().hasProcessService(service);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#waitFor()
-	 */
 	@Override
 	public int waitFor() throws InterruptedException {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -144,11 +114,6 @@
 		return 0;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcess#isCompleted()
-	 */
 	@Override
 	public boolean isCompleted() {
 		IRemoteProcessControlService controlService = getService(IRemoteProcessControlService.class);
@@ -161,21 +126,11 @@
 	/**
 	 * @since 2.0
 	 */
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcess#getRemoteConnection()
-	 */
 	@Override
 	public IRemoteConnection getRemoteConnection() {
 		return connection;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcess#getProcessBuilder()
-	 */
 	@Override
 	public IRemoteProcessBuilder getProcessBuilder() {
 		return builder;
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteServicesManager.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteServicesManager.java
index 0211841..da437f6 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteServicesManager.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/RemoteServicesManager.java
@@ -110,54 +110,29 @@
 		return SecurePreferencesFactory.getDefault().node(RemoteCorePlugin.getUniqueIdentifier()).node("connections"); //$NON-NLS-1$
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getConnectionType(java.lang.String)
-	 */
 	@Override
 	public IRemoteConnectionType getConnectionType(String id) {
 		init();
 		return connectionTypeMap.get(id);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getConnectionType(java.net.URI)
-	 */
 	@Override
 	public IRemoteConnectionType getConnectionType(URI uri) {
 		init();
 		return schemeMap.get(uri.getScheme());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getLocalConnectionType()
-	 */
 	@Override
 	public IRemoteConnectionType getLocalConnectionType() {
 		return getConnectionType(LOCAL_SERVICES_ID);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getAllConnectionTypes()
-	 */
 	@Override
 	public List<IRemoteConnectionType> getAllConnectionTypes() {
 		init();
 		return new ArrayList<IRemoteConnectionType>(connectionTypeMap.values());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getConnectionTypesSupporting(java.lang.Class[])
-	 */
 	@Override
 	@SafeVarargs
 	public final List<IRemoteConnectionType> getConnectionTypesSupporting(Class<? extends IRemoteConnection.Service>... services) {
@@ -173,11 +148,6 @@
 		return connTypes;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getConnectionTypesByService(java.lang.Class[])
-	 */
 	@Override
 	@SafeVarargs
 	public final List<IRemoteConnectionType> getConnectionTypesByService(Class<? extends IRemoteConnectionType.Service>... services) {
@@ -193,11 +163,6 @@
 		return connTypes;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getRemoteConnectionTypes()
-	 */
 	@Override
 	public List<IRemoteConnectionType> getRemoteConnectionTypes() {
 		init();
@@ -211,11 +176,6 @@
 		return connTypes;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#getAllRemoteConnections()
-	 */
 	@Override
 	public List<IRemoteConnection> getAllRemoteConnections() {
 		List<IRemoteConnection> connections = new ArrayList<>();
@@ -225,12 +185,6 @@
 		return connections;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#addRemoteConnectionChangeListener(org.eclipse.remote.core.
-	 * IRemoteConnectionChangeListener)
-	 */
 	@Override
 	public void addRemoteConnectionChangeListener(IRemoteConnectionChangeListener listener) {
 		synchronized (listeners) {
@@ -238,12 +192,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#removeRemoteConnectionChangeListener(org.eclipse.remote.core.
-	 * IRemoteConnectionChangeListener)
-	 */
 	@Override
 	public void removeRemoteConnectionChangeListener(IRemoteConnectionChangeListener listener) {
 		synchronized (listeners) {
@@ -251,12 +199,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteServicesManager#fireRemoteConnectionChangeEvent(org.eclipse.remote.core.
-	 * RemoteConnectionChangeEvent)
-	 */
 	@Override
 	public void fireRemoteConnectionChangeEvent(RemoteConnectionChangeEvent event) {
 		List<IRemoteConnectionChangeListener> iListeners;
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcess.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcess.java
index b2d40f7..f930e57 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcess.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcess.java
@@ -36,12 +36,6 @@
 	private volatile boolean isCompleted;
 
 	public static class Factory implements IRemoteProcess.Service.Factory {
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.remote.core.IRemoteProcess.Service.Factory#getService(org.eclipse.remote.core.IRemoteProcess,
-		 * java.lang.Class)
-		 */
 		@SuppressWarnings("unchecked")
 		@Override
 		public <T extends IRemoteProcess.Service> T getService(IRemoteProcess remoteProcess, Class<T> service) {
@@ -161,71 +155,36 @@
 		completedChecker.start();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#destroy()
-	 */
 	@Override
 	public void destroy() {
 		localProcess.destroy();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#exitValue()
-	 */
 	@Override
 	public int exitValue() {
 		return localProcess.exitValue();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getErrorStream()
-	 */
 	@Override
 	public InputStream getErrorStream() {
 		return procStderr;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getInputStream()
-	 */
 	@Override
 	public InputStream getInputStream() {
 		return procStdout;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getOutputStream()
-	 */
 	@Override
 	public OutputStream getOutputStream() {
 		return localProcess.getOutputStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#waitFor()
-	 */
 	@Override
 	public int waitFor() throws InterruptedException {
 		return localProcess.waitFor();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.RemoteProcess#isCompleted()
-	 */
 	@Override
 	public boolean isCompleted() {
 		return isCompleted;
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcessBuilder.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcessBuilder.java
index e5474a6..7801577 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcessBuilder.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalProcessBuilder.java
@@ -59,11 +59,6 @@
 		this(connection, Arrays.asList(command));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.AbstractRemoteProcessBuilder#directory()
-	 */
 	@Override
 	public IFileStore directory() {
 		IFileStore dir = super.directory();
@@ -77,34 +72,16 @@
 		return dir;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.AbstractRemoteProcessBuilder#environment()
-	 */
 	@Override
 	public Map<String, String> environment() {
 		return fRemoteEnv;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.AbstractRemoteProcessBuilder#getSupportedFlags
-	 * ()
-	 */
 	@Override
 	public int getSupportedFlags() {
 		return NONE;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#start(int)
-	 */
 	@Override
 	public IRemoteProcess start(int flags) throws IOException {
 		String commandArray[] = command().toArray(new String[0]);
diff --git a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalResource.java b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalResource.java
index a66f9a3..be5892b 100644
--- a/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalResource.java
+++ b/bundles/org.eclipse.remote.core/src/org/eclipse/remote/internal/core/services/local/LocalResource.java
@@ -24,41 +24,21 @@
 		fResource = resource;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteResource#getDefaultLocationURI(org.eclipse.core.resources.IResource)
-	 */
 	@Override
 	public URI getActiveLocationURI() {
 		return fResource.getLocationURI();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteResource#getResource()
-	 */
 	@Override
 	public IResource getResource() {
 		return fResource;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteResource#refresh(org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void refresh(IProgressMonitor monitor) throws CoreException {
 		fResource.refreshLocal(IResource.DEPTH_INFINITE, monitor);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteResource#setResource(org.eclipse.core.resources.IResource)
-	 */
 	@Override
 	public void setResource(IResource resource) {
 		fResource = resource;
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/Activator.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/Activator.java
index e1473ad..4a7bd5a 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/Activator.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/Activator.java
@@ -94,13 +94,6 @@
 		return fJSchService;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
@@ -109,13 +102,6 @@
 		fJSchService = context.getService(reference);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchCommandShellService.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchCommandShellService.java
index ced15b4..faff07d 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchCommandShellService.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchCommandShellService.java
@@ -34,12 +34,6 @@
 	}
 
 	public static class Factory implements IRemoteConnection.Service.Factory {
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see org.eclipse.remote.core.IRemoteConnection.Service.Factory#getService(org.eclipse.remote.core.IRemoteConnection,
-		 * java.lang.Class)
-		 */
 		@Override
 		@SuppressWarnings("unchecked")
 		public <T extends IRemoteConnection.Service> T getService(IRemoteConnection connection, Class<T> service) {
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnection.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnection.java
index 7388c46..54488b9 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnection.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnection.java
@@ -106,23 +106,12 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnection.Service#getRemoteConnection()
-	 */
 	@Override
 	public IRemoteConnection getRemoteConnection() {
 		return fRemoteConnection;
 	}
 
 	public static class Factory implements IRemoteConnection.Service.Factory {
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see org.eclipse.remote.core.IRemoteConnection.Service.Factory#getService(org.eclipse.remote.core.IRemoteConnection,
-		 * java.lang.Class)
-		 */
 		@Override
 		@SuppressWarnings("unchecked")
 		public <T extends IRemoteConnection.Service> T getService(IRemoteConnection connection, Class<T> service) {
@@ -206,11 +195,6 @@
 		fSessions.clear();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionControlService#close()
-	 */
 	@Override
 	public synchronized void close() {
 		cleanup();
@@ -233,11 +217,6 @@
 		return exec.setCommand(cmd).getResult(monitor).trim();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemotePortForwardingService#forwardLocalPort(int, java.lang.String, int)
-	 */
 	@Override
 	public void forwardLocalPort(int localPort, String fwdAddress, int fwdPort) throws RemoteConnectionException {
 		if (!isOpen()) {
@@ -250,12 +229,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemotePortForwardingService#forwardLocalPort(java.lang.String, int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public int forwardLocalPort(String fwdAddress, int fwdPort, IProgressMonitor monitor) throws RemoteConnectionException {
 		if (!isOpen()) {
@@ -286,11 +259,6 @@
 		return -1;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemotePortForwardingService#forwardRemotePort(int, java.lang.String, int)
-	 */
 	@Override
 	public void forwardRemotePort(int remotePort, String fwdAddress, int fwdPort) throws RemoteConnectionException {
 		if (!isOpen()) {
@@ -303,12 +271,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemotePortForwardingService#forwardRemotePort(java.lang.String, int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public int forwardRemotePort(String fwdAddress, int fwdPort, IProgressMonitor monitor) throws RemoteConnectionException {
 		if (!isOpen()) {
@@ -338,11 +300,6 @@
 		return -1;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionHostService#getHostname()
-	 */
 	@Override
 	public String getHostname() {
 		return fRemoteConnection.getAttribute(ADDRESS_ATTR);
@@ -363,21 +320,11 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteProcessService#getEnv()
-	 */
 	@Override
 	public Map<String, String> getEnv() {
 		return Collections.unmodifiableMap(fEnv);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteProcessService#getEnv(java.lang.String)
-	 */
 	@Override
 	public String getEnv(String name) {
 		return getEnv().get(name);
@@ -423,22 +370,12 @@
 		return fRemoteConnection.getSecureAttribute(PASSWORD_ATTR);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionHostService#getPort()
-	 */
 	@Override
 	public int getPort() {
 		String portStr = fRemoteConnection.getAttribute(PORT_ATTR);
 		return !portStr.isEmpty() ? Integer.parseInt(portStr) : DEFAULT_PORT;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteProcessService#getProcessBuilder(java.util.List)
-	 */
 	@Override
 	public IRemoteProcessBuilder getProcessBuilder(List<String> command) {
 		if (!isOpen()) {
@@ -447,11 +384,6 @@
 		return new JSchProcessBuilder(getRemoteConnection(), command);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteProcessService#getProcessBuilder(java.lang.String[])
-	 */
 	@Override
 	public IRemoteProcessBuilder getProcessBuilder(String... command) {
 		if (!isOpen()) {
@@ -460,11 +392,6 @@
 		return new JSchProcessBuilder(getRemoteConnection(), command);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionPropertyService#getProperty(java.lang.String)
-	 */
 	@Override
 	public String getProperty(String key) {
 		return fProperties.get(key);
@@ -564,21 +491,11 @@
 		return !str.isEmpty() ? Integer.parseInt(str) : DEFAULT_TIMEOUT;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionHostService#getUsername()
-	 */
 	@Override
 	public String getUsername() {
 		return fRemoteConnection.getAttribute(USERNAME_ATTR);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteProcessService#getWorkingDirectory()
-	 */
 	@Override
 	public String getWorkingDirectory() {
 		if (!isOpen()) {
@@ -608,11 +525,6 @@
 		return hasOpenSession;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionControlService#isOpen()
-	 */
 	@Override
 	public boolean isOpen() {
 		return hasOpenSession() && isFullySetup;
@@ -804,11 +716,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionControlService#open(org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void open(IProgressMonitor monitor) throws RemoteConnectionException {
 		open(monitor, true);
@@ -871,11 +778,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemotePortForwardingService#removeLocalPortForwarding(int)
-	 */
 	@Override
 	public void removeLocalPortForwarding(int port) throws RemoteConnectionException {
 		if (!isOpen()) {
@@ -888,11 +790,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemotePortForwardingService#removeRemotePortForwarding(int)
-	 */
 	@Override
 	public void removeRemotePortForwarding(int port) throws RemoteConnectionException {
 		if (!isOpen()) {
@@ -905,11 +802,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteProcessService#setWorkingDirectory(java.lang.String)
-	 */
 	@Override
 	public void setWorkingDirectory(String path) {
 		if (RemoteServicesUtils.posixPath(path).isAbsolute()) {
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnectionProxyFactory.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnectionProxyFactory.java
index 206ea1b..4a49961 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnectionProxyFactory.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchConnectionProxyFactory.java
@@ -58,21 +58,11 @@
 			this.monitor = monitor;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#close()
-		 */
 		@Override
 		public void close() {
 			process.destroy();
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#connect(com.jcraft.jsch.SocketFactory, java.lang.String, int, int)
-		 */
 		@Override
 		public void connect(SocketFactory socket_factory, String host, int port, int timeout) throws IOException {
 			assert !connectCalled : "connect should only be called once"; //$NON-NLS-1$
@@ -167,31 +157,16 @@
 			}.start();
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#getInputStream()
-		 */
 		@Override
 		public InputStream getInputStream() {
 			return process.getInputStream();
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#getOutputStream()
-		 */
 		@Override
 		public OutputStream getOutputStream() {
 			return process.getOutputStream();
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#getSocket()
-		 */
 		@Override
 		public Socket getSocket() {
 			return null;
@@ -212,21 +187,11 @@
 			this.monitor = monitor;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#close()
-		 */
 		@Override
 		public void close() {
 			channel.disconnect();
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#connect(com.jcraft.jsch.SocketFactory, java.lang.String, int, int)
-		 */
 		@Override
 		public void connect(SocketFactory socket_factory, String host, int port, int timeout) throws Exception {
 			assert !connectCalled : "connect should only be called once"; //$NON-NLS-1$
@@ -244,11 +209,6 @@
 			}
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#getInputStream()
-		 */
 		@Override
 		public InputStream getInputStream() {
 			try {
@@ -259,11 +219,6 @@
 			}
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#getOutputStream()
-		 */
 		@Override
 		public OutputStream getOutputStream() {
 			try {
@@ -274,11 +229,6 @@
 			}
 		}
 
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see com.jcraft.jsch.Proxy#getSocket()
-		 */
 		@Override
 		public Socket getSocket() {
 			return null;
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchFileSystem.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchFileSystem.java
index 2343b18..74f8296 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchFileSystem.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchFileSystem.java
@@ -68,53 +68,27 @@
 		super();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.IFileSystem#attributes()
-	 */
 	@Override
 	public int attributes() {
 		// Attributes supported by JSch IFileService
 		return EFS.ATTRIBUTE_READ_ONLY | EFS.ATTRIBUTE_EXECUTABLE | EFS.ATTRIBUTE_SYMLINK | EFS.ATTRIBUTE_LINK_TARGET;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#canDelete()
-	 */
 	@Override
 	public boolean canDelete() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#canWrite()
-	 */
 	@Override
 	public boolean canWrite() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#getStore(org.eclipse.core.runtime.IPath)
-	 */
 	@Override
 	public IFileStore getStore(IPath path) {
 		return EFS.getNullFileSystem().getStore(path);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.core.filesystem.provider.FileSystem#getStore(java.net.URI)
-	 */
 	@Override
 	public IFileStore getStore(URI uri) {
 		try {
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java
index f024b78..ce1b373 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchProcess.java
@@ -44,12 +44,6 @@
 	private Thread fStderrReader;
 
 	public static class Factory implements IRemoteProcess.Service.Factory {
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.remote.core.IRemoteProcess.Service.Factory#getService(org.eclipse.remote.core.IRemoteProcess,
-		 * java.lang.Class)
-		 */
 		@SuppressWarnings("unchecked")
 		@Override
 		public <T extends IRemoteProcess.Service> T getService(IRemoteProcess remoteProcess, Class<T> service) {
@@ -146,21 +140,11 @@
 
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#destroy()
-	 */
 	@Override
 	public void destroy() {
 		fChannel.disconnect();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#exitValue()
-	 */
 	@Override
 	public int exitValue() {
 		if(!isCompleted()) {
@@ -169,31 +153,16 @@
 		return fChannel.getExitStatus();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getErrorStream()
-	 */
 	@Override
 	public InputStream getErrorStream() {
 		return fProcStderr;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getInputStream()
-	 */
 	@Override
 	public InputStream getInputStream() {
 		return fProcStdout;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getOutputStream()
-	 */
 	@Override
 	public OutputStream getOutputStream() {
 		try {
@@ -203,11 +172,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#waitFor()
-	 */
 	@Override
 	public int waitFor() throws InterruptedException {
 		while (!isCompleted()) {
@@ -216,31 +180,16 @@
 		return exitValue();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.RemoteProcess#isCompleted()
-	 */
 	@Override
 	public boolean isCompleted() {
 		return fChannel.isClosed();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcess.Service#getRemoteProcess()
-	 */
 	@Override
 	public IRemoteProcess getRemoteProcess() {
 		return fProcess;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessTerminalService#setTerminalSize(int, int, int, int)
-	 */
 	@Override
 	public void setTerminalSize(int cols, int rows, int width, int height) {
 		if (fChannel instanceof ChannelExec) {
@@ -250,11 +199,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessSignalService#sendSignal(int)
-	 */
 	@Override
 	public void sendSignal(int signal) throws RemoteConnectionException {
 		if (signal >= 0 && signal <= USR2) {
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchUserInfo.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchUserInfo.java
index 3ab7bd6..0d29a64 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchUserInfo.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JSchUserInfo.java
@@ -40,11 +40,6 @@
 		this.userAuthenticatorService = userAuthenticatorService;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UserInfo#getPassphrase()
-	 */
 	@Override
 	public String getPassphrase() {
 		if (logging) {
@@ -53,11 +48,6 @@
 		return hostService.getPassphrase();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UserInfo#getPassword()
-	 */
 	@Override
 	public String getPassword() {
 		if (logging) {
@@ -66,12 +56,6 @@
 		return hostService.getPassword();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UIKeyboardInteractive#promptKeyboardInteractive(java.lang.String, java.lang.String,
-	 * java.lang.String, java.lang.String[], boolean[])
-	 */
 	@Override
 	public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt,
 			boolean[] echo) {
@@ -94,11 +78,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UserInfo#promptPassphrase(java.lang.String)
-	 */
 	@Override
 	public boolean promptPassphrase(String message) {
 		if (logging) {
@@ -120,11 +99,6 @@
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UserInfo#promptPassword(java.lang.String)
-	 */
 	@Override
 	public boolean promptPassword(String message) {
 		if (logging) {
@@ -142,11 +116,6 @@
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UserInfo#promptYesNo(java.lang.String)
-	 */
 	@Override
 	public boolean promptYesNo(String message) {
 		if (logging) {
@@ -161,11 +130,6 @@
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see com.jcraft.jsch.UserInfo#showMessage(java.lang.String)
-	 */
 	@Override
 	public void showMessage(String message) {
 		if (logging) {
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java
index 3712aee..9a1fa33 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/JschFileStore.java
@@ -96,12 +96,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#childInfos(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileInfo[] childInfos(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -110,12 +104,6 @@
 		return command.getResult(subMon.newChild(9));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#childNames(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public String[] childNames(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -127,12 +115,6 @@
 		return names;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#delete(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void delete(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 20);
@@ -144,12 +126,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#fetchInfo(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -158,23 +134,12 @@
 		return command.getResult(subMon.newChild(9));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.core.filesystem.provider.FileStore#getChild(java.lang.String)
-	 */
 	@Override
 	public IFileStore getChild(String name) {
 		URI uri = JSchFileSystem.getURIFor(JSchFileSystem.getConnectionNameFor(fURI), fRemotePath.append(name).toString());
 		return JschFileStore.getInstance(uri);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getName()
-	 */
 	@Override
 	public String getName() {
 		return getNameFromPath(fRemotePath);
@@ -194,11 +159,6 @@
 		return path.lastSegment();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getParent()
-	 */
 	@Override
 	public IFileStore getParent() {
 		if (fRemotePath.isRoot()) {
@@ -211,12 +171,6 @@
 		return JschFileStore.getInstance(JSchFileSystem.getURIFor(JSchFileSystem.getConnectionNameFor(fURI), parentPath));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#mkdir(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 20);
@@ -259,12 +213,6 @@
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#openInputStream(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 30);
@@ -285,12 +233,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#openOutputStream(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 30);
@@ -307,13 +249,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.core.filesystem.provider.FileStore#putInfo(org.eclipse.core
-	 * .filesystem.IFileInfo, int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void putInfo(IFileInfo info, int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -322,11 +257,6 @@
 		command.getResult(subMon.newChild(9));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#toURI()
-	 */
 	@Override
 	public URI toURI() {
 		return fURI;
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/AbstractRemoteCommand.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/AbstractRemoteCommand.java
index 14d21a4..ae41cd1 100755
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/AbstractRemoteCommand.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/AbstractRemoteCommand.java
@@ -120,11 +120,6 @@
 			return fPool.submit(this);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.util.concurrent.Callable#call()
-		 */
 		@Override
 		public abstract T1 call() throws JSchException, IOException, RemoteConnectionException;
 
@@ -192,11 +187,6 @@
 			return fPool.submit(this);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see java.util.concurrent.Callable#call()
-		 */
 		@Override
 		public abstract T1 call() throws JSchException, SftpException, IOException;
 
diff --git a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/GetInputStreamCommand.java b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/GetInputStreamCommand.java
index aa55234..de0da0d 100644
--- a/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/GetInputStreamCommand.java
+++ b/bundles/org.eclipse.remote.jsch.core/src/org/eclipse/remote/internal/jsch/core/commands/GetInputStreamCommand.java
@@ -68,11 +68,6 @@
 					return stream.read();
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#close()
-				 */
 				@Override
 				public void close() throws IOException {
 					stream.close();
@@ -85,71 +80,36 @@
 					}
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#read(byte[])
-				 */
 				@Override
 				public int read(byte[] b) throws IOException {
 					return stream.read(b);
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#read(byte[], int, int)
-				 */
 				@Override
 				public int read(byte[] b, int off, int len) throws IOException {
 					return stream.read(b, off, len);
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#skip(long)
-				 */
 				@Override
 				public long skip(long n) throws IOException {
 					return stream.skip(n);
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#available()
-				 */
 				@Override
 				public int available() throws IOException {
 					return stream.available();
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#mark(int)
-				 */
 				@Override
 				public synchronized void mark(int readlimit) {
 					stream.mark(readlimit);
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#reset()
-				 */
 				@Override
 				public synchronized void reset() throws IOException {
 					stream.reset();
 				}
 
-				/*
-				 * (non-Javadoc)
-				 * 
-				 * @see java.io.InputStream#markSupported()
-				 */
 				@Override
 				public boolean markSupported() {
 					return stream.markSupported();
diff --git a/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/Activator.java b/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/Activator.java
index d07e0ea..def2f47 100644
--- a/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/Activator.java
+++ b/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/Activator.java
@@ -97,13 +97,6 @@
 		return fJSchService;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
@@ -113,13 +106,6 @@
 		getImageRegistry().put(IMG_CONNECTION_TYPE, imageDescriptorFromPlugin(PLUGIN_ID, "/icons/ssh.png")); //$NON-NLS-1$
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/JSchFileSystemContributor.java b/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/JSchFileSystemContributor.java
index 667f024..4c208b2 100644
--- a/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/JSchFileSystemContributor.java
+++ b/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/JSchFileSystemContributor.java
@@ -37,13 +37,6 @@
 import org.eclipse.ui.ide.fileSystem.FileSystemContributor;
 
 public class JSchFileSystemContributor extends FileSystemContributor {
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.ide.fileSystem.FileSystemContributor#browseFileSystem(
-	 * java.lang.String, org.eclipse.swt.widgets.Shell)
-	 */
 	@Override
 	public URI browseFileSystem(String initialPath, Shell shell) {
 		IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class);
@@ -61,13 +54,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.ide.fileSystem.FileSystemContributor#getURI(java.lang.
-	 * String)
-	 */
 	@Override
 	public URI getURI(String string) {
 		try {
diff --git a/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/wizards/JSchConnectionPage.java b/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/wizards/JSchConnectionPage.java
index 594c7de..d1aa0a8 100755
--- a/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/wizards/JSchConnectionPage.java
+++ b/bundles/org.eclipse.remote.jsch.ui/src/org/eclipse/remote/internal/jsch/ui/wizards/JSchConnectionPage.java
@@ -152,11 +152,6 @@
 		fUseLoginShellButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
 		fUseLoginShellButton.addSelectionListener(new SelectionAdapter() {
 
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				validateFields();
diff --git a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/Activator.java b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/Activator.java
index 38fe3c1..46162ec 100644
--- a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/Activator.java
+++ b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/Activator.java
@@ -88,26 +88,12 @@
 		return ref != null ? context.getService(ref) : null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyConnection.java b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyConnection.java
index 20a0cfc..a862c32 100644
--- a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyConnection.java
+++ b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyConnection.java
@@ -95,23 +95,12 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnection.Service#getRemoteConnection()
-	 */
 	@Override
 	public IRemoteConnection getRemoteConnection() {
 		return fRemoteConnection;
 	}
 
 	public static class Factory implements IRemoteConnection.Service.Factory {
-		/*
-		 * (non-Javadoc)
-		 *
-		 * @see org.eclipse.remote.core.IRemoteConnection.Service.Factory#getService(org.eclipse.remote.core.IRemoteConnection,
-		 * java.lang.Class)
-		 */
 		@Override
 		@SuppressWarnings("unchecked")
 		public <T extends IRemoteConnection.Service> T getService(IRemoteConnection connection, Class<T> service) {
@@ -142,11 +131,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionControlService#close()
-	 */
 	@Override
 	public synchronized void close() {
 		if (isOpen) {
@@ -156,21 +140,11 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionControlService#isOpen()
-	 */
 	@Override
 	public boolean isOpen() {
 		return isOpen;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 *
-	 * @see org.eclipse.remote.core.IRemoteConnectionControlService#open(org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void open(IProgressMonitor monitor) throws RemoteConnectionException {
 		SubMonitor subMon = SubMonitor.convert(monitor, Messages.ProxyConnection_0, 20);
diff --git a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileStore.java b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileStore.java
index 09ce3a4..2f3dc8f 100644
--- a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileStore.java
+++ b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileStore.java
@@ -92,12 +92,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#childInfos(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileInfo[] childInfos(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -110,12 +104,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#childNames(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public String[] childNames(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -127,12 +115,6 @@
 		return names;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#delete(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void delete(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 20);
@@ -149,12 +131,6 @@
 		subMon.setWorkRemaining(0);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#fetchInfo(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -167,23 +143,12 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.core.filesystem.provider.FileStore#getChild(java.lang.String)
-	 */
 	@Override
 	public IFileStore getChild(String name) {
 		URI uri = ProxyFileSystem.getURIFor(ProxyFileSystem.getConnectionNameFor(fURI), fRemotePath.append(name).toString());
 		return getInstance(uri);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getName()
-	 */
 	@Override
 	public String getName() {
 		return getNameFromPath(fRemotePath);
@@ -203,11 +168,6 @@
 		return path.lastSegment();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getParent()
-	 */
 	@Override
 	public IFileStore getParent() {
 		if (fRemotePath.isRoot()) {
@@ -220,12 +180,6 @@
 		return getInstance(ProxyFileSystem.getURIFor(ProxyFileSystem.getConnectionNameFor(fURI), parentPath));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#mkdir(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 16);
@@ -269,12 +223,6 @@
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#openInputStream(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 20);
@@ -299,12 +247,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#openOutputStream(int,
-	 * org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 20);
@@ -325,13 +267,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.core.filesystem.provider.FileStore#putInfo(org.eclipse.core
-	 * .filesystem.IFileInfo, int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void putInfo(IFileInfo info, int options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor subMon = SubMonitor.convert(monitor, 10);
@@ -344,11 +279,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileStore#toURI()
-	 */
 	@Override
 	public URI toURI() {
 		return fURI;
diff --git a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileSystem.java b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileSystem.java
index e800594..9f7d0e4 100644
--- a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileSystem.java
+++ b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyFileSystem.java
@@ -52,53 +52,27 @@
 		super();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.IFileSystem#attributes()
-	 */
 	@Override
 	public int attributes() {
 		// Attributes supported by JSch IFileService
 		return EFS.ATTRIBUTE_READ_ONLY | EFS.ATTRIBUTE_EXECUTABLE | EFS.ATTRIBUTE_SYMLINK | EFS.ATTRIBUTE_LINK_TARGET;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#canDelete()
-	 */
 	@Override
 	public boolean canDelete() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#canWrite()
-	 */
 	@Override
 	public boolean canWrite() {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#getStore(org.eclipse.core.runtime.IPath)
-	 */
 	@Override
 	public IFileStore getStore(IPath path) {
 		return EFS.getNullFileSystem().getStore(path);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.core.filesystem.provider.FileSystem#getStore(java.net.URI)
-	 */
 	@Override
 	public IFileStore getStore(URI uri) {
 		try {
diff --git a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcess.java b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcess.java
index 95cd5a9..aa97b5e 100644
--- a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcess.java
+++ b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcess.java
@@ -35,12 +35,6 @@
 	private volatile boolean isCompleted;
 	
 	public static class Factory implements IRemoteProcess.Service.Factory {
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.remote.core.IRemoteProcess.Service.Factory#getService(org.eclipse.remote.core.IRemoteProcess,
-		 * java.lang.Class)
-		 */
 		@SuppressWarnings("unchecked")
 		@Override
 		public <T extends IRemoteProcess.Service> T getService(IRemoteProcess remoteProcess, Class<T> service) {
@@ -98,11 +92,6 @@
 		cmdThread.start();
 	}
 	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#destroy()
-	 */
 	@Override
 	public void destroy() {
 		try {
@@ -113,11 +102,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#exitValue()
-	 */
 	@Override
 	public int exitValue() {
 		if (!isCompleted) {
@@ -126,11 +110,6 @@
 		return exitValue;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getErrorStream()
-	 */
 	@Override
 	public InputStream getErrorStream() {
 		if (stdErrChan == null) {
@@ -149,42 +128,22 @@
 		return stdErrChan.getInputStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getInputStream()
-	 */
 	@Override
 	public InputStream getInputStream() {
 		return stdIOChan.getInputStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#getOutputStream()
-	 */
 	@Override
 	public OutputStream getOutputStream() {
 		return stdIOChan.getOutputStream();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see java.lang.Process#waitFor()
-	 */
 	@Override
 	public int waitFor() throws InterruptedException {
 		cmdThread.join();
 		return exitValue;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.RemoteProcess#isCompleted()
-	 */
 	@Override
 	public boolean isCompleted() {
 		return isCompleted;
diff --git a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcessBuilder.java b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcessBuilder.java
index 0241194..352d4cf 100644
--- a/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcessBuilder.java
+++ b/bundles/org.eclipse.remote.proxy.core/src/org/eclipse/remote/internal/proxy/core/ProxyProcessBuilder.java
@@ -56,13 +56,6 @@
 		redirectErrorStream(true);
 	}
 
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.AbstractRemoteProcessBuilder#environment()
-	 */
 	@Override
 	public Map<String, String> environment() {
 		if (remoteEnv == null) {
@@ -71,23 +64,11 @@
 		return remoteEnv;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.AbstractRemoteProcessBuilder#getSupportedFlags
-	 * ()
-	 */
 	@Override
 	public int getSupportedFlags() {
 		return NONE;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.core.IRemoteProcessBuilder#start(int)
-	 */
 	@Override
 	public IRemoteProcess start(int flags) throws IOException {
 		final ProxyConnection conn = getRemoteConnection().getService(ProxyConnection.class);
diff --git a/bundles/org.eclipse.remote.proxy.protocol.core/src/org/eclipse/remote/internal/proxy/protocol/core/Activator.java b/bundles/org.eclipse.remote.proxy.protocol.core/src/org/eclipse/remote/internal/proxy/protocol/core/Activator.java
index b9ec18b..ec612de 100644
--- a/bundles/org.eclipse.remote.proxy.protocol.core/src/org/eclipse/remote/internal/proxy/protocol/core/Activator.java
+++ b/bundles/org.eclipse.remote.proxy.protocol.core/src/org/eclipse/remote/internal/proxy/protocol/core/Activator.java
@@ -88,26 +88,12 @@
 		return ref != null ? context.getService(ref) : null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.remote.proxy.server.core/src/org/eclipse/remote/internal/proxy/server/core/Application.java b/bundles/org.eclipse.remote.proxy.server.core/src/org/eclipse/remote/internal/proxy/server/core/Application.java
index 0ad3110..0e83990 100644
--- a/bundles/org.eclipse.remote.proxy.server.core/src/org/eclipse/remote/internal/proxy/server/core/Application.java
+++ b/bundles/org.eclipse.remote.proxy.server.core/src/org/eclipse/remote/internal/proxy/server/core/Application.java
@@ -19,9 +19,6 @@
 public class Application implements IApplication {
 	private Server server = new Server();
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
-	 */
 	public Object start(IApplicationContext context) throws Exception {
 		String[] args = (String[])context.getArguments().get(IApplicationContext.APPLICATION_ARGS);
 		for (String arg : args) {
@@ -36,9 +33,6 @@
 		return IApplication.EXIT_OK;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.equinox.app.IApplication#stop()
-	 */
 	public void stop() {
 		// Nothing
 	}
diff --git a/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/Activator.java b/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/Activator.java
index 034b8a2..0a54e71 100644
--- a/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/Activator.java
+++ b/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/Activator.java
@@ -97,13 +97,6 @@
 		return fJSchService;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
@@ -113,13 +106,6 @@
 		getImageRegistry().put(IMG_CONNECTION_TYPE, imageDescriptorFromPlugin(PLUGIN_ID, "/icons/ssh.png")); //$NON-NLS-1$
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext
-	 * )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/ProxyFileSystemContributor.java b/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/ProxyFileSystemContributor.java
index 9ab4481..aa08324 100644
--- a/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/ProxyFileSystemContributor.java
+++ b/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/ProxyFileSystemContributor.java
@@ -21,13 +21,6 @@
 import org.eclipse.ui.ide.fileSystem.FileSystemContributor;
 
 public class ProxyFileSystemContributor extends FileSystemContributor {
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.ide.fileSystem.FileSystemContributor#browseFileSystem(
-	 * java.lang.String, org.eclipse.swt.widgets.Shell)
-	 */
 	@Override
 	public URI browseFileSystem(String initialPath, Shell shell) {
 		IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class);
@@ -45,13 +38,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ui.ide.fileSystem.FileSystemContributor#getURI(java.lang.
-	 * String)
-	 */
 	@Override
 	public URI getURI(String string) {
 		try {
diff --git a/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/wizards/ProxyConnectionPage.java b/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/wizards/ProxyConnectionPage.java
index 7ad67bc..3bdbff8 100755
--- a/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/wizards/ProxyConnectionPage.java
+++ b/bundles/org.eclipse.remote.proxy.ui/src/org/eclipse/remote/internal/proxy/ui/wizards/ProxyConnectionPage.java
@@ -138,12 +138,6 @@
 		fDefaultServerButton.setText("Use default server");
 		fDefaultServerButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1));
 		fDefaultServerButton.addSelectionListener(new SelectionAdapter() {
-
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-			 */
 			@Override
 			public void widgetSelected(SelectionEvent e) {
 				validateFields();
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStore.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStore.java
index cb1ace3..08e77da 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStore.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStore.java
@@ -60,12 +60,6 @@
 		fParent = parent;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#fetchDeferredChildren(java.lang.Object,
-	 * org.eclipse.ui.progress.IElementCollector, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void fetchDeferredChildren(Object object, IElementCollector collector, IProgressMonitor monitor) {
 		ArrayList<DeferredFileStore> children = new ArrayList<DeferredFileStore>();
@@ -175,11 +169,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object)
-	 */
 	@Override
 	public Object[] getChildren(Object o) {
 		try {
@@ -205,11 +194,6 @@
 		return fFileStore;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object)
-	 */
 	@Override
 	public ImageDescriptor getImageDescriptor(Object object) {
 		fetchInfo();
@@ -229,41 +213,21 @@
 		return fImage;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object)
-	 */
 	@Override
 	public String getLabel(Object o) {
 		return fFileStore.getName();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object)
-	 */
 	@Override
 	public Object getParent(Object o) {
 		return fParent;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#getRule(java.lang.Object)
-	 */
 	@Override
 	public ISchedulingRule getRule(Object object) {
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.progress.IDeferredWorkbenchAdapter#isContainer()
-	 */
 	@Override
 	public boolean isContainer() {
 		fetchInfo();
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStoreComparer.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStoreComparer.java
index fb6741b..097e20e 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStoreComparer.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/DeferredFileStoreComparer.java
@@ -14,11 +14,6 @@
 
 public class DeferredFileStoreComparer implements IElementComparer {
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.IElementComparer#equals(java.lang.Object, java.lang.Object)
-	 */
 	@Override
 	public boolean equals(Object o1, Object o2) {
 		if (o1 == o2) {
@@ -40,11 +35,6 @@
 		return c1.getFileStore().equals(c2.getFileStore());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.IElementComparer#hashCode(java.lang.Object)
-	 */
 	@Override
 	public int hashCode(Object element) {
 		if (element instanceof DeferredFileStore) {
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteContentProvider.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteContentProvider.java
index 44fc5a5..12a17e3 100755
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteContentProvider.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteContentProvider.java
@@ -24,12 +24,6 @@
 	private IWorkingSet workingSet;
 	private RemoteTreeContentManager manager;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object,
-	 * java.lang.Object)
-	 */
 	@Override
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		if (newInput != null) {
@@ -40,11 +34,6 @@
 		super.inputChanged(viewer, oldInput, newInput);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.model.BaseWorkbenchContentProvider#hasChildren(java.lang.Object)
-	 */
 	@Override
 	public boolean hasChildren(Object element) {
 		if (manager != null /* && manager.isDeferredAdapter(element) */) {
@@ -73,11 +62,6 @@
 		return workingSet;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.model.WorkbenchContentProvider#getChildren(java.lang.Object)
-	 */
 	@Override
 	public Object[] getChildren(Object element) {
 		if (manager != null) {
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteResourceComparator.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteResourceComparator.java
index c29f7d6..4f392d1 100755
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteResourceComparator.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteResourceComparator.java
@@ -30,11 +30,6 @@
 		return ascending;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-	 */
 	@Override
 	public int compare(Viewer viewer, Object o1, Object o2) {
 		if (o1 instanceof IFileInfo && o2 instanceof IFileInfo) {
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteTreeContentManager.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteTreeContentManager.java
index e58fcf8..4d97294 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteTreeContentManager.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteTreeContentManager.java
@@ -62,11 +62,6 @@
 			setSystem(true);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
-		 */
 		@Override
 		protected IStatus run(IProgressMonitor monitor) {
 			while (!fElementQueue.isEmpty() && !monitor.isCanceled()) {
@@ -104,23 +99,11 @@
 			fParent = parent;
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.jface.progress.IElementCollector#add(java.lang.Object,
-		 * org.eclipse.core.runtime.IProgressMonitor)
-		 */
 		@Override
 		public void add(Object element, IProgressMonitor monitor) {
 			add(new Object[] { element }, monitor);
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.jface.progress.IElementCollector#add(java.lang.Object[],
-		 * org.eclipse.core.runtime.IProgressMonitor)
-		 */
 		@Override
 		public void add(Object[] elements, IProgressMonitor monitor) {
 			Object[] filtered = fViewer.filter(elements);
@@ -133,11 +116,6 @@
 			}
 		}
 
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.jface.progress.IElementCollector#done()
-		 */
 		@Override
 		public void done() {
 			prune(fParent, offset);
@@ -219,11 +197,6 @@
 			return;
 		}
 		WorkbenchJob updateJob = new WorkbenchJob("IncrementalDeferredTreeContentManager") { //$NON-NLS-1$
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
-			 */
 			@Override
 			public IStatus runInUIThread(IProgressMonitor updateMonitor) {
 				// Cancel the job if the tree viewer got closed
@@ -250,11 +223,6 @@
 	 */
 	protected void prune(final Object parent, final int offset) {
 		WorkbenchJob updateJob = new WorkbenchJob("DeferredTree") { //$NON-NLS-1$
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
-			 */
 			@Override
 			public IStatus runInUIThread(IProgressMonitor updateMonitor) {
 				// Cancel the job if the tree viewer got closed
@@ -282,11 +250,6 @@
 		}
 		// Clear the placeholder if it is still there
 		WorkbenchJob clearJob = new WorkbenchJob("DeferredTreeContentManager_ClearJob") { //$NON-NLS-1$
-			/*
-			 * (non-Javadoc)
-			 * 
-			 * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
-			 */
 			@Override
 			public IStatus runInUIThread(IProgressMonitor monitor) {
 				if (!placeholder.isRemoved()) {
@@ -304,12 +267,6 @@
 		clearJob.schedule();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.progress.DeferredTreeContentManager#getFetchJobName(java.lang.Object,
-	 * org.eclipse.ui.progress.IDeferredWorkbenchAdapter)
-	 */
 	protected String getFetchJobName(Object parent, IDeferredWorkbenchAdapter adapter) {
 		return "RemoteTreeContentManager"; //$NON-NLS-1$
 	}
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteUIPlugin.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteUIPlugin.java
index 3173ec6..11d4fe0 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteUIPlugin.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/RemoteUIPlugin.java
@@ -89,22 +89,12 @@
 	public RemoteUIPlugin() {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext )
-	 */
 	@Override
 	public void start(BundleContext context) throws Exception {
 		super.start(context);
 		plugin = this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext )
-	 */
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		plugin = null;
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/preferences/ConnectionsPreferencePage.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/preferences/ConnectionsPreferencePage.java
index fe7369b..c1963b2 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/preferences/ConnectionsPreferencePage.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/preferences/ConnectionsPreferencePage.java
@@ -160,12 +160,6 @@
 	 * 
 	 */
 	private class EventHandler extends SelectionAdapter {
-
-		/*
-		 * (non-Javadoc)
-		 * 
-		 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-		 */
 		@Override
 		public void widgetSelected(SelectionEvent e) {
 			Object source;
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/services/local/LocalUIFileService.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/services/local/LocalUIFileService.java
index cfe33f0..b1c7f4f 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/services/local/LocalUIFileService.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/internal/ui/services/local/LocalUIFileService.java
@@ -47,13 +47,6 @@
 		return connectionType;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteFileManager#browseDirectory(org.eclipse
-	 * .swt.widgets.Shell, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public String browseDirectory(Shell shell, String message, String filterPath, int flags) {
 		DirectoryDialog dialog = new DirectoryDialog(shell);
@@ -73,13 +66,6 @@
 		return path;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteFileManager#browseFile(org.eclipse
-	 * .swt.widgets.Shell, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public String browseFile(Shell shell, String message, String filterPath, int flags) {
 		FileDialog dialog = new FileDialog(shell, SWT.SINGLE);
@@ -99,13 +85,6 @@
 		return path;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.core.IRemoteFileManager#browseFile(org.eclipse
-	 * .swt.widgets.Shell, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public List<String> browseFiles(Shell shell, String message, String filterPath, int flags) {
 		FileDialog dialog = new FileDialog(shell, SWT.MULTI);
@@ -125,34 +104,16 @@
 		return Arrays.asList(dialog.getFileNames());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.remote.ui.IRemoteUIFileManager#getConnection()
-	 */
 	@Override
 	public IRemoteConnection getConnection() {
 		return connection;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.ui.IRemoteUIFileManager#setConnection(org.eclipse
-	 * .remote.core.IRemoteConnection)
-	 */
 	@Override
 	public void setConnection(IRemoteConnection connection) {
 		this.connection = connection;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.remote.ui.IRemoteUIFileManager#showConnections(boolean)
-	 */
 	@Override
 	public void showConnections(boolean enable) {
 		// Not implemented
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIFileService.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIFileService.java
index 128dd63..50274b3 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIFileService.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/RemoteUIFileService.java
@@ -50,13 +50,6 @@
 		return connectionType;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ptp.remote.core.IRemoteFileManager#browseDirectory(org.eclipse
-	 * .swt.widgets.Shell, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public String browseDirectory(Shell shell, String message, String filterPath, int flags) {
 		RemoteResourceBrowser browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
@@ -76,13 +69,6 @@
 		return resource.toURI().getPath();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ptp.remote.core.IRemoteFileManager#browseFile(org.eclipse
-	 * .swt.widgets.Shell, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public String browseFile(Shell shell, String message, String filterPath, int flags) {
 		RemoteResourceBrowser browser = new RemoteResourceBrowser(shell, SWT.SINGLE);
@@ -102,13 +88,6 @@
 		return resource.toURI().getPath();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ptp.remote.core.IRemoteFileManager#browseFile(org.eclipse
-	 * .swt.widgets.Shell, java.lang.String, java.lang.String)
-	 */
 	@Override
 	public List<String> browseFiles(Shell shell, String message, String filterPath, int flags) {
 		RemoteResourceBrowser browser = new RemoteResourceBrowser(shell, SWT.MULTI);
@@ -128,34 +107,16 @@
 		return paths;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.ptp.remote.ui.IRemoteUIFileManager#getConnection()
-	 */
 	@Override
 	public IRemoteConnection getConnection() {
 		return connection;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ptp.remote.ui.IRemoteUIFileManager#setConnection(org.eclipse
-	 * .ptp.remote.core.IRemoteConnection)
-	 */
 	@Override
 	public void setConnection(IRemoteConnection connection) {
 		this.connection = connection;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.ptp.remote.ui.IRemoteUIFileManager#showConnections(boolean)
-	 */
 	@Override
 	public void showConnections(boolean enable) {
 		showConnections = enable;
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/dialogs/RemoteResourceBrowser.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/dialogs/RemoteResourceBrowser.java
index 30b689e..ec0e142 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/dialogs/RemoteResourceBrowser.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/dialogs/RemoteResourceBrowser.java
@@ -82,13 +82,6 @@
 		setType(FILE_BROWSER | DIRECTORY_BROWSER);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.jface.dialogs.Dialog#createButton(org.eclipse.swt.widgets
-	 * .Composite, int, java.lang.String, boolean)
-	 */
 	@Override
 	protected Button createButton(Composite parent, int id, String label, boolean defaultButton) {
 		Button button = super.createButton(parent, id, label, defaultButton);
@@ -98,13 +91,6 @@
 		return button;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets
-	 * .Composite)
-	 */
 	@Override
 	protected Control createContents(Composite parent) {
 		Control contents = super.createContents(parent);
@@ -127,13 +113,6 @@
 		return contents;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
-	 * .Composite)
-	 */
 	@Override
 	protected Control createDialogArea(Composite parent) {
 		Composite main = (Composite) super.createDialogArea(parent);
@@ -238,11 +217,6 @@
 		return new ArrayList<IFileStore>();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.jface.operation.IRunnableContext#run(boolean, boolean, org.eclipse.jface.operation.IRunnableWithProgress)
-	 */
 	@Override
 	public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException,
 			InterruptedException {
diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteConnectionWidget.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteConnectionWidget.java
index 521d4b4..8578a4d 100644
--- a/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteConnectionWidget.java
+++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/remote/ui/widgets/RemoteConnectionWidget.java
@@ -558,11 +558,6 @@
 		fWidgetListener.setEnabled(enabled);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.swt.widgets.Control#isEnabled()
-	 */
 	@Override
 	public boolean isEnabled() {
 		return fEnabled;
@@ -626,11 +621,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.swt.widgets.Control#setEnabled(boolean)
-	 */
 	@Override
 	public void setEnabled(boolean enabled) {
 		fEnabled = enabled;
diff --git a/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/FileStoreTests.java b/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/FileStoreTests.java
index 62d0dda..e2de273 100644
--- a/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/FileStoreTests.java
+++ b/tests/org.eclipse.remote.jsch.tests/src/org/eclipse/remote/jsch/tests/FileStoreTests.java
@@ -200,11 +200,6 @@
 		assertEquals(expected, fi.getAttribute(EFS.ATTRIBUTE_EXECUTABLE));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#setUp()
-	 */
 	@Override
 	protected void setUp() throws Exception {
 		IRemoteServicesManager manager = Activator.getService(IRemoteServicesManager.class);
@@ -252,11 +247,6 @@
 		fLocalDir.mkdir(EFS.NONE, null);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#tearDown()
-	 */
 	@Override
 	protected void tearDown() throws Exception {
 		fRemoteDir.delete(EFS.NONE, new NullProgressMonitor());
diff --git a/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/FileStoreTests.java b/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/FileStoreTests.java
index 755f4f5..28ba337 100644
--- a/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/FileStoreTests.java
+++ b/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/FileStoreTests.java
@@ -237,11 +237,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#setUp()
-	 */
 	@Override
 	protected void setUp() throws Exception {
 		if (connection == null) {
@@ -275,11 +270,6 @@
 		localDir.mkdir(EFS.NONE, null);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#tearDown()
-	 */
 	@Override
 	protected void tearDown() throws Exception {
 		remoteParent.delete(EFS.NONE, new NullProgressMonitor());
diff --git a/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/ProcessTests.java b/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/ProcessTests.java
index eddb93a..0cbaa68 100644
--- a/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/ProcessTests.java
+++ b/tests/org.eclipse.remote.proxy.tests/src/org/eclipse/remote/proxy/tests/ProcessTests.java
@@ -232,11 +232,6 @@
 		assertFalse(p.isAlive());
 	}
 	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#setUp()
-	 */
 	@Override
 	protected void setUp() throws Exception {
 		if (connection == null) {
@@ -257,11 +252,6 @@
 		}		
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see junit.framework.TestCase#tearDown()
-	 */
 	@Override
 	protected void tearDown() throws Exception {
 	}
