Merge commit '76b5828bfc4ecc7b5de7746f0f00c411911acaae' into BETA_JAVA16
diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml
index 3f486b3..de3480c 100644
--- a/.mvn/extensions.xml
+++ b/.mvn/extensions.xml
@@ -3,6 +3,6 @@
   <extension>
     <groupId>org.eclipse.tycho.extras</groupId>
     <artifactId>tycho-pomless</artifactId>
-    <version>2.0.0</version>
+    <version>2.1.0</version>
   </extension>
 </extensions>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.annotations/pom.xml b/apitools/org.eclipse.pde.api.tools.annotations/pom.xml
index 79601d2..78cc797 100644
--- a/apitools/org.eclipse.pde.api.tools.annotations/pom.xml
+++ b/apitools/org.eclipse.pde.api.tools.annotations/pom.xml
@@ -11,7 +11,7 @@
   <parent>
     <artifactId>eclipse.pde.ui.apitools</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.api.tools.annotations</artifactId>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.feature/feature.xml b/apitools/org.eclipse.pde.api.tools.ee.feature/feature.xml
index ef649d5..5cbacf6 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.feature/feature.xml
+++ b/apitools/org.eclipse.pde.api.tools.ee.feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.pde.api.tools.ee.feature"
       label="%featureName"
-      version="1.0.700.qualifier"
+      version="1.0.800.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
@@ -34,55 +34,6 @@
          fragment="true"/>
 
    <plugin
-         id="org.eclipse.pde.api.tools.ee.j2se12"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.j2se13"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.j2se14"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.j2se15"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.javase16"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.javase17"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.jre11"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"/>
-
-   <plugin
          id="org.eclipse.pde.api.tools.ee.osgiminimum10"
          download-size="0"
          install-size="0"
@@ -103,20 +54,4 @@
          version="0.0.0"
          fragment="true"/>
 
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.javase18"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-
-   <plugin
-         id="org.eclipse.pde.api.tools.ee.javase9"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         fragment="true"
-         unpack="false"/>
-
 </feature>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.project b/apitools/org.eclipse.pde.api.tools.ee.j2se12/.project
deleted file mode 100644
index d607774..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.j2se12</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF
deleted file mode 100644
index 93547bb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se12
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentj2se12
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.j2se12
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/about.html b/apitools/org.eclipse.pde.api.tools.ee.j2se12/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/build.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se12/build.properties
deleted file mode 100644
index 4ffa9c1b..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               fragmentj2se12.properties
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/fragmentj2se12.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se12/fragmentj2se12.properties
deleted file mode 100644
index f45e475..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/fragmentj2se12.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2012 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
-###############################################################################
-fragmentName = J2SE-1.2 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zip b/apitools/org.eclipse.pde.api.tools.ee.j2se12/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zip
deleted file mode 100644
index 735ced1..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.2.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.classpath b/apitools/org.eclipse.pde.api.tools.ee.j2se13/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.project b/apitools/org.eclipse.pde.api.tools.ee.j2se13/.project
deleted file mode 100644
index e788519..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.j2se13</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF
deleted file mode 100644
index d2d1d6d..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se13
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentj2se13
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.j2se13
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/about.html b/apitools/org.eclipse.pde.api.tools.ee.j2se13/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/build.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se13/build.properties
deleted file mode 100644
index 46ea669..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               fragmentj2se13.properties
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/fragmentj2se13.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se13/fragmentj2se13.properties
deleted file mode 100644
index 9be0494..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/fragmentj2se13.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2012 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
-###############################################################################
-fragmentName = J2SE-1.3 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se13/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zip b/apitools/org.eclipse.pde.api.tools.ee.j2se13/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zip
deleted file mode 100644
index aa8674a..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se13/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.3.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.classpath b/apitools/org.eclipse.pde.api.tools.ee.j2se14/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.project b/apitools/org.eclipse.pde.api.tools.ee.j2se14/.project
deleted file mode 100644
index 5e6cfeb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.j2se14</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF
deleted file mode 100644
index bd24fb8..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se14
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentj2se14
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.j2se14
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/about.html b/apitools/org.eclipse.pde.api.tools.ee.j2se14/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/build.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se14/build.properties
deleted file mode 100644
index 55c7c6e..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               fragmentj2se14.properties
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/fragmentj2se14.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se14/fragmentj2se14.properties
deleted file mode 100644
index 0ac3da8..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/fragmentj2se14.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2012 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
-###############################################################################
-fragmentName = J2SE-1.4 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se14/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zip b/apitools/org.eclipse.pde.api.tools.ee.j2se14/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zip
deleted file mode 100644
index f4919e5..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se14/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.4.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.classpath b/apitools/org.eclipse.pde.api.tools.ee.j2se15/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.project b/apitools/org.eclipse.pde.api.tools.ee.j2se15/.project
deleted file mode 100644
index afeeae8..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.j2se15</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF
deleted file mode 100644
index 3c9edf3..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.j2se15
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentj2se15
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.j2se15
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/about.html b/apitools/org.eclipse.pde.api.tools.ee.j2se15/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/build.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se15/build.properties
deleted file mode 100644
index 60de2e8..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               fragmentj2se15.properties
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/fragmentj2se15.properties b/apitools/org.eclipse.pde.api.tools.ee.j2se15/fragmentj2se15.properties
deleted file mode 100644
index 1675245..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/fragmentj2se15.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2012 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
-###############################################################################
-fragmentName = J2SE-1.5 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se15/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zip b/apitools/org.eclipse.pde.api.tools.ee.j2se15/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zip
deleted file mode 100644
index d3b83cb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se15/src/org/eclipse/pde/api/tools/internal/api_stubs/J2SE-1.5.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.classpath b/apitools/org.eclipse.pde.api.tools.ee.javase16/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF
deleted file mode 100644
index 0509054..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.javase16
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentjavase16
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.javase16
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/about.html b/apitools/org.eclipse.pde.api.tools.ee.javase16/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/build.properties b/apitools/org.eclipse.pde.api.tools.ee.javase16/build.properties
deleted file mode 100644
index bd8055b..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               fragmentjavase16.properties
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/fragmentjavase16.properties b/apitools/org.eclipse.pde.api.tools.ee.javase16/fragmentjavase16.properties
deleted file mode 100644
index e4fc90c..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/fragmentjavase16.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2012 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
-###############################################################################
-fragmentName = JavaSE-1.6 Execution Environment Description
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zip b/apitools/org.eclipse.pde.api.tools.ee.javase16/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zip
deleted file mode 100644
index 611de48..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.6.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/.classpath b/apitools/org.eclipse.pde.api.tools.ee.javase17/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/.project b/apitools/org.eclipse.pde.api.tools.ee.javase17/.project
deleted file mode 100644
index b20f8b6..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase17</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.javase17/META-INF/MANIFEST.MF
deleted file mode 100644
index 0d8c166..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.javase17
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentjavase17
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.javase17
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/about.html b/apitools/org.eclipse.pde.api.tools.ee.javase17/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/build.properties b/apitools/org.eclipse.pde.api.tools.ee.javase17/build.properties
deleted file mode 100644
index 5a868b2..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               about.html,\
-               fragmentjavase17.properties
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/fragmentjavase17.properties b/apitools/org.eclipse.pde.api.tools.ee.javase17/fragmentjavase17.properties
deleted file mode 100644
index 0612db7..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/fragmentjavase17.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2011, 2012 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
-###############################################################################
-fragmentName = JavaSE-1.7 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase17/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.7.zip b/apitools/org.eclipse.pde.api.tools.ee.javase17/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.7.zip
deleted file mode 100644
index 2958058..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase17/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.7.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/.classpath b/apitools/org.eclipse.pde.api.tools.ee.javase18/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/.project b/apitools/org.eclipse.pde.api.tools.ee.javase18/.project
deleted file mode 100644
index 29d869e..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase18</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 0c68a61..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.javase18/META-INF/MANIFEST.MF
deleted file mode 100644
index fd523a4..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,11 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.javase18
-Bundle-Version: 1.1.500.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.501"
-Bundle-Localization: fragmentjavase18
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.javase18
-
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/OSGI-INF/l10n/bundle.properties b/apitools/org.eclipse.pde.api.tools.ee.javase18/OSGI-INF/l10n/bundle.properties
deleted file mode 100644
index 126aa0f..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/OSGI-INF/l10n/bundle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-#Properties file for org.eclipse.pde.api.tools.ee.javase18
-Bundle-Vendor = Eclipse.org
-Bundle-Name = JavaSE-1.8 Execution Environment Description
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/about.html b/apitools/org.eclipse.pde.api.tools.ee.javase18/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/build.properties b/apitools/org.eclipse.pde.api.tools.ee.javase18/build.properties
deleted file mode 100644
index 8383095..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2014 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/l10n/bundle.properties,\
-               OSGI-INF/,\
-               about.html
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/fragmentjavase18.properties b/apitools/org.eclipse.pde.api.tools.ee.javase18/fragmentjavase18.properties
deleted file mode 100644
index 913b9e0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/fragmentjavase18.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2016 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
-###############################################################################
-fragmentName = JavaSE-1.8 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase18/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.8.zip b/apitools/org.eclipse.pde.api.tools.ee.javase18/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.8.zip
deleted file mode 100644
index d35f64f..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase18/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-1.8.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/.classpath b/apitools/org.eclipse.pde.api.tools.ee.javase9/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/.project b/apitools/org.eclipse.pde.api.tools.ee.javase9/.project
deleted file mode 100644
index c657682..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase9</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.javase9/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 0c68a61..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.javase9/META-INF/MANIFEST.MF
deleted file mode 100644
index 30fe41c..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,8 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %Bundle-Name
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.javase9
-Bundle-Version: 1.0.300.qualifier
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.1.200"
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.javase9
-Bundle-Vendor: %Bundle-Vendor
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/OSGI-INF/l10n/bundle.properties b/apitools/org.eclipse.pde.api.tools.ee.javase9/OSGI-INF/l10n/bundle.properties
deleted file mode 100644
index 27c19ef..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/OSGI-INF/l10n/bundle.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-#Properties file for org.eclipse.pde.api.tools.ee.javase19
-Bundle-Vendor = Eclipse.org
-Bundle-Name = JavaSE-9 Execution Environment Description
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/about.html b/apitools/org.eclipse.pde.api.tools.ee.javase9/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/build.properties b/apitools/org.eclipse.pde.api.tools.ee.javase9/build.properties
deleted file mode 100644
index 4835f7d..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/build.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-###############################################################################
-# Copyright (c) 2018 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               OSGI-INF/l10n/bundle.properties,\
-               OSGI-INF/,\
-               about.html
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/fragmentjavase9.properties b/apitools/org.eclipse.pde.api.tools.ee.javase9/fragmentjavase9.properties
deleted file mode 100644
index fd65617..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/fragmentjavase9.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2018 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
-###############################################################################
-fragmentName = JavaSE-9 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase9/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-9.zip b/apitools/org.eclipse.pde.api.tools.ee.javase9/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-9.zip
deleted file mode 100644
index 5f65d45..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.javase9/src/org/eclipse/pde/api/tools/internal/api_stubs/JavaSE-9.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/.classpath b/apitools/org.eclipse.pde.api.tools.ee.jre11/.classpath
deleted file mode 100644
index eca7bdb..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/.classpath
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/.project b/apitools/org.eclipse.pde.api.tools.ee.jre11/.project
deleted file mode 100644
index 0233d5a..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/.project
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.jre11</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.core.resources.prefs b/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 99f26c0..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-encoding/<project>=UTF-8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.core.runtime.prefs b/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.core.runtime.prefs
deleted file mode 100644
index 5a0ad22..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.core.runtime.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1
-line.separator=\n
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.jdt.core.prefs b/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index df76269..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF b/apitools/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF
deleted file mode 100644
index 16de051..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,10 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: %fragmentName
-Bundle-SymbolicName: org.eclipse.pde.api.tools.ee.jre11
-Bundle-Version: 1.1.400.qualifier
-Bundle-Vendor: %providerName
-Fragment-Host: org.eclipse.pde.api.tools;bundle-version="1.0.300"
-Bundle-Localization: fragmentjre11
-Eclipse-BundleShape: dir
-Automatic-Module-Name: org.eclipse.pde.api.tools.ee.jre11
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/about.html b/apitools/org.eclipse.pde.api.tools.ee.jre11/about.html
deleted file mode 100644
index 164f781..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/about.html
+++ /dev/null
@@ -1,36 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<title>About</title>
-</head>
-<body lang="EN-US">
-	<h2>About This Content</h2>
-
-	<p>November 30, 2017</p>
-	<h3>License</h3>
-
-	<p>
-		The Eclipse Foundation makes available all content in this plug-in
-		(&quot;Content&quot;). Unless otherwise indicated below, the Content
-		is provided to you under the terms and conditions of the Eclipse
-		Public License Version 2.0 (&quot;EPL&quot;). A copy of the EPL is
-		available at <a href="http://www.eclipse.org/legal/epl-2.0">http://www.eclipse.org/legal/epl-2.0</a>.
-		For purposes of the EPL, &quot;Program&quot; will mean the Content.
-	</p>
-
-	<p>
-		If you did not receive this Content directly from the Eclipse
-		Foundation, the Content is being redistributed by another party
-		(&quot;Redistributor&quot;) and different terms and conditions may
-		apply to your use of any object code in the Content. Check the
-		Redistributor's license that was provided with the Content. If no such
-		license exists, contact the Redistributor. Unless otherwise indicated
-		below, the terms and conditions of the EPL still apply to any source
-		code in the Content and such source code may be obtained at <a
-			href="http://www.eclipse.org/">http://www.eclipse.org</a>.
-	</p>
-
-</body>
-</html>
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/build.properties b/apitools/org.eclipse.pde.api.tools.ee.jre11/build.properties
deleted file mode 100644
index f331095..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/build.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-###############################################################################
-# Copyright (c) 2012 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
-###############################################################################
-source.. = src/
-output.. = bin/
-bin.includes = META-INF/,\
-               .,\
-               fragmentjre11.properties,\
-               about.html
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/fragmentjre11.properties b/apitools/org.eclipse.pde.api.tools.ee.jre11/fragmentjre11.properties
deleted file mode 100644
index 6113e86..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/fragmentjre11.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-###############################################################################
-# Copyright (c) 2009, 2012 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
-###############################################################################
-fragmentName = JRE-1.1 Execution Environment Description 
-providerName = Eclipse.org
\ No newline at end of file
diff --git a/apitools/org.eclipse.pde.api.tools.ee.jre11/src/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zip b/apitools/org.eclipse.pde.api.tools.ee.jre11/src/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zip
deleted file mode 100644
index c64d7de..0000000
--- a/apitools/org.eclipse.pde.api.tools.ee.jre11/src/org/eclipse/pde/api/tools/internal/api_stubs/JRE-1.1.zip
+++ /dev/null
Binary files differ
diff --git a/apitools/org.eclipse.pde.api.tools.tests/pom.xml b/apitools/org.eclipse.pde.api.tools.tests/pom.xml
index c6a0be4..306133b 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/pom.xml
+++ b/apitools/org.eclipse.pde.api.tools.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/completion/APIToolsJavadocCompletionProposalComputer.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/completion/APIToolsJavadocCompletionProposalComputer.java
index 3244ba1..3ae967d 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/completion/APIToolsJavadocCompletionProposalComputer.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/completion/APIToolsJavadocCompletionProposalComputer.java
@@ -400,7 +400,7 @@
 
 	@Override
 	public void sessionStarted() {
-		fParser = ASTParser.newParser(AST.JLS14);
+		fParser = ASTParser.newParser(AST.JLS15);
 		fErrorMessage = null;
 	}
 
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/JavadocTagOperation.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/JavadocTagOperation.java
index 8374382..bd012b5 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/JavadocTagOperation.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/JavadocTagOperation.java
@@ -90,7 +90,7 @@
 	 * @return a new {@link AST}
 	 */
 	protected CompilationUnit createAST(final ICompilationUnit unit, int focalposition, boolean resolvebindings) {
-		ASTParser parser = ASTParser.newParser(AST.JLS14);
+		ASTParser parser = ASTParser.newParser(AST.JLS15);
 		parser.setSource(unit);
 		parser.setFocalPosition(focalposition);
 		parser.setResolveBindings(resolvebindings);
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedAnnotationOperation.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedAnnotationOperation.java
index c621f2f..4181957 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedAnnotationOperation.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedAnnotationOperation.java
@@ -141,7 +141,7 @@
 						localMonitor.split(1);
 					}
 					localMonitor.split(1);
-					ASTParser parser = ASTParser.newParser(AST.JLS14);
+					ASTParser parser = ASTParser.newParser(AST.JLS15);
 					parser.setSource(compilationUnit);
 					Integer charStartAttribute = null;
 					charStartAttribute = (Integer) fMarker.getAttribute(IMarker.CHAR_START);
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java
index 049c7ee..f1b3575 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/RemoveUnsupportedTagOperation.java
@@ -90,7 +90,7 @@
 						localMonitor.split(1);
 					}
 					localMonitor.split(1);
-					ASTParser parser = ASTParser.newParser(AST.JLS14);
+					ASTParser parser = ASTParser.newParser(AST.JLS15);
 					parser.setSource(compilationUnit);
 					Integer charStartAttribute = null;
 					charStartAttribute = (Integer) this.markers[i].getAttribute(IMarker.CHAR_START);
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/UpdateSinceTagOperation.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/UpdateSinceTagOperation.java
index 152cbff..a9d6870 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/UpdateSinceTagOperation.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/markers/UpdateSinceTagOperation.java
@@ -93,7 +93,7 @@
 					// quickfix change
 					JavaUI.openInEditor(compilationUnit);
 				}
