diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
new file mode 100644
index 0000000..b9e927e
--- /dev/null
+++ b/CODE_OF_CONDUCT.md
@@ -0,0 +1,47 @@
+# Community Code of Conduct
+
+**Version 1.2
+August 19, 2020**
+
+## Our Pledge
+
+In the interest of fostering an open and welcoming environment, we as community members, contributors, committers, and project leaders pledge to make participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation.
+
+## Our Standards
+
+Examples of behavior that contributes to creating a positive environment include:
+
+* Using welcoming and inclusive language
+* Being respectful of differing viewpoints and experiences
+* Gracefully accepting constructive criticism
+* Focusing on what is best for the community
+* Showing empathy towards other community members
+
+Examples of unacceptable behavior by participants include:
+
+* The use of sexualized language or imagery and unwelcome sexual attention or advances
+* Trolling, insulting/derogatory comments, and personal or political attacks
+* Public or private harassment
+* Publishing others' private information, such as a physical or electronic address, without explicit permission
+* Other conduct which could reasonably be considered inappropriate in a professional setting
+
+## Our Responsibilities
+
+With the support of the Eclipse Foundation staff (the “Staff”), project committers and leaders are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
+
+Project committers and leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
+
+## Scope
+
+This Code of Conduct applies within all project spaces, and it also applies when an individual is representing the Eclipse Foundation project or its community in public spaces. Examples of representing a project or community include posting via an official social media account, or acting as a project representative at an online or offline event. Representation of a project may be further defined and clarified by project committers, leaders, or the EMO.
+
+## Enforcement
+
+Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the Staff at codeofconduct@eclipse.org. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The Staff is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
+
+Project committers or leaders who do not follow the Code of Conduct in good faith may face temporary or permanent repercussions as determined by the Staff.
+
+## Attribution
+
+This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
+available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
diff --git a/features/org.eclipse.jst.server_adapters.feature/feature.xml b/features/org.eclipse.jst.server_adapters.feature/feature.xml
index 3852158..e9e8b45 100644
--- a/features/org.eclipse.jst.server_adapters.feature/feature.xml
+++ b/features/org.eclipse.jst.server_adapters.feature/feature.xml
@@ -10,12 +10,11 @@
 
     Contributors:
         IBM Corporation - initial API and implementation
- -->
-
+ -->
 <feature
       id="org.eclipse.jst.server_adapters.feature"
       label="%featureName"
-      version="3.2.800.qualifier"
+      version="3.31.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="1.0.1.qualifier">
@@ -32,6 +31,10 @@
       %license
    </license>
 
+   <requires>
+      <import feature="org.eclipse.wst.server_adapters.feature"/>
+   </requires>
+
    <plugin
          id="org.eclipse.jst.server.preview.adapter"
          download-size="0"
diff --git a/features/org.eclipse.jst.server_adapters.feature/pom.xml b/features/org.eclipse.jst.server_adapters.feature/pom.xml
index b3e3122..54ff11c 100644
--- a/features/org.eclipse.jst.server_adapters.feature/pom.xml
+++ b/features/org.eclipse.jst.server_adapters.feature/pom.xml
@@ -22,7 +22,7 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.jst.server_adapters.feature</artifactId>
-  <version>3.2.800-SNAPSHOT</version>
+  <version>3.31.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml b/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
index 2bcffdf..589c501 100644
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
+++ b/features/org.eclipse.jst.server_adapters.sdk.feature/feature.xml
@@ -11,11 +11,10 @@
     Contributors:
         IBM Corporation - initial API and implementation
  -->
-
 <feature
       id="org.eclipse.jst.server_adapters.sdk.feature"
       label="%featureName"
-      version="3.3.400.qualifier"
+      version="3.31.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
       license-feature-version="1.0.1.qualifier">
