Merge remote-tracking branch 'origin/master' into BETA_JAVA15
diff --git a/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
index 057075b..5a11f64 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.eclipse.pde.api.tools.tests
-Bundle-Version: 1.1.900.qualifier
+Bundle-Version: 1.1.1000.qualifier
 Bundle-Vendor: %Bundle-Vendor
 Require-Bundle: org.eclipse.core.runtime,
  org.junit,
diff --git a/apitools/org.eclipse.pde.api.tools.tests/pom.xml b/apitools/org.eclipse.pde.api.tools.tests/pom.xml
index 9eeadbf..0b3cadf 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/pom.xml
+++ b/apitools/org.eclipse.pde.api.tools.tests/pom.xml
@@ -19,7 +19,7 @@
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.api.tools.tests</artifactId>
-  <version>1.1.900-SNAPSHOT</version>
+  <version>1.1.1000-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
 	<build>
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java
index da9f645..ce52bd1 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/util/tests/UtilTests.java
@@ -488,7 +488,6 @@
 				"org.eclipse.team.cvs.ui", //$NON-NLS-1$
 				"org.eclipse.equinox.p2.metadata.generator", //$NON-NLS-1$
 				"org.eclipse.equinox.registry", //$NON-NLS-1$
-				"org.eclipse.update.ui", //$NON-NLS-1$
 				"org.eclipse.swt", //$NON-NLS-1$
 				"org.eclipse.ui.console", //$NON-NLS-1$
 				"org.junit4", //$NON-NLS-1$
@@ -630,7 +629,6 @@
 				"org.eclipse.debug.core", //$NON-NLS-1$
 				"org.eclipse.jdt.core.manipulation", //$NON-NLS-1$
 				"org.eclipse.osgi", //$NON-NLS-1$
-				"org.eclipse.update.scheduler", //$NON-NLS-1$
 				"org.eclipse.equinox.p2.updatechecker", //$NON-NLS-1$
 				"org.eclipse.equinox.p2.console", //$NON-NLS-1$
 				"org.eclipse.equinox.frameworkadmin", //$NON-NLS-1$
diff --git a/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
index 1d2fa7f..8e57a5e 100644
--- a/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
+++ b/apitools/org.eclipse.pde.api.tools/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.api.tools;singleton:=true
-Bundle-Version: 1.1.1300.qualifier
+Bundle-Version: 1.1.1400.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)",
diff --git a/apitools/org.eclipse.pde.api.tools/pom.xml b/apitools/org.eclipse.pde.api.tools/pom.xml
index 5ee9e2d..a54b0b0 100644
--- a/apitools/org.eclipse.pde.api.tools/pom.xml
+++ b/apitools/org.eclipse.pde.api.tools/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Copyright (c) 2012, 2017 Eclipse Foundation and others.
+  Copyright (c) 2012, 2020 Eclipse Foundation and others.
   All rights reserved. This program and the accompanying materials
   are made available under the terms of the Eclipse Distribution License v1.0
   which accompanies this distribution, and is available at
@@ -18,7 +18,7 @@
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.api.tools</artifactId>
-  <version>1.1.1300-SNAPSHOT</version>
+  <version>1.1.1400-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <defaultSigning-excludeInnerJars>true</defaultSigning-excludeInnerJars>
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
index 2fe0af2..e2ccce3 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/BaseApiAnalyzer.java
@@ -42,6 +42,7 @@
 import org.eclipse.core.resources.IWorkspaceRunnable;
 import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
