diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
index c1172ff..7993ea4 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInternalInboundStanzaRelay.java
@@ -39,21 +39,20 @@
 import org.apache.vysper.xmpp.authentication.AccountManagement;
 import org.apache.vysper.xmpp.delivery.OfflineStanzaReceiver;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
-import org.apache.vysper.xmpp.delivery.failure.DeliveredToOfflineReceiverException;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
 import org.apache.vysper.xmpp.delivery.failure.LocalRecipientOfflineException;
 import org.apache.vysper.xmpp.delivery.failure.NoSuchLocalUserException;
 import org.apache.vysper.xmpp.delivery.failure.ServiceNotAvailableException;
-import org.apache.vysper.xmpp.modules.extension.xep0160_offline_storage.OfflineStorageProvider;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory;
 import org.apache.vysper.xmpp.protocol.StanzaProcessor;
 import org.apache.vysper.xmpp.protocol.worker.InboundStanzaProtocolWorker;
+import org.apache.vysper.xmpp.protocol.worker.UnconnectedProtocolWorker;
+import org.apache.vysper.xmpp.server.InternalSessionContext;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionState;
-import org.apache.vysper.xmpp.server.InternalSessionContext;
 import org.apache.vysper.xmpp.server.components.ComponentRegistry;
 import org.apache.vysper.xmpp.server.resources.ManagedThreadPool;
 import org.apache.vysper.xmpp.server.resources.ManagedThreadPoolUtil;