diff --git a/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml b/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml
index 8aa3e2d..ea874f3 100644
--- a/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml
+++ b/features/org.eclipse.jst.server_adapters.sdk.feature/pom.xml
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.jst.server_adapters.sdk.feature</artifactId>
-  <version>3.3.400-SNAPSHOT</version>
+  <version>3.31.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/features/org.eclipse.wst.server_adapters.feature/feature.xml b/features/org.eclipse.wst.server_adapters.feature/feature.xml
index 665aa7a..ec971fb 100644
--- a/features/org.eclipse.wst.server_adapters.feature/feature.xml
+++ b/features/org.eclipse.wst.server_adapters.feature/feature.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-    Copyright (c) 2007, 2019 IBM Corporation and others.
+    Copyright (c) 2007, 2023 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
@@ -15,10 +15,10 @@
 <feature
       id="org.eclipse.wst.server_adapters.feature"
       label="%featureName"
-      version="3.2.1400.qualifier"
+      version="3.31.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
-      license-feature-version="1.0.1.qualifier">
+      license-feature-version="0.0.0.qualifier">
 
    <description>
       %description
@@ -43,6 +43,7 @@
      <import plugin="org.eclipse.jetty.io"/>
      <import plugin="org.eclipse.jetty.xml"/>
      <import plugin="jakarta.transaction-api"/>
+     <import plugin="org.apache.aries.spifly.dynamic.bundle"/>
    </requires>
    -->
 
diff --git a/features/org.eclipse.wst.server_adapters.feature/pom.xml b/features/org.eclipse.wst.server_adapters.feature/pom.xml
index 9fa1260..ee8c2f9 100644
--- a/features/org.eclipse.wst.server_adapters.feature/pom.xml
+++ b/features/org.eclipse.wst.server_adapters.feature/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Copyright (c) 2012, 2017 Eclipse Foundation and others.
+  Copyright (c) 2012, 2023 Eclipse Foundation and others.
   All rights reserved. This program and the accompanying materials
   are made available under the terms of the Eclipse Distribution License v1.0
   which accompanies this distribution, and is available at
@@ -22,7 +22,7 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.wst.server_adapters.feature</artifactId>
-  <version>3.2.1400-SNAPSHOT</version>
+  <version>3.31.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>
diff --git a/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml b/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml
index 97a825f..14ad30a 100644
--- a/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml
+++ b/features/org.eclipse.wst.server_adapters.sdk.feature/feature.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-    Copyright (c) 2007, 2019 IBM Corporation and others.
+    Copyright (c) 2007, 2023 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
@@ -15,10 +15,10 @@
 <feature
       id="org.eclipse.wst.server_adapters.sdk.feature"
       label="%featureName"
-      version="3.2.1400.qualifier"
+      version="3.31.0.qualifier"
       provider-name="%providerName"
       license-feature="org.eclipse.license"
-      license-feature-version="1.0.1.qualifier">
+      license-feature-version="0.0.0.qualifier">
 
    <description>
       %description
diff --git a/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml b/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml
index cf2555c..e640781 100644
--- a/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml
+++ b/features/org.eclipse.wst.server_adapters.sdk.feature/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  Copyright (c) 2012, 2018 Eclipse Foundation and others.
+  Copyright (c) 2012, 2023 Eclipse Foundation and others.
   All rights reserved. This program and the accompanying materials
   are made available under the terms of the Eclipse Distribution License v1.0
   which accompanies this distribution, and is available at
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.wst.server_adapters.sdk.feature</artifactId>
-  <version>3.2.1400-SNAPSHOT</version>
+  <version>3.31.0-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 </project>
diff --git a/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF b/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF
index e034d12..569a9ce 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.jst.server.preview.adapter/META-INF/MANIFEST.MF
@@ -3,8 +3,9 @@
 Automatic-Module-Name: org.eclipse.jst.server.preview.adapter
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.jst.server.preview.adapter;singleton:=true
-Bundle-Version: 1.1.900.qualifier
+Bundle-Version: 1.1.1000.qualifier
 Bundle-Activator: org.eclipse.jst.server.preview.adapter.internal.PreviewPlugin
+Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jst.server.preview.adapter.internal;x-internal:=true,
@@ -22,7 +23,6 @@
  org.eclipse.wst.server.preview;bundle-version="[1.2.0,2.0.0)",
  org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.0,2.0.0)",
  slf4j.api;bundle-version="[1.7.36,3)"
-Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: com.sun.el;version="2.2.0",
  javax.el;version="2.2.0",
diff --git a/plugins/org.eclipse.jst.server.preview.adapter/pom.xml b/plugins/org.eclipse.jst.server.preview.adapter/pom.xml
index e1effc3..c65972c 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/pom.xml
+++ b/plugins/org.eclipse.jst.server.preview.adapter/pom.xml
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.jst.server.preview.adapter</artifactId>
-  <version>1.1.900-SNAPSHOT</version>
+  <version>1.1.1000-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
index 9c8ac29..36b9c97 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
@@ -13,6 +13,7 @@
 package org.eclipse.jst.server.preview.adapter.internal.core;
 
 import java.io.File;
+import java.util.Arrays;
 import java.util.Map;
 
 import org.eclipse.core.runtime.CoreException;
@@ -24,11 +25,14 @@
 import org.eclipse.debug.core.ILaunch;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchManager;
-import org.eclipse.jdt.launching.*;
+import org.eclipse.jdt.launching.AbstractJavaLaunchConfigurationDelegate;
+import org.eclipse.jdt.launching.ExecutionArguments;
+import org.eclipse.jdt.launching.IVMInstall;
+import org.eclipse.jdt.launching.IVMRunner;
+import org.eclipse.jdt.launching.VMRunnerConfiguration;
 import org.eclipse.jst.server.core.ServerProfilerDelegate;
 import org.eclipse.jst.server.preview.adapter.internal.PreviewPlugin;
 import org.eclipse.jst.server.preview.adapter.internal.Trace;
-
 import org.eclipse.wst.server.core.IServer;
 import org.eclipse.wst.server.core.ServerCore;
 import org.eclipse.wst.server.core.ServerUtil;
@@ -46,7 +50,8 @@
 	// this array, please ensure the index of org.eclipse.wst.server.preview
 	// corresponds to CLASSPATH_BIN_INDEX_PREVIEW_SERVER
 	private static final String[] REQUIRED_BUNDLE_IDS = new String[] {
-		getBundleForClass(javax.servlet.ServletContext.class),
+		getBundleForClass(javax.servlet.ServletResponse.class),
+//		getBundleForClass(javax.servlet.http.HttpServletResponse.class),
 		getBundleForClass(javax.servlet.jsp.JspContext.class),
 		getBundleForClass(org.apache.jasper.JspCompilationContext.class),
 		getBundleForClass(javax.el.ELContext.class),
@@ -60,6 +65,7 @@
 		"org.eclipse.jetty.util",
 		"org.eclipse.jetty.webapp",
 		"org.eclipse.jetty.xml",
+		"org.apache.aries.spifly.dynamic.bundle",
 		"org.eclipse.wst.server.preview"
 	};
 
@@ -71,7 +77,8 @@
 	 * Gets the symbolic name of the bundle that supplies the given class.
 	 */
 	private static String getBundleForClass(Class<?> cls) {
-		return FrameworkUtil.getBundle(cls).getSymbolicName();
+		Bundle bundle = FrameworkUtil.getBundle(cls);
+		return bundle.getSymbolicName() + ":" + bundle.getVersion();
 	}
 
 	private static final String MAIN_CLASS = "org.eclipse.wst.server.preview.internal.PreviewStarter";
