diff --git a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainer.java b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java
similarity index 97%
rename from containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainer.java
rename to containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java
index 6bddebc..36be72d 100644
--- a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainer.java
+++ b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainer.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -49,7 +49,7 @@
 import org.glassfish.jersey.internal.inject.ReferencingFactory;
 import org.glassfish.jersey.internal.util.ExtendedLogger;
 import org.glassfish.jersey.internal.util.collection.Ref;
-import org.glassfish.jersey.jetty11.internal.LocalizationMessages;
+import org.glassfish.jersey.jetty.internal.LocalizationMessages;
 import org.glassfish.jersey.process.internal.RequestScoped;
 import org.glassfish.jersey.server.ApplicationHandler;
 import org.glassfish.jersey.server.ContainerException;
@@ -73,10 +73,10 @@
  * @author Libor Kramolis
  * @author Marek Potociar
  */
-public final class Jetty11HttpContainer extends AbstractHandler implements Container {
+public final class JettyHttpContainer extends AbstractHandler implements Container {
 
     private static final ExtendedLogger LOGGER =
-            new ExtendedLogger(Logger.getLogger(Jetty11HttpContainer.class.getName()), Level.FINEST);
+            new ExtendedLogger(Logger.getLogger(JettyHttpContainer.class.getName()), Level.FINEST);
 
     private static final Type REQUEST_TYPE = (new GenericType<Ref<Request>>() {}).getType();
     private static final Type RESPONSE_TYPE = (new GenericType<Ref<Response>>() {}).getType();
@@ -471,7 +471,7 @@
      * @param application   JAX-RS / Jersey application to be deployed on Jetty HTTP container.
      * @param parentContext DI provider specific context with application's registered bindings.
      */
-    Jetty11HttpContainer(final Application application, final Object parentContext) {
+    JettyHttpContainer(final Application application, final Object parentContext) {
         this.appHandler = new ApplicationHandler(application, new JettyBinder(), parentContext);
     }
 
@@ -480,7 +480,7 @@
      *
      * @param application JAX-RS / Jersey application to be deployed on Jetty HTTP container.
      */
-    Jetty11HttpContainer(final Application application) {
+    JettyHttpContainer(final Application application) {
         this.appHandler = new ApplicationHandler(application, new JettyBinder());
 
         cacheConfigSetStatusOverSendError();
@@ -491,7 +491,7 @@
      *
      * @param applicationClass JAX-RS / Jersey class of application to be deployed on Jetty HTTP container.
      */
-    Jetty11HttpContainer(final Class<? extends Application> applicationClass) {
+    JettyHttpContainer(final Class<? extends Application> applicationClass) {
         this.appHandler = new ApplicationHandler(applicationClass, new JettyBinder());
 
         cacheConfigSetStatusOverSendError();
diff --git a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainerFactory.java b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java
similarity index 94%
rename from containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainerFactory.java
rename to containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java
index 35a6ced..26a4b79 100644
--- a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainerFactory.java
+++ b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerFactory.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import java.net.URI;
 import java.util.concurrent.ThreadFactory;
@@ -22,7 +22,7 @@
 import jakarta.ws.rs.ProcessingException;
 
 import org.glassfish.jersey.internal.guava.ThreadFactoryBuilder;
-import org.glassfish.jersey.jetty11.internal.LocalizationMessages;
+import org.glassfish.jersey.jetty.internal.LocalizationMessages;
 import org.glassfish.jersey.process.JerseyProcessingUncaughtExceptionHandler;
 import org.glassfish.jersey.server.ContainerFactory;
 import org.glassfish.jersey.server.ResourceConfig;
@@ -50,9 +50,9 @@
  * @author Arul Dhesiaseelan (aruld@acm.org)
  * @author Marek Potociar
  */
-public final class Jetty11HttpContainerFactory {
+public final class JettyHttpContainerFactory {
 
-    private Jetty11HttpContainerFactory() {
+    private JettyHttpContainerFactory() {
     }
 
     /**
@@ -107,7 +107,7 @@
     public static Server createServer(final URI uri, final ResourceConfig config)
             throws ProcessingException {
 
-        final Jetty11HttpContainer container = ContainerFactory.createContainer(Jetty11HttpContainer.class, config);
+        final JettyHttpContainer container = ContainerFactory.createContainer(JettyHttpContainer.class, config);
         return createServer(uri, null, container, true);
     }
 
@@ -132,7 +132,7 @@
      */
     public static Server createServer(final URI uri, final ResourceConfig configuration, final boolean start)
             throws ProcessingException {
-        return createServer(uri, null, ContainerFactory.createContainer(Jetty11HttpContainer.class, configuration), start);
+        return createServer(uri, null, ContainerFactory.createContainer(JettyHttpContainer.class, configuration), start);
     }
 
 
@@ -153,12 +153,12 @@
      *
      * @throws ProcessingException      in case of any failure when creating a new Jetty {@code Server} instance.
      * @throws IllegalArgumentException if {@code uri} is {@code null}.
-     * @see Jetty11HttpContainer
+     * @see JettyHttpContainer
      * @since 2.12
      */
     public static Server createServer(final URI uri, final ResourceConfig config, final boolean start,
                                       final Object parentContext) {
-        return createServer(uri, null, new Jetty11HttpContainer(config, parentContext), start);
+        return createServer(uri, null, new JettyHttpContainer(config, parentContext), start);
     }
 
 
@@ -177,11 +177,11 @@
      *
      * @throws ProcessingException      in case of any failure when creating a new Jetty {@code Server} instance.
      * @throws IllegalArgumentException if {@code uri} is {@code null}.
-     * @see Jetty11HttpContainer
+     * @see JettyHttpContainer
      * @since 2.12
      */
     public static Server createServer(final URI uri, final ResourceConfig config, final Object parentContext) {
-        return createServer(uri, null, new Jetty11HttpContainer(config, parentContext), true);
+        return createServer(uri, null, new JettyHttpContainer(config, parentContext), true);
     }
 
     /**
@@ -208,7 +208,7 @@
     public static Server createServer(final URI uri, final SslContextFactory.Server sslContextFactory,
                                       final ResourceConfig config)
             throws ProcessingException {
-        final Jetty11HttpContainer container = ContainerFactory.createContainer(Jetty11HttpContainer.class, config);
+        final JettyHttpContainer container = ContainerFactory.createContainer(JettyHttpContainer.class, config);
         return createServer(uri, sslContextFactory, container, true);
     }
 
@@ -230,11 +230,11 @@
      *
      * @throws ProcessingException      in case of any failure when creating a new Jetty {@code Server} instance.
      * @throws IllegalArgumentException if {@code uri} is {@code null}.
-     * @see Jetty11HttpContainer
+     * @see JettyHttpContainer
      */
     public static Server createServer(final URI uri,
                                       final SslContextFactory.Server sslContextFactory,
-                                      final Jetty11HttpContainer handler,
+                                      final JettyHttpContainer handler,
                                       final boolean start) {
         if (uri == null) {
             throw new IllegalArgumentException(LocalizationMessages.URI_CANNOT_BE_NULL());
diff --git a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainerProvider.java b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java
similarity index 80%
rename from containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainerProvider.java
rename to containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java
index e741ab3..4b80825 100644
--- a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpContainerProvider.java
+++ b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpContainerProvider.java
@@ -14,13 +14,13 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import jakarta.ws.rs.ProcessingException;
 import jakarta.ws.rs.core.Application;
 
 import org.glassfish.jersey.internal.util.JdkVersion;
-import org.glassfish.jersey.jetty11.internal.LocalizationMessages;
+import org.glassfish.jersey.jetty.internal.LocalizationMessages;
 import org.glassfish.jersey.server.spi.ContainerProvider;
 
 /**
@@ -29,7 +29,7 @@
  * @author Arul Dhesiaseelan (aruld@acm.org)
  * @author Marek Potociar
  */
-public final class Jetty11HttpContainerProvider implements ContainerProvider {
+public final class JettyHttpContainerProvider implements ContainerProvider {
 
     public static final String HANDLER_NAME = "org.eclipse.jetty.server.Handler";
     @Override
@@ -37,8 +37,8 @@
         if (JdkVersion.getJdkVersion().getMajor() < 11) {
             throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED());
         }
-        if (type != null && (HANDLER_NAME.equalsIgnoreCase(type.getCanonicalName()) || Jetty11HttpContainer.class == type)) {
-            return type.cast(new Jetty11HttpContainer(application));
+        if (type != null && (HANDLER_NAME.equalsIgnoreCase(type.getCanonicalName()) || JettyHttpContainer.class == type)) {
+            return type.cast(new JettyHttpContainer(application));
         }
         return null;
     }
@@ -48,8 +48,8 @@
         if (JdkVersion.getJdkVersion().getMajor() < 11) {
             throw new ProcessingException(LocalizationMessages.NOT_SUPPORTED());
         }
-        if (type != null && (HANDLER_NAME.equalsIgnoreCase(type.getCanonicalName()) || Jetty11HttpContainer.class == type)) {
-            return type.cast(new Jetty11HttpContainer(application, parentContext));
+        if (type != null && (HANDLER_NAME.equalsIgnoreCase(type.getCanonicalName()) || JettyHttpContainer.class == type)) {
+            return type.cast(new JettyHttpContainer(application, parentContext));
         }
         return null;
     }
diff --git a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpServer.java b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpServer.java
similarity index 83%
rename from containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpServer.java
rename to containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpServer.java
index b6a06a5..dca75e0 100644
--- a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpServer.java
+++ b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpServer.java
@@ -15,7 +15,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import static jakarta.ws.rs.SeBootstrap.Configuration.SSLClientAuthentication.MANDATORY;
 import static jakarta.ws.rs.SeBootstrap.Configuration.SSLClientAuthentication.OPTIONAL;
@@ -39,22 +39,22 @@
  * @author Markus KARG (markus@headcrashing.eu)
  * @since 3.1.0
  */
-final class Jetty11HttpServer implements WebServer {
+final class JettyHttpServer implements WebServer {
 
-    private final Jetty11HttpContainer container;
+    private final JettyHttpContainer container;
 
     private final org.eclipse.jetty.server.Server httpServer;
 
-    Jetty11HttpServer(final Application application, final JerseySeBootstrapConfiguration configuration) {
-        this(ContainerFactory.createContainer(Jetty11HttpContainer.class, application), configuration);
+    JettyHttpServer(final Application application, final JerseySeBootstrapConfiguration configuration) {
+        this(ContainerFactory.createContainer(JettyHttpContainer.class, application), configuration);
     }
 
-    Jetty11HttpServer(final Class<? extends Application> applicationClass,
+    JettyHttpServer(final Class<? extends Application> applicationClass,
                       final JerseySeBootstrapConfiguration configuration) {
-        this(new Jetty11HttpContainer(applicationClass), configuration);
+        this(new JettyHttpContainer(applicationClass), configuration);
     }
 
-    Jetty11HttpServer(final Jetty11HttpContainer container, final JerseySeBootstrapConfiguration configuration) {
+    JettyHttpServer(final JettyHttpContainer container, final JerseySeBootstrapConfiguration configuration) {
         final SeBootstrap.Configuration.SSLClientAuthentication sslClientAuthentication = configuration
                 .sslClientAuthentication();
         final SslContextFactory.Server sslContextFactory;
@@ -67,7 +67,7 @@
             sslContextFactory = null;
         }
         this.container = container;
-        this.httpServer = Jetty11HttpContainerFactory.createServer(
+        this.httpServer = JettyHttpContainerFactory.createServer(
                 configuration.uri(true),
                 sslContextFactory,
                 this.container,
@@ -75,7 +75,7 @@
     }
 
     @Override
-    public final Jetty11HttpContainer container() {
+    public final JettyHttpContainer container() {
         return this.container;
     }
 
diff --git a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpServerProvider.java b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpServerProvider.java
similarity index 75%
rename from containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpServerProvider.java
rename to containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpServerProvider.java
index 8f2a29c..395a9f9 100644
--- a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/Jetty11HttpServerProvider.java
+++ b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/JettyHttpServerProvider.java
@@ -15,7 +15,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import jakarta.ws.rs.SeBootstrap;
 import jakarta.ws.rs.core.Application;
@@ -31,21 +31,21 @@
  * @author Markus KARG (markus@headcrashing.eu)
  * @since 3.1.0
  */
-public final class Jetty11HttpServerProvider implements WebServerProvider {
+public final class JettyHttpServerProvider implements WebServerProvider {
 
     @Override
     public <T extends WebServer> T createServer(final Class<T> type, final Application application,
                                                       final SeBootstrap.Configuration configuration) {
-        return WebServerProvider.isSupportedWebServer(Jetty11HttpServer.class, type, configuration)
-                ? type.cast(new Jetty11HttpServer(application, JerseySeBootstrapConfiguration.from(configuration)))
+        return WebServerProvider.isSupportedWebServer(JettyHttpServer.class, type, configuration)
+                ? type.cast(new JettyHttpServer(application, JerseySeBootstrapConfiguration.from(configuration)))
                 : null;
     }
 
     @Override
     public <T extends WebServer> T createServer(final Class<T> type, final Class<? extends Application> applicationClass,
                                                 final SeBootstrap.Configuration configuration) {
-        return WebServerProvider.isSupportedWebServer(Jetty11HttpServer.class, type, configuration)
-                ? type.cast(new Jetty11HttpServer(applicationClass, JerseySeBootstrapConfiguration.from(configuration)))
+        return WebServerProvider.isSupportedWebServer(JettyHttpServer.class, type, configuration)
+                ? type.cast(new JettyHttpServer(applicationClass, JerseySeBootstrapConfiguration.from(configuration)))
                 : null;
     }
 }
diff --git a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/package-info.java b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/package-info.java
similarity index 94%
rename from containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/package-info.java
rename to containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/package-info.java
index 6f1743c..27763d0 100644
--- a/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty11/package-info.java
+++ b/containers/jetty11-http/src/main/java/org/glassfish/jersey/jetty/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Jersey Jetty container classes.
  */
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
diff --git a/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider b/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider
index 634f74f..6b9cc26 100644
--- a/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider
+++ b/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider
@@ -1 +1 @@
-org.glassfish.jersey.jetty11.Jetty11HttpContainerProvider
+org.glassfish.jersey.jetty.JettyHttpContainerProvider
diff --git a/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.WebServerProvider b/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.WebServerProvider
index 341f882..641eaee 100644
--- a/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.WebServerProvider
+++ b/containers/jetty11-http/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.WebServerProvider
@@ -1 +1 @@
-org.glassfish.jersey.jetty11.Jetty11HttpServerProvider
+org.glassfish.jersey.jetty.JettyHttpServerProvider
diff --git a/containers/jetty11-http/src/main/resources/org/glassfish/jersey/jetty11/internal/localization.properties b/containers/jetty11-http/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties
similarity index 100%
rename from containers/jetty11-http/src/main/resources/org/glassfish/jersey/jetty11/internal/localization.properties
rename to containers/jetty11-http/src/main/resources/org/glassfish/jersey/jetty/internal/localization.properties
diff --git a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/AbstractJetty11ServerTester.java b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java
similarity index 94%
rename from containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/AbstractJetty11ServerTester.java
rename to containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java
index 14b3b6c..7519624 100644
--- a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/AbstractJetty11ServerTester.java
+++ b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/AbstractJettyServerTester.java
@@ -15,7 +15,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import java.net.URI;
 import java.security.AccessController;
@@ -40,9 +40,9 @@
  * @author Arul Dhesiaseelan (aruld at acm.org)
  * @author Miroslav Fuksa
  */
-public abstract class AbstractJetty11ServerTester {
+public abstract class AbstractJettyServerTester {
 
-    private static final Logger LOGGER = Logger.getLogger(AbstractJetty11ServerTester.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(AbstractJettyServerTester.class.getName());
 
     public static final String CONTEXT = "";
     private static final int DEFAULT_PORT = 0; // rather Jetty choose than 9998
@@ -103,7 +103,7 @@
 
     public void startServer(ResourceConfig config) {
         final URI baseUri = getBaseUri();
-        server = Jetty11HttpContainerFactory.createServer(baseUri, config);
+        server = JettyHttpContainerFactory.createServer(baseUri, config);
         LOGGER.log(Level.INFO, "Jetty-http server started on base uri: " + getBaseUri());
     }
 
diff --git a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/AsyncTest.java b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java
similarity index 98%
rename from containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/AsyncTest.java
rename to containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java
index 6862547..dfc66b0 100644
--- a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/AsyncTest.java
+++ b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/AsyncTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
@@ -42,7 +42,7 @@
  * @author Arul Dhesiaseelan (aruld at acm.org)
  * @author Michal Gajdos
  */
-public class AsyncTest extends AbstractJetty11ServerTester {
+public class AsyncTest extends AbstractJettyServerTester {
 
     @Path("/async")
     @SuppressWarnings("VoidMethodAnnotatedWithGET")
diff --git a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/ExceptionTest.java b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java
similarity index 97%
rename from containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/ExceptionTest.java
rename to containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java
index a4e7b60..03abb53 100644
--- a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/ExceptionTest.java
+++ b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/ExceptionTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import org.apache.http.HttpHost;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -40,7 +40,7 @@
 /**
  * @author Paul Sandoz
  */
-public class ExceptionTest extends AbstractJetty11ServerTester {
+public class ExceptionTest extends AbstractJettyServerTester {
     @Path("{status}")
     public static class ExceptionResource {
         @GET
diff --git a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/Jetty11HttpServerProviderTest.java b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/JettyHttpServerProviderTest.java
similarity index 92%
rename from containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/Jetty11HttpServerProviderTest.java
rename to containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/JettyHttpServerProviderTest.java
index 7fd2e29..cb363fb 100644
--- a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/Jetty11HttpServerProviderTest.java
+++ b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/JettyHttpServerProviderTest.java
@@ -15,7 +15,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import static java.lang.Boolean.FALSE;
 import static java.lang.Boolean.TRUE;
@@ -54,12 +54,12 @@
 import org.junit.jupiter.api.Timeout;
 
 /**
- * Unit tests for {@link Jetty11HttpServerProvider}.
+ * Unit tests for {@link JettyHttpServerProvider}.
  *
  * @author Markus KARG (markus@headcrashing.eu)
  * @since 3.1.0
  */
-public final class Jetty11HttpServerProviderTest {
+public final class JettyHttpServerProviderTest {
 
     @Test
     @Timeout(value = 15000L, unit = TimeUnit.MILLISECONDS)
@@ -81,7 +81,7 @@
     private void shouldProvideServer(final Object application, final Resource resource)
             throws InterruptedException, ExecutionException {
         // given
-        final WebServerProvider webServerProvider = new Jetty11HttpServerProvider();
+        final WebServerProvider webServerProvider = new JettyHttpServerProvider();
         final SeBootstrap.Configuration configuration = configuration(getPort(), FALSE);
 
         // when
@@ -100,10 +100,10 @@
         final Object stopResult = stop.toCompletableFuture().get();
 
         // then
-        assertThat(webServer, is(instanceOf(Jetty11HttpServer.class)));
+        assertThat(webServer, is(instanceOf(JettyHttpServer.class)));
         assertThat(nativeHandle, is(instanceOf(org.eclipse.jetty.server.Server.class)));
         assertThat(startResult, is(nullValue()));
-        assertThat(container, is(instanceOf(Jetty11HttpContainer.class)));
+        assertThat(container, is(instanceOf(JettyHttpContainer.class)));
         assertThat(port, is(greaterThan(0)));
         assertThat(entity, is(resource.toString()));
         assertThat(stopResult, is(nullValue()));
@@ -125,11 +125,11 @@
         }
     }
 
-    private static final Logger LOGGER = Logger.getLogger(Jetty11HttpServerProviderTest.class.getName());
+    private static final Logger LOGGER = Logger.getLogger(JettyHttpServerProviderTest.class.getName());
 
     private static final int DEFAULT_PORT = 0;
 
-    private static final int getPort() {
+    private static int getPort() {
         final String value = AccessController
                 .doPrivileged(PropertiesHelper.getSystemProperty("jersey.config.test.container.port"));
         if (value != null) {
@@ -155,7 +155,7 @@
     @Timeout(value = 15000L, unit = TimeUnit.MILLISECONDS)
     public final void shouldScanFreePort() throws InterruptedException, ExecutionException {
         // given
-        final WebServerProvider webServerProvider = new Jetty11HttpServerProvider();
+        final WebServerProvider webServerProvider = new JettyHttpServerProvider();
         final Application application = new Application();
         final SeBootstrap.Configuration configuration = configuration(SeBootstrap.Configuration.FREE_PORT, TRUE);
 
diff --git a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/LifecycleListenerTest.java b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java
similarity index 97%
rename from containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/LifecycleListenerTest.java
rename to containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java
index 9502475..133bd25 100644
--- a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/LifecycleListenerTest.java
+++ b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/LifecycleListenerTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.spi.AbstractContainerLifecycleListener;
@@ -40,7 +40,7 @@
  * @author Paul Sandoz
  * @author Marek Potociar
  */
-public class LifecycleListenerTest extends AbstractJetty11ServerTester {
+public class LifecycleListenerTest extends AbstractJettyServerTester {
 
     @Path("/one")
     public static class One {
diff --git a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/OptionsTest.java b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java
similarity index 95%
rename from containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/OptionsTest.java
rename to containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java
index 501289f..5d9c627 100644
--- a/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty11/OptionsTest.java
+++ b/containers/jetty11-http/src/test/java/org/glassfish/jersey/jetty/OptionsTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11;
+package org.glassfish.jersey.jetty;
 
 import org.junit.jupiter.api.Test;
 
@@ -28,7 +28,7 @@
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class OptionsTest extends AbstractJetty11ServerTester {
+public class OptionsTest extends AbstractJettyServerTester {
 
     @Path("helloworld")
     public static class HelloWorldResource {
diff --git a/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerFactory.java b/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerFactory.java
index b2248bf..ac8927c 100644
--- a/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerFactory.java
+++ b/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerFactory.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import org.eclipse.jetty.alpn.server.ALPNServerConnectionFactory;
 import org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory;
@@ -27,9 +27,9 @@
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.glassfish.jersey.jetty11.Jetty11HttpContainer;
-import org.glassfish.jersey.jetty11.Jetty11HttpContainerFactory;
-import org.glassfish.jersey.jetty11.Jetty11HttpContainerProvider;
+import org.glassfish.jersey.jetty.Jetty11HttpContainer;
+import org.glassfish.jersey.jetty.Jetty11HttpContainerFactory;
+import org.glassfish.jersey.jetty.Jetty11HttpContainerProvider;
 import org.glassfish.jersey.server.ContainerFactory;
 import org.glassfish.jersey.server.ResourceConfig;
 
diff --git a/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerProvider.java b/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerProvider.java
index a48c266..edc461e 100644
--- a/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerProvider.java
+++ b/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/Jetty11Http2ContainerProvider.java
@@ -14,18 +14,18 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import org.glassfish.jersey.internal.util.JdkVersion;
-import org.glassfish.jersey.jetty11.Jetty11HttpContainer;
-import org.glassfish.jersey.jetty11.Jetty11HttpContainerProvider;
-import org.glassfish.jersey.jetty11.internal.LocalizationMessages;
+import org.glassfish.jersey.jetty.Jetty11HttpContainer;
+import org.glassfish.jersey.jetty.Jetty11HttpContainerProvider;
+import org.glassfish.jersey.jetty.internal.LocalizationMessages;
 import org.glassfish.jersey.server.spi.ContainerProvider;
 
 import jakarta.ws.rs.ProcessingException;
 import jakarta.ws.rs.core.Application;
 
-import static org.glassfish.jersey.jetty11.Jetty11HttpContainerProvider.HANDLER_NAME;
+import static org.glassfish.jersey.jetty.Jetty11HttpContainerProvider.HANDLER_NAME;
 
 public final class Jetty11Http2ContainerProvider implements ContainerProvider {
 
diff --git a/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/package-info.java b/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/package-info.java
index 6f005f1..a402b27 100644
--- a/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/package-info.java
+++ b/containers/jetty11-http2/src/main/java/org/glassfish/jersey/jetty11/http2/package-info.java
@@ -17,4 +17,4 @@
 /**
  * Jersey Jetty HTTP2 container classes.
  */
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
diff --git a/containers/jetty11-http2/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider b/containers/jetty11-http2/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider
index ba63b3d..2cd5dda 100644
--- a/containers/jetty11-http2/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider
+++ b/containers/jetty11-http2/src/main/resources/META-INF/services/org.glassfish.jersey.server.spi.ContainerProvider
@@ -1 +1 @@
-org.glassfish.jersey.jetty11.http2.Jetty11Http2ContainerProvider
+org.glassfish.jersey.jetty.http2.Jetty11Http2ContainerProvider
diff --git a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AbstractJetty11ServerTester.java b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AbstractJetty11ServerTester.java
index 037503e..1911add 100644
--- a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AbstractJetty11ServerTester.java
+++ b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AbstractJetty11ServerTester.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import java.net.URI;
 import java.security.AccessController;
diff --git a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AsyncTest.java b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AsyncTest.java
index e2dada8..0a3774b 100644
--- a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AsyncTest.java
+++ b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/AsyncTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
diff --git a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/ExceptionTest.java b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/ExceptionTest.java
index ce441bf..6f0ad22 100644
--- a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/ExceptionTest.java
+++ b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/ExceptionTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import org.apache.http.HttpHost;
 import org.apache.http.client.methods.CloseableHttpResponse;
diff --git a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/LifecycleListenerTest.java b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/LifecycleListenerTest.java
index 2236d25..517d6e2 100644
--- a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/LifecycleListenerTest.java
+++ b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/LifecycleListenerTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.server.spi.AbstractContainerLifecycleListener;
diff --git a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/OptionsTest.java b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/OptionsTest.java
index c5e07cf..d5b7cc5 100644
--- a/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/OptionsTest.java
+++ b/containers/jetty11-http2/src/test/java/org/glassfish/jersey/jetty11/http2/OptionsTest.java
@@ -14,7 +14,7 @@
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
 
-package org.glassfish.jersey.jetty11.http2;
+package org.glassfish.jersey.jetty.http2;
 
 import org.junit.jupiter.api.Test;
 
diff --git a/test-framework/providers/jetty11-http2/src/main/java/org/glassfish/jersey/test/jetty11/http2/Jetty11Http2TestContainerFactory.java b/test-framework/providers/jetty11-http2/src/main/java/org/glassfish/jersey/test/jetty11/http2/Jetty11Http2TestContainerFactory.java
index 9b347f9..867db08 100644
--- a/test-framework/providers/jetty11-http2/src/main/java/org/glassfish/jersey/test/jetty11/http2/Jetty11Http2TestContainerFactory.java
+++ b/test-framework/providers/jetty11-http2/src/main/java/org/glassfish/jersey/test/jetty11/http2/Jetty11Http2TestContainerFactory.java
@@ -23,7 +23,7 @@
 import jakarta.ws.rs.core.UriBuilder;
 
 import org.glassfish.jersey.client.ClientConfig;
-import org.glassfish.jersey.jetty11.http2.Jetty11Http2ContainerFactory;
+import org.glassfish.jersey.jetty.http2.Jetty11Http2ContainerFactory;
 import org.glassfish.jersey.test.DeploymentContext;
 import org.glassfish.jersey.test.spi.TestContainer;
 import org.glassfish.jersey.test.spi.TestContainerException;
diff --git a/test-framework/providers/jetty11-http2/src/test/java/org/glassfish/jersey/test/jetty11/http2/Jetty11ContainerTest.java b/test-framework/providers/jetty11-http2/src/test/java/org/glassfish/jersey/test/jetty11/http2/Jetty11ContainerTest.java
index 1ce10d0..0ec4c06 100644
--- a/test-framework/providers/jetty11-http2/src/test/java/org/glassfish/jersey/test/jetty11/http2/Jetty11ContainerTest.java
+++ b/test-framework/providers/jetty11-http2/src/test/java/org/glassfish/jersey/test/jetty11/http2/Jetty11ContainerTest.java
@@ -26,8 +26,8 @@
 import org.glassfish.jersey.inject.hk2.DelayedHk2InjectionManager;
 import org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager;
 import org.glassfish.jersey.internal.inject.InjectionManager;
-import org.glassfish.jersey.jetty11.http2.Jetty11Http2ContainerFactory;
-import org.glassfish.jersey.jetty11.Jetty11HttpContainer;
+import org.glassfish.jersey.jetty.http2.Jetty11Http2ContainerFactory;
+import org.glassfish.jersey.jetty.Jetty11HttpContainer;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
 