@@ -77,7 +76,7 @@
  */
 public class DeliveringInternalInboundStanzaRelay implements StanzaRelay, ManagedThreadPool {
 
-    final Logger logger = LoggerFactory.getLogger(DeliveringInternalInboundStanzaRelay.class);
+    private static final Logger LOG = LoggerFactory.getLogger(DeliveringInternalInboundStanzaRelay.class);
 
     private static class RejectedDeliveryHandler implements RejectedExecutionHandler {
 
@@ -97,6 +96,8 @@
 
     private InboundStanzaProtocolWorker inboundStanzaProtocolWorker;
 
+    private UnconnectedProtocolWorker unconnectedProtocolWorker;
+
     private final ComponentRegistry componentRegistry;
 
     private static final Integer PRIO_THRESHOLD = 0;
@@ -107,8 +108,6 @@
 
     protected AccountManagement accountVerification;
 
-    protected OfflineStanzaReceiver offlineStanzaReceiver = null;
-
     protected Entity serverEntity;
 
     protected ServerRuntimeContext serverRuntimeContext = null;
@@ -120,25 +119,23 @@
     protected long lastDumpTimestamp = 0;
 
     public DeliveringInternalInboundStanzaRelay(Entity serverEntity, InternalResourceRegistry resourceRegistry,
-                                                StorageProviderRegistry storageProviderRegistry, ComponentRegistry componentRegistry) {
+            StorageProviderRegistry storageProviderRegistry, ComponentRegistry componentRegistry) {
         this(serverEntity, resourceRegistry, componentRegistry,
-                storageProviderRegistry.retrieve(AccountManagement.class),
-                storageProviderRegistry.retrieve(OfflineStorageProvider.class));
+                storageProviderRegistry.retrieve(AccountManagement.class)
+        );
     }
 
     public DeliveringInternalInboundStanzaRelay(Entity serverEntity, InternalResourceRegistry resourceRegistry,
-                                                ComponentRegistry componentRegistry, AccountManagement accountVerification,
-                                                OfflineStanzaReceiver offlineStanzaReceiver) {
+                                                ComponentRegistry componentRegistry, AccountManagement accountVerification) {
         this.serverEntity = serverEntity;
         this.resourceRegistry = resourceRegistry;
         this.componentRegistry = requireNonNull(componentRegistry);
         this.accountVerification = accountVerification;
-        this.offlineStanzaReceiver = offlineStanzaReceiver;
         int coreThreadCount = 10;
         int maxThreadCount = 20;
         int threadTimeoutSeconds = 2 * 60;
         this.executor = new ThreadPoolExecutor(coreThreadCount, maxThreadCount, threadTimeoutSeconds, TimeUnit.SECONDS,
-                new LinkedBlockingQueue<Runnable>(), new RejectedDeliveryHandler(this, logger));
+                new LinkedBlockingQueue<>(), new RejectedDeliveryHandler(this, LOG));
     }
 
     /* package */ DeliveringInternalInboundStanzaRelay(ExecutorService executor) {
@@ -152,6 +149,7 @@
 
     public void setStanzaHandlerExecutorFactory(StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory) {
         this.inboundStanzaProtocolWorker = new InboundStanzaProtocolWorker(stanzaHandlerExecutorFactory);
+        this.unconnectedProtocolWorker = new UnconnectedProtocolWorker(stanzaHandlerExecutorFactory);
     }
 
     public final void setLogStorageProvider(final LogStorageProvider logStorageProvider) {
@@ -194,7 +192,7 @@
     }
 
     public void relay(InternalSessionContext sessionContext, Entity receiver, Stanza stanza,
-                      DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException {
+            DeliveryFailureStrategy deliveryFailureStrategy) throws DeliveryException {
         if (!isRelaying()) {
             throw new ServiceNotAvailableException("internal inbound relay is not relaying");
         }
@@ -225,7 +223,7 @@
         protected final UnmodifyableSessionStateHolder sessionStateHolder = new UnmodifyableSessionStateHolder();
 
         Relay(InternalSessionContext sessionContext, Entity receiver, Stanza stanza,
-              DeliveryFailureStrategy deliveryFailureStrategy) {
+                DeliveryFailureStrategy deliveryFailureStrategy) {
             this.sessionContext = sessionContext;
             this.receiver = receiver;
             this.stanza = stanza;
@@ -340,7 +338,7 @@
                 return relayToBestSessions(false);
             }
 
-            return relayNotPossible();
+            return new RelayResult(new ServiceNotAvailableException());
         }
 
         @SpecCompliant(spec = "draft-ietf-xmpp-3921bis-00", section = "8.2.", status = SpecCompliant.ComplianceStatus.IN_PROGRESS, coverage = SpecCompliant.ComplianceCoverage.COMPLETE)
@@ -375,19 +373,21 @@
             return new RelayResult(new ServiceNotAvailableException());
         }
 
-        private RelayResult relayNotPossible() {
+        private RelayResult relayToOfflineReceiver() {
             if (!accountVerification.verifyAccountExists(receiver)) {
-                logger.warn("cannot relay to unexisting receiver {} stanza {}", receiver.getFullQualifiedName(),
-                        stanza.toString());
+                LOG.warn("cannot relay to unexisting receiver {} stanza {}", receiver.getFullQualifiedName(),
+                        stanza);
                 return new RelayResult(new NoSuchLocalUserException());
-            } else if (offlineStanzaReceiver != null) {
-                offlineStanzaReceiver.receive(stanza);
-                return new RelayResult(new DeliveredToOfflineReceiverException());
-            } else {
-                logger.warn("cannot relay to offline receiver {} stanza {}", receiver.getFullQualifiedName(),
-                        stanza.toString());
+            }
+
+            StanzaHandler stanzaHandler = serverRuntimeContext.getHandler(stanza);
+            if (stanzaHandler.isSessionRequired()) {
+                LOG.warn("cannot relay to offline receiver {} stanza {}", receiver.getFullQualifiedName(), stanza);
                 return new RelayResult(new LocalRecipientOfflineException());
             }
+            unconnectedProtocolWorker.processStanza(serverRuntimeContext, null, sessionStateHolder, stanza,
+                    stanzaHandler);
+            return new RelayResult().setProcessed();
         }
 
         protected RelayResult relayToBestSessions(final boolean fallbackToBareJIDAllowed) {
@@ -401,7 +401,7 @@
             }
 
             if (receivingSessions.size() == 0) {
-                return relayNotPossible();
+                return relayToOfflineReceiver();
             }
 
             RelayResult relayResult = new RelayResult();
@@ -412,8 +412,8 @@
                 }
                 try {
                     StanzaHandler stanzaHandler = receivingSession.getServerRuntimeContext().getHandler(stanza);
-                    inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, receivingSession, sessionStateHolder, stanza,
-                            stanzaHandler);
+                    inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, receivingSession,
+                            sessionStateHolder, stanza, stanzaHandler);
                 } catch (Exception e) {
                     relayResult.addProcessingError(new DeliveryException("no relay to non-authenticated sessions"));
                     continue;
@@ -434,11 +434,11 @@
                     : resourceRegistry.getSessions(receiver, prioThreshold);
 
             if (receivingSessions.size() == 0) {
-                return relayNotPossible();
+                return relayToOfflineReceiver();
             }
 
             if (receivingSessions.size() > 1) {
-                logger.warn("multiplexing: {} sessions will be processing {} ", receivingSessions.size(), stanza);
+                LOG.warn("multiplexing: {} sessions will be processing {} ", receivingSessions.size(), stanza);
             }
 
             RelayResult relayResult = new RelayResult();
@@ -450,8 +450,8 @@
                 }
                 try {
                     StanzaHandler stanzaHandler = sessionContext.getServerRuntimeContext().getHandler(stanza);
-                    inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, sessionContext, sessionStateHolder, stanza,
-                            stanzaHandler);
+                    inboundStanzaProtocolWorker.processStanza(serverRuntimeContext, sessionContext, sessionStateHolder,
+                            stanza, stanzaHandler);
                 } catch (Exception e) {
                     relayResult.addProcessingError(new DeliveryException(e));
                 }
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
index 75c127f..5f87f08 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandler.java
@@ -54,6 +54,11 @@
     }
 
     @Override
+    public boolean isSessionRequired() {
+        return false;
+    }
+
+    @Override
     protected List<Stanza> executeCore(XMPPCoreStanza stanza, ServerRuntimeContext serverRuntimeContext,
             boolean isOutboundStanza, SessionContext sessionContext, StanzaBroker stanzaBroker) {
 
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceHandler.java
index a3fcfd5..49e2541 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceHandler.java
@@ -55,6 +55,11 @@
     }
 
     @Override