@@ -92,7 +99,15 @@
 		int size = REQUIRED_BUNDLE_IDS.length;
 		String[] jars = new String[size];
 		for (int i = 0; i < size; i++) {
-			Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]);
+			String[] bundleInfo = REQUIRED_BUNDLE_IDS[i].split(":");
+			String version = null;
+			if (bundleInfo.length > 1) {
+				version = bundleInfo[1];
+			}
+			Bundle[] bundles = Platform.getBundles(bundleInfo[0], version);
+			// to use the lowest/exact version match
+			Arrays.sort(bundles, (bundle1, bundle2) -> bundle1.getVersion().compareTo(bundle2.getVersion()));
+			Bundle b = bundles[0];
 			IPath path = null;
 			if (b != null)
 				path = PreviewRuntime.getJarredPluginPath(b);
diff --git a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java
index fd46ad4..765d7bc 100644
--- a/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java
+++ b/plugins/org.eclipse.jst.server.preview.adapter/src/org/eclipse/jst/server/preview/adapter/internal/core/PreviewRuntimeClasspathProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2018 IBM Corporation and others.
+ * Copyright (c) 2007, 2023 IBM Corporation and others.
  * All rights reserved. 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
@@ -13,6 +13,7 @@
 package org.eclipse.jst.server.preview.adapter.internal.core;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.core.resources.IProject;