@@ -312,6 +313,9 @@
 
 
 	private boolean checkIfNested(IApiComponent component) {
+		if (!ApiPlugin.isRunningInFramework()) {
+			return false;
+		}
 		if (fJavaProject != null) {
 			return false;
 		}
@@ -320,9 +324,10 @@
 		IProject[] projects = root.getProjects();
 		Path componentLocation = new Path(component.getLocation());
 		for (IProject project : projects) {
-			if (project.getLocation().isPrefixOf(componentLocation)) {
+			IPath projectLocation = project.getLocation();
+			if (projectLocation != null && projectLocation.isPrefixOf(componentLocation)) {
 				// if same project, skipped here
-				if (componentLocation.segmentCount() == project.getLocation().segmentCount()
+				if (componentLocation.segmentCount() == projectLocation.segmentCount()
 						+ 1) {
 					return true;
 				}
diff --git a/releng/org.eclipse.pde.ui.setup/PDE.setup b/releng/org.eclipse.pde.ui.setup/PDE.setup
index 7ff62a6..b722342 100644
--- a/releng/org.eclipse.pde.ui.setup/PDE.setup
+++ b/releng/org.eclipse.pde.ui.setup/PDE.setup
@@ -62,8 +62,8 @@
       storageURI="scope://Workspace"/>
   <setupTask
       xsi:type="jdt:JRETask"
-      version="JavaSE-1.8"
-      location="${jre.location-1.8}"/>
+      version="JavaSE-11"
+      location="${jre.location-11}"/>
   <setupTask
       xsi:type="setup.targlets:TargletTask"
       targetName="Modular API Baseline Target"
diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
index f8a0656..f5576f5 100644
--- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
@@ -80,7 +80,6 @@
  org.eclipse.e4.core.services;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.jdt.core;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.team.core;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.update.configurator;bundle-version="[3.1.0,4.0.0)",
  org.eclipse.text;bundle-version="[3.1.0,4.0.0)",
  org.eclipse.jdt.launching;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.core.filebuffers;bundle-version="[3.2.0,4.0.0)",
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/TargetPlatform.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/TargetPlatform.java
index c517d92..1bc4349 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/TargetPlatform.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/TargetPlatform.java
@@ -28,7 +28,7 @@
 import org.eclipse.pde.core.target.ITargetLocation;
 import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.TargetPlatformHelper;
-import org.eclipse.pde.internal.core.UpdateManagerHelper;
+import org.eclipse.pde.internal.core.UpdateManagerHelperDeprecated;
 import org.eclipse.pde.internal.core.target.TargetPlatformService;
 
 /**
@@ -277,7 +277,7 @@
 	 */
 	@Deprecated
 	public static void createPlatformConfiguration(File location, IPluginModelBase[] plugins, IPluginModelBase brandingPlugin) throws CoreException {
-		UpdateManagerHelper.createPlatformConfiguration(location, plugins, brandingPlugin);
+		UpdateManagerHelperDeprecated.createPlatformConfiguration(location, plugins, brandingPlugin);
 	}
 
 	/**
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java
index 45caa14..91cf035 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2017 IBM Corporation and others.
+ * Copyright (c) 2010, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -16,23 +16,19 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.ServiceCaller;
 import org.eclipse.osgi.service.resolver.VersionRange;
-import org.osgi.framework.BundleContext;
 import org.osgi.framework.Version;
 
 /**
  * Service used to create and configure bundle project descriptions.
  * <p>
- * An instance of this service can be obtained from a {@link BundleContext} as
+ * An instance of this service can be obtained from a {@link ServiceCaller} as
  * follows
  * </p>
  *
  * <pre>
- * BundleContext context = ...
- * ServiceReference&lt;IBundleContextService&gt; ref = context.getServiceReference(IBundleContextService.class);
- * IBundleContextService service = context.getService(ref);
- * ...
- * context.ungetService(ref);
+ * ServiceCaller.callOnce(getClass(), IBundleContextService.class, (service) -&gt; ...);
  * </pre>
  *
  * @since 3.6
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/target/LoadTargetDefinitionJob.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/target/LoadTargetDefinitionJob.java
index 651316a..1bacd6d 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/target/LoadTargetDefinitionJob.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/target/LoadTargetDefinitionJob.java
@@ -101,7 +101,7 @@
 		fTarget = target;
 		if (target == null) {
 			fNone = true;
-			ITargetPlatformService service = PDECore.getDefault().acquireService(ITargetPlatformService.class);
+			ITargetPlatformService service = TargetPlatformService.getDefault();
 			fTarget = service.newTarget();
 		}
 	}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
index 09e7c84..26a5b07 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java
@@ -14,12 +14,7 @@
 package org.eclipse.pde.internal.core;
 
 import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
 import java.util.Hashtable;
-import java.util.List;
 import org.eclipse.core.resources.ISaveContext;
 import org.eclipse.core.resources.ISaveParticipant;
 import org.eclipse.core.resources.IWorkspace;
@@ -27,17 +22,14 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.QualifiedName;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.URIUtil;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.osgi.service.debug.DebugOptions;
 import org.eclipse.osgi.service.debug.DebugOptionsListener;
 import org.eclipse.pde.core.IBundleClasspathResolver;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.project.IBundleProjectService;
 import org.eclipse.pde.core.target.ITargetPlatformService;
 import org.eclipse.pde.internal.core.builders.FeatureRebuilder;
@@ -46,7 +38,6 @@
 import org.eclipse.pde.internal.core.schema.SchemaRegistry;
 import org.eclipse.pde.internal.core.target.P2TargetUtils;
 import org.eclipse.pde.internal.core.target.TargetPlatformService;
-import org.eclipse.update.configurator.ConfiguratorUtils;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
@@ -80,7 +71,6 @@
 	// Shared instance
 	private static PDECore inst;
 
-	private static IPluginModelBase[] registryPlugins;
 	private static PDEExtensionRegistry fExtensionRegistry = null;
 
 	/**
@@ -190,34 +180,6 @@
 		inst = this;
 	}
 
-	public IPluginModelBase findPluginInHost(String id) {
-		if (registryPlugins == null) {
-			URL[] pluginPaths = ConfiguratorUtils.getCurrentPlatformConfiguration().getPluginPath();
-			URI[] paths = toUri(pluginPaths);
-			PDEState state = new PDEState(paths, false, false, new NullProgressMonitor());
-			registryPlugins = state.getTargetModels();
-		}
-
-		for (IPluginModelBase plugin : registryPlugins) {
-			if (plugin.getPluginBase().getId().equals(id)) {
-				return plugin;
-			}
-		}
-		return null;
-	}
-
-	private URI[] toUri(URL[] pluginPaths) {
-		List<URI> uris = new ArrayList<>();
-		for (URL url : pluginPaths) {
-			try {
-				uris.add(URIUtil.toURI(url));
-			} catch (URISyntaxException e) {
-				// ignore
-			}
-		}
-		return uris.toArray(new URI[0]);
-	}
-
 	public PluginModelManager getModelManager() {
 		return PluginModelManager.getInstance();
 	}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginPathFinder.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginPathFinder.java
index 9b52deb..6765db8 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginPathFinder.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PluginPathFinder.java
@@ -19,28 +19,15 @@
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Properties;
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.variables.IStringVariableManager;
-import org.eclipse.core.variables.VariablesPlugin;
-import org.eclipse.osgi.service.datalocation.Location;
-import org.eclipse.pde.core.plugin.TargetPlatform;
-import org.eclipse.update.configurator.ConfiguratorUtils;
-import org.eclipse.update.configurator.IPlatformConfiguration;
-import org.eclipse.update.configurator.IPlatformConfiguration.ISiteEntry;
 
 @SuppressWarnings("deprecation")
 // PDE still supports searching the platform.xml for plug-in/feature listings
 public class PluginPathFinder {
 
-	private static final String URL_PROPERTY = "org.eclipse.update.resolution_url"; //$NON-NLS-1$
-	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
-
 	/**
 	 *
 	 * @param platformHome
@@ -110,156 +97,8 @@
 		return sites.toArray(new File[sites.size()]);
 	}
 
-	/**
-	 * Attempts to find all plugin paths if the target platform was at the given string location.
-	 * <p>
-	 * Should not be called in PDE. It should only be used to confirm test results match the
-	 * old way of doing things (before ITargetPlatformService).
-	 * </p>
-	 *
-	 * @param platformHome the target platform location
-	 * @param installedOnly whether to check for a bundles.info or another configuration file to
-	 * 		determine what bundles are installed rather than what bundles simply exist in the plugins folder
-	 * @return list of URL plug-in locations
-	 */
-	public static URL[] getPluginPaths(String platformHome, boolean installedOnly) {
-		// If we don't care about installed bundles, simply scan the location
-		if (!installedOnly) {
-			return scanLocations(getSites(platformHome, false));
-		}
-
-		// See if we can find a bundles.info to get installed bundles from
-		URL[] urls = null;
-		if (new Path(platformHome).equals(new Path(TargetPlatform.getDefaultLocation()))) {
-			// Pointing at default install, so use the actual configuration area
-			Location configArea = Platform.getConfigurationLocation();
-
-			if (configArea != null) {
-				urls = P2Utils.readBundlesTxt(platformHome, configArea.getURL());
-
-				// try the shared location (parent)
-				if (urls == null && configArea.getParentLocation() != null) {
-					urls = P2Utils.readBundlesTxt(platformHome, configArea.getParentLocation().getURL());
-				}
-			}
-
-		} else {
-			// Pointing at a folder, so try to guess the configuration area
-			File configurationArea = new File(platformHome, "configuration"); //$NON-NLS-1$
-			if (configurationArea.exists()) {
-				try {
-					urls = P2Utils.readBundlesTxt(platformHome, configurationArea.toURL());
-				} catch (MalformedURLException e) {
-					PDECore.log(e);
-				}
-			}
-		}
-		if (urls != null) {
-			return urls;
-		}
-
-		if (new Path(platformHome).equals(new Path(TargetPlatform.getDefaultLocation())) && !isDevLaunchMode()) {
-			return ConfiguratorUtils.getCurrentPlatformConfiguration().getPluginPath();
-		}
-
-		return getPlatformXMLPaths(platformHome, false);
-	}
-
 	public static URL[] getFeaturePaths(String platformHome) {
-		return getPlatformXMLPaths(platformHome, true);
-	}
-
-	/**
-	 * Returns a list of file URLs for plug-ins or features found in a platform.xml file or in the default
-	 * directory ("plugins"/"features") if no platform.xml is available.
-	 *
-	 * @param platformHome base location for the installation, used to search for platform.xml
-	 * @param findFeatures if <code>true</code> will return paths to features, otherwise will return paths to plug-ins.
-	 * @return a list of URL paths to plug-ins or features.  Possibly empty if the platform.xml had no entries or the default directory had no valid files
-	 */
-	public static URL[] getPlatformXMLPaths(String platformHome, boolean findFeatures) {
-		File file = getPlatformFile(platformHome);
-		if (file != null) {
-			try {
-				String value = new Path(platformHome).toFile().toURL().toExternalForm();
-				System.setProperty(URL_PROPERTY, value);
-				try {
-					IPlatformConfiguration config = ConfiguratorUtils.getPlatformConfiguration(file.toURL());
-					return getConfiguredSitesPaths(platformHome, config, findFeatures);
-				} finally {
-					System.setProperty(URL_PROPERTY, EMPTY_STRING);
-				}
-			} catch (IOException e) {
-			}
-		}
-		return scanLocations(getSites(platformHome, findFeatures));
-	}
-
-	/**
-	 * Returns a File object representing the platform.xml or null if the file cannot be found.
-	 * @return File representing platform.xml or <code>null</code>
-	 */
-	private static File getPlatformFile(String platformHome) {
-		String location = System.getProperty("org.eclipse.pde.platform_location"); //$NON-NLS-1$
-		File file = null;
-		if (location != null) {
-			try {
-				IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
-				location = manager.performStringSubstitution(location);
-				Path path = new Path(location);
-				if (path.isAbsolute()) {
-					file = path.toFile();
-				} else {
-					file = new File(platformHome, location);
-				}
-				if (file.exists()) {
-					return file;
-				}
-			} catch (CoreException e) {
-				PDECore.log(e);
-			}
-		}
-		file = new File(platformHome, "configuration/org.eclipse.update/platform.xml"); //$NON-NLS-1$
-		return file.exists() ? file : null;
-	}
-
-	private static URL[] getConfiguredSitesPaths(String platformHome, IPlatformConfiguration configuration, boolean features) {
-		URL[] installPlugins = scanLocations(new File[] {new File(platformHome, features ? "features" : "plugins")}); //$NON-NLS-1$ //$NON-NLS-2$
-		URL[] extensionPlugins = getExtensionPluginURLs(configuration, features);
-
-		URL[] all = new URL[installPlugins.length + extensionPlugins.length];
-		System.arraycopy(installPlugins, 0, all, 0, installPlugins.length);
-		System.arraycopy(extensionPlugins, 0, all, installPlugins.length, extensionPlugins.length);
-		return all;
-	}
-
-	/**
-	 *
-	 * @param config
-	 * @param features true for features false for plugins
-	 * @return URLs for features or plugins on the site
-	 */
-	private static URL[] getExtensionPluginURLs(IPlatformConfiguration config, boolean features) {
-		ArrayList<URL> extensionPlugins = new ArrayList<>();
-		IPlatformConfiguration.ISiteEntry[] sites = config.getConfiguredSites();
-		for (ISiteEntry site : sites) {
-			URL url = site.getURL();
-			if ("file".equalsIgnoreCase(url.getProtocol())) { //$NON-NLS-1$
-				String[] entries;
-				if (features) {
-					entries = site.getFeatures();
-				} else {
-					entries = site.getPlugins();
-				}
-				for (String entry : entries) {
-					try {
-						extensionPlugins.add(new File(url.getFile(), entry).toURL());
-					} catch (MalformedURLException e) {
-					}
-				}
-			}
-		}
-		return extensionPlugins.toArray(new URL[extensionPlugins.size()]);
+		return scanLocations(getSites(platformHome, true));
 	}
 
 	/**
@@ -285,18 +124,4 @@
 		}
 		return result.toArray(new URL[result.size()]);
 	}
-
-	public static boolean isDevLaunchMode() {
-		if (Boolean.getBoolean("eclipse.pde.launch")) { //$NON-NLS-1$
-			return true;
-		}
-		String[] args = Platform.getApplicationArgs();
-		for (String arg : args) {
-			if (arg.equals("-pdelaunch")) { //$NON-NLS-1$
-				return true;
-			}
-		}
-		return false;
-	}
-
 }
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/SearchablePluginsManager.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/SearchablePluginsManager.java
index f19498c..965964a 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/SearchablePluginsManager.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/SearchablePluginsManager.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -178,12 +178,7 @@
 		ArrayList<IClasspathEntry> result = new ArrayList<>();
 
 		IPluginModelBase[] wModels = PluginRegistry.getWorkspaceModels();
-		for (IPluginModelBase model : wModels) {
-			IProject project = model.getUnderlyingResource().getProject();
-			if (project.hasNature(JavaCore.NATURE_ID)) {
-				result.add(JavaCore.newProjectEntry(project.getFullPath()));
-			}
-		}
+
 		List<String> plugins;
 		synchronized (fPluginIdSet) {
 			plugins = new ArrayList<>(fPluginIdSet);
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
index e10c0d7..115321f 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/TargetPlatformHelper.java
@@ -131,13 +131,9 @@
 			buffer.append("org.eclipse.equinox.common@2:start,"); //$NON-NLS-1$
 			buffer.append("org.eclipse.equinox.event@2:start,"); //$NON-NLS-1$
 			buffer.append("org.eclipse.core.runtime@start"); //$NON-NLS-1$
-		} else if (targetVersion > 3.1) {
-			buffer.append("org.eclipse.equinox.common@2:start,"); //$NON-NLS-1$
-			buffer.append("org.eclipse.update.configurator@3:start,"); //$NON-NLS-1$
-			buffer.append("org.eclipse.core.runtime@start"); //$NON-NLS-1$
 		} else {
+			buffer.append("org.eclipse.equinox.common@2:start,"); //$NON-NLS-1$
 			buffer.append("org.eclipse.core.runtime@2:start,"); //$NON-NLS-1$
-			buffer.append("org.eclipse.update.configurator@3:start"); //$NON-NLS-1$
 		}
 		return buffer.toString();
 	}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/UpdateManagerHelper.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/UpdateManagerHelper.java
deleted file mode 100644
index aa5dcfe..0000000
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/UpdateManagerHelper.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2007, 2013 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
- *******************************************************************************/
-package org.eclipse.pde.internal.core;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Locale;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.internal.core.ifeature.IFeature;
-import org.eclipse.pde.internal.core.ifeature.IFeatureModel;
-import org.eclipse.update.configurator.ConfiguratorUtils;
-import org.eclipse.update.configurator.IPlatformConfiguration;
-
-@SuppressWarnings("deprecation")
-// The update manager is deprecated, but still supported in PDE launching
-public class UpdateManagerHelper {
-
-	private static class LocalSite {
-		private final ArrayList<IPluginModelBase> fPlugins;
-		private IPath fPath;
-
-		public LocalSite(IPath path) {
-			if (path.getDevice() != null) {
-				fPath = path.setDevice(path.getDevice().toUpperCase(Locale.ENGLISH));
-			} else {
-				fPath = path;
-			}
-			fPlugins = new ArrayList<>();
-		}
-
-		public IPath getPath() {
-			return fPath;
-		}
-
-		public URL getURL() throws MalformedURLException {
-			return new URL("file:" + fPath.removeTrailingSeparator()); //$NON-NLS-1$
-		}
-
-		public void add(IPluginModelBase model) {
-			fPlugins.add(model);
-		}
-
-		public String[] getRelativePluginList() {
-			String[] list = new String[fPlugins.size()];
-			for (int i = 0; i < fPlugins.size(); i++) {
-				IPluginModelBase model = fPlugins.get(i);
-				IPath location = new Path(model.getInstallLocation());
-				// defect 37319
-				if (location.segmentCount() > 2) {
-					location = location.removeFirstSegments(location.segmentCount() - 2);
-				}
-				//31489 - entry must be relative
-				list[i] = location.setDevice(null).makeRelative().toString();
-			}
-			return list;
-		}
-	}
-
-	public static void createPlatformConfiguration(File configLocation, IPluginModelBase[] models, IPluginModelBase brandingPlugin) throws CoreException {
-		try {
-			IPlatformConfiguration platformConfiguration = ConfiguratorUtils.getPlatformConfiguration(null);
-
-			// Compute local sites
-			ArrayList<LocalSite> sites = new ArrayList<>();
-			for (IPluginModelBase model : models) {
-				IPath path = new Path(model.getInstallLocation()).removeLastSegments(2);
-				addToSite(path, model, sites);
-			}
-
-			createConfigurationEntries(platformConfiguration, sites);
-
-			if (brandingPlugin != null) {
-				createFeatureEntries(platformConfiguration, brandingPlugin);
-			}
-
-			platformConfiguration.refresh();
-			platformConfiguration.save(new URL("file:" + configLocation.getPath())); //$NON-NLS-1$
-		} catch (Exception e) {
-			// Wrap everything else in a core exception.
-			String message = e.getMessage();
-			if (message == null || message.length() == 0) {
-				message = PDECoreMessages.TargetPlatform_exceptionThrown;
-			}
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, IStatus.ERROR, message, e));
-		}
-	}
-
-	private static void addToSite(IPath path, IPluginModelBase model, ArrayList<LocalSite> sites) {
-		if (path.getDevice() != null) {
-			path = path.setDevice(path.getDevice().toUpperCase(Locale.ENGLISH));
-		}
-		for (int i = 0; i < sites.size(); i++) {
-			LocalSite localSite = sites.get(i);
-			if (localSite.getPath().equals(path)) {
-				localSite.add(model);
-				return;
-			}
-		}
-		// First time - add site
-		LocalSite localSite = new LocalSite(path);
-		localSite.add(model);
-		sites.add(localSite);
-	}
-
-	private static void createConfigurationEntries(IPlatformConfiguration config, ArrayList<LocalSite> sites) throws MalformedURLException {
-
-		for (int i = 0; i < sites.size(); i++) {
-			LocalSite localSite = sites.get(i);
-			String[] plugins = localSite.getRelativePluginList();
-
-			int policy = IPlatformConfiguration.ISitePolicy.USER_INCLUDE;
-			IPlatformConfiguration.ISitePolicy sitePolicy = config.createSitePolicy(policy, plugins);
-			IPlatformConfiguration.ISiteEntry siteEntry = config.createSiteEntry(localSite.getURL(), sitePolicy);
-			config.configureSite(siteEntry);
-		}
-		config.isTransient(true);
-	}
-
-	private static void createFeatureEntries(IPlatformConfiguration config, IPluginModelBase plugin) throws MalformedURLException {
-		String id = plugin.getPluginBase().getId();
-		IFeatureModel featureModel = PDECore.getDefault().getFeatureModelManager().findFeatureModel(id);
-		if (featureModel != null) {
-			IFeature feature = featureModel.getFeature();
-			IPlatformConfiguration.IFeatureEntry featureEntry = config.createFeatureEntry(id, feature.getVersion(), id, plugin.getPluginBase().getVersion(), true, null, new URL[] {new URL("file:" + plugin.getInstallLocation())}); //$NON-NLS-1$
-			config.configureFeatureEntry(featureEntry);
-		}
-	}
-
-}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/UpdateManagerHelperDeprecated.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/UpdateManagerHelperDeprecated.java
new file mode 100644
index 0000000..fde742e
--- /dev/null
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/UpdateManagerHelperDeprecated.java
@@ -0,0 +1,224 @@
+/*******************************************************************************
+ *  Copyright (c) 2007, 2013 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
+ *******************************************************************************/
+package org.eclipse.pde.internal.core;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Locale;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+// The update manager is deprecated, but still supported in PDE launching
+// The implementation is only called from TargetPlatform.createPlatform
+// and once that API has been removed then this class can be deleted.
+// Code from this class was copied from the org.eclipse.update.configurator bundle,
+// specifically the IPlatformConfiguration and PlatformConfiguration classes.
+public class UpdateManagerHelperDeprecated {
+
+	@Deprecated
+	private static class LocalSite {
+		private final ArrayList<IPluginModelBase> fPlugins;
+		private IPath fPath;
+
+		LocalSite(IPath path) {
+			if (path.getDevice() != null) {
+				fPath = path.setDevice(path.getDevice().toUpperCase(Locale.ENGLISH));
+			} else {
+				fPath = path;
+			}
+			fPlugins = new ArrayList<>();
+		}
+
+		IPath getPath() {
+			return fPath;
+		}
+
+		URL getURL() throws MalformedURLException {
+			return new URL("file:" + fPath.removeTrailingSeparator()); //$NON-NLS-1$
+		}
+
+		void add(IPluginModelBase model) {
+			fPlugins.add(model);
+		}
+
+		private static String relative(IPluginModelBase model) {
+			IPath location = new Path(model.getInstallLocation());
+			// defect 37319
+			if (location.segmentCount() > 2) {
+				location = location.removeFirstSegments(location.segmentCount() - 2);
+			}
+			// 31489 - entry must be relative
+			return location.setDevice(null).makeRelative().toString();
+		}
+
+		void write(Writer writer) throws IOException {
+			writer.write("<site enabled=\"true\" list=\""); //$NON-NLS-1$
+			boolean comma = false;
+			for (IPluginModelBase model : fPlugins) {
+				if (comma) {
+					writer.write(',');
+				}
+				comma = true;
+				writer.write(relative(model));
+			}
+
+			writer.write("\" policy=\"USER-INCLUDE\" updateable=\"true\" url=\""); //$NON-NLS-1$
+			writer.write(new File(getURL().getFile()).toURL().toString());
+			writer.write("/\">\n"); //$NON-NLS-1$
+			writer.write("</site>\n"); //$NON-NLS-1$
+		}
+	}
+
+	@Deprecated
+	public static void createPlatformConfiguration(File configLocation, IPluginModelBase[] models,
+			IPluginModelBase brandingPlugin) throws CoreException {
+		try {
+			if (!configLocation.exists()) {
+				return;
+			}
+			File platform_xml = new File(configLocation, "org.eclipse.update/platform.xml"); //$NON-NLS-1$
+			platform_xml.getParentFile().mkdirs();
+			// Compute local sites
+			ArrayList<LocalSite> sites = new ArrayList<>();
+			for (IPluginModelBase model : models) {
+				IPath path = new Path(model.getInstallLocation()).removeLastSegments(2);
+				addToSite(path, model, sites);
+			}
+			if (brandingPlugin != null) {
+				IPath path = new Path(brandingPlugin.getInstallLocation()).removeLastSegments(2);
+				addToSite(path, brandingPlugin, sites);
+			}
+
+			try (BufferedWriter writer = new BufferedWriter(
+					new OutputStreamWriter(new FileOutputStream(platform_xml), StandardCharsets.UTF_8))) {
+				writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); //$NON-NLS-1$
+				writer.write("<config date=\"" //$NON-NLS-1$
+						+ new Date().getTime() + "\" transient=\"true\" version=\"3.0\">\n"); //$NON-NLS-1$
+				for (LocalSite site : sites) {
+					site.write(writer);
+					writeFeatures(writer, site.fPath.toFile());
+				}
+				writer.write("</config>"); //$NON-NLS-1$
+			}
+
+
+		} catch (Exception e) {
+			// Wrap everything else in a core exception.
+			String message = e.getMessage();
+			if (message == null || message.length() == 0) {
+				message = PDECoreMessages.TargetPlatform_exceptionThrown;
+			}
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, IStatus.ERROR, message, e));
+		}
+	}
+
+	private static void addToSite(IPath path, IPluginModelBase model, ArrayList<LocalSite> sites) {
+		if (path.getDevice() != null) {
+			path = path.setDevice(path.getDevice().toUpperCase(Locale.ENGLISH));
+		}
+		for (int i = 0; i < sites.size(); i++) {
+			LocalSite localSite = sites.get(i);
+			if (localSite.getPath().equals(path)) {
+				localSite.add(model);
+				return;
+			}
+		}
+		// First time - add site
+		LocalSite localSite = new LocalSite(path);
+		localSite.add(model);
+		sites.add(localSite);
+	}
+
+	static class FeatureEntry {
+		static final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+
+		final String id;
+		final String version;
+		final String url;
+		final String brandingPlugin;
+
+		FeatureEntry(File xml) throws SAXException, IOException, ParserConfigurationException {
+			Document document = factory.newDocumentBuilder().parse(xml);
+			NamedNodeMap attributes = document.getFirstChild().getAttributes();
+			String name = xml.getParentFile().getName();
+			url = FEATURES + "/" + name + "/"; //$NON-NLS-1$ //$NON-NLS-2$
+			id = get("id", attributes); //$NON-NLS-1$
+			version = get("version", attributes); //$NON-NLS-1$
+			brandingPlugin = get("plugin", attributes); //$NON-NLS-1$
+		}
+
+		String get(String name, NamedNodeMap attribues) {
+			Node node = attribues.getNamedItem(name);
+			return node == null ? null : node.getTextContent();
+		}
+	}
+
+	private static final String FEATURES = "features"; //$NON-NLS-1$
+	private static final String FEATURE_XML = "feature.xml"; //$NON-NLS-1$
+
+	private static void writeFeatures(Writer writer, File location) {
+		File featuresDir = new File(location, FEATURES);
+		if (featuresDir.exists()) {
+			// handle the installed features under the features directory
+			File[] dirs = featuresDir.listFiles((FileFilter) f -> {
+				return f.isDirectory() && (new File(f, FEATURE_XML).exists());
+			});
+
+			for (File dir : dirs) {
+				File featureXML = new File(dir, FEATURE_XML);
+				try {
+					FeatureEntry feature = new FeatureEntry(featureXML);
+					writeFeatureEntry(writer, feature);
+				} catch (Exception e) {
+					// Ignore
+				}
+			}
+		}
+	}
+
+	private static void writeFeatureEntry(Writer writer, FeatureEntry feature) throws IOException {
+		writer.write("<feature id=\""); //$NON-NLS-1$
+		writer.write(feature.id);
+		if (feature.brandingPlugin != null) {
+			writer.write("\" plugin-identifier=\""); //$NON-NLS-1$
+			writer.write(feature.brandingPlugin);
+		}
+		writer.write("\" url=\""); //$NON-NLS-1$
+		writer.write(feature.url);
+		writer.write("\" version=\""); //$NON-NLS-1$
+		writer.write(feature.version);
+		writer.write("\">\n</feature>\n"); //$NON-NLS-1$
+	}
+
+}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/build/WorkspaceBuildModel.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/build/WorkspaceBuildModel.java
index 925711c..8ebc581 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/build/WorkspaceBuildModel.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/build/WorkspaceBuildModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -14,10 +14,13 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.core.build;
 