+    public boolean isSessionRequired() {
+        return false;
+    }
+
+    @Override
     protected List<Stanza> executeCore(XMPPCoreStanza stanza, ServerRuntimeContext serverRuntimeContext,
                                        boolean isOutboundStanza, SessionContext sessionContext, StanzaBroker stanzaBroker) {
         PresenceStanza presenceStanza = (PresenceStanza) stanza;
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/DefaultStanzaBroker.java
similarity index 66%
rename from server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java
rename to server/core/src/main/java/org/apache/vysper/xmpp/protocol/DefaultStanzaBroker.java
index f52c2f6..4c3b9ba 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaBroker.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/DefaultStanzaBroker.java
@@ -22,6 +22,7 @@
 import static java.util.Objects.requireNonNull;
 
 import org.apache.vysper.xmpp.addressing.Entity;
+import org.apache.vysper.xmpp.delivery.OfflineStanzaReceiver;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
@@ -31,15 +32,23 @@
 /**
  * @author Réda Housni Alaoui
  */
-public class SimpleStanzaBroker implements StanzaBroker {
+public class DefaultStanzaBroker implements StanzaBroker {
 
     private final StanzaRelay stanzaRelay;
 
     private final InternalSessionContext sessionContext;
 
-    public SimpleStanzaBroker(StanzaRelay stanzaRelay, InternalSessionContext sessionContext) {
+    private final OfflineStanzaReceiver offlineStanzaReceiver;
+
+    public DefaultStanzaBroker(StanzaRelay stanzaRelay, InternalSessionContext sessionContext,
+            OfflineStanzaReceiver offlineStanzaReceiver) {
         this.stanzaRelay = requireNonNull(stanzaRelay);
         this.sessionContext = sessionContext;
+        this.offlineStanzaReceiver = offlineStanzaReceiver;
+    }
+    
+    public DefaultStanzaBroker(StanzaRelay stanzaRelay, InternalSessionContext sessionContext){
+        this(stanzaRelay, sessionContext, null);
     }
 
     @Override
@@ -56,11 +65,14 @@
         if (stanza == null) {
             return;
         }
-        if (sessionContext == null) {
-            // TODO Move offline storage here?
+        if (sessionContext != null) {
+            sessionContext.getResponseWriter().write(stanza);
             return;
         }
-        sessionContext.getResponseWriter().write(stanza);
+        if (offlineStanzaReceiver == null) {
+            return;
+        }
+        offlineStanzaReceiver.receive(stanza);
     }
 
     @Override
@@ -72,18 +84,23 @@
             return false;
         }
 
-        SimpleStanzaBroker that = (SimpleStanzaBroker) o;
+        DefaultStanzaBroker that = (DefaultStanzaBroker) o;
 
         if (!stanzaRelay.equals(that.stanzaRelay)) {
             return false;
         }
-        return sessionContext != null ? sessionContext.equals(that.sessionContext) : that.sessionContext == null;
+        if (sessionContext != null ? !sessionContext.equals(that.sessionContext) : that.sessionContext != null) {
+            return false;
+        }
+        return offlineStanzaReceiver != null ? offlineStanzaReceiver.equals(that.offlineStanzaReceiver)
+                : that.offlineStanzaReceiver == null;
     }
 
     @Override
     public int hashCode() {
         int result = stanzaRelay.hashCode();
         result = 31 * result + (sessionContext != null ? sessionContext.hashCode() : 0);
+        result = 31 * result + (offlineStanzaReceiver != null ? offlineStanzaReceiver.hashCode() : 0);
         return result;
     }
 }
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java
index 25e28f8..3ceb0af 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutor.java
@@ -21,6 +21,7 @@
 
 import static java.util.Objects.requireNonNull;
 
+import org.apache.vysper.xmpp.delivery.OfflineStanzaReceiver;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
 import org.apache.vysper.xmpp.server.InternalSessionContext;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
@@ -35,9 +36,13 @@
 
     private final StanzaHandler stanzaHandler;
 
-    public SimpleStanzaHandlerExecutor(StanzaRelay stanzaRelay, StanzaHandler stanzaHandler) {
+    private final OfflineStanzaReceiver offlineStanzaReceiver;
+
+    public SimpleStanzaHandlerExecutor(StanzaRelay stanzaRelay, StanzaHandler stanzaHandler,
+            OfflineStanzaReceiver offlineStanzaReceiver) {
         this.stanzaRelay = requireNonNull(stanzaRelay);
         this.stanzaHandler = requireNonNull(stanzaHandler);
+        this.offlineStanzaReceiver = offlineStanzaReceiver;
     }
 
     @Override
@@ -47,7 +52,7 @@
                 serverRuntimeContext.getStanzaHandlerInterceptors());
 
         interceptorChain.intercept(stanza, serverRuntimeContext, isOutboundStanza, sessionContext, sessionStateHolder,
-                new SimpleStanzaBroker(stanzaRelay, sessionContext));
+                new DefaultStanzaBroker(stanzaRelay, sessionContext, offlineStanzaReceiver));
     }
 
 }
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java
index efcf05e..b8c0e84 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/SimpleStanzaHandlerExecutorFactory.java
@@ -21,6 +21,7 @@
 
 import static java.util.Objects.requireNonNull;
 
+import org.apache.vysper.xmpp.delivery.OfflineStanzaReceiver;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
 
 /**
@@ -30,13 +31,20 @@
 
     private final StanzaRelay stanzaRelay;
 
-    public SimpleStanzaHandlerExecutorFactory(StanzaRelay stanzaRelay) {
+    private final OfflineStanzaReceiver offlineStanzaReceiver;
+
+    public SimpleStanzaHandlerExecutorFactory(StanzaRelay stanzaRelay, OfflineStanzaReceiver offlineStanzaReceiver) {
         this.stanzaRelay = requireNonNull(stanzaRelay);
+        this.offlineStanzaReceiver = offlineStanzaReceiver;
+    }
+    
+    public SimpleStanzaHandlerExecutorFactory(StanzaRelay stanzaRelay){
+        this(stanzaRelay, null);
     }
 
     @Override
     public StanzaHandlerExecutor build(StanzaHandler stanzaHandler) {
-        return new SimpleStanzaHandlerExecutor(stanzaRelay, stanzaHandler);
+        return new SimpleStanzaHandlerExecutor(stanzaRelay, stanzaHandler, offlineStanzaReceiver);
     }
 
 }
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
index 0ec8de5..ff1f171 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/DefaultServerRuntimeContext.java
@@ -38,6 +38,7 @@
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.authentication.UserAuthentication;
 import org.apache.vysper.xmpp.cryptography.TLSContextFactory;
+import org.apache.vysper.xmpp.delivery.OfflineStanzaReceiver;
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
 import org.apache.vysper.xmpp.modules.Module;
 import org.apache.vysper.xmpp.modules.ModuleRegistry;
@@ -131,7 +132,7 @@
      */
     private final Map<String, ServerRuntimeContextService> serverRuntimeContextServiceMap = new HashMap<String, ServerRuntimeContextService>();
 