-				ASTParser parser = ASTParser.newParser(AST.JLS14);
+				ASTParser parser = ASTParser.newParser(AST.JLS15);
 				parser.setSource(compilationUnit);
 				if (intValue <= 0) {
 					// try to use the name range of the corresponding element
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/JavadocConversionRefactoring.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/JavadocConversionRefactoring.java
index f779020..f4a65d8 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/JavadocConversionRefactoring.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/wizards/JavadocConversionRefactoring.java
@@ -324,7 +324,7 @@
 		 * @throws CoreException
 		 */
 		void collectUpdates(IType type, IElementDescriptor element, IApiDescription description) throws CoreException {
-			ASTParser parser = ASTParser.newParser(AST.JLS14);
+			ASTParser parser = ASTParser.newParser(AST.JLS15);
 			ICompilationUnit cunit = type.getCompilationUnit();
 			if (cunit != null) {
 				if (this.monitor.isCanceled()) {
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 0649aed..06b23b9 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.2.100.qualifier
+Bundle-Version: 1.2.200.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 79f9e46..014bd87 100644
--- a/apitools/org.eclipse.pde.api.tools/pom.xml
+++ b/apitools/org.eclipse.pde.api.tools/pom.xml
@@ -14,11 +14,11 @@
   <parent>
     <artifactId>eclipse.pde.ui.apitools</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.api.tools</artifactId>
-  <version>1.2.100-SNAPSHOT</version>
+  <version>1.2.200-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/ApiDescriptionManager.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java
index 4e5c2c1..eacd8d5 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionManager.java
@@ -312,7 +312,9 @@
 	private void restoreNode(ProjectApiDescription apiDesc, Element element, ManifestNode parentNode, Map<IElementDescriptor, ManifestNode> childrenMap) throws CoreException {
 		ManifestNode node = null;
 		IElementDescriptor elementDesc = null;
-		if (element.getTagName().equals(IApiXmlConstants.ELEMENT_PACKAGE)) {
+		switch (element.getTagName()) {
+		case IApiXmlConstants.ELEMENT_PACKAGE:
+		{
 			int vis = getInt(element, IApiXmlConstants.ATTR_VISIBILITY);
 			int res = getInt(element, IApiXmlConstants.ATTR_RESTRICTIONS);
 			// collect fragments
@@ -336,13 +338,15 @@
 			}
 			if (!fragments.isEmpty()) {
 				elementDesc = Factory.packageDescriptor(pkgName);
-				node = apiDesc.newPackageNode(fragments.toArray(new IPackageFragment[fragments.size()]), parentNode, elementDesc, vis, res);
+				node = apiDesc.newPackageNode(fragments.toArray(new IPackageFragment[fragments.size()]), parentNode,
+						elementDesc, vis, res);
 			} else {
 				abort(ScannerMessages.ApiDescriptionManager_2, null);
 			}
-		} else if (element.getTagName().equals(IApiXmlConstants.ELEMENT_PACKAGE_FRAGMENT)) {
-			return; // nothing to do
-		} else if (element.getTagName().equals(IApiXmlConstants.ELEMENT_TYPE)) {
+			break;
+		}
+		case IApiXmlConstants.ELEMENT_TYPE:
+		{
 			String handle = element.getAttribute(IApiXmlConstants.ATTR_HANDLE);
 			int vis = getInt(element, IApiXmlConstants.ATTR_VISIBILITY);
 			int res = getInt(element, IApiXmlConstants.ATTR_RESTRICTIONS);
@@ -355,7 +359,9 @@
 			TypeNode tn = apiDesc.newTypeNode(type, parentNode, elementDesc, vis, res);
 			node = tn;
 			tn.fTimeStamp = getLong(element, IApiXmlConstants.ATTR_MODIFICATION_STAMP);
-		} else if (element.getTagName().equals(IApiXmlConstants.ELEMENT_FIELD)) {
+			break;
+		}
+		case IApiXmlConstants.ELEMENT_FIELD:
 			if (parentNode.element instanceof IReferenceTypeDescriptor) {
 				IReferenceTypeDescriptor type = (IReferenceTypeDescriptor) parentNode.element;
 				int vis = getInt(element, IApiXmlConstants.ATTR_VISIBILITY);
@@ -364,7 +370,8 @@
 				elementDesc = type.getField(name);
 				node = apiDesc.newNode(parentNode, elementDesc, vis, res);
 			}
-		} else if (element.getTagName().equals(IApiXmlConstants.ELEMENT_METHOD)) {
+			break;
+		case IApiXmlConstants.ELEMENT_METHOD:
 			if (parentNode.element instanceof IReferenceTypeDescriptor) {
 				IReferenceTypeDescriptor type = (IReferenceTypeDescriptor) parentNode.element;
 				int vis = getInt(element, IApiXmlConstants.ATTR_VISIBILITY);
@@ -378,6 +385,11 @@
 				elementDesc = type.getMethod(name, sig);
 				node = apiDesc.newNode(parentNode, elementDesc, vis, res);
 			}
+			break;
+		case IApiXmlConstants.ELEMENT_PACKAGE_FRAGMENT:
+			return; // nothing to do
+		default:
+			break;
 		}
 		if (node != null) {
 			childrenMap.put(elementDesc, node);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionProcessor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionProcessor.java
index dd5e9cb..6199367 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionProcessor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/ApiDescriptionProcessor.java
@@ -550,7 +550,7 @@
 	 * @throws BadLocationException
 	 */
 	static void processTagUpdates(IType type, IReferenceTypeDescriptor desc, IApiDescription description, List<IElementDescriptor> members, Map<IFile, Set<TextEdit>> collector) throws CoreException, BadLocationException {
-		ASTParser parser = ASTParser.newParser(AST.JLS14);
+		ASTParser parser = ASTParser.newParser(AST.JLS15);
 		ICompilationUnit cunit = type.getCompilationUnit();
 		if (cunit != null) {
 			parser.setSource(cunit);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
index c422b5f..2e41ef2 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractIllegalTypeReference.java
@@ -119,7 +119,7 @@
 				String name = ltype.getSimpleName();
 				ICompilationUnit cunit = type.getCompilationUnit();
 				if (cunit.isWorkingCopy()) {
-					cunit.reconcile(AST.JLS14, false, null, null);
+					cunit.reconcile(AST.JLS15, false, null, null);
 				}
 				IType localtype = type;
 				method = getEnclosingMethod(type, reference, doc);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
index 9505341..6e0d6a4 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/builder/AbstractProblemDetector.java
@@ -677,7 +677,7 @@
 			String name = apitype.getSimpleName();
 			ICompilationUnit cunit = type.getCompilationUnit();
 			if (cunit.isWorkingCopy()) {
-				cunit.reconcile(AST.JLS14, false, null, null);
+				cunit.reconcile(AST.JLS15, false, null, null);
 			}
 			IMethod method = getEnclosingMethod(type, reference, doc);
 			if (method != null) {
@@ -735,7 +735,7 @@
 				if (method == null) {
 					// look it up the hard way
 					ISourceRange range = jtype.getCompilationUnit().getSourceRange();
-					ASTParser parser = ASTParser.newParser(AST.JLS14);
+					ASTParser parser = ASTParser.newParser(AST.JLS15);
 					parser.setSource(jtype.getCompilationUnit());
 					parser.setSourceRange(range.getOffset(), range.getLength());
 					parser.setResolveBindings(true);
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 e2ccce3..428114c 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
@@ -907,7 +907,7 @@
 		if (fJavaProject == null) {
 			return null;
 		}
-		ASTParser parser = ASTParser.newParser(AST.JLS14);
+		ASTParser parser = ASTParser.newParser(AST.JLS15);
 		parser.setFocalPosition(offset);
 		parser.setResolveBindings(false);
 		parser.setSource(root);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelCache.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelCache.java
index 854154c..383e280 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelCache.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ApiModelCache.java
@@ -13,6 +13,8 @@
  *******************************************************************************/
 package org.eclipse.pde.api.tools.internal.model;
 
+import java.util.Enumeration;
+
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jdt.internal.core.OverflowingLRUCache;
 import org.eclipse.jdt.internal.core.util.LRUCache;
@@ -63,7 +65,7 @@
 		}
 	}
 
-	static final int DEFAULT_CACHE_SIZE = 1500;
+	static final int DEFAULT_CACHE_SIZE = 1000;
 	static final int DEFAULT_OVERFLOW = (int) (DEFAULT_CACHE_SIZE * 0.1f);
 	static ApiModelCache fInstance = null;
 
@@ -132,7 +134,7 @@
 					}
 					Cache<String, IApiElement> typecache = compcache.get(id);
 					if (typecache == null) {
-						typecache = new Cache<>(DEFAULT_CACHE_SIZE, DEFAULT_OVERFLOW);
+						typecache = new Cache<>(DEFAULT_CACHE_SIZE * 2, DEFAULT_OVERFLOW);
 						compcache.put(comp.getSymbolicName(), typecache);
 					}
 					ApiType type = (ApiType) element;
@@ -233,7 +235,11 @@
 						if (compcache != null) {
 							Cache<String, IApiElement> typecache = compcache.get(componentid);
 							if (typecache != null && updatedIdentifier != null) {
-								return typecache.get(updatedIdentifier);
+								IApiElement ele = typecache.get(updatedIdentifier);
+								if (ele != null) {
+									return ele;
+								}
+
 							}
 						}
 					}
@@ -242,10 +248,40 @@
 			}
 			default:
 				break;
+			}
+		if (componentid.startsWith("JavaSE-")) { //$NON-NLS-1$
+			// for system component, retrieve element from any baseline instead
+			// of recreating the structure and caching the equivalent element info
+			IApiElement element = getElementInfoFromAnyBaseline(baselineid, componentid, updatedIdentifier);
+			if (element != null) {
+				return element;
+			}
 		}
 		return null;
 	}
 
+	private IApiElement getElementInfoFromAnyBaseline(String baselineid, String componentid, String updatedIdentifier) {
+			Enumeration<String> elements = fRootCache.keys();
+			while (elements.hasMoreElements()) {
+				String otherBaselines = elements.nextElement();
+				if (otherBaselines.equals(baselineid)) {
+					continue;
+				}
+				Cache<String, Cache<String, IApiElement>> compcache = fRootCache.get(otherBaselines);
+				if (compcache != null) {
+					Cache<String, IApiElement> typecache = compcache.get(componentid);
+					if (typecache != null && updatedIdentifier != null) {
+						IApiElement ele = typecache.get(updatedIdentifier);
+						if (ele != null) {
+							return ele;
+						}
+					}
+				}
+			}
+		return null;
+	}
+
+
 	/**
 	 * Removes the {@link IApiElement} from the given component (given its id)
 	 * with the given identifier and of the given type.
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectTypeContainer.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectTypeContainer.java
index 306af3d..e7a88a6 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectTypeContainer.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ProjectTypeContainer.java
@@ -40,6 +40,8 @@
  */
 public class ProjectTypeContainer extends ApiElement implements IApiTypeContainer {
 
+	private ResourceApiTypeRoot lastResourceApiTypeRoot = null;
+
 	/**
 	 * Proxy visitor for collecting package names, etc for our type containers
 	 *
@@ -184,7 +186,15 @@
 		if (folder.exists()) {
 			IFile file = folder.getFile(cfName + Util.DOT_CLASS_SUFFIX);
 			if (file.exists()) {
-				return new ResourceApiTypeRoot(this, file, qualifiedName);
+				if (lastResourceApiTypeRoot != null) {
+					// check if same file and qualified name
+					if (lastResourceApiTypeRoot.getName().equals(qualifiedName)
+							&& lastResourceApiTypeRoot.getFile().equals(file)) {
+						return lastResourceApiTypeRoot;
+					}
+				}
+				lastResourceApiTypeRoot = new ResourceApiTypeRoot(this, file, qualifiedName);
+				return lastResourceApiTypeRoot;
 			}
 		}
 		return null;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ResourceApiTypeRoot.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ResourceApiTypeRoot.java
index 9f09861..e8c13c5 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ResourceApiTypeRoot.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/model/ResourceApiTypeRoot.java
@@ -81,6 +81,10 @@
 		return getName();
 	}
 
+	public IFile getFile() {
+		return fFile;
+	}
+
 	@Override
 	public String toString() {
 		return getTypeName();
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java
index fcb8401..86c09cf 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/scanner/TagScanner.java
@@ -657,7 +657,7 @@
 	 */
 	public void scan(CompilationUnit source, IApiDescription description, IApiTypeContainer container, Map<String, String> options, IProgressMonitor monitor) throws CoreException {
 		SubMonitor localmonitor = SubMonitor.convert(monitor, 2);
-		ASTParser parser = ASTParser.newParser(AST.JLS14);
+		ASTParser parser = ASTParser.newParser(AST.JLS15);
 		InputStream inputStream = null;
 		try {
 			inputStream = source.getInputStream();
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java
index 5b8fb4d..d5ae67f 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIDeprecationReportConversionTask.java
@@ -93,16 +93,19 @@
 
 		@Override
 		public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
-			if (IApiXmlConstants.DELTA_ELEMENT_NAME.equals(name)) {
+			if (name == null) {
+				return;
+			}
+			switch (name)
+				{
+			case IApiXmlConstants.DELTA_ELEMENT_NAME:
 				if (this.debug) {
 					System.out.println("name : " + name); //$NON-NLS-1$
 					/*
-					 * <delta compatible="true"
-					 * componentId="org.eclipse.equinox.p2.ui_0.1.0"
+					 * <delta compatible="true" componentId="org.eclipse.equinox.p2.ui_0.1.0"
 					 * element_type="CLASS_ELEMENT_TYPE" flags="25" key=
 					 * "schedule(Lorg/eclipse/equinox/internal/provisional/p2/ui/operations/ProvisioningOperation;Lorg/eclipse/swt/widgets/Shell;I)Lorg/eclipse/core/runtime/jobs/Job;"
-					 * kind="ADDED" oldModifiers="9" newModifiers="9"
-					 * restrictions="0" type_name=
+					 * kind="ADDED" oldModifiers="9" newModifiers="9" restrictions="0" type_name=
 					 * "org.eclipse.equinox.internal.provisional.p2.ui.ProvisioningOperationRunner"
 					 * />
 					 */
@@ -123,14 +126,19 @@
 				this.typename = attributes.getValue(IApiXmlConstants.ATTR_NAME_TYPE_NAME);
 				this.key = attributes.getValue(IApiXmlConstants.ATTR_KEY);
 				this.kind = attributes.getValue(IApiXmlConstants.ATTR_KIND);
-			} else if (IApiXmlConstants.ELEMENT_DELTA_MESSAGE_ARGUMENTS.equals(name)) {
+				break;
+			case IApiXmlConstants.ELEMENT_DELTA_MESSAGE_ARGUMENTS:
 				if (this.argumentsList == null) {
 					this.argumentsList = new ArrayList<>();
 				} else {
 					this.argumentsList.clear();
 				}
-			} else if (IApiXmlConstants.ELEMENT_DELTA_MESSAGE_ARGUMENT.equals(name)) {
+				break;
+			case IApiXmlConstants.ELEMENT_DELTA_MESSAGE_ARGUMENT:
 				this.argumentsList.add(attributes.getValue(IApiXmlConstants.ATTR_VALUE));
+				break;
+			default:
+				break;
 			}
 		}
 	}
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java
index 09f146c..f7ca3bd 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/APIFreezeReportConversionTask.java
@@ -69,9 +69,15 @@
 
 		@Override
 		public void endElement(String uri, String localName, String name) throws SAXException {
-			if (IApiXmlConstants.ELEMENT_RESOLVER_ERRORS.equals(name)) {
+			if (name == null) {
+				return;
+			}
+			switch (name)
+				{
+			case IApiXmlConstants.ELEMENT_RESOLVER_ERRORS:
 				isResolverSection = false;
-			} else if (IApiXmlConstants.DELTA_ELEMENT_NAME.equals(name)) {
+				break;
+			case IApiXmlConstants.DELTA_ELEMENT_NAME:
 				Entry entry = new Entry(this.flags, this.elementType, this.key, this.typename, this.arguments, this.kind);
 				List<Entry> list = this.map.get(this.componentID);
 				if (list != null) {
@@ -81,11 +87,15 @@
 					value.add(entry);
 					this.map.put(componentID, value);
 				}
-			} else if (IApiXmlConstants.ELEMENT_DELTA_MESSAGE_ARGUMENTS.equals(name)) {
+				break;
+			case IApiXmlConstants.ELEMENT_DELTA_MESSAGE_ARGUMENTS:
 				if (this.argumentsList != null && this.argumentsList.size() != 0) {
 					this.arguments = new String[this.argumentsList.size()];
 					this.argumentsList.toArray(this.arguments);
 				}
+				break;
+			default:
+				break;
 			}
 		}
 
diff --git a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java
index 067feff..3e78ca6 100644
--- a/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java
+++ b/apitools/org.eclipse.pde.api.tools/src_ant/org/eclipse/pde/api/tools/internal/tasks/CompareTask.java
@@ -284,13 +284,20 @@
 		if (this.debug) {
 			System.out.println("Visibility : " + value); //$NON-NLS-1$
 		}
-		if (VISIBILITY_ALL.equals(value)) {
-			this.visibilityModifiers = VisibilityModifiers.ALL_VISIBILITIES;
-		} else if (VISIBILITY_API.equals(value)) {
-			this.visibilityModifiers = VisibilityModifiers.API;
-		} else {
+		if (value == null) {
 			throw new BuildException("The given value " + value + " is not equals to \"ALL \" or \"API\"."); //$NON-NLS-1$//$NON-NLS-2$
 		}
+		switch (value)
+			{
+			case VISIBILITY_ALL:
+				this.visibilityModifiers = VisibilityModifiers.ALL_VISIBILITIES;
+				break;
+			case VISIBILITY_API:
+				this.visibilityModifiers = VisibilityModifiers.API;
+				break;
+			default:
+				throw new BuildException("The given value " + value + " is not equals to \"ALL \" or \"API\"."); //$NON-NLS-1$//$NON-NLS-2$
+			}
 	}
 
 	/**
diff --git a/apitools/pom.xml b/apitools/pom.xml
index 7998f2e..45f5794 100644
--- a/apitools/pom.xml
+++ b/apitools/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
   </parent>
   <artifactId>eclipse.pde.ui.apitools</artifactId>
   <packaging>pom</packaging>
@@ -25,15 +25,6 @@
     <module>org.eclipse.pde.api.tools.ee.cdcfoundation10</module>
     <module>org.eclipse.pde.api.tools.ee.cdcfoundation11</module>
     <module>org.eclipse.pde.api.tools.ee.feature</module>
-    <module>org.eclipse.pde.api.tools.ee.j2se12</module>
-    <module>org.eclipse.pde.api.tools.ee.j2se13</module>
-    <module>org.eclipse.pde.api.tools.ee.j2se14</module>
-    <module>org.eclipse.pde.api.tools.ee.j2se15</module>
-    <module>org.eclipse.pde.api.tools.ee.javase16</module>
-    <module>org.eclipse.pde.api.tools.ee.javase17</module>
-    <module>org.eclipse.pde.api.tools.ee.javase18</module>
-    <module>org.eclipse.pde.api.tools.ee.javase9</module>
-    <module>org.eclipse.pde.api.tools.ee.jre11</module>
     <module>org.eclipse.pde.api.tools.ee.osgiminimum10</module>
     <module>org.eclipse.pde.api.tools.ee.osgiminimum11</module>
     <module>org.eclipse.pde.api.tools.ee.osgiminimum12</module>
diff --git a/ds/org.eclipse.pde.ds.annotations.tests/pom.xml b/ds/org.eclipse.pde.ds.annotations.tests/pom.xml
index aa7939f..af35f66 100644
--- a/ds/org.eclipse.pde.ds.annotations.tests/pom.xml
+++ b/ds/org.eclipse.pde.ds.annotations.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ds/org.eclipse.pde.ds.annotations/pom.xml b/ds/org.eclipse.pde.ds.annotations/pom.xml
index 6d910d2..c7c9aff 100644
--- a/ds/org.eclipse.pde.ds.annotations/pom.xml
+++ b/ds/org.eclipse.pde.ds.annotations/pom.xml
@@ -16,7 +16,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ds/org.eclipse.pde.ds.core/.settings/org.eclipse.jdt.core.prefs b/ds/org.eclipse.pde.ds.core/.settings/org.eclipse.jdt.core.prefs
index 4c3ac0f..807e13e 100644
--- a/ds/org.eclipse.pde.ds.core/.settings/org.eclipse.jdt.core.prefs
+++ b/ds/org.eclipse.pde.ds.core/.settings/org.eclipse.jdt.core.prefs
@@ -2,8 +2,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
@@ -13,6 +16,8 @@
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
+org.eclipse.jdt.core.compiler.problem.annotatedTypeArgumentToUnannotated=info
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -22,10 +27,10 @@
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
 org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled
 org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
@@ -45,7 +50,7 @@
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=error
 org.eclipse.jdt.core.compiler.problem.missingJavadocComments=ignore
@@ -55,7 +60,7 @@
 org.eclipse.jdt.core.compiler.problem.missingJavadocTags=error
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding=disabled
 org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility=public
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
@@ -63,12 +68,14 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=warning
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=warning
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
@@ -76,7 +83,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=error
 org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=error
-org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
@@ -84,18 +91,24 @@
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
+org.eclipse.jdt.core.compiler.problem.suppressWarningsNotFullyAnalysed=info
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
-org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
-org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+org.eclipse.jdt.core.compiler.problem.unstableAutoModuleName=warning
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=warning
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
diff --git a/ds/org.eclipse.pde.ds.core/META-INF/MANIFEST.MF b/ds/org.eclipse.pde.ds.core/META-INF/MANIFEST.MF
index 0003b4d..ec1e41f 100644
--- a/ds/org.eclipse.pde.ds.core/META-INF/MANIFEST.MF
+++ b/ds/org.eclipse.pde.ds.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.ds.core;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
 Bundle-Activator: org.eclipse.pde.internal.ds.core.Activator
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)",
  org.eclipse.core.filebuffers;bundle-version="[3.3.0,4.0.0)",
diff --git a/ds/org.eclipse.pde.ds.core/pom.xml b/ds/org.eclipse.pde.ds.core/pom.xml
index 7a8efbd..4f8f978 100644
--- a/ds/org.eclipse.pde.ds.core/pom.xml
+++ b/ds/org.eclipse.pde.ds.core/pom.xml
@@ -15,11 +15,11 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.ds.core</artifactId>
-  <version>1.2.0-SNAPSHOT</version>
+  <version>1.2.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSDocumentFactory.java b/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSDocumentFactory.java
index 6846145..e0f8d2e 100644
--- a/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSDocumentFactory.java
+++ b/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSDocumentFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 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
@@ -16,7 +16,6 @@
 
 import org.eclipse.pde.internal.core.text.DocumentNodeFactory;
 import org.eclipse.pde.internal.core.text.IDocumentElementNode;
-import org.eclipse.pde.internal.core.text.IDocumentNodeFactory;
 import org.eclipse.pde.internal.ds.core.IDSComponent;
 import org.eclipse.pde.internal.ds.core.IDSConstants;
 import org.eclipse.pde.internal.ds.core.IDSDocumentFactory;
@@ -36,7 +35,7 @@
  * @see DSDocumentHandler
  */
 public class DSDocumentFactory extends DocumentNodeFactory implements
-		IDocumentNodeFactory, IDSDocumentFactory {
+		IDSDocumentFactory {
 	private DSModel fModel;
 
 	public DSDocumentFactory(DSModel model) {
@@ -55,30 +54,30 @@
 		}
 
 		if (isRoot(name)) { // Root
-			return (IDocumentElementNode) createComponent();
+			return createComponent();
 		}
 
 		if (parent.getXMLTagName().equals(IDSConstants.ELEMENT_COMPONENT)) {
 			if (isImplementation(name)) {
-				return (IDocumentElementNode) createImplementation();
+				return createImplementation();
 			}
 			if (isProperties(name)) {
-				return (IDocumentElementNode) createProperties();
+				return createProperties();
 			}
 			if (isProperty(name)) {
-				return (IDocumentElementNode) createProperty();
+				return createProperty();
 			}
 			if (isService(name)) {
-				return (IDocumentElementNode) createService();
+				return createService();
 			}
 			if (isReference(name)) {
-				return (IDocumentElementNode) createReference();
+				return createReference();
 			}
 		}
 
 		if (parent.getXMLTagName().equals(IDSConstants.ELEMENT_SERVICE)) {
 			if (isProvide(name)) {
-				return (IDocumentElementNode) createProvide();
+				return createProvide();
 			}
 		}
 
diff --git a/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSModel.java b/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSModel.java
index a7243e4..acef181 100644
--- a/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSModel.java
+++ b/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 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
@@ -64,7 +64,7 @@
 
 	@Override
 	protected IWritable getRoot() {
-		return (IWritable) getDSComponent();
+		return getDSComponent();
 	}
 
 }
diff --git a/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSObject.java b/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSObject.java
index bc95d59..b3e68f3 100644
--- a/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSObject.java
+++ b/ds/org.eclipse.pde.ds.core/src/org/eclipse/pde/internal/ds/core/text/DSObject.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 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
@@ -14,8 +14,6 @@
  *******************************************************************************/
 package org.eclipse.pde.internal.ds.core.text;
 
-import java.io.Serializable;
-
 import org.eclipse.pde.core.IModel;
 import org.eclipse.pde.internal.core.text.DocumentObject;
 import org.eclipse.pde.internal.ds.core.IDSComponent;
@@ -32,7 +30,7 @@
  * @see DSDocumentFactory
  */
 public abstract class DSObject extends DocumentObject implements IDSConstants,
-		Serializable, IDSObject {
+		IDSObject {
 
 	private static final long serialVersionUID = 1L;
 
diff --git a/ds/org.eclipse.pde.ds.lib/pom.xml b/ds/org.eclipse.pde.ds.lib/pom.xml
index 2862cda..86f8aca 100644
--- a/ds/org.eclipse.pde.ds.lib/pom.xml
+++ b/ds/org.eclipse.pde.ds.lib/pom.xml
@@ -16,7 +16,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ds/org.eclipse.pde.ds.tests/pom.xml b/ds/org.eclipse.pde.ds.tests/pom.xml
index cfca0e2..9eb791d 100644
--- a/ds/org.eclipse.pde.ds.tests/pom.xml
+++ b/ds/org.eclipse.pde.ds.tests/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ds/org.eclipse.pde.ds.ui/pom.xml b/ds/org.eclipse.pde.ds.ui/pom.xml
index 0bf2cf3..ce38008 100644
--- a/ds/org.eclipse.pde.ds.ui/pom.xml
+++ b/ds/org.eclipse.pde.ds.ui/pom.xml
@@ -15,7 +15,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ds/org.eclipse.pde.ds1_2.lib/pom.xml b/ds/org.eclipse.pde.ds1_2.lib/pom.xml
index 1f13815..e131ab0 100644
--- a/ds/org.eclipse.pde.ds1_2.lib/pom.xml
+++ b/ds/org.eclipse.pde.ds1_2.lib/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/features/org.eclipse.pde-feature/feature.xml b/features/org.eclipse.pde-feature/feature.xml
index 48a1262..f293d26 100644
--- a/features/org.eclipse.pde-feature/feature.xml
+++ b/features/org.eclipse.pde-feature/feature.xml
@@ -2,7 +2,7 @@
 <feature
       id="org.eclipse.pde"
       label="%featureName"
-      version="3.14.600.qualifier"
+      version="3.14.700.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="0.0.0">
diff --git a/features/org.eclipse.pde-feature/pom.xml b/features/org.eclipse.pde-feature/pom.xml
index c600a67..27f4fac 100644
--- a/features/org.eclipse.pde-feature/pom.xml
+++ b/features/org.eclipse.pde-feature/pom.xml
@@ -14,12 +14,12 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde.feature</groupId>
   <artifactId>org.eclipse.pde</artifactId>
-  <version>3.14.600-SNAPSHOT</version>
+  <version>3.14.700-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/pom.xml b/pom.xml
index adfeb3f..84e9c5d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -17,7 +17,7 @@
   <parent>
     <groupId>org.eclipse</groupId>
     <artifactId>eclipse-platform-parent</artifactId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../eclipse-platform-parent</relativePath>
   </parent>
 
diff --git a/tests-pom/pom.xml b/tests-pom/pom.xml
index 161d383..325d8ff 100644
--- a/tests-pom/pom.xml
+++ b/tests-pom/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
   </parent>
   <artifactId>tests-pom</artifactId>
   <packaging>pom</packaging>
diff --git a/ua/org.eclipse.pde.ua.core/pom.xml b/ua/org.eclipse.pde.ua.core/pom.xml
index 6c45fc85..f8088bd 100644
--- a/ua/org.eclipse.pde.ua.core/pom.xml
+++ b/ua/org.eclipse.pde.ua.core/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ua/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/comp/CompCSTaskObject.java b/ua/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/comp/CompCSTaskObject.java
index 4b80391..adadadf 100644
--- a/ua/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/comp/CompCSTaskObject.java
+++ b/ua/org.eclipse.pde.ua.core/src/org/eclipse/pde/internal/ua/core/cheatsheet/comp/CompCSTaskObject.java
@@ -238,19 +238,25 @@
 		String name = element.getNodeName();
 		ICompCSModelFactory factory = getModel().getFactory();
 
-		if (name.equals(ELEMENT_INTRO)) {
+		switch (name) {
+		case ELEMENT_INTRO:
 			// Process intro element
 			fFieldIntro = factory.createCompCSIntro(this);
 			fFieldIntro.parse(element);
-		} else if (name.equals(ELEMENT_ONCOMPLETION)) {
+			break;
+		case ELEMENT_ONCOMPLETION:
 			// Process onCompletion element
 			fFieldOnCompletion = factory.createCompCSOnCompletion(this);
 			fFieldOnCompletion.parse(element);
-		} else if (name.equals(ELEMENT_DEPENDENCY)) {
+			break;
+		case ELEMENT_DEPENDENCY:
 			// Process dependency element
 			ICompCSDependency dependency = factory.createCompCSDependency(this);
 			fFieldDependencies.add(dependency);
 			dependency.parse(element);
+			break;
+		default:
+			break;
 		}
 	}
 
diff --git a/ua/org.eclipse.pde.ua.tests/pom.xml b/ua/org.eclipse.pde.ua.tests/pom.xml
index 00255fc..dd92df6 100644
--- a/ua/org.eclipse.pde.ua.tests/pom.xml
+++ b/ua/org.eclipse.pde.ua.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ua/org.eclipse.pde.ua.ui/META-INF/MANIFEST.MF b/ua/org.eclipse.pde.ua.ui/META-INF/MANIFEST.MF
index b64fb03..ca598ae 100644
--- a/ua/org.eclipse.pde.ua.ui/META-INF/MANIFEST.MF
+++ b/ua/org.eclipse.pde.ua.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.ua.ui;singleton:=true
-Bundle-Version: 1.2.0.qualifier
+Bundle-Version: 1.2.100.qualifier
 Bundle-Activator: org.eclipse.pde.internal.ua.ui.PDEUserAssistanceUIPlugin
 Require-Bundle: org.eclipse.ui;bundle-version="[3.4.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.11.0,4.0.0)",
diff --git a/ua/org.eclipse.pde.ua.ui/pom.xml b/ua/org.eclipse.pde.ua.ui/pom.xml
index 9441d7d..0652a10 100644
--- a/ua/org.eclipse.pde.ua.ui/pom.xml
+++ b/ua/org.eclipse.pde.ua.ui/pom.xml
@@ -15,12 +15,12 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.ua.ui</artifactId>
-  <version>1.2.0-SNAPSHOT</version>
+  <version>1.2.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <properties>
diff --git a/ua/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSEnclosingTextDetails.java b/ua/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSEnclosingTextDetails.java
index 382206d..93b424d 100755
--- a/ua/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSEnclosingTextDetails.java
+++ b/ua/org.eclipse.pde.ua.ui/src/org/eclipse/pde/internal/ua/ui/editor/cheatsheet/comp/details/CompCSEnclosingTextDetails.java
@@ -285,16 +285,22 @@
 		int index = fTabFolder.getSelectionIndex();
 		Control oldControl = fNotebookLayout.topControl;
 
-		if (index == F_NO_TAB) {
+		switch (index) {
+		case F_NO_TAB:
 			// Select the introduction contents by default
 			fNotebookLayout.topControl = fIntroductionComposite;
 			// Select the introduction tab by default to match
 			// Does not trigger selection adapter (only user UI selections do)
 			fTabFolder.setSelection(F_INTRODUCTION_TAB);
-		} else if (index == F_INTRODUCTION_TAB) {
+			break;
+		case F_INTRODUCTION_TAB:
 			fNotebookLayout.topControl = fIntroductionComposite;
-		} else if (index == F_CONCLUSION_TAB) {
+			break;
+		case F_CONCLUSION_TAB:
 			fNotebookLayout.topControl = fConclusionComposite;
+			break;
+		default:
+			break;
 		}
 
 		if (oldControl != fNotebookLayout.topControl) {
diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
index 8b65b7b..62b3f49 100644
--- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true
-Bundle-Version: 3.14.100.qualifier
+Bundle-Version: 3.14.200.qualifier
 Bundle-Activator: org.eclipse.pde.internal.core.PDECore
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
diff --git a/ui/org.eclipse.pde.core/pom.xml b/ui/org.eclipse.pde.core/pom.xml
index edfe921..48b0111 100644
--- a/ui/org.eclipse.pde.core/pom.xml
+++ b/ui/org.eclipse.pde.core/pom.xml
@@ -15,12 +15,12 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.core</artifactId>
-  <version>3.14.100-SNAPSHOT</version>
+  <version>3.14.200-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <defaultSigning-excludeInnerJars>true</defaultSigning-excludeInnerJars>
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathComputer.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathComputer.java
index 491f0a0..fe67cbf 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathComputer.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathComputer.java
@@ -96,9 +96,16 @@
 		if (!clear) {
 			IClasspathEntry[] entries = JavaCore.create(project).getRawClasspath();
 			for (IClasspathEntry entry : entries) {
+				if (entry.getPath() != null ) {
+					if (PDECore.JRE_CONTAINER_PATH.isPrefixOf(entry.getPath())
+							|| PDECore.REQUIRED_PLUGINS_CONTAINER_PATH.equals(entry.getPath())) {
+						continue;
+					}
+				}
 				if (entry.getEntryKind() == IClasspathEntry.CPE_SOURCE
 						|| entry.getEntryKind() == IClasspathEntry.CPE_PROJECT
-						|| entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
+						|| entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY
+						|| entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
 					if (paths.add(entry.getPath())) {
 						result.add(updateTestAttribute(isTestPlugin, entry));
 					}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
index 6c757f5..bd0be54 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/P2Utils.java
@@ -15,10 +15,12 @@
 package org.eclipse.pde.internal.core;
 
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.NoSuchFileException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -93,7 +95,7 @@
 	 * @return URLs of all bundles in the installation or <code>null</code> if not able
 	 * 	to locate a bundles.info
 	 */
-	public static URL[] readBundlesTxt(String platformHome, URL configurationArea) {
+	public static URL[] readBundlesTxt(String platformHome, File configurationArea) {
 		if (configurationArea == null) {
 			return null;
 		}
@@ -131,15 +133,15 @@
 	 * @return all bundles in the installation or <code>null</code> if not able
 	 * 	to locate a bundles.info
 	 */
-	public static BundleInfo[] readBundles(String platformHome, URL configurationArea) {
+	public static BundleInfo[] readBundles(String platformHome, File configurationArea) {
 		IPath basePath = new Path(platformHome);
 		if (configurationArea == null) {
 			return null;
 		}
 		try {
-			URL bundlesTxt = new URL(configurationArea.getProtocol(), configurationArea.getHost(), new File(configurationArea.getFile(), SimpleConfiguratorManipulator.BUNDLES_INFO_PATH).getAbsolutePath());
+			File bundlesTxt = new File(configurationArea, SimpleConfiguratorManipulator.BUNDLES_INFO_PATH);
 			File home = basePath.toFile();
-			BundleInfo bundles[] = getBundlesFromFile(bundlesTxt, home);
+			BundleInfo[] bundles = getBundlesFromFile(bundlesTxt, home);
 			if (bundles == null || bundles.length == 0) {
 				return null;
 			}
@@ -160,15 +162,15 @@
 	 * @return all source bundles in the installation or <code>null</code> if not able
 	 * 	to locate a source.info
 	 */
-	public static BundleInfo[] readSourceBundles(String platformHome, URL configurationArea) {
+	public static BundleInfo[] readSourceBundles(String platformHome, File configurationArea) {
 		IPath basePath = new Path(platformHome);
 		if (configurationArea == null) {
 			return null;
 		}
 		try {
 			File home = basePath.toFile();
-			URL srcBundlesTxt = new URL(configurationArea.getProtocol(), configurationArea.getHost(), configurationArea.getFile().concat(SimpleConfiguratorManipulator.SOURCE_INFO_PATH));
-			BundleInfo srcBundles[] = getBundlesFromFile(srcBundlesTxt, home);
+			File srcBundlesTxt = new File(configurationArea, SimpleConfiguratorManipulator.SOURCE_INFO_PATH);
+			BundleInfo[] srcBundles = getBundlesFromFile(srcBundlesTxt, home);
 			if (srcBundles == null || srcBundles.length == 0) {
 				return null;
 			}
@@ -194,24 +196,26 @@
 	}
 
 	/**
-	 * Returns a list of {@link BundleInfo} for each bundle entry or <code>null</code> if there
-	 * is a problem reading the file.
+	 * Returns a list of {@link BundleInfo} for each bundle entry or
+	 * <code>null</code> if there is a problem reading the file.
 	 *
-	 * @param fileURL the URL of the file to read
-	 * @param home the path describing the base location of the platform install
+	 * @param filePath
+	 *            the file to read
+	 * @param home
+	 *            the path describing the base location of the platform install
 	 * @return list containing URL locations or <code>null</code>
 	 * @throws IOException
 	 */
-	private static BundleInfo[] getBundlesFromFile(URL fileURL, File home) throws IOException {
+	private static BundleInfo[] getBundlesFromFile(File filePath, File home) throws IOException {
 		SimpleConfiguratorManipulator manipulator = PDECore.getDefault()
 				.acquireService(SimpleConfiguratorManipulator.class);
 		if (manipulator == null) {
 			return null;
 		}
-		// the input stream will be buffered and closed for us
-		try {
-			return manipulator.loadConfiguration(fileURL.openStream(), home.toURI());
-		} catch (FileNotFoundException e) {
+		// the input stream will be buffered for us
+		try (InputStream in = Files.newInputStream(filePath.toPath())) {
+			return manipulator.loadConfiguration(in, home.toURI());
+		} catch (NoSuchFileException e) {
 			return null;
 		}
 	}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java
index 7d6c615..1a0cf66 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDEState.java
@@ -76,9 +76,17 @@
 	private void createNewTargetState(boolean resolve, URI[] uris, IProgressMonitor monitor) {
 		fState = stateObjectFactory.createState(resolve);
 		if (resolve) {
+			final String systemBSN = getSystemBundle();
 			fState.getResolver().setSelectionPolicy(new Comparator<BaseDescription>() {
 				@Override
 				public int compare(BaseDescription bd1, BaseDescription bd2) {
+					if (systemBSN.equals(bd1.getSupplier().getSymbolicName())
+							&& !systemBSN.equals(bd2.getSupplier().getSymbolicName())) {
+						return -1;
+					} else if (!systemBSN.equals(bd1.getSupplier().getSymbolicName())
+							&& systemBSN.equals(bd2.getSupplier().getSymbolicName())) {
+						return 1;
+					}
 					Version v1 = bd1.getVersion();
 					Version v2 = bd2.getVersion();
 					int versionCompare = versionCompare(v1, v2);
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 115321f..2abd41f 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
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.net.URI;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
@@ -43,6 +44,12 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Status;
+import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.internal.compiler.env.IModule.IPackageExport;
+import org.eclipse.jdt.internal.compiler.util.JRTUtil;
+import org.eclipse.jdt.internal.core.builder.ClasspathJrt;
+import org.eclipse.jdt.internal.core.builder.ClasspathLocation;
+import org.eclipse.jdt.launching.IVMInstall;
 import org.eclipse.jdt.launching.JavaRuntime;
 import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
 import org.eclipse.osgi.service.resolver.BundleDescription;
@@ -104,9 +111,10 @@
 	}
 
 	/**
-	 * Returns the list of bundles in the osgi.bundles property of the
-	 * platform config ini, or a set of default bundles if the property
-	 * could not be found.
+	 * Returns the list of bundles in the osgi.bundles property of the platform
+	 * config ini, or a set of default bundles if the property could not be
+	 * found.
+	 *
 	 * @return string list of bundles
 	 */
 	public static String getBundleList() {
@@ -139,11 +147,14 @@
 	}
 
 	/**
-	 * Removes path information from the given string containing one or more comma separated
-	 * osgi bundles.  Replaces escaped '\:' with ':'.  Removes, reference, platform and file
-	 * prefixes.  Removes any other path information converting the location or the last
-	 * segment to a bundle id.
-	 * @param osgiBundles list of bundles to strip path information from (commma separated)
+	 * Removes path information from the given string containing one or more
+	 * comma separated osgi bundles. Replaces escaped '\:' with ':'. Removes,
+	 * reference, platform and file prefixes. Removes any other path information
+	 * converting the location or the last segment to a bundle id.
+	 *
+	 * @param osgiBundles
+	 *            list of bundles to strip path information from (commma
+	 *            separated)
 	 * @return list of bundles with path information stripped
 	 */
 	// String.subString() does not return null
@@ -170,7 +181,8 @@
 				bundle = bundle.substring(FILE_URL_PREFIX.length());
 			}
 
-			// if the path is relative, the last segment is the bundle symbolic name
+			// if the path is relative, the last segment is the bundle symbolic
+			// name
 			// Otherwise, we need to retrieve the bundle symbolic name ourselves
 			IPath path = new Path(bundle);
 			String id = null;
@@ -204,7 +216,8 @@
 			return fgCachedLocations.get(path);
 		}
 
-		// TODO Loading the entire manifest to get a name is an unecessary performance hit
+		// TODO Loading the entire manifest to get a name is an unecessary
+		// performance hit
 		File file = new File(path);
 		if (file.exists()) {
 			try {
@@ -215,7 +228,8 @@
 					return name;
 				}
 			} catch (CoreException e) {
-				// Should have already been reported when creating the target platform
+				// Should have already been reported when creating the target
+				// platform
 			}
 		}
 		return null;
@@ -255,18 +269,22 @@
 	}
 
 	/**
-	 * Utility method to check if the workspace active target platform
-	 * contains unresolved p2 repositories
+	 * Utility method to check if the workspace active target platform contains
+	 * unresolved p2 repositories
 	 *
-	 * @return unresolved repository based  workspace active target platform
-	 * or <code>null</code> if no repository based target or if such target is resolved.
-	 * @throws CoreException if there is a problem accessing the workspace target definition
+	 * @return unresolved repository based workspace active target platform or
+	 *         <code>null</code> if no repository based target or if such target
+	 *         is resolved.
+	 * @throws CoreException
+	 *             if there is a problem accessing the workspace target
+	 *             definition
 	 */
 
 	public static ITargetDefinition getUnresolvedRepositoryBasedWorkspaceTarget() throws CoreException {
 		ITargetPlatformService service = PDECore.getDefault().acquireService(ITargetPlatformService.class);
 		if (service == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, PDECoreMessages.TargetPlatformHelper_CouldNotAcquireTargetService));
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID,
+					PDECoreMessages.TargetPlatformHelper_CouldNotAcquireTargetService));
 		}
 		final ITargetDefinition target = service.getWorkspaceTargetDefinition();
 		if (target != null && !target.isResolved()) {
@@ -290,7 +308,8 @@
 
 	public static Set<String> getApplicationNameSet() {
 		TreeSet<String> result = new TreeSet<>();
-		IExtension[] extensions = PDECore.getDefault().getExtensionsRegistry().findExtensions("org.eclipse.core.runtime.applications", true); //$NON-NLS-1$
+		IExtension[] extensions = PDECore.getDefault().getExtensionsRegistry()
+				.findExtensions("org.eclipse.core.runtime.applications", true); //$NON-NLS-1$
 		for (IExtension extension : extensions) {
 			String id = extension.getUniqueIdentifier();
 			IConfigurationElement[] elements = extension.getConfigurationElements();
@@ -314,7 +333,8 @@
 
 	public static TreeSet<String> getProductNameSet() {
 		TreeSet<String> result = new TreeSet<>();
-		IExtension[] extensions = PDECore.getDefault().getExtensionsRegistry().findExtensions("org.eclipse.core.runtime.products", true); //$NON-NLS-1$
+		IExtension[] extensions = PDECore.getDefault().getExtensionsRegistry()
+				.findExtensions("org.eclipse.core.runtime.products", true); //$NON-NLS-1$
 		for (IExtension extension : extensions) {
 			IConfigurationElement[] elements = extension.getConfigurationElements();
 			if (elements.length != 1) {
@@ -356,10 +376,11 @@
 	@SuppressWarnings("unchecked")
 	public static Dictionary<String, String>[] getPlatformProperties(String[] profiles, MinimalState state) {
 		if (profiles == null || profiles.length == 0) {
-			return new Dictionary[] {getTargetEnvironment(state)};
+			return new Dictionary[] { getTargetEnvironment(state) };
 		}
 
-		// add java profiles for those EE's that have a .profile file in the current system bundle
+		// add java profiles for those EE's that have a .profile file in the
+		// current system bundle
 		ArrayList<Dictionary<String, String>> result = new ArrayList<>(profiles.length);
 		for (String profile : profiles) {
 			IExecutionEnvironment environment = JavaRuntime.getExecutionEnvironmentsManager().getEnvironment(profile);
@@ -368,6 +389,9 @@
 				if (profileProps != null) {
 					Dictionary<String, String> props = TargetPlatformHelper.getTargetEnvironment(state);
 					String systemPackages = profileProps.getProperty(Constants.FRAMEWORK_SYSTEMPACKAGES);
+					if (systemPackages == null) {
+						systemPackages = querySystemPackages(environment);
+					}
 					if (systemPackages != null) {
 						props.put(Constants.FRAMEWORK_SYSTEMPACKAGES, systemPackages);
 					}
@@ -382,7 +406,56 @@
 		if (!result.isEmpty()) {
 			return result.toArray(new Dictionary[result.size()]);
 		}
-		return new Dictionary[] {TargetPlatformHelper.getTargetEnvironment(state)};
+		return new Dictionary[] { TargetPlatformHelper.getTargetEnvironment(state) };
+	}
+
+	public static String querySystemPackages(IExecutionEnvironment environment) {
+		IVMInstall vm = bestVmInstallFor(environment);
+		if (vm == null || !JavaRuntime.isModularJava(vm)) {
+			return null;
+		}
+
+		String release = null;
+		Map<String, String> complianceOptions = environment.getComplianceOptions();
+		if (complianceOptions != null) {
+			release = complianceOptions.get(JavaCore.COMPILER_COMPLIANCE);
+		}
+
+		try {
+			Collection<String> packages = new TreeSet<>();
+			File jrtPath = new File(vm.getInstallLocation(), "lib/" + JRTUtil.JRT_FS_JAR); //$NON-NLS-1$
+			ClasspathJrt jrt = ClasspathLocation.forJrtSystem(jrtPath.toString(), null, null, release);
+			for (String moduleName : jrt.getModuleNames(null)) {
+				for (IPackageExport packageExport : jrt.getModule(moduleName).exports()) {
+					if (!packageExport.isQualified()) {
+						packages.add(new String(packageExport.name()));
+					}
+				}
+			}
+			return String.join(",", packages); //$NON-NLS-1$
+		} catch (CoreException e) {
+			PDECore.logException(e, "failed to read system packages for " + environment); //$NON-NLS-1$
+		}
+		return null;
+	}
+
+	private static IVMInstall bestVmInstallFor(IExecutionEnvironment environment) {
+		IVMInstall defaultVM = environment.getDefaultVM();
+		if (defaultVM != null) {
+			return defaultVM;
+		}
+
+		IVMInstall[] compatible = environment.getCompatibleVMs();
+		if (compatible.length == 0) {
+			return null;
+		}
+
+		for (IVMInstall vm : compatible) {
+			if (environment.isStrictlyCompatible(vm)) {
+				return vm;
+			}
+		}
+		return compatible[0];
 	}
 
 	public static String[] getKnownExecutionEnvironments() {
@@ -391,7 +464,7 @@
 			if ("none".equals(jreProfile)) { //$NON-NLS-1$
 				return new String[0];
 			}
-			return new String[] {jreProfile};
+			return new String[] { jreProfile };
 		}
 		IExecutionEnvironment[] environments = JavaRuntime.getExecutionEnvironmentsManager().getExecutionEnvironments();
 		String[] ids = new String[environments.length];
@@ -402,10 +475,12 @@
 	}
 
 	/**
-	 * Returns the version of Eclipse the target platform is pointing to or {@link ICoreConstants#TARGET_VERSION_LATEST}
-	 * if the target platform does not contain <code>org.eclipse.osgi</code>.
+	 * Returns the version of Eclipse the target platform is pointing to or
+	 * {@link ICoreConstants#TARGET_VERSION_LATEST} if the target platform does
+	 * not contain <code>org.eclipse.osgi</code>.
 	 *
-	 * @return the target version of Eclipse or the latest version PDE knows about.
+	 * @return the target version of Eclipse or the latest version PDE knows
+	 *         about.
 	 */
 	public static String getTargetVersionString() {
 		IPluginModelBase model = PluginRegistry.findModel(IPDEBuildConstants.BUNDLE_OSGI);
@@ -450,20 +525,24 @@
 	}
 
 	/**
-	 * Returns the version of Eclipse the target platform is pointing to or {@link ICoreConstants#TARGET_VERSION_LATEST}
-	 * if the target platform does not contain <code>org.eclipse.osgi</code>.
+	 * Returns the version of Eclipse the target platform is pointing to or
+	 * {@link ICoreConstants#TARGET_VERSION_LATEST} if the target platform does
+	 * not contain <code>org.eclipse.osgi</code>.
 	 *
-	 * @return the target version of Eclipse or the latest version PDE knows about.
+	 * @return the target version of Eclipse or the latest version PDE knows
+	 *         about.
 	 */
 	public static double getTargetVersion() {
 		return Double.parseDouble(getTargetVersionString());
 	}
 
 	/**
-	 * Returns the schema version to use when targetting a specific version.
-	 * If <code>null</code> is* passed as the version, the current target platform's
-	 * version is used (result of getTargetVersion()).
-	 * @param targetVersion the plugin version being targeted or <code>null</code>
+	 * Returns the schema version to use when targetting a specific version. If
+	 * <code>null</code> is* passed as the version, the current target
+	 * platform's version is used (result of getTargetVersion()).
+	 *
+	 * @param targetVersion
+	 *            the plugin version being targeted or <code>null</code>
 	 * @return a string version
 	 */
 	public static String getSchemaVersionForTargetVersion(String targetVersion) {
@@ -473,7 +552,8 @@
 		} else {
 			target = Double.parseDouble(targetVersion);
 		}
-		// In 3.4 the schemas changed the spelling of appInfo to appinfo to be w3c compliant, see bug 213255.
+		// In 3.4 the schemas changed the spelling of appInfo to appinfo to be
+		// w3c compliant, see bug 213255.
 		String schemaVersion = ICoreConstants.TARGET34;
 		if (target < 3.2) {
 			// Default schema version is 3.0
@@ -486,17 +566,20 @@
 	}
 
 	/**
-	 * Reverse engineer the target version based on a schema version.
-	 * If <code>null</code> is* passed as the version, the current target platform's
-	 * version is used (result of getTargetVersion()).
-	 * @param schemaVersion the schema version being targeted or <code>null</code>
+	 * Reverse engineer the target version based on a schema version. If
+	 * <code>null</code> is* passed as the version, the current target
+	 * platform's version is used (result of getTargetVersion()).
+	 *
+	 * @param schemaVersion
+	 *            the schema version being targeted or <code>null</code>
 	 * @return a compatible target version
 	 */
 	public static String getTargetVersionForSchemaVersion(String schemaVersion) {
 		if (schemaVersion == null) {
 			return getTargetVersionString();
 		}
-		// In 3.4 the schemas changed the spelling of appInfo to appinfo to be w3c compliant, see bug 213255.
+		// In 3.4 the schemas changed the spelling of appInfo to appinfo to be
+		// w3c compliant, see bug 213255.
 		if (schemaVersion.equals(ICoreConstants.TARGET30)) {
 			// 3.0 schema version was good up to 3.1
 			return ICoreConstants.TARGET31;
@@ -511,6 +594,7 @@
 
 	/**
 	 * Gets the schema version to use for the current target platform
+	 *
 	 * @return String schema version for the current target platform
 	 */
 	public static String getSchemaVersion() {
@@ -527,17 +611,22 @@
 
 	/**
 	 * Utility method to get the workspace active target platform and ensure it
-	 * has been resolved.  This is potentially a long running operation. If a
+	 * has been resolved. This is potentially a long running operation. If a
 	 * monitor is provided, progress is reported to it.
 	 *
-	 * @param monitor optional progress monitor to report progress to
-	 * @return a resolved target definition or <code>null</code> if the resolution was cancelled
-	 * @throws CoreException if there is a problem accessing the workspace target definition
+	 * @param monitor
+	 *            optional progress monitor to report progress to
+	 * @return a resolved target definition or <code>null</code> if the
+	 *         resolution was cancelled
+	 * @throws CoreException
+	 *             if there is a problem accessing the workspace target
+	 *             definition
 	 */
 	public static ITargetDefinition getWorkspaceTargetResolved(IProgressMonitor monitor) throws CoreException {
 		ITargetPlatformService service = PDECore.getDefault().acquireService(ITargetPlatformService.class);
 		if (service == null) {
-			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, PDECoreMessages.TargetPlatformHelper_CouldNotAcquireTargetService));
+			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID,
+					PDECoreMessages.TargetPlatformHelper_CouldNotAcquireTargetService));
 		}
 		final ITargetDefinition target = service.getWorkspaceTargetDefinition();
 
@@ -550,8 +639,10 @@
 			PDEPreferencesManager preferences = PDECore.getDefault().getPreferencesManager();
 			String memento = target.getHandle().getMemento();
 			if (memento != null) {
-				// Same target has been re-resolved upon loading, clear the preference  and
-				// update the target so listeners can react to the change - see TargetStatus
+				// Same target has been re-resolved upon loading, clear the
+				// preference and
+				// update the target so listeners can react to the change - see
+				// TargetStatus
 				if (memento.equals(preferences.getString(ICoreConstants.WORKSPACE_TARGET_HANDLE))) {
 					preferences.setValue(ICoreConstants.WORKSPACE_TARGET_HANDLE, ""); //$NON-NLS-1$
 					preferences.setValue(ICoreConstants.WORKSPACE_TARGET_HANDLE, memento);
@@ -598,14 +689,10 @@
 				result[i] = libs[i].getName();
 			}
 		} else {
-			String[] libs = state.getLibraryNames(bundle.getBundleId());
-			result = new String[libs.length];
-			for (int i = 0; i < libs.length; i++) {
-				result[i] = libs[i];
-			}
+			result = state.getLibraryNames(bundle.getBundleId()).clone();
 		}
 		if (result.length == 0) {
-			return new String[] {"."}; //$NON-NLS-1$
+			return new String[] { "." }; //$NON-NLS-1$
 		}
 		return result;
 	}
@@ -639,8 +726,8 @@
 	}
 
 	/**
-	 * Reads and returns the VM arguments specified in the running platform's .ini file,
-	 * or am empty string if none.
+	 * Reads and returns the VM arguments specified in the running platform's
+	 * .ini file, or am empty string if none.
 	 *
 	 * @return VM arguments specified in the running platform's .ini file
 	 */
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ExtensionsErrorReporter.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ExtensionsErrorReporter.java
index 4181014..81eadac 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ExtensionsErrorReporter.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/ExtensionsErrorReporter.java
@@ -121,11 +121,14 @@
 				}
 				Element child = (Element) children.item(i);
 				String name = child.getNodeName();
-				if (name.equals("extension")) { //$NON-NLS-1$
+				switch (name) {
+					case "extension": //$NON-NLS-1$
 					validateExtension(child);
-				} else if (name.equals("extension-point")) { //$NON-NLS-1$
+					break;
+				case "extension-point": //$NON-NLS-1$
 					validateExtensionPoint(child);
-				} else {
+					break;
+				default:
 					if (!name.equals("runtime") && !name.equals("requires")) { //$NON-NLS-1$ //$NON-NLS-2$
 						severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_UNKNOWN_ELEMENT);
 						if (severity != CompilerFlags.IGNORE) {
@@ -137,6 +140,7 @@
 							reportUnusedElement(child, severity);
 						}
 					}
+					break;
 				}
 			}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/PluginBaseErrorReporter.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/PluginBaseErrorReporter.java
index 5da43d4..f13fd5a 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/PluginBaseErrorReporter.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/PluginBaseErrorReporter.java
@@ -48,19 +48,26 @@
 				}
 				Element child = (Element) children.item(i);
 				String name = child.getNodeName();
-				if (name.equals("extension")) { //$NON-NLS-1$
+				switch (name)
+				{
+				case "extension": //$NON-NLS-1$
 					validateExtension(child);
-				} else if (name.equals("extension-point")) { //$NON-NLS-1$
+					break;
+				case "extension-point": //$NON-NLS-1$
 					validateExtensionPoint(child);
-				} else if (name.equals("runtime")) { //$NON-NLS-1$
+					break;
+				case "runtime": //$NON-NLS-1$
 					validateRuntime(child);
-				} else if (name.equals("requires")) { //$NON-NLS-1$
+					break;
+				case "requires": //$NON-NLS-1$
 					validateRequires(child);
-				} else {
+					break;
+				default:
 					int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_UNKNOWN_ELEMENT);
 					if (severity != CompilerFlags.IGNORE) {
 						reportIllegalElement(element, severity);
 					}
+					break;
 				}
 			}
 		}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java
index 4cea62a..abe1088 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/SchemaErrorReporter.java
@@ -135,12 +135,16 @@
 		for (int i = 0; i < children.getLength(); i++) {
 			Node child = children.item(i);
 			if (child instanceof Element) {
-				if (child.getNodeName().equals(ANNOTATION)) {
+				switch (child.getNodeName()) {
+				case ANNOTATION:
 					validateAnnotation((Element) child);
-				} else if (child.getNodeName().equals(ELEMENT)) {
+					break;
+				case ELEMENT:
 					validateElementReference((Element) child);
-				} else {
+					break;
+				default:
 					validate((Element) child);
+					break;
 				}
 			}
 		}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
index f6b6f5b..242d9b8 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java
@@ -540,6 +540,10 @@
 				target = def.get(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, null);
 			}
 			if (target != null) {
+				float tar = Float.parseFloat(target);
+				if (tar < 1.8) {
+					target = "1.8"; //$NON-NLS-1$
+				}
 				fAntBuildProperties.put(IXMLConstants.PROPERTY_JAVAC_TARGET, target);
 			}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java
index db37fb8..b81ec9c 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/ProductExportOperation.java
@@ -356,12 +356,18 @@
 			String icons = ""; //$NON-NLS-1$
 			for (String[] config : configs) {
 				String images = null;
-				if (config[0].equals("win32")) { //$NON-NLS-1$
+				switch (config[0]) {
+					case "win32": //$NON-NLS-1$
 					images = getWin32Images(info);
-				} else if (config[0].equals("linux")) { //$NON-NLS-1$
+					break;
+				case "linux": //$NON-NLS-1$
 					images = getExpandedPath(info.getIconPath(ILauncherInfo.LINUX_ICON));
-				} else if (config[0].equals("macosx")) { //$NON-NLS-1$
+					break;
+				case "macosx": //$NON-NLS-1$
 					images = getExpandedPath(info.getIconPath(ILauncherInfo.MACOSX_ICON));
+					break;
+				default:
+					break;
 				}
 				if (images != null) {
 					if (icons.length() > 0) {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
index 501050f..76c9cd5 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/Feature.java
@@ -231,49 +231,67 @@
 			Node child = children.item(i);
 			if (child.getNodeType() == Node.ELEMENT_NODE) {
 				String tag = child.getNodeName().toLowerCase(Locale.ENGLISH);
-				if (tag.equals("description")) { //$NON-NLS-1$
-					IFeatureInfo info = getModel().getFactory().createInfo(IFeature.INFO_DESCRIPTION);
-					((FeatureInfo) info).setInTheModel(true);
-					((FeatureInfo) info).parse(child);
-					fInfos[IFeature.INFO_DESCRIPTION] = info;
-				} else if (tag.equals("license")) { //$NON-NLS-1$
-					IFeatureInfo info = getModel().getFactory().createInfo(IFeature.INFO_LICENSE);
-					((FeatureInfo) info).setInTheModel(true);
-					((FeatureInfo) info).parse(child);
-					fInfos[IFeature.INFO_LICENSE] = info;
-				} else if (tag.equals("copyright")) { //$NON-NLS-1$
-					IFeatureInfo info = getModel().getFactory().createInfo(IFeature.INFO_COPYRIGHT);
-					((FeatureInfo) info).setInTheModel(true);
-					((FeatureInfo) info).parse(child);
-					fInfos[IFeature.INFO_COPYRIGHT] = info;
-				} else if (tag.equals("url")) { //$NON-NLS-1$
+				switch (tag) {
+					case "description": //$NON-NLS-1$
+					{
+						IFeatureInfo info = getModel().getFactory().createInfo(IFeature.INFO_DESCRIPTION);
+						((FeatureInfo) info).setInTheModel(true);
+						((FeatureInfo) info).parse(child);
+						fInfos[IFeature.INFO_DESCRIPTION] = info;
+						break;
+					}
+					case "license": //$NON-NLS-1$
+					{
+						IFeatureInfo info = getModel().getFactory().createInfo(IFeature.INFO_LICENSE);
+						((FeatureInfo) info).setInTheModel(true);
+						((FeatureInfo) info).parse(child);
+						fInfos[IFeature.INFO_LICENSE] = info;
+						break;
+					}
+					case "copyright": //$NON-NLS-1$
+					{
+						IFeatureInfo info = getModel().getFactory().createInfo(IFeature.INFO_COPYRIGHT);
+						((FeatureInfo) info).setInTheModel(true);
+						((FeatureInfo) info).parse(child);
+						fInfos[IFeature.INFO_COPYRIGHT] = info;
+						break;
+					}
+					case "url": //$NON-NLS-1$
 					if (fUrl == null) {
 						fUrl = getModel().getFactory().createURL();
 						((FeatureURL) fUrl).setInTheModel(true);
 						((FeatureURL) fUrl).parse(child);
 					}
-				} else if (tag.equals("requires")) { //$NON-NLS-1$
+					break;
+				case "requires": //$NON-NLS-1$
 					parseRequires(child);
-				} else if (tag.equals("install-handler")) { //$NON-NLS-1$
+					break;
+				case "install-handler": //$NON-NLS-1$
 					IFeatureInstallHandler handler = getModel().getFactory().createInstallHandler();
 					((FeatureInstallHandler) handler).parse(child);
 					((FeatureInstallHandler) handler).setInTheModel(true);
 					this.fHandler = handler;
-				} else if (tag.equals("plugin")) { //$NON-NLS-1$
+					break;
+				case "plugin": //$NON-NLS-1$
 					IFeaturePlugin plugin = getModel().getFactory().createPlugin();
 					((FeaturePlugin) plugin).parse(child);
 					((FeaturePlugin) plugin).setInTheModel(true);
 					fPlugins.add(plugin);
-				} else if (tag.equals("data")) { //$NON-NLS-1$
+					break;
+				case "data": //$NON-NLS-1$
 					IFeatureData newData = getModel().getFactory().createData();
 					((FeatureData) newData).parse(child);
 					((FeatureData) newData).setInTheModel(true);
 					fData.add(newData);
-				} else if (tag.equals("includes")) { //$NON-NLS-1$
+					break;
+				case "includes": //$NON-NLS-1$
 					IFeatureChild newChild = getModel().getFactory().createChild();
 					((FeatureChild) newChild).parse(child);
 					((FeatureChild) newChild).setInTheModel(true);
 					this.fChildren.add(newChild);
+					break;
+				default:
+					break;
 				}
 			}
 		}
@@ -664,40 +682,58 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_OS)) {
+		switch (name) {
+		case P_OS:
 			setOS((String) newValue);
-		} else if (name.equals(P_WS)) {
+			break;
+		case P_WS:
 			setWS((String) newValue);
-		} else if (name.equals(P_NL)) {
+			break;
+		case P_NL:
 			setNL((String) newValue);
-		} else if (name.equals(P_ARCH)) {
+			break;
+		case P_ARCH:
 			setArch((String) newValue);
-		} else if (name.equals(P_COLLOCATION_AFFINITY)) {
+			break;
+		case P_COLLOCATION_AFFINITY:
 			setColocationAffinity((String) newValue);
-		} else if (name.equals(P_APPLICATION)) {
+			break;
+		case P_APPLICATION:
 			setApplication((String) newValue);
-		} else if (name.equals(P_PRIMARY)) {
+			break;
+		case P_PRIMARY:
 			setPrimary(newValue != null ? ((Boolean) newValue).booleanValue() : false);
-		} else if (name.equals(P_EXCLUSIVE)) {
+			break;
+		case P_EXCLUSIVE:
 			setExclusive(newValue != null ? ((Boolean) newValue).booleanValue() : false);
-		} else if (name.equals(P_PROVIDER)) {
+			break;
+		case P_PROVIDER:
 			setProviderName((String) newValue);
-		} else if (name.equals(P_PLUGIN)) {
+			break;
+		case P_PLUGIN:
 			setPlugin((String) newValue);
-		} else if (name.equals(P_URL)) {
+			break;
+		case P_URL:
 			setURL((IFeatureURL) newValue);
-		} else if (name.equals(P_INSTALL_HANDLER)) {
+			break;
+		case P_INSTALL_HANDLER:
 			setInstallHandler((IFeatureInstallHandler) newValue);
-		} else if (name.equals(P_DESCRIPTION)) {
+			break;
+		case P_DESCRIPTION:
 			setFeatureInfo((IFeatureInfo) newValue, INFO_DESCRIPTION);
-		} else if (name.equals(P_LICENSE)) {
+			break;
+		case P_LICENSE:
 			setFeatureInfo((IFeatureInfo) newValue, INFO_LICENSE);
-		} else if (name.equals(P_COPYRIGHT)) {
+			break;
+		case P_COPYRIGHT:
 			setFeatureInfo((IFeatureInfo) newValue, INFO_COPYRIGHT);
-		} else if (name.equals(P_IMAGE)) {
+			break;
+		case P_IMAGE:
 			setImageName((String) newValue);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
index 401af7d..a5cf964 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureChild.java
@@ -75,12 +75,18 @@
 			searchLocationName = getNodeAttribute(node, "search-location"); //$NON-NLS-1$
 		}
 		if (searchLocationName != null) {
-			if (searchLocationName.equals("root")) { //$NON-NLS-1$
+			switch (searchLocationName) {
+				case "root": //$NON-NLS-1$
 				fSearchLocation = ROOT;
-			} else if (searchLocationName.equals("self")) { //$NON-NLS-1$
+				break;
+			case "self": //$NON-NLS-1$
 				fSearchLocation = SELF;
-			} else if (searchLocationName.equals("both")) { //$NON-NLS-1$
+				break;
+			case "both": //$NON-NLS-1$
 				fSearchLocation = BOTH;
+				break;
+			default:
+				break;
 			}
 		}
 		//hookWithWorkspace();
@@ -239,26 +245,37 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_VERSION)) {
+		switch (name) {
+		case P_VERSION:
 			setVersion((String) newValue);
-		} else if (name.equals(P_OPTIONAL)) {
+			break;
+		case P_OPTIONAL:
 			setOptional(((Boolean) newValue).booleanValue());
-		} else if (name.equals(P_NAME)) {
+			break;
+		case P_NAME:
 			setName((String) newValue);
-		} else if (name.equals(P_MATCH)) {
+			break;
+		case P_MATCH:
 			setMatch(newValue != null ? ((Integer) newValue).intValue() : NONE);
-		} else if (name.equals(P_OS)) {
+			break;
+		case P_OS:
 			setOS((String) newValue);
-		} else if (name.equals(P_WS)) {
+			break;
+		case P_WS:
 			setWS((String) newValue);
-		} else if (name.equals(P_ARCH)) {
+			break;
+		case P_ARCH:
 			setArch((String) newValue);
-		} else if (name.equals(P_NL)) {
+			break;
+		case P_NL:
 			setNL((String) newValue);
-		} else if (name.equals(P_SEARCH_LOCATION)) {
+			break;
+		case P_SEARCH_LOCATION:
 			setSearchLocation(newValue != null ? ((Integer) newValue).intValue() : ROOT);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java
index d32c472..ad06426 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureData.java
@@ -248,20 +248,28 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_OS)) {
+		switch (name) {
+		case P_OS:
 			setOS((String) newValue);
-		} else if (name.equals(P_WS)) {
+			break;
+		case P_WS:
 			setWS((String) newValue);
-		} else if (name.equals(P_NL)) {
+			break;
+		case P_NL:
 			setNL((String) newValue);
-		} else if (name.equals(P_ARCH)) {
+			break;
+		case P_ARCH:
 			setArch((String) newValue);
-		} else if (name.equals(P_DOWNLOAD_SIZE)) {
+			break;
+		case P_DOWNLOAD_SIZE:
 			setDownloadSize(newValue != null ? ((Integer) newValue).intValue() : 0);
-		} else if (name.equals(P_INSTALL_SIZE)) {
+			break;
+		case P_INSTALL_SIZE:
 			setInstallSize(newValue != null ? ((Integer) newValue).intValue() : 0);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java
index 6d2f739..6904769 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java
@@ -182,16 +182,22 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_MATCH)) {
+		switch (name) {
+		case P_MATCH:
 			setMatch(newValue != null ? ((Integer) newValue).intValue() : 0);
-		} else if (name.equals(P_ID_MATCH)) {
+			break;
+		case P_ID_MATCH:
 			setIdMatch(newValue != null ? ((Integer) newValue).intValue() : 0);
-		} else if (name.equals(P_TYPE)) {
+			break;
+		case P_TYPE:
 			setType(newValue != null ? ((Integer) newValue).intValue() : PLUGIN);
-		} else if (name.equals(P_PATCH)) {
+			break;
+		case P_PATCH:
 			setPatch(newValue != null ? ((Boolean) newValue).booleanValue() : false);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInfo.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInfo.java
index f73cebb..b773ccb 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInfo.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInfo.java
@@ -59,12 +59,16 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_DESC)) {
+		switch (name) {
+		case P_DESC:
 			setDescription(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_URL)) {
+			break;
+		case P_URL:
 			setURL(newValue != null ? newValue.toString() : null);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInstallHandler.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInstallHandler.java
index 4e40d10..4de4be5 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInstallHandler.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureInstallHandler.java
@@ -51,12 +51,16 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_LIBRARY)) {
+		switch (name) {
+		case P_LIBRARY:
 			setLibrary((String) newValue);
-		} else if (name.equals(P_HANDLER_NAME)) {
+			break;
+		case P_HANDLER_NAME:
 			setHandlerName((String) newValue);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureURLElement.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureURLElement.java
index 2d0fbf9..47773ec 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureURLElement.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureURLElement.java
@@ -84,12 +84,16 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_URL)) {
+		switch (name) {
+		case P_URL:
 			setURL((URL) newValue);
-		} else if (name.equals(P_SITE_TYPE)) {
+			break;
+		case P_SITE_TYPE:
 			setSiteType(((Integer) newValue).intValue());
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java
index 63bbfcd..2e47b19 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/ArgumentsInfo.java
@@ -262,30 +262,41 @@
 			Node child = list.item(i);
 			String[] parentArgs = fProgramArgs;
 			if (child.getNodeType() == Node.ELEMENT_NODE) {
-				if (child.getNodeName().equals(P_PROG_ARGS)) {
+				switch (child.getNodeName()) {
+				case P_PROG_ARGS:
 					parentArgs = fProgramArgs;
 					fProgramArgs[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_PROG_ARGS_LIN)) {
+					break;
+				case P_PROG_ARGS_LIN:
 					parentArgs = fProgramArgsLin;
 					fProgramArgsLin[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_PROG_ARGS_MAC)) {
+					break;
+				case P_PROG_ARGS_MAC:
 					parentArgs = fProgramArgsMac;
 					fProgramArgsMac[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_PROG_ARGS_WIN)) {
+					break;
+				case P_PROG_ARGS_WIN:
 					parentArgs = fProgramArgsWin;
 					fProgramArgsWin[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_VM_ARGS)) {
+					break;
+				case P_VM_ARGS:
 					parentArgs = fVMArgs;
 					fVMArgs[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_VM_ARGS_LIN)) {
+					break;
+				case P_VM_ARGS_LIN:
 					parentArgs = fVMArgsLin;
 					fVMArgsLin[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_VM_ARGS_MAC)) {
+					break;
+				case P_VM_ARGS_MAC:
 					parentArgs = fVMArgsMac;
 					fVMArgsMac[L_ARGS_ARCH_ALL] = getText(child).trim();
-				} else if (child.getNodeName().equals(P_VM_ARGS_WIN)) {
+					break;
+				case P_VM_ARGS_WIN:
 					parentArgs = fVMArgsWin;
 					fVMArgsWin[L_ARGS_ARCH_ALL] = getText(child).trim();
+					break;
+				default:
+					break;
 				}
 				// Look for child nodes which would be arch specific.
 				NodeList childNodes = child.getChildNodes();
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java
index 58dab72..e486d3d 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/JREInfo.java
@@ -104,18 +104,25 @@
 			if (child.getNodeType() == Node.ELEMENT_NODE) {
 				Node includeNode = child.getAttributes().getNamedItem("include"); //$NON-NLS-1$
 				boolean include = includeNode != null ? Boolean.parseBoolean(includeNode.getNodeValue()) : true;
-				if (child.getNodeName().equals(JRE_LIN)) {
+				switch (child.getNodeName()) {
+				case JRE_LIN:
 					fJVMLin = getPath(child);
 					bIncludeLin = include;
-				} else if (child.getNodeName().equals(JRE_MAC)) {
+					break;
+				case JRE_MAC:
 					fJVMMac = getPath(child);
 					bIncludeMac = include;
-				} else if (child.getNodeName().equals(JRE_SOL)) {
+					break;
+				case JRE_SOL:
 					fJVMSol = getPath(child);
 					bIncludeSol = include;
-				} else if (child.getNodeName().equals(JRE_WIN)) {
+					break;
+				case JRE_WIN:
 					fJVMWin = getPath(child);
 					bIncludeWin = include;
+					break;
+				default:
+					break;
 				}
 			}
 		}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java
index cbc771c..3382f97 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/LauncherInfo.java
@@ -88,12 +88,18 @@
 				Node child = children.item(i);
 				if (child.getNodeType() == Node.ELEMENT_NODE) {
 					String name = child.getNodeName();
-					if (name.equals("linux")) { //$NON-NLS-1$
+					switch (name) {
+					case "linux": //$NON-NLS-1$
 						parseLinux((Element) child);
-					} else if (name.equals("macosx")) { //$NON-NLS-1$
+						break;
+					case "macosx": //$NON-NLS-1$
 						parseMac((Element) child);
-					} else if (name.equals("win")) { //$NON-NLS-1$
+						break;
+					case "win": //$NON-NLS-1$
 						parseWin((Element) child);
+						break;
+					default:
+						break;
 					}
 				}
 			}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java
index abf8616..d8abeb0 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/product/Product.java
@@ -356,47 +356,65 @@
 				Node child = children.item(i);
 				if (child.getNodeType() == Node.ELEMENT_NODE) {
 					String name = child.getNodeName();
-					if (name.equals("aboutInfo")) { //$NON-NLS-1$
+					switch (name) {
+						case "aboutInfo": //$NON-NLS-1$
 						fAboutInfo = factory.createAboutInfo();
 						fAboutInfo.parse(child);
-					} else if (name.equals("plugins")) { //$NON-NLS-1$
+						break;
+					case "plugins": //$NON-NLS-1$
 						parsePlugins(child.getChildNodes());
-					} else if (name.equals("features")) { //$NON-NLS-1$
+						break;
+					case "features": //$NON-NLS-1$
 						parseFeatures(child.getChildNodes());
-					} else if (name.equals("configurations")) { //$NON-NLS-1$
+						break;
+					case "configurations": //$NON-NLS-1$
 						parseConfigations(child.getChildNodes());
-					} else if (name.equals("configIni")) { //$NON-NLS-1$
+						break;
+					case "configIni": //$NON-NLS-1$
 						fConfigIniInfo = factory.createConfigFileInfo();
 						fConfigIniInfo.parse(child);
-					} else if (name.equals("windowImages")) { //$NON-NLS-1$
+						break;
+					case "windowImages": //$NON-NLS-1$
 						fWindowImages = factory.createWindowImages();
 						fWindowImages.parse(child);
-					} else if (name.equals("splash")) { //$NON-NLS-1$
+						break;
+					case "splash": //$NON-NLS-1$
 						fSplashInfo = factory.createSplashInfo();
 						fSplashInfo.parse(child);
-					} else if (name.equals("launcher")) { //$NON-NLS-1$
+						break;
+					case "launcher": //$NON-NLS-1$
 						fLauncherInfo = factory.createLauncherInfo();
 						fLauncherInfo.parse(child);
-					} else if (name.equals("launcherArgs")) { //$NON-NLS-1$
+						break;
+					case "launcherArgs": //$NON-NLS-1$
 						fLauncherArgs = factory.createLauncherArguments();
 						fLauncherArgs.parse(child);
-					} else if (name.equals("intro")) { //$NON-NLS-1$
+						break;
+					case "intro": //$NON-NLS-1$
 						fIntroInfo = factory.createIntroInfo();
 						fIntroInfo.parse(child);
-					} else if (name.equals("vm")) { //$NON-NLS-1$
+						break;
+					case "vm": //$NON-NLS-1$
 						fJVMInfo = factory.createJVMInfo();
 						fJVMInfo.parse(child);
-					} else if (name.equals("license")) { //$NON-NLS-1$
+						break;
+					case "license": //$NON-NLS-1$
 						fLicenseInfo = factory.createLicenseInfo();
 						fLicenseInfo.parse(child);
-					} else if (name.equals("repositories")) { //$NON-NLS-1$
+						break;
+					case "repositories": //$NON-NLS-1$
 						parseRepositories(child.getChildNodes());
-					} else if (name.equals("preferencesInfo")) { //$NON-NLS-1$
+						break;
+					case "preferencesInfo": //$NON-NLS-1$
 						fPreferencesInfo = factory.createPreferencesInfo();
 						fPreferencesInfo.parse(child);
-					} else if (name.equals("cssInfo")) { //$NON-NLS-1$
+						break;
+					case "cssInfo": //$NON-NLS-1$
 						fCSSInfo = factory.createCSSInfo();
 						fCSSInfo.parse(child);
+						break;
+					default:
+						break;
 					}
 				}
 			}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema/Schema.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema/Schema.java
index 555d45a..2e98667 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema/Schema.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema/Schema.java
@@ -477,12 +477,18 @@
 		//attribute.bindSourceLocation(elementNode, lineTable);
 		if (ause != null) {
 			int use = ISchemaAttribute.OPTIONAL;
-			if (ause.equals("required")) { //$NON-NLS-1$
+			switch (ause) {
+				case "required": //$NON-NLS-1$
 				use = ISchemaAttribute.REQUIRED;
-			} else if (ause.equals("optional")) { //$NON-NLS-1$
+				break;
+			case "optional": //$NON-NLS-1$
 				use = ISchemaAttribute.OPTIONAL;
-			} else if (ause.equals("default")) { //$NON-NLS-1$
+				break;
+			case "default": //$NON-NLS-1$
 				use = ISchemaAttribute.DEFAULT;
+				break;
+			default:
+				break;
 			}
 			attribute.setUse(use);
 		}
@@ -1026,7 +1032,8 @@
 			Node child = children.item(i);
 			if (child.getNodeType() == Node.ELEMENT_NODE) {
 				String nodeName = child.getNodeName().toLowerCase(Locale.ENGLISH);
-				if (nodeName.equals("element")) { //$NON-NLS-1$
+				switch (nodeName) {
+					case "element": //$NON-NLS-1$
 					ISchemaElement element = processElement(this, child);
 					if (element == null) {
 						fValid = false;
@@ -1040,10 +1047,15 @@
 						}
 					}
 					fElements.add(element);
-				} else if (nodeName.equals("annotation")) { //$NON-NLS-1$
+					break;
+				case "annotation": //$NON-NLS-1$
 					processSchemaAnnotation(child);
-				} else if (nodeName.equals("include")) { //$NON-NLS-1$
+					break;
+				case "include": //$NON-NLS-1$
 					processInclude(child);
+					break;
+				default:
+					break;
 				}
 			}
 		}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/Site.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/Site.java
index 0711744..c19369e 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/Site.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/Site.java
@@ -311,43 +311,53 @@
 
 	protected void parseChild(Node child) {
 		String tag = child.getNodeName().toLowerCase(Locale.ENGLISH);
-		if (tag.equals("feature")) { //$NON-NLS-1$
+		switch (tag) {
+			case "feature": //$NON-NLS-1$
 			ISiteFeature feature = getModel().getFactory().createFeature();
 			((SiteFeature) feature).parse(child);
 			((SiteFeature) feature).setInTheModel(true);
 			features.add(feature);
-		} else if (tag.equals("bundle")) { //$NON-NLS-1$
+			break;
+		case "bundle": //$NON-NLS-1$
 			ISiteBundle bundle = getModel().getFactory().createBundle();
 			((SiteBundle) bundle).parse(child);
 			((SiteBundle) bundle).setInTheModel(true);
 			bundles.add(bundle);
-		} else if (tag.equals("archive")) { //$NON-NLS-1$
+			break;
+		case "archive": //$NON-NLS-1$
 			ISiteArchive archive = getModel().getFactory().createArchive();
 			((SiteArchive) archive).parse(child);
 			((SiteArchive) archive).setInTheModel(true);
 			archives.add(archive);
-		} else if (tag.equals("category-def")) { //$NON-NLS-1$
+			break;
+		case "category-def": //$NON-NLS-1$
 			ISiteCategoryDefinition def = getModel().getFactory().createCategoryDefinition();
 			((SiteCategoryDefinition) def).parse(child);
 			((SiteCategoryDefinition) def).setInTheModel(true);
 			categoryDefs.add(def);
-		} else if (tag.equals("repository-reference")) { //$NON-NLS-1$
+			break;
+		case "repository-reference": //$NON-NLS-1$
 			IRepositoryReference ref = getModel().getFactory().createRepositoryReference();
 			((RepositoryReference) ref).parse(child);
 			((RepositoryReference) ref).setInTheModel(true);
 			repositoryReferences.add(ref);
-		} else if (tag.equals("stats")) { //$NON-NLS-1$
+			break;
+		case "stats": //$NON-NLS-1$
 			IStatsInfo info = getModel().getFactory().createStatsInfo();
 			((StatsInfo) info).parse(child);
 			((StatsInfo) info).setInTheModel(true);
 			statsInfo = info;
-		} else if (tag.equals(P_DESCRIPTION)) {
+			break;
+		case P_DESCRIPTION:
 			if (description != null) {
 				return;
 			}
 			description = getModel().getFactory().createDescription(this);
 			((SiteDescription) description).parse(child);
 			((SiteDescription) description).setInTheModel(true);
+			break;
+		default:
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteArchive.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteArchive.java
index 9e9fed3..4e1d94b 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteArchive.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteArchive.java
@@ -83,12 +83,16 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_PATH)) {
+		switch (name) {
+		case P_PATH:
 			setPath(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_URL)) {
+			break;
+		case P_URL:
 			setURL(newValue != null ? newValue.toString() : null);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteDescription.java
index fce7096..f8356f7 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteDescription.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteDescription.java
@@ -90,14 +90,19 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_NAME)) {
+		switch (name) {
+		case P_NAME:
 			setName(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_URL)) {
+			break;
+		case P_URL:
 			setURL(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_TEXT)) {
+			break;
+		case P_TEXT:
 			setText(newValue != null ? newValue.toString() : null);
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteFeature.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteFeature.java
index 9aea077..391ad38 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteFeature.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/site/SiteFeature.java
@@ -140,22 +140,31 @@
 
 	@Override
 	public void restoreProperty(String name, Object oldValue, Object newValue) throws CoreException {
-		if (name.equals(P_TYPE)) {
+		switch (name) {
+		case P_TYPE:
 			setType(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_URL)) {
+			break;
+		case P_URL:
 			setURL(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_ARCH)) {
+			break;
+		case P_ARCH:
 			setArch(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_NL)) {
+			break;
+		case P_NL:
 			setNL(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_OS)) {
+			break;
+		case P_OS:
 			setOS(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_WS)) {
+			break;
+		case P_WS:
 			setWS(newValue != null ? newValue.toString() : null);
-		} else if (name.equals(P_PATCH)) {
+			break;
+		case P_PATCH:
 			setIsPatch(((Boolean) newValue).booleanValue());
-		} else {
+			break;
+		default:
 			super.restoreProperty(name, oldValue, newValue);
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java
index a8f0926..c59be51 100755
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.java
@@ -53,7 +53,6 @@
 	public static String LocalTargetHandle_5;
 	public static String P2TargetUtils_ProvisioningSourceTask;
 	public static String ProfileBundleContainer_0;
-	public static String ProfileBundleContainer_1;
 	public static String ProfileBundleContainer_2;
 	public static String TargetBundle_ErrorReadingManifest;
 	public static String TargetDefinition_0;
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties
index ad24cd0..282984f 100755
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/Messages.properties
@@ -45,7 +45,6 @@
 LocalTargetHandle_5=Error creating target file
 P2TargetUtils_ProvisioningSourceTask=Provisioning source bundles
 ProfileBundleContainer_0=Installation directory does not exist: {0}
-ProfileBundleContainer_1=Unable resolve configuration area in {0}
 ProfileBundleContainer_2=Configuration directory does not exist: {0}
 TargetBundle_ErrorReadingManifest=Error reading manifest for {0}
 TargetDefinition_0=Error reading target definition
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 fb654f4..901b8f8 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
@@ -20,10 +20,7 @@
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
-import java.net.MalformedURLException;
 import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -121,23 +118,19 @@
 			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.ProfileBundleContainer_0, home)));
 		}
 
-		URL configUrl = getConfigurationArea();
-		if (configUrl != null) {
-			if (!new File(configUrl.getFile()).isDirectory()) {
+		File configurationArea = getConfigurationArea();
+		if (configurationArea != null) {
+			if (!configurationArea.isDirectory()) {
 				throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.ProfileBundleContainer_2, home)));
 			}
 		}
 
-		BundleInfo[] infos = P2Utils.readBundles(home, configUrl);
+		BundleInfo[] infos = P2Utils.readBundles(home, configurationArea);
 		if (infos == null) {
-			if (configUrl != null) {
-				try {
-					Collection<TargetBundle> osgiBundles = readBundleInfosFromConfigIni(configUrl.toURI());
-					if (!osgiBundles.isEmpty()) {
-						return osgiBundles.toArray(new TargetBundle[0]);
-					}
-				} catch (URISyntaxException ex) {
-					throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, ex.getMessage(), ex));
+			if (configurationArea != null) {
+				Collection<TargetBundle> osgiBundles = readBundleInfosFromConfigIni(configurationArea, new File(home));
+				if (!osgiBundles.isEmpty()) {
+					return osgiBundles.toArray(new TargetBundle[0]);
 				}
 			}
 			DirectoryBundleContainer directoryBundleContainer = new DirectoryBundleContainer(home);
@@ -153,7 +146,7 @@
 			return new TargetBundle[0];
 		}
 
-		BundleInfo[] source = P2Utils.readSourceBundles(home, configUrl);
+		BundleInfo[] source = P2Utils.readSourceBundles(home, configurationArea);
 		if (source == null) {
 			source = new BundleInfo[0];
 		}
@@ -174,9 +167,8 @@
 		}).filter(Objects::nonNull).toArray(TargetBundle[]::new);
 	}
 
-	private Collection<TargetBundle> readBundleInfosFromConfigIni(URI configArea) {
-		File configIni = new File(configArea);
-		configIni = new File(configIni, CONFIG_INI);
+	private Collection<TargetBundle> readBundleInfosFromConfigIni(File configArea, File home) {
+		File configIni = new File(configArea, CONFIG_INI);
 		if (!configIni.isFile()) {
 			return emptyList();
 		}
@@ -188,7 +180,7 @@
 			return emptyList();
 		}
 
-		List<File> bundleFiles = parseBundlesFromConfigIni(configProps);
+		List<File> bundleFiles = parseBundlesFromConfigIni(configProps, home);
 		ArrayList<TargetBundle> bundles = new ArrayList<>();
 		for (File file : bundleFiles) {
 			if (!file.exists()) {
@@ -205,7 +197,7 @@
 		return bundles;
 	}
 
-	public static List<File> parseBundlesFromConfigIni(Properties configProps) {
+	public static List<File> parseBundlesFromConfigIni(Properties configProps, File home) {
 		String osgiBundles = configProps.getProperty("osgi.bundles"); //$NON-NLS-1$
 		if (osgiBundles == null || osgiBundles.isEmpty()) {
 			return emptyList();
@@ -217,6 +209,9 @@
 		String osgiFramework = configProps.getProperty("osgi.framework"); //$NON-NLS-1$
 		if (osgiFramework != null) {
 			File frameworkBundle = parseBundleLocation(osgiFramework);
+			if (!frameworkBundle.isAbsolute()) {
+				frameworkBundle = new File(home, frameworkBundle.getPath());
+			}
 			bundles.add(frameworkBundle);
 			baseDir = frameworkBundle.getParentFile();
 		}
@@ -273,7 +268,7 @@
 	 * @return configuration area URL or <code>null</code>
 	 * @throws CoreException if unable to generate a URL or the user specified location does not exist
 	 */
-	private URL getConfigurationArea() throws CoreException {
+	private File getConfigurationArea() throws CoreException {
 		IPath home = resolveHomeLocation();
 		IPath configuration = null;
 		if (fConfiguration == null) {
@@ -283,11 +278,7 @@
 		}
 		File file = configuration.toFile();
 		if (file.exists()) {
-			try {
-				return file.toURL();
-			} catch (MalformedURLException e) {
-				throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.ProfileBundleContainer_1, home.toOSString()), e));
-			}
+			return file;
 		} else if (fConfiguration != null) {
 			// If the user specified config area does not exist throw an error
 			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.ProfileBundleContainer_2, configuration.toOSString())));
@@ -330,11 +321,8 @@
 		if (!new File(home).isDirectory()) {
 			throw new CoreException(new Status(IStatus.ERROR, PDECore.PLUGIN_ID, NLS.bind(Messages.ProfileBundleContainer_0, home)));
 		}
-		File configArea = null;
-		URL configURL = getConfigurationArea();
-		if (configURL != null) {
-			configArea = new File(configURL.getFile());
-		} else {
+		File configArea = getConfigurationArea();
+		if (configArea == null) {
 			configArea = new File(home);
 		}
 		if (!configArea.isDirectory()) {
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
index a2f3ba9..b8a13a1 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
@@ -1291,13 +1291,18 @@
 					&& node.getNodeName().equalsIgnoreCase(TargetDefinitionPersistenceHelper.LOCATION)) {
 				Element element = (Element) node;
 				String type = (element).getAttribute(TargetDefinitionPersistenceHelper.ATTR_LOCATION_TYPE);
-				if (type.equals(IUBundleContainer.TYPE)) {
+				switch (type) {
+				case IUBundleContainer.TYPE:
 					oldIUContainers.add(element);
-				} else if (type.equals(DirectoryBundleContainer.TYPE) || type.equals(FeatureBundleContainer.TYPE)
-						|| type.equals(ProfileBundleContainer.TYPE)) {
+					break;
+				case DirectoryBundleContainer.TYPE:
+				case FeatureBundleContainer.TYPE:
+				case ProfileBundleContainer.TYPE:
 					oldContainers.add(element);
-				} else {
+					break;
+				default:
 					oldGenericContainers.add(element);
+					break;
 				}
 			}
 		}
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java
index 85419a0..27f5809 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetPersistence35Helper.java
@@ -191,15 +191,21 @@
 			}
 		}
 		ITargetLocation container = null;
-		if (DirectoryBundleContainer.TYPE.equals(type)) {
+		switch (type) {
+		case DirectoryBundleContainer.TYPE:
 			container = TargetDefinitionPersistenceHelper.getTargetPlatformService().newDirectoryLocation(path);
-		} else if (ProfileBundleContainer.TYPE.equals(type)) {
+			break;
+		case ProfileBundleContainer.TYPE:
 			String configArea = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_CONFIGURATION);
 			container = TargetDefinitionPersistenceHelper.getTargetPlatformService().newProfileLocation(path, configArea.length() > 0 ? configArea : null);
-		} else if (FeatureBundleContainer.TYPE.equals(type)) {
-			String version = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_VERSION);
-			container = TargetDefinitionPersistenceHelper.getTargetPlatformService().newFeatureLocation(path, location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_ID), version.length() > 0 ? version : null);
-		} else if (IUBundleContainer.TYPE.equals(type)) {
+			break;
+		case FeatureBundleContainer.TYPE:
+			String featureversion = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_VERSION);
+			container = TargetDefinitionPersistenceHelper.getTargetPlatformService().newFeatureLocation(path,
+					location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_ID),
+					featureversion.length() > 0 ? featureversion : null);
+			break;
+		case IUBundleContainer.TYPE:
 			String includeMode = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_INCLUDE_MODE);
 			String includeAllPlatforms = location.getAttribute(TargetDefinitionPersistenceHelper.ATTR_INCLUDE_ALL_PLATFORMS);
 			NodeList list = location.getChildNodes();
@@ -243,6 +249,9 @@
 			}
 			flags |= Boolean.parseBoolean(includeAllPlatforms) ? IUBundleContainer.INCLUDE_ALL_ENVIRONMENTS : 0;
 			container = new IUBundleContainer(iuIDs, iuVer, uris, flags);
+			break;
+		default:
+			break;
 		}
 
 		List<NameVersionDescriptor> includedBundles = null;
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator/XMLPrintHandler.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator/XMLPrintHandler.java
index a45176b..ae9712d 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator/XMLPrintHandler.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator/XMLPrintHandler.java
@@ -110,8 +110,8 @@
 
 	}
 
-	public static StringBuffer encode(String value) {
-		StringBuffer buf = new StringBuffer();
+	public static StringBuilder encode(String value) {
+		StringBuilder buf = new StringBuilder();
 		for (int i = 0; i < value.length(); i++) {
 			char c = value.charAt(i);
 			switch (c)
diff --git a/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java b/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java
index f9cd8d5..1394bb5 100644
--- a/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java
+++ b/ui/org.eclipse.pde.core/src_ant/org/eclipse/pde/internal/core/ant/ConvertSchemaToHTML.java
@@ -265,11 +265,14 @@
 
 		ExternalPluginModelBase model = null;
 		try {
-			if (file.getName().toLowerCase(Locale.ENGLISH).equals(ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR)) {
+			switch (file.getName().toLowerCase(Locale.ENGLISH)) {
+			case ICoreConstants.FRAGMENT_FILENAME_DESCRIPTOR:
 				model = new ExternalFragmentModel();
-			} else if (file.getName().toLowerCase(Locale.ENGLISH).equals(ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR)) {
+				break;
+			case ICoreConstants.PLUGIN_FILENAME_DESCRIPTOR:
 				model = new ExternalPluginModel();
-			} else {
+				break;
+			default:
 				stream.close();
 				throw new BuildException(NLS.bind(PDECoreMessages.Builders_Convert_illegalValue, "manifest")); //$NON-NLS-1$
 			}
diff --git a/ui/org.eclipse.pde.genericeditor.extension.tests/pom.xml b/ui/org.eclipse.pde.genericeditor.extension.tests/pom.xml
index f4f241a..afc7356 100644
--- a/ui/org.eclipse.pde.genericeditor.extension.tests/pom.xml
+++ b/ui/org.eclipse.pde.genericeditor.extension.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF
index 948c5d9..24c144b 100644
--- a/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.genericeditor.extension/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde.genericeditor.extension;singleton:=true
-Bundle-Version: 1.1.0.qualifier
+Bundle-Version: 1.1.100.qualifier
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.jface.text,
diff --git a/ui/org.eclipse.pde.genericeditor.extension/pom.xml b/ui/org.eclipse.pde.genericeditor.extension/pom.xml
index 5f7692f..ca476e1 100644
--- a/ui/org.eclipse.pde.genericeditor.extension/pom.xml
+++ b/ui/org.eclipse.pde.genericeditor.extension/pom.xml
@@ -14,11 +14,11 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde.ui</groupId>
   <artifactId>org.eclipse.pde.genericeditor.extension</artifactId>
-  <version>1.1.0-SNAPSHOT</version>
+  <version>1.1.100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java
index 524e149..5dbcefd 100644
--- a/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java
+++ b/ui/org.eclipse.pde.genericeditor.extension/src/org/eclipse/pde/internal/genericeditor/target/extension/autocomplete/processors/AttributeValueCompletionProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2018 Red Hat Inc. and others
+ * Copyright (c) 2018, 2020 Red Hat Inc. and others
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -107,7 +107,9 @@
 						versions = unit.getAvailableVersions();
 					}
 				}
-				return convertToVersionProposals(versions);
+				if (versions != null)
+					return convertToVersionProposals(versions);
+
 			}
 
 		}
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 244893f..bd2e84a 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,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: PDE JUnit Runtime Tests
 Bundle-SymbolicName: org.eclipse.pde.junit.runtime.tests;singleton:=true
-Bundle-Version: 3.6.100.qualifier
+Bundle-Version: 3.6.200.qualifier
 Automatic-Module-Name: org.eclipse.pde.junit.runtime.tests
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Vendor: Eclipse.org
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/pom.xml b/ui/org.eclipse.pde.junit.runtime.tests/pom.xml
index bf30ce2..173cbbc 100644
--- a/ui/org.eclipse.pde.junit.runtime.tests/pom.xml
+++ b/ui/org.eclipse.pde.junit.runtime.tests/pom.xml
@@ -20,12 +20,12 @@
 	<parent>
 		<artifactId>tests-pom</artifactId>
 		<groupId>eclipse.pde.ui</groupId>
-		<version>4.18.0-SNAPSHOT</version>
+		<version>4.19.0-SNAPSHOT</version>
 		<relativePath>../../tests-pom/</relativePath>
 	</parent>
 	<groupId>org.eclipse.pde</groupId>
 	<artifactId>org.eclipse.pde.junit.runtime.tests</artifactId>
-	<version>3.6.100-SNAPSHOT</version>
+	<version>3.6.200-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 9af4bf7..8c13bd8 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
@@ -79,12 +79,15 @@
 
 	@Parameters(name = "{0}")
 	public static Collection<TestInput> parameters() {
-		return Arrays.asList(new TestInput("JUnit5", "verification.tests.junit5"),
+		return Arrays.asList(
+				new TestInput("JUnit5", "verification.tests.junit5"),
 				new TestInput("JUnit5 Fragment", "verification.tests.junit5.fragment"),
 				new TestInput("JUnit4", "verification.tests.junit4"),
 				new TestInput("JUnit4 Fragment", "verification.tests.junit4.fragment"),
 				new TestInput("JUnit4 (JUnitPlatform)", "verification.tests.junit4.platform"),
-				new TestInput("JUnit4 (JUnitPlatform) Fragment", "verification.tests.junit4.platform.fragment"));
+				new TestInput("JUnit4 (JUnitPlatform) Fragment", "verification.tests.junit4.platform.fragment"),
+				new TestInput("Java 11 bundle with module limit", "verification.tests.limitmodules")
+				);
 	}
 
 	@Test
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.classpath b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.classpath
new file mode 100644
index 0000000..573ac8c
--- /dev/null
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.classpath
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+			<attribute name="limit-modules" value="java.base"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.project
similarity index 67%
copy from apitools/org.eclipse.pde.api.tools.ee.javase16/.project
copy to ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.project
index 225c21d..a4b9c8e 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.project
@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase16</name>
+	<name>verification.tests.limitmodules</name>
 	<comment></comment>
 	<projects>
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.pde.ManifestBuilder</name>
 			<arguments>
 			</arguments>
@@ -18,5 +23,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c9545f0
--- /dev/null
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..e82ba5c
--- /dev/null
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/META-INF/MANIFEST.MF
@@ -0,0 +1,9 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: verification.tests.limitmodules
+Bundle-SymbolicName: verification.tests.limitmodules
+Bundle-Version: 1.0.0.qualifier
+Automatic-Module-Name: TestLimitModules
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Require-Bundle: org.junit;bundle-version="4.12.0"
+Export-Package: verification.tests.limitmodules
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/build.properties b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/src/verification/tests/limitmodules/Test1.java b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/src/verification/tests/limitmodules/Test1.java
new file mode 100644
index 0000000..57ed682
--- /dev/null
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/src/verification/tests/limitmodules/Test1.java
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ *  Copyright (c) 2019 Julian Honnen
+ *
+ *  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:
+ *     Julian Honnen <julian.honnen@vector.com> - initial API and implementation
+ *******************************************************************************/
+package verification.tests.limitmodules;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class Test1 {
+
+	@Test
+	public void test1() {
+		try {
+			Thread.currentThread().getContextClassLoader().loadClass("doesnt.exist");
+			Assert.fail("ClassNotFoundException expected");
+		} catch (ClassNotFoundException e) {
+			// expected
+		}
+	}
+
+	@Test
+	public void test2() {
+
+	}
+
+}
diff --git a/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/src/verification/tests/limitmodules/Test2.java b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/src/verification/tests/limitmodules/Test2.java
new file mode 100644
index 0000000..b5b4d4f
--- /dev/null
+++ b/ui/org.eclipse.pde.junit.runtime.tests/test-bundles/verification.tests.limitmodules/src/verification/tests/limitmodules/Test2.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ *  Copyright (c) 2019 Julian Honnen
+ *
+ *  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:
+ *     Julian Honnen <julian.honnen@vector.com> - initial API and implementation
+ *******************************************************************************/
+package verification.tests.limitmodules;
+
+import org.junit.Test;
+
+public class Test2 {
+
+	@Test
+	public void test() {
+
+	}
+
+}
diff --git a/ui/org.eclipse.pde.junit.runtime/pom.xml b/ui/org.eclipse.pde.junit.runtime/pom.xml
index be497f9..c46ce06 100644
--- a/ui/org.eclipse.pde.junit.runtime/pom.xml
+++ b/ui/org.eclipse.pde.junit.runtime/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ui/org.eclipse.pde.launching/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.launching/META-INF/MANIFEST.MF
index 23aa6fc..43cd273 100644
--- a/ui/org.eclipse.pde.launching/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.launching/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.launching;singleton:=true
-Bundle-Version: 3.9.100.qualifier
+Bundle-Version: 3.9.200.qualifier
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Vendor: %provider-name
 Require-Bundle: org.eclipse.jdt.junit.core;bundle-version="[3.6.0,4.0.0)",
diff --git a/ui/org.eclipse.pde.launching/pom.xml b/ui/org.eclipse.pde.launching/pom.xml
index 174211c..bb84475 100644
--- a/ui/org.eclipse.pde.launching/pom.xml
+++ b/ui/org.eclipse.pde.launching/pom.xml
@@ -14,12 +14,12 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.launching</artifactId>
-  <version>3.9.100-SNAPSHOT</version>
+  <version>3.9.200-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
   <properties>
     <code.ignoredWarnings>-warn:-deprecation,unavoidableGenericProblems</code.ignoredWarnings>
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PDELaunchingPlugin.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PDELaunchingPlugin.java
index db63161..b5c33eb 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PDELaunchingPlugin.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/PDELaunchingPlugin.java
@@ -72,10 +72,6 @@
 		ResourcesPlugin.getPlugin().getLog().log(status);
 	}
 
-	public static void logErrorMessage(String message) {
-		log(new Status(IStatus.ERROR, getPluginId(), IStatus.ERROR, message, null));
-	}
-
 	public static void log(Throwable e) {
 		if (e instanceof InvocationTargetException)
 			e = ((InvocationTargetException) e).getTargetException();
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 63ec025..d650f2c 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
@@ -93,6 +93,12 @@
 	}
 
 	@Override
+	public String getModuleCLIOptions(ILaunchConfiguration configuration) throws CoreException {
+		// The JVM options should be specified in target platform, see getVMArguments()
+		return ""; //$NON-NLS-1$ 
+	}
+
+	@Override
 	protected void collectExecutionArguments(ILaunchConfiguration configuration, List<String> vmArguments, List<String> programArgs) throws CoreException {
 		super.collectExecutionArguments(configuration, vmArguments, programArgs);
 
diff --git a/ui/org.eclipse.pde.runtime/.classpath b/ui/org.eclipse.pde.runtime/.classpath
index 4f83b23..e801ebf 100644
--- a/ui/org.eclipse.pde.runtime/.classpath
+++ b/ui/org.eclipse.pde.runtime/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs
index 6003122..04c1ad9 100644
--- a/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs
+++ b/ui/org.eclipse.pde.runtime/.settings/org.eclipse.jdt.core.prefs
@@ -9,9 +9,9 @@
 org.eclipse.jdt.core.classpath.multipleOutputLocations=enabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -27,6 +27,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -75,6 +76,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
@@ -104,8 +106,10 @@
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=error
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -113,17 +117,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
@@ -209,11 +216,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -244,6 +252,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
 org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -268,13 +278,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -322,6 +336,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -358,9 +374,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -386,8 +405,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/ui/org.eclipse.pde.runtime/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.runtime/META-INF/MANIFEST.MF
index cd6055b..c7bd38d 100644
--- a/ui/org.eclipse.pde.runtime/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.runtime/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %name
 Bundle-SymbolicName: org.eclipse.pde.runtime; singleton:=true
-Bundle-Version: 3.6.900.qualifier
+Bundle-Version: 3.7.0.qualifier
 Bundle-Activator: org.eclipse.pde.internal.runtime.PDERuntimePlugin
 Bundle-Vendor: %provider-name
 Bundle-Localization: plugin
@@ -22,6 +22,6 @@
  org.eclipse.pde.internal.runtime.spy.dialogs;x-internal:=true,
  org.eclipse.pde.internal.runtime.spy.handlers;x-internal:=true,
  org.eclipse.pde.internal.runtime.spy.sections;x-internal:=true
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.pde.runtime
diff --git a/ui/org.eclipse.pde.runtime/pom.xml b/ui/org.eclipse.pde.runtime/pom.xml
index f90b21f..ac4544a 100644
--- a/ui/org.eclipse.pde.runtime/pom.xml
+++ b/ui/org.eclipse.pde.runtime/pom.xml
@@ -15,12 +15,12 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.runtime</artifactId>
-  <version>3.6.900-SNAPSHOT</version>
+  <version>3.7.0-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <properties>
diff --git a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserModelChangeListener.java b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserModelChangeListener.java
index 223fc0a..6a6d898 100644
--- a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserModelChangeListener.java
+++ b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/RegistryBrowserModelChangeListener.java
@@ -56,7 +56,8 @@
 	 * @return if returns array, then appears under all top level elements of that array
 	 */
 	private Object getTopLevelElement(Object object) {
-		if (fRegistryBrowser.getGroupBy() == RegistryBrowser.BUNDLES) {
+		switch (fRegistryBrowser.getGroupBy()) {
+		case RegistryBrowser.BUNDLES:
 			if (object instanceof Bundle) {
 				return object;
 			} else if (object instanceof ExtensionPoint) {
@@ -79,20 +80,25 @@
 
 				return result;
 			}
-		} else if (fRegistryBrowser.getGroupBy() == RegistryBrowser.EXTENSION_REGISTRY) {
+			break;
+		case RegistryBrowser.EXTENSION_REGISTRY:
 			if (object instanceof ExtensionPoint) {
 				return object;
 			} else if (object instanceof Extension) {
 				Extension ext = (Extension) object;
 				return ext.getExtensionPoint();
 			}
-		} else if (fRegistryBrowser.getGroupBy() == RegistryBrowser.SERVICES) {
+			break;
+		case RegistryBrowser.SERVICES:
 			if (object instanceof ServiceRegistration) {
 				ServiceRegistration service = (ServiceRegistration) object;
 				return service.getName();
 			} else if (object instanceof Bundle) {
 				return ((Bundle) object).getServicesInUse();
 			}
+			break;
+		default:
+			break;
 		}
 
 		return null;
diff --git a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java
index 9e1163b..208e18d 100644
--- a/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java
+++ b/ui/org.eclipse.pde.runtime/src/org/eclipse/pde/internal/runtime/registry/model/LocalRegistryBackend.java
@@ -378,9 +378,7 @@
 			IConfigurationElement child = children[i];
 			result[i] = createConfigurationElement(child);
 		}
-		for (int i = 0; i < catts.length; i++) {
-			result[children.length + i] = catts[i];
-		}
+		System.arraycopy(catts, 0, result, children.length, catts.length);
 		return result;
 	}
 
diff --git a/ui/org.eclipse.pde.ui.templates.tests/pom.xml b/ui/org.eclipse.pde.ui.templates.tests/pom.xml
index 7e1674e..040dd4c 100644
--- a/ui/org.eclipse.pde.ui.templates.tests/pom.xml
+++ b/ui/org.eclipse.pde.ui.templates.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
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 6d3af1e..8265150 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.7.100.qualifier
+Bundle-Version: 3.7.200.qualifier
 Bundle-Vendor: %bundleVendor
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.pde.internal.ui.templates;x-internal:=true,
diff --git a/ui/org.eclipse.pde.ui.templates/plugin.properties b/ui/org.eclipse.pde.ui.templates/plugin.properties
index 3e92597..2a664a8 100644
--- a/ui/org.eclipse.pde.ui.templates/plugin.properties
+++ b/ui/org.eclipse.pde.ui.templates/plugin.properties
@@ -345,7 +345,7 @@
 <li>org.osgi.framework</li>\
 <li>org.osgi.service.event</li>
 
-pluginContent.e4RCP.name = Eclipse 4 RCP application
+pluginContent.e4RCP.name = Eclipse RCP application
 pluginContent.e4RCP.description=\
 <p>This wizard creates a standalone Eclipse RCP application using the the latest Eclipse API. </p>\
 <p><b>Extensions Used</b></p>\
diff --git a/ui/org.eclipse.pde.ui.templates/pom.xml b/ui/org.eclipse.pde.ui.templates/pom.xml
index 64ff9c6..9627529 100644
--- a/ui/org.eclipse.pde.ui.templates/pom.xml
+++ b/ui/org.eclipse.pde.ui.templates/pom.xml
@@ -14,11 +14,11 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde.ui.templates</artifactId>
-  <version>3.7.100-SNAPSHOT</version>
+  <version>3.7.200-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/e4/E4ApplicationTemplate.java b/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/e4/E4ApplicationTemplate.java
index 17d2769..059e6b0 100644
--- a/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/e4/E4ApplicationTemplate.java
+++ b/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/e4/E4ApplicationTemplate.java
@@ -62,7 +62,8 @@
 
 	/* Create options expected in the page */
 	private void createOptions() {
-		addOption(KEY_WINDOW_TITLE, PDETemplateMessages.E4ApplicationTemplate_windowTitle, "Eclipse 4 RCP Application", 0); //$NON-NLS-1$
+		addOption(KEY_WINDOW_TITLE, PDETemplateMessages.E4ApplicationTemplate_windowTitle, "Eclipse RCP Application", //$NON-NLS-1$
+				0);
 		addOption(KEY_CREATE_SAMPLE_CONTENT, PDETemplateMessages.E4ApplicationTemplate_createSampleContent, false, 0);
 		addOption(KEY_PACKAGE_NAME, PDETemplateMessages.E4ApplicationTemplate_packageName, (String) null, 0);
 		addOption(KEY_CREATE_LIFE_CYCLE, PDETemplateMessages.E4ApplicationTemplate_createLifeCycle, false, 0);
diff --git a/ui/org.eclipse.pde.ui.tests.smartimport/pom.xml b/ui/org.eclipse.pde.ui.tests.smartimport/pom.xml
index 14944f7..63ffac4 100644
--- a/ui/org.eclipse.pde.ui.tests.smartimport/pom.xml
+++ b/ui/org.eclipse.pde.ui.tests.smartimport/pom.xml
@@ -11,7 +11,7 @@
 	<parent>
 		<artifactId>tests-pom</artifactId>
 		<groupId>eclipse.pde.ui</groupId>
-		<version>4.18.0-SNAPSHOT</version>
+		<version>4.19.0-SNAPSHOT</version>
 		<relativePath>../../tests-pom/</relativePath>
 	</parent>
 	<groupId>org.eclipse.pde</groupId>
diff --git a/ui/org.eclipse.pde.ui.tests/pom.xml b/ui/org.eclipse.pde.ui.tests/pom.xml
index 98a18c0..92ec977 100644
--- a/ui/org.eclipse.pde.ui.tests/pom.xml
+++ b/ui/org.eclipse.pde.ui.tests/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>tests-pom</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../tests-pom/</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
@@ -42,6 +42,16 @@
               <artifactId>org.eclipse.osgi.compatibility.state</artifactId>
               <version>0.0.0</version>
             </dependency>
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>javax.xml</artifactId>
+              <version>0.0.0</version>
+            </dependency>
+            <dependency>
+              <type>eclipse-plugin</type>
+              <artifactId>javax.annotation</artifactId>
+              <version>0.0.0</version>
+            </dependency>
           </dependencies>
         </configuration>
       </plugin>
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/classpath/ClasspathResolutionTest.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/classpath/ClasspathResolutionTest.java
new file mode 100644
index 0000000..cd5c2e6
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/core/tests/internal/classpath/ClasspathResolutionTest.java
@@ -0,0 +1,122 @@
+/*******************************************************************************
+ * Copyright (c) 2020 Red Hat Inc.
+ *
+ * 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
+ *******************************************************************************/
+package org.eclipse.pde.core.tests.internal.classpath;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+import java.util.*;
+import org.eclipse.core.resources.*;
+import org.eclipse.core.runtime.*;
+import org.eclipse.jdt.core.*;
+import org.eclipse.pde.core.target.*;
+import org.eclipse.pde.internal.core.PDECore;
+import org.eclipse.pde.internal.core.RequiredPluginsClasspathContainer;
+import org.eclipse.pde.ui.tests.util.ProjectUtils;
+import org.junit.*;
+import org.osgi.framework.ServiceReference;
+
+public class ClasspathResolutionTest {
+
+	private ITargetPlatformService tpService;
+	private ITargetDefinition initialTarget;
+	private IProject project;
+
+	@Before
+	public void setup() throws CoreException {
+		ServiceReference<ITargetPlatformService> ref = PDECore.getDefault().getBundleContext()
+				.getServiceReference(ITargetPlatformService.class);
+		tpService = PDECore.getDefault().getBundleContext().getService(ref);
+		initialTarget = tpService.getWorkspaceTargetDefinition();
+		new LoadTargetDefinitionJob(initialTarget).runInWorkspace(new NullProgressMonitor());
+	}
+
+	@After
+	public void tearDown() throws CoreException {
+		new LoadTargetDefinitionJob(initialTarget).runInWorkspace(new NullProgressMonitor());
+		if (project != null) {
+			project.delete(false, false, null);
+			project = null;
+		}
+	}
+
+	@Test
+	public void testImportSystemPackageDoesntAddExtraBundleJava11() throws Exception {
+		loadTargetPlatform("javax.xml");
+		project = ProjectUtils.importTestProject("tests/projects/demoMissedSystemModulePackage");
+		project.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
+		IJavaProject javaProject = (IJavaProject) project.getNature(JavaCore.NATURE_ID);
+		RequiredPluginsClasspathContainer container = new RequiredPluginsClasspathContainer(
+				PDECore.getDefault().getModelManager().findModel(project));
+		for (IClasspathEntry entry : container.getClasspathEntries()) {
+			if (entry.getPath().lastSegment().contains("javax.xml")) {
+				fail(entry.getPath() + " erronesously present in container");
+			}
+		}
+		for (IClasspathEntry entry : javaProject.getResolvedClasspath(false)) {
+			if (entry.getPath().lastSegment().contains("javax.xml")) {
+				fail(entry.getPath() + " erronesously present in classpath");
+			}
+		}
+		for (IMarker marker : project.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_INFINITE)) {
+			if (marker.getAttribute(IMarker.SEVERITY, -1) == IMarker.SEVERITY_ERROR) {
+				String message = marker.getAttribute(IMarker.MESSAGE, "");
+				if (message.contains("org.w3c.dom is accessible from more than one module")) {
+					fail(message);
+				}
+			}
+		}
+	}
+
+	@Test
+	public void testImportExternalPreviouslySystemPackageAddsExtraBundle() throws Exception {
+		loadTargetPlatform("javax.annotation");
+		project = ProjectUtils.importTestProject("tests/projects/demoMissedExternalPackage");
+		project.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
+		// In Java 11, javax.annotation is not present, so the bundle *must* be
+		// part of classpath
+		RequiredPluginsClasspathContainer container = new RequiredPluginsClasspathContainer(
+				PDECore.getDefault().getModelManager().findModel(project));
+		assertTrue("javax.annotation is missing from required bundle",
+				Arrays.stream(container.getClasspathEntries()).map(IClasspathEntry::getPath).map(IPath::lastSegment)
+				.anyMatch(fileName -> fileName.contains("javax.annotation")));
+	}
+
+	@Test
+	public void testImportSystemPackageDoesntAddExtraBundleJava8() throws Exception {
+		loadTargetPlatform("javax.xml");
+		project = ProjectUtils.importTestProject("tests/projects/demoMissedSystemPackageJava8");
+		project.build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
+		// In Java 8, javax.annotation is present, so the bundle must *NOT* be
+		// part of classpath
+		RequiredPluginsClasspathContainer container = new RequiredPluginsClasspathContainer(
+				PDECore.getDefault().getModelManager().findModel(project));
+		assertTrue("javax.annotations shouldn't be present in required bundles",
+				Arrays.stream(container.getClasspathEntries()).map(IClasspathEntry::getPath).map(IPath::lastSegment)
+				.noneMatch(fileName -> fileName.contains("javax.annotation")));
+	}
+
+	private void loadTargetPlatform(String bundleName) throws Exception {
+		ITargetDefinition javaxXmlTarget = tpService.newTarget();
+		javaxXmlTarget.setName("Target containing " + bundleName);
+		Collection<String> bundleNames = List.of(bundleName, "org.eclipse.osgi");
+		Set<File> directories = new HashSet<>(2);
+		for (String name : bundleNames) {
+			directories.add(FileLocator.getBundleFile(Platform.getBundle(name)).getParentFile());
+		}
+		javaxXmlTarget.setTargetLocations(directories.stream().map(File::getAbsolutePath)
+				.map(tpService::newDirectoryLocation).toArray(ITargetLocation[]::new));
+		javaxXmlTarget.setIncluded(bundleNames.stream().map(name -> new NameVersionDescriptor(name, null))
+				.toArray(NameVersionDescriptor[]::new));
+		new LoadTargetDefinitionJob(javaxXmlTarget).runInWorkspace(new NullProgressMonitor());
+	}
+}
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/AllPDEMinimalTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/AllPDEMinimalTests.java
index 5980b32..0973bb8 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/AllPDEMinimalTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/AllPDEMinimalTests.java
@@ -13,6 +13,7 @@
  *******************************************************************************/
 package org.eclipse.pde.ui.tests;
 
+import org.eclipse.pde.core.tests.internal.classpath.ClasspathResolutionTest;
 import org.eclipse.pde.core.tests.internal.util.PDESchemaHelperTest;
 import org.eclipse.pde.ui.tests.build.properties.AllValidatorTests;
 import org.eclipse.pde.ui.tests.classpathresolver.ClasspathResolverTest;
@@ -44,8 +45,9 @@
 	// ExportBundleTests.class,
 	AllLauncherTests.class, AllLogViewTests.class, ProjectCreationTests.class, BundleRootTests.class,
 	PluginRegistryTestsMinimal.class, ClasspathResolverTest.class, PDESchemaHelperTest.class,
-	DynamicPluginProjectReferencesTest.class
+		DynamicPluginProjectReferencesTest.class,
 	// ClasspathContributorTest.class
+		ClasspathResolutionTest.class
 })
 public class AllPDEMinimalTests {
 
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/ee/ExecutionEnvironmentTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/ee/ExecutionEnvironmentTests.java
index 86c8b46..96d4aca 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/ee/ExecutionEnvironmentTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/ee/ExecutionEnvironmentTests.java
@@ -13,6 +13,7 @@
  *******************************************************************************/
 package org.eclipse.pde.ui.tests.ee;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -27,6 +28,7 @@
 import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
 import org.eclipse.pde.core.plugin.IPluginModelBase;
 import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.internal.core.TargetPlatformHelper;
 import org.eclipse.pde.internal.ui.wizards.tools.UpdateClasspathJob;
 import org.eclipse.pde.ui.tests.PDETestCase;
 import org.eclipse.pde.ui.tests.util.ProjectUtils;
@@ -307,4 +309,12 @@
 			deleteProject("j2se14.error");
 		}
 	}
+
+	@Test
+	public void testDynamicSystemPackages() throws Exception {
+		IExecutionEnvironment env = JavaRuntime.getExecutionEnvironmentsManager().getEnvironment("JavaSE-11");
+		String systemPackages = TargetPlatformHelper.querySystemPackages(env);
+		assertThat(systemPackages).isNotNull();
+		assertThat(systemPackages.split(",")).contains("java.lang", "javax.sql", "org.w3c.dom.css");
+	}
 }
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 47876f8..bcee051 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
@@ -133,8 +133,7 @@
 
 		// the old way
 		IPath location = new Path(TargetPlatform.getDefaultLocation());
-		URL[] pluginPaths = P2Utils.readBundlesTxt(location.toOSString(),
-				location.append("configuration").toFile().toURI().toURL());
+		URL[] pluginPaths = P2Utils.readBundlesTxt(location.toOSString(), location.append("configuration").toFile());
 		// pluginPaths will be null (and NPE) when self-hosting and the target
 		// platform is not a real installation
 		assertBundlePathsEqual(pluginPaths, uris);
@@ -258,8 +257,7 @@
 
 		// the old way
 		IPath location = new Path(TargetPlatform.getDefaultLocation());
-		URL[] pluginPaths = P2Utils.readBundlesTxt(location.toOSString(),
-				location.append("configuration").toFile().toURI().toURL());
+		URL[] pluginPaths = P2Utils.readBundlesTxt(location.toOSString(), location.append("configuration").toFile());
 		// pluginPaths will be null (and NPE) when self-hosting and the target
 		// platform is not a real installation
 		assertBundlePathsEqual(pluginPaths, uris);
@@ -284,8 +282,7 @@
 
 		// the old way
 		IPath location = new Path(TargetPlatform.getDefaultLocation());
-		URL[] pluginPaths = P2Utils.readBundlesTxt(location.toOSString(),
-				location.append("configuration").toFile().toURI().toURL());
+		URL[] pluginPaths = P2Utils.readBundlesTxt(location.toOSString(), location.append("configuration").toFile());
 		// pluginPaths will be null (and NPE) when self-hosting and the target
 		// platform is not a real installation
 		assertBundlePathsEqual(pluginPaths, uris);
diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java
index fb1c79a..755df20 100644
--- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java
+++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/target/ProfileContainerTests.java
@@ -41,7 +41,7 @@
 		configIni.put("osgi.bundles", absoluteFile("plugins/some.bundle").toURI() + ","//
 				+ "reference:" + absoluteFile("plugins/some.bundle_startlevel").toURI() + "@1:start");
 
-		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni);
+		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File("."));
 		assertEquals(Arrays.asList( //
 				absoluteFile("plugins/some.bundle"), //
 				absoluteFile("plugins/some.bundle_startlevel")), //
@@ -55,7 +55,7 @@
 				+ "reference:file:plugins/some.bundle_startlevel@1:start," //
 				+ "reference:" + absoluteFile("absolute.bundle").toURI());
 
-		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni);
+		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File("."));
 		assertEquals(Arrays.asList( //
 				new File("plugins/some.bundle"), //
 				new File("plugins/some.bundle_startlevel"), //
@@ -71,15 +71,30 @@
 				+ "reference:" + absoluteFile("absolute.bundle").toURI());
 		configIni.put("osgi.framework", "file:plugins/o.e.osgi.jar");
 
-		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni);
+		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File("/home"));
 		assertEquals(Arrays.asList( //
-				new File("plugins/o.e.osgi.jar"), //
-				new File("plugins/some.bundle"), //
-				new File("plugins/some.bundle_startlevel"), //
+				new File("/home/plugins/o.e.osgi.jar"), //
+				new File("/home/plugins/some.bundle"), //
+				new File("/home/plugins/some.bundle_startlevel"), //
 				absoluteFile("absolute.bundle")), //
 				parsedBundles);
 	}
 
+	@Test
+	public void testParseBundleInfoFromConfigIni_relativeToAbsoluteFramework() {
+		Properties configIni = new Properties();
+		configIni.put("osgi.bundles", "reference:file:some.bundle," //
+				+ "reference:file:some.bundle_startlevel@1:start");
+		configIni.put("osgi.framework", absoluteFile("plugins/o.e.osgi.jar").toURI().toString());
+
+		Collection<File> parsedBundles = ProfileBundleContainer.parseBundlesFromConfigIni(configIni, new File("/home"));
+		assertEquals(Arrays.asList( //
+				absoluteFile("plugins/o.e.osgi.jar"), //
+				absoluteFile("plugins/some.bundle"), //
+				absoluteFile("plugins/some.bundle_startlevel")), //
+				parsedBundles);
+	}
+
 	private static File absoluteFile(String path) {
 		return new File(path).getAbsoluteFile();
 	}
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.classpath
similarity index 94%
rename from apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath
rename to ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.classpath
index eca7bdb..e801ebf 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.project
similarity index 68%
rename from apitools/org.eclipse.pde.api.tools.ee.javase16/.project
rename to ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.project
index 225c21d..05a80a6 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.project
@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase16</name>
+	<name>demoMissedExternalPackage</name>
 	<comment></comment>
 	<projects>
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.pde.ManifestBuilder</name>
 			<arguments>
 			</arguments>
@@ -18,5 +23,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c9545f0
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..93f7507
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DemoMissedSystemModulePackage
+Bundle-SymbolicName: demoMissedSystemModulePackage
+Bundle-Version: 1.0.0.qualifier
+Automatic-Module-Name: demoMissedSystemModulePackage
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Import-Package: javax.annotation
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/build.properties b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/src/demoMissedSystemModulePackage/Dummy.java b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/src/demoMissedSystemModulePackage/Dummy.java
new file mode 100644
index 0000000..0a89e97
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedExternalPackage/src/demoMissedSystemModulePackage/Dummy.java
@@ -0,0 +1,8 @@
+package demoMissedSystemModulePackage;
+
+import javax.annotation.Generated;
+
+@Generated
+public class Dummy {
+
+}
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.classpath
similarity index 94%
copy from apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath
copy to ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.classpath
index eca7bdb..e801ebf 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.project
similarity index 68%
copy from apitools/org.eclipse.pde.api.tools.ee.javase16/.project
copy to ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.project
index 225c21d..1f8bcfd 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.project
@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase16</name>
+	<name>demoMissedSystemModulePackage</name>
 	<comment></comment>
 	<projects>
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.pde.ManifestBuilder</name>
 			<arguments>
 			</arguments>
@@ -18,5 +23,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c9545f0
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..9803bc0
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DemoMissedSystemModulePackage
+Bundle-SymbolicName: demoMissedSystemModulePackage
+Bundle-Version: 1.0.0.qualifier
+Automatic-Module-Name: demoMissedSystemModulePackage
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Import-Package: org.w3c.dom
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/build.properties b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/src/demoMissedSystemModulePackage/Dummy.java b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/src/demoMissedSystemModulePackage/Dummy.java
new file mode 100644
index 0000000..3c23707
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemModulePackage/src/demoMissedSystemModulePackage/Dummy.java
@@ -0,0 +1,8 @@
+package demoMissedSystemModulePackage;
+
+import org.w3c.dom.Attr;
+
+public class Dummy {
+
+	Attr decl = null;
+}
diff --git a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.classpath
similarity index 94%
copy from apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath
copy to ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.classpath
index eca7bdb..e801ebf 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.j2se12/.classpath
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.project
similarity index 67%
copy from apitools/org.eclipse.pde.api.tools.ee.javase16/.project
copy to ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.project
index 225c21d..881436c 100644
--- a/apitools/org.eclipse.pde.api.tools.ee.javase16/.project
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.project
@@ -1,11 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-	<name>org.eclipse.pde.api.tools.ee.javase16</name>
+	<name>demoMissedSystemModulePackageJava8</name>
 	<comment></comment>
 	<projects>
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.pde.ManifestBuilder</name>
 			<arguments>
 			</arguments>
@@ -18,5 +23,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.settings/org.eclipse.jdt.core.prefs b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..c9545f0
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..34044bf
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/META-INF/MANIFEST.MF
@@ -0,0 +1,8 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: DemoMissedSystemModulePackage
+Bundle-SymbolicName: demoMissedSystemModulePackage
+Bundle-Version: 1.0.0.qualifier
+Automatic-Module-Name: demoMissedSystemModulePackage
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Import-Package: javax.annotation
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/build.properties b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/build.properties
new file mode 100644
index 0000000..34d2e4d
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/build.properties
@@ -0,0 +1,4 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .
diff --git a/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/src/demoMissedSystemModulePackage/Dummy.java b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/src/demoMissedSystemModulePackage/Dummy.java
new file mode 100644
index 0000000..3c23707
--- /dev/null
+++ b/ui/org.eclipse.pde.ui.tests/tests/projects/demoMissedSystemPackageJava8/src/demoMissedSystemModulePackage/Dummy.java
@@ -0,0 +1,8 @@
+package demoMissedSystemModulePackage;
+
+import org.w3c.dom.Attr;
+
+public class Dummy {
+
+	Attr decl = null;
+}
diff --git a/ui/org.eclipse.pde.ui/pom.xml b/ui/org.eclipse.pde.ui/pom.xml
index e52c9ba..ec48cf5 100644
--- a/ui/org.eclipse.pde.ui/pom.xml
+++ b/ui/org.eclipse.pde.ui/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java
index fc2930f..cc95372 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/build/BuildSourceViewerConfiguration.java
@@ -210,8 +210,7 @@
 		int length = PARTITIONS.length;
 		String[] contentTypes = new String[length + 1];
 		contentTypes[0] = IDocument.DEFAULT_CONTENT_TYPE;
-		for (int i = 0; i < length; i++)
-			contentTypes[i + 1] = PARTITIONS[i];
+		System.arraycopy(PARTITIONS, 0, contentTypes, 1, length);
 
 		return contentTypes;
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryDetailsSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryDetailsSection.java
index 0c4d9b3..ac7ae57 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryDetailsSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryDetailsSection.java
@@ -73,13 +73,16 @@
 	private void applyValue(String property, String value) throws CoreException {
 		if (fCurrentCategoryDefinition == null)
 			return;
-		if (property.equals(PROPERTY_NAME)) {
+		switch (property) {
+		case PROPERTY_NAME:
 			String oldName = fCurrentCategoryDefinition.getName();
 			fCurrentCategoryDefinition.setName(value);
 			updateBundlesAndFeatures(oldName);
-		} else if (property.equals(PROPERTY_TYPE))
+			break;
+		case PROPERTY_TYPE:
 			fCurrentCategoryDefinition.setLabel(value);
-		else if (property.equals(PROPERTY_DESC)) {
+			break;
+		case PROPERTY_DESC:
 			if (value == null || value.length() == 0) {
 				fCurrentCategoryDefinition.setDescription(null);
 			} else {
@@ -92,6 +95,9 @@
 					siteDesc.setText(value);
 				}
 			}
+			break;
+		default:
+			break;
 		}
 	}
 
@@ -117,12 +123,19 @@
 	}
 
 	private void clearField(String property) {
-		if (property.equals(PROPERTY_NAME))
+		switch (property) {
+		case PROPERTY_NAME:
 			fNameText.setValue(null, true);
-		else if (property.equals(PROPERTY_TYPE))
+			break;
+		case PROPERTY_TYPE:
 			fLabelText.setValue(null, true);
-		else if (property.equals(PROPERTY_DESC))
+			break;
+		case PROPERTY_DESC:
 			fDescriptionText.setValue(null, true);
+			break;
+		default:
+			break;
+		}
 	}
 
 	private void clearFields() {
@@ -308,18 +321,23 @@
 		if (fCurrentCategoryDefinition == null) {
 			clearField(property);
 		} else {
-			if (property.equals(PROPERTY_NAME))
+			switch (property) {
+			case PROPERTY_NAME:
 				fNameText.setValue(fCurrentCategoryDefinition.getName(), true);
-			else if (property.equals(PROPERTY_TYPE))
+				break;
+			case PROPERTY_TYPE:
 				fLabelText.setValue(fCurrentCategoryDefinition.getLabel(), true);
-			else if (property.equals(PROPERTY_DESC)) {
+				break;
+			case PROPERTY_DESC:
 				ISiteDescription siteDesc = fCurrentCategoryDefinition.getDescription();
 				if (siteDesc == null) {
 					clearField(property);
 				} else {
 					fDescriptionText.setValue(siteDesc.getText(), true);
 				}
-
+				break;
+			default:
+				break;
 			}
 		}
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java
index 6786702..51b7779 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/contentassist/ManifestContentAssistProcessor.java
@@ -625,16 +625,24 @@
 		TypeCompletionProposal proposal = null;
 		for (int i = 0; i < attrs.length; i++)
 			if (attrs[i].regionMatches(true, 0, value, 0, length)) {
-				if (types[i] == F_TYPE_ATTRIBUTE) {
-					proposal = new TypeCompletionProposal(attrs[i] + "=", getImage(F_TYPE_ATTRIBUTE), attrs[i], offset - length, length); //$NON-NLS-1$
-					proposal.setAdditionalProposalInfo(getJavaDoc(attrs[i] + "_ATTRIBUTE")); //$NON-NLS-1$
-				} else if (types[i] == F_TYPE_DIRECTIVE) {
-					proposal = new TypeCompletionProposal(attrs[i] + ":=", getImage(F_TYPE_DIRECTIVE), attrs[i], offset - length, length); //$NON-NLS-1$
-					proposal.setAdditionalProposalInfo(getJavaDoc(attrs[i] + "_DIRECTIVE")); //$NON-NLS-1$
-				} else {
-					proposal = new TypeCompletionProposal(attrs[i], getImage(types[i]), attrs[i], offset - length, length);
-					proposal.setAdditionalProposalInfo(getJavaDoc(prefixCostant + attrs[i]));
-				}
+				switch (types[i])
+					{
+					case F_TYPE_ATTRIBUTE:
+						proposal = new TypeCompletionProposal(attrs[i] + "=", getImage(F_TYPE_ATTRIBUTE), attrs[i], //$NON-NLS-1$
+								offset - length, length);
+						proposal.setAdditionalProposalInfo(getJavaDoc(attrs[i] + "_ATTRIBUTE")); //$NON-NLS-1$
+						break;
+					case F_TYPE_DIRECTIVE:
+						proposal = new TypeCompletionProposal(attrs[i] + ":=", getImage(F_TYPE_DIRECTIVE), attrs[i], //$NON-NLS-1$
+								offset - length, length);
+						proposal.setAdditionalProposalInfo(getJavaDoc(attrs[i] + "_DIRECTIVE")); //$NON-NLS-1$
+						break;
+					default:
+						proposal = new TypeCompletionProposal(attrs[i], getImage(types[i]), attrs[i], offset - length,
+								length);
+						proposal.setAdditionalProposalInfo(getJavaDoc(prefixCostant + attrs[i]));
+						break;
+					}
 				list.add(proposal);
 			}
 		return list.toArray(new ICompletionProposal[list.size()]);
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureFormPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureFormPage.java
index 178773d..8f6781f 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureFormPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/FeatureFormPage.java
@@ -169,26 +169,37 @@
 	public void linkActivated(HyperlinkEvent e) {
 		String href = (String) e.getHref();
 		// try page references
-		if (href.equals("info")) //$NON-NLS-1$
+		switch (href) {
+		case "info": //$NON-NLS-1$
 			getEditor().setActivePage(InfoFormPage.PAGE_ID);
-		if (href.equals("plugins")) //$NON-NLS-1$
+			break;
+		case "plugins": //$NON-NLS-1$
 			getEditor().setActivePage(FeatureReferencePage.PAGE_ID);
-		else if (href.equals("features")) //$NON-NLS-1$
+			break;
+		case "features": //$NON-NLS-1$
 			getEditor().setActivePage(FeatureIncludesPage.PAGE_ID);
-		else if (href.equals("dependencies")) //$NON-NLS-1$
+			break;
+		case "dependencies": //$NON-NLS-1$
 			getEditor().setActivePage(FeatureDependenciesPage.PAGE_ID);
-		else if (href.equals("build")) //$NON-NLS-1$
+			break;
+		case "build": //$NON-NLS-1$
 			getEditor().setActivePage(BuildPage.PAGE_ID);
-		else if (href.equals("synchronize")) { //$NON-NLS-1$ {
+			break;
+		case "synchronize": //$NON-NLS-1$
 			getEditor().setActivePage(FeatureReferencePage.PAGE_ID);
-			final FeatureEditorContributor contributor = (FeatureEditorContributor) getPDEEditor().getContributor();
-			BusyIndicator.showWhile(e.display, () -> contributor.getSynchronizeAction().run());
-		} else if (href.equals("export")) { //$NON-NLS-1$
+			BusyIndicator.showWhile(e.display,
+					() -> ((FeatureEditorContributor) getPDEEditor().getContributor()).getSynchronizeAction().run());
+			break;
+		case "export": //$NON-NLS-1$
 			((FeatureEditor) getPDEEditor()).getFeatureExportAction().run();
-		} else if (href.equals("siteProject")) { //$NON-NLS-1$
+			break;
+		case "siteProject": //$NON-NLS-1$
 			getEditor().doSave(null);
-			final FeatureEditorContributor contributor = (FeatureEditorContributor) getPDEEditor().getContributor();
-			BusyIndicator.showWhile(e.display, () -> contributor.getNewSiteAction().run());
+			BusyIndicator.showWhile(e.display,
+					() -> ((FeatureEditorContributor) getPDEEditor().getContributor()).getNewSiteAction().run());
+			break;
+		default:
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/SynchronizeVersionsWizardPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/SynchronizeVersionsWizardPage.java
index a7d6548..89c262b 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/SynchronizeVersionsWizardPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/feature/SynchronizeVersionsWizardPage.java
@@ -239,24 +239,34 @@
 	private void synchronizeVersion(int mode, String featureVersion, IFeaturePlugin ref, IProgressMonitor monitor) throws CoreException, BadLocationException {
 		String id = ref.getId();
 
-		if (mode == USE_PLUGINS_AT_BUILD) {
+		switch (mode) {
+		case USE_PLUGINS_AT_BUILD:
 			if (!ICoreConstants.DEFAULT_VERSION.equals(ref.getVersion()))
 				ref.setVersion(ICoreConstants.DEFAULT_VERSION);
-		} else if (mode == USE_PLUGINS) {
-			IPluginModelBase modelBase = PluginRegistry.findModel(id);
-			if (modelBase == null)
-				return;
-			String baseVersion = modelBase.getPluginBase().getVersion();
-			if (!ref.getVersion().equals(baseVersion))
-				ref.setVersion(baseVersion);
-		} else /* mode == USE_FEATURE */{
-			IPluginModelBase modelBase = findModel(id);
-			if (modelBase == null)
-				return;
-			ref.setVersion(featureVersion);
-			String baseVersion = modelBase.getPluginBase().getVersion();
-			if (!featureVersion.equals(baseVersion))
-				forceVersion(featureVersion, modelBase, monitor);
+			break;
+		case USE_PLUGINS:
+			{
+				IPluginModelBase modelBase = PluginRegistry.findModel(id);
+				if (modelBase == null)
+					return;
+				String baseVersion = modelBase.getPluginBase().getVersion();
+				if (!ref.getVersion().equals(baseVersion))
+					ref.setVersion(baseVersion);
+				break;
+			}
+		case USE_FEATURE:
+		default:
+			/* mode == USE_FEATURE */
+			{
+				IPluginModelBase modelBase = findModel(id);
+				if (modelBase == null)
+					return;
+				ref.setVersion(featureVersion);
+				String baseVersion = modelBase.getPluginBase().getVersion();
+				if (!featureVersion.equals(baseVersion))
+					forceVersion(featureVersion, modelBase, monitor);
+				break;
+			}
 		}
 		monitor.worked(1);
 	}
@@ -265,10 +275,12 @@
 			throws CoreException {
 		String id = ref.getId();
 
-		if (mode == USE_PLUGINS_AT_BUILD) {
+		switch (mode) {
+		case USE_PLUGINS_AT_BUILD:
 			if (!ICoreConstants.DEFAULT_VERSION.equals(ref.getVersion()))
 				ref.setVersion(ICoreConstants.DEFAULT_VERSION);
-		} else if (mode == USE_PLUGINS) {
+			break;
+		case USE_PLUGINS:
 			FeatureModelManager fmm = PDECore.getDefault().getFeatureModelManager();
 			IFeatureModel modelBase = fmm.findFeatureModel(id);
 			if (modelBase == null)
@@ -277,8 +289,11 @@
 			if (!ref.getVersion().equals(baseVersion)) {
 				ref.setVersion(baseVersion);
 			}
-		} else /* mode == USE_FEATURE */ {
-			// not supported yet
+			break;
+		// not supported yet
+		/* mode == USE_FEATURE */
+		default:
+			break;
 		}
 		monitor.worked(1);
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java
index 110f941..1ebdc12 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ExtensionsSection.java
@@ -562,10 +562,7 @@
 						int index = getNewSelectionIndex(parent.getIndexOf(ee), parent.getChildCount());
 						newSelection = index == -1 ? new StructuredSelection(parent) : new StructuredSelection(parent.getChildren()[index]);
 					} else {
-						IPluginObject original[] = parent.getChildren();
-						IPluginObject objects[] = new IPluginObject[original.length];
-						for (int i = 0; i < original.length; i++)
-							objects[i] = original[i];
+						IPluginObject objects[] = parent.getChildren().clone();
 						fExtensionTree.getComparator().sort(fExtensionTree, objects);
 						int index = getNewSelectionIndex(getArrayIndex(objects, ee), objects.length);
 						newSelection = index == -1 ? new StructuredSelection(parent) : new StructuredSelection(objects[index]);
@@ -579,10 +576,7 @@
 						if (index != -1)
 							newSelection = new StructuredSelection(plugin.getExtensions()[index]);
 					} else {
-						IPluginExtension original[] = plugin.getExtensions();
-						IPluginExtension extensions[] = new IPluginExtension[original.length];
-						for (int i = 0; i < original.length; i++)
-							extensions[i] = original[i];
+						IPluginExtension extensions[] = plugin.getExtensions().clone();
 						fExtensionTree.getComparator().sort(fExtensionTree, extensions);
 						int index = getNewSelectionIndex(getArrayIndex(extensions, extension), extensions.length);
 						if (index != -1)
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java
index c1070f7..73fbcc1 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/ManifestEditor.java
@@ -460,18 +460,17 @@
 	}
 
 	private boolean isSourcePageID(String pageID) {
-		// Determine whether the page ID is a source page ID
 		if (pageID == null) {
 			return false;
-		} else if (pageID.equals(BuildInputContext.CONTEXT_ID)) {
-			// build.properites
+		}
+		// Determine whether the page ID is a source page ID
+		switch (pageID) {
+			case BuildInputContext.CONTEXT_ID: // build.properites
+			case PluginInputContext.CONTEXT_ID: // plugin.xml
+			case BundleInputContext.CONTEXT_ID: // MANIFEST.MF
 			return true;
-		} else if (pageID.equals(PluginInputContext.CONTEXT_ID)) {
-			// plugin.xml
-			return true;
-		} else if (pageID.equals(BundleInputContext.CONTEXT_ID)) {
-			// MANIFEST.MF
-			return true;
+		default:
+			break;
 		}
 		return false;
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/OverviewPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/OverviewPage.java
index a04f04c..18a9b4b 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/OverviewPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/OverviewPage.java
@@ -219,17 +219,22 @@
 	public void linkActivated(HyperlinkEvent e) {
 		String href = (String) e.getHref();
 		// try page references
-		if (href.equals("dependencies")) //$NON-NLS-1$
+		switch (href) {
+			case "dependencies": //$NON-NLS-1$
 			getEditor().setActivePage(DependenciesPage.PAGE_ID);
-		else if (href.equals("runtime")) //$NON-NLS-1$
+			break;
+		case "runtime": //$NON-NLS-1$
 			getEditor().setActivePage(RuntimePage.PAGE_ID);
-		else if (href.equals("extensions")) { //$NON-NLS-1$
+			break;
+		case "extensions": //$NON-NLS-1$
 			if (getEditor().setActivePage(ExtensionsPage.PAGE_ID) == null)
 				activateExtensionPages(ExtensionsPage.PAGE_ID);
-		} else if (href.equals("ex-points")) { //$NON-NLS-1$
+			break;
+		case "ex-points": //$NON-NLS-1$
 			if (getEditor().setActivePage(ExtensionPointsPage.PAGE_ID) == null)
 				activateExtensionPages(ExtensionPointsPage.PAGE_ID);
-		} else if (href.equals("build")) { //$NON-NLS-1$
+			break;
+		case "build": //$NON-NLS-1$
 			if (!getPDEEditor().hasInputContext(BuildInputContext.CONTEXT_ID)) {
 				if (!MessageDialog.openQuestion(PDEPlugin.getActiveWorkbenchShell(), PDEUIMessages.OverviewPage_buildTitle, PDEUIMessages.OverviewPage_buildQuestion))
 					return;
@@ -240,22 +245,30 @@
 				getPDEEditor().getContextManager().putContext(in, new BuildInputContext(getPDEEditor(), in, false));
 			}
 			getEditor().setActivePage(BuildPage.PAGE_ID);
-		} else if (href.equals("export")) { //$NON-NLS-1$
+			break;
+		case "export": //$NON-NLS-1$
 			getExportAction().run();
-		} else if (href.equals("action.convert")) { //$NON-NLS-1$
+			break;
+		case "action.convert": //$NON-NLS-1$
 			handleConvert();
-		} else if (href.equals("action.installPluginConverter")) { //$NON-NLS-1$
+			break;
+		case "action.installPluginConverter": //$NON-NLS-1$
 			handleInstallPluginConverter();
-		} else if (href.equals("organize")) { //$NON-NLS-1$
+			break;
+		case "organize": //$NON-NLS-1$
 			getEditor().doSave(null);
 			OrganizeManifestsAction organizeAction = new OrganizeManifestsAction();
 			organizeAction.runOrganizeManfestsAction(new StructuredSelection(getPDEEditor().getCommonProject()));
-		} else if (href.equals("externalize")) { //$NON-NLS-1$
+			break;
+		case "externalize": //$NON-NLS-1$
 			getEditor().doSave(null);
 			GetNonExternalizedStringsAction externalizeAction = new GetNonExternalizedStringsAction();
 			externalizeAction.runGetNonExternalizedStringsAction(new StructuredSelection(getPDEEditor().getCommonProject()));
-		} else
+			break;
+		default:
 			super.linkActivated(e);
+			break;
+		}
 	}
 
 	private PluginExportAction getExportAction() {
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginInputContextManager.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginInputContextManager.java
index 4fe3af5..14de110 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginInputContextManager.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/plugin/PluginInputContextManager.java
@@ -65,22 +65,28 @@
 	@Override
 	protected void fireContextChange(InputContext context, boolean added) {
 		super.fireContextChange(context, added);
-		if (context.getId().equals(BundleInputContext.CONTEXT_ID)) {
+		switch (context.getId()) {
+		case BundleInputContext.CONTEXT_ID:
 			if (added)// bundle arriving
 				bundleAdded(context);
 			else
 				// bundle going away
 				bundleRemoved(context);
-		} else if (context.getId().equals(BuildInputContext.CONTEXT_ID)) {
+			break;
+		case BuildInputContext.CONTEXT_ID:
 			if (added)
 				buildAdded(context);
 			else
 				buildRemoved(context);
-		} else if (context.getId().equals(PluginInputContext.CONTEXT_ID)) {
+			break;
+		case PluginInputContext.CONTEXT_ID:
 			if (added)
 				pluginAdded(context);
 			else
 				pluginRemoved(context);
+			break;
+		default:
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java
index b549a28..0cebb63 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/LauncherSection.java
@@ -187,15 +187,23 @@
 		addTab("win32"); //$NON-NLS-1$
 
 		String currentTarget = TargetPlatform.getOS();
-		if ("win32".equals(currentTarget)) { //$NON-NLS-1$
+		if (currentTarget == null) {
+			currentTarget = "linux"; //$NON-NLS-1$
+		}
+		switch (currentTarget)
+			{
+		case "win32": //$NON-NLS-1$
 			fTabFolder.setSelection(3);
 			fNotebookLayout.topControl = fWin32Section;
-		} else if ("macosx".equals(currentTarget)) { //$NON-NLS-1$
+			break;
+		case "macosx": //$NON-NLS-1$
 			fTabFolder.setSelection(1);
 			fNotebookLayout.topControl = fMacSection;
-		} else {
+			break;
+		default:
 			fTabFolder.setSelection(0);
 			fNotebookLayout.topControl = fLinuxSection;
+			break;
 		}
 	}
 
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/OverviewPage.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/OverviewPage.java
index 8052e0e..3323f76 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/OverviewPage.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/OverviewPage.java
@@ -85,19 +85,26 @@
 	@Override
 	public void linkActivated(HyperlinkEvent e) {
 		String href = (String) e.getHref();
-		if (href.equals("action.synchronize")) { //$NON-NLS-1$
+		switch (href) {
+		case "action.synchronize": //$NON-NLS-1$
 			((ProductLauncherFormPageHelper) getLauncherHelper()).handleSynchronize(true);
-		} else if (href.equals("action.export")) { //$NON-NLS-1$
+			break;
+		case "action.export": //$NON-NLS-1$
 			if (getPDEEditor().isDirty())
 				getPDEEditor().doSave(null);
 			new ProductExportAction(getPDEEditor()).run();
-		} else if (href.equals("configuration")) { //$NON-NLS-1$
+			break;
+		case "configuration": //$NON-NLS-1$
 			String pageId = ((ProductLauncherFormPageHelper) getLauncherHelper()).getProduct().useFeatures() ? DependenciesPage.FEATURE_ID : DependenciesPage.PLUGIN_ID;
 			getEditor().setActivePage(pageId);
-		} else if (href.equals("multi-platform-wiki")) { //$NON-NLS-1$
+			break;
+		case "multi-platform-wiki": //$NON-NLS-1$
 			openBrowser("https://wiki.eclipse.org/Building#Cross-platform_build"); //$NON-NLS-1$
-		} else
+			break;
+		default:
 			super.linkActivated(e);
+			break;
+		}
 	}
 
 	private static void openBrowser(String url) {
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategoryDetailsSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategoryDetailsSection.java
index 53d7c26..43e9237 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategoryDetailsSection.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/site/CategoryDetailsSection.java
@@ -75,13 +75,16 @@
 	private void applyValue(String property, String value) throws CoreException {
 		if (fCurrentCategoryDefinition == null)
 			return;
-		if (property.equals(PROPERTY_NAME)) {
+		switch (property) {
+		case PROPERTY_NAME:
 			String oldName = fCurrentCategoryDefinition.getName();
 			fCurrentCategoryDefinition.setName(value);
 			bringFeatures(oldName);
-		} else if (property.equals(PROPERTY_TYPE))
+			break;
+		case PROPERTY_TYPE:
 			fCurrentCategoryDefinition.setLabel(value);
-		else if (property.equals(PROPERTY_DESC)) {
+			break;
+		case PROPERTY_DESC:
 			if (value == null || value.length() == 0) {
 				fCurrentCategoryDefinition.setDescription(null);
 			} else {
@@ -94,6 +97,9 @@
 					siteDesc.setText(value);
 				}
 			}
+			break;
+		default:
+			break;
 		}
 	}
 
@@ -119,12 +125,19 @@
 	}
 
 	private void clearField(String property) {
-		if (property.equals(PROPERTY_NAME))
+		switch (property) {
+		case PROPERTY_NAME:
 			fNameText.setValue(null, true);
-		else if (property.equals(PROPERTY_TYPE))
+			break;
+		case PROPERTY_TYPE:
 			fLabelText.setValue(null, true);
-		else if (property.equals(PROPERTY_DESC))
+			break;
+		case PROPERTY_DESC:
 			fDescriptionText.setValue(null, true);
+			break;
+		default:
+			break;
+		}
 	}
 
 	private void clearFields() {
@@ -282,18 +295,23 @@
 		if (fCurrentCategoryDefinition == null) {
 			clearField(property);
 		} else {
-			if (property.equals(PROPERTY_NAME))
+			switch (property) {
+			case PROPERTY_NAME:
 				fNameText.setValue(fCurrentCategoryDefinition.getName(), true);
-			else if (property.equals(PROPERTY_TYPE))
+				break;
+			case PROPERTY_TYPE:
 				fLabelText.setValue(fCurrentCategoryDefinition.getLabel(), true);
-			else if (property.equals(PROPERTY_DESC)) {
+				break;
+			case PROPERTY_DESC:
 				ISiteDescription siteDesc = fCurrentCategoryDefinition.getDescription();
 				if (siteDesc == null) {
 					clearField(property);
 				} else {
 					fDescriptionText.setValue(siteDesc.getText(), true);
 				}
-
+				break;
+			default:
+				break;
 			}
 		}
 	}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/NLSFragmentGenerator.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/NLSFragmentGenerator.java
index 076b270..1f03f5d 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/NLSFragmentGenerator.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/nls/NLSFragmentGenerator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2018 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
@@ -371,7 +371,7 @@
 						worked();
 
 						String relativePath = file.getAbsolutePath().substring(installLocation.length())
-								.replaceAll(File.separator, SLASH);
+								.replace(File.separatorChar, SLASH.charAt(0));
 						String[] segments = relativePath.split(SLASH);
 						IPath path = Path.fromPortableString(join(SLASH, segments, 0, segments.length - 1));
 						String resourceName = segments[segments.length - 1];
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractLaunchShortcut.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractLaunchShortcut.java
index 2ff6527..7952841 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractLaunchShortcut.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/AbstractLaunchShortcut.java
@@ -63,12 +63,16 @@
 	protected ILaunchConfiguration findLaunchConfiguration(String mode) {
 		ILaunchConfiguration[] configs = getLaunchConfigurations();
 		ILaunchConfiguration configuration = null;
-		if (configs.length == 0) {
+		switch (configs.length) {
+		case 0:
 			configuration = createNewConfiguration();
-		} else if (configs.length == 1) {
+			break;
+		case 1:
 			configuration = configs[0];
-		} else {
+			break;
+		default:
 			configuration = chooseConfiguration(configs, mode);
+			break;
 		}
 		return configuration;
 	}
diff --git a/ui/org.eclipse.pde/META-INF/MANIFEST.MF b/ui/org.eclipse.pde/META-INF/MANIFEST.MF
index 3fb89b7..f240259 100644
--- a/ui/org.eclipse.pde/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde/META-INF/MANIFEST.MF
@@ -2,6 +2,6 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.pde;singleton:=true
-Bundle-Version: 3.13.1300.qualifier
+Bundle-Version: 3.13.1400.qualifier
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/ui/org.eclipse.pde/pom.xml b/ui/org.eclipse.pde/pom.xml
index af8d79e..0964950 100644
--- a/ui/org.eclipse.pde/pom.xml
+++ b/ui/org.eclipse.pde/pom.xml
@@ -14,12 +14,12 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
   <artifactId>org.eclipse.pde</artifactId>
-  <version>3.13.1300-SNAPSHOT</version>
+  <version>3.13.1400-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 
   <build>
diff --git a/ui/org.eclipse.tools.layout.spy/pom.xml b/ui/org.eclipse.tools.layout.spy/pom.xml
index 894cb08..354d3b1 100644
--- a/ui/org.eclipse.tools.layout.spy/pom.xml
+++ b/ui/org.eclipse.tools.layout.spy/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.pde</groupId>
diff --git a/ui/org.eclipse.ui.trace/pom.xml b/ui/org.eclipse.ui.trace/pom.xml
index cd81a45..d0a0c3a 100644
--- a/ui/org.eclipse.ui.trace/pom.xml
+++ b/ui/org.eclipse.ui.trace/pom.xml
@@ -14,7 +14,7 @@
   <parent>
     <artifactId>eclipse.pde.ui</artifactId>
     <groupId>eclipse.pde.ui</groupId>
-    <version>4.18.0-SNAPSHOT</version>
+    <version>4.19.0-SNAPSHOT</version>
     <relativePath>../../</relativePath>
   </parent>
   <groupId>org.eclipse.ui</groupId>