diff --git a/bundles/org.eclipse.ui.net/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.net/META-INF/MANIFEST.MF
index 0c51e10..cccca64 100644
--- a/bundles/org.eclipse.ui.net/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.ui.net/META-INF/MANIFEST.MF
@@ -3,7 +3,6 @@
 Bundle-Name: %PLUGIN_NAME
 Bundle-SymbolicName: org.eclipse.ui.net; singleton:=true
 Bundle-Version: 1.3.700.qualifier
-Bundle-Activator: org.eclipse.ui.internal.net.Activator
 Bundle-Vendor: %PLUGIN_PROVIDER
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.3.0,4.0.0)",
diff --git a/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/Activator.java b/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/Activator.java
deleted file mode 100644
index f0e9709..0000000
--- a/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/Activator.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2017 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- * yyyymmdd bug      Email and other contact information
- * -------- -------- -----------------------------------------------------------
- * 20070201   154100 pmoogk@ca.ibm.com - Peter Moogk, Port internet code from WTP to Eclipse base.
- *******************************************************************************/
-package org.eclipse.ui.internal.net;
-
-import org.eclipse.ui.plugin.AbstractUIPlugin;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator extends AbstractUIPlugin {
-
-	// The plug-in ID
-	public static final String PLUGIN_ID = "org.eclipse.ui.net"; //$NON-NLS-1$
-
-	// The shared instance
-	private static Activator plugin;
-
-	/**
-	 * The constructor
-	 */
-	public Activator() {
-		plugin = this;
-	}
-
-	/**
-	 * Returns the shared instance
-	 *
-	 * @return the shared instance
-	 */
-	public static Activator getDefault() {
-		return plugin;
-	}
-
-	@Override
-	public void start(BundleContext context) throws Exception {
-		super.start(context);
-	}
-
-	@Override
-	public void stop(BundleContext context) throws Exception {
-		plugin = null;
-		super.stop(context);
-	}
-
-}
diff --git a/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntryDialog.java b/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntryDialog.java
index b897488..9542e4b 100644
--- a/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntryDialog.java
+++ b/bundles/org.eclipse.ui.net/src/org/eclipse/ui/internal/net/ProxyEntryDialog.java
@@ -45,6 +45,8 @@
 	private Label passwordLabel;
 	private Text passwordText;
 
+	private static final String PLUGIN_ID = "org.eclipse.ui.net"; //$NON-NLS-1$
+
 	public ProxyEntryDialog(Shell parent, ProxyData data, String[] addedArray,
 			String title) {
 		super(parent);
@@ -184,12 +186,14 @@
 			URI uri = new URI(hostText.getText());
 			scheme = uri.getScheme();
 		} catch (URISyntaxException e) {
-			updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+			updateStatus(new Status(IStatus.ERROR,
+					PLUGIN_ID,
 					IStatus.OK, NetUIMessages.ProxyEntryDialog_10, null));
 			return false;
 		}
 		if (scheme != null) {
-			updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+			updateStatus(new Status(IStatus.ERROR,
+					PLUGIN_ID,
 					IStatus.OK, NetUIMessages.ProxyEntryDialog_13, null));
 			return false;
 		}
@@ -221,7 +225,8 @@
 		String type = typeText.getText();
 		for (String addedType : addedTypes) {
 			if (addedType.equalsIgnoreCase(type)) {
-				updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+				updateStatus(new Status(IStatus.ERROR,
+						PLUGIN_ID,
 						IStatus.OK, NetUIMessages.ProxyEntryDialog_9, null));
 				return;
 			}
@@ -230,25 +235,28 @@
 			return;
 		}
 		if (hostText.getText().length() == 0) {
-			updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+			updateStatus(new Status(IStatus.ERROR,
+					PLUGIN_ID,
 					IStatus.OK, NetUIMessages.ProxyEntryDialog_10, null));
 			return;
 		}
 		try {
 			int port = Integer.parseInt(portText.getText());
 			if (port < 0) {
-				updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+				updateStatus(new Status(IStatus.ERROR,
+						PLUGIN_ID,
 						IStatus.OK, NetUIMessages.ProxyEntryDialog_11, null));
 				return;
 			}
 		} catch (NumberFormatException e) {
-			updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+			updateStatus(new Status(IStatus.ERROR,
+					PLUGIN_ID,
 					IStatus.OK, NetUIMessages.ProxyEntryDialog_11, null));
 			return;
 		}
 		if (requiresAuthentificationButton.getSelection()) {
 			if (userIdText.getText().length() == 0) {
-				updateStatus(new Status(IStatus.ERROR, Activator.PLUGIN_ID,
+				updateStatus(new Status(IStatus.ERROR, PLUGIN_ID,
 						IStatus.OK, NetUIMessages.ProxyEntryDialog_12, null));
 				return;
 			}