-    private List<Module> modules = new ArrayList<Module>();
+    private List<Module> modules = new ArrayList<>();
 
     /**
      * map of all registered components, index by the subdomain they are registered
@@ -147,12 +148,13 @@
 
     public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay stanzaRelay, StanzaProcessor stanzaProcessor,
             AlterableComponentRegistry componentRegistry, ResourceRegistry resourceRegistry,
-            ServerFeatures serverFeatures, List<HandlerDictionary> dictionaries) {
+            ServerFeatures serverFeatures, List<HandlerDictionary> dictionaries,
+            OfflineStanzaReceiver offlineStanzaReceiver) {
         this.serverEntity = serverEntity;
         this.stanzaRelay = stanzaRelay;
         this.componentRegistry = requireNonNull(componentRegistry);
         StanzaHandlerExecutorFactory simpleStanzaHandlerExecutorFactory = new SimpleStanzaHandlerExecutorFactory(
-                stanzaRelay);
+                stanzaRelay, offlineStanzaReceiver);
         this.serverConnectorRegistry = new DefaultXMPPServerConnectorRegistry(this, simpleStanzaHandlerExecutorFactory,
                 stanzaProcessor);
         this.stanzaHandlerLookup = new StanzaHandlerLookup(this);
@@ -171,17 +173,17 @@
     }
 
     public DefaultServerRuntimeContext(Entity serverEntity, StanzaRelay stanzaRelay) {
-        this(serverEntity, stanzaRelay, new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(stanzaRelay)),
+        this(serverEntity, stanzaRelay,
+                new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(stanzaRelay, null)),
                 new SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(), new ServerFeatures(),
-                Collections.emptyList());
+                Collections.emptyList(),
+                null);
     }
 
     /**
      * change the presence cache implementation. this is a setter intended to be
      * used at initialisation time. (thus, this method is not part of
      * ServerRuntimeContext.
-     * 
-     * @param presenceCache
      */
     public void setPresenceCache(LatestPresenceCache presenceCache) {
         this.presenceCache = presenceCache;
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
index 414313e..9d7799c 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/server/XMPPServer.java
@@ -55,7 +55,6 @@
 import org.apache.vysper.xmpp.server.components.SimpleComponentRegistry;
 import org.apache.vysper.xmpp.state.resourcebinding.DefaultResourceRegistry;
 import org.apache.vysper.xmpp.state.resourcebinding.InternalResourceRegistry;
-import org.apache.vysper.xmpp.state.resourcebinding.ResourceRegistry;
 
 /**
  * this class is able to boot a standalone XMPP server. <code>
@@ -190,7 +189,7 @@
         AlterableComponentRegistry componentRegistry = new SimpleComponentRegistry(serverEntity);
 
         DeliveringInternalInboundStanzaRelay internalStanzaRelay = new DeliveringInternalInboundStanzaRelay(
-                serverEntity, resourceRegistry, componentRegistry, accountManagement, offlineReceiver);
+                serverEntity, resourceRegistry, componentRegistry, accountManagement);
         DeliveringExternalInboundStanzaRelay externalStanzaRelay = new DeliveringExternalInboundStanzaRelay();
 
         if (maxInternalRelayThreads >= 0)
@@ -203,12 +202,12 @@
         stanzaRelayBroker.setExternalRelay(externalStanzaRelay);
 
         StanzaHandlerExecutorFactory stanzaHandlerExecutorFactory = new SimpleStanzaHandlerExecutorFactory(
-                stanzaRelayBroker);
+                stanzaRelayBroker, offlineReceiver);
 
         stanzaProcessor = new ProtocolWorker(stanzaHandlerExecutorFactory);
 
         serverRuntimeContext = new DefaultServerRuntimeContext(serverEntity, stanzaRelayBroker, stanzaProcessor,
-                componentRegistry, resourceRegistry, serverFeatures, dictionaries);
+                componentRegistry, resourceRegistry, serverFeatures, dictionaries, offlineReceiver);
         serverRuntimeContext.setStorageProviderRegistry(storageProviderRegistry);
         serverRuntimeContext.setTlsContextFactory(tlsContextFactory);
 
@@ -225,7 +224,7 @@
         if (logStorageProvider != null)
             internalStanzaRelay.setLogStorageProvider(logStorageProvider);
 
-        if (endpoints.size() == 0)
+        if (endpoints.isEmpty())
             throw new IllegalStateException("server must have at least one endpoint");
 
         /*
diff --git a/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java b/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java
index 1e63b3e..53911ad 100644
--- a/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/stanzasession/StanzaSessionTestCase.java
@@ -61,7 +61,7 @@
         ProtocolWorker protocolWorker = new ProtocolWorker(new SimpleStanzaHandlerExecutorFactory(relay));
         DefaultServerRuntimeContext serverContext = new DefaultServerRuntimeContext(serverEntity, relay, protocolWorker,
                 new SimpleComponentRegistry(serverEntity), new DefaultResourceRegistry(), new ServerFeatures(),
-                dictionaries);
+                dictionaries, null);
 
         relay.setServerRuntimeContext(serverContext);
 
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java
index 50bdbe2..054bc15 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/delivery/inbound/DeliveringInteralInboundStanzaRelayTestCase.java
@@ -88,7 +88,7 @@
         accountVerification = new AccountVerificationMock();
         serverEntity = EntityImpl.parse("vysper.org");
         stanzaRelay = new DeliveringInternalInboundStanzaRelay(serverEntity, resourceRegistry,
-                new SimpleComponentRegistry(serverEntity), accountVerification, null);
+                new SimpleComponentRegistry(serverEntity), accountVerification);
     }
 
     public void testSimpleRelay() throws EntityFormatException, XMLSemanticError, DeliveryException {
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java
index cdd6bf9..324c2ae 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/MessageHandlerRelayTestCase.java
@@ -30,7 +30,7 @@
 import org.apache.vysper.xmpp.modules.core.TestUser;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.server.TestSessionContext;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -92,7 +92,7 @@
 
         Stanza stanza = stanzaBuilder.build();
         messageHandler.execute(stanza, senderSessionContext.getServerRuntimeContext(), true, senderSessionContext, null,
-                new SimpleStanzaBroker(senderSessionContext.getStanzaRelay(), senderSessionContext));
+                new DefaultStanzaBroker(senderSessionContext.getStanzaRelay(), senderSessionContext));
 
         Stanza receivedStanza = receiverUser.getNextStanza();
         XMLElementVerifier timestampVerifier = receivedStanza.getFirstInnerElement().getVerifier();
@@ -119,12 +119,12 @@
 
         Stanza successfulMessageStanza = StanzaBuilder.createMessageStanza(sender, receiver, "en", "info").build();
         messageHandler.execute(successfulMessageStanza, senderSessionContext.getServerRuntimeContext(), true,
-                senderSessionContext, null, new SimpleStanzaBroker(stanzaRelay, senderSessionContext));
+                senderSessionContext, null, new DefaultStanzaBroker(stanzaRelay, senderSessionContext));
         assertEquals(successfulMessageStanza, receiverQueue.getNext());
 
         Stanza failureMessageStanza = StanzaBuilder.createMessageStanza(sender, noReceiver, "en", "info").build();
         messageHandler.execute(failureMessageStanza, senderSessionContext.getServerRuntimeContext(), true,
-                senderSessionContext, null, new SimpleStanzaBroker(stanzaRelay, senderSessionContext));
+                senderSessionContext, null, new DefaultStanzaBroker(stanzaRelay, senderSessionContext));
         assertNull(receiverQueue.getNext());
         Stanza rejectionStanza = senderQueue.getNext();
         assertNotNull(rejectionStanza);
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java
index f004403..c501485 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/base/handler/RelayingIQHandlerTestCase.java
@@ -22,7 +22,7 @@
 import org.apache.vysper.xmpp.modules.core.im.handler.PresenceHandlerBaseTestCase;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.RecordingStanzaBroker;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -40,7 +40,7 @@
     protected void setUp() throws Exception {
         super.setUp();
 
-        stanzaBroker = new RecordingStanzaBroker(new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+        stanzaBroker = new RecordingStanzaBroker(new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
     }
 
     public void testIQClientToClient_Outbound_NotSubscribed() {
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/DirectedPresenceHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/DirectedPresenceHandlerTestCase.java
index abbe900..8877404 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/DirectedPresenceHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/DirectedPresenceHandlerTestCase.java
@@ -25,7 +25,7 @@
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityFormatException;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.PresenceStanza;
 import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -49,7 +49,7 @@
                 .createPresenceStanza(initiatingUser.getEntityFQ(), unrelatedUser.getEntityFQ(), null, null, null, null)
                 .build());
         handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(receiverRelay, sessionContext));
+                new DefaultStanzaBroker(receiverRelay, sessionContext));
         assertTrue(0 < receiverRelay.getCountDelivered());
 
         // directed presence has been recorded internally
@@ -71,7 +71,7 @@
                 .getWrapper(StanzaBuilder.createPresenceStanza(initiatingUser.getEntityFQ(),
                         unrelatedUser.getEntityFQ(), null, PresenceStanzaType.UNAVAILABLE, null, null).build());
         handler.executeCore(directedUnvailPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(receiverRelay, sessionContext));
+                new DefaultStanzaBroker(receiverRelay, sessionContext));
         assertTrue(0 < receiverRelay.getCountDelivered());
 
         // directed presence has been recorded internally
@@ -99,7 +99,7 @@
                 .createPresenceStanza(initiatingUser.getEntityFQ(), unrelatedUser.getEntityFQ(), null, null, null, null)
                 .build());
         handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(receiverRelay, sessionContext));
+                new DefaultStanzaBroker(receiverRelay, sessionContext));
 
         // directed presence has been recorded internally
         Set<Entity> map = (Set<Entity>) sessionContext
@@ -113,7 +113,7 @@
                 .getWrapper(StanzaBuilder.createPresenceStanza(initiatingUser.getEntityFQ(), null, null,
                         PresenceStanzaType.UNAVAILABLE, null, null).build());
         handler.executeCore(generalUnavailable, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(receiverRelay, sessionContext));
+                new DefaultStanzaBroker(receiverRelay, sessionContext));
         assertTrue(0 < receiverRelay.getCountDelivered());
         ResourceState resourceState = sessionContext.getServerRuntimeContext().getResourceRegistry()
                 .getResourceState(initiatingUser.getBoundResourceId());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java
index 24938b7..970eb8f 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailInitialOutHandlerTestCase.java
@@ -27,7 +27,7 @@
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.addressing.EntityFormatException;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 import org.apache.vysper.xmpp.stanza.StanzaErrorCondition;
@@ -47,7 +47,7 @@
 
         assertEquals(ResourceState.CONNECTED, getResourceState());
         handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         // check resource state change, do not override interested
         assertEquals(ResourceState.AVAILABLE, getResourceState());
 
@@ -112,7 +112,7 @@
                 .getWrapper(StanzaBuilder.createPresenceStanza(null, null, null, null, null, null).build());
 
         List<Stanza> stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true,
-                sessionContext, new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                sessionContext, new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         Stanza stanza = stanzas.get(0);
         // ... and will give an error:
         assertEquals("error", stanza.getAttribute("type").getValue());
@@ -127,7 +127,7 @@
                 .unbindResource(anotherAvailableUser.getBoundResourceId());
         // 3 other resources got unbound, remaining one should now be unique
         stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         stanza = stanzas.get(0);
         assertNull(stanza); // no return, esp no error stanza - all the handling is done through relays
         stanza = initiatingUser.getNextStanza();
@@ -141,7 +141,7 @@
                 .unbindResource(initiatingUser.getBoundResourceId());
         assertTrue(noRemainingBinds);
         stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         stanza = stanzas.get(0);
         assertEquals("error", stanza.getAttribute("type").getValue());
         assertEquals(StanzaErrorCondition.UNKNOWN_SENDER.value(),
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailUpdateOutHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailUpdateOutHandlerTestCase.java
index 4311cab..c45c9dd 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailUpdateOutHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceAvailUpdateOutHandlerTestCase.java
@@ -22,7 +22,7 @@
 
 import org.apache.vysper.xmpp.addressing.EntityFormatException;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
 import org.apache.vysper.xmpp.stanza.XMPPCoreStanza;
@@ -42,7 +42,7 @@
         XMPPCoreStanza initialPresence = XMPPCoreStanza.getWrapper(
                 StanzaBuilder.createPresenceStanza(initiatingUser.getEntityFQ(), null, null, null, null, null).build());
         handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(receiverRelay, sessionContext));
+                new DefaultStanzaBroker(receiverRelay, sessionContext));
         assertTrue(0 < receiverRelay.getCountDelivered());
         resetRecordedStanzas(); // purge recorded
         assertTrue(0 == receiverRelay.getCountDelivered());
@@ -53,7 +53,7 @@
         XMPPCoreStanza updatePresence = XMPPCoreStanza.getWrapper(StanzaBuilder
                 .createPresenceStanza(initiatingUser.getEntityFQ(), null, null, null, showValue, null).build());
         handler.executeCore(updatePresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(receiverRelay, sessionContext));
+                new DefaultStanzaBroker(receiverRelay, sessionContext));
         // check resource state
         assertEquals(ResourceState.AVAILABLE, getResourceState());
 
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubRequestOutHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubRequestOutHandlerTestCase.java
index eaf6e36..9c3ad38 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubRequestOutHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/im/handler/PresenceSubRequestOutHandlerTestCase.java
@@ -27,7 +27,7 @@
 import org.apache.vysper.xmpp.addressing.EntityFormatException;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.delivery.StanzaReceiverRelay;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -52,7 +52,7 @@
                 .getWrapper(StanzaBuilder.createPresenceStanza(unrelatedUser.getEntityFQ(), initiatingUser.getEntity(),
                         null, PresenceStanzaType.SUBSCRIBED, null, null).build());
         handler.executeCore(requestApproval, sessionContext.getServerRuntimeContext(), false, sessionContext,
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
 
         // 3 roster pushes but...
         StanzaReceiverRelay relay = (StanzaReceiverRelay) sessionContext.getStanzaRelay();
@@ -76,7 +76,7 @@
                         null, PresenceStanzaType.SUBSCRIBE, null, null).build());
 
         handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         assertEquals(ResourceState.AVAILABLE_INTERESTED, getResourceState());
 
         // 1 to TO + 3 roster pushes
@@ -126,7 +126,7 @@
                         subscribed_FROM.getEntity(), null, PresenceStanzaType.SUBSCRIBE, null, null).build());
 
         handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         assertEquals(ResourceState.AVAILABLE_INTERESTED, getResourceState());
 
         // 1 to TO + 3 roster pushes
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
index cea8ece..10eb1fd 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/ExtendedDiscoInfoTestCase.java
@@ -39,7 +39,7 @@
 import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
 import org.apache.vysper.xmpp.server.InternalSessionContext;
 import org.apache.vysper.xmpp.server.TestSessionContext;
@@ -91,7 +91,7 @@
                 runtimeContext.getStanzaRelay());
 
         List<Stanza> resultStanzas = infoIQHandler.handleGet(finalStanza, runtimeContext, sessionContext,
-                new SimpleStanzaBroker(runtimeContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(runtimeContext.getStanzaRelay(), sessionContext));
 
         assertTrue(resultStanzas.get(0).getVerifier().onlySubelementEquals("query",
                 NamespaceURIs.XEP0030_SERVICE_DISCOVERY_INFO));
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java
index de256ae..865b021 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/server/components/ComponentStanzaProcessorTestCase.java
@@ -29,7 +29,7 @@
 import org.apache.vysper.xmpp.delivery.StanzaRelay;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaHandlerExecutorFactory;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.server.InternalSessionContext;
@@ -97,7 +97,7 @@
         processor.processStanza(serverRuntimeContext, sessionContext, stanza, sessionStateHolder);
 
         verify(handler).execute(stanza, serverRuntimeContext, false, sessionContext, sessionStateHolder,
-                new SimpleStanzaBroker(stanzaRelay, sessionContext));
+                new DefaultStanzaBroker(stanzaRelay, sessionContext));
     }
 
     @Test(expected = RuntimeException.class)
@@ -107,7 +107,7 @@
         // new SimpleStanzaBroker(stanzaRelay, sessionContext))).thenReturn(container);
 
         doThrow(new RuntimeException()).when(handler).execute(stanza, serverRuntimeContext, false, sessionContext,
-                sessionStateHolder, new SimpleStanzaBroker(stanzaRelay, sessionContext));
+                sessionStateHolder, new DefaultStanzaBroker(stanzaRelay, sessionContext));
 
         processor.addHandler(handler);
 
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java
index 02f3f6c..f2f2a0f 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/AbstractMUCOccupantDiscoTestCase.java
@@ -26,7 +26,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -37,7 +37,7 @@
 
     private Stanza sendDisco(Stanza stanza) throws ProtocolException {
         RecordingStanzaBroker recordingStanzaBroker = new RecordingStanzaBroker(
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
 
         handler.execute(stanza, sessionContext.getServerRuntimeContext(), true,
                 sessionContext, null, recordingStanzaBroker);
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
index 40e15b1..6df7089 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCHandlerTestCase.java
@@ -39,7 +39,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.stanza.IQStanza;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
@@ -272,7 +272,7 @@
 
         Stanza iqStanza = stanzaBuilder.build();
 
-        RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+        RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(iqStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null, stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
     }
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
index febacae..906fb0e 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/AbstractMUCMessageHandlerTestCase.java
@@ -28,7 +28,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.stanza.MessageStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -62,7 +62,7 @@
 
         Stanza messageStanza = stanzaBuilder.build();
         RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(messageStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null,
                 stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java
index 27e46e7..a33c7d3 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeNickTestCase.java
@@ -32,7 +32,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.Status.StatusCode;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -51,7 +51,7 @@
         Stanza presenceStanza = stanzaBuilder.build();
 
         RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(presenceStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null,
                 stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java
index e5e44c7..747046c 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ChangeStatusTestCase.java
@@ -29,7 +29,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.Room;
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.MucUserItem;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -44,7 +44,7 @@
                 status);
 
         Stanza presenceStanza = stanzaBuilder.build();
-        RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+        RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(presenceStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null,
                 stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java
index ba37ca5..63a246c 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/EnterRoomTestCase.java
@@ -39,7 +39,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.stanzas.X;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.MessageStanza;
@@ -78,7 +78,7 @@
         }
         Stanza presenceStanza = stanzaBuilder.build();
         RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(presenceStanza, userSessionContext.getServerRuntimeContext(), true, userSessionContext, null,
                 stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
diff --git a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ExitRoomTestCase.java b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ExitRoomTestCase.java
index 1774684..f7fb1f6 100644
--- a/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ExitRoomTestCase.java
+++ b/server/extensions/xep0045-muc/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0045_muc/handler/ExitRoomTestCase.java
@@ -31,7 +31,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0045_muc.model.RoomType;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
 import org.apache.vysper.xmpp.protocol.ProtocolException;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaHandler;
 import org.apache.vysper.xmpp.stanza.PresenceStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -51,7 +51,7 @@
 
         Stanza presenceStanza = stanzaBuilder.build();
         RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(
-                new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+                new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(presenceStanza, sessionContext.getServerRuntimeContext(), true, sessionContext, null,
                 stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
diff --git a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/RecordingStanzaBroker.java b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/RecordingStanzaBroker.java
index d742af8..c536080 100644
--- a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/RecordingStanzaBroker.java
+++ b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/RecordingStanzaBroker.java
@@ -25,12 +25,9 @@
 import java.util.List;
 
 import org.apache.vysper.xmpp.addressing.Entity;
-import org.apache.vysper.xmpp.delivery.StanzaRelay;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.protocol.StanzaBroker;
-import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.Stanza;
 
 /**
diff --git a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java
index 4193130..8faf009 100644
--- a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java
+++ b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/AbstractPublishSubscribeTestCase.java
@@ -31,7 +31,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.storageprovider.LeafNodeInMemoryStorageProvider;
 import org.apache.vysper.xmpp.modules.servicediscovery.collection.ServiceCollector;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionState;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -152,7 +152,7 @@
     protected abstract AbstractStanzaGenerator getDefaultStanzaGenerator();
 
     protected Stanza sendStanza(Stanza toSend, boolean isOutboundStanza) {
-        RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
+        RecordingStanzaBroker stanzaBroker = new RecordingStanzaBroker(new DefaultStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
         handler.execute(toSend, sessionContext.getServerRuntimeContext(), isOutboundStanza, sessionContext, null,
                 stanzaBroker);
         return stanzaBroker.getUniqueStanzaWrittenToSession();
diff --git a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/disco/PubSubDiscoItemsTestCase.java b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/disco/PubSubDiscoItemsTestCase.java
index 127cba6..5e26253 100644
--- a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/disco/PubSubDiscoItemsTestCase.java
+++ b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/disco/PubSubDiscoItemsTestCase.java
@@ -31,7 +31,7 @@
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LeafNode;
 import org.apache.vysper.xmpp.modules.servicediscovery.handler.DiscoItemIQHandler;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
+import org.apache.vysper.xmpp.protocol.DefaultStanzaBroker;
 import org.apache.vysper.xmpp.stanza.IQStanza;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
@@ -151,17 +151,17 @@
         XMLElement item1 = new XMLElement("namespace1", "item1", null, (Attribute[]) null, (XMLFragment[]) null);
         XMLElement item2 = new XMLElement("namespace2", "item2", null, (Attribute[]) null, (XMLFragment[]) null);
         XMLElement item3 = new XMLElement("namespace3", "item3", null, (Attribute[]) null, (XMLFragment[]) null);
-        node.publish(client, new SimpleStanzaBroker(relay, sessionContext), "itemid1", item1);
+        node.publish(client, new DefaultStanzaBroker(relay, sessionContext), "itemid1", item1);
         Thread.sleep(10);
-        node.publish(client, new SimpleStanzaBroker(relay, sessionContext), "itemid2", item1); // publish this one with
+        node.publish(client, new DefaultStanzaBroker(relay, sessionContext), "itemid2", item1); // publish this one with
                                                                                                // the same id as the
                                                                                                // next one (overwritten
         // by the next)
-        node.publish(client, new SimpleStanzaBroker(relay, sessionContext), "itemid2", item2); // overwrite the prev.
+        node.publish(client, new DefaultStanzaBroker(relay, sessionContext), "itemid2", item2); // overwrite the prev.
                                                                                                // item (use the same
                                                                                                // itemid)
         Thread.sleep(10);
-        node.publish(client, new SimpleStanzaBroker(relay, sessionContext), "itemid3", item3);
+        node.publish(client, new DefaultStanzaBroker(relay, sessionContext), "itemid3", item3);
 
         DefaultDiscoInfoStanzaGenerator sg = (DefaultDiscoInfoStanzaGenerator) getDefaultStanzaGenerator();
         Stanza stanza = sg.getStanza(client, pubsubService.getBareJID(), "id123", "news");
diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java
index 9e6f77c..3ef8a6a 100644
--- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java
+++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserMessageStanzaBroker.java
@@ -27,7 +27,6 @@
 import org.apache.vysper.xml.fragment.XMLElement;
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.addressing.Entity;
-import org.apache.vysper.xmpp.addressing.EntityUtils;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryException;
 import org.apache.vysper.xmpp.delivery.failure.DeliveryFailureStrategy;
 import org.apache.vysper.xmpp.modules.core.base.handler.XMPPCoreStanzaHandler;
@@ -79,9 +78,6 @@
     }
 
     private Stanza archive(Stanza stanza) {
-        if (!isOutbound) {
-            return stanza;
-        }
         if (!MessageStanza.isOfType(stanza)) {
             return stanza;
         }
@@ -108,10 +104,13 @@
         }
 
         // TODO Check preferences
-
-        addToSenderArchive(messageStanza, sessionContext);
-        return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::new).map(MessageStanzaWithId::toStanza)
-                .orElse(stanza);
+        if (isOutbound) {
+            addToSenderArchive(messageStanza, sessionContext);
+            return messageStanza;
+        } else {
+            return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::new).map(MessageStanzaWithId::toStanza)
+                    .orElse(stanza);
+        }
     }
 
     private void addToSenderArchive(MessageStanza messageStanza, SessionContext sessionContext) {
@@ -127,11 +126,6 @@
     }
 
     private Optional<ArchivedMessage> addToReceiverArchive(MessageStanza messageStanza) {
-        Entity to = requireNonNull(messageStanza.getTo(), "No 'to' found in " + messageStanza);
-        if (!EntityUtils.isAddressingServer(to, serverRuntimeContext.getServerEntity())) {
-            LOG.debug("Receiver {} is not managed by this server", to);
-            return Optional.empty();
-        }
         // Servers that expose archive messages of sent/received messages on behalf of
         // local users MUST expose these archives to the user on the user's bare JID.
         Entity receiverArchiveId = requireNonNull(messageStanza.getTo(), "No 'to' found in " + messageStanza)
diff --git a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java
index a8cf981..bef02b9 100644
--- a/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java
+++ b/server/extensions/xep0313-mam/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/user/UserArchiveTest.java
@@ -219,10 +219,16 @@
 
         Thread.sleep(200);
 
-        assertNull(carolReceivedMessage.get());
+        assertNotNull(carolReceivedMessage.get());
+        assertEquals("Hello carol", carolReceivedMessage.get().getBody());
 
-        Message message = fetchUniqueArchivedMessage(carol());
-        assertEquals("Hello carol", message.getBody());
+        Message archivedMessage = fetchUniqueArchivedMessage(carol());
+        String storedStanzaId = extractStanzaId(archivedMessage);
+        assertNotNull(storedStanzaId);
+
+        String receivedStanzaId = extractStanzaId(carolReceivedMessage.get());
+
+        assertEquals(storedStanzaId, receivedStanzaId);
     }
 
     @Test
