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 3dbefdb..98fccbb 100644
--- a/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
+++ b/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
@@ -276,6 +276,9 @@
 
         final AtomicReference<Runnable> releaseSCI = new AtomicReference<>();
         final ServletContainerInitializer meecrowaveInitializer = (c, ctx1) -> {
+            ctx1.setAttribute("meecrowave.configuration", configuration);
+            ctx1.setAttribute("meecrowave.instance", Meecrowave.this);
+
             new OWBAutoSetup().onStartup(c, ctx1);
             if (Cxfs.IS_PRESENT) {
                 new CxfCdiAutoSetup().onStartup(c, ctx1);
@@ -355,8 +358,6 @@
                     ctx.getResources().setCachingAllowed(configuration.webResourceCached);
                     break;
                 case Lifecycle.BEFORE_INIT_EVENT:
-                    ctx.getServletContext().setAttribute("meecrowave.configuration", configuration);
-                    ctx.getServletContext().setAttribute("meecrowave.instance", Meecrowave.this);
                     if (configuration.loginConfig != null) {
                         ctx.setLoginConfig(configuration.loginConfig.build());
                     }
@@ -808,6 +809,10 @@
         }
     }
 
+    public ConfigurableBus getClientBus() {
+        return clientBus;
+    }
+
     /**
      * Store away the current system property for restoring it later
      * during shutdown.
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 ecdb2c4..cf73320 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
@@ -39,23 +39,32 @@
 @Typed({MeecrowaveBus.class, Bus.class})
 @ApplicationScoped
 public class MeecrowaveBus implements Bus, ClassUnwrapper {
-    private final ConfigurableBus delegate = new ConfigurableBus();
+    private final ConfigurableBus delegate;
 
     protected MeecrowaveBus() {
-        // no-op: for proxies
+        delegate= null;
     }
 
     @Inject
     public MeecrowaveBus(final ServletContext context) {
-        setProperty(ClassUnwrapper.class.getName(), this);
-
         final ClassLoader appLoader = context.getClassLoader();
-        setExtension(appLoader, ClassLoader.class); // ServletController locks on the classloader otherwise
 
+        final Meecrowave meecrowave = Meecrowave.class.cast(context.getAttribute("meecrowave.instance"));
         final Meecrowave.Builder builder = Meecrowave.Builder.class.cast(context.getAttribute("meecrowave.configuration"));
-        if (builder != null && builder.isJaxrsProviderSetup()) {
-            delegate.initProviders(builder, appLoader);
+        if (meecrowave.getClientBus() == null) {
+            delegate = new ConfigurableBus();
+            if (builder != null && builder.isJaxrsProviderSetup()) {
+                delegate.initProviders(builder, appLoader);
+            }
+        } else {
+            delegate = meecrowave.getClientBus();
+            if (builder != null && !builder.isInitializeClientBus() && builder.isJaxrsProviderSetup()) {
+                delegate.initProviders(builder, appLoader);
+            }
         }
+
+        setProperty(ClassUnwrapper.class.getName(), this);
+        setExtension(appLoader, ClassLoader.class); // ServletController locks on the classloader otherwise
     }
 
 
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 4b709a3..c84a11f 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
@@ -40,7 +40,7 @@
                         .request(MediaType.APPLICATION_JSON)
                         .get(String.class);
                 assertEquals("{\"isbn\":\"dummyisbn\"}", jsonResponse);
-                //X TODO work in progress! assertEquals(1, DebugJohnzonBufferStrategy.getCounter());
+                assertEquals(3, DebugJohnzonBufferStrategy.getCounter()); // reader fact -> parser fact (2 buffers) + writer -> generator (1 buffer)
             } finally {
                 client.close();
             }