@@ -44,7 +45,8 @@
 	 * Gets the symbolic name of the bundle that supplies the given class.
 	 */
 	private static String getBundleForClass(Class<?> cls) {
-		return FrameworkUtil.getBundle(cls).getSymbolicName();
+		Bundle bundle = FrameworkUtil.getBundle(cls);
+		return bundle.getSymbolicName() + ":" + bundle.getVersion().toString();
 	}
 
 	private String getJavadocLocation(IProject project) {
@@ -55,7 +57,11 @@
 				IProjectFacet webModuleFacet = ProjectFacetsManager.getProjectFacet("jst.web");
 				if (faceted.hasProjectFacet(webModuleFacet)) {
 					String servletVersionStr = faceted.getInstalledVersion(webModuleFacet).getVersionString();
-					if (servletVersionStr.equals("4.0")) {
+					if (servletVersionStr.equals("6.0")) {
+						eeVersion = 10;
+					} else if (servletVersionStr.equals("5.0")) {
+						eeVersion = 9;
+					} else if (servletVersionStr.equals("4.0")) {
 						eeVersion = 8;
 					} else if (servletVersionStr.equals("3.1")) {
 						eeVersion = 7;
@@ -98,6 +104,8 @@
 		case 8:
 			url = "https://javaee.github.io/javaee-spec/javadocs/";
 			break;
+		case 9:
+		case 10:
 		default:
 			url = "https://javaee.github.io/javaee-spec/javadocs/";
 			break;
@@ -112,7 +120,15 @@
 
 		int size = REQUIRED_BUNDLE_IDS.length;
 		for (int i = 0; i < size; i++) {
-			Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]);
+			String[] bundleInfo = REQUIRED_BUNDLE_IDS[i].split(":");
+			String version = null;
+			if (bundleInfo.length > 1) {
+				version = bundleInfo[1];
+			}
+			Bundle[] bundles = Platform.getBundles(bundleInfo[0], version);
+			// to use the lowest/exact version match
+			Arrays.sort(bundles, (bundle1, bundle2) -> bundle1.getVersion().compareTo(bundle2.getVersion()));
+			Bundle b = bundles[0];
 			IPath path = PreviewRuntime.getJarredPluginPath(b);
 			if (path != null) {
 				IClasspathEntry libraryEntry = JavaCore.newLibraryEntry(path, null, null, new IAccessRule[0], new IClasspathAttribute[]{JavaCore.newClasspathAttribute(IClasspathAttribute.JAVADOC_LOCATION_ATTRIBUTE_NAME, docUrl)}, false);
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
index fd3afb7..6ff45e5 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,8 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.internet.monitor.ui; singleton:=true
-Bundle-Version: 1.0.800.qualifier
+Automatic-Module-Name: org.eclipse.wst.internet.monitor.ui
+Bundle-Version: 1.0.801.qualifier
 Bundle-Activator: org.eclipse.wst.internet.monitor.ui.internal.MonitorUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
@@ -13,6 +14,6 @@
 Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
  org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.wst.internet.monitor.core;bundle-version="[1.0.103,2.0.0)"
+ org.eclipse.wst.internet.monitor.core;bundle-version="[1.1.0,2.0.0)"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml b/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml
index 996ab9d..aa058b3 100644
--- a/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml
+++ b/plugins/org.eclipse.wst.internet.monitor.ui/pom.xml
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.wst.internet.monitor.ui</artifactId>
-  <version>1.0.800-SNAPSHOT</version>
+  <version>1.0.801-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF
index 8e65443..443a272 100644
--- a/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.preview.adapter/META-INF/MANIFEST.MF
@@ -3,8 +3,9 @@
 Automatic-Module-Name: org.eclipse.wst.server.preview.adapter
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.server.preview.adapter;singleton:=true
-Bundle-Version: 1.1.700.qualifier
+Bundle-Version: 1.1.800.qualifier
 Bundle-Activator: org.eclipse.wst.server.preview.adapter.internal.core.PreviewPlugin
+Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
 Require-Bundle: org.eclipse.wst.server.core;bundle-version="[1.11.0,2.0.0)",
@@ -12,8 +13,7 @@
  org.eclipse.debug.ui;bundle-version="[3.17.0,4.0.0)",
  org.eclipse.wst.common.project.facet.ui;bundle-version="[1.4.0,2.0.0)",
  slf4j.api;bundle-version="[1.7.34,3)"
-Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.wst.server.preview.adapter.internal.core;x-internal:=true,
  org.eclipse.wst.server.preview.adapter.internal.ui;x-internal:=true
-Import-Package: javax.servlet;version="3.1.0"
+Import-Package: javax.servlet;version="4.0.0"
diff --git a/plugins/org.eclipse.wst.server.preview.adapter/pom.xml b/plugins/org.eclipse.wst.server.preview.adapter/pom.xml
index 9e75955..b091f9c 100644
--- a/plugins/org.eclipse.wst.server.preview.adapter/pom.xml
+++ b/plugins/org.eclipse.wst.server.preview.adapter/pom.xml
@@ -22,6 +22,6 @@
 
   <groupId>org.eclipse.webtools.servertools</groupId>
   <artifactId>org.eclipse.wst.server.preview.adapter</artifactId>
-  <version>1.1.700-SNAPSHOT</version>
+  <version>1.1.800-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java b/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
index b769cc7..f1cf1c8 100644
--- a/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.wst.server.preview.adapter/src/org/eclipse/wst/server/preview/adapter/internal/core/PreviewLaunchConfigurationDelegate.java
@@ -15,6 +15,7 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
@@ -59,6 +60,7 @@
 		"org.eclipse.jetty.util",
 		"org.eclipse.jetty.webapp",
 		"org.eclipse.jetty.xml",
+		"org.apache.aries.spifly.dynamic.bundle",
 		"org.eclipse.wst.server.preview"
 	};
 
@@ -70,7 +72,8 @@
 	 * Gets the symbolic name of the bundle that supplies the given class.
 	 */
 	private static String getBundleForClass(Class<?> cls) {
-		return FrameworkUtil.getBundle(cls).getSymbolicName();
+		Bundle bundle = FrameworkUtil.getBundle(cls);
+		return bundle.getSymbolicName() + ":" + bundle.getVersion();
 	}
 
 	private static final String[] fgCandidateJavaFiles = {"javaw", "javaw.exe", "java",
@@ -96,7 +99,15 @@
 		StringBuffer cp = new StringBuffer();
 		int size = REQUIRED_BUNDLE_IDS.length;
 		for (int i = 0; i < size; i++) {
-			Bundle b = Platform.getBundle(REQUIRED_BUNDLE_IDS[i]);
+			String[] bundleInfo = REQUIRED_BUNDLE_IDS[i].split(":");
+			String version = null;
+			if (bundleInfo.length > 1) {
+				version = bundleInfo[1];
+			}
+			Bundle[] bundles = Platform.getBundles(bundleInfo[0], version);
+			// to use the lowest/exact version match
+			Arrays.sort(bundles, (bundle1, bundle2) -> bundle1.getVersion().compareTo(bundle2.getVersion()));
+			Bundle b = bundles[0];
 			IPath path = null;
 			if (b != null)
 				path = PreviewRuntime.getJarredPluginPath(b);
diff --git a/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF
index e2377ab..5d928e8 100644
--- a/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.server.preview/META-INF/MANIFEST.MF
@@ -20,8 +20,6 @@
 Import-Package: javax.servlet;version="[4.0.0,5.0.0)",
  javax.servlet.http;version="[4.0.0,5.0.0)",
  javax.transaction.xa
-Provide-Capability: osgi.extender;osgi.extender="osgi.serviceloader.registrar";version:Version="1.0",
- osgi.extender;osgi.extender="osgi.serviceloader.processor";version:Version="1.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-11
 Automatic-Module-Name: org.eclipse.wst.server.preview
diff --git a/plugins/org.eclipse.wst.server.preview/jetty/pom.xml b/plugins/org.eclipse.wst.server.preview/jetty/pom.xml
index 6b3f1a2..217a37b 100644
--- a/plugins/org.eclipse.wst.server.preview/jetty/pom.xml
+++ b/plugins/org.eclipse.wst.server.preview/jetty/pom.xml
@@ -90,6 +90,14 @@
                   </excludes>
                 </artifact>
                 <artifact>
+                  <id>org.eclipse.jetty:jetty-logging:${jettyVersion}</id>
+                  <source>true</source>
+                  <excludes>
+                    <exclude>org.eclipse.jetty:*</exclude>
+                    <exclude>org.slf4j:*</exclude>
+                  </excludes>
+                </artifact>
+                <artifact>
                   <id>jakarta.transaction:jakarta.transaction-api:1.3.3</id>
                   <source>true</source>
                 </artifact>
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
index 884b46a..45bf0a5 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/viewers/RuntimeComposite.java
@@ -38,9 +38,9 @@
 		public void runtimeDoubleClicked(IRuntime runtime);
 	}
 	
-	class RuntimeViewerSorter extends ViewerSorter {
+	class RuntimeViewerComparator extends ViewerComparator {
 		boolean sortByName;
-		public RuntimeViewerSorter(boolean sortByName) {
+		public RuntimeViewerComparator(boolean sortByName) {
 			this.sortByName = sortByName;
 		}
 		
@@ -77,7 +77,7 @@
 		col.setText(Messages.columnName);
 		col.addSelectionListener(new SelectionListener() {
 			public void widgetSelected(SelectionEvent e) {
-				tableViewer.setSorter(new RuntimeViewerSorter(true));
+				tableViewer.setComparator(new RuntimeViewerComparator(true));
 			}
 
 			public void widgetDefaultSelected(SelectionEvent e) {
@@ -90,7 +90,7 @@
 		col.setText(Messages.columnType);
 		col.addSelectionListener(new SelectionListener() {
 			public void widgetSelected(SelectionEvent e) {
-				tableViewer.setSorter(new RuntimeViewerSorter(false));
+				tableViewer.setComparator(new RuntimeViewerComparator(false));
 			}
 
 			public void widgetDefaultSelected(SelectionEvent e) {
@@ -118,7 +118,7 @@
 		
 		tableViewer.setInput(AbstractTreeContentProvider.ROOT);
 		tableViewer.setColumnProperties(new String[] {"name", "type"});
-		tableViewer.setSorter(new RuntimeViewerSorter(true));
+		tableViewer.setComparator(new RuntimeViewerComparator(true));
 		
 		tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
 			public void selectionChanged(SelectionChangedEvent event) {