+import java.io.BufferedReader;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.io.PrintWriter;
+import java.io.SequenceInputStream;
 import java.io.StringWriter;
 import java.nio.charset.StandardCharsets;
 import org.eclipse.core.resources.IFile;
@@ -94,6 +97,35 @@
 		updateTimeStamp(fUnderlyingResource.getLocation().toFile());
 	}
 
+
+	private String getLineDelimiter(IFile f) {
+		String lineDelimiter = getLineDelimiterPreference(f);
+		if (lineDelimiter == null) {
+			lineDelimiter = System.lineSeparator();
+		}
+		return lineDelimiter;
+
+	}
+
+	private StringBuilder getHeaderComments(IFile f) throws IOException, CoreException {
+		StringBuilder str = null;
+		String lineDelimiter = getLineDelimiter(f);
+		try (BufferedReader br = new BufferedReader(new InputStreamReader(f.getContents()))) {
+			for (String line; (line = br.readLine()) != null;) {
+				if (line.startsWith("#")) { //$NON-NLS-1$
+					if (str == null) {
+						str = new StringBuilder();
+					}
+					str.append(line + lineDelimiter);
+				} else {
+					break;
+				}
+			}
+		}
+		// returns null for no header comment case
+		return str;
+	}
+
 	@Override
 	public void save() {
 		if (fUnderlyingResource == null) {
@@ -102,7 +134,18 @@
 		String contents = fixLineDelimiter(getContents(), fUnderlyingResource);
 		try (ByteArrayInputStream stream = new ByteArrayInputStream(contents.getBytes(StandardCharsets.ISO_8859_1))) {
 			if (fUnderlyingResource.exists()) {
-				fUnderlyingResource.setContents(stream, false, false, null);
+
+				StringBuilder str = getHeaderComments(fUnderlyingResource);
+				if (str != null) {
+					ByteArrayInputStream headerComment = new ByteArrayInputStream(str.toString().getBytes());
+					InputStream totalContent = new SequenceInputStream(headerComment, stream);
+					fUnderlyingResource.setContents(totalContent, false, false, null);
+					totalContent.close();
+
+				}
+				if (str == null) {
+					fUnderlyingResource.setContents(stream, false, false, null);
+				}
 			} else {
 				fUnderlyingResource.create(stream, false, null);
 			}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
index 2236fb0..4e80e7a 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
@@ -229,7 +229,7 @@
 	public static List<String> cleanOrphanedTargetDefinitionProfiles() throws CoreException {
 		List<String> list = new ArrayList<>();
 		IProfileRegistry registry = getProfileRegistry();
-		ITargetPlatformService tps = PDECore.getDefault().acquireService(ITargetPlatformService.class);
+		ITargetPlatformService tps = TargetPlatformService.getDefault();
 		if (registry != null && tps != null) {
 			IProfile[] profiles = registry.getProfiles();
 			for (IProfile profile : profiles) {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
index 8826104..fb654f4 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/ProfileBundleContainer.java
@@ -33,7 +33,6 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubMonitor;
@@ -46,7 +45,6 @@
 import org.eclipse.pde.core.target.TargetFeature;
 import org.eclipse.pde.internal.core.P2Utils;
 import org.eclipse.pde.internal.core.PDECore;
-import org.eclipse.pde.internal.core.PluginPathFinder;
 
 /**
  * A bundle container representing an installed profile.
@@ -142,9 +140,11 @@
 					throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, ex.getMessage(), ex));
 				}
 			}
-			TargetBundle[] platformXML = resolvePlatformXML(definition, home, monitor);
-			if (platformXML != null) {
-				return platformXML;
+			DirectoryBundleContainer directoryBundleContainer = new DirectoryBundleContainer(home);
+			directoryBundleContainer.resolve(definition, monitor);
+			TargetBundle[] platformBundles = directoryBundleContainer.getBundles();
+			if (platformBundles != null) {
+				return platformBundles;
 			}
 			infos = new BundleInfo[0];
 		}
@@ -257,43 +257,6 @@
 	}
 
 	/**
-	 * Resolves installed bundles based on update manager's platform XML or scans the plugins directory if
-	 * no platform.xml is available
-	 *
-	 * TODO When we are willing to drop support for platform.xml (pre Eclipse 3.4) we should
-	 * replace this method with a simple directory scan like {@link DirectoryBundleContainer}
-	 *
-	 * @param definition
-	 * @param home
-	 * @param monitor
-	 * @return resolved bundles or <code>null</code> if none
-	 * @throws CoreException
-	 */
-	protected TargetBundle[] resolvePlatformXML(ITargetDefinition definition, String home, IProgressMonitor monitor) throws CoreException {
-		URL[] files = PluginPathFinder.getPlatformXMLPaths(home, false);
-		if (files.length > 0) {
-			List<TargetBundle> all = new ArrayList<>(files.length);
-			SubMonitor localMonitor = SubMonitor.convert(monitor, Messages.DirectoryBundleContainer_0, files.length);
-			for (URL file : files) {
-				if (localMonitor.isCanceled()) {
-					throw new OperationCanceledException();
-				}
-				try {
-					File plugin = new File(file.getFile());
-					all.add(new TargetBundle(plugin));
-				} catch (CoreException e) {
-					// Ignore non-bundle files
-				}
-				localMonitor.split(1);
-			}
-			if (!all.isEmpty()) {
-				return all.toArray(new TargetBundle[all.size()]);
-			}
-		}
-		return null;
-	}
-
-	/**
 	 * Returns the home location with all variables resolved as a path.
 	 *
 	 * @return resolved home location
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.junit.runtime.tests/META-INF/MANIFEST.MF
index 56823e1..cdeb50c 100644
--- a/ui/org.eclipse.pde.junit.runtime.tests/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.junit.runtime.tests/META-INF/MANIFEST.MF
@@ -2,14 +2,13 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: PDE JUnit Runtime Tests
 Bundle-SymbolicName: org.eclipse.pde.junit.runtime.tests;singleton:=true
-Bundle-Version: 3.5.700.qualifier
+Bundle-Version: 3.5.800.qualifier
 Automatic-Module-Name: org.eclipse.pde.junit.runtime.tests
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: Eclipse.org
 Bundle-ActivationPolicy: lazy
 Eclipse-BundleShape: dir
 Require-Bundle: org.junit,
- org.hamcrest.library;bundle-version="1.3.0",
  org.eclipse.core.runtime;bundle-version="3.15.400",
  org.eclipse.pde.launching;bundle-version="3.7.700",
  org.eclipse.core.resources;bundle-version="3.13.500",
@@ -17,4 +16,5 @@
  org.eclipse.jdt.junit;bundle-version="3.11.500",
  org.eclipse.jdt.core;bundle-version="3.19.0",
  org.eclipse.debug.ui;bundle-version="3.14.200",
- org.eclipse.ui;bundle-version="3.114.0"
+ org.eclipse.ui;bundle-version="3.114.0",
+ org.assertj;bundle-version="3.14.0"
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/pom.xml b/ui/org.eclipse.pde.junit.runtime.tests/pom.xml
index f4e346b..f6a138a 100644
--- a/ui/org.eclipse.pde.junit.runtime.tests/pom.xml
+++ b/ui/org.eclipse.pde.junit.runtime.tests/pom.xml
@@ -25,7 +25,7 @@
 	</parent>
 	<groupId>org.eclipse.pde</groupId>
 	<artifactId>org.eclipse.pde.junit.runtime.tests</artifactId>
-	<version>3.5.700-SNAPSHOT</version>
+	<version>3.5.800-SNAPSHOT</version>
 	<packaging>eclipse-test-plugin</packaging>
 	
 	<properties>
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/JUnitExecutionTest.java b/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/JUnitExecutionTest.java
index 32c4260..9af4bf7 100644
--- a/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/JUnitExecutionTest.java
+++ b/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/JUnitExecutionTest.java
@@ -13,9 +13,7 @@
  *******************************************************************************/
 package org.eclipse.pde.junit.runtime.tests;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.collection.IsArrayWithSize.arrayWithSize;
-import static org.hamcrest.core.Is.is;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertNotNull;
 
 import java.net.URL;
@@ -94,7 +92,7 @@
 		IType testClass = input.findType("Test1");
 		ITestRunSession session = TestExecutionUtil.runTest(testClass);
 
-		assertThat(session.getChildren(), is(arrayWithSize(1)));
+		assertThat(session.getChildren()).hasSize(1);
 		assertSuccessful(session);
 	}
 
@@ -103,7 +101,7 @@
 		IPackageFragment testPackage = input.findType("Test1").getPackageFragment();
 		ITestRunSession session = TestExecutionUtil.runTest(testPackage);
 
-		assertThat(session.getChildren(), is(arrayWithSize(2)));
+		assertThat(session.getChildren()).hasSize(2);
 		assertSuccessful(session);
 	}
 
@@ -111,7 +109,7 @@
 	public void executeProject() throws Exception {
 		ITestRunSession session = TestExecutionUtil.runTest(input.project);
 
-		assertThat(session.getChildren(), is(arrayWithSize(2)));
+		assertThat(session.getChildren()).hasSize(2);
 		assertSuccessful(session);
 	}
 
@@ -120,7 +118,7 @@
 		IMethod testMethod = input.findType("Test1").getMethod("test1", new String[0]);
 		ITestRunSession session = TestExecutionUtil.runTest(testMethod);
 
-		assertThat(session.getChildren(), is(arrayWithSize(1)));
+		assertThat(session.getChildren()).hasSize(1);
 		assertSuccessful(session);
 	}
 
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/TestExecutionUtil.java b/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/TestExecutionUtil.java
index 0dada5d..9635049 100644
--- a/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/TestExecutionUtil.java
+++ b/ui/org.eclipse.pde.junit.runtime.tests/src/org/eclipse/pde/junit/runtime/tests/TestExecutionUtil.java
@@ -14,9 +14,7 @@
 package org.eclipse.pde.junit.runtime.tests;
 
 import static java.util.stream.Collectors.toList;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.empty;
-import static org.hamcrest.core.Is.is;
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.fail;
 
 import java.io.File;
@@ -63,7 +61,7 @@
 		List<IMarker> errorMarkers = Arrays.stream(project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE)) //
 				.filter(m -> m.getAttribute(IMarker.SEVERITY, 0) == IMarker.SEVERITY_ERROR) //
 				.collect(toList());
-		assertThat("error markers in " + project, errorMarkers, is(empty()));
+		assertThat(errorMarkers).as("error markers in " + project).isEmpty();
 
 		TestLaunchShortcut launchShortcut = new TestLaunchShortcut();
 		ILaunchConfigurationWorkingCopy launchConfiguration = launchShortcut.createLaunchConfiguration(element);
diff --git a/ui/org.eclipse.pde.junit.runtime/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.junit.runtime/META-INF/MANIFEST.MF
index ab18061..f6b0f79 100644
--- a/ui/org.eclipse.pde.junit.runtime/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.junit.runtime/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.junit.runtime; singleton:=true
-Bundle-Version: 3.5.800.qualifier
+Bundle-Version: 3.5.900.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.jdt.junit.runtime;bundle-version="[3.5.0,4.0.0)",
diff --git a/ui/org.eclipse.pde.junit.runtime/pom.xml b/ui/org.eclipse.pde.junit.runtime/pom.xml
index b4dd0ff..58fb5c7 100644
--- a/ui/org.eclipse.pde.junit.runtime/pom.xml
+++ b/ui/org.eclipse.pde.junit.runtime/pom.xml
@@ -19,6 +19,6 @@
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.junit.runtime</artifactId>
-  <version>3.5.800-SNAPSHOT</version>
+  <version>3.5.900-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java
index 7c7a47d..e5bbe92 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchConfigurationHelper.java
@@ -164,9 +164,6 @@
 			// Add bundles.txt as p2 config data
 			if (bundlesTxt != null) {
 				properties.setProperty("org.eclipse.equinox.simpleconfigurator.configUrl", bundlesTxt.toString()); //$NON-NLS-1$
-				if (bundles.get("org.eclipse.update.configurator") != null) { //$NON-NLS-1$
-					properties.setProperty("org.eclipse.update.reconcile", "false"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
 			}
 
 			// Make the p2 data area in the configuration area itself, rather than a sibling of the configuration
@@ -184,11 +181,6 @@
 				}
 				properties.setProperty("eclipse.p2.profile", profileID); //$NON-NLS-1$
 			}
-		} else {
-			// Special processing for update manager (update configurator)
-			String brandingId = LaunchConfigurationHelper.getContributingPlugin(productID);
-			// Create a platform.xml
-			TargetPlatform.createPlatformConfiguration(configurationDirectory, bundles.values().toArray(new IPluginModelBase[bundles.size()]), brandingId != null ? (IPluginModelBase) bundles.get(brandingId) : null);
 		}
 
 		setBundleLocations(bundles, properties, autostart);
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
index b31efaa..6aaaad5 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
@@ -146,12 +146,6 @@
 		programArgs.add("-dev"); //$NON-NLS-1$
 		programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigurationDirectory(configuration).toString() + "/dev.properties", fAllBundles)); //$NON-NLS-1$
 
