Merge branch 'master'
diff --git a/.asf.yaml b/.asf.yaml
new file mode 100644
index 0000000..038cd99
--- /dev/null
+++ b/.asf.yaml
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+github:
+  dependabot_alerts:  false 
+  dependabot_updates: false
diff --git a/integration-tests/app-groovy/pom.xml b/integration-tests/app-groovy/pom.xml
index bc21ba2..59a5e82 100644
--- a/integration-tests/app-groovy/pom.xml
+++ b/integration-tests/app-groovy/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>integration-tests</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -30,9 +30,9 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.codehaus.groovy</groupId>
+      <groupId>org.apache.groovy</groupId>
       <artifactId>groovy</artifactId>
-      <version>3.0.7</version>
+      <version>4.0.20</version>
     </dependency>
     <dependency>
       <groupId>org.apache.meecrowave</groupId>
@@ -52,7 +52,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.8.1</version>
+        <version>3.13.0</version>
         <configuration>
           <compilerId>groovy-eclipse-compiler</compilerId>
         </configuration>
@@ -60,12 +60,12 @@
           <dependency>
             <groupId>org.codehaus.groovy</groupId>
             <artifactId>groovy-eclipse-compiler</artifactId>
-            <version>2.9.2-01</version>
+            <version>3.7.0</version>
           </dependency>
           <dependency>
             <groupId>org.codehaus.groovy</groupId>
             <artifactId>groovy-eclipse-batch</artifactId>
-            <version>2.5.6-01</version>
+            <version>3.0.8-01</version>
           </dependency>
         </dependencies>
       </plugin>
diff --git a/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy b/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy
index a529a5e..100ffe6 100644
--- a/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy
+++ b/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy
@@ -23,7 +23,7 @@
 
 import javax.ws.rs.client.ClientBuilder
 
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN_TYPE
 import static org.junit.Assert.assertEquals
 
 class SimpleServiceTest {
diff --git a/integration-tests/beanvalidation/pom.xml b/integration-tests/beanvalidation/pom.xml
index 0a9400d..36e9687 100644
--- a/integration-tests/beanvalidation/pom.xml
+++ b/integration-tests/beanvalidation/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>integration-tests</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -66,22 +66,4 @@
     </plugins>
   </build>
 
-  <profiles>
-    <profile>
-      <id>java11</id>
-      <activation>
-        <jdk>11</jdk>
-      </activation>
-      <dependencies>
-        <dependency>
-          <groupId>javax.xml.bind</groupId>
-          <artifactId>jaxb-api</artifactId>
-        </dependency>
-        <dependency>
-          <groupId>com.sun.xml.bind</groupId>
-          <artifactId>jaxb-impl</artifactId>
-        </dependency>
-      </dependencies>
-    </profile>
-  </profiles>
 </project>
diff --git a/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java b/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java
index c031e40..732ed02 100644
--- a/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java
+++ b/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java
@@ -18,14 +18,14 @@
  */
 package org.apache.meecrowave.beanvalidation.itest;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotNull;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("test")
 @ApplicationScoped
diff --git a/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java b/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java
index 9ac8694..7abb5c1 100644
--- a/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java
+++ b/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java
@@ -21,11 +21,11 @@
 import org.apache.meecrowave.Meecrowave;
 import org.junit.Test;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.Response;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.Response;
 
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
 import static org.junit.Assert.assertEquals;
 
 public class ServiceTest {
diff --git a/integration-tests/dispatch-jsp/pom.xml b/integration-tests/dispatch-jsp/pom.xml
index 4740e37..abf5510 100644
--- a/integration-tests/dispatch-jsp/pom.xml
+++ b/integration-tests/dispatch-jsp/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>integration-tests</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpoint.java b/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpoint.java
index 2191113..fc058ef 100644
--- a/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpoint.java
+++ b/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpoint.java
@@ -20,11 +20,11 @@
 
 import static org.apache.meecrowave.it.jsp.dispatch.Model.view;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("dispatch")
 @ApplicationScoped
diff --git a/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/ModelRenderer.java b/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/ModelRenderer.java
index b9a5fac..0745611 100644
--- a/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/ModelRenderer.java
+++ b/integration-tests/dispatch-jsp/src/main/java/org/apache/meecrowave/it/jsp/dispatch/ModelRenderer.java
@@ -23,18 +23,18 @@
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
-import javax.enterprise.context.Dependent;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.InternalServerErrorException;
-import javax.ws.rs.Produces;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.ext.MessageBodyWriter;
-import javax.ws.rs.ext.Provider;
+import jakarta.enterprise.context.Dependent;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.ws.rs.InternalServerErrorException;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.ext.MessageBodyWriter;
+import jakarta.ws.rs.ext.Provider;
 
 @Provider
 @Dependent
diff --git a/integration-tests/dispatch-jsp/src/test/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpointTest.java b/integration-tests/dispatch-jsp/src/test/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpointTest.java
index 4a85ea8..b2b8409 100644
--- a/integration-tests/dispatch-jsp/src/test/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpointTest.java
+++ b/integration-tests/dispatch-jsp/src/test/java/org/apache/meecrowave/it/jsp/dispatch/DispatchEndpointTest.java
@@ -18,11 +18,11 @@
  */
 package org.apache.meecrowave.it.jsp.dispatch;
 
-import static javax.ws.rs.core.MediaType.TEXT_HTML_TYPE;
+import static jakarta.ws.rs.core.MediaType.TEXT_HTML_TYPE;
 import static org.junit.Assert.assertEquals;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
 
 import org.apache.meecrowave.Meecrowave;
 import org.junit.Test;
diff --git a/integration-tests/no-cxf/pom.xml b/integration-tests/no-cxf/pom.xml
index d496477..5f23c98 100644
--- a/integration-tests/no-cxf/pom.xml
+++ b/integration-tests/no-cxf/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>integration-tests</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/integration-tests/no-cxf/src/test/java/org/apache/meecrowave/nocxf/itest/RunWithoutCxfTest.java b/integration-tests/no-cxf/src/test/java/org/apache/meecrowave/nocxf/itest/RunWithoutCxfTest.java
index e1b10a4..640cb4f 100644
--- a/integration-tests/no-cxf/src/test/java/org/apache/meecrowave/nocxf/itest/RunWithoutCxfTest.java
+++ b/integration-tests/no-cxf/src/test/java/org/apache/meecrowave/nocxf/itest/RunWithoutCxfTest.java
@@ -26,9 +26,9 @@
 import java.io.StringWriter;
 import java.net.URL;
 
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.meecrowave.Meecrowave;
 import org.junit.Test;
diff --git a/integration-tests/pom.xml b/integration-tests/pom.xml
index 31b3369..0335c76 100644
--- a/integration-tests/pom.xml
+++ b/integration-tests/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -37,7 +37,9 @@
   </properties>
 
   <modules>
+<!--X TODO re-enable
     <module>app-groovy</module>
+-->
     <module>beanvalidation</module>
     <module>webservices</module>
     <module>ssl</module>
diff --git a/integration-tests/sse/pom.xml b/integration-tests/sse/pom.xml
index f95ccbf..e34ab76 100644
--- a/integration-tests/sse/pom.xml
+++ b/integration-tests/sse/pom.xml
@@ -21,7 +21,7 @@
     <parent>
         <artifactId>integration-tests</artifactId>
         <groupId>org.apache.meecrowave</groupId>
-        <version>1.2.16-SNAPSHOT</version>
+        <version>2.0.0-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
diff --git a/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/NewsService.java b/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/NewsService.java
index 624cf96..07c3cda 100644
--- a/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/NewsService.java
+++ b/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/NewsService.java
@@ -22,17 +22,17 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.IntStream;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.sse.Sse;
-import javax.ws.rs.sse.SseEventSink;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.sse.Sse;
+import jakarta.ws.rs.sse.SseEventSink;
 
 @Path("/news")
 @ApplicationScoped
diff --git a/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/RSApplication.java b/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/RSApplication.java
index d1dbd40..29f7fc3 100644
--- a/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/RSApplication.java
+++ b/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/sse/RSApplication.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.tests.sse;
 
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
+import jakarta.ws.rs.ApplicationPath;
+import jakarta.ws.rs.core.Application;
 
 @ApplicationPath("/rs")
 public class RSApplication extends Application {
diff --git a/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/ws/ChatWS.java b/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/ws/ChatWS.java
index c8abb9e..8132f1c 100644
--- a/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/ws/ChatWS.java
+++ b/integration-tests/sse/src/main/java/org/apache/meecrowave/tests/ws/ChatWS.java
@@ -21,16 +21,16 @@
 import java.io.IOException;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.websocket.CloseReason;
-import javax.websocket.CloseReason.CloseCodes;
-import javax.websocket.EncodeException;
-import javax.websocket.OnClose;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-import javax.websocket.server.ServerEndpoint;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.websocket.CloseReason;
+import jakarta.websocket.CloseReason.CloseCodes;
+import jakarta.websocket.EncodeException;
+import jakarta.websocket.OnClose;
+import jakarta.websocket.OnMessage;
+import jakarta.websocket.OnOpen;
+import jakarta.websocket.Session;
+import jakarta.websocket.server.ServerEndpoint;
 
 import org.apache.johnzon.websocket.jsr.JsrObjectDecoder;
 import org.apache.johnzon.websocket.jsr.JsrObjectEncoder;
diff --git a/integration-tests/sse/src/main/resources/META-INF/services/javax.ws.rs.sse.SseEventSource.Builder b/integration-tests/sse/src/main/resources/META-INF/services/jakarta.ws.rs.sse.SseEventSource.Builder
similarity index 100%
rename from integration-tests/sse/src/main/resources/META-INF/services/javax.ws.rs.sse.SseEventSource.Builder
rename to integration-tests/sse/src/main/resources/META-INF/services/jakarta.ws.rs.sse.SseEventSource.Builder
diff --git a/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/sse/SSETest.java b/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/sse/SSETest.java
index 3205a4f..7f0b700 100644
--- a/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/sse/SSETest.java
+++ b/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/sse/SSETest.java
@@ -22,13 +22,13 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import javax.json.JsonObject;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.sse.SseEventSource;
+import jakarta.json.JsonObject;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.WebTarget;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.sse.SseEventSource;
 
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.junit.MeecrowaveRule;
diff --git a/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/ws/WSTest.java b/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/ws/WSTest.java
index 276b119..ad3b95e 100644
--- a/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/ws/WSTest.java
+++ b/integration-tests/sse/src/test/java/org/apache/meecrowave/tests/ws/WSTest.java
@@ -27,18 +27,18 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import javax.json.Json;
-import javax.json.JsonObject;
-import javax.websocket.ClientEndpoint;
-import javax.websocket.CloseReason;
-import javax.websocket.ContainerProvider;
-import javax.websocket.DeploymentException;
-import javax.websocket.EncodeException;
-import javax.websocket.OnClose;
-import javax.websocket.OnMessage;
-import javax.websocket.OnOpen;
-import javax.websocket.Session;
-import javax.websocket.WebSocketContainer;
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.websocket.ClientEndpoint;
+import jakarta.websocket.CloseReason;
+import jakarta.websocket.ContainerProvider;
+import jakarta.websocket.DeploymentException;
+import jakarta.websocket.EncodeException;
+import jakarta.websocket.OnClose;
+import jakarta.websocket.OnMessage;
+import jakarta.websocket.OnOpen;
+import jakarta.websocket.Session;
+import jakarta.websocket.WebSocketContainer;
 
 import org.apache.johnzon.websocket.jsr.JsrObjectDecoder;
 import org.apache.johnzon.websocket.jsr.JsrObjectEncoder;
diff --git a/integration-tests/ssl/pom.xml b/integration-tests/ssl/pom.xml
index 2e7dc46..21b9a5c 100644
--- a/integration-tests/ssl/pom.xml
+++ b/integration-tests/ssl/pom.xml
@@ -13,7 +13,7 @@
   <parent>
     <artifactId>integration-tests</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/integration-tests/ssl/src/main/java/org/apache/meecrowave/tests/ssl/HelloWorld.java b/integration-tests/ssl/src/main/java/org/apache/meecrowave/tests/ssl/HelloWorld.java
index 36d87c6..9401dce 100644
--- a/integration-tests/ssl/src/main/java/org/apache/meecrowave/tests/ssl/HelloWorld.java
+++ b/integration-tests/ssl/src/main/java/org/apache/meecrowave/tests/ssl/HelloWorld.java
@@ -18,11 +18,11 @@
  */
 package org.apache.meecrowave.tests.ssl;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("/")
 @ApplicationScoped
diff --git a/integration-tests/ssl/src/test/java/org/apache/meecrowave/tests/ssl/TestSetup.java b/integration-tests/ssl/src/test/java/org/apache/meecrowave/tests/ssl/TestSetup.java
index ee80787..ce0f712 100644
--- a/integration-tests/ssl/src/test/java/org/apache/meecrowave/tests/ssl/TestSetup.java
+++ b/integration-tests/ssl/src/test/java/org/apache/meecrowave/tests/ssl/TestSetup.java
@@ -2,9 +2,9 @@
 
 import java.util.concurrent.TimeUnit;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
 
 public class TestSetup {
     protected static String callJaxrsService(int portNumber) {
diff --git a/integration-tests/webservices/pom.xml b/integration-tests/webservices/pom.xml
index ea193aa..8aaf363 100644
--- a/integration-tests/webservices/pom.xml
+++ b/integration-tests/webservices/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>integration-tests</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java b/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java
index 1c34ba5..11edd69 100644
--- a/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java
+++ b/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java
@@ -18,7 +18,7 @@
  */
 package org.apache.meecrowave.tests.webservices;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 import javax.jws.WebService;
 
 @WebService
diff --git a/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java b/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java
index 13916d7..5e0f33d 100644
--- a/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java
+++ b/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java
@@ -18,7 +18,7 @@
  */
 package org.apache.meecrowave.tests.webservices;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 import javax.jws.WebService;
 
 @WebService
diff --git a/meecrowave-arquillian/pom.xml b/meecrowave-arquillian/pom.xml
index a2f32da..ac9bce9 100644
--- a/meecrowave-arquillian/pom.xml
+++ b/meecrowave-arquillian/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/meecrowave-arquillian/src/test/java/org/app/Endpoint.java b/meecrowave-arquillian/src/test/java/org/app/Endpoint.java
index d8dbc8c..3f56fc9 100644
--- a/meecrowave-arquillian/src/test/java/org/app/Endpoint.java
+++ b/meecrowave-arquillian/src/test/java/org/app/Endpoint.java
@@ -18,12 +18,12 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("test")
 @ApplicationScoped
diff --git a/meecrowave-arquillian/src/test/java/org/app/Injectable.java b/meecrowave-arquillian/src/test/java/org/app/Injectable.java
index 2b8cc7f..d31f7f8 100644
--- a/meecrowave-arquillian/src/test/java/org/app/Injectable.java
+++ b/meecrowave-arquillian/src/test/java/org/app/Injectable.java
@@ -18,7 +18,7 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
 public class Injectable {
diff --git a/meecrowave-arquillian/src/test/java/org/app/RsApp.java b/meecrowave-arquillian/src/test/java/org/app/RsApp.java
index 1463b98..e47452d 100644
--- a/meecrowave-arquillian/src/test/java/org/app/RsApp.java
+++ b/meecrowave-arquillian/src/test/java/org/app/RsApp.java
@@ -18,9 +18,9 @@
  */
 package org.app;
 
-import javax.enterprise.context.Dependent;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
+import jakarta.enterprise.context.Dependent;
+import jakarta.ws.rs.ApplicationPath;
+import jakarta.ws.rs.core.Application;
 
 @Dependent
 @ApplicationPath("api")
diff --git a/meecrowave-core/pom.xml b/meecrowave-core/pom.xml
index fd062f5..6b7a02d 100644
--- a/meecrowave-core/pom.xml
+++ b/meecrowave-core/pom.xml
@@ -18,12 +18,13 @@
     under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <artifactId>meecrowave-core</artifactId>
   <name>Meecrowave :: Core</name>
@@ -59,6 +60,15 @@
     </dependency>
 
     <dependency>
+      <!-- just to trigger the build order -->
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-test-app</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+      <type>war</type>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.tomcat</groupId>
       <artifactId>tomcat-jaspic-api</artifactId>
     </dependency>
@@ -104,6 +114,11 @@
       <artifactId>openwebbeans-spi</artifactId>
       <version>${openwebbeans.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.openwebbeans</groupId>
+      <artifactId>openwebbeans-impl</artifactId>
+      <version>${openwebbeans.version}</version>
+    </dependency>
     <dependency> <!-- not that if a user adds owb-se this should get excluded -->
       <groupId>org.apache.openwebbeans</groupId>
       <artifactId>openwebbeans-web</artifactId>
@@ -322,9 +337,8 @@
       <scope>test</scope>
     </dependency>
     <dependency> <!-- for multiparttest on java > 8 -->
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-activation_1.1_spec</artifactId>
-      <version>1.1</version>
+      <groupId>jakarta.activation</groupId>
+      <artifactId>jakarta.activation-api</artifactId>
       <scope>test</scope>
     </dependency>
   </dependencies>
@@ -363,12 +377,32 @@
               </artifactItems>
             </configuration>
           </execution>
+
+          <execution>
+            <id>unpack-test-app</id>
+            <phase>process-test-classes</phase>
+            <goals>
+              <goal>unpack</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.meecrowave</groupId>
+                  <artifactId>meecrowave-test-app</artifactId>
+                  <version>${project.version}</version>
+                  <type>war</type>
+                  <overWrite>true</overWrite>
+                  <outputDirectory>${project.build.directory}/testapp-out</outputDirectory>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.8.1</version>
+        <version>3.13.0</version>
         <executions>
           <execution>
             <id>log4j-plugin-processor</id>
@@ -399,8 +433,11 @@
             <configuration>
               <shadedClassifierName>runner</shadedClassifierName>
               <shadedArtifactAttached>true</shadedArtifactAttached>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
+<!--
               <dependencyReducedPomLocation>${project.build.directory}/reduced-pom-bundle.xml
               </dependencyReducedPomLocation>
+-->
               <transformers>
                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                   <mainClass>org.apache.meecrowave.runner.Cli</mainClass>
@@ -452,6 +489,7 @@
             <configuration>
               <shadedClassifierName>runner-light</shadedClassifierName>
               <shadedArtifactAttached>true</shadedArtifactAttached>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
               <dependencyReducedPomLocation>${project.build.directory}/reduced-pom-bundle-light.xml
               </dependencyReducedPomLocation>
               <transformers>
@@ -483,8 +521,8 @@
                     <exclude>META-INF/cxf/cxf*.xml</exclude>
                     <exclude>META-INF/cxf/cxf*.fixml</exclude>
                     <exclude>schemas/**</exclude> <!-- cxf -->
-                    <exclude>javax/servlet/resources/**</exclude> <!-- tomcat-servlet-api -->
-                    <exclude>javax/servlet/jsp/resources/**</exclude>
+                    <exclude>jakarta/servlet/resources/**</exclude> <!-- tomcat-servlet-api -->
+                    <exclude>jakarta/servlet/jsp/resources/**</exclude>
                     <exclude>**/osgi/**</exclude> <!-- cxf and log4j -->
                     <exclude>META-INF/maven</exclude> <!-- maven built artifacts -->
                     <exclude>META-INF/*.SF</exclude>
@@ -518,6 +556,7 @@
             <configuration>
               <shadedClassifierName>servlet</shadedClassifierName>
               <shadedArtifactAttached>true</shadedArtifactAttached>
+              <createDependencyReducedPom>false</createDependencyReducedPom>
               <dependencyReducedPomLocation>${project.build.directory}/reduced-pom-bundle-servlet.xml
               </dependencyReducedPomLocation>
               <transformers>
@@ -531,8 +570,8 @@
                 <filter>
                   <artifact>*:*</artifact>
                   <excludes>
-                    <exclude>javax/servlet/resources/**</exclude> <!-- tomcat-servlet-api: to discuss if kepts or not -->
-                    <exclude>javax/servlet/jsp/resources/**</exclude>
+                    <exclude>jakarta/servlet/resources/**</exclude> <!-- tomcat-servlet-api: to discuss if kepts or not -->
+                    <exclude>jakarta/servlet/jsp/resources/**</exclude>
                     <exclude>META-INF/maven</exclude> <!-- maven built artifacts -->
                     <exclude>META-INF/*.SF</exclude>
                     <exclude>META-INF/*.DSA</exclude>
@@ -563,131 +602,7 @@
               </relocations>
             </configuration>
           </execution>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <shadedArtifactAttached>true</shadedArtifactAttached>
-              <shadedClassifierName>jakarta</shadedClassifierName>
-              <createDependencyReducedPom>false</createDependencyReducedPom>
-              <transformers>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-                <transformer implementation="org.apache.maven.plugins.shade.resource.properties.OpenWebBeansPropertiesTransformer" />
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                  <mainClass>org.apache.meecrowave.runner.Cli</mainClass>
-                </transformer>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                  <resource>META-INF/cxf/bus-extensions.txt</resource>
-                </transformer>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
-                  <resource>log4j2.component.properties</resource>
-                </transformer>
-                <transformer implementation="com.github.edwgiz.maven_shade_plugin.log4j2_cache_transformer.PluginsCacheFileTransformer" />
-              </transformers>
-              <filters>
-                <filter>
-                  <artifact>org.apache.logging.log4j:log4j-api</artifact>
-                  <excludes>
-                    <exclude>META-INF/versions/**</exclude>
-                  </excludes>
-                </filter>
-                <filter>
-                  <artifact>*:*</artifact>
-                  <excludes>
-                    <exclude>OSGI-INF/**</exclude>
-                    <exclude>META-INF/cxf/cxf*.xml</exclude>
-                    <exclude>META-INF/maven</exclude> <!-- maven built artifacts -->
-                    <exclude>META-INF/*.SF</exclude>
-                    <exclude>META-INF/*.DSA</exclude>
-                    <exclude>META-INF/*.RSA</exclude>
-                    <exclude>META-INF/LICENSE.txt</exclude>
-                    <exclude>META-INF/LICENSE</exclude>
-                    <exclude>META-INF/NOTICE.txt</exclude>
-                    <exclude>META-INF/NOTICE</exclude>
-                  </excludes>
-                </filter>
-              </filters>
-              <relocations>
-                <relocation>
-                  <pattern>javax.activation</pattern>
-                  <shadedPattern>jakarta.activation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.annotation</pattern>
-                  <shadedPattern>jakarta.annotation</shadedPattern>
-                  <excludes>
-                    <exclude>javax.annotation.processing.**</exclude>
-                  </excludes>
-                </relocation>
-                <relocation>
-                  <pattern>javax.el</pattern>
-                  <shadedPattern>jakarta.el</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.enterprise</pattern>
-                  <shadedPattern>jakarta.enterprise</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.decorator</pattern>
-                  <shadedPattern>jakarta.decorator</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.inject</pattern>
-                  <shadedPattern>jakarta.inject</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.interceptor</pattern>
-                  <shadedPattern>jakarta.interceptor</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.servlet</pattern>
-                  <shadedPattern>jakarta.servlet</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.transaction</pattern>
-                  <shadedPattern>jakarta.transaction</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.validation</pattern>
-                  <shadedPattern>jakarta.validation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.persistence</pattern>
-                  <shadedPattern>jakarta.persistence</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.faces</pattern>
-                  <shadedPattern>jakarta.faces</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.ejb</pattern>
-                  <shadedPattern>jakarta.ejb</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.ws</pattern>
-                  <shadedPattern>jakarta.ws</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.cache</pattern>
-                  <shadedPattern>jakarta.cache</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.jms</pattern>
-                  <shadedPattern>jakarta.jms</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.json</pattern>
-                  <shadedPattern>jakarta.json</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.resource</pattern>
-                  <shadedPattern>jakarta.resource</shadedPattern>
-                </relocation>
-              </relocations>
-            </configuration>
-          </execution>
+
         </executions>
         <dependencies>
           <dependency>
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java b/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
index 4bb064d..e70a737 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
@@ -67,13 +67,13 @@
 
 import javax.crypto.Cipher;
 import javax.crypto.spec.SecretKeySpec;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
-import javax.enterprise.inject.spi.InjectionTarget;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.SessionCookieConfig;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.InjectionTarget;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.SessionCookieConfig;
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
@@ -659,26 +659,29 @@
             if (!buildSslHostConfig.isEmpty()) {
                 createDirectory(base, "conf");
             }
-            buildSslHostConfig.forEach(sslHostConf -> {
-                if (isCertificateFromClasspath(sslHostConf.getCertificateKeystoreFile())) {
-                    copyCertificateToConfDir(sslHostConf.getCertificateKeystoreFile());
-                    sslHostConf.setCertificateKeystoreFile(base.getAbsolutePath() + "/conf/" + sslHostConf.getCertificateKeystoreFile());
-                }
-                if (isCertificateFromClasspath(sslHostConf.getCertificateKeyFile())) {
-                    copyCertificateToConfDir(sslHostConf.getCertificateKeyFile());
-                    sslHostConf.setCertificateKeyFile(base.getAbsolutePath() + "/conf/" + sslHostConf.getCertificateKeyFile());
-                    copyCertificateToConfDir(sslHostConf.getCertificateFile());
-                    sslHostConf.setCertificateFile(base.getAbsolutePath() + "/conf/" + sslHostConf.getCertificateFile());
-                }
+            for (SSLHostConfig sslHostConf : buildSslHostConfig) {
+                sslHostConf.getCertificates().forEach(cert -> {
+                    if (isCertificateFromClasspath(cert.getCertificateKeystoreFile())) {
+                        copyCertificateToConfDir(cert.getCertificateKeystoreFile());
+                        cert.setCertificateKeystoreFile(base.getAbsolutePath() + "/conf/" + cert.getCertificateKeystoreFile());
+                    }
+                    if (isCertificateFromClasspath(cert.getCertificateKeyFile())) {
+                        copyCertificateToConfDir(cert.getCertificateKeyFile());
+                        cert.setCertificateKeyFile(base.getAbsolutePath() + "/conf/" + cert.getCertificateKeyFile());
+                        copyCertificateToConfDir(cert.getCertificateFile());
+                        cert.setCertificateFile(base.getAbsolutePath() + "/conf/" + cert.getCertificateFile());
+                    }
+                    if (isCertificateFromClasspath(cert.getCertificateChainFile())) {
+                        copyCertificateToConfDir(cert.getCertificateChainFile());
+                        cert.setCertificateChainFile(base.getAbsolutePath() + "/conf/" + cert.getCertificateChainFile());
+                    }
+                });
+
                 if (isCertificateFromClasspath(sslHostConf.getTruststoreFile())) {
                     copyCertificateToConfDir(sslHostConf.getTruststoreFile());
                     sslHostConf.setTruststoreFile(base.getAbsolutePath() + "/conf/" + sslHostConf.getTruststoreFile());
                 }
-                if (isCertificateFromClasspath(sslHostConf.getCertificateChainFile())) {
-                    copyCertificateToConfDir(sslHostConf.getCertificateChainFile());
-                    sslHostConf.setCertificateChainFile(base.getAbsolutePath() + "/conf/" + sslHostConf.getCertificateChainFile());
-                }
-            });
+            }
 
             buildSslHostConfig.forEach(httpsConnector::addSslHostConfig);
 
@@ -962,7 +965,7 @@
     public <T> AutoCloseable inject(final T instance) {
         final BeanManager bm = CDI.current().getBeanManager();
         final AnnotatedType<?> annotatedType = bm.createAnnotatedType(instance.getClass());
-        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final InjectionTarget injectionTarget = bm.getInjectionTargetFactory(annotatedType).createInjectionTarget(null);
         final CreationalContext<Object> creationalContext = bm.createCreationalContext(null);
         injectionTarget.inject(instance, creationalContext);
         return creationalContext::release;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java
index dda9bcb..af4bfa4 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java
@@ -33,8 +33,8 @@
 import org.apache.webbeans.web.context.WebContextsService;
 import org.apache.xbean.finder.filter.Filter;
 
-import javax.enterprise.inject.se.SeContainer;
-import javax.enterprise.inject.se.SeContainerInitializer;
+import jakarta.enterprise.inject.se.SeContainer;
+import jakarta.enterprise.inject.se.SeContainerInitializer;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.Map;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java
index 00c9b87..dbbd6bc 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java
@@ -20,7 +20,7 @@
 
 import org.apache.openwebbeans.se.SeContainerSelector;
 
-import javax.enterprise.inject.se.SeContainerInitializer;
+import jakarta.enterprise.inject.se.SeContainerInitializer;
 
 public class MeecrowaveSeContainerSelector implements SeContainerSelector {
     @Override
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/configuration/Configuration.java b/meecrowave-core/src/main/java/org/apache/meecrowave/configuration/Configuration.java
index f5bf2ef..e369db3 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/configuration/Configuration.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/configuration/Configuration.java
@@ -41,7 +41,7 @@
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
 
-import javax.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContainerInitializer;
 
 import org.apache.catalina.Context;
 import org.apache.catalina.Realm;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/ConfigurableBus.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/ConfigurableBus.java
index 2abd216..e0336c8 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/ConfigurableBus.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/ConfigurableBus.java
@@ -38,34 +38,34 @@
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonBuilderFactory;
-import javax.json.JsonMergePatch;
-import javax.json.JsonNumber;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonPatch;
-import javax.json.JsonPatchBuilder;
-import javax.json.JsonPointer;
-import javax.json.JsonReader;
-import javax.json.JsonReaderFactory;
-import javax.json.JsonString;
-import javax.json.JsonStructure;
-import javax.json.JsonValue;
-import javax.json.JsonWriter;
-import javax.json.JsonWriterFactory;
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbBuilder;
-import javax.json.spi.JsonProvider;
-import javax.json.stream.JsonGenerator;
-import javax.json.stream.JsonGeneratorFactory;
-import javax.json.stream.JsonParser;
-import javax.json.stream.JsonParserFactory;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.ext.Provider;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonArrayBuilder;
+import jakarta.json.JsonBuilderFactory;
+import jakarta.json.JsonMergePatch;
+import jakarta.json.JsonNumber;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonPatch;
+import jakarta.json.JsonPatchBuilder;
+import jakarta.json.JsonPointer;
+import jakarta.json.JsonReader;
+import jakarta.json.JsonReaderFactory;
+import jakarta.json.JsonString;
+import jakarta.json.JsonStructure;
+import jakarta.json.JsonValue;
+import jakarta.json.JsonWriter;
+import jakarta.json.JsonWriterFactory;
+import jakarta.json.bind.Jsonb;
+import jakarta.json.bind.JsonbBuilder;
+import jakarta.json.spi.JsonProvider;
+import jakarta.json.stream.JsonGenerator;
+import jakarta.json.stream.JsonGeneratorFactory;
+import jakarta.json.stream.JsonParser;
+import jakarta.json.stream.JsonParserFactory;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.ext.Provider;
 
 import org.apache.cxf.bus.extension.ExtensionManagerBus;
 import org.apache.cxf.bus.managers.ClientLifeCycleManagerImpl;
@@ -130,10 +130,10 @@
 
         if (builder.isJaxrsAutoActivateBeanValidation()) {
             try { // we don't need the jaxrsbeanvalidationfeature since bean validation cdi extension handles it normally
-                loader.loadClass("javax.validation.Validation");
+                loader.loadClass("jakarta.validation.Validation");
                 final Object instance = loader.loadClass("org.apache.cxf.jaxrs.validation.ValidationExceptionMapper")
                         .getConstructor().newInstance();
-                instance.getClass().getGenericInterfaces(); // validate bval can be used, check NoClassDefFoundError javax.validation.ValidationException
+                instance.getClass().getGenericInterfaces(); // validate bval can be used, check NoClassDefFoundError jakarta.validation.ValidationException
                 providers.add(instance);
             } catch (final Exception | NoClassDefFoundError e) {
                 // no-op
@@ -286,7 +286,7 @@
         }
 
         @Override
-        public JsonObjectBuilder createObjectBuilder(final Map<String, Object> map) {
+        public JsonObjectBuilder createObjectBuilder(final Map<String, ?> map) {
             return provider.createObjectBuilder(map);
         }
 
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java
index dc7555e..c07e9b1 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java
@@ -37,20 +37,20 @@
 import org.apache.meecrowave.configuration.Configuration;
 import org.apache.meecrowave.logging.tomcat.LogFacade;
 
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.FilterRegistration;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletRequestWrapper;
-import javax.ws.rs.core.Application;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.FilterRegistration;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequestWrapper;
+import jakarta.ws.rs.core.Application;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java
index ad4514b..3a2f626 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java
@@ -27,13 +27,13 @@
 import java.lang.annotation.Target;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundConstruct;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InterceptorBinding;
-import javax.interceptor.InvocationContext;
-import javax.ws.rs.core.Application;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundConstruct;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InterceptorBinding;
+import jakarta.interceptor.InvocationContext;
+import jakarta.ws.rs.core.Application;
 
 import org.apache.cxf.jaxrs.model.ApplicationInfo;
 import org.apache.cxf.jaxrs.model.OperationResourceInfoStack;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java
index 2065122..b3422f0 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java
@@ -22,14 +22,14 @@
 import org.apache.meecrowave.logging.tomcat.LogFacade;
 import org.apache.webbeans.component.OwbBean;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AfterDeploymentValidation;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.BeforeShutdown;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.ProcessBean;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.AfterDeploymentValidation;
+import jakarta.enterprise.inject.spi.Bean;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.BeforeShutdown;
+import jakarta.enterprise.inject.spi.Extension;
+import jakarta.enterprise.inject.spi.ProcessBean;
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationTargetException;
@@ -67,7 +67,7 @@
                 final ClassLoader loader = Thread.currentThread().getContextClassLoader();
                 loader.loadClass("org.apache.cxf.jaxws.JaxWsServerFactoryBean");
                 loader.loadClass("org.apache.cxf.service.model.SchemaInfo");
-                marker = (Class<? extends Annotation>) loader.loadClass("javax.jws.WebService");
+                marker = (Class<? extends Annotation>) loader.loadClass("jakarta.jws.WebService");
                 active = true;
             } catch (final NoClassDefFoundError | ClassNotFoundException e) {
                 active = false;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
index 284e73c..3c8594a 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
@@ -22,11 +22,11 @@
 import java.util.List;
 import java.util.Map;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Typed;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.servlet.ServletContext;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Typed;
+import jakarta.inject.Inject;
+import jakarta.inject.Named;
+import jakarta.servlet.ServletContext;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.util.ClassUnwrapper;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListener.java b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListener.java
index 5c48182..547334f 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListener.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListener.java
@@ -23,7 +23,7 @@
 import java.util.Collection;
 import java.util.Objects;
 
-import javax.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.CDI;
 
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.ClientLifeCycleListener;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownClassesFilter.java b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownClassesFilter.java
index 0cf0498..92c2961 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownClassesFilter.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownClassesFilter.java
@@ -71,6 +71,7 @@
         excluded.add("io.swagger.models");
         excluded.add("io.swagger.util");
         excluded.add("javax");
+        excluded.add("jakarta");
         excluded.add("jnr");
         excluded.add("junit");
         excluded.add("net.sf.ehcache");
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java
index 8b69090..d11733a 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java
@@ -175,6 +175,7 @@
         add("java-support-");
         add("javaws.jar");
         add("javax.");
+        add("jakarta.");
         add("jaxb-");
         add("jaxp-");
         add("jaxws-api");
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java
index 2acc0eb..6e4aca4 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java
@@ -23,13 +23,13 @@
 import java.util.Set;
 import java.util.stream.Stream;
 
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.BeforeBeanDiscovery;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.ProcessAnnotatedType;
-import javax.ws.rs.Path;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
+import jakarta.enterprise.inject.spi.Extension;
+import jakarta.enterprise.inject.spi.ProcessAnnotatedType;
+import jakarta.ws.rs.Path;
 
 import org.apache.meecrowave.cxf.Cxfs;
 import org.apache.meecrowave.cxf.JAXRSFieldInjectionInterceptor;
@@ -44,7 +44,7 @@
             bbd.addInterceptorBinding(JAXRSFieldInjectionInterceptor.Binding.class);
 
             Stream.of(MeecrowaveBus.class, JAXRSFieldInjectionInterceptor.class)
-                  .forEach(type -> bbd.addAnnotatedType(bm.createAnnotatedType(type)));
+                  .forEach(type -> bbd.addAnnotatedType(bm.createAnnotatedType(type), "meecrowave"));
         }
     }
 
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java
index b301ec7..fe13823 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java
@@ -25,10 +25,10 @@
 import java.util.function.Supplier;
 import java.util.stream.Stream;
 
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
 import javax.security.auth.Subject;
-import javax.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletRequest;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.apache.webbeans.corespi.security.SimpleSecurityService;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java
index 78d82dc..1b64680 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java
@@ -26,16 +26,16 @@
 import org.apache.webbeans.container.BeanManagerImpl;
 import org.apache.webbeans.servlet.WebBeansConfigurationListener;
 
-import javax.enterprise.context.Dependent;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.configurator.BeanConfigurator;
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-import javax.servlet.FilterRegistration;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletContextEvent;
+import jakarta.enterprise.context.Dependent;
+import jakarta.enterprise.inject.spi.Bean;
+import jakarta.enterprise.inject.spi.Extension;
+import jakarta.enterprise.inject.spi.configurator.BeanConfigurator;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterRegistration;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletContextEvent;
 import java.util.EnumSet;
 import java.util.Set;
 import java.util.function.Consumer;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java
index c96ddec..1d65a7d 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java
@@ -32,7 +32,7 @@
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.filter.Filter;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 import java.io.File;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java b/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java
index 220b6ac..c81c0bf 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java
@@ -31,7 +31,7 @@
 import org.apache.meecrowave.runner.cli.CliOption;
 import org.apache.xbean.recipe.ObjectRecipe;
 
-import javax.enterprise.inject.Vetoed;
+import jakarta.enterprise.inject.Vetoed;
 import java.io.File;
 import java.lang.reflect.Field;
 import java.util.HashMap;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/service/Priotities.java b/meecrowave-core/src/main/java/org/apache/meecrowave/service/Priotities.java
index 33a7548..1b6f5f5 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/service/Priotities.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/service/Priotities.java
@@ -20,7 +20,7 @@
 
 import static java.util.Optional.ofNullable;
 
-import javax.annotation.Priority;
+import jakarta.annotation.Priority;
 
 public final class Priotities {
     private Priotities() {
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java
index ab9b15a..5ccb751 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java
@@ -21,11 +21,11 @@
 import org.apache.tomcat.InstanceManager;
 import org.apache.webbeans.servlet.WebBeansConfigurationListener;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
-import javax.enterprise.inject.spi.InjectionTarget;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.InjectionTarget;
 import javax.naming.NamingException;
 import java.lang.reflect.InvocationTargetException;
 import java.util.Map;
@@ -64,7 +64,7 @@
 
         final BeanManager bm = CDI.current().getBeanManager();
         final AnnotatedType<?> annotatedType = bm.createAnnotatedType(o.getClass());
-        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final InjectionTarget injectionTarget = bm.getInjectionTargetFactory(annotatedType).createInjectionTarget(null);
         final CreationalContext<Object> creationalContext = bm.createCreationalContext(null);
         injectionTarget.inject(o, creationalContext);
         try {
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
index c0d26a4..12752fb 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/MeecrowaveContextConfig.java
@@ -35,11 +35,11 @@
 import java.util.function.Consumer;
 import java.util.stream.Stream;
 
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.annotation.HandlesTypes;
-import javax.servlet.annotation.WebFilter;
-import javax.servlet.annotation.WebListener;
-import javax.servlet.annotation.WebServlet;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.annotation.HandlesTypes;
+import jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.annotation.WebListener;
+import jakarta.servlet.annotation.WebServlet;
 
 import org.apache.catalina.Context;
 import org.apache.catalina.Lifecycle;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
index 3263951..088eca6 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
@@ -32,7 +32,7 @@
 import org.apache.webbeans.web.scanner.WebScannerService;
 import org.apache.xbean.finder.util.Files;
 
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
 import java.io.File;
 import java.io.IOException;
 import java.net.MalformedURLException;
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java
index e9f2801..beea908 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java
@@ -76,15 +76,6 @@
         // ignore
     }
 
-    @Override
-    public boolean getReloadable() {
-        return false;
-    }
-
-    @Override
-    public void setReloadable(final boolean reloadable) {
-        // no-op
-    }
 
     @Override
     public void addPropertyChangeListener(final PropertyChangeListener listener) {
diff --git a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java
index d56859b..1d0a670 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java
@@ -20,9 +20,9 @@
 
 import java.util.Set;
 
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRegistration;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletRegistration;
 
 import org.apache.catalina.servlets.DefaultServlet;
 import org.apache.meecrowave.configuration.Configuration;
diff --git a/meecrowave-core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/meecrowave-core/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
similarity index 100%
rename from meecrowave-core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
rename to meecrowave-core/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/AsyncTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/AsyncTest.java
index cf7fead..088a842 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/AsyncTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/AsyncTest.java
@@ -18,18 +18,18 @@
  */
 package org.apache.meecrowave;
 
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN;
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN;
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
 import static org.junit.Assert.assertEquals;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.container.AsyncResponse;
-import javax.ws.rs.container.Suspended;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.container.AsyncResponse;
+import jakarta.ws.rs.container.Suspended;
 
 import org.junit.Test;
 
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/Classes.java b/meecrowave-core/src/test/java/org/apache/meecrowave/Classes.java
deleted file mode 100644
index da583a8..0000000
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/Classes.java
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.meecrowave;
-
-import org.apache.cxf.helpers.FileUtils;
-import org.apache.meecrowave.io.IO;
-
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import static org.junit.Assert.fail;
-
-// some in memory files to avoid to load them from the classpath and have tests working by luck (classpath leak actually)
-// see meecrowave-core/src/test/third-party for sources
-public class Classes {
-    private static final byte[] OTHER_FILTER = new byte[]{
-            -54,
-            -2, -70, -66, 0, 0, 0, 52, 0, 75, 10,
-            0, 12, 0, 46, 11, 0, 47, 0, 48, 7,
-            0, 49, 10, 0, 3, 0, 46, 8, 0, 50,
-            10, 0, 3, 0, 51, 9, 0, 11, 0, 52,
-            10, 0, 53, 0, 54, 10, 0, 3, 0, 55,
-            10, 0, 56, 0, 57, 7, 0, 58, 7, 0,
-            59, 7, 0, 60, 1, 0, 10, 105, 110, 106,
-            101, 99, 116, 97, 98, 108, 101, 1, 0, 29,
-            76, 111, 114, 103, 47, 115, 117, 112, 101, 114,
-            98, 105, 122, 47, 97, 112, 112, 47, 73, 110,
-            106, 101, 99, 116, 97, 98, 108, 101, 59, 1,
-            0, 25, 82, 117, 110, 116, 105, 109, 101, 86,
-            105, 115, 105, 98, 108, 101, 65, 110, 110, 111,
-            116, 97, 116, 105, 111, 110, 115, 1, 0, 21,
-            76, 106, 97, 118, 97, 120, 47, 105, 110, 106,
-            101, 99, 116, 47, 73, 110, 106, 101, 99, 116,
-            59, 1, 0, 6, 60, 105, 110, 105, 116, 62,
-            1, 0, 3, 40, 41, 86, 1, 0, 4, 67,
-            111, 100, 101, 1, 0, 15, 76, 105, 110, 101,
-            78, 117, 109, 98, 101, 114, 84, 97, 98, 108,
-            101, 1, 0, 18, 76, 111, 99, 97, 108, 86,
-            97, 114, 105, 97, 98, 108, 101, 84, 97, 98,
-            108, 101, 1, 0, 4, 116, 104, 105, 115, 1,
-            0, 30, 76, 111, 114, 103, 47, 115, 117, 112,
-            101, 114, 98, 105, 122, 47, 97, 112, 112, 47,
-            79, 116, 104, 101, 114, 70, 105, 108, 116, 101,
-            114, 59, 1, 0, 4, 105, 110, 105, 116, 1,
-            0, 31, 40, 76, 106, 97, 118, 97, 120, 47,
-            115, 101, 114, 118, 108, 101, 116, 47, 70, 105,
-            108, 116, 101, 114, 67, 111, 110, 102, 105, 103,
-            59, 41, 86, 1, 0, 12, 102, 105, 108, 116,
-            101, 114, 67, 111, 110, 102, 105, 103, 1, 0,
-            28, 76, 106, 97, 118, 97, 120, 47, 115, 101,
-            114, 118, 108, 101, 116, 47, 70, 105, 108, 116,
-            101, 114, 67, 111, 110, 102, 105, 103, 59, 1,
-            0, 10, 69, 120, 99, 101, 112, 116, 105, 111,
-            110, 115, 7, 0, 61, 1, 0, 8, 100, 111,
-            70, 105, 108, 116, 101, 114, 1, 0, 91, 40,
-            76, 106, 97, 118, 97, 120, 47, 115, 101, 114,
-            118, 108, 101, 116, 47, 83, 101, 114, 118, 108,
-            101, 116, 82, 101, 113, 117, 101, 115, 116, 59,
-            76, 106, 97, 118, 97, 120, 47, 115, 101, 114,
-            118, 108, 101, 116, 47, 83, 101, 114, 118, 108,
-            101, 116, 82, 101, 115, 112, 111, 110, 115, 101,
-            59, 76, 106, 97, 118, 97, 120, 47, 115, 101,
-            114, 118, 108, 101, 116, 47, 70, 105, 108, 116,
-            101, 114, 67, 104, 97, 105, 110, 59, 41, 86,
-            1, 0, 7, 114, 101, 113, 117, 101, 115, 116,
-            1, 0, 30, 76, 106, 97, 118, 97, 120, 47,
-            115, 101, 114, 118, 108, 101, 116, 47, 83, 101,
-            114, 118, 108, 101, 116, 82, 101, 113, 117, 101,
-            115, 116, 59, 1, 0, 8, 114, 101, 115, 112,
-            111, 110, 115, 101, 1, 0, 31, 76, 106, 97,
-            118, 97, 120, 47, 115, 101, 114, 118, 108, 101,
-            116, 47, 83, 101, 114, 118, 108, 101, 116, 82,
-            101, 115, 112, 111, 110, 115, 101, 59, 1, 0,
-            5, 99, 104, 97, 105, 110, 1, 0, 27, 76,
-            106, 97, 118, 97, 120, 47, 115, 101, 114, 118,
-            108, 101, 116, 47, 70, 105, 108, 116, 101, 114,
-            67, 104, 97, 105, 110, 59, 7, 0, 62, 1,
-            0, 7, 100, 101, 115, 116, 114, 111, 121, 1,
-            0, 10, 83, 111, 117, 114, 99, 101, 70, 105,
-            108, 101, 1, 0, 16, 79, 116, 104, 101, 114,
-            70, 105, 108, 116, 101, 114, 46, 106, 97, 118,
-            97, 1, 0, 36, 76, 106, 97, 118, 97, 120,
-            47, 115, 101, 114, 118, 108, 101, 116, 47, 97,
-            110, 110, 111, 116, 97, 116, 105, 111, 110, 47,
-            87, 101, 98, 70, 105, 108, 116, 101, 114, 59,
-            1, 0, 5, 118, 97, 108, 117, 101, 1, 0,
-            6, 47, 111, 116, 104, 101, 114, 12, 0, 18,
-            0, 19, 7, 0, 63, 12, 0, 64, 0, 65,
-            1, 0, 23, 106, 97, 118, 97, 47, 108, 97,
-            110, 103, 47, 83, 116, 114, 105, 110, 103, 66,
-            117, 105, 108, 100, 101, 114, 1, 0, 6, 102,
-            105, 108, 116, 101, 114, 12, 0, 66, 0, 67,
-            12, 0, 14, 0, 15, 7, 0, 68, 12, 0,
-            69, 0, 70, 12, 0, 71, 0, 70, 7, 0,
-            72, 12, 0, 73, 0, 74, 1, 0, 28, 111,
-            114, 103, 47, 115, 117, 112, 101, 114, 98, 105,
-            122, 47, 97, 112, 112, 47, 79, 116, 104, 101,
-            114, 70, 105, 108, 116, 101, 114, 1, 0, 16,
-            106, 97, 118, 97, 47, 108, 97, 110, 103, 47,
-            79, 98, 106, 101, 99, 116, 1, 0, 20, 106,
-            97, 118, 97, 120, 47, 115, 101, 114, 118, 108,
-            101, 116, 47, 70, 105, 108, 116, 101, 114, 1,
-            0, 30, 106, 97, 118, 97, 120, 47, 115, 101,
-            114, 118, 108, 101, 116, 47, 83, 101, 114, 118,
-            108, 101, 116, 69, 120, 99, 101, 112, 116, 105,
-            111, 110, 1, 0, 19, 106, 97, 118, 97, 47,
-            105, 111, 47, 73, 79, 69, 120, 99, 101, 112,
-            116, 105, 111, 110, 1, 0, 29, 106, 97, 118,
-            97, 120, 47, 115, 101, 114, 118, 108, 101, 116,
-            47, 83, 101, 114, 118, 108, 101, 116, 82, 101,
-            115, 112, 111, 110, 115, 101, 1, 0, 9, 103,
-            101, 116, 87, 114, 105, 116, 101, 114, 1, 0,
-            23, 40, 41, 76, 106, 97, 118, 97, 47, 105,
-            111, 47, 80, 114, 105, 110, 116, 87, 114, 105,
-            116, 101, 114, 59, 1, 0, 6, 97, 112, 112,
-            101, 110, 100, 1, 0, 45, 40, 76, 106, 97,
-            118, 97, 47, 108, 97, 110, 103, 47, 83, 116,
-            114, 105, 110, 103, 59, 41, 76, 106, 97, 118,
-            97, 47, 108, 97, 110, 103, 47, 83, 116, 114,
-            105, 110, 103, 66, 117, 105, 108, 100, 101, 114,
-            59, 1, 0, 27, 111, 114, 103, 47, 115, 117,
-            112, 101, 114, 98, 105, 122, 47, 97, 112, 112,
-            47, 73, 110, 106, 101, 99, 116, 97, 98, 108,
-            101, 1, 0, 8, 105, 110, 106, 101, 99, 116,
-            101, 100, 1, 0, 20, 40, 41, 76, 106, 97,
-            118, 97, 47, 108, 97, 110, 103, 47, 83, 116,
-            114, 105, 110, 103, 59, 1, 0, 8, 116, 111,
-            83, 116, 114, 105, 110, 103, 1, 0, 19, 106,
-            97, 118, 97, 47, 105, 111, 47, 80, 114, 105,
-            110, 116, 87, 114, 105, 116, 101, 114, 1, 0,
-            5, 119, 114, 105, 116, 101, 1, 0, 21, 40,
-            76, 106, 97, 118, 97, 47, 108, 97, 110, 103,
-            47, 83, 116, 114, 105, 110, 103, 59, 41, 86,
-            0, 33, 0, 11, 0, 12, 0, 1, 0, 13,
-            0, 1, 0, 2, 0, 14, 0, 15, 0, 1,
-            0, 16, 0, 0, 0, 6, 0, 1, 0, 17,
-            0, 0, 0, 4, 0, 1, 0, 18, 0, 19,
-            0, 1, 0, 20, 0, 0, 0, 47, 0, 1,
-            0, 1, 0, 0, 0, 5, 42, -73, 0, 1,
-            -79, 0, 0, 0, 2, 0, 21, 0, 0, 0,
-            6, 0, 1, 0, 0, 0, 32, 0, 22, 0,
-            0, 0, 12, 0, 1, 0, 0, 0, 5, 0,
-            23, 0, 24, 0, 0, 0, 1, 0, 25, 0,
-            26, 0, 2, 0, 20, 0, 0, 0, 53, 0,
-            0, 0, 2, 0, 0, 0, 1, -79, 0, 0,
-            0, 2, 0, 21, 0, 0, 0, 6, 0, 1,
-            0, 0, 0, 39, 0, 22, 0, 0, 0, 22,
-            0, 2, 0, 0, 0, 1, 0, 23, 0, 24,
-            0, 0, 0, 0, 0, 1, 0, 27, 0, 28,
-            0, 1, 0, 29, 0, 0, 0, 4, 0, 1,
-            0, 30, 0, 1, 0, 31, 0, 32, 0, 2,
-            0, 20, 0, 0, 0, 111, 0, 3, 0, 4,
-            0, 0, 0, 35, 44, -71, 0, 2, 1, 0,
-            -69, 0, 3, 89, -73, 0, 4, 18, 5, -74,
-            0, 6, 42, -76, 0, 7, -74, 0, 8, -74,
-            0, 6, -74, 0, 9, -74, 0, 10, -79, 0,
-            0, 0, 2, 0, 21, 0, 0, 0, 10, 0,
-            2, 0, 0, 0, 43, 0, 34, 0, 44, 0,
-            22, 0, 0, 0, 42, 0, 4, 0, 0, 0,
-            35, 0, 23, 0, 24, 0, 0, 0, 0, 0,
-            35, 0, 33, 0, 34, 0, 1, 0, 0, 0,
-            35, 0, 35, 0, 36, 0, 2, 0, 0, 0,
-            35, 0, 37, 0, 38, 0, 3, 0, 29, 0,
-            0, 0, 6, 0, 2, 0, 39, 0, 30, 0,
-            1, 0, 40, 0, 19, 0, 1, 0, 20, 0,
-            0, 0, 43, 0, 0, 0, 1, 0, 0, 0,
-            1, -79, 0, 0, 0, 2, 0, 21, 0, 0,
-            0, 6, 0, 1, 0, 0, 0, 49, 0, 22,
-            0, 0, 0, 12, 0, 1, 0, 0, 0, 1,
-            0, 23, 0, 24, 0, 0, 0, 2, 0, 41,
-            0, 0, 0, 2, 0, 42, 0, 16, 0, 0,
-            0, 14, 0, 1, 0, 43, 0, 1, 0, 44,
-            91, 0, 1, 115, 0, 45
-    };
-    private static final byte[] OTHER_ENDPOINT = new byte[]{
-            -54,
-            -2, -70, -66, 0, 0, 0, 52, 0, 48, 10,
-            0, 8, 0, 33, 9, 0, 7, 0, 34, 10,
-            0, 35, 0, 36, 10, 0, 37, 0, 38, 8,
-            0, 20, 8, 0, 39, 7, 0, 40, 7, 0,
-            41, 1, 0, 10, 105, 110, 106, 101, 99, 116,
-            97, 98, 108, 101, 1, 0, 29, 76, 111, 114,
-            103, 47, 115, 117, 112, 101, 114, 98, 105, 122,
-            47, 97, 112, 112, 47, 73, 110, 106, 101, 99,
-            116, 97, 98, 108, 101, 59, 1, 0, 25, 82,
-            117, 110, 116, 105, 109, 101, 86, 105, 115, 105,
-            98, 108, 101, 65, 110, 110, 111, 116, 97, 116,
-            105, 111, 110, 115, 1, 0, 21, 76, 106, 97,
-            118, 97, 120, 47, 105, 110, 106, 101, 99, 116,
-            47, 73, 110, 106, 101, 99, 116, 59, 1, 0,
-            6, 60, 105, 110, 105, 116, 62, 1, 0, 3,
-            40, 41, 86, 1, 0, 4, 67, 111, 100, 101,
-            1, 0, 15, 76, 105, 110, 101, 78, 117, 109,
-            98, 101, 114, 84, 97, 98, 108, 101, 1, 0,
-            18, 76, 111, 99, 97, 108, 86, 97, 114, 105,
-            97, 98, 108, 101, 84, 97, 98, 108, 101, 1,
-            0, 4, 116, 104, 105, 115, 1, 0, 32, 76,
-            111, 114, 103, 47, 115, 117, 112, 101, 114, 98,
-            105, 122, 47, 97, 112, 112, 47, 79, 116, 104,
-            101, 114, 69, 110, 100, 112, 111, 105, 110, 116,
-            59, 1, 0, 6, 115, 105, 109, 112, 108, 101,
-            1, 0, 20, 40, 41, 76, 106, 97, 118, 97,
-            47, 108, 97, 110, 103, 47, 83, 116, 114, 105,
-            110, 103, 59, 1, 0, 13, 83, 116, 97, 99,
-            107, 77, 97, 112, 84, 97, 98, 108, 101, 7,
-            0, 42, 1, 0, 17, 76, 106, 97, 118, 97,
-            120, 47, 119, 115, 47, 114, 115, 47, 71, 69,
-            84, 59, 1, 0, 22, 76, 106, 97, 118, 97,
-            120, 47, 119, 115, 47, 114, 115, 47, 80, 114,
-            111, 100, 117, 99, 101, 115, 59, 1, 0, 5,
-            118, 97, 108, 117, 101, 1, 0, 10, 116, 101,
-            120, 116, 47, 112, 108, 97, 105, 110, 1, 0,
-            10, 83, 111, 117, 114, 99, 101, 70, 105, 108,
-            101, 1, 0, 18, 79, 116, 104, 101, 114, 69,
-            110, 100, 112, 111, 105, 110, 116, 46, 106, 97,
-            118, 97, 1, 0, 18, 76, 106, 97, 118, 97,
-            120, 47, 119, 115, 47, 114, 115, 47, 80, 97,
-            116, 104, 59, 1, 0, 5, 111, 116, 104, 101,
-            114, 1, 0, 44, 76, 106, 97, 118, 97, 120,
-            47, 101, 110, 116, 101, 114, 112, 114, 105, 115,
-            101, 47, 99, 111, 110, 116, 101, 120, 116, 47,
-            65, 112, 112, 108, 105, 99, 97, 116, 105, 111,
-            110, 83, 99, 111, 112, 101, 100, 59, 12, 0,
-            13, 0, 14, 12, 0, 9, 0, 10, 7, 0,
-            43, 12, 0, 44, 0, 21, 7, 0, 45, 12,
-            0, 46, 0, 47, 1, 0, 4, 102, 97, 105,
-            108, 1, 0, 30, 111, 114, 103, 47, 115, 117,
-            112, 101, 114, 98, 105, 122, 47, 97, 112, 112,
-            47, 79, 116, 104, 101, 114, 69, 110, 100, 112,
-            111, 105, 110, 116, 1, 0, 16, 106, 97, 118,
-            97, 47, 108, 97, 110, 103, 47, 79, 98, 106,
-            101, 99, 116, 1, 0, 16, 106, 97, 118, 97,
-            47, 108, 97, 110, 103, 47, 83, 116, 114, 105,
-            110, 103, 1, 0, 27, 111, 114, 103, 47, 115,
-            117, 112, 101, 114, 98, 105, 122, 47, 97, 112,
-            112, 47, 73, 110, 106, 101, 99, 116, 97, 98,
-            108, 101, 1, 0, 8, 105, 110, 106, 101, 99,
-            116, 101, 100, 1, 0, 17, 106, 97, 118, 97,
-            47, 108, 97, 110, 103, 47, 66, 111, 111, 108,
-            101, 97, 110, 1, 0, 12, 112, 97, 114, 115,
-            101, 66, 111, 111, 108, 101, 97, 110, 1, 0,
-            21, 40, 76, 106, 97, 118, 97, 47, 108, 97,
-            110, 103, 47, 83, 116, 114, 105, 110, 103, 59,
-            41, 90, 0, 33, 0, 7, 0, 8, 0, 0,
-            0, 1, 0, 2, 0, 9, 0, 10, 0, 1,
-            0, 11, 0, 0, 0, 6, 0, 1, 0, 12,
-            0, 0, 0, 2, 0, 1, 0, 13, 0, 14,
-            0, 1, 0, 15, 0, 0, 0, 47, 0, 1,
-            0, 1, 0, 0, 0, 5, 42, -73, 0, 1,
-            -79, 0, 0, 0, 2, 0, 16, 0, 0, 0,
-            6, 0, 1, 0, 0, 0, 30, 0, 17, 0,
-            0, 0, 12, 0, 1, 0, 0, 0, 5, 0,
-            18, 0, 19, 0, 0, 0, 1, 0, 20, 0,
-            21, 0, 2, 0, 15, 0, 0, 0, 76, 0,
-            1, 0, 1, 0, 0, 0, 21, 42, -76, 0,
-            2, -74, 0, 3, -72, 0, 4, -103, 0, 8,
-            18, 5, -89, 0, 5, 18, 6, -80, 0, 0,
-            0, 3, 0, 16, 0, 0, 0, 6, 0, 1,
-            0, 0, 0, 37, 0, 17, 0, 0, 0, 12,
-            0, 1, 0, 0, 0, 21, 0, 18, 0, 19,
-            0, 0, 0, 22, 0, 0, 0, 7, 0, 2,
-            18, 65, 7, 0, 23, 0, 11, 0, 0, 0,
-            18, 0, 2, 0, 24, 0, 0, 0, 25, 0,
-            1, 0, 26, 91, 0, 1, 115, 0, 27, 0,
-            2, 0, 28, 0, 0, 0, 2, 0, 29, 0,
-            11, 0, 0, 0, 15, 0, 2, 0, 30, 0,
-            1, 0, 26, 115, 0, 31, 0, 32, 0, 0
-    };
-
-    public static void dump(final File file) {
-        doDump(file, "OtherEndpoint", OTHER_ENDPOINT);
-        doDump(file, "OtherFilter", OTHER_FILTER);
-    }
-
-    private static void doDump(final File base, final String name, final byte[] content) {
-        final String target = "org/superbiz/app/" + name + ".class";
-        final File targetFile = new File(base, target);
-        FileUtils.mkDir(targetFile.getParentFile());
-        try (final InputStream from = new ByteArrayInputStream(content);
-             final OutputStream to = new FileOutputStream(targetFile)) {
-            IO.copy(from, to);
-        } catch (final IOException e) {
-            fail();
-        }
-    }
-}
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java b/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java
index 28a1872..792875c 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java
@@ -21,7 +21,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
-import javax.inject.Inject;
+import jakarta.inject.Inject;
 
 import org.apache.meecrowave.configuration.Configuration;
 import org.apache.webbeans.config.WebBeansContext;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java
index 7873f4e..73a208b 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java
@@ -18,21 +18,20 @@
  */
 package org.apache.meecrowave;
 
-import org.apache.tomcat.util.http.fileupload.util.Streams;
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.context.Initialized;
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.CDI;
-import javax.servlet.ServletContext;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriInfo;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.Dependent;
+import jakarta.enterprise.context.Initialized;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.servlet.ServletContext;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.UriInfo;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java
index 4d5f218..f0c61ad 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java
@@ -21,10 +21,9 @@
 import org.apache.catalina.connector.Request;
 import org.apache.catalina.connector.Response;
 import org.apache.catalina.valves.ValveBase;
-import org.apache.tomcat.util.http.fileupload.util.Streams;
 import org.junit.Test;
 
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/InterfaceBasedTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/InterfaceBasedTest.java
index b543fbf..29f8779 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/InterfaceBasedTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/InterfaceBasedTest.java
@@ -18,11 +18,11 @@
  */
 package org.apache.meecrowave;
 
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
 import static org.junit.Assert.assertEquals;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
 
 import org.junit.Test;
 
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/JsonStructureEndpointTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/JsonStructureEndpointTest.java
index 1393307..00b630d 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/JsonStructureEndpointTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/JsonStructureEndpointTest.java
@@ -18,22 +18,22 @@
  */
 package org.apache.meecrowave;
 
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.json.Json;
-import javax.json.JsonArray;
-import javax.json.JsonObject;
-import javax.json.JsonValue;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.json.Json;
+import jakarta.json.JsonArray;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonValue;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
 
 import org.junit.Test;
 
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java
index 0e17504..c327bc8 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java
@@ -43,6 +43,8 @@
 import java.net.URLConnection;
 import java.net.URLStreamHandler;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.Enumeration;
 import java.util.Properties;
 import java.util.stream.Stream;
@@ -54,7 +56,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
-import javax.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.CDI;
 
 public class MeecrowaveTest {
     @Test
@@ -143,7 +145,7 @@
     }
 
     @Test
-    public void simpleWebapp() {
+    public void simpleWebapp() throws IOException {
         final File root = new File("target/MeecrowaveTest/simpleWebapp/app");
         FileUtils.mkDir(root);
         Stream.of(Endpoint.class, RsApp.class).forEach(type -> {
@@ -157,7 +159,9 @@
                 fail();
             }
         });
-        Classes.dump(new File(root, "WEB-INF/classes/"));
+        copyClass(root, "org/superbiz/app/OtherEndpoint.class");
+        copyClass(root, "org/superbiz/app/OtherFilter.class");
+
         try (final Writer indexHtml = new FileWriter(new File(root, "index.html"))) {
             indexHtml.write("hello");
         } catch (final IOException e) {
@@ -177,6 +181,15 @@
         }
     }
 
+    private static void copyClass(File targetRoot, String classFile) throws IOException {
+        final File targetFile = new File(targetRoot, "WEB-INF/classes/" + classFile);
+        if (!targetFile.exists()) {
+            targetFile.getParentFile().mkdirs();
+            Files.copy(Path.of("target/testapp-out/WEB-INF/classes/" + classFile),
+                    targetFile.toPath());
+        }
+    }
+
     @Test
     public void classpath() {
         try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder().randomHttpPort().includePackages("org.superbiz.app")).bake()) {
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java
index 5229c7a..c85b978 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java
@@ -21,15 +21,15 @@
 import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.json.bind.annotation.JsonbProperty;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.json.bind.annotation.JsonbProperty;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.GenericType;
+import jakarta.ws.rs.core.MediaType;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java
index c6af7ae..d567907 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java
@@ -20,9 +20,9 @@
 
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
 import java.io.IOException;
 import java.net.Socket;
 import java.util.stream.IntStream;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java
index 170ae9f..12a8fd3 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java
@@ -18,16 +18,16 @@
  */
 package org.apache.meecrowave;
 
-import org.apache.tomcat.util.http.fileupload.util.Streams;
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.StreamingOutput;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.core.StreamingOutput;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -36,6 +36,7 @@
 import static org.junit.Assert.assertEquals;
 
 public class OctetStreamMediaTypeTest {
+
     @Test
     public void fields() throws IOException {
         try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder()
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java
index 5520c5d..f0ea5d5 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java
@@ -20,11 +20,11 @@
 
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
 import java.util.Set;
 
 import static org.junit.Assert.assertTrue;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java
index adec41a..f6e333c 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java
@@ -20,12 +20,12 @@
 
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.Dependent;
-import javax.inject.Inject;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.Dependent;
+import jakarta.inject.Inject;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
 import java.util.Set;
 
 import static java.util.Collections.emptySet;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/Streams.java b/meecrowave-core/src/test/java/org/apache/meecrowave/Streams.java
new file mode 100644
index 0000000..4f71451
--- /dev/null
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/Streams.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import static org.apache.tomcat.util.http.fileupload.util.Streams.copy;
+
+/**
+ * helper previously has been in tomcat
+ */
+public class Streams {
+
+    public static String asString(InputStream inputStream, String encoding) throws IOException {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        copy(inputStream, baos, true);
+
+        return baos.toString(encoding);
+    }
+
+}
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/ValveTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/ValveTest.java
index 2c9519c..601a7a4 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/ValveTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/ValveTest.java
@@ -23,8 +23,8 @@
 
 import java.io.IOException;
 
-import javax.inject.Inject;
-import javax.servlet.ServletException;
+import jakarta.inject.Inject;
+import jakarta.servlet.ServletException;
 
 import org.apache.catalina.Valve;
 import org.apache.catalina.connector.Request;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java
index 27e5e1a..a82ffb9 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java
@@ -21,14 +21,14 @@
 import org.junit.Test;
 import org.superbiz.app.Bounced;
 
-import javax.ws.rs.ProcessingException;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.ProcessingException;
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
 import java.io.File;
 import java.io.IOException;
 
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
 import static org.junit.Assert.fail;
 
 // you can need to mvn test-compile before running this test if it was executed once already
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java
index e6b6a99..6760862 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java
@@ -21,17 +21,17 @@
 import org.apache.meecrowave.Meecrowave;
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.se.SeContainer;
-import javax.enterprise.inject.se.SeContainerInitializer;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.se.SeContainer;
+import jakarta.enterprise.inject.se.SeContainerInitializer;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
 
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListenerTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListenerTest.java
index a489618..984ae40 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListenerTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/cxf/MeecrowaveClientLifecycleListenerTest.java
@@ -23,15 +23,15 @@
 import java.lang.reflect.Field;
 import java.util.Collection;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
 
 import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider;
 import org.apache.johnzon.jsonb.cdi.JohnzonCdiExtension;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java
index 33434ce..590b64e 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/johnzon/JohnzonBufferTest.java
@@ -19,9 +19,9 @@
 import org.apache.meecrowave.Meecrowave;
 import org.junit.Test;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
 
 import static org.junit.Assert.assertEquals;
 
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java
index 7df0193..438bef0 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java
@@ -23,9 +23,9 @@
 import org.apache.meecrowave.runner.cli.CliOption;
 import org.junit.Test;
 
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.ServerSocket;
diff --git a/meecrowave-core/src/test/java/org/apache/meecrowave/test/api/ListeningTest.java b/meecrowave-core/src/test/java/org/apache/meecrowave/test/api/ListeningTest.java
index 613eaeb..cd2f6fe 100644
--- a/meecrowave-core/src/test/java/org/apache/meecrowave/test/api/ListeningTest.java
+++ b/meecrowave-core/src/test/java/org/apache/meecrowave/test/api/ListeningTest.java
@@ -23,15 +23,15 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.CDI;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.core.MediaType;
 
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.api.ListeningBase;
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java b/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java
index 8bf2e10..5289fbe 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java
@@ -18,12 +18,12 @@
  */
 package org.superbiz.app;
 
-import javax.annotation.PostConstruct;
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.annotation.PostConstruct;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("bounced")
 @ApplicationScoped
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java b/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java
index 9bbb0bb..cd9f4e1 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java
@@ -22,16 +22,16 @@
 
 import java.security.Principal;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.inject.Inject;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("test")
 @ApplicationScoped
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/Init.java b/meecrowave-core/src/test/java/org/superbiz/app/Init.java
index 346d524..979412e 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/Init.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/Init.java
@@ -18,18 +18,18 @@
  */
 package org.superbiz.app;
 
-import javax.servlet.DispatcherType;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.annotation.HandlesTypes;
-import javax.ws.rs.Path;
-import javax.ws.rs.core.Application;
+import jakarta.servlet.DispatcherType;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.annotation.HandlesTypes;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.core.Application;
 import java.io.IOException;
 import java.util.EnumSet;
 import java.util.Set;
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java b/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java
index dd2758d..99701f6 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java
@@ -18,7 +18,7 @@
  */
 package org.superbiz.app;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
 public class Injectable {
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/InterfaceApi.java b/meecrowave-core/src/test/java/org/superbiz/app/InterfaceApi.java
index 9729510..9c565f0 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/InterfaceApi.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/InterfaceApi.java
@@ -18,10 +18,10 @@
  */
 package org.superbiz.app;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Produces(MediaType.TEXT_PLAIN)
 @Path("interfacebased")
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/InterfaceBased.java b/meecrowave-core/src/test/java/org/superbiz/app/InterfaceBased.java
index 433c604..fb6696f 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/InterfaceBased.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/InterfaceBased.java
@@ -18,7 +18,7 @@
  */
 package org.superbiz.app;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
 public class InterfaceBased implements InterfaceApi {
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java b/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java
index d04e798..0ea6ee7 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java
@@ -18,9 +18,9 @@
  */
 package org.superbiz.app;
 
-import javax.enterprise.context.Dependent;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
+import jakarta.enterprise.context.Dependent;
+import jakarta.ws.rs.ApplicationPath;
+import jakarta.ws.rs.core.Application;
 
 @Dependent
 @ApplicationPath("api")
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java b/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java
index 84c3c9a..808ebe7 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java
@@ -18,14 +18,14 @@
  */
 package org.superbiz.app;
 
-import javax.inject.Inject;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
+import jakarta.inject.Inject;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.annotation.WebFilter;
 import java.io.IOException;
 
 @WebFilter("/filter")
diff --git a/meecrowave-core/src/test/java/org/superbiz/app/TestJsonEndpoint.java b/meecrowave-core/src/test/java/org/superbiz/app/TestJsonEndpoint.java
index e21b095..9c3612b 100644
--- a/meecrowave-core/src/test/java/org/superbiz/app/TestJsonEndpoint.java
+++ b/meecrowave-core/src/test/java/org/superbiz/app/TestJsonEndpoint.java
@@ -1,10 +1,10 @@
 package org.superbiz.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @ApplicationScoped
 @Path("/testjsonendpoint")
diff --git a/meecrowave-core/src/test/resources/META-INF/services/javax.servlet.ServletContainerInitializer b/meecrowave-core/src/test/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer
similarity index 100%
rename from meecrowave-core/src/test/resources/META-INF/services/javax.servlet.ServletContainerInitializer
rename to meecrowave-core/src/test/resources/META-INF/services/jakarta.servlet.ServletContainerInitializer
diff --git a/meecrowave-doc/pom.xml b/meecrowave-doc/pom.xml
index 38eed7e..0001da4 100644
--- a/meecrowave-doc/pom.xml
+++ b/meecrowave-doc/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -38,7 +38,7 @@
     <jbake.pdf>true</jbake.pdf>
     <jbake.updatedownloads>false</jbake.updatedownloads> <!-- grabs too much things on the net to be true by default -->
     <meecrowave.build.name>${project.groupId}.documentation</meecrowave.build.name>
-    <groovy.version>2.5.6</groovy.version>
+    <groovy.version>4.0.20</groovy.version>
   </properties>
 
   <dependencies>
@@ -130,25 +130,31 @@
     <dependency>
       <groupId>org.jbake</groupId>
       <artifactId>jbake-core</artifactId>
-      <version>2.6.5</version>
+      <version>2.7.0-rc.7</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-configuration2</artifactId>
+      <version>2.10.1</version>
     </dependency>
     <dependency>
-      <groupId>commons-configuration</groupId>
-      <artifactId>commons-configuration</artifactId>
-      <version>1.10</version>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.14.0</version>
     </dependency>
     <dependency>
       <groupId>com.orientechnologies</groupId>
       <artifactId>orientdb-core</artifactId>
-      <version>3.0.30</version>
+      <version>3.1.16</version>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.groovy</groupId>
+      <groupId>org.apache.groovy</groupId>
       <artifactId>groovy</artifactId>
       <version>${groovy.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.groovy</groupId>
+      <groupId>org.apache.groovy</groupId>
       <artifactId>groovy-templates</artifactId>
       <version>${groovy.version}</version>
     </dependency>
diff --git a/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java b/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java
index abf3a2d..f3343f7 100755
--- a/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java
+++ b/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java
@@ -42,8 +42,8 @@
 import java.util.concurrent.atomic.AtomicLong;

 import java.util.stream.Stream;

 

-import org.apache.commons.configuration.CompositeConfiguration;

-import org.apache.commons.configuration.MapConfiguration;

+import org.apache.commons.configuration2.CompositeConfiguration;

+import org.apache.commons.configuration2.MapConfiguration;

 import org.apache.meecrowave.Meecrowave;

 import org.apache.meecrowave.doc.generator.ArquillianConfiguration;

 import org.apache.meecrowave.doc.generator.CliConfiguration;

@@ -54,7 +54,6 @@
 import org.apache.meecrowave.doc.generator.MavenConfiguration;

 import org.apache.meecrowave.doc.generator.OAuth2Configuration;

 import org.apache.meecrowave.doc.generator.ProxyConfiguration;

-import org.apache.meecrowave.proxy.servlet.meecrowave.ProxyServletSetup;

 import org.jbake.app.Oven;

 import org.jbake.app.configuration.ConfigUtil;

 import org.jbake.app.configuration.DefaultJBakeConfiguration;

diff --git a/meecrowave-doc/src/main/jbake/content/howto.adoc b/meecrowave-doc/src/main/jbake/content/howto.adoc
index 2890ed7..b998321 100755
--- a/meecrowave-doc/src/main/jbake/content/howto.adoc
+++ b/meecrowave-doc/src/main/jbake/content/howto.adoc
@@ -94,14 +94,14 @@
 package org.mypackage;
 
 import java.io.IOException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.annotation.WebFilter;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 /**
  * A simple CORS filter
@@ -171,9 +171,9 @@
 
 import java.util.Set;
 
-import javax.servlet.ServletContainerInitializer;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletRegistration;
+import jakarta.servlet.ServletContainerInitializer;
+import jakarta.servlet.ServletContext;
+import jakarta.servlet.ServletRegistration;
 
 import org.my.servlet.ImplementationClass;
 
diff --git a/meecrowave-gradle-plugin/pom.xml b/meecrowave-gradle-plugin/pom.xml
index d13dc40..7efb565 100644
--- a/meecrowave-gradle-plugin/pom.xml
+++ b/meecrowave-gradle-plugin/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -41,9 +41,9 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>org.codehaus.groovy</groupId>
+      <groupId>org.apache.groovy</groupId>
       <artifactId>groovy</artifactId>
-      <version>2.5.6</version>
+      <version>4.0.21</version>
       <scope>provided</scope>
     </dependency>
     <!-- you surely don't want to do that, check the code ;) -->
diff --git a/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java b/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java
index 28c1d72..b762e2f 100644
--- a/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java
+++ b/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java
@@ -82,8 +82,8 @@
                         name.startsWith("com.jcraft") ||
                         name.startsWith("com.tonixsystems") ||
                         name.startsWith("javax.el") ||
-                        name.startsWith("javax.inject") ||
-                        name.startsWith("javax.servlet") ||
+                        name.startsWith("jakarta.inject") ||
+                        name.startsWith("jakarta.servlet") ||
                         name.startsWith("jcifs.") ||
                         name.startsWith("junit.") ||
                         name.startsWith("groovy") ||
diff --git a/meecrowave-jpa/pom.xml b/meecrowave-jpa/pom.xml
index f5a357b..ba09824 100644
--- a/meecrowave-jpa/pom.xml
+++ b/meecrowave-jpa/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -33,10 +33,10 @@
   </properties>
 
   <dependencies>
+
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jpa_2.2_spec</artifactId>
-      <version>${jpa-spec.version}</version>
+      <groupId>jakarta.persistence</groupId>
+      <artifactId>jakarta.persistence-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.meecrowave</groupId>
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java
index 2843fb8..3024fad 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java
@@ -18,7 +18,7 @@
  */
 package org.apache.meecrowave.jpa.api;
 
-import javax.enterprise.context.NormalScope;
+import jakarta.enterprise.context.NormalScope;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java
index 2077bf3..8d618d1 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java
@@ -18,7 +18,7 @@
  */
 package org.apache.meecrowave.jpa.api;
 
-import javax.interceptor.InterceptorBinding;
+import jakarta.interceptor.InterceptorBinding;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java
index b3a197a..80b8d90 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java
@@ -18,13 +18,13 @@
  */
 package org.apache.meecrowave.jpa.api;
 
-import javax.enterprise.inject.Vetoed;
-import javax.persistence.SharedCacheMode;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.ClassTransformer;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.persistence.spi.PersistenceUnitTransactionType;
+import jakarta.enterprise.inject.Vetoed;
+import jakarta.persistence.SharedCacheMode;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.ClassTransformer;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.persistence.spi.PersistenceUnitTransactionType;
 import javax.sql.DataSource;
 import java.net.URL;
 import java.net.URLClassLoader;
@@ -36,7 +36,7 @@
 import static java.util.Collections.emptyList;
 import static java.util.Objects.requireNonNull;
 import static java.util.stream.Collectors.toList;
-import static javax.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;
+import static jakarta.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;
 
 @Vetoed
 public class PersistenceUnitInfoBuilder {
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java
index 31aa853..32f2df6 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.jpa.api;
 
-import javax.inject.Qualifier;
-import javax.persistence.SynchronizationType;
+import jakarta.inject.Qualifier;
+import jakarta.persistence.SynchronizationType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.Target;
 
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java
index 87b6166..5c93d41 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.jpa.internal;
 
-import javax.enterprise.inject.Any;
-import javax.enterprise.util.AnnotationLiteral;
+import jakarta.enterprise.inject.Any;
+import jakarta.enterprise.util.AnnotationLiteral;
 import java.lang.annotation.Annotation;
 
 public class AnyLiteral extends AnnotationLiteral<Any> implements Any {
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java
index cd876e2..d0d5b02 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java
@@ -20,10 +20,10 @@
 
 import org.apache.meecrowave.jpa.api.Jpa;
 
-import javax.enterprise.inject.spi.AnnotatedConstructor;
-import javax.enterprise.inject.spi.AnnotatedField;
-import javax.enterprise.inject.spi.AnnotatedMethod;
-import javax.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.AnnotatedConstructor;
+import jakarta.enterprise.inject.spi.AnnotatedField;
+import jakarta.enterprise.inject.spi.AnnotatedMethod;
+import jakarta.enterprise.inject.spi.AnnotatedType;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.HashSet;
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java
index bd0e6c9..f98dfaa 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java
@@ -2,18 +2,18 @@
 
 import org.apache.meecrowave.jpa.api.EntityManagerScoped;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.Vetoed;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.PassivationCapable;
-import javax.persistence.EntityManager;
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.SynchronizationType;
-import javax.persistence.ValidationMode;
-import javax.persistence.spi.PersistenceProvider;
-import javax.persistence.spi.PersistenceUnitInfo;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.Vetoed;
+import jakarta.enterprise.inject.spi.Bean;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.InjectionPoint;
+import jakarta.enterprise.inject.spi.PassivationCapable;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.SynchronizationType;
+import jakarta.persistence.ValidationMode;
+import jakarta.persistence.spi.PersistenceProvider;
+import jakarta.persistence.spi.PersistenceUnitInfo;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 import java.util.HashMap;
@@ -107,11 +107,6 @@
     }
 
     @Override
-    public boolean isNullable() {
-        return false;
-    }
-
-    @Override
     public Set<Type> getTypes() {
         return types;
     }
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java
index 58a258a..f7ae452 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java
@@ -20,9 +20,9 @@
 
 import org.apache.meecrowave.jpa.api.EntityManagerScoped;
 
-import javax.enterprise.context.spi.AlterableContext;
-import javax.enterprise.context.spi.Contextual;
-import javax.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.context.spi.AlterableContext;
+import jakarta.enterprise.context.spi.Contextual;
+import jakarta.enterprise.context.spi.CreationalContext;
 import java.io.Serializable;
 import java.lang.annotation.Annotation;
 import java.util.HashMap;
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java
index bec3054..325287a 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java
@@ -23,23 +23,23 @@
 import org.apache.meecrowave.jpa.api.PersistenceUnitInfoBuilder;
 import org.apache.meecrowave.jpa.api.Unit;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-import javax.enterprise.inject.spi.AfterDeploymentValidation;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.BeforeBeanDiscovery;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.ProcessAnnotatedType;
-import javax.enterprise.inject.spi.ProcessBean;
-import javax.enterprise.inject.spi.WithAnnotations;
-import javax.persistence.Embeddable;
-import javax.persistence.Entity;
-import javax.persistence.MappedSuperclass;
-import javax.persistence.SynchronizationType;
-import javax.persistence.spi.PersistenceUnitInfo;
-import javax.servlet.ServletContext;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.AfterBeanDiscovery;
+import jakarta.enterprise.inject.spi.AfterDeploymentValidation;
+import jakarta.enterprise.inject.spi.Bean;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
+import jakarta.enterprise.inject.spi.Extension;
+import jakarta.enterprise.inject.spi.ProcessAnnotatedType;
+import jakarta.enterprise.inject.spi.ProcessBean;
+import jakarta.enterprise.inject.spi.WithAnnotations;
+import jakarta.persistence.Embeddable;
+import jakarta.persistence.Entity;
+import jakarta.persistence.MappedSuperclass;
+import jakarta.persistence.SynchronizationType;
+import jakarta.persistence.spi.PersistenceUnitInfo;
+import jakarta.servlet.ServletContext;
 import javax.sql.DataSource;
 import java.lang.annotation.Annotation;
 import java.util.ArrayList;
@@ -68,7 +68,7 @@
 
     void addInternals(@Observes final BeforeBeanDiscovery bbd, final BeanManager bm) {
         Stream.of(JpaTransactionInterceptor.class, JpaNoTransactionInterceptor.class)
-                .forEach(interceptor -> bbd.addAnnotatedType(bm.createAnnotatedType(interceptor)));
+                .forEach(interceptor -> bbd.addAnnotatedType(bm.createAnnotatedType(interceptor), "mw"));
     }
 
     <T> void addJpaToEmConsumers(@Observes @WithAnnotations(Unit.class) final ProcessAnnotatedType<T> pat) {
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java
index c09bbda..4d94c27 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java
@@ -18,9 +18,9 @@
  */
 package org.apache.meecrowave.jpa.internal;
 
-import javax.inject.Inject;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.InvocationContext;
+import jakarta.inject.Inject;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.InvocationContext;
 import java.io.Serializable;
 
 public abstract class JpaInterceptorBase implements Serializable {
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java
index 5271f2c..8a222da 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java
@@ -20,7 +20,7 @@
 
 import org.apache.meecrowave.jpa.api.Jpa;
 
-import javax.enterprise.util.AnnotationLiteral;
+import jakarta.enterprise.util.AnnotationLiteral;
 import java.lang.annotation.Annotation;
 
 class JpaLiteral extends AnnotationLiteral<Jpa> implements Jpa {
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java
index fa0f1a1..6b4b6b8 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java
@@ -20,8 +20,8 @@
 
 import org.apache.meecrowave.jpa.api.Jpa;
 
-import javax.annotation.Priority;
-import javax.interceptor.Interceptor;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.Interceptor;
 
 @Jpa(transactional = false)
 @Interceptor
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java
index 8631255..28f9818 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java
@@ -20,8 +20,8 @@
 
 import org.apache.meecrowave.jpa.api.Jpa;
 
-import javax.annotation.Priority;
-import javax.interceptor.Interceptor;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.Interceptor;
 
 @Jpa
 @Interceptor
diff --git a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java
index ba6708c..c65f05c 100644
--- a/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java
+++ b/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java
@@ -2,8 +2,8 @@
 
 import org.apache.meecrowave.jpa.api.Unit;
 
-import javax.enterprise.util.AnnotationLiteral;
-import javax.persistence.SynchronizationType;
+import jakarta.enterprise.util.AnnotationLiteral;
+import jakarta.persistence.SynchronizationType;
 
 class UnitLiteral extends AnnotationLiteral<Unit> implements Unit {
     private final String name;
diff --git a/meecrowave-jpa/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/meecrowave-jpa/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
similarity index 100%
rename from meecrowave-jpa/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
rename to meecrowave-jpa/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
diff --git a/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java b/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java
index e98d75b..7afcfa7 100644
--- a/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java
+++ b/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java
@@ -27,7 +27,7 @@
 import org.junit.rules.TestRule;
 import org.junit.runners.model.Statement;
 
-import javax.inject.Inject;
+import jakarta.inject.Inject;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.rules.RuleChain.outerRule;
diff --git a/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/exceptionlost/JPAExceptionLostTest.java b/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/exceptionlost/JPAExceptionLostTest.java
index 68e9fc8..693d9f5 100644
--- a/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/exceptionlost/JPAExceptionLostTest.java
+++ b/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/exceptionlost/JPAExceptionLostTest.java
@@ -31,14 +31,14 @@
 import org.junit.Test;
 import org.junit.rules.TestRule;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.persistence.Entity;
-import javax.persistence.EntityManager;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.Dependent;
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Inject;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
 import javax.sql.DataSource;
 
 public class JPAExceptionLostTest {
diff --git a/meecrowave-jpa/src/test/java/org/app/JPADao.java b/meecrowave-jpa/src/test/java/org/app/JPADao.java
index 12a9af2..1394b6e 100644
--- a/meecrowave-jpa/src/test/java/org/app/JPADao.java
+++ b/meecrowave-jpa/src/test/java/org/app/JPADao.java
@@ -23,14 +23,14 @@
 import org.apache.meecrowave.jpa.api.Unit;
 import org.h2.Driver;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.Dependent;
-import javax.enterprise.inject.Produces;
-import javax.inject.Inject;
-import javax.persistence.Entity;
-import javax.persistence.EntityManager;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.Dependent;
+import jakarta.enterprise.inject.Produces;
+import jakarta.inject.Inject;
+import jakarta.persistence.Entity;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.Id;
 import javax.sql.DataSource;
 
 @ApplicationScoped
diff --git a/meecrowave-jta/pom.xml b/meecrowave-jta/pom.xml
index 801b602..c36aa9e 100644
--- a/meecrowave-jta/pom.xml
+++ b/meecrowave-jta/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -33,15 +33,15 @@
   </properties>
 
   <dependencies>
+
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jta_1.2_spec</artifactId>
-      <version>1.0-alpha-1</version>
+      <groupId>jakarta.transaction</groupId>
+      <artifactId>jakarta.transaction-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.geronimo.components</groupId>
       <artifactId>geronimo-transaction</artifactId>
-      <version>3.1.4</version>
+      <version>4.0.0</version>
     </dependency>
     <dependency>
       <groupId>org.slf4j</groupId>
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java
index 3a248bb..12ab62d 100644
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.enterprise.inject.Any;
-import javax.enterprise.util.AnnotationLiteral;
+import jakarta.enterprise.inject.Any;
+import jakarta.enterprise.util.AnnotationLiteral;
 import java.lang.annotation.Annotation;
 
 public class AnyLiteral extends AnnotationLiteral<Any> implements Any {
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java
index c588351..39f60b4 100644
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.enterprise.inject.Default;
-import javax.enterprise.util.AnnotationLiteral;
+import jakarta.enterprise.inject.Default;
+import jakarta.enterprise.util.AnnotationLiteral;
 import java.lang.annotation.Annotation;
 
 public class DefaultLiteral extends AnnotationLiteral<Default> implements Default {
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
index 84d0a77..e98f27c 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
@@ -16,19 +16,19 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.enterprise.inject.spi.AnnotatedMethod;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.CDI;
-import javax.inject.Inject;
-import javax.interceptor.InvocationContext;
-import javax.transaction.RollbackException;
-import javax.transaction.Status;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionRolledbackException;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.enterprise.inject.spi.AnnotatedMethod;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.inject.Inject;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.Status;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionRolledbackException;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 import java.io.Serializable;
 import java.lang.reflect.Method;
 import java.util.concurrent.ConcurrentHashMap;
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java
index 2b2e918..185d01e 100644
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java
@@ -18,19 +18,19 @@
 
 import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.AfterBeanDiscovery;
-import javax.enterprise.inject.spi.AfterDeploymentValidation;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.BeforeBeanDiscovery;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.InjectionPoint;
-import javax.enterprise.inject.spi.ProcessBean;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.AfterBeanDiscovery;
+import jakarta.enterprise.inject.spi.AfterDeploymentValidation;
+import jakarta.enterprise.inject.spi.Bean;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.BeforeBeanDiscovery;
+import jakarta.enterprise.inject.spi.Extension;
+import jakarta.enterprise.inject.spi.InjectionPoint;
+import jakarta.enterprise.inject.spi.ProcessBean;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionSynchronizationRegistry;
 import javax.transaction.xa.XAException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
@@ -52,7 +52,7 @@
                 MandatoryInterceptor.class, NeverInterceptor.class,
                 NotSupportedInterceptor.class, RequiredInterceptor.class,
                 RequiredNewInterceptor.class, SupportsInterceptor.class)
-                .forEach(c -> beforeBeanDiscovery.addAnnotatedType(beanManager.createAnnotatedType(c)));
+                .forEach(c -> beforeBeanDiscovery.addAnnotatedType(beanManager.createAnnotatedType(c), "mw"));
     }
 
     void findJtaComponents(@Observes final ProcessBean<?> bean) {
@@ -125,11 +125,6 @@
         }
 
         @Override
-        public boolean isNullable() {
-            return false;
-        }
-
-        @Override
         public TransactionManager create(final CreationalContext<TransactionManager> context) {
             return manager;
         }
@@ -189,10 +184,6 @@
             return JtaConfig.class;
         }
 
-        @Override
-        public boolean isNullable() {
-            return false;
-        }
 
         @Override
         public JtaConfig create(final CreationalContext<JtaConfig> context) {
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java
index 5d3caeb..913ca34 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java
@@ -16,14 +16,14 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InvocationContext;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 
 @Interceptor
 @Transactional(Transactional.TxType.MANDATORY)
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java
index d0de0f2..094ea9d 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java
@@ -16,13 +16,13 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InvocationContext;
-import javax.transaction.SystemException;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 
 @Interceptor
 @Transactional(Transactional.TxType.NEVER)
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java
index 9064497..5a426da 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java
@@ -16,15 +16,15 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InvocationContext;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 
 @Interceptor
 @Transactional(Transactional.TxType.NOT_SUPPORTED)
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java
index 82bbc02..d2c9f6d 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java
@@ -16,18 +16,18 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InvocationContext;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 
 @Interceptor
 @Transactional(Transactional.TxType.REQUIRED)
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java
index d43e85b..0919e51 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java
@@ -16,19 +16,19 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InvocationContext;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
-import javax.transaction.InvalidTransactionException;
-import javax.transaction.NotSupportedException;
-import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.HeuristicMixedException;
+import jakarta.transaction.HeuristicRollbackException;
+import jakarta.transaction.InvalidTransactionException;
+import jakarta.transaction.NotSupportedException;
+import jakarta.transaction.RollbackException;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 
 @Interceptor
 @Transactional(Transactional.TxType.REQUIRES_NEW)
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java
index d60cc19..a73aee7 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java
@@ -16,14 +16,14 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.annotation.Priority;
-import javax.interceptor.AroundInvoke;
-import javax.interceptor.Interceptor;
-import javax.interceptor.InvocationContext;
-import javax.transaction.SystemException;
-import javax.transaction.Transaction;
-import javax.transaction.Transactional;
-import javax.transaction.TransactionalException;
+import jakarta.annotation.Priority;
+import jakarta.interceptor.AroundInvoke;
+import jakarta.interceptor.Interceptor;
+import jakarta.interceptor.InvocationContext;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.Transaction;
+import jakarta.transaction.Transactional;
+import jakarta.transaction.TransactionalException;
 
 @Interceptor
 @Transactional(Transactional.TxType.SUPPORTS)
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java
index 77a5dac..d3b0098 100755
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java
@@ -16,15 +16,15 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.enterprise.context.ContextNotActiveException;
-import javax.enterprise.context.spi.AlterableContext;
-import javax.enterprise.context.spi.Contextual;
-import javax.enterprise.context.spi.CreationalContext;
-import javax.transaction.Status;
-import javax.transaction.Synchronization;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionScoped;
-import javax.transaction.TransactionSynchronizationRegistry;
+import jakarta.enterprise.context.ContextNotActiveException;
+import jakarta.enterprise.context.spi.AlterableContext;
+import jakarta.enterprise.context.spi.Contextual;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.transaction.Status;
+import jakarta.transaction.Synchronization;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionScoped;
+import jakarta.transaction.TransactionSynchronizationRegistry;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
diff --git a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java
index 1c7bb84..bca345d 100644
--- a/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java
+++ b/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java
@@ -16,13 +16,13 @@
  */
 package org.apache.meecrowave.jta;
 
-import javax.transaction.TransactionalException;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.ext.ExceptionMapper;
-import javax.ws.rs.ext.Provider;
-import javax.ws.rs.ext.Providers;
+import jakarta.transaction.TransactionalException;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.Response;
+import jakarta.ws.rs.ext.ExceptionMapper;
+import jakarta.ws.rs.ext.Provider;
+import jakarta.ws.rs.ext.Providers;
 
 @Provider
 public class TransactionExceptionMapper implements ExceptionMapper<TransactionalException> {
diff --git a/meecrowave-jta/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/meecrowave-jta/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
similarity index 100%
rename from meecrowave-jta/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
rename to meecrowave-jta/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
diff --git a/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java b/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java
index a02fec3..4115447 100644
--- a/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java
+++ b/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java
@@ -21,11 +21,11 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.transaction.SystemException;
-import javax.transaction.TransactionManager;
-import javax.transaction.Transactional;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.transaction.SystemException;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.Transactional;
 import java.io.IOException;
 
 import static org.junit.Assert.assertNotNull;
diff --git a/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java b/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java
index 456cfd1..6190787 100644
--- a/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java
+++ b/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java
@@ -23,10 +23,10 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import javax.annotation.PreDestroy;
-import javax.inject.Inject;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionScoped;
+import jakarta.annotation.PreDestroy;
+import jakarta.inject.Inject;
+import jakarta.transaction.TransactionManager;
+import jakarta.transaction.TransactionScoped;
 import java.io.Serializable;
 import java.util.concurrent.atomic.AtomicBoolean;
 
diff --git a/meecrowave-junit/pom.xml b/meecrowave-junit/pom.xml
index 436c743..b9caf30 100644
--- a/meecrowave-junit/pom.xml
+++ b/meecrowave-junit/pom.xml
@@ -18,13 +18,14 @@
     under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <parent>
-    <artifactId>meecrowave</artifactId>
-    <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
-  </parent>
   <modelVersion>4.0.0</modelVersion>
 
+  <parent>
+    <groupId>org.apache.meecrowave</groupId>
+    <artifactId>meecrowave</artifactId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+
   <artifactId>meecrowave-junit</artifactId>
   <name>Meecrowave :: JUnit</name>
 
@@ -43,6 +44,13 @@
 
   <dependencies>
     <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-specs-api</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>${junit.version}</version>
@@ -74,9 +82,43 @@
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
         <configuration>
-          <!-- cause of mono runner/rule -->
-          <reuseForks>false</reuseForks>
+          <parallel>all</parallel>
+          <threadCount>4</threadCount>
+          <threadCountClasses>3</threadCountClasses>
         </configuration>
+
+        <executions>
+          <execution>
+            <!-- disable default execution -->
+            <id>default-test</id>
+            <configuration>
+              <skip>true</skip>
+            </configuration>
+          </execution>
+
+          <execution>
+            <id>mwjunit4</id>
+            <phase>test</phase>
+            <goals><goal>test</goal></goals>
+            <configuration>
+              <includes>
+                <inlude>org/apache/meecrowave/junit/*Test.class</inlude>
+              </includes>
+            </configuration>
+          </execution>
+
+          <execution>
+            <id>mwjunit5</id>
+            <phase>test</phase>
+            <goals><goal>test</goal></goals>
+            <configuration>
+              <includes>
+                <inlude>org/apache/meecrowave/junit5/*Test.class</inlude>
+              </includes>
+            </configuration>
+          </execution>
+        </executions>
+
         <dependencies>
           <dependency>
             <groupId>org.junit.platform</groupId>
@@ -95,102 +137,6 @@
            </dependency>
         </dependencies>
       </plugin>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <shadedArtifactAttached>true</shadedArtifactAttached>
-              <shadedClassifierName>jakarta</shadedClassifierName>
-              <createDependencyReducedPom>false</createDependencyReducedPom>
-              <artifactSet>
-                <includes>
-                  <include>${project.groupId}:${project.artifactId}</include>
-                </includes>
-              </artifactSet>
-              <relocations>
-                <relocation>
-                  <pattern>javax.activation</pattern>
-                  <shadedPattern>jakarta.activation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.annotation</pattern>
-                  <shadedPattern>jakarta.annotation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.el</pattern>
-                  <shadedPattern>jakarta.el</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.enterprise</pattern>
-                  <shadedPattern>jakarta.enterprise</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.decorator</pattern>
-                  <shadedPattern>jakarta.decorator</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.inject</pattern>
-                  <shadedPattern>jakarta.inject</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.interceptor</pattern>
-                  <shadedPattern>jakarta.interceptor</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.servlet</pattern>
-                  <shadedPattern>jakarta.servlet</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.transaction</pattern>
-                  <shadedPattern>jakarta.transaction</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.validation</pattern>
-                  <shadedPattern>jakarta.validation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.persistence</pattern>
-                  <shadedPattern>jakarta.persistence</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.faces</pattern>
-                  <shadedPattern>jakarta.faces</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.ejb</pattern>
-                  <shadedPattern>jakarta.ejb</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.ws</pattern>
-                  <shadedPattern>jakarta.ws</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.cache</pattern>
-                  <shadedPattern>jakarta.cache</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.jms</pattern>
-                  <shadedPattern>jakarta.jms</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.json</pattern>
-                  <shadedPattern>jakarta.json</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.resource</pattern>
-                  <shadedPattern>jakarta.resource</shadedPattern>
-                </relocation>
-              </relocations>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
     </plugins>
   </build>
 </project>
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java
index 2829830..7ee46b1 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.junit;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.CDI;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.spi.CDI;
 
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.testing.Injector;
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
index b08f705..f35340a 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
@@ -24,11 +24,11 @@
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
-import javax.enterprise.inject.spi.InjectionTarget;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.InjectionTarget;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -91,7 +91,7 @@
     private static CreationalContext<Object> doInject(final Object instance) {
         final BeanManager bm = CDI.current().getBeanManager();
         final AnnotatedType<?> annotatedType = bm.createAnnotatedType(instance.getClass());
-        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final InjectionTarget injectionTarget = bm.getInjectionTargetFactory(annotatedType).createInjectionTarget(null);
         final CreationalContext<Object> creationalContext = bm.createCreationalContext(null);
         injectionTarget.inject(instance, creationalContext);
         return creationalContext;
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java
index 93f476f..42ea1d4 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java
@@ -20,7 +20,7 @@
 
 import java.util.List;
 
-import javax.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.context.spi.CreationalContext;
 
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.testing.Injector;
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/BaseLifecycle.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/BaseLifecycle.java
index 0a07140..c9ab009 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/BaseLifecycle.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/BaseLifecycle.java
@@ -22,10 +22,12 @@
 import java.lang.reflect.InvocationTargetException;
 import java.util.stream.Stream;
 
+import org.apache.meecrowave.internal.ClassLoaderLock;
 import org.junit.jupiter.api.TestInstance;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
 abstract class BaseLifecycle {
+
     boolean isPerClass(final ExtensionContext context) {
         return context.getTestInstanceLifecycle()
                 .map(it -> it.equals(TestInstance.Lifecycle.PER_CLASS))
@@ -41,7 +43,7 @@
                 .orElse(state);
     }
 
-    private static LifecyleState invoke(final Object test, final Class<? extends Annotation> marker) {
+    private LifecyleState invoke(final Object test, final Class<? extends Annotation> marker) {
         Class<?> type = test.getClass();
         while (type != Object.class) {
             Stream.of(type.getDeclaredMethods())
@@ -63,7 +65,19 @@
         return new LifecyleState(true, test);
     }
 
-    static class LifecyleState {
+
+    protected void doUnlockContext(final boolean unlocked) {
+        if (!unlocked) {
+            ClassLoaderLock.LOCK.unlock();
+        }
+    }
+
+    protected void doLockContext() {
+        ClassLoaderLock.LOCK.lock();
+    }
+
+
+    class LifecyleState {
         private final boolean injected;
         private final Object instance;
 
@@ -76,4 +90,5 @@
             invoke(instance, AfterLastTest.class);
         }
     }
+
 }
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
index 2464188..a5f1be3 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
@@ -20,6 +20,7 @@
 
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.configuration.Configuration;
+import org.apache.meecrowave.internal.ClassLoaderLock;
 import org.apache.meecrowave.testing.Injector;
 import org.junit.jupiter.api.extension.AfterAllCallback;
 import org.junit.jupiter.api.extension.AfterEachCallback;
@@ -27,7 +28,7 @@
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
 
-import javax.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.context.spi.CreationalContext;
 import java.io.File;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
@@ -42,6 +43,10 @@
 
     private static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(MeecrowaveExtension.class.getName());
 
+    private ClassLoader meecrowaveCL;
+    private ClassLoader oldCl;
+
+
     private final ScopesExtension scopes = new ScopesExtension() {
         @Override
         protected Optional<Class<? extends Annotation>[]> getScopes(final ExtensionContext context) {
@@ -52,6 +57,13 @@
         }
     };
 
+    protected ClassLoader createMwClassLoader() {
+        if (meecrowaveCL == null) {
+            meecrowaveCL = ClassLoaderLock.getUsableContainerLoader();
+        }
+        return meecrowaveCL;
+    }
+
     @Override
     public void beforeAll(final ExtensionContext context) {
         if (isPerClass(context)) {
@@ -65,7 +77,20 @@
         ofNullable(store.get(LifecyleState.class, LifecyleState.class))
                 .ifPresent(s -> s.afterLastTest(context));
         if (isPerClass(context)) {
-            store.get(Meecrowave.class, Meecrowave.class).close();
+            ClassLoader oldClTmp = null;
+            try {
+                if (meecrowaveCL != null) {
+                    oldClTmp = Thread.currentThread().getContextClassLoader();
+                    Thread.currentThread().setContextClassLoader(meecrowaveCL);
+                }
+
+                store.get(Meecrowave.class, Meecrowave.class).close();
+            }
+            finally {
+                if (oldClTmp != null) {
+                    Thread.currentThread().setContextClassLoader(oldClTmp);
+                }
+            }
         }
     }
 
@@ -74,63 +99,104 @@
         if (!isPerClass(context)) {
             doStart(context);
         }
+
+        if (meecrowaveCL != null) {
+            oldCl = Thread.currentThread().getContextClassLoader();
+            Thread.currentThread().setContextClassLoader(meecrowaveCL);
+        }
     }
 
     @Override
     public void afterEach(final ExtensionContext context) {
-        if (!isPerClass(context)) {
-            doRelease(context);
-            context.getStore(NAMESPACE).get(Meecrowave.class, Meecrowave.class).close();
+        ClassLoader oldClTmp = null;
+        try {
+            if (!isPerClass(context)) {
+                if (meecrowaveCL != null) {
+                    oldClTmp = Thread.currentThread().getContextClassLoader();
+                    Thread.currentThread().setContextClassLoader(meecrowaveCL);
+                }
+                doRelease(context);
+                context.getStore(NAMESPACE).get(Meecrowave.class, Meecrowave.class).close();
+            }
+        }
+        finally {
+            if (oldCl != null) {
+                Thread.currentThread().setContextClassLoader(oldCl);
+            }
+            else if (oldClTmp != null) {
+                Thread.currentThread().setContextClassLoader(oldClTmp);
+            }
         }
     }
 
     private void doStart(final ExtensionContext context) {
-        final Meecrowave.Builder builder = new Meecrowave.Builder();
-        final MeecrowaveConfig config = findConfig(context);
-        final String ctx;
-        if (config != null) {
-            ctx = config.context();
+        final Thread thread = Thread.currentThread();
+        ClassLoader oldClTmp = thread.getContextClassLoader();
+        boolean unlocked = false;
+        doLockContext();
 
-            for (final Method method : MeecrowaveConfig.class.getMethods()) {
-                if (MeecrowaveConfig.class != method.getDeclaringClass()) {
-                    continue;
-                }
+        try {
+            ClassLoader newCl = createMwClassLoader();
+            if (newCl != null) {
+                thread.setContextClassLoader(newCl);
+            }
 
-                try {
-                    final Object value = method.invoke(config);
+            final Meecrowave.Builder builder = new Meecrowave.Builder();
+            final MeecrowaveConfig config = findConfig(context);
+            final String ctx;
+            if (config != null) {
+                ctx = config.context();
 
-                    final Field configField = Configuration.class.getDeclaredField(method.getName());
-                    if (!configField.isAccessible()) {
-                        configField.setAccessible(true);
+                for (final Method method : MeecrowaveConfig.class.getMethods()) {
+                    if (MeecrowaveConfig.class != method.getDeclaringClass()) {
+                        continue;
                     }
 
-                    if (value != null && (!String.class.isInstance(value) || !value.toString().isEmpty())) {
+                    try {
+                        final Object value = method.invoke(config);
+
+                        final Field configField = Configuration.class.getDeclaredField(method.getName());
                         if (!configField.isAccessible()) {
                             configField.setAccessible(true);
                         }
-                        configField.set(builder, File.class == configField.getType() ? /*we use string instead */new File(value.toString()) : value);
+
+                        if (value != null && (!String.class.isInstance(value) || !value.toString().isEmpty())) {
+                            if (!configField.isAccessible()) {
+                                configField.setAccessible(true);
+                            }
+                            configField.set(builder, File.class == configField.getType() ? /*we use string instead */new File(value.toString()) : value);
+                        }
                     }
-                } catch (final NoSuchFieldException nsfe) {
-                    // ignored
-                } catch (final Exception e) {
-                    throw new IllegalStateException(e);
+                    catch (final NoSuchFieldException nsfe) {
+                        // ignored
+                    }
+                    catch (final Exception e) {
+                        throw new IllegalStateException(e);
+                    }
+                }
+
+                if (builder.getHttpPort() < 0) {
+                    builder.randomHttpPort();
                 }
             }
-
-            if (builder.getHttpPort() < 0) {
-                builder.randomHttpPort();
+            else {
+                ctx = "";
             }
-        } else {
-            ctx = "";
-        }
-        final ExtensionContext.Store store = context.getStore(NAMESPACE);
-        final Meecrowave meecrowave = new Meecrowave(builder);
-        store.put(Meecrowave.class, meecrowave);
-        store.put(Meecrowave.Builder.class, builder);
-        meecrowave.bake(ctx);
+            final ExtensionContext.Store store = context.getStore(NAMESPACE);
+            final Meecrowave meecrowave = new Meecrowave(builder);
+            store.put(Meecrowave.class, meecrowave);
+            store.put(Meecrowave.Builder.class, builder);
+            meecrowave.bake(ctx);
 
-        doInject(context);
-        store.put(LifecyleState.class, onInjection(context, null));
+            doInject(context);
+            store.put(LifecyleState.class, onInjection(context, null));
+        }
+        finally {
+            doUnlockContext(unlocked);
+            if (oldClTmp != null) {
+                thread.setContextClassLoader(oldClTmp);
+            }
+        }
     }
 
     private MeecrowaveConfig findConfig(final ExtensionContext context) {
@@ -144,7 +210,7 @@
     private void doRelease(final ExtensionContext context) {
         ofNullable(context.getStore(NAMESPACE).get(CreationalContext.class, CreationalContext.class))
                 .ifPresent(CreationalContext::release);
-        scopes.beforeEach(context);
+        scopes.afterEach(context);
     }
 
     private void doInject(final ExtensionContext context) {
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
index 7bfbcc8..468707d 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
@@ -20,7 +20,7 @@
 
 import static java.util.Optional.ofNullable;
 
-import javax.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.context.spi.CreationalContext;
 
 import org.apache.meecrowave.testing.Injector;
 import org.apache.meecrowave.testing.MonoBase;
diff --git a/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java b/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java
index 55e0dd3..f4ffc23 100644
--- a/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java
+++ b/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java
@@ -20,11 +20,11 @@
 
 import org.apache.meecrowave.Meecrowave;
 
-import javax.enterprise.context.spi.CreationalContext;
-import javax.enterprise.inject.spi.AnnotatedType;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.enterprise.inject.spi.CDI;
-import javax.enterprise.inject.spi.InjectionTarget;
+import jakarta.enterprise.context.spi.CreationalContext;
+import jakarta.enterprise.inject.spi.AnnotatedType;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.enterprise.inject.spi.InjectionTarget;
 import java.util.stream.Stream;
 
 public final class Injector {
@@ -38,7 +38,7 @@
         }
         final BeanManager bm = CDI.current().getBeanManager();
         final AnnotatedType<?> annotatedType = bm.createAnnotatedType(testInstance.getClass());
-        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final InjectionTarget injectionTarget = bm.getInjectionTargetFactory(annotatedType).createInjectionTarget(null);
         final CreationalContext<?> creationalContext = bm.createCreationalContext(null);
         injectionTarget.inject(testInstance, creationalContext);
         return creationalContext;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
index bb303c6..b2b1a02 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
@@ -29,7 +29,7 @@
 import java.io.InputStream;
 import java.net.URL;
 
-import javax.inject.Inject;
+import jakarta.inject.Inject;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java
index d1bde3e..eac9e6c 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java
@@ -26,9 +26,9 @@
 import java.io.InputStream;
 import java.net.URL;
 
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.context.SessionScoped;
-import javax.inject.Inject;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.enterprise.context.SessionScoped;
+import jakarta.inject.Inject;
 
 import org.apache.meecrowave.io.IO;
 import org.app.MyAppClass;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigMetaAnnotationTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigMetaAnnotationTest.java
index b7cb3fc..f6d0449 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigMetaAnnotationTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigMetaAnnotationTest.java
@@ -20,7 +20,7 @@
 
 import static org.junit.Assert.assertTrue;
 
-import javax.enterprise.context.RequestScoped;
+import jakarta.enterprise.context.RequestScoped;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.junit.jupiter.api.Test;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigScopesTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigScopesTest.java
index f0fd538..6466c9e 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigScopesTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigScopesTest.java
@@ -22,7 +22,7 @@
 
 import java.net.MalformedURLException;
 
-import javax.enterprise.context.RequestScoped;
+import jakarta.enterprise.context.RequestScoped;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.junit.jupiter.api.Test;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveRequestScopedConfig.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveRequestScopedConfig.java
index ee3d00d..3a38b1f 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveRequestScopedConfig.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveRequestScopedConfig.java
@@ -3,7 +3,7 @@
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 
-import javax.enterprise.context.RequestScoped;
+import jakarta.enterprise.context.RequestScoped;
 
 import org.junit.platform.commons.annotation.Testable;
 
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
index 85e2e4f..381bcea 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveTestLifecycleTest.java
@@ -23,7 +23,7 @@
 import static org.junit.Assert.fail;
 import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
 
-import javax.inject.Inject;
+import jakarta.inject.Inject;
 
 import org.apache.meecrowave.junit5.bean.Appender;
 import org.junit.jupiter.api.AfterAll;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClass2MeecrowaveConfigTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClass2MeecrowaveConfigTest.java
new file mode 100644
index 0000000..610bebb
--- /dev/null
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClass2MeecrowaveConfigTest.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit5;
+
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit5.bean.SomeCommonInterface;
+import org.apache.meecrowave.testing.ConfigurationInject;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestInstance;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import static org.junit.Assert.assertEquals;
+import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
+
+@TestInstance(PER_CLASS)
+@MeecrowaveConfig(scanningPackageIncludes = "org.apache.meecrowave.junit5.PerClass2MeecrowaveConfigTest")
+class PerClass2MeecrowaveConfigTest {
+    @ConfigurationInject
+    private Meecrowave.Builder config;
+
+
+    private @Inject SomeCommonInterface bigOtherOracle;
+
+    @Test
+    public void testBeanPickup() throws Exception {
+        assertEquals(43, bigOtherOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
+    @Test
+    public void testBeanPickup2() throws Exception {
+        assertEquals(43, bigOtherOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
+    @Test
+    public void testBeanPickup3() throws Exception {
+        assertEquals(43, bigOtherOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
+    @Test
+    public void testBeanPickup4() throws Exception {
+        assertEquals(43, bigOtherOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
+
+
+    @ApplicationScoped
+    public static class MyCommonImpl2 implements SomeCommonInterface {
+
+        @Override
+        public int meaningOfLife() {
+            return 43;
+        }
+    }
+}
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java
index f12c826..65806ea 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveConfigTest.java
@@ -27,11 +27,12 @@
 import java.io.InputStream;
 import java.net.URL;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
 
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.io.IO;
+import org.apache.meecrowave.junit5.bean.SomeCommonInterface;
 import org.apache.meecrowave.testing.ConfigurationInject;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.TestInstance;
@@ -45,6 +46,8 @@
     @Inject
     private Bean bean;
 
+    private @Inject SomeCommonInterface bigOracle;
+
     private static Bean instance;
 
     @Test
@@ -57,6 +60,30 @@
         doTest();
     }
 
+    @Test
+    public void testBeanPickup() throws Exception {
+        assertEquals(42, bigOracle.meaningOfLife());
+        Thread.sleep(500L);
+    }
+
+    @Test
+    public void testBeanPickup2() throws Exception {
+        assertEquals(42, bigOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
+    @Test
+    public void testBeanPickup3() throws Exception {
+        assertEquals(42, bigOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
+    @Test
+    public void testBeanPickup4() throws Exception {
+        assertEquals(42, bigOracle.meaningOfLife());
+        Thread.sleep(50L);
+    }
+
     private void doTest() {
         if (instance == null) {
             first();
@@ -89,4 +116,13 @@
             return "ok";
         }
     }
+
+    @ApplicationScoped
+    public static class MyCommonImpl1 implements SomeCommonInterface {
+
+        @Override
+        public int meaningOfLife() {
+            return 42;
+        }
+    }
 }
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveTestLifecycleTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveTestLifecycleTest.java
index e26fd83..6a48456 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveTestLifecycleTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/PerClassMeecrowaveTestLifecycleTest.java
@@ -21,7 +21,7 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
 
-import javax.inject.Inject;
+import jakarta.inject.Inject;
 
 import org.apache.meecrowave.junit5.bean.Appender;
 import org.junit.jupiter.api.AfterAll;
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/ScopesTest.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/ScopesTest.java
index 0982762..0b84387 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/ScopesTest.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/ScopesTest.java
@@ -21,13 +21,13 @@
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.context.spi.Context;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.enterprise.context.spi.Context;
 
 import org.apache.webbeans.config.WebBeansContext;
 import org.junit.jupiter.api.Test;
 
-@MeecrowaveConfig
+@MonoMeecrowaveConfig
 @Scopes(scopes = RequestScoped.class)
 class ScopesTest {
     @Test
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/Appender.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/Appender.java
index e8b09f0..beafc4e 100644
--- a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/Appender.java
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/Appender.java
@@ -18,7 +18,7 @@
  */
 package org.apache.meecrowave.junit5.bean;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
 public class Appender {
diff --git a/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/SomeCommonInterface.java b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/SomeCommonInterface.java
new file mode 100644
index 0000000..aafe3fa
--- /dev/null
+++ b/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/bean/SomeCommonInterface.java
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.junit5.bean;
+
+/**
+ * Common interface to check whether Beans are really only picked up per class
+ */
+public interface SomeCommonInterface {
+    int meaningOfLife();
+}
diff --git a/meecrowave-junit/src/test/java/org/app/Endpoint.java b/meecrowave-junit/src/test/java/org/app/Endpoint.java
index 67622ba..8d5a2c5 100644
--- a/meecrowave-junit/src/test/java/org/app/Endpoint.java
+++ b/meecrowave-junit/src/test/java/org/app/Endpoint.java
@@ -18,12 +18,12 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("test")
 @ApplicationScoped
diff --git a/meecrowave-junit/src/test/java/org/app/Injectable.java b/meecrowave-junit/src/test/java/org/app/Injectable.java
index 2b8cc7f..d31f7f8 100644
--- a/meecrowave-junit/src/test/java/org/app/Injectable.java
+++ b/meecrowave-junit/src/test/java/org/app/Injectable.java
@@ -18,7 +18,7 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
 public class Injectable {
diff --git a/meecrowave-junit/src/test/java/org/app/MyAppClass.java b/meecrowave-junit/src/test/java/org/app/MyAppClass.java
index e817188..b391d0b 100644
--- a/meecrowave-junit/src/test/java/org/app/MyAppClass.java
+++ b/meecrowave-junit/src/test/java/org/app/MyAppClass.java
@@ -16,7 +16,7 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 /**
  * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
diff --git a/meecrowave-junit/src/test/java/org/app/MyReqClass.java b/meecrowave-junit/src/test/java/org/app/MyReqClass.java
index f229682..58ad696 100644
--- a/meecrowave-junit/src/test/java/org/app/MyReqClass.java
+++ b/meecrowave-junit/src/test/java/org/app/MyReqClass.java
@@ -16,7 +16,7 @@
  */
 package org.app;
 
-import javax.enterprise.context.RequestScoped;
+import jakarta.enterprise.context.RequestScoped;
 
 /**
  * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
diff --git a/meecrowave-junit/src/test/java/org/app/RsApp.java b/meecrowave-junit/src/test/java/org/app/RsApp.java
index 1463b98..e47452d 100644
--- a/meecrowave-junit/src/test/java/org/app/RsApp.java
+++ b/meecrowave-junit/src/test/java/org/app/RsApp.java
@@ -18,9 +18,9 @@
  */
 package org.app;
 
-import javax.enterprise.context.Dependent;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
+import jakarta.enterprise.context.Dependent;
+import jakarta.ws.rs.ApplicationPath;
+import jakarta.ws.rs.core.Application;
 
 @Dependent
 @ApplicationPath("api")
diff --git a/meecrowave-letsencrypt/pom.xml b/meecrowave-letsencrypt/pom.xml
index beae007..16259b3 100644
--- a/meecrowave-letsencrypt/pom.xml
+++ b/meecrowave-letsencrypt/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
diff --git a/meecrowave-letsencrypt/src/main/java/org/apache/meecrowave/letencrypt/LetsEncryptValve.java b/meecrowave-letsencrypt/src/main/java/org/apache/meecrowave/letencrypt/LetsEncryptValve.java
index d43a612..d86d11e 100644
--- a/meecrowave-letsencrypt/src/main/java/org/apache/meecrowave/letencrypt/LetsEncryptValve.java
+++ b/meecrowave-letsencrypt/src/main/java/org/apache/meecrowave/letencrypt/LetsEncryptValve.java
@@ -4,7 +4,7 @@
 
 import java.io.IOException;
 
-import javax.servlet.ServletException;
+import jakarta.servlet.ServletException;
 
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.connector.Request;
diff --git a/meecrowave-maven-plugin/pom.xml b/meecrowave-maven-plugin/pom.xml
index 9c383b4..e948702 100644
--- a/meecrowave-maven-plugin/pom.xml
+++ b/meecrowave-maven-plugin/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <groupId>org.apache.meecrowave</groupId>
     <artifactId>meecrowave</artifactId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -63,12 +63,6 @@
       <groupId>org.apache.maven</groupId>
       <artifactId>maven-core</artifactId>
       <version>${maven.version}</version>
-      <exclusions>
-        <exclusion>
-          <groupId>javax.inject</groupId>
-          <artifactId>javax.inject</artifactId>
-        </exclusion>
-      </exclusions>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.plugin-tools</groupId>
@@ -150,7 +144,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-plugin-plugin</artifactId>
-        <version>3.5.2</version>
+        <version>3.13.1</version>
         <executions>
           <execution>
             <id>mojo-descriptor</id>
@@ -173,7 +167,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-plugin-plugin</artifactId>
-        <version>3.5.2</version>
+        <version>3.13.1</version>
       </plugin>
     </plugins>
   </reporting>
diff --git a/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java b/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java
index fb79211..6d9d90a 100644
--- a/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java
+++ b/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java
@@ -44,7 +44,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Stream;
 
-import javax.enterprise.inject.Model;
+import jakarta.enterprise.inject.Model;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.cxf.helpers.FileUtils;
diff --git a/meecrowave-maven-plugin/src/test/java/org/app/AdditionalEndpoint.java b/meecrowave-maven-plugin/src/test/java/org/app/AdditionalEndpoint.java
index 54c524b..26ba0fa 100644
--- a/meecrowave-maven-plugin/src/test/java/org/app/AdditionalEndpoint.java
+++ b/meecrowave-maven-plugin/src/test/java/org/app/AdditionalEndpoint.java
@@ -18,11 +18,11 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("additional")
 @ApplicationScoped
diff --git a/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java b/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java
index b3d65cd..f22077d 100644
--- a/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java
+++ b/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java
@@ -18,12 +18,12 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MediaType;
 
 @Path("test")
 @ApplicationScoped
diff --git a/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java b/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java
index 2b8cc7f..d31f7f8 100644
--- a/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java
+++ b/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java
@@ -18,7 +18,7 @@
  */
 package org.app;
 
-import javax.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.ApplicationScoped;
 
 @ApplicationScoped
 public class Injectable {
diff --git a/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java b/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java
index 1463b98..e47452d 100644
--- a/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java
+++ b/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java
@@ -18,9 +18,9 @@
  */
 package org.app;
 
-import javax.enterprise.context.Dependent;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
+import jakarta.enterprise.context.Dependent;
+import jakarta.ws.rs.ApplicationPath;
+import jakarta.ws.rs.core.Application;
 
 @Dependent
 @ApplicationPath("api")
diff --git a/meecrowave-oauth2-minimal/pom.xml b/meecrowave-oauth2-minimal/pom.xml
index d934f29..12e7801 100644
--- a/meecrowave-oauth2-minimal/pom.xml
+++ b/meecrowave-oauth2-minimal/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -47,11 +47,41 @@
 
   <dependencies>
     <dependency>
+      <groupId>jakarta.inject</groupId>
+      <artifactId>jakarta.inject-api</artifactId>
+    </dependency>
+
+    <dependency>
       <groupId>org.apache.meecrowave</groupId>
       <artifactId>meecrowave-core</artifactId>
       <version>${project.version}</version>
     </dependency>
     <dependency>
+      <groupId>jakarta.ws.rs</groupId>
+      <artifactId>jakarta.ws.rs-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.json</groupId>
+      <artifactId>jakarta.json-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.json.bind</groupId>
+      <artifactId>jakarta.json.bind-api</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-rs-security-jose</artifactId>
+      <version>${cxf.version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.cxf</groupId>
       <artifactId>cxf-rt-rs-security-oauth2</artifactId>
       <version>${cxf.version}</version>
@@ -110,9 +140,8 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jpa_2.2_spec</artifactId>
-      <version>${jpa-spec.version}</version>
+      <groupId>jakarta.persistence</groupId>
+      <artifactId>jakarta.persistence-api</artifactId>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -155,8 +184,8 @@
 <!--X TODO check
     <dependency>
       <groupId>org.bouncycastle</groupId>
-      <artifactId>bcprov-jdk15</artifactId>
-      <version>1.46</version>
+      <artifactId>bcpkix-jdk15on</artifactId>
+      <version>1.64</version>
       <scope>test</scope>
     </dependency>
   -->
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java
index a985bf9..e875340 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java
@@ -26,7 +26,7 @@
 import org.apache.cxf.rs.security.oauth2.provider.JCacheOAuthDataProvider;
 import org.apache.cxf.rs.security.oauth2.tokens.refresh.RefreshToken;
 
-import javax.annotation.PreDestroy;
+import jakarta.annotation.PreDestroy;
 import javax.cache.CacheException;
 import javax.cache.CacheManager;
 import javax.cache.Caching;
@@ -35,10 +35,10 @@
 import javax.cache.integration.CacheLoader;
 import javax.cache.integration.CacheWriter;
 import javax.cache.spi.CachingProvider;
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.spi.Bean;
-import javax.enterprise.inject.spi.BeanManager;
-import javax.inject.Inject;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.spi.Bean;
+import jakarta.enterprise.inject.spi.BeanManager;
+import jakarta.inject.Inject;
 import java.io.File;
 import java.net.URI;
 import java.util.Set;
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java
index c3c8591..e5a8891 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java
@@ -25,8 +25,8 @@
 import org.apache.cxf.rs.security.oauth2.tokens.bearer.BearerAccessToken;
 import org.apache.cxf.rs.security.oauth2.tokens.refresh.RefreshToken;
 
-import javax.persistence.EntityManagerFactory;
-import javax.persistence.Persistence;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.HashMap;
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java
index 7421631..b3712af 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java
@@ -59,13 +59,13 @@
 import org.apache.meecrowave.oauth2.data.RefreshTokenEnabledProvider;
 import org.apache.meecrowave.oauth2.provider.JCacheCodeDataProvider;
 
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
 import javax.crypto.spec.SecretKeySpec;
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.ws.rs.core.MultivaluedMap;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.ws.rs.core.MultivaluedMap;
 import java.io.IOException;
 import java.io.StringReader;
 import java.nio.charset.StandardCharsets;
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java
index 58bda46..401e87e 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java
@@ -21,7 +21,7 @@
 import org.apache.cxf.Bus;
 import org.apache.meecrowave.oauth2.configuration.OAuth2Options;
 
-import javax.enterprise.inject.Vetoed;
+import jakarta.enterprise.inject.Vetoed;
 
 @Vetoed
 public class JCacheCodeDataProvider extends org.apache.cxf.rs.security.oauth2.grants.code.JCacheCodeDataProvider {
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java
index c08414d..4647496 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java
@@ -23,10 +23,10 @@
 import org.apache.meecrowave.Meecrowave;
 import org.apache.meecrowave.oauth2.configuration.OAuth2Options;
 
-import javax.enterprise.context.Dependent;
-import javax.inject.Inject;
-import javax.ws.rs.ApplicationPath;
-import javax.ws.rs.core.Application;
+import jakarta.enterprise.context.Dependent;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.ApplicationPath;
+import jakarta.ws.rs.core.Application;
 import java.util.HashSet;
 import java.util.Set;
 
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java
index 7cd2582..77703a4 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java
@@ -29,23 +29,23 @@
 import org.apache.cxf.security.SecurityContext;
 import org.apache.meecrowave.oauth2.configuration.OAuth2Configurer;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.inject.Vetoed;
-import javax.inject.Inject;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.inject.Vetoed;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.Context;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.core.Response;
 import java.security.Principal;
 
-import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-import static javax.ws.rs.core.MediaType.APPLICATION_XML;
-import static javax.ws.rs.core.MediaType.TEXT_HTML;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_XML;
+import static jakarta.ws.rs.core.MediaType.TEXT_HTML;
 
 @ApplicationScoped
 @Path("authorize")
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java
index c0930c0..5f588cc 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java
@@ -18,21 +18,21 @@
  */
 package org.apache.meecrowave.oauth2.resource;
 
-import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
 
 import java.util.List;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.inject.Typed;
-import javax.inject.Inject;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.enterprise.inject.Typed;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.cxf.rs.security.oauth2.common.Client;
 import org.apache.cxf.rs.security.oauth2.services.TokenRevocationService;
diff --git a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java
index 2b2f18b..31685b0 100644
--- a/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java
+++ b/meecrowave-oauth2-minimal/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java
@@ -18,21 +18,21 @@
  */
 package org.apache.meecrowave.oauth2.resource;
 
-import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
 
 import java.util.List;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.enterprise.context.RequestScoped;
-import javax.enterprise.inject.Typed;
-import javax.inject.Inject;
-import javax.ws.rs.Consumes;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.Response;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.context.RequestScoped;
+import jakarta.enterprise.inject.Typed;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.Consumes;
+import jakarta.ws.rs.POST;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.core.MultivaluedMap;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.cxf.rs.security.oauth2.common.Client;
 import org.apache.cxf.rs.security.oauth2.services.AccessTokenService;
diff --git a/meecrowave-oauth2-minimal/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java b/meecrowave-oauth2-minimal/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
index ad7460a..b2da7a3 100644
--- a/meecrowave-oauth2-minimal/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
+++ b/meecrowave-oauth2-minimal/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
@@ -35,6 +35,7 @@
 import org.eclipse.microprofile.jwt.JsonWebToken;
 import org.junit.BeforeClass;
 import org.junit.ClassRule;
+import org.junit.Ignore;
 import org.junit.Test;
 
 import javax.cache.Cache;
@@ -42,15 +43,15 @@
 import javax.cache.Caching;
 import javax.cache.configuration.MutableConfiguration;
 import javax.cache.spi.CachingProvider;
-import javax.json.JsonObject;
-import javax.json.JsonString;
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbBuilder;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Form;
-import javax.ws.rs.core.Response;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonString;
+import jakarta.json.bind.Jsonb;
+import jakarta.json.bind.JsonbBuilder;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.WebTarget;
+import jakarta.ws.rs.core.Form;
+import jakarta.ws.rs.core.Response;
 import java.io.File;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -62,15 +63,16 @@
 import java.util.stream.Stream;
 
 import static java.util.Collections.singletonList;
-import static javax.ws.rs.client.Entity.entity;
-import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED_TYPE;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
+import static jakarta.ws.rs.client.Entity.entity;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED_TYPE;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+@Ignore //X TODO disabled for now
 public class OAuth2Test {
     private static final File KEYSTORE = new File("target/OAuth2Test/keystore.jceks");
     private static PublicKey PUBLIC_KEY;
diff --git a/meecrowave-oauth2/pom.xml b/meecrowave-oauth2/pom.xml
index cdab270..21761dd 100644
--- a/meecrowave-oauth2/pom.xml
+++ b/meecrowave-oauth2/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -67,9 +67,8 @@
       <version>${geronimo-jcache_1.0_spec.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jpa_2.2_spec</artifactId>
-      <version>${jpa-spec.version}</version>
+      <groupId>jakarta.persistence</groupId>
+      <artifactId>jakarta.persistence-api</artifactId>
     </dependency>
     <dependency>
       <groupId>commons-cli</groupId>
@@ -88,7 +87,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-shade-plugin</artifactId>
-        <version>3.2.4</version>
         <executions>
           <execution>
             <id>bundle</id>
diff --git a/meecrowave-proxy/pom.xml b/meecrowave-proxy/pom.xml
index 6240b84..b39da8e 100644
--- a/meecrowave-proxy/pom.xml
+++ b/meecrowave-proxy/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -46,15 +46,21 @@
     </dependency>
 
     <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>${junit.version}</version>
       <scope>test</scope>
     </dependency>
     <dependency> <!-- for multiparttest on java > 8 -->
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-activation_1.1_spec</artifactId>
-      <version>1.1</version>
+      <groupId>jakarta.activation</groupId>
+      <artifactId>jakarta.activation-api</artifactId>
       <scope>test</scope>
     </dependency>
     <dependency>
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/configuration/Routes.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/configuration/Routes.java
index c3e4049..888cc15 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/configuration/Routes.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/configuration/Routes.java
@@ -22,10 +22,10 @@
 import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
-import javax.enterprise.event.NotificationOptions;
-import javax.json.JsonObject;
-import javax.json.bind.annotation.JsonbTransient;
-import javax.ws.rs.client.Client;
+import jakarta.enterprise.event.NotificationOptions;
+import jakarta.json.JsonObject;
+import jakarta.json.bind.annotation.JsonbTransient;
+import jakarta.ws.rs.client.Client;
 
 public class Routes {
     public JsonObject extensions; // placeholder for custom metadata usable in observers
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java
index c18b5b4..c0fe8ad 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/ProxyServlet.java
@@ -38,24 +38,24 @@
 import java.util.function.Function;
 import java.util.stream.Stream;
 
-import javax.servlet.AsyncContext;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
-import javax.servlet.http.Cookie;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.HttpMethod;
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.client.CompletionStageRxInvoker;
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.Invocation;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.NewCookie;
-import javax.ws.rs.core.Response;
+import jakarta.servlet.AsyncContext;
+import jakarta.servlet.ServletConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletOutputStream;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.ws.rs.HttpMethod;
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.client.CompletionStageRxInvoker;
+import jakarta.ws.rs.client.Entity;
+import jakarta.ws.rs.client.Invocation;
+import jakarta.ws.rs.client.WebTarget;
+import jakarta.ws.rs.core.HttpHeaders;
+import jakarta.ws.rs.core.MediaType;
+import jakarta.ws.rs.core.NewCookie;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.meecrowave.proxy.servlet.configuration.Routes;
 import org.apache.meecrowave.proxy.servlet.service.ConfigurationLoader;
@@ -141,7 +141,7 @@
                     continue;
                 }
                 request = request.cookie(
-                        new javax.ws.rs.core.Cookie(cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getDomain(), cookie.getVersion()));
+                        new jakarta.ws.rs.core.Cookie(cookie.getName(), cookie.getValue(), cookie.getPath(), cookie.getDomain()));
             }
         }
 
@@ -205,7 +205,6 @@
     protected void addCookie(final HttpServletResponse resp, final Map.Entry<String, NewCookie> cookie) {
         final NewCookie nc = cookie.getValue();
         final Cookie servletCookie = new Cookie(cookie.getKey(), nc.getValue());
-        servletCookie.setComment(nc.getComment());
         if (nc.getDomain() != null) {
             servletCookie.setDomain(nc.getDomain());
         }
@@ -213,7 +212,6 @@
         servletCookie.setSecure(nc.isSecure());
         servletCookie.setMaxAge(nc.getMaxAge());
         servletCookie.setPath(nc.getPath());
-        servletCookie.setVersion(nc.getVersion());
         resp.addCookie(servletCookie);
     }
 
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/CDIProxyServlet.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/CDIProxyServlet.java
index 1a55b8f..247c3d3 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/CDIProxyServlet.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/CDIProxyServlet.java
@@ -26,11 +26,11 @@
 import java.util.concurrent.CompletionStage;
 import java.util.function.Function;
 
-import javax.enterprise.event.Event;
-import javax.inject.Inject;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.Response;
+import jakarta.enterprise.event.Event;
+import jakarta.inject.Inject;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.meecrowave.proxy.servlet.configuration.Routes;
 import org.apache.meecrowave.proxy.servlet.front.ProxyServlet;
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/AfterResponse.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/AfterResponse.java
index 5bf7baf..1c0625c 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/AfterResponse.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/AfterResponse.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.proxy.servlet.front.cdi.event;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.meecrowave.proxy.servlet.configuration.Routes;
 
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BaseEvent.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BaseEvent.java
index c368941..a2f0228 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BaseEvent.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BaseEvent.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.proxy.servlet.front.cdi.event;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 public class BaseEvent {
     private final HttpServletRequest request;
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BeforeRequest.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BeforeRequest.java
index 43fa33d..b1bcc14 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BeforeRequest.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/BeforeRequest.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.proxy.servlet.front.cdi.event;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
 
 import org.apache.meecrowave.proxy.servlet.configuration.Routes;
 
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnRequest.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnRequest.java
index ec16cbf..8a570bb 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnRequest.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnRequest.java
@@ -21,9 +21,9 @@
 import java.io.IOException;
 import java.util.concurrent.CompletionStage;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.Response;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.meecrowave.proxy.servlet.configuration.Routes;
 import org.apache.meecrowave.proxy.servlet.front.cdi.func.IOFunction;
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnResponse.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnResponse.java
index 74cecfe..d1d9395 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnResponse.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/event/OnResponse.java
@@ -22,9 +22,9 @@
 import java.io.InputStream;
 import java.util.function.Function;
 
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.ws.rs.core.Response;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.meecrowave.proxy.servlet.front.cdi.func.IOConsumer;
 
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/extension/SpyExtension.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/extension/SpyExtension.java
index 67b0492..97872c2 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/extension/SpyExtension.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/front/cdi/extension/SpyExtension.java
@@ -18,9 +18,9 @@
  */
 package org.apache.meecrowave.proxy.servlet.front.cdi.extension;
 
-import javax.enterprise.event.Observes;
-import javax.enterprise.inject.spi.Extension;
-import javax.enterprise.inject.spi.ProcessObserverMethod;
+import jakarta.enterprise.event.Observes;
+import jakarta.enterprise.inject.spi.Extension;
+import jakarta.enterprise.inject.spi.ProcessObserverMethod;
 
 import org.apache.meecrowave.proxy.servlet.front.cdi.event.AfterResponse;
 import org.apache.meecrowave.proxy.servlet.front.cdi.event.BeforeRequest;
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/meecrowave/ProxyServletSetup.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/meecrowave/ProxyServletSetup.java
index 5e1e723..0d87b99 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/meecrowave/ProxyServletSetup.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/meecrowave/ProxyServletSetup.java
@@ -18,8 +18,8 @@
  */
 package org.apache.meecrowave.proxy.servlet.meecrowave;
 
-import javax.servlet.MultipartConfigElement;
-import javax.servlet.ServletRegistration;
+import jakarta.servlet.MultipartConfigElement;
+import jakarta.servlet.ServletRegistration;
 
 import org.apache.catalina.Context;
 import org.apache.meecrowave.Meecrowave;
diff --git a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/service/ConfigurationLoader.java b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/service/ConfigurationLoader.java
index a0ed033..b9defcb 100644
--- a/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/service/ConfigurationLoader.java
+++ b/meecrowave-proxy/src/main/java/org/apache/meecrowave/proxy/servlet/service/ConfigurationLoader.java
@@ -50,22 +50,22 @@
 import java.util.stream.Collector;
 import java.util.stream.Stream;
 
-import javax.enterprise.event.NotificationOptions;
-import javax.json.Json;
-import javax.json.JsonBuilderFactory;
-import javax.json.JsonObject;
-import javax.json.JsonObjectBuilder;
-import javax.json.JsonValue;
-import javax.json.bind.Jsonb;
-import javax.json.bind.JsonbBuilder;
-import javax.json.bind.JsonbConfig;
-import javax.json.spi.JsonProvider;
+import jakarta.enterprise.event.NotificationOptions;
+import jakarta.json.Json;
+import jakarta.json.JsonBuilderFactory;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonObjectBuilder;
+import jakarta.json.JsonValue;
+import jakarta.json.bind.Jsonb;
+import jakarta.json.bind.JsonbBuilder;
+import jakarta.json.bind.JsonbConfig;
+import jakarta.json.spi.JsonProvider;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 import javax.net.ssl.X509TrustManager;
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
 
 import org.apache.meecrowave.proxy.servlet.configuration.Routes;
 
diff --git a/meecrowave-proxy/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/meecrowave-proxy/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
similarity index 100%
rename from meecrowave-proxy/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
rename to meecrowave-proxy/src/main/resources/META-INF/services/jakarta.enterprise.inject.spi.Extension
diff --git a/meecrowave-proxy/src/test/java/org/apache/meecrowave/proxy/servlet/ProxyServletTest.java b/meecrowave-proxy/src/test/java/org/apache/meecrowave/proxy/servlet/ProxyServletTest.java
index cd3024e..f94fe3c 100644
--- a/meecrowave-proxy/src/test/java/org/apache/meecrowave/proxy/servlet/ProxyServletTest.java
+++ b/meecrowave-proxy/src/test/java/org/apache/meecrowave/proxy/servlet/ProxyServletTest.java
@@ -20,10 +20,10 @@
 
 import static java.util.Arrays.asList;
 import static java.util.Optional.ofNullable;
-import static javax.ws.rs.client.Entity.entity;
-import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
-import static javax.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
-import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static jakarta.ws.rs.client.Entity.entity;
+import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON;
+import static jakarta.ws.rs.core.MediaType.MULTIPART_FORM_DATA;
+import static jakarta.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -32,10 +32,10 @@
 import java.nio.charset.StandardCharsets;
 import java.util.function.Consumer;
 
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
+import jakarta.ws.rs.client.Client;
+import jakarta.ws.rs.client.ClientBuilder;
+import jakarta.ws.rs.client.WebTarget;
+import jakarta.ws.rs.core.Response;
 
 import org.apache.cxf.jaxrs.ext.multipart.Attachment;
 import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition;
diff --git a/meecrowave-specs-api/pom.xml b/meecrowave-specs-api/pom.xml
index 87a5165..1874aa5 100644
--- a/meecrowave-specs-api/pom.xml
+++ b/meecrowave-specs-api/pom.xml
@@ -18,12 +18,13 @@
     under the License.
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
-  <modelVersion>4.0.0</modelVersion>
 
   <artifactId>meecrowave-specs-api</artifactId>
   <name>Meecrowave :: Specs API</name>
@@ -34,32 +35,32 @@
 
   <dependencies>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-annotation_1.3_spec</artifactId>
+      <groupId>jakarta.annotation</groupId>
+      <artifactId>jakarta.annotation-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jcdi_2.0_spec</artifactId>
+      <groupId>jakarta.enterprise</groupId>
+      <artifactId>jakarta.enterprise.cdi-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-atinject_1.0_spec</artifactId>
+      <groupId>jakarta.inject</groupId>
+      <artifactId>jakarta.inject-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-interceptor_1.2_spec</artifactId>
+      <groupId>jakarta.interceptor</groupId>
+      <artifactId>jakarta.interceptor-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-json_1.1_spec</artifactId>
+      <groupId>jakarta.json</groupId>
+      <artifactId>jakarta.json-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jsonb_1.0_spec</artifactId>
+      <groupId>jakarta.json.bind</groupId>
+      <artifactId>jakarta.json.bind-api</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.apache.geronimo.specs</groupId>
-      <artifactId>geronimo-jaxrs_2.1_spec</artifactId>
+      <groupId>jakarta.ws.rs</groupId>
+      <artifactId>jakarta.ws.rs-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.tomcat</groupId>
@@ -72,7 +73,6 @@
       <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-shade-plugin</artifactId>
-      <version>3.2.1</version>
       <executions>
         <execution>
           <id>mw-javaee-api</id>
@@ -113,7 +113,7 @@
               <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                 <manifestEntries>
                   <Export-Package>
-                    javax.xml,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.handler.soap,javax.xml.ws.spi,javax.xml.ws.http,javax.xml.ws.soap,javax.xml.soap,javax.xml.namespace,javax.xml.registry,javax.xml.registry.infomodel,javax.xml.rpc,javax.xml.rpc.encoding,javax.xml.rpc.handler,javax.xml.rpc.handler.soap,javax.xml.rpc.holders,javax.xml.rpc.server,javax.xml.rpc.soap,javax.xml.stream,javax.xml.stream.events,javax.xml.stream.util,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.bind.helpers,javax.xml.bind.util,javax.activation,javax.annotation,javax.annotation.security,javax.ejb,javax.ejb.spi,javax.interceptor,javax.resource,javax.resource.cci,javax.resource.spi,javax.resource.spi.endpoint,javax.resource.spi.security,javax.resource.spi.work,javax.enterprise,javax.enterprise.deploy,javax.enterprise.deploy.model,javax.enterprise.deploy.model.exceptions,javax.enterprise.deploy.shared,javax.enterprise.deploy.shared.factories,javax.enterprise.deploy.spi,javax.enterprise.deploy.spi.exceptions,javax.enterprise.deploy.spi.factories,javax.enterprise.deploy.spi.status,javax.management,javax.management.j2ee,javax.management.j2ee.statistics,javax.security,javax.security.jacc,javax.jms,javax.persistence,javax.persistence.spi,javax.transaction,javax.transaction.xa,javax.servlet,javax.servlet.http,javax.servlet.resources,javax.jws,javax.ws.rs,javax.jws.soap
+                    jakarta.xml,jakarta.xml.ws,jakarta.xml.ws.handler,jakarta.xml.ws.handler.soap,jakarta.xml.ws.spi,jakarta.xml.ws.http,jakarta.xml.ws.soap,jakarta.xml.soap,jakarta.xml.namespace,jakarta.xml.registry,jakarta.xml.registry.infomodel,jakarta.xml.rpc,jakarta.xml.rpc.encoding,jakarta.xml.rpc.handler,jakarta.xml.rpc.handler.soap,jakarta.xml.rpc.holders,jakarta.xml.rpc.server,jakarta.xml.rpc.soap,jakarta.xml.stream,jakarta.xml.stream.events,jakarta.xml.stream.util,jakarta.xml.bind,jakarta.xml.bind.annotation,jakarta.xml.bind.annotation.adapters,jakarta.xml.bind.attachment,jakarta.xml.bind.helpers,jakarta.xml.bind.util,jakarta.activation,jakarta.annotation,jakarta.annotation.security,jakarta.ejb,jakarta.ejb.spi,jakarta.interceptor,jakarta.resource,jakarta.resource.cci,jakarta.resource.spi,jakarta.resource.spi.endpoint,jakarta.resource.spi.security,jakarta.resource.spi.work,jakarta.enterprise,jakarta.enterprise.deploy,jakarta.enterprise.deploy.model,jakarta.enterprise.deploy.model.exceptions,jakarta.enterprise.deploy.shared,jakarta.enterprise.deploy.shared.factories,jakarta.enterprise.deploy.spi,jakarta.enterprise.deploy.spi.exceptions,jakarta.enterprise.deploy.spi.factories,jakarta.enterprise.deploy.spi.status,jakarta.management,jakarta.management.j2ee,javax.management.j2ee.statistics,jakarta.security,jakarta.security.jacc,jakarta.jms,jakarta.persistence,jakarta.persistence.spi,jakarta.transaction,jakarta.transaction.xa,jakarta.servlet,jakarta.servlet.http,jakarta.servlet.resources,jakarta.jws,jakarta.ws.rs,jakarta.jws.soap
                   </Export-Package>
                   <Import-Package>org.apache.geronimo.osgi.registry.api;resolution:=optional</Import-Package>
                   <Private-Package>org.apache.openejb.javaee.api.activator,org.apache.geronimo.osgi.locator
@@ -169,8 +169,8 @@
               <filter>
                 <artifact>*:*</artifact>
                 <excludes>
-                  <exclude>javax/servlet/resources/**</exclude>
-                  <exclude>javax/servlet/jsp/resources/**</exclude>
+                  <exclude>jakarta/servlet/resources/**</exclude>
+                  <exclude>jakarta/servlet/jsp/resources/**</exclude>
                   <exclude>META-INF/LICENSE</exclude>
                   <exclude>META-INF/NOTICE</exclude>
                   <exclude>META-INF/README.txt</exclude>
@@ -181,7 +181,7 @@
               <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                 <manifestEntries>
                   <Export-Package>
-                    javax.xml,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.handler.soap,javax.xml.ws.spi,javax.xml.ws.http,javax.xml.ws.soap,javax.xml.soap,javax.xml.namespace,javax.xml.registry,javax.xml.registry.infomodel,javax.xml.rpc,javax.xml.rpc.encoding,javax.xml.rpc.handler,javax.xml.rpc.handler.soap,javax.xml.rpc.holders,javax.xml.rpc.server,javax.xml.rpc.soap,javax.xml.stream,javax.xml.stream.events,javax.xml.stream.util,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.bind.helpers,javax.xml.bind.util,javax.activation,javax.annotation,javax.annotation.security,javax.ejb,javax.ejb.spi,javax.interceptor,javax.resource,javax.resource.cci,javax.resource.spi,javax.resource.spi.endpoint,javax.resource.spi.security,javax.resource.spi.work,javax.enterprise,javax.enterprise.deploy,javax.enterprise.deploy.model,javax.enterprise.deploy.model.exceptions,javax.enterprise.deploy.shared,javax.enterprise.deploy.shared.factories,javax.enterprise.deploy.spi,javax.enterprise.deploy.spi.exceptions,javax.enterprise.deploy.spi.factories,javax.enterprise.deploy.spi.status,javax.management,javax.management.j2ee,javax.management.j2ee.statistics,javax.security,javax.security.jacc,javax.jms,javax.persistence,javax.persistence.spi,javax.transaction,javax.transaction.xa,javax.servlet,javax.servlet.http,javax.servlet.resources,javax.jws,javax.ws.rs,javax.jws.soap
+                    jakarta.xml,jakarta.xml.ws,jakarta.xml.ws.handler,jakarta.xml.ws.handler.soap,jakarta.xml.ws.spi,jakarta.xml.ws.http,jakarta.xml.ws.soap,jakarta.xml.soap,jakarta.xml.namespace,jakarta.xml.registry,jakarta.xml.registry.infomodel,jakarta.xml.rpc,jakarta.xml.rpc.encoding,jakarta.xml.rpc.handler,jakarta.xml.rpc.handler.soap,jakarta.xml.rpc.holders,jakarta.xml.rpc.server,jakarta.xml.rpc.soap,jakarta.xml.stream,jakarta.xml.stream.events,jakarta.xml.stream.util,jakarta.xml.bind,jakarta.xml.bind.annotation,jakarta.xml.bind.annotation.adapters,jakarta.xml.bind.attachment,jakarta.xml.bind.helpers,jakarta.xml.bind.util,jakarta.activation,jakarta.annotation,jakarta.annotation.security,jakarta.ejb,jakarta.ejb.spi,jakarta.interceptor,jakarta.resource,jakarta.resource.cci,jakarta.resource.spi,jakarta.resource.spi.endpoint,jakarta.resource.spi.security,jakarta.resource.spi.work,jakarta.enterprise,jakarta.enterprise.deploy,jakarta.enterprise.deploy.model,jakarta.enterprise.deploy.model.exceptions,jakarta.enterprise.deploy.shared,jakarta.enterprise.deploy.shared.factories,jakarta.enterprise.deploy.spi,jakarta.enterprise.deploy.spi.exceptions,jakarta.enterprise.deploy.spi.factories,jakarta.enterprise.deploy.spi.status,jakarta.management,jakarta.management.j2ee,jakarta.management.j2ee.statistics,jakarta.security,jakarta.security.jacc,jakarta.jms,jakarta.persistence,jakarta.persistence.spi,jakarta.transaction,jakarta.transaction.xa,jakarta.servlet,jakarta.servlet.http,jakarta.servlet.resources,jakarta.jws,jakarta.ws.rs,jakarta.jws.soap
                   </Export-Package>
                   <Import-Package>org.apache.geronimo.osgi.registry.api;resolution:=optional</Import-Package>
                   <Private-Package>org.apache.openejb.javaee.api.activator,org.apache.geronimo.osgi.locator
diff --git a/meecrowave-websocket/pom.xml b/meecrowave-websocket/pom.xml
index 3464fca..ee3b700 100644
--- a/meecrowave-websocket/pom.xml
+++ b/meecrowave-websocket/pom.xml
@@ -21,7 +21,7 @@
   <parent>
     <artifactId>meecrowave</artifactId>
     <groupId>org.apache.meecrowave</groupId>
-    <version>1.2.16-SNAPSHOT</version>
+    <version>2.0.0-SNAPSHOT</version>
   </parent>
   <modelVersion>4.0.0</modelVersion>
 
@@ -85,80 +85,6 @@
               </filters>
             </configuration>
           </execution>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-            <configuration>
-              <transformers>
-                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
-              </transformers>
-              <shadedArtifactAttached>true</shadedArtifactAttached>
-              <shadedClassifierName>jakarta</shadedClassifierName>
-              <createDependencyReducedPom>false</createDependencyReducedPom>
-              <artifactSet>
-                <includes>
-                  <include>${project.groupId}:${project.artifactId}</include>
-                  <include>org.apache.tomcat:tomcat-websocket</include>
-                </includes>
-              </artifactSet>
-              <filters>
-                <filter>
-                  <artifact>org.apache.tomcat:tomcat-websocket</artifact>
-                  <excludes>
-                    META-INF/services/javax.websocket.server.ServerEndpointConfig$Configurator
-                  </excludes>
-                </filter>
-                <filter>
-                  <artifact>*:*</artifact>
-                  <excludes>
-                    <exclude>META-INF/*.SF</exclude>
-                    <exclude>META-INF/*.DSA</exclude>
-                    <exclude>META-INF/*.RSA</exclude>
-                  </excludes>
-                </filter>
-              </filters>
-              <relocations>
-                <relocation>
-                  <pattern>javax.activation</pattern>
-                  <shadedPattern>jakarta.activation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.annotation</pattern>
-                  <shadedPattern>jakarta.annotation</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.el</pattern>
-                  <shadedPattern>jakarta.el</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.enterprise</pattern>
-                  <shadedPattern>jakarta.enterprise</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.decorator</pattern>
-                  <shadedPattern>jakarta.decorator</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.inject</pattern>
-                  <shadedPattern>jakarta.inject</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.interceptor</pattern>
-                  <shadedPattern>jakarta.interceptor</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.servlet</pattern>
-                  <shadedPattern>jakarta.servlet</shadedPattern>
-                </relocation>
-                <relocation>
-                  <pattern>javax.websocket</pattern>
-                  <shadedPattern>jakarta.websocket</shadedPattern>
-                </relocation>
-              </relocations>
-            </configuration>
-          </execution>
         </executions>
       </plugin>
     </plugins>
diff --git a/meecrowave-websocket/src/main/java/org/apache/meecrowave/websocket/CDIServerConfigurator.java b/meecrowave-websocket/src/main/java/org/apache/meecrowave/websocket/CDIServerConfigurator.java
index cd25611..9ce37eb 100644
--- a/meecrowave-websocket/src/main/java/org/apache/meecrowave/websocket/CDIServerConfigurator.java
+++ b/meecrowave-websocket/src/main/java/org/apache/meecrowave/websocket/CDIServerConfigurator.java
@@ -18,11 +18,11 @@
  */
 package org.apache.meecrowave.websocket;
 
-import javax.enterprise.inject.spi.CDI;
-import javax.websocket.Extension;
-import javax.websocket.HandshakeResponse;
-import javax.websocket.server.HandshakeRequest;
-import javax.websocket.server.ServerEndpointConfig;
+import jakarta.enterprise.inject.spi.CDI;
+import jakarta.websocket.Extension;
+import jakarta.websocket.HandshakeResponse;
+import jakarta.websocket.server.HandshakeRequest;
+import jakarta.websocket.server.ServerEndpointConfig;
 import java.util.List;
 import java.util.Set;
 
diff --git a/meecrowave-websocket/src/main/resources/META-INF/services/javax.websocket.server.ServerEndpointConfig$Configurator b/meecrowave-websocket/src/main/resources/META-INF/services/jakarta.websocket.server.ServerEndpointConfig$Configurator
similarity index 100%
rename from meecrowave-websocket/src/main/resources/META-INF/services/javax.websocket.server.ServerEndpointConfig$Configurator
rename to meecrowave-websocket/src/main/resources/META-INF/services/jakarta.websocket.server.ServerEndpointConfig$Configurator
diff --git a/pom.xml b/pom.xml
index cf1708a..bee22fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,12 +23,12 @@
   <parent>
     <groupId>org.apache</groupId>
     <artifactId>apache</artifactId>
-    <version>23</version>
+    <version>33</version>
   </parent>
 
   <groupId>org.apache.meecrowave</groupId>
   <artifactId>meecrowave</artifactId>
-  <version>1.2.16-SNAPSHOT</version>
+  <version>2.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <name>Meecrowave</name>
@@ -50,37 +50,69 @@
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <meecrowave.build.name>${project.groupId}.${project.artifactId}</meecrowave.build.name>
 
+    <!--X TODO verify if everything is really needed -->
+    <jakarta.activation-api.version>2.1.2</jakarta.activation-api.version>
+    <jakarta.atinject-api.version>2.0.1</jakarta.atinject-api.version>
+    <jakarta.cdi-api.version>4.0.1</jakarta.cdi-api.version>
+    <jakarta.interceptor-api.version>2.1.0</jakarta.interceptor-api.version>
+    <jakarta.annotation-api.version>2.1.1</jakarta.annotation-api.version>
+    <jakarta.el-api.version>5.0.1</jakarta.el-api.version>
+    <jakarta.persistence-api.version>3.0.0</jakarta.persistence-api.version>
+    <jakarta.transaction-api.version>2.0.1</jakarta.transaction-api.version>
+    <jakarta.validation-api.version>3.0.2</jakarta.validation-api.version>
+    <jakarta.ejb-api.version>4.0.1</jakarta.ejb-api.version>
+    <jakarta.jms-api.version>3.0.0</jakarta.jms-api.version>
+    <jakarta-jsonp-api.version>2.1.1</jakarta-jsonp-api.version>
+    <jakarta-jsonb-api.version>3.0.0</jakarta-jsonb-api.version>
+    <jakarta.ws.rs-api.version>3.1.0</jakarta.ws.rs-api.version>
+    <jakarta.jws-api.version>3.0.0</jakarta.jws-api.version>
+    <jakarta.xml.bind-api.version>4.0.0</jakarta.xml.bind-api.version>
+    <jakarta.xml.soap-api.version>3.0.0</jakarta.xml.soap-api.version>
+    <jakarta.xml.ws-api.version>4.0.0</jakarta.xml.ws-api.version>
+
+
     <junit.version>4.13.2</junit.version>
-    <tomcat.version>9.0.76</tomcat.version>
-    <openwebbeans.version>2.0.27</openwebbeans.version>
-    <cxf.version>3.5.5</cxf.version>
-    <johnzon.version>1.2.20</johnzon.version>
-    <log4j2.version>2.20.0</log4j2.version>
-    <deltaspike.version>1.9.6</deltaspike.version>
-    <jaxb.version>2.2.11</jaxb.version>
-    <openjpa.version>3.2.2</openjpa.version>
+    <tomcat.version>10.1.31</tomcat.version>
+    <openwebbeans.version>4.0.3-SNAPSHOT</openwebbeans.version>
+    <cxf.version>4.1.0-SNAPSHOT</cxf.version>
+    <johnzon.version>2.0.1</johnzon.version>
+    <log4j2.version>2.24.1</log4j2.version>
+    <deltaspike.version>2.0.0</deltaspike.version>
+    <jaxb.version>2.3.0</jaxb.version>
+    <openjpa.version>4.0.1</openjpa.version>
     <jpa-spec.version>1.1</jpa-spec.version>
     <h2.version>2.2.220</h2.version>
     <dbcp2.version>2.9.0</dbcp2.version>
-    <commons-cli.version>1.5.0</commons-cli.version>
-    <xbean.version>4.23</xbean.version>
+    <commons-cli.version>1.8.0</commons-cli.version>
+    <xbean.version>4.26</xbean.version>
     <geronimo-jcache-simple.version>1.0.5</geronimo-jcache-simple.version>
     <geronimo-jcache_1.0_spec.version>1.0-alpha-1</geronimo-jcache_1.0_spec.version>
 
     <java11.jaxb.version>2.3.0</java11.jaxb.version>
   </properties>
 
+  <prerequisites>
+    <maven>3.5.0</maven>
+
+  </prerequisites>
+
   <modules>
     <module>meecrowave-specs-api</module>
+    <module>test-app</module>
     <module>meecrowave-core</module>
     <module>meecrowave-maven-plugin</module>
     <module>meecrowave-gradle-plugin</module>
     <module>meecrowave-junit</module>
     <module>meecrowave-arquillian</module>
     <module>meecrowave-jpa</module>
+<!-- seems jbake is broken on java17 onwards. at least on macos
     <module>meecrowave-doc</module>
+-->
     <module>meecrowave-jta</module>
+
+<!--X TODO re-enable
     <module>integration-tests</module>
+-->
     <module>meecrowave-oauth2-minimal</module>
     <module>meecrowave-oauth2</module>
     <module>meecrowave-letsencrypt</module>
@@ -91,39 +123,51 @@
   <dependencyManagement>
     <dependencies>
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-annotation_1.3_spec</artifactId>
-        <version>1.3</version>
+        <groupId>jakarta.annotation</groupId>
+        <artifactId>jakarta.annotation-api</artifactId>
+        <version>${jakarta.annotation-api.version}</version>
+      </dependency>
+
+
+      <dependency>
+        <groupId>jakarta.enterprise</groupId>
+        <artifactId>jakarta.enterprise.cdi-api</artifactId>
+        <version>${jakarta.cdi-api.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>jakarta.inject</groupId>
+            <artifactId>jakarta.inject-api</artifactId>
+          </exclusion>
+          <exclusion>
+            <groupId>jakarta.enterprise</groupId>
+            <artifactId>jakarta.enterprise.lang-model</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-jcdi_2.0_spec</artifactId>
-        <version>1.3</version>
+        <groupId>jakarta.inject</groupId>
+        <artifactId>jakarta.inject-api</artifactId>
+        <version>${jakarta.atinject-api.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-atinject_1.0_spec</artifactId>
-        <version>1.2</version>
+        <groupId>jakarta.interceptor</groupId>
+        <artifactId>jakarta.interceptor-api</artifactId>
+        <version>${jakarta.interceptor-api.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-interceptor_1.2_spec</artifactId>
-        <version>1.2</version>
+        <groupId>jakarta.json</groupId>
+        <artifactId>jakarta.json-api</artifactId>
+        <version>${jakarta-jsonp-api.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-json_1.1_spec</artifactId>
-        <version>1.5</version>
+        <groupId>jakarta.json.bind</groupId>
+        <artifactId>jakarta.json.bind-api</artifactId>
+        <version>${jakarta-jsonb-api.version}</version>
       </dependency>
       <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-jsonb_1.0_spec</artifactId>
-        <version>1.4</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.geronimo.specs</groupId>
-        <artifactId>geronimo-jaxrs_2.1_spec</artifactId>
-        <version>1.1</version>
+        <groupId>jakarta.ws.rs</groupId>
+        <artifactId>jakarta.ws.rs-api</artifactId>
+        <version>${jakarta.ws.rs-api.version}</version>
       </dependency>
       <dependency>
         <groupId>org.apache.tomcat</groupId>
@@ -135,29 +179,55 @@
         <artifactId>tomcat-jaspic-api</artifactId>
         <version>${tomcat.version}</version>
       </dependency>
+
+      <dependency>
+        <groupId>jakarta.activation</groupId>
+        <artifactId>jakarta.activation-api</artifactId>
+        <version>${jakarta.activation-api.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>jakarta.transaction</groupId>
+        <artifactId>jakarta.transaction-api</artifactId>
+        <version>${jakarta.transaction-api.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>jakarta.persistence</groupId>
+        <artifactId>jakarta.persistence-api</artifactId>
+        <version>${jakarta.persistence-api.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>jakarta.xml.bind</groupId>
+        <artifactId>jakarta.xml.bind-api</artifactId>
+        <version>${jakarta.xml.bind-api.version}</version>
+      </dependency>
+
     </dependencies>
+
   </dependencyManagement>
 
   <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-shade-plugin</artifactId>
+          <version>3.6.0</version>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+
     <plugins>
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-compiler-plugin</artifactId>
-        <version>3.8.1</version>
+        <version>3.13.0</version>
         <configuration>
-          <source>1.8</source>
-          <target>1.8</target>
+          <release>17</release>
         </configuration>
       </plugin>
 
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>3.2.4</version>
-      </plugin>
-
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-jar-plugin</artifactId>
         <version>3.0.2</version>
         <configuration>
@@ -172,7 +242,7 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
-        <version>3.0.0-M5</version>
+        <version>3.2.5</version>
         <configuration>
           <trimStackTrace>false</trimStackTrace>
         </configuration>
@@ -201,42 +271,5 @@
     </plugins>
   </build>
 
-  <profiles>
-    <profile>
-      <id>java11</id>
-      <activation>
-        <jdk>11</jdk>
-      </activation>
-      <dependencyManagement>
-        <dependencies>
-          <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-jaxws_2.2_spec</artifactId>
-            <version>1.1</version>
-          </dependency>
-          <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-ws-metadata_2.0_spec</artifactId>
-            <version>1.1.3</version>
-          </dependency>
-          <dependency>
-            <groupId>org.apache.geronimo.specs</groupId>
-            <artifactId>geronimo-activation_1.1_spec</artifactId>
-            <version>1.1</version>
-          </dependency>
-          <dependency>
-            <groupId>javax.xml.bind</groupId>
-            <artifactId>jaxb-api</artifactId>
-            <version>${java11.jaxb.version}</version>
-          </dependency>
-          <dependency>
-            <groupId>com.sun.xml.bind</groupId>
-            <artifactId>jaxb-impl</artifactId>
-            <version>${java11.jaxb.version}</version>
-          </dependency>
-        </dependencies>
-      </dependencyManagement>
-    </profile>
-  </profiles>
 </project>
 
diff --git a/test-app/pom.xml b/test-app/pom.xml
new file mode 100644
index 0000000..8734428
--- /dev/null
+++ b/test-app/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>2.0.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-test-app</artifactId>
+  <packaging>war</packaging>
+
+  <name>Meecrowave :: test app</name>
+
+
+  <dependencies>
+
+    <dependency>
+      <groupId>jakarta.inject</groupId>
+      <artifactId>jakarta.inject-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.enterprise</groupId>
+      <artifactId>jakarta.enterprise.cdi-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>jakarta.ws.rs</groupId>
+      <artifactId>jakarta.ws.rs-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-servlet-api</artifactId>
+      <scope>provided</scope>
+    </dependency>
+
+
+  </dependencies>
+
+</project>
diff --git a/meecrowave-core/src/test/third-party/OtherEndpoint.java b/test-app/src/main/java/org/superbiz/app/Injectable.java
similarity index 67%
copy from meecrowave-core/src/test/third-party/OtherEndpoint.java
copy to test-app/src/main/java/org/superbiz/app/Injectable.java
index 4e9249c..99701f6 100644
--- a/meecrowave-core/src/test/third-party/OtherEndpoint.java
+++ b/test-app/src/main/java/org/superbiz/app/Injectable.java
@@ -18,23 +18,11 @@
  */
 package org.superbiz.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import jakarta.enterprise.context.ApplicationScoped;
 
-@Path("other")
 @ApplicationScoped
-public class OtherEndpoint
-{
-    @Inject
-    private Injectable injectable;
-
-    @GET
-    @Produces({"text/plain"})
-    public String simple()
-    {
-        return Boolean.parseBoolean(this.injectable.injected()) ? "simple" : "fail";
+public class Injectable {
+    public String injected() {
+        return "true";
     }
 }
diff --git a/meecrowave-core/src/test/third-party/OtherEndpoint.java b/test-app/src/main/java/org/superbiz/app/OtherEndpoint.java
similarity index 86%
rename from meecrowave-core/src/test/third-party/OtherEndpoint.java
rename to test-app/src/main/java/org/superbiz/app/OtherEndpoint.java
index 4e9249c..b09f757 100644
--- a/meecrowave-core/src/test/third-party/OtherEndpoint.java
+++ b/test-app/src/main/java/org/superbiz/app/OtherEndpoint.java
@@ -18,11 +18,11 @@
  */
 package org.superbiz.app;
 
-import javax.enterprise.context.ApplicationScoped;
-import javax.inject.Inject;
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.Produces;
 
 @Path("other")
 @ApplicationScoped
diff --git a/meecrowave-core/src/test/third-party/OtherFilter.java b/test-app/src/main/java/org/superbiz/app/OtherFilter.java
similarity index 81%
rename from meecrowave-core/src/test/third-party/OtherFilter.java
rename to test-app/src/main/java/org/superbiz/app/OtherFilter.java
index 077d4b4..d66032c 100644
--- a/meecrowave-core/src/test/third-party/OtherFilter.java
+++ b/test-app/src/main/java/org/superbiz/app/OtherFilter.java
@@ -20,14 +20,14 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
-import javax.inject.Inject;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.annotation.WebFilter;
+import jakarta.inject.Inject;
+import jakarta.servlet.Filter;
+import jakarta.servlet.FilterChain;
+import jakarta.servlet.FilterConfig;
+import jakarta.servlet.ServletException;
+import jakarta.servlet.ServletRequest;
+import jakarta.servlet.ServletResponse;
+import jakarta.servlet.annotation.WebFilter;
 
 @WebFilter({"/other"})
 public class OtherFilter