-		// necessary for PDE to know how to load plugins when target platform = host platform
-		// see PluginPathFinder.getPluginPaths()
-		IPluginModelBase base = findPlugin(PDECore.PLUGIN_ID);
-		if (base != null && VersionUtil.compareMacroMinorMicro(base.getBundleDescription().getVersion(), new Version("3.3.1")) < 0) //$NON-NLS-1$
-			programArgs.add("-pdelaunch"); //$NON-NLS-1$
-
 		// Create the .options file if tracing is turned on
 		if (configuration.getAttribute(IPDELauncherConstants.TRACING, false) && !IPDELauncherConstants.TRACING_NONE.equals(configuration.getAttribute(IPDELauncherConstants.TRACING_CHECKED, (String) null))) {
 			programArgs.add("-debug"); //$NON-NLS-1$
@@ -258,8 +252,6 @@
 	private IPluginModelBase findPlugin(String id) throws CoreException {
 		IPluginModelBase model = PluginRegistry.findModel(id);
 		if (model == null)
-			model = PDECore.getDefault().findPluginInHost(id);
-		if (model == null)
 			abort(NLS.bind(PDEMessages.JUnitLaunchConfiguration_error_missingPlugin, id), null, IStatus.OK);
 		return model;
 	}
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/OSGiLaunchConfigurationInitializer.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/OSGiLaunchConfigurationInitializer.java
index 71cc1f0..dbc2813 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/OSGiLaunchConfigurationInitializer.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/OSGiLaunchConfigurationInitializer.java
@@ -19,6 +19,8 @@
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.core.PDEState;
+import org.eclipse.pde.internal.core.TargetPlatformHelper;
 import org.eclipse.pde.internal.launching.launcher.BundleLauncherHelper;
 
 /**
@@ -80,7 +82,12 @@
 		Set<String> targetBundles = new HashSet<>();
 		Set<String> workspaceBundles = new HashSet<>();
 		IPluginModelBase[] models = PluginRegistry.getActiveModels();
+		PDEState pdeState = TargetPlatformHelper.getPDEState();
 		for (IPluginModelBase model : models) {
+			if (isSourceBundle(pdeState, model)) {
+				continue;
+			}
+
 			boolean inWorkspace = model.getUnderlyingResource() != null;
 			appendBundle(inWorkspace ? workspaceBundles : targetBundles, model);
 		}
@@ -89,6 +96,10 @@
 		configuration.setAttribute(IPDELauncherConstants.AUTOMATIC_ADD, true);
 	}
 
+	private boolean isSourceBundle(PDEState pdeState, IPluginModelBase model) {
+		return pdeState.getBundleSourceEntry(model.getBundleDescription().getBundleId()) != null;
+	}
+
 	private void appendBundle(Set<String> bundleSet, IPluginModelBase model) {
 		String id = model.getPluginBase().getId();
 		String value = BundleLauncherHelper.writeBundleEntry(model, getStartLevel(id), getAutoStart(id));
diff --git a/ui/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF
index 09958f3..84517f9 100644
--- a/ui/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.ui.templates/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %bundleName
 Bundle-SymbolicName: org.eclipse.pde.ui.templates;singleton:=true
-Bundle-Version: 3.6.1000.qualifier
+Bundle-Version: 3.6.1100.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.pde.internal.ui.templates;x-internal:=true,
diff --git a/ui/org.eclipse.pde.ui.templates/pom.xml b/ui/org.eclipse.pde.ui.templates/pom.xml
index 709dc75..0fd632a 100644
--- a/ui/org.eclipse.pde.ui.templates/pom.xml
+++ b/ui/org.eclipse.pde.ui.templates/pom.xml
@@ -19,6 +19,6 @@
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.ui.templates</artifactId>
-  <version>3.6.1000-SNAPSHOT</version>
+  <version>3.6.1100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/ui/org.eclipse.pde.ui.templates/templates_3.5/E4Application/$pluginId$.product b/ui/org.eclipse.pde.ui.templates/templates_3.5/E4Application/$pluginId$.product
index 9791cf9..d954124 100644
--- a/ui/org.eclipse.pde.ui.templates/templates_3.5/E4Application/$pluginId$.product
+++ b/ui/org.eclipse.pde.ui.templates/templates_3.5/E4Application/$pluginId$.product
@@ -17,6 +17,8 @@
 
    <plugins>
       <plugin id="$pluginId$"/>
+      <plugin id="com.sun.jna"/>
+      <plugin id="com.sun.jna.platform"/>
       <plugin id="javax.annotation"/>
       <plugin id="javax.inject"/>
       <plugin id="org.apache.batik.constants"/>
diff --git a/ui/org.eclipse.pde.ui.tests/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui.tests/META-INF/MANIFEST.MF
index 665c924..ce2dfc4 100644
--- a/ui/org.eclipse.pde.ui.tests/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.ui.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: PDE JUnit Tests
 Bundle-SymbolicName: org.eclipse.pde.ui.tests; singleton:=true
-Bundle-Version: 3.10.900.qualifier
+Bundle-Version: 3.10.1000.qualifier
 Bundle-ClassPath: tests.jar
 Bundle-Activator: org.eclipse.pde.ui.tests.PDETestsPlugin
 Bundle-Vendor: Eclipse.org
@@ -41,7 +41,7 @@
  org.eclipse.debug.core,
  org.eclipse.pde.genericeditor.extension,
  org.eclipse.equinox.simpleconfigurator.manipulator;bundle-version="2.1.300",
- org.hamcrest.library;bundle-version="1.3.0"
+ org.assertj;bundle-version="3.14.0"
 Eclipse-LazyStart: true
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Eclipse-BundleShape: dir
diff --git a/ui/org.eclipse.pde.ui.tests/pom.xml b/ui/org.eclipse.pde.ui.tests/pom.xml
index 86bdb0b..61399a5 100644
--- a/ui/org.eclipse.pde.ui.tests/pom.xml
+++ b/ui/org.eclipse.pde.ui.tests/pom.xml
@@ -19,7 +19,7 @@
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.ui.tests</artifactId>
-  <version>3.10.900-SNAPSHOT</version>
+  <version>3.10.1000-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 
   <properties>
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/DynamicPluginProjectReferencesTest.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/DynamicPluginProjectReferencesTest.java
index 7ac49aa..436a966 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/DynamicPluginProjectReferencesTest.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/DynamicPluginProjectReferencesTest.java
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.pde.ui.tests.project;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.emptyArray;
-import static org.hamcrest.Matchers.is;
+
+import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -52,7 +51,7 @@
 		ProjectUtils.importTestProject("tests/projects/host-fragment-" + type + "/testframework");
 
 		IBuildConfiguration[] referenced = host.getReferencedBuildConfigs(host.getActiveBuildConfig().getName(), false);
-		assertThat(referenced, is(emptyArray()));
+		assertThat(referenced).isEmpty();
 	}
 
 	@Test
@@ -110,7 +109,7 @@
 
 		IBuildConfiguration[] referenced = consumer.getReferencedBuildConfigs(consumer.getActiveBuildConfig().getName(),
 				false);
-		assertThat(referenced, is(emptyArray()));
+		assertThat(referenced).isEmpty();
 	}
 
 }
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetMinimalTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetMinimalTests.java
index a6c94b2..457097b 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetMinimalTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetMinimalTests.java
@@ -25,6 +25,7 @@
 @RunWith(Suite.class)
 @SuiteClasses({
 	TargetEnvironmentTestCase.class, //
+	TargetPlatformTests.class, //
 	TargetPlatformHelperTests.class, //
 	// LocalTargetDefinitionTests.class,
 	// WorkspaceTargetDefinitionTests.class
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetTests.java
index 129fa0e..6ede4cc 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/AllTargetTests.java
@@ -19,6 +19,7 @@
 
 @RunWith(Suite.class)
 @SuiteClasses({ TargetEnvironmentTestCase.class, //
+		TargetPlatformTests.class, //
 		TargetPlatformHelperTests.class, //
 		LocalTargetDefinitionTests.class, //
 		WorkspaceTargetDefinitionTests.class, //
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/LocalTargetDefinitionTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/LocalTargetDefinitionTests.java
index d9be574..47876f8 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/LocalTargetDefinitionTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/LocalTargetDefinitionTests.java
@@ -26,9 +26,9 @@
 import org.eclipse.equinox.frameworkadmin.BundleInfo;
 import org.eclipse.pde.core.plugin.*;
 import org.eclipse.pde.core.target.*;
-import org.eclipse.pde.internal.core.*;
-import org.eclipse.pde.internal.core.target.TargetDefinition;
-import org.eclipse.pde.internal.core.target.TargetDefinitionPersistenceHelper;
+import org.eclipse.pde.internal.core.P2Utils;
+import org.eclipse.pde.internal.core.TargetPlatformHelper;
+import org.eclipse.pde.internal.core.target.*;
 import org.eclipse.pde.internal.launching.launcher.LaunchArgumentsHelper;
 import org.eclipse.pde.ui.tests.PDETestsPlugin;
 import org.junit.Test;
@@ -292,29 +292,6 @@
 	}
 
 	/**
-	 * Tests that a target definition equivalent to the default target platform
-	 * contains the same bundles as the default target platform using the
-	 * platform's configuration location (which will do target weaving). This is
-	 * really only tested when run as a JUnit plug-in test suite from within
-	 * Eclipse.
-	 *
-	 * @throws Exception
-	 */
-	@Test
-	public void testWovenTargetPlatform() throws Exception {
-		// the new way
-		ITargetDefinition definition = getNewTarget();
-		ITargetLocation container = getTargetService().newProfileLocation(TargetPlatform.getDefaultLocation(),
-				new File(Platform.getConfigurationLocation().getURL().getFile()).getAbsolutePath());
-		definition.setTargetLocations(new ITargetLocation[] { container });
-		Set<URI> uris = getAllBundleURIs(definition);
-
-		// the old way
-		URL[] pluginPaths = PluginPathFinder.getPluginPaths(TargetPlatform.getDefaultLocation(), true);
-		assertBundlePathsEqual(pluginPaths, uris);
-	}
-
-	/**
 	 * Tests that a bundle directory container is equivalent to scanning
 	 * locations.
 	 *
@@ -322,16 +299,13 @@
 	 */
 	@Test
 	public void testDirectoryBundleContainer() throws Exception {
-		// the new way
 		ITargetDefinition definition = getNewTarget();
 		ITargetLocation container = getTargetService()
 				.newDirectoryLocation(TargetPlatform.getDefaultLocation() + "/plugins");
 		definition.setTargetLocations(new ITargetLocation[] { container });
 		Set<URI> uris = getAllBundleURIs(definition);
 
-		// the old way
-		URL[] pluginPaths = PluginPathFinder.getPluginPaths(TargetPlatform.getDefaultLocation(), false);
-		assertBundlePathsEqual(pluginPaths, uris);
+		assertEquals(getAllBundleURIs(TargetPlatformService.getDefault().newDefaultTarget()), uris);
 	}
 
 	/**
@@ -342,15 +316,12 @@
 	 */
 	@Test
 	public void testVariableDirectoryBundleContainer() throws Exception {
-		// the new way
 		ITargetDefinition definition = getNewTarget();
 		ITargetLocation container = getTargetService().newDirectoryLocation("${eclipse_home}/plugins");
 		definition.setTargetLocations(new ITargetLocation[] { container });
 		Set<URI> uris = getAllBundleURIs(definition);
 
-		// the old way
-		URL[] pluginPaths = PluginPathFinder.getPluginPaths(TargetPlatform.getDefaultLocation(), false);
-		assertBundlePathsEqual(pluginPaths, uris);
+		assertEquals(getAllBundleURIs(TargetPlatformService.getDefault().newDefaultTarget()), uris);
 	}
 
 	/**
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/TargetPlatformTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/TargetPlatformTests.java
new file mode 100644
index 0000000..4748b3d
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/TargetPlatformTests.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2020, Alex Blewitt 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:
+ *     Alex Blewitt - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.pde.ui.tests.target;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.internal.p2.core.helpers.URLUtil;
+import org.eclipse.osgi.service.datalocation.Location;
+import org.eclipse.pde.core.plugin.*;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+import org.w3c.dom.*;
+
+/**
+ * Tests for target platform.
+ */
+public class TargetPlatformTests {
+	@Rule
+	public TemporaryFolder temp = new TemporaryFolder();
+
+	@Test
+	@Deprecated
+	public void testCreatePlatformConfigurationEmpty() throws Exception {
+		File location = temp.newFolder("testCreatePlatformConfigurationEmpty");
+		IPluginModelBase[] plugins = new IPluginModelBase[0];
+		TargetPlatform.createPlatformConfiguration(location, plugins, null);
+		checkPlatformXML(location, plugins);
+	}
+
+	@Test
+	@Deprecated
+	public void testCreatePlatformConfigurationSingle() throws Exception {
+		File location = temp.newFolder("testCreatePlatformConfigurationEmpty");
+		IPluginModelBase[] plugins = PluginRegistry.getExternalModels();
+		Location platform = Platform.getInstallLocation();
+		File platfile = URLUtil.toFile(platform.getURL());
+		System.out.println(platfile);
+		TargetPlatform.createPlatformConfiguration(location, plugins, null);
+		checkPlatformXML(location, plugins);
+	}
+
+	private void checkPlatformXML(File location, IPluginModelBase[] plugins) throws Exception {
+		File parent = new File(location, "org.eclipse.update");
+		File platform_xml = new File(parent, "platform.xml");
+		assertThat(platform_xml).exists();
+		DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		Document document = builder.parse(platform_xml);
+		assertEquals("1.0", document.getXmlVersion());
+		assertEquals("UTF-8", document.getXmlEncoding());
+		Element config = document.getDocumentElement();
+		assertEquals("config", config.getNodeName());
+		assertEquals("true", config.getAttribute("transient"));
+		assertEquals("3.0", config.getAttribute("version"));
+		Date date = new Date(Long.parseLong(config.getAttribute("date")));
+		assertThat(date).isBeforeOrEqualTo(new Date());
+		NodeList sites = config.getElementsByTagName("site");
+		if (plugins.length == 0) {
+			assertEquals(0, sites.getLength());
+		} else {
+			assertNotEquals(0, sites.getLength());
+		}
+		int pluginCount = plugins.length;
+		for (int i = 0; i < sites.getLength(); i++) {
+			Element node = (Element) sites.item(i);
+			assertEquals("true", node.getAttribute("enabled"));
+			assertTrueIfNotEmpty(node.getAttribute("updatable"));
+			assertEquals("USER-INCLUDE", node.getAttribute("policy"));
+			assertThat(node.getAttribute("url")).startsWith("file:/");
+			assertNotNull(node.getAttribute("list"));
+			assertTrue(hasNoChildren(node));
+			String[] list = node.getAttribute("list").split(",");
+			pluginCount -= list.length;
+		}
+		assertEquals(0, pluginCount);
+		NodeList features = config.getElementsByTagName("feature");
+		if (plugins.length == 0) {
+			assertEquals(0, features.getLength());
+		} else {
+			assertNotEquals(0, features.getLength());
+		}
+		for (int i = 0; i < features.getLength(); i++) {
+			Element node = (Element) features.item(i);
+			assertTrueIfNotEmpty(node.getAttribute("enabled"));
+			String url = node.getAttribute("url");
+			assertThat(url).startsWith("features");
+			Matcher matcher = featurePattern.matcher(url);
+			if (matcher.matches()) {
+				// Relies on naming convention feature/id_version
+				assertEquals(matcher.group(1), node.getAttribute("id"));
+				assertEquals(matcher.group(2), node.getAttribute("version"));
+			}
+			assertTrue(hasNoChildren(node));
+		}
+		return;
+	}
+
+	Pattern featurePattern = Pattern.compile(".*/([^_/]*)_([^/]*)");
+
+	private static void assertTrueIfNotEmpty(String string) {
+		if (string != null && !string.isEmpty()) {
+			assertEquals("true", string);
+		}
+	}
+
+	private static boolean hasNoChildren(Element node) {
+		NodeList children = node.getChildNodes();
+		if (children != null && children.getLength() == 1) {
+			Node child = children.item(0);
+			return child == null || "#text".equals(child.getNodeName());
+		}
+		return true;
+	}
+}
diff --git a/ui/org.eclipse.pde.ui/.settings/.api_filters b/ui/org.eclipse.pde.ui/.settings/.api_filters
index 36c32e7..5aed9df 100644
--- a/ui/org.eclipse.pde.ui/.settings/.api_filters
+++ b/ui/org.eclipse.pde.ui/.settings/.api_filters
@@ -66,6 +66,14 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/AbstractPDELaunchConfiguration.java" type="org.eclipse.pde.ui.launcher.AbstractPDELaunchConfiguration">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.AbstractPDELaunchConfiguration"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/pde/ui/launcher/ConfigurationTab.java" type="org.eclipse.pde.ui.launcher.ConfigurationTab">
         <filter comment="Code was moved to pde.launching, but we can't make breaking API changes" id="574668824">
             <message_arguments>
@@ -75,6 +83,32 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/EclipseApplicationLaunchConfiguration.java" type="org.eclipse.pde.ui.launcher.EclipseApplicationLaunchConfiguration">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.EclipseApplicationLaunchConfiguration"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EclipseApplicationLaunchConfiguration"/>
+                <message_argument value="getProgramArguments(ILaunchConfiguration)"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EclipseApplicationLaunchConfiguration"/>
+                <message_argument value="getVMArguments(ILaunchConfiguration)"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EclipseApplicationLaunchConfiguration"/>
+                <message_argument value="EclipseApplicationLaunchConfiguration()"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/pde/ui/launcher/EclipseLauncherTabGroup.java" type="org.eclipse.pde.ui.launcher.EclipseLauncherTabGroup">
         <filter id="576778288">
             <message_arguments>
@@ -83,6 +117,48 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java" type="org.eclipse.pde.ui.launcher.EquinoxLaunchConfiguration">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.EquinoxLaunchConfiguration"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EquinoxLaunchConfiguration"/>
+                <message_argument value="getProgramArguments(ILaunchConfiguration)"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EquinoxLaunchConfiguration"/>
+                <message_argument value="EquinoxLaunchConfiguration()"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/EquinoxPluginsTab.java" type="org.eclipse.pde.ui.launcher.EquinoxPluginsTab">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338944126">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EquinoxPluginsTab"/>
+                <message_argument value="getDefaultStartLevel()"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EquinoxPluginsTab"/>
+                <message_argument value="EquinoxPluginsTab()"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/EquinoxSettingsTab.java" type="org.eclipse.pde.ui.launcher.EquinoxSettingsTab">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.EquinoxSettingsTab"/>
+                <message_argument value="EquinoxSettingsTab()"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/pde/ui/launcher/IPDELauncherConstants.java" type="org.eclipse.pde.ui.launcher.IPDELauncherConstants">
         <filter comment="Code was moved to pde.launching, but we can't make breaking API changes" id="571473929">
             <message_arguments>
@@ -91,6 +167,20 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/JUnitLaunchConfigurationDelegate.java" type="org.eclipse.pde.ui.launcher.JUnitLaunchConfigurationDelegate">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.JUnitLaunchConfigurationDelegate"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.JUnitLaunchConfigurationDelegate"/>
+                <message_argument value="JUnitLaunchConfigurationDelegate()"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/pde/ui/launcher/JUnitTabGroup.java" type="org.eclipse.pde.ui.launcher.JUnitTabGroup">
         <filter id="576778288">
             <message_arguments>
@@ -108,6 +198,48 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationDelegate.java" type="org.eclipse.pde.ui.launcher.OSGiLaunchConfigurationDelegate">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.OSGiLaunchConfigurationDelegate"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.OSGiLaunchConfigurationDelegate"/>
+                <message_argument value="OSGiLaunchConfigurationDelegate()"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationInitializer.java" type="org.eclipse.pde.ui.launcher.OSGiLaunchConfigurationInitializer">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.OSGiLaunchConfigurationInitializer"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.OSGiLaunchConfigurationInitializer"/>
+                <message_argument value="OSGiLaunchConfigurationInitializer()"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="src/org/eclipse/pde/ui/launcher/PDESourcePathProvider.java" type="org.eclipse.pde.ui.launcher.PDESourcePathProvider">
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="336744520">
+            <message_arguments>
+                <message_argument value="@noextend"/>
+                <message_argument value="org.eclipse.pde.ui.launcher.PDESourcePathProvider"/>
+            </message_arguments>
+        </filter>
+        <filter comment="Bug 564563 - Mark deprecated API from o.e.pde.ui.launcher for removal" id="338948223">
+            <message_arguments>
+                <message_argument value="org.eclipse.pde.ui.launcher.PDESourcePathProvider"/>
+                <message_argument value="PDESourcePathProvider()"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="src/org/eclipse/pde/ui/templates/NewPluginProjectFromTemplateWizard.java" type="org.eclipse.pde.ui.templates.NewPluginProjectFromTemplateWizard">
         <filter id="576720909">
             <message_arguments>
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AbstractXMLMarkerResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AbstractXMLMarkerResolution.java
index 9beb42f..fbb7572 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AbstractXMLMarkerResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AbstractXMLMarkerResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2019 IBM Corporation and others.
+ *  Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -27,14 +27,9 @@
 
 public abstract class AbstractXMLMarkerResolution extends AbstractPDEMarkerResolution {
 
-	protected String fLocationPath;
-
 	public AbstractXMLMarkerResolution(int resolutionType, IMarker marker) {
 		super(resolutionType, marker);
-		try {
-			fLocationPath = (String) marker.getAttribute(PDEMarkerFactory.MPK_LOCATION_PATH);
-		} catch (CoreException e) {
-		}
+
 	}
 
 	protected abstract void createChange(IPluginModelBase model);
@@ -46,21 +41,22 @@
 	}
 
 	protected Object findNode(IPluginModelBase base) {
+		String locationPath = null;
 		try {
-			fLocationPath = (String) marker.getAttribute(PDEMarkerFactory.MPK_LOCATION_PATH);
+			locationPath = (String) marker.getAttribute(PDEMarkerFactory.MPK_LOCATION_PATH);
 		} catch (CoreException e) {
 		}
-		if (fLocationPath == null)
+		if (locationPath == null)
 			return null;
 
 		// special case for externalizing strings in manifest.mf
-		if (fLocationPath.charAt(0) != '(' && base instanceof IBundlePluginModelBase) {
+		if (locationPath.charAt(0) != '(' && base instanceof IBundlePluginModelBase) {
 			IBundle bundle = ((IBundlePluginModelBase) base).getBundleModel().getBundle();
-			return bundle.getManifestHeader(fLocationPath);
+			return bundle.getManifestHeader(locationPath);
 		}
 
 		IDocumentElementNode node = null;
-		StringTokenizer strtok = new StringTokenizer(fLocationPath, Character.toString(XMLErrorReporter.F_CHILD_SEP));
+		StringTokenizer strtok = new StringTokenizer(locationPath, Character.toString(XMLErrorReporter.F_CHILD_SEP));
 		while (strtok.hasMoreTokens()) {
 			String token = strtok.nextToken();
 			if (node != null) {
@@ -89,6 +85,11 @@
 	}
 
 	protected String getNameOfNode() {
+		String fLocationPath = null;
+		try {
+			fLocationPath = (String) marker.getAttribute(PDEMarkerFactory.MPK_LOCATION_PATH);
+		} catch (CoreException e) {
+		}
 		int lastChild = fLocationPath.lastIndexOf(')');
 		if (lastChild < 0)
 			return fLocationPath;
@@ -103,6 +104,11 @@
 	}
 
 	protected boolean isAttrNode() {
+		String fLocationPath = null;
+		try {
+			fLocationPath = (String) marker.getAttribute(PDEMarkerFactory.MPK_LOCATION_PATH);
+		} catch (CoreException e) {
+		}
 		return fLocationPath.indexOf(XMLErrorReporter.F_ATT_PREFIX) != -1;
 	}
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddActivationHeaderResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddActivationHeaderResolution.java
index b24463d..99eaff0 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddActivationHeaderResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddActivationHeaderResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2019 IBM Corporation and others.
+ * Copyright (c) 2008, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -26,18 +26,16 @@
 
 public class AddActivationHeaderResolution extends AbstractManifestMarkerResolution {
 
-	String fHeader = null;
 
-	public AddActivationHeaderResolution(int type, String currentHeader, IMarker marker) {
+	public AddActivationHeaderResolution(int type, IMarker marker) {
 		super(type, marker);
-		fHeader = currentHeader;
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		marker.getAttribute("header", ICoreConstants.ECLIPSE_AUTOSTART); //$NON-NLS-1$
+		String markerHeader = marker.getAttribute("header", ICoreConstants.ECLIPSE_AUTOSTART); //$NON-NLS-1$
 		IBundle bundle = model.getBundle();
-		IManifestHeader header = bundle.getManifestHeader(fHeader);
+		IManifestHeader header = bundle.getManifestHeader(markerHeader);
 		if (header instanceof LazyStartHeader) {
 			LazyStartHeader lheader = (LazyStartHeader) header;
 			String exceptions = lheader.getAttribute("exceptions"); //$NON-NLS-1$
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBundleClassPathMarkerResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBundleClassPathMarkerResolution.java
index 09ce2db..ee041e6 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBundleClassPathMarkerResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddBundleClassPathMarkerResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2019 IBM Corporation and others.
+ *  Copyright (c) 2007, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -22,28 +22,28 @@
 
 public class AddBundleClassPathMarkerResolution extends AbstractManifestMarkerResolution {
 
-	private String fValue;
 
-	public AddBundleClassPathMarkerResolution(int type, String value, IMarker marker) {
+
+	public AddBundleClassPathMarkerResolution(int type, IMarker marker) {
 		super(type, marker);
-		this.fValue = value;
+
 	}
 
 	@Override
 	public String getLabel() {
-		return NLS.bind(PDEUIMessages.AddBundleClassPathResolution_add, fValue);
+		return NLS.bind(PDEUIMessages.AddBundleClassPathResolution_add, marker.getAttribute("entry", null)); //$NON-NLS-1$
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		this.fValue = marker.getAttribute("entry", null) ;//$NON-NLS-1$
+		String value = marker.getAttribute("entry", null);//$NON-NLS-1$
 		IBundle bundle = model.getBundle();
 		if (bundle instanceof Bundle) {
 			BundleClasspathHeader header = (BundleClasspathHeader) bundle.getManifestHeader(Constants.BUNDLE_CLASSPATH);
 			if (header != null)
-				header.addLibrary(fValue);
+				header.addLibrary(value);
 			else
-				model.getBundle().setHeader(Constants.BUNDLE_CLASSPATH, fValue);
+				model.getBundle().setHeader(Constants.BUNDLE_CLASSPATH, value);
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddDefaultExecutionEnvironmentResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddDefaultExecutionEnvironmentResolution.java
index 55d671f..611903a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddDefaultExecutionEnvironmentResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddDefaultExecutionEnvironmentResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2007, 2019 IBM Corporation and others.
+ *  Copyright (c) 2007, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -26,16 +26,16 @@
 
 public class AddDefaultExecutionEnvironmentResolution extends AbstractManifestMarkerResolution {
 
-	private String id;
 
-	public AddDefaultExecutionEnvironmentResolution(int type, String id, IMarker marker) {
+
+	public AddDefaultExecutionEnvironmentResolution(int type, IMarker marker) {
 		super(type, marker);
-		this.id = id;
+
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		id = this.marker.getAttribute("ee_id", null); //$NON-NLS-1$
+		String id = this.marker.getAttribute("ee_id", null); //$NON-NLS-1$
 
 		IManifestHeader header = model.getBundle().getManifestHeader(Constants.BUNDLE_REQUIREDEXECUTIONENVIRONMENT);
 		if (header == null) {
@@ -54,6 +54,6 @@
 
 	@Override
 	public String getLabel() {
-		return NLS.bind(PDEUIMessages.AddDefaultExecutionEnvironment_label, id);
+		return NLS.bind(PDEUIMessages.AddDefaultExecutionEnvironment_label, this.marker.getAttribute("ee_id", null));
 	}
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java
index b7cc51f..7227ca8 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageInternalDirectiveMarkerResolution.java
@@ -22,7 +22,7 @@
 public class AddExportPackageInternalDirectiveMarkerResolution extends AddExportPackageMarkerResolution {
 
 	public AddExportPackageInternalDirectiveMarkerResolution(IMarker mark, int type, String values) {
-		super(mark, type, values);
+		super(mark, type);
 	}
 
 	@Override
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java
index 4c88baa..7ac18ce 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/AddExportPackageMarkerResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2006, 2019 IBM Corporation and others.
+ *  Copyright (c) 2006, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -25,11 +25,9 @@
 
 public class AddExportPackageMarkerResolution extends AbstractManifestMarkerResolution {
 
-	private String fValues;
 
-	public AddExportPackageMarkerResolution(IMarker mark, int type, String values) {
+	public AddExportPackageMarkerResolution(IMarker mark, int type) {
 		super(type, mark);
-		this.fValues = values;
 		this.marker = mark;
 	}
 
@@ -53,11 +51,11 @@
 	}
 
 	protected void processPackages(ExportPackageHeader header, boolean setInternal) {
-		fValues = marker.getAttribute("packages", null); //$NON-NLS-1$
-		if (fValues == null) {
+		String values = marker.getAttribute("packages", null); //$NON-NLS-1$
+		if (values == null) {
 			return;
 		}
-		String[] packages = fValues.split(","); //$NON-NLS-1$
+		String[] packages = values.split(","); //$NON-NLS-1$
 		String filter = PDEPlugin.getDefault().getDialogSettings().get(IOrganizeManifestsSettings.PROP_INTERAL_PACKAGE_FILTER);
 		if (filter == null)
 			filter = IOrganizeManifestsSettings.VALUE_DEFAULT_FILTER;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ExternalizeResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ExternalizeResolution.java
index 6b71b90..cd8afcf 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ExternalizeResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ExternalizeResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2019 IBM Corporation and others.
+ *  Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -25,6 +25,7 @@
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.internal.core.ICoreConstants;
 import org.eclipse.pde.internal.core.PDEManager;
+import org.eclipse.pde.internal.core.builders.PDEMarkerFactory;
 import org.eclipse.pde.internal.core.ibundle.IBundle;
 import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase;
 import org.eclipse.pde.internal.core.project.PDEProject;
@@ -61,7 +62,6 @@
 				ITextFileBuffer buffer = manager.getTextFileBuffer(file.getFullPath(), LocationKind.IFILE);
 				if (buffer.isDirty())
 					buffer.commit(null, true);
-
 				IDocument document = buffer.getDocument();
 				ExternalizeStringsOperation.getPropertiesInsertEdit(document, element).apply(document);
 				buffer.commit(null, true);
@@ -79,11 +79,16 @@
 
 	@Override
 	public String getLabel() {
+		String locationPath = null;
+		try {
+			locationPath = (String) marker.getAttribute(PDEMarkerFactory.MPK_LOCATION_PATH);
+		} catch (CoreException e) {
+		}
 		if (isAttrNode())
 			return NLS.bind(PDEUIMessages.ExternalizeResolution_attrib, getNameOfNode());
-		if (fLocationPath.charAt(0) == '(')
+		if (locationPath.charAt(0) == '(')
 			return NLS.bind(PDEUIMessages.ExternalizeResolution_text, getNameOfNode());
-		return NLS.bind(PDEUIMessages.ExternalizeResolution_header, fLocationPath);
+		return NLS.bind(PDEUIMessages.ExternalizeResolution_header, locationPath);
 	}
 
 	private void addLocalization(IPluginModelBase model, String localizationValue) {
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalImportPackageResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalImportPackageResolution.java
index 4f8d84a..00d5e10 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalImportPackageResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalImportPackageResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2019 IBM Corporation and others.
+ *  Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -21,20 +21,20 @@
 
 public class OptionalImportPackageResolution extends AbstractManifestMarkerResolution {
 
-	private String fPackageName;
+
 
 	public OptionalImportPackageResolution(int type, String packageName, IMarker marker) {
 		super(type, marker);
-		fPackageName = packageName;
+
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		fPackageName = marker.getAttribute("packageName", (String) null); //$NON-NLS-1$
+		String packageName = marker.getAttribute("packageName", (String) null); //$NON-NLS-1$
 		Bundle bundle = (Bundle) model.getBundle();
 		ImportPackageHeader header = (ImportPackageHeader) bundle.getManifestHeader(Constants.IMPORT_PACKAGE);
 		if (header != null) {
-			ImportPackageObject pkg = header.getPackage(fPackageName);
+			ImportPackageObject pkg = header.getPackage(packageName);
 			if (pkg != null)
 				pkg.setOptional(true);
 		}
@@ -42,12 +42,12 @@
 
 	@Override
 	public String getDescription() {
-		return NLS.bind(PDEUIMessages.OptionalImportPkgResolution_description, fPackageName);
+		return NLS.bind(PDEUIMessages.OptionalImportPkgResolution_description,marker.getAttribute("packageName", (String) null)); //$NON-NLS-1$
 	}
 
 	@Override
 	public String getLabel() {
-		return NLS.bind(PDEUIMessages.OptionalImportPkgResolution_label, fPackageName);
+		return NLS.bind(PDEUIMessages.OptionalImportPkgResolution_label,marker.getAttribute("packageName", (String) null)); //$NON-NLS-1$
 	}
 
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalRequireBundleResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalRequireBundleResolution.java
index 0496196..51356c2 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalRequireBundleResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OptionalRequireBundleResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2019 IBM Corporation and others.
+ *  Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -21,22 +21,21 @@
 
 public class OptionalRequireBundleResolution extends AbstractManifestMarkerResolution {
 
-	private String fBundleId;
 
-	public OptionalRequireBundleResolution(int type, String bundleId, IMarker marker) {
+	public OptionalRequireBundleResolution(int type, IMarker marker) {
 		super(type, marker);
-		fBundleId = bundleId;
+
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		fBundleId= marker.getAttribute("bundleId", (String) null); //$NON-NLS-1$
+		String bundleId = marker.getAttribute("bundleId", (String) null); //$NON-NLS-1$
 		Bundle bundle = (Bundle) model.getBundle();
 		RequireBundleHeader header = (RequireBundleHeader) bundle.getManifestHeader(Constants.REQUIRE_BUNDLE);
 		if (header != null) {
 			RequireBundleObject[] requiredBundles = header.getRequiredBundles();
 			for (RequireBundleObject requiredBundle : requiredBundles) {
-				if (fBundleId.equals(requiredBundle.getId()))
+				if (bundleId.equals(requiredBundle.getId()))
 					requiredBundle.setOptional(true);
 			}
 		}
@@ -44,12 +43,12 @@
 
 	@Override
 	public String getDescription() {
-		return NLS.bind(PDEUIMessages.OptionalRequireBundleResolution_description, fBundleId);
+		return NLS.bind(PDEUIMessages.OptionalRequireBundleResolution_description,  marker.getAttribute("bundleId", (String) null)); //$NON-NLS-1$
 	}
 
 	@Override
 	public String getLabel() {
-		return NLS.bind(PDEUIMessages.OptionalRequireBundleResolution_label, fBundleId);
+		return NLS.bind(PDEUIMessages.OptionalRequireBundleResolution_label,  marker.getAttribute("bundleId", (String) null)); //$NON-NLS-1$
 	}
 
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeExportPackageResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeExportPackageResolution.java
deleted file mode 100644
index 7713ea7..0000000
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeExportPackageResolution.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2005, 2019 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
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.correction;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.pde.internal.core.text.bundle.BundleModel;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-import org.eclipse.pde.internal.ui.wizards.tools.OrganizeManifest;
-
-public class OrganizeExportPackageResolution extends AbstractManifestMarkerResolution {
-
-	public OrganizeExportPackageResolution(int type, IMarker marker) {
-		super(type, marker);
-	}
-
-	@Override
-	protected void createChange(BundleModel model) {
-		OrganizeManifest.organizeExportPackages(model.getBundle(), fResource.getProject(), true, true);
-	}
-
-	@Override
-	public String getDescription() {
-		return PDEUIMessages.OrganizeExportPackageResolution_Description;
-	}
-
-	@Override
-	public String getLabel() {
-		return PDEUIMessages.OrganizeExportPackageResolution_Label;
-	}
-
-}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeImportPackageResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeImportPackageResolution.java
deleted file mode 100644
index 1f93d32..0000000
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeImportPackageResolution.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2005, 2019 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
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.correction;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.pde.internal.core.text.bundle.BundleModel;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-import org.eclipse.pde.internal.ui.wizards.tools.OrganizeManifest;
-
-public class OrganizeImportPackageResolution extends AbstractManifestMarkerResolution {
-
-	private boolean fRemoveImports;
-
-	public OrganizeImportPackageResolution(int type, boolean removeImports, IMarker marker) {
-		super(type, marker);
-		fRemoveImports = removeImports;
-	}
-
-	@Override
-	protected void createChange(BundleModel model) {
-		OrganizeManifest.organizeImportPackages(model.getBundle(), fRemoveImports);
-	}
-
-	@Override
-	public String getDescription() {
-		return PDEUIMessages.OrganizeImportPackageResolution_Description;
-	}
-
-	@Override
-	public String getLabel() {
-		return PDEUIMessages.OrganizeImportPackageResolution_Label;
-	}
-
-}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeRequireBundleResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeRequireBundleResolution.java
deleted file mode 100644
index 20f7beb..0000000
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/OrganizeRequireBundleResolution.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*******************************************************************************
- *  Copyright (c) 2005, 2019 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
- *******************************************************************************/
-package org.eclipse.pde.internal.ui.correction;
-
-import org.eclipse.core.resources.IMarker;
-import org.eclipse.pde.internal.core.text.bundle.BundleModel;
-import org.eclipse.pde.internal.ui.PDEUIMessages;
-import org.eclipse.pde.internal.ui.wizards.tools.OrganizeManifest;
-
-public class OrganizeRequireBundleResolution extends AbstractManifestMarkerResolution {
-
-	private boolean fRemoveImports;
-
-	public OrganizeRequireBundleResolution(int type, boolean removeImports, IMarker marker) {
-		super(type, marker);
-		fRemoveImports = removeImports;
-	}
-
-	@Override
-	protected void createChange(BundleModel model) {
-		OrganizeManifest.organizeRequireBundles(model.getBundle(), fRemoveImports);
-	}
-
-	@Override
-	public String getDescription() {
-		return PDEUIMessages.OrganizeRequireBundleResolution_Description;
-	}
-
-	@Override
-	public String getLabel() {
-		return PDEUIMessages.OrganizeRequireBundleResolution_Label;
-	}
-
-}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveExportPackageResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveExportPackageResolution.java
index 08ca783..00c8122 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveExportPackageResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveExportPackageResolution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2019 IBM Corporation and others.
+ *  Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  *  This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License 2.0
@@ -21,30 +21,30 @@
 
 public class RemoveExportPackageResolution extends AbstractManifestMarkerResolution {
 
-	String fPackage;
 
-	public RemoveExportPackageResolution(int type, String pkgName, IMarker marker) {
+
+	public RemoveExportPackageResolution(int type, IMarker marker) {
 		super(type, marker);
-		fPackage = pkgName;
+
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		fPackage = marker.getAttribute("packageName", (String) null); //$NON-NLS-1$
+		String markerPackage = marker.getAttribute("packageName", (String) null); //$NON-NLS-1$
 		Bundle bundle = (Bundle) model.getBundle();
 		ExportPackageHeader header = (ExportPackageHeader) bundle.getManifestHeader(Constants.EXPORT_PACKAGE);
 		if (header != null)
-			header.removePackage(fPackage);
+			header.removePackage(markerPackage);
 	}
 
 	@Override
 	public String getLabel() {
-		return NLS.bind(PDEUIMessages.RemoveExportPkgs_label, fPackage);
+		return NLS.bind(PDEUIMessages.RemoveExportPkgs_label, marker.getAttribute("packageName", (String) null)); //$NON-NLS-1$
 	}
 
 	@Override
 	public String getDescription() {
-		return NLS.bind(PDEUIMessages.RemoveExportPkgs_description, fPackage);
+		return NLS.bind(PDEUIMessages.RemoveExportPkgs_description, marker.getAttribute("packageName", (String) null));//$NON-NLS-1$
 	}
 
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveImportPackageResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveImportPackageResolution.java
index 450f856..7fdbde6 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveImportPackageResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/RemoveImportPackageResolution.java
@@ -21,30 +21,28 @@
 
 public class RemoveImportPackageResolution extends AbstractManifestMarkerResolution {
 
-	private String fPkgName;
 
-	public RemoveImportPackageResolution(int type, String packageName, IMarker marker) {
+	public RemoveImportPackageResolution(int type, IMarker marker) {
 		super(type, marker);
-		fPkgName = packageName;
+
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		fPkgName = marker.getAttribute("packageName", (String) null); //$NON-NLS-1$
 		Bundle bundle = (Bundle) model.getBundle();
 		ImportPackageHeader header = (ImportPackageHeader) bundle.getManifestHeader(Constants.IMPORT_PACKAGE);
 		if (header != null)
-			header.removePackage(fPkgName);
+			header.removePackage(marker.getAttribute("packageName", (String) null)); //$NON-NLS-1$
 	}
 
 	@Override
 	public String getDescription() {
-		return NLS.bind(PDEUIMessages.RemoveImportPkgResolution_description, fPkgName);
+		return NLS.bind(PDEUIMessages.RemoveImportPkgResolution_description, marker.getAttribute("packageName", (String) null)); //$NON-NLS-1$
 	}
 
 	@Override
 	public String getLabel() {
-		return NLS.bind(PDEUIMessages.RemoveImportPkgResolution_label, fPkgName);
+		return NLS.bind(PDEUIMessages.RemoveImportPkgResolution_label, marker.getAttribute("packageName", (String) null)); //$NON-NLS-1$
 	}
 
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
index 0d6e3fa..f72334c 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/ResolutionGenerator.java
@@ -53,8 +53,8 @@
 			case PDEMarkerFactory.M_DEPRECATED_AUTOSTART :
 				// if targetVersion <= 3.3, we can add Eclipse-LazyStart header even if previous header's value was false.  We can't do this for 3.4+ since Bundle-AcativationPolicy does not have a "false" value.
 				if (marker.getAttribute(PDEMarkerFactory.ATTR_CAN_ADD, true) || TargetPlatformHelper.getTargetVersion() <= 3.3)
-					return new IMarkerResolution[] {new UpdateActivationResolution(AbstractPDEMarkerResolution.RENAME_TYPE, marker.getAttribute(PDEMarkerFactory.ATTR_HEADER, ICoreConstants.ECLIPSE_AUTOSTART),marker), new AddActivationHeaderResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("header", ICoreConstants.ECLIPSE_AUTOSTART), marker)}; //$NON-NLS-1$
-				return new IMarkerResolution[] {new UpdateActivationResolution(AbstractPDEMarkerResolution.RENAME_TYPE, marker.getAttribute(PDEMarkerFactory.ATTR_HEADER, ICoreConstants.ECLIPSE_AUTOSTART), marker)};
+					return new IMarkerResolution[] {new UpdateActivationResolution(AbstractPDEMarkerResolution.RENAME_TYPE,marker), new AddActivationHeaderResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker)};
+				return new IMarkerResolution[] {new UpdateActivationResolution(AbstractPDEMarkerResolution.RENAME_TYPE,  marker)};
 			case PDEMarkerFactory.M_JAVA_PACKAGE__PORTED :
 				return new IMarkerResolution[] {new CreateJREBundleHeaderResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker)};
 			case PDEMarkerFactory.M_SINGLETON_DIR_NOT_SET :
@@ -92,7 +92,7 @@
 			case PDEMarkerFactory.M_UNECESSARY_DEP :
 				return new IMarkerResolution[] {new RemoveRequireBundleResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, marker.getAttribute("bundleId", null), marker)}; //$NON-NLS-1$
 			case PDEMarkerFactory.M_MISSING_EXPORT_PKGS :
-				return new IMarkerResolution[] { new AddExportPackageMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("packages", null)), new AddExportPackageInternalDirectiveMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("packages", null))  }; //$NON-NLS-1$//$NON-NLS-2$
+				return new IMarkerResolution[] { new AddExportPackageMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE), new AddExportPackageInternalDirectiveMarkerResolution(marker,AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("packages", null))  }; //$NON-NLS-1$
 			case PDEMarkerFactory.B_REMOVE_SLASH_FILE_ENTRY :
 				return new IMarkerResolution[] {new RemoveSeperatorBuildEntryResolution(AbstractPDEMarkerResolution.RENAME_TYPE, marker)};
 			case PDEMarkerFactory.B_APPEND_SLASH_FOLDER_ENTRY :
@@ -118,9 +118,9 @@
 			case PDEMarkerFactory.M_DEPRECATED_PROVIDE_PACKAGE :
 				return new IMarkerResolution[] {new RenameProvidePackageResolution(AbstractPDEMarkerResolution.RENAME_TYPE,marker)};
 			case PDEMarkerFactory.M_EXECUTION_ENVIRONMENT_NOT_SET :
-				return new IMarkerResolution[] {new AddDefaultExecutionEnvironmentResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("ee_id", null),marker)}; //$NON-NLS-1$
+				return new IMarkerResolution[] {new AddDefaultExecutionEnvironmentResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker)};
 			case PDEMarkerFactory.M_MISSING_BUNDLE_CLASSPATH_ENTRY :
-				return new IMarkerResolution[] {new AddBundleClassPathMarkerResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker.getAttribute("entry", null), marker)}; //$NON-NLS-1$
+				return new IMarkerResolution[] {new AddBundleClassPathMarkerResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker)};
 			case PDEMarkerFactory.M_LAZYLOADING_HAS_NO_EFFECT :
 				return new IMarkerResolution[] {new RemoveLazyLoadingDirectiveResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, marker.getAttribute("header", ICoreConstants.ECLIPSE_LAZYSTART), marker)}; //$NON-NLS-1$
 			case PDEMarkerFactory.M_NO_LINE_TERMINATION :
@@ -201,7 +201,7 @@
 		if (packageName != null) {
 			IResource res = marker.getResource();
 			if (res != null)
-				return new IMarkerResolution[] {new RemoveExportPackageResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, packageName, marker)};
+				return new IMarkerResolution[] {new RemoveExportPackageResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, marker)};
 		}
 		return NO_RESOLUTIONS;
 	}
@@ -213,9 +213,9 @@
 
 		boolean optionalPkg = marker.getAttribute("optional", false); //$NON-NLS-1$
 		if (optionalPkg)
-			return new IMarkerResolution[] {new RemoveImportPackageResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, packageName, marker), new ConfigureTargetPlatformResolution()};
+			return new IMarkerResolution[] {new RemoveImportPackageResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, marker), new ConfigureTargetPlatformResolution()};
 
-		return new IMarkerResolution[] {new RemoveImportPackageResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, packageName, marker), new OptionalImportPackageResolution(AbstractPDEMarkerResolution.RENAME_TYPE, packageName, marker), new ConfigureTargetPlatformResolution()};
+		return new IMarkerResolution[] {new RemoveImportPackageResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, marker), new OptionalImportPackageResolution(AbstractPDEMarkerResolution.RENAME_TYPE, packageName, marker), new ConfigureTargetPlatformResolution()};
 	}
 
 	private IMarkerResolution[] getUnresolvedBundle(IMarker marker) {
@@ -238,7 +238,7 @@
 
 		//		IPreferenceStore store = PDEPlugin.getDefault().getPreferenceStore();
 		//		boolean removeImports = store.getString(IPreferenceConstants.PROP_RESOLVE_IMPORTS).equals(IPreferenceConstants.VALUE_REMOVE_IMPORT);
-		return new IMarkerResolution[] {new RemoveRequireBundleResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, bundleId, marker), new OptionalRequireBundleResolution(AbstractPDEMarkerResolution.RENAME_TYPE, bundleId, marker), new ConfigureTargetPlatformResolution()
+		return new IMarkerResolution[] {new RemoveRequireBundleResolution(AbstractPDEMarkerResolution.REMOVE_TYPE, bundleId, marker), new OptionalRequireBundleResolution(AbstractPDEMarkerResolution.RENAME_TYPE, marker), new ConfigureTargetPlatformResolution()
 		//				new OrganizeRequireBundleResolution(AbstractPDEMarkerResolution.RENAME_TYPE, removeImports)
 		};
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/UpdateActivationResolution.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/UpdateActivationResolution.java
index bade7ac..64e8029 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/UpdateActivationResolution.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/UpdateActivationResolution.java
@@ -26,19 +26,18 @@
 
 public class UpdateActivationResolution extends AbstractManifestMarkerResolution {
 
-	private String fHeader = null;
 
-	public UpdateActivationResolution(int type, String currentHeader, IMarker marker) {
+	public UpdateActivationResolution(int type, IMarker marker) {
 		super(type, marker);
-		fHeader = currentHeader;
+
 	}
 
 	@Override
 	protected void createChange(BundleModel model) {
-		fHeader = marker.getAttribute(PDEMarkerFactory.ATTR_HEADER, ICoreConstants.ECLIPSE_AUTOSTART);
+		String localHeader = marker.getAttribute(PDEMarkerFactory.ATTR_HEADER, ICoreConstants.ECLIPSE_AUTOSTART);
 		if (TargetPlatformHelper.getTargetVersion() >= 3.4) {
 			// get the header we wish to replace
-			LazyStartHeader header = (LazyStartHeader) model.getBundle().getManifestHeader(fHeader);
+			LazyStartHeader header = (LazyStartHeader) model.getBundle().getManifestHeader(localHeader);
 			if (header != null) {
 				// create a new header and copy over information
 				LazyStartHeader newHeader = (LazyStartHeader) model.getFactory().createHeader(Constants.BUNDLE_ACTIVATIONPOLICY, Constants.ACTIVATION_LAZY);
@@ -61,7 +60,7 @@
 				// remove old header from Bundle object.  Add new header to Bundle object
 				Bundle bundle = (Bundle) model.getBundle();
 				Map<String, IManifestHeader> map = bundle.getHeaders();
-				map.remove(fHeader);
+				map.remove(localHeader);
 				map.put(Constants.BUNDLE_ACTIVATIONPOLICY, newHeader);
 				// fire ModelChanged so that way the BundleTextChangeListener will make proper ReplaceTextEdits
 				model.fireModelObjectChanged(newHeader, Constants.BUNDLE_ACTIVATIONPOLICY, null, header.getValue());
@@ -82,7 +81,7 @@
 	@Override
 	public String getLabel() {
 		if (TargetPlatformHelper.getTargetVersion() >= 3.4)
-			return NLS.bind(PDEUIMessages.UpdateActivationResolution_bundleActivationPolicy_desc, fHeader);
+			return NLS.bind(PDEUIMessages.UpdateActivationResolution_bundleActivationPolicy_desc,  marker.getAttribute(PDEMarkerFactory.ATTR_HEADER, ICoreConstants.ECLIPSE_AUTOSTART));
 		return PDEUIMessages.UpdateActivationResolution_lazyStart_desc;
 	}
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java
index 5719e5b..8a942a7 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/text/ColorManager.java
@@ -13,7 +13,8 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ui.editor.text;
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Map;
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jface.preference.IPreferenceStore;
 import org.eclipse.jface.preference.PreferenceConverter;
@@ -100,20 +101,13 @@
 		}
 	}
 
-	public void disposeColors(boolean resetSingleton) {
-		Iterator<Color> e = fColorTable.values().iterator();
-		while (e.hasNext())
-			e.next().dispose();
-		if (resetSingleton)
-			fColorManager = null;
-
-	}
-
 	@Override
 	public void dispose() {
 		counter--;
-		if (counter == 0)
-			disposeColors(true);
+		if (counter == 0) {
+			fColorManager = null;
+
+		}
 	}
 
 	private void putColor(IPreferenceStore pstore, String property) {
@@ -123,9 +117,9 @@
 	private void putColor(String property, RGB setting) {
 		Color oldColor = fColorTable.get(property);
 		if (oldColor != null) {
-			if (oldColor.getRGB().equals(setting))
+			if (oldColor.getRGB().equals(setting)) {
 				return;
-			oldColor.dispose();
+			}
 		}
 		fColorTable.put(property, new Color(Display.getCurrent(), setting));
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java
index f5dd9f8..d00c064 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/BlockAdapter.java
@@ -141,6 +141,7 @@
 				}
 				fLayout.topControl = fPluginBlockComposite;
 			}
+			fLayout.topControl.requestLayout();
 			fActiveIndex = index;
 		} catch (CoreException ex) {
 			PDEPlugin.log(ex);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
index a70b9df..a5763fc 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
@@ -362,7 +362,6 @@
 		String computedName = getComputedName(new Path(fPath).lastSegment());
 		ILaunchConfigurationWorkingCopy wc = configType.newInstance(null, computedName);
 		wc.setAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultWorkspaceLocation(computedName));
-		wc.setAttribute(IPDELauncherConstants.USEFEATURES, false);
 		wc.setAttribute(IPDELauncherConstants.USE_DEFAULT, false);
 		wc.setAttribute(IPDELauncherConstants.DOCLEAR, false);
 		wc.setAttribute(IPDEConstants.DOCLEARLOG, false);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/ConditionalListSelectionDialog.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/ConditionalListSelectionDialog.java
index 2d0ac46..fdefd62 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/ConditionalListSelectionDialog.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/ConditionalListSelectionDialog.java
@@ -16,6 +16,7 @@
 import static org.eclipse.swt.events.SelectionListener.widgetSelectedAdapter;
 
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.text.StringMatcher;
 import org.eclipse.jface.dialogs.IDialogConstants;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.pde.internal.ui.PDEUIMessages;
@@ -24,7 +25,6 @@
 import org.eclipse.ui.dialogs.ElementListSelectionDialog;
 import org.eclipse.ui.dialogs.FilteredList;
 import org.eclipse.ui.dialogs.FilteredList.FilterMatcher;
-import org.eclipse.ui.internal.misc.StringMatcher;
 
 public class ConditionalListSelectionDialog extends ElementListSelectionDialog {
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/MessageLine.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/MessageLine.java
index 50e3274..b3652c7 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/MessageLine.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/parts/MessageLine.java
@@ -84,10 +84,7 @@
 
 	@Override
 	public void dispose() {
-		if (fErrorMsgAreaBackground != null) {
-			fErrorMsgAreaBackground.dispose();
-			fErrorMsgAreaBackground = null;
-		}
+		fErrorMsgAreaBackground = null;
 		super.dispose();
 	}
 }
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java
index e906bbd..d76988f 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/EditorPreferencePage.java
@@ -47,7 +47,6 @@
 
 	@Override
 	public void dispose() {
-		fColorManager.disposeColors(false);
 		fXMLTab.dispose();
 		fManifestTab.dispose();
 		super.dispose();
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java
index 17d6aa6..144632d 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/preferences/MainPreferencePage.java
@@ -31,6 +31,7 @@
 import org.eclipse.jface.window.Window;
 import org.eclipse.pde.core.target.ITargetPlatformService;
 import org.eclipse.pde.internal.core.*;
+import org.eclipse.pde.internal.core.target.TargetPlatformService;
 import org.eclipse.pde.internal.launching.ILaunchingPreferenceConstants;
 import org.eclipse.pde.internal.launching.PDELaunchingPlugin;
 import org.eclipse.pde.internal.ui.*;
@@ -318,10 +319,8 @@
 			store.setValue(IPreferenceConstants.ADD_TO_JAVA_SEARCH, synchJavaSearch);
 			try {
 				if (synchJavaSearch) {
-					ITargetPlatformService service = PDECore.getDefault().acquireService(ITargetPlatformService.class);
-					if (service != null) {
-						AddToJavaSearchJob.synchWithTarget(service.getWorkspaceTargetDefinition());
-					}
+					ITargetPlatformService service = TargetPlatformService.getDefault();
+					AddToJavaSearchJob.synchWithTarget(service.getWorkspaceTargetDefinition());
 				} else {
 					AddToJavaSearchJob.clearAll();
 				}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractPDELaunchConfiguration.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractPDELaunchConfiguration.java
index 515736a..728be15 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractPDELaunchConfiguration.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractPDELaunchConfiguration.java
@@ -18,8 +18,12 @@
  * <p>
  * Clients may subclass this class.
  * </p>
+ *
  * @since 3.2
- * @deprecated use {@link org.eclipse.pde.launching.AbstractPDELaunchConfiguration}
+ * @deprecated use
+ *             {@link org.eclipse.pde.launching.AbstractPDELaunchConfiguration}
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.AbstractPDELaunchConfiguration
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseApplicationLaunchConfiguration.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseApplicationLaunchConfiguration.java
index e86f830..e40c367 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseApplicationLaunchConfiguration.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseApplicationLaunchConfiguration.java
@@ -22,13 +22,11 @@
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.core.plugin.TargetPlatform;
-import org.eclipse.pde.internal.core.*;
+import org.eclipse.pde.internal.core.PDECore;
 import org.eclipse.pde.internal.core.util.CoreUtility;
 import org.eclipse.pde.internal.core.util.VersionUtil;
 import org.eclipse.pde.internal.launching.PDEMessages;
 import org.eclipse.pde.internal.launching.launcher.*;
-import org.eclipse.pde.internal.ui.PDEPlugin;
 import org.osgi.framework.Version;
 
 /**
@@ -36,8 +34,12 @@
  * <p>
  * Clients may subclass and instantiate this class.
  * </p>
+ *
  * @since 3.2
- * @deprecated use {@link org.eclipse.pde.launching.EclipseApplicationLaunchConfiguration}
+ * @deprecated use
+ *             {@link org.eclipse.pde.launching.EclipseApplicationLaunchConfiguration}
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.AbstractPDELaunchConfiguration
  */
 @Deprecated
@@ -58,154 +60,13 @@
 
 	@Override
 	public String[] getProgramArguments(ILaunchConfiguration configuration) throws CoreException {
-		ArrayList<String> programArgs = new ArrayList<>();
-
-		// If a product is specified, then add it to the program args
-		if (configuration.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.USE_PRODUCT, false)) {
-			String product = configuration.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.PRODUCT, ""); //$NON-NLS-1$
-			if (product.length() > 0) {
-				programArgs.add("-product"); //$NON-NLS-1$
-				programArgs.add(product);
-			} else { // TODO product w/o an application and product... how to handle gracefully?
-				programArgs.add("-application"); //$NON-NLS-1$
-				programArgs.add(configuration.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.APPLICATION, "")); //$NON-NLS-1$
-			}
-		} else {
-			// specify the application to launch
-			programArgs.add("-application"); //$NON-NLS-1$
-			programArgs.add(configuration.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.APPLICATION, TargetPlatform.getDefaultApplication()));
-		}
-
-		// specify the workspace location for the runtime workbench
-		if (fWorkspaceLocation == null) {
-			fWorkspaceLocation = LaunchArgumentsHelper.getWorkspaceLocation(configuration);
-		}
-		if (fWorkspaceLocation.length() > 0) {
-			programArgs.add("-data"); //$NON-NLS-1$
-			programArgs.add(fWorkspaceLocation);
-		}
-
-		boolean showSplash = true;
-		if (configuration.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.USEFEATURES, false)) {
-			validateFeatures();
-			IPath installPath = PDEPlugin.getWorkspace().getRoot().getLocation();
-			programArgs.add("-install"); //$NON-NLS-1$
-			programArgs.add("file:" + installPath.removeLastSegments(1).addTrailingSeparator().toString()); //$NON-NLS-1$
-			if (!configuration.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, true)) {
-				programArgs.add("-configuration"); //$NON-NLS-1$
-				programArgs.add("file:" + new Path(getConfigDir(configuration).getPath()).addTrailingSeparator().toString()); //$NON-NLS-1$
-			}
-			programArgs.add("-update"); //$NON-NLS-1$
-			// add the output folder names
-			programArgs.add("-dev"); //$NON-NLS-1$
-			programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigDir(configuration).toString() + "/dev.properties", true)); //$NON-NLS-1$
-		} else {
-			String productID = LaunchConfigurationHelper.getProductID(configuration);
-			Properties prop = LaunchConfigurationHelper.createConfigIniFile(configuration, productID, fAllBundles, fModels, getConfigDir(configuration));
-			showSplash = prop.containsKey("osgi.splashPath") || prop.containsKey("splashLocation"); //$NON-NLS-1$ //$NON-NLS-2$
-			String brandingId = LaunchConfigurationHelper.getContributingPlugin(productID);
-			TargetPlatform.createPlatformConfiguration(getConfigDir(configuration), fAllBundles.values().toArray(new IPluginModelBase[fAllBundles.size()]), brandingId != null ? (IPluginModelBase) fAllBundles.get(brandingId) : null);
-			TargetPlatformHelper.checkPluginPropertiesConsistency(fAllBundles, getConfigDir(configuration));
-			programArgs.add("-configuration"); //$NON-NLS-1$
-			programArgs.add("file:" + new Path(getConfigDir(configuration).getPath()).addTrailingSeparator().toString()); //$NON-NLS-1$
-
-			// add the output folder names
-			programArgs.add("-dev"); //$NON-NLS-1$
-			programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigDir(configuration).toString() + "/dev.properties", fAllBundles)); //$NON-NLS-1$
-		}
-		// necessary for PDE to know how to load plugins when target platform = host platform
-		// see PluginPathFinder.getPluginPaths() and PluginPathFinder.isDevLaunchMode()
-		IPluginModelBase base = fAllBundles.get(PDECore.PLUGIN_ID);
-		if (base != null && VersionUtil.compareMacroMinorMicro(base.getBundleDescription().getVersion(), new Version("3.3.1")) < 0) //$NON-NLS-1$
-			programArgs.add("-pdelaunch"); //$NON-NLS-1$
-
-		String[] args = super.getProgramArguments(configuration);
-		Collections.addAll(programArgs, args);
-
-		if (!programArgs.contains("-nosplash") && showSplash) { //$NON-NLS-1$
-			if (TargetPlatformHelper.getTargetVersion() >= 3.1) {
-				programArgs.add(0, "-launcher"); //$NON-NLS-1$
-
-				IPath path = null;
-				if (TargetPlatform.getOS().equals("macosx")) { //$NON-NLS-1$
-					path = new Path(TargetPlatform.getLocation()).append("Eclipse.app/Contents/MacOS/eclipse"); //$NON-NLS-1$
-				} else {
-					path = new Path(TargetPlatform.getLocation()).append("eclipse"); //$NON-NLS-1$
-					if (TargetPlatform.getOS().equals("win32")) { //$NON-NLS-1$
-						path = path.addFileExtension("exe"); //$NON-NLS-1$
-					}
-				}
-
-				programArgs.add(1, path.toOSString()); //This could be the branded launcher if we want (also this does not bring much)
-				programArgs.add(2, "-name"); //$NON-NLS-1$
-				programArgs.add(3, "Eclipse"); //This should be the name of the product //$NON-NLS-1$
-				programArgs.add(4, "-showsplash"); //$NON-NLS-1$
-				programArgs.add(5, "600"); //$NON-NLS-1$
-			} else {
-				programArgs.add(0, "-showsplash"); //$NON-NLS-1$
-				programArgs.add(1, computeShowsplashArgument());
-			}
-		}
-		return programArgs.toArray(new String[programArgs.size()]);
-	}
-
-	private void validateFeatures() throws CoreException {
-		IPath installPath = PDEPlugin.getWorkspace().getRoot().getLocation();
-		String lastSegment = installPath.lastSegment();
-		boolean badStructure = lastSegment == null;
-		if (!badStructure) {
-			IPath featuresPath = installPath.removeLastSegments(1).append("features"); //$NON-NLS-1$
-			badStructure = !lastSegment.equalsIgnoreCase("plugins") //$NON-NLS-1$
-					|| !featuresPath.toFile().exists();
-		}
-		if (badStructure) {
-			throw new CoreException(LauncherUtils.createErrorStatus(PDEMessages.WorkbenchLauncherConfigurationDelegate_badFeatureSetup));
-		}
-		// Ensure important files are present
-		ensureProductFilesExist(getProductPath());
-	}
-
-	private IPath getProductPath() {
-		return PDEPlugin.getWorkspace().getRoot().getLocation().removeLastSegments(1);
-	}
-
-	private String computeShowsplashArgument() {
-		IPath eclipseHome = new Path(TargetPlatform.getLocation());
-		IPath fullPath = eclipseHome.append("eclipse"); //$NON-NLS-1$
-		return fullPath.toOSString() + " -showsplash 600"; //$NON-NLS-1$
-	}
-
-	private void ensureProductFilesExist(IPath productArea) {
-		File productDir = productArea.toFile();
-		File marker = new File(productDir, ".eclipseproduct"); //$NON-NLS-1$
-		IPath eclipsePath = new Path(TargetPlatform.getLocation());
-		if (!marker.exists())
-			CoreUtility.copyFile(eclipsePath, ".eclipseproduct", marker); //$NON-NLS-1$
-
-		File configDir = new File(productDir, "configuration"); //$NON-NLS-1$
-		if (!configDir.exists())
-			configDir.mkdirs();
-		File ini = new File(configDir, "config.ini"); //$NON-NLS-1$
-		if (!ini.exists())
-			CoreUtility.copyFile(eclipsePath.append("configuration"), "config.ini", ini); //$NON-NLS-1$ //$NON-NLS-2$
+		throw new CoreException(LauncherUtils.createErrorStatus(PDEMessages.PDE_updateManagerNotSupported));
 	}
 
 	@Override
 	protected File getConfigDir(ILaunchConfiguration config) {
 		if (fConfigDir == null) {
-			try {
-				if (config.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.USEFEATURES, false) && config.getAttribute(org.eclipse.pde.launching.IPDELauncherConstants.CONFIG_USE_DEFAULT_AREA, true)) {
-					String root = getProductPath().toString();
-					root += "/configuration"; //$NON-NLS-1$
-					fConfigDir = new File(root);
-					if (!fConfigDir.exists())
-						fConfigDir.mkdirs();
-				} else {
-					fConfigDir = LaunchConfigurationHelper.getConfigurationArea(config);
-				}
-			} catch (CoreException e) {
-				fConfigDir = LaunchConfigurationHelper.getConfigurationArea(config);
-			}
+			fConfigDir = LaunchConfigurationHelper.getConfigurationArea(config);
 		}
 		return fConfigDir;
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseLaunchShortcut.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseLaunchShortcut.java
index 8f855b0..c21f58f 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseLaunchShortcut.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EclipseLaunchShortcut.java
@@ -225,7 +225,6 @@
 		wc.setAttribute(IPDELauncherConstants.LOCATION, LaunchArgumentsHelper.getDefaultWorkspaceLocation(wc.getName()));
 		initializeProgramArguments(wc);
 		initializeVMArguments(wc);
-		wc.setAttribute(IPDELauncherConstants.USEFEATURES, false);
 		wc.setAttribute(IPDELauncherConstants.DOCLEAR, false);
 		wc.setAttribute(IPDELauncherConstants.ASKCLEAR, true);
 		wc.setAttribute(IPDEConstants.APPEND_ARGS_EXPLICITLY, true);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java
index 82dc215..e10cf13 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java
@@ -35,8 +35,12 @@
  * <p>
  * Clients may subclass and instantiate this class.
  * </p>
+ *
  * @since 3.2
- * @deprecated use {@link org.eclipse.pde.launching.EquinoxLaunchConfiguration} instead.
+ * @deprecated use {@link org.eclipse.pde.launching.EquinoxLaunchConfiguration}
+ *             instead.
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.EquinoxLaunchConfiguration
  */
 @Deprecated
@@ -80,9 +84,6 @@
 			URL bundlesTxt = P2Utils.writeBundlesTxt(fModels, start, autostart, getConfigDir(configuration), null);
 			if (bundlesTxt != null) {
 				properties.setProperty("org.eclipse.equinox.simpleconfigurator.configUrl", bundlesTxt.toString()); //$NON-NLS-1$
-				if (fAllBundles.get("org.eclipse.update.configurator") != null) { //$NON-NLS-1$
-					properties.setProperty("org.eclipse.update.reconcile", "false"); //$NON-NLS-1$ //$NON-NLS-2$
-				}
 			}
 			StringBuilder buffer = new StringBuilder();
 			IPluginModelBase model = fAllBundles.get(IPDEBuildConstants.BUNDLE_SIMPLE_CONFIGURATOR);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxPluginsTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxPluginsTab.java
index e57e867..86198e9 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxPluginsTab.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxPluginsTab.java
@@ -14,13 +14,16 @@
 package org.eclipse.pde.ui.launcher;
 
 /**
- * A launch configuration tab that lets the user customize the list of plug-ins to launch with,
- * their start level and their auto-start attributes.
+ * A launch configuration tab that lets the user customize the list of plug-ins
+ * to launch with, their start level and their auto-start attributes.
  * <p>
- * This class may be instantiated. This class is not intended to be subclassed by clients.
+ * This class may be instantiated. This class is not intended to be subclassed
+ * by clients.
  * </p>
+ *
  * @since 3.2
  * @deprecated use {@link BundlesTab}
+ * @noreference This method is planned for removal. See bug 564563 for details.
  * @noextend This class is not intended to be subclassed by clients.
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxSettingsTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxSettingsTab.java
index f4638c6..1b7ccd8 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxSettingsTab.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxSettingsTab.java
@@ -14,13 +14,15 @@
 package org.eclipse.pde.ui.launcher;
 
 /**
- * A launch configuration tab that displays and edits the VM install
- * launch configuration attributes.
+ * A launch configuration tab that displays and edits the VM install launch
+ * configuration attributes.
  * <p>
  * This class may be instantiated. This class is not intended to be subclassed.
  * </p>
+ *
  * @since 3.2
  * @deprecated use {@link OSGiSettingsTab}
+ * @noreference This method is planned for removal. See bug 564563 for details.
  * @noextend This class is not intended to be subclassed by clients.
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/IPDELauncherConstants.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/IPDELauncherConstants.java
index 160583a..16e0924 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/IPDELauncherConstants.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/IPDELauncherConstants.java
@@ -18,11 +18,14 @@
  * <p>
  * Constant definitions only; not to be implemented.
  * </p>
+ *
  * @since 3.2
  *
  * @noimplement This interface is not intended to be implemented by clients.
  * @noextend This interface is not intended to be extended by clients.
- * @deprecated use {@link org.eclipse.pde.launching.IPDELauncherConstants} instead.
+ * @deprecated use {@link org.eclipse.pde.launching.IPDELauncherConstants}
+ *             instead.
+ * @noreference This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.IPDELauncherConstants
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitLaunchConfigurationDelegate.java
index 2c733b8..d344651 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitLaunchConfigurationDelegate.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/JUnitLaunchConfigurationDelegate.java
@@ -20,7 +20,11 @@
  * A launch delegate for launching JUnit Plug-in tests.
  *
  * @since 3.3
- * @deprecated use {@link org.eclipse.pde.launching.JUnitLaunchConfigurationDelegate} instead.
+ * @deprecated use
+ *             {@link org.eclipse.pde.launching.JUnitLaunchConfigurationDelegate}
+ *             instead.
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.JUnitLaunchConfigurationDelegate
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationDelegate.java
index 5c87ac2..6951944 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationDelegate.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationDelegate.java
@@ -18,8 +18,13 @@
  * <p>
  * Clients may subclass and instantiate this class.
  * </p>
+ *
  * @since 3.3
- * @deprecated use {@link org.eclipse.pde.launching.OSGiLaunchConfigurationDelegate} instead.
+ * @deprecated use
+ *             {@link org.eclipse.pde.launching.OSGiLaunchConfigurationDelegate}
+ *             instead.
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.OSGiLaunchConfigurationDelegate
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationInitializer.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationInitializer.java
index 2e4a8f6..3a6b75b 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationInitializer.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/OSGiLaunchConfigurationInitializer.java
@@ -22,7 +22,11 @@
  * </p>
  *
  * @since 3.3
- * @deprecated use {@link org.eclipse.pde.launching.OSGiLaunchConfigurationInitializer} instead.
+ * @deprecated use
+ *             {@link org.eclipse.pde.launching.OSGiLaunchConfigurationInitializer}
+ *             instead.
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.OSGiLaunchConfigurationInitializer
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PDESourcePathProvider.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PDESourcePathProvider.java
index 9724fc1..5feaf6f 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PDESourcePathProvider.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PDESourcePathProvider.java
@@ -18,8 +18,12 @@
  * <p>
  * Clients may subclass this class.
  * </p>
+ *
  * @since 3.3
- * @deprecated use {@link org.eclipse.pde.launching.PDESourcePathProvider} instead.
+ * @deprecated use {@link org.eclipse.pde.launching.PDESourcePathProvider}
+ *             instead.
+ * @noreference This method is planned for removal. See bug 564563 for details.
+ * @noextend This method is planned for removal. See bug 564563 for details.
  * @see org.eclipse.pde.launching.PDESourcePathProvider
  */
 @Deprecated
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginsTab.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginsTab.java
index 3edd3ac..a86920a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginsTab.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/PluginsTab.java
@@ -147,9 +147,7 @@
 	public void initializeFrom(ILaunchConfiguration configuration) {
 		try {
 			int index = DEFAULT_SELECTION;
-			if (configuration.getAttribute(IPDELauncherConstants.USEFEATURES, false)) {
-				index = FEATURE_SELECTION;
-			} else if (configuration.getAttribute(IPDELauncherConstants.USE_CUSTOM_FEATURES, false)) {
+			if (configuration.getAttribute(IPDELauncherConstants.USE_CUSTOM_FEATURES, false)) {
 				index = FEATURE_SELECTION;
 			} else if (!configuration.getAttribute(IPDELauncherConstants.USE_DEFAULT, true)) {
 				index = PLUGIN_SELECTION;
@@ -170,8 +168,6 @@
 	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 		configuration.setAttribute(IPDELauncherConstants.USE_DEFAULT, true);
-		// The use features option was removed in 3.6
-		configuration.removeAttribute(IPDELauncherConstants.USEFEATURES);
 		configuration.setAttribute(IPDELauncherConstants.USE_CUSTOM_FEATURES, false);
 		fBlock.setDefaults(configuration);
 	}
diff --git a/ui/org.eclipse.pde.ui/src_samples/org/eclipse/pde/internal/ui/samples/ShowSampleAction.java b/ui/org.eclipse.pde.ui/src_samples/org/eclipse/pde/internal/ui/samples/ShowSampleAction.java
index 1cabd8f..0bb6a36 100644
--- a/ui/org.eclipse.pde.ui/src_samples/org/eclipse/pde/internal/ui/samples/ShowSampleAction.java
+++ b/ui/org.eclipse.pde.ui/src_samples/org/eclipse/pde/internal/ui/samples/ShowSampleAction.java
@@ -43,6 +43,7 @@
 import org.eclipse.ui.intro.IIntroSite;
 import org.eclipse.ui.intro.config.*;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
 import org.osgi.framework.ServiceReference;
 
 public class ShowSampleAction extends Action implements IIntroAction {
@@ -240,7 +241,7 @@
 	 * Apply the profile changes to the currently running configuration.
 	 */
 	void applyConfiguration() throws CoreException {
-		BundleContext context = PDEPlugin.getDefault().getBundle().getBundleContext();
+		BundleContext context = FrameworkUtil.getBundle(getClass()).getBundleContext();
 		ServiceReference<Configurator> reference = context.getServiceReference(Configurator.class);
 		Configurator configurator = context.getService(reference);
 		try {