diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
index 0997036..e047440 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/core/sasl/handler/AbortHandler.java
@@ -20,7 +20,6 @@
 package org.apache.vysper.xmpp.modules.core.sasl.handler;
 
 import org.apache.vysper.xmpp.modules.core.sasl.AuthorizationRetriesCounter;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.server.response.ServerResponses;
@@ -40,8 +39,7 @@
     }
 
     @Override
-    public Stanza executeWorker(Stanza stanza, SessionContext sessionContext,
-                                SessionStateHolder sessionStateHolder) {
+    public Stanza executeWorker(Stanza stanza, SessionContext sessionContext, SessionStateHolder sessionStateHolder) {
 
         AuthorizationRetriesCounter counter = AuthorizationRetriesCounter.getFromSession(sessionContext);
         boolean moreTriesLeft = counter.countFailedTry(); // record that client aborted
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java b/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
index 639cf07..da6bfd5 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandler.java
@@ -131,7 +131,7 @@
                 // IQ-error or an IQ-result"
                 if (to.isResourceSet()) {
                     relayOrWrite(stanza, sessionContext, stanzaBroker);
-                    return null;
+                    return Collections.emptyList();
                 } else {
                     elements = serviceCollector.processInfoRequest(new InfoRequest(from, to, node, stanza.getID()));
                 }
@@ -171,7 +171,7 @@
 
         if (stanza.getTo().isNodeSet()) {
             relayOrWrite(stanza, sessionContext, stanzaBroker);
-            return null;
+            return Collections.emptyList();
         } else {
             return super.handleResult(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
         }
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainer.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainer.java
deleted file mode 100644
index 234ed39..0000000
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainer.java
+++ /dev/null
@@ -1,45 +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.vysper.xmpp.protocol;
-
-import java.util.List;
-
-import org.apache.vysper.xmpp.stanza.Stanza;
-
-/**
- * used to carry a response stanza
- *
- * @author The Apache MINA Project (dev@mina.apache.org)
- */
-public interface ResponseStanzaContainer {
-
-    List<Stanza> getResponseStanzas();
-
-    /**
-     * @return If there is exactly one response, the unique response. If there is no
-     *         response it will return null. If there is more than one response, it
-     *         will throw an exception.
-     */
-    Stanza getUniqueResponseStanza();
-
-    boolean hasResponse();
-
-    boolean hasNoResponse();
-}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainerImpl.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainerImpl.java
deleted file mode 100644
index 1fdad72..0000000
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseStanzaContainerImpl.java
+++ /dev/null
@@ -1,69 +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.vysper.xmpp.protocol;
-
-import static java.util.Optional.ofNullable;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.apache.vysper.xmpp.stanza.Stanza;
-
-/**
- *
- * @author The Apache MINA Project (dev@mina.apache.org)
- */
-public class ResponseStanzaContainerImpl implements ResponseStanzaContainer {
-    private final List<Stanza> responses;
-
-    public ResponseStanzaContainerImpl(Stanza stanza) {
-        this(Collections.singletonList(stanza));
-    }
-
-    public ResponseStanzaContainerImpl(List<Stanza> stanzas) {
-        this.responses = ofNullable(stanzas).orElse(Collections.emptyList()).stream().filter(Objects::nonNull)
-                .collect(Collectors.toList());
-    }
-
-    @Override
-    public List<Stanza> getResponseStanzas() {
-        return new ArrayList<>(responses);
-    }
-
-    @Override
-    public Stanza getUniqueResponseStanza() {
-        if (responses.size() > 1) {
-            throw new IllegalStateException("Found more than one response");
-        }
-        return responses.stream().findFirst().orElse(null);
-    }
-
-    public boolean hasResponse() {
-        return !responses.isEmpty();
-    }
-
-    public boolean hasNoResponse() {
-        return !hasResponse();
-    }
-
-}
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
index 408c80d..14ba14c 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/ResponseWriter.java
@@ -39,9 +39,8 @@
 
     public static void writeUnsupportedStanzaError(SessionContext sessionContext) {
 
-        Stanza errorStanza = ServerErrorResponses.getStreamError(
-                StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, sessionContext.getXMLLang(),
-                "service unavailable at this session state", null);
+        Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
+                sessionContext.getXMLLang(), "service unavailable at this session state", null);
         Stanza streamOpener = new ServerResponses().getStreamOpenerForError(false, sessionContext.getServerJID(),
                 XMPPVersion.VERSION_1_0, errorStanza);
 
@@ -49,19 +48,7 @@
     }
 
     /**
-     * writes a response in this context from the given emmitter
-     * @param sessionContext
-     * @param responseStanzaContainer
-     */
-    public static void writeResponse(SessionContext sessionContext, ResponseStanzaContainer responseStanzaContainer) {
-        responseStanzaContainer.getResponseStanzas()
-                .forEach(stanza -> writeResponse(sessionContext, stanza));
-    }
-
-    /**
      * writes a response in this context
-     * @param sessionContext
-     * @param responseStanza
      */
     public static void writeResponse(SessionContext sessionContext, Stanza responseStanza) {
         sessionContext.getResponseWriter().write(responseStanza);
@@ -81,9 +68,8 @@
     }
 
     public void handleUnsupportedStanzaType(SessionContext sessionContext, Stanza receivedStanza) {
-        Stanza errorStanza = ServerErrorResponses.getStreamError(
-                StreamErrorCondition.UNSUPPORTED_STANZA_TYPE, sessionContext.getXMLLang(),
-                "could not process incoming stanza", receivedStanza);
+        Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.UNSUPPORTED_STANZA_TYPE,
+                sessionContext.getXMLLang(), "could not process incoming stanza", receivedStanza);
         writeErrorAndClose(sessionContext, errorStanza);
     }
 
@@ -107,7 +93,7 @@
     }
 
     public void handleParsingException(SessionContext sessionContext, ParsingException e) {
-        //TODO write the __right__ error response, not bad-format default only
+        // TODO write the __right__ error response, not bad-format default only
         if (e.getErrorCondition() != ParsingErrorCondition.BAD_FORMAT)
             throw new RuntimeException("cannot handle this error condition yet");
         Stanza errorStanza = ServerErrorResponses.getStreamError(StreamErrorCondition.BAD_FORMAT,
diff --git a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java
index 0699de4..a01e62f 100644
--- a/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java
+++ b/server/core/src/main/java/org/apache/vysper/xmpp/protocol/worker/InboundStanzaProtocolWorker.java
@@ -19,10 +19,7 @@
  */
 package org.apache.vysper.xmpp.protocol.worker;
 
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.ResponseWriter;
 import org.apache.vysper.xmpp.protocol.StanzaHandlerExecutorFactory;
-import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.server.SessionState;
 
 /**
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java
index 3bc0f2d..86a6f99 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/core/bind/handler/BindIQHandlerTestCase.java
@@ -25,8 +25,6 @@
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -140,8 +138,7 @@
                 .startInnerElement("jid", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_BIND)
                 .addText(new EntityImpl(FROM, "res").getFullQualifiedName()).build();
 
-        ResponseStanzaContainer responseStanzaContainer = new ResponseStanzaContainerImpl(responses);
-        StanzaAssert.assertEquals(expectedResponse, responseStanzaContainer.getUniqueResponseStanza());
+        StanzaAssert.assertEquals(expectedResponse, responses.get(0));
     }
 
     @Test
@@ -154,8 +151,7 @@
                 .startInnerElement("error", NamespaceURIs.JABBER_CLIENT).addAttribute("type", "cancel")
                 .startInnerElement("not-allowed", NamespaceURIs.URN_IETF_PARAMS_XML_NS_XMPP_STANZAS).build();
 
-        ResponseStanzaContainer responseStanzaContainer = new ResponseStanzaContainerImpl(responses);
-        StanzaAssert.assertEquals(expectedResponse, responseStanzaContainer.getUniqueResponseStanza());
+        StanzaAssert.assertEquals(expectedResponse, responses.get(0));
     }
 
 }
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 52a5fd6..24938b7 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,6 @@
 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.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.stanza.Stanza;
 import org.apache.vysper.xmpp.stanza.StanzaBuilder;
@@ -114,7 +113,7 @@
 
         List<Stanza> stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true,
                 sessionContext, new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
-        Stanza stanza = new ResponseStanzaContainerImpl(stanzas).getUniqueResponseStanza();
+        Stanza stanza = stanzas.get(0);
         // ... and will give an error:
         assertEquals("error", stanza.getAttribute("type").getValue());
         assertEquals(StanzaErrorCondition.UNKNOWN_SENDER.value(),
@@ -129,7 +128,7 @@
         // 3 other resources got unbound, remaining one should now be unique
         stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
                 new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
-        stanza = new ResponseStanzaContainerImpl(stanzas).getUniqueResponseStanza();
+        stanza = stanzas.get(0);
         assertNull(stanza); // no return, esp no error stanza - all the handling is done through relays
         stanza = initiatingUser.getNextStanza();
         assertNull(stanza.getAttribute("type"));
@@ -143,7 +142,7 @@
         assertTrue(noRemainingBinds);
         stanzas = handler.executeCore(initialPresence, sessionContext.getServerRuntimeContext(), true, sessionContext,
                 new SimpleStanzaBroker(sessionContext.getStanzaRelay(), sessionContext));
-        stanza = new ResponseStanzaContainerImpl(stanzas).getUniqueResponseStanza();
+        stanza = stanzas.get(0);
         assertEquals("error", stanza.getAttribute("type").getValue());
         assertEquals(StanzaErrorCondition.UNKNOWN_SENDER.value(),
                 stanza.getSingleInnerElementsNamed("error").getFirstInnerElement().getName());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java
index ddbc55b..0762bdd 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0092_software_version/SoftwareVersionIQHandlerTestCase.java
@@ -26,7 +26,6 @@
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -131,7 +130,7 @@
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         
         // <iq xmlns="jabber:client" type="result" id="1">
         // <query xmlns="jabber:iq:version"><name>Apache Vysper XMPP Server</name>
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java
index 2730ba2..7a30c92 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeIQHandlerTestCase.java
@@ -27,7 +27,6 @@
 import org.apache.vysper.xml.fragment.XMLElement;
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -122,7 +121,7 @@
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         
         Assert.assertNotNull(response);
         Assert.assertEquals("iq", response.getName());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java
index 722ccc5..a847951 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0202_entity_time/EntityTimeXEP0090IQHandlerTestCase.java
@@ -27,7 +27,6 @@
 import org.apache.vysper.xml.fragment.XMLElement;
 import org.apache.vysper.xml.fragment.XMLSemanticError;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -122,7 +121,7 @@
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         
         Assert.assertNotNull(response);
         Assert.assertEquals("iq", response.getName());
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java
index 253588c..39ff493 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/modules/servicediscovery/handler/DiscoInfoIQHandlerTestCase.java
@@ -34,7 +34,6 @@
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequest;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.StanzaBroker;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
@@ -51,6 +50,8 @@
 
 import junit.framework.Assert;
 
+import static org.junit.Assert.assertTrue;
+
 /**
  */
 public class DiscoInfoIQHandlerTestCase extends Mockito {
@@ -172,7 +173,7 @@
         when(serviceCollector.processServerInfoRequest(any(InfoRequest.class))).thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
         StanzaAssert.assertEquals(createExpectedResponse(SERVER), response);
     }
 
@@ -186,7 +187,7 @@
                 .thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         StanzaAssert.assertEquals(createExpectedResponse(COMPONENT), response);
     }
@@ -198,7 +199,7 @@
         when(serviceCollector.processInfoRequest(any(InfoRequest.class))).thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         StanzaAssert.assertEquals(createExpectedResponse(USER), response);
     }
@@ -210,9 +211,8 @@
         IQStanza stanza = createRequest(USER_WITH_RESOURCE);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
 
-        Assert.assertNull(response);
+        assertTrue(responses.isEmpty());
 
         verify(stanzaBroker).write(eq(USER_WITH_RESOURCE), eq(stanza), any(DeliveryFailureStrategy.class));
     }
@@ -224,9 +224,8 @@
         IQStanza stanza = createRequest(USER_WITH_RESOURCE);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
 
-        Assert.assertNull(response);
+        assertTrue(responses.isEmpty());
 
         verify(stanzaBroker).writeToSession(stanza);
     }
@@ -240,7 +239,7 @@
                 .thenReturn(infoElements);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(COMPONENT, "item-not-found");
 
@@ -255,7 +254,7 @@
                 ServiceDiscoveryRequestListenerRegistry.SERVICE_DISCOVERY_REQUEST_LISTENER_REGISTRY)).thenReturn(null);
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(SERVER, "internal-server-error");
 
@@ -270,7 +269,7 @@
                 .thenThrow(new ServiceDiscoveryRequestException(StanzaErrorCondition.INTERNAL_SERVER_ERROR));
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(SERVER, "internal-server-error");
 
@@ -286,7 +285,7 @@
                 .thenThrow(new ServiceDiscoveryRequestException(StanzaErrorCondition.INTERNAL_SERVER_ERROR));
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(COMPONENT, "internal-server-error");
 
@@ -301,7 +300,7 @@
                 .thenThrow(new ServiceDiscoveryRequestException(StanzaErrorCondition.INTERNAL_SERVER_ERROR));
 
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = createErrorResponse(SERVER, "internal-server-error");
 
@@ -315,10 +314,9 @@
         IQStanza stanza = createRequest(USER, IQStanzaType.RESULT);
 
         List<Stanza> responses = handler.handleResult(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
 
-        Assert.assertNull(response);
-
+        assertTrue(responses.isEmpty());
+        
         verify(stanzaBroker).write(eq(USER), eq(stanza), any(DeliveryFailureStrategy.class));
     }
 
@@ -329,10 +327,9 @@
         IQStanza stanza = createRequest(USER, IQStanzaType.RESULT);
 
         List<Stanza> responses = handler.handleResult(stanza, serverRuntimeContext, sessionContext, stanzaBroker);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
 
-        Assert.assertNull(response);
-
+        assertTrue(responses.isEmpty());
+        
         verify(stanzaBroker).writeToSession(stanza);
     }
 
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 0a41b4d..494291d 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
@@ -38,8 +38,6 @@
 import org.apache.vysper.xmpp.modules.servicediscovery.management.InfoRequestListener;
 import org.apache.vysper.xmpp.modules.servicediscovery.management.ServiceDiscoveryRequestException;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.protocol.SessionStateHolder;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.server.DefaultServerRuntimeContext;
@@ -78,7 +76,8 @@
             }
         });
 
-        DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("vysper.org"), mock(StanzaRelay.class));
+        DefaultServerRuntimeContext runtimeContext = new DefaultServerRuntimeContext(EntityImpl.parse("vysper.org"),
+                mock(StanzaRelay.class));
         runtimeContext.registerServerRuntimeContextService(serviceCollector);
 
         DiscoInfoIQHandler infoIQHandler = new DiscoInfoIQHandler();
@@ -91,13 +90,12 @@
         SessionContext sessionContext = new TestSessionContext(runtimeContext, new SessionStateHolder(),
                 runtimeContext.getStanzaRelay());
 
-        List<Stanza> resultStanza = infoIQHandler.handleGet(finalStanza, runtimeContext, sessionContext,
+        List<Stanza> resultStanzas = infoIQHandler.handleGet(finalStanza, runtimeContext, sessionContext,
                 new SimpleStanzaBroker(runtimeContext.getStanzaRelay(), sessionContext));
 
-        ResponseStanzaContainer responseStanzaContainer = new ResponseStanzaContainerImpl(resultStanza);
-        assertTrue(responseStanzaContainer.getUniqueResponseStanza().getVerifier().onlySubelementEquals("query",
+        assertTrue(resultStanzas.get(0).getVerifier().onlySubelementEquals("query",
                 NamespaceURIs.XEP0030_SERVICE_DISCOVERY_INFO));
-        XMLElement queryElement = responseStanzaContainer.getUniqueResponseStanza().getFirstInnerElement();
+        XMLElement queryElement = resultStanzas.get(0).getFirstInnerElement();
         XMLElementVerifier queryVerifier = queryElement.getVerifier();
         assertTrue(queryVerifier.subElementsPresentExact(4));
         List<XMLElement> innerElements = queryElement.getInnerElements();
diff --git a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java
index 724c02f..da5a02a 100644
--- a/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java
+++ b/server/core/src/test/java/org/apache/vysper/xmpp/protocol/CallTestStanzaHandlerResponse.java
@@ -29,7 +29,7 @@
 
 /**
  */
-public class CallTestStanzaHandlerResponse extends CallTestStanzaHandler implements ResponseStanzaContainer {
+public class CallTestStanzaHandlerResponse extends CallTestStanzaHandler {
     private Stanza response;
 
     public CallTestStanzaHandlerResponse(String name) {
@@ -52,7 +52,6 @@
         return Collections.singletonList(response);
     }
 
-    @Override
     public Stanza getUniqueResponseStanza() {
         return response;
     }
@@ -61,7 +60,4 @@
         return response != null;
     }
 
-    public boolean hasNoResponse() {
-        return !hasResponse();
-    }
 }
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 b7f8c35..02f3f6c 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,6 @@
 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.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.protocol.SimpleStanzaBroker;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 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/handler/PubSubRetrieveAffiliationsTestCase.java b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
index 2826436..b312c3b 100644
--- a/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
+++ b/server/extensions/xep0060-pubsub/src/test/java/org/apache/vysper/xmpp/modules/extension/xep0060_pubsub/handler/PubSubRetrieveAffiliationsTestCase.java
@@ -26,7 +26,6 @@
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.AbstractPublishSubscribeTestCase;
 import org.apache.vysper.xmpp.modules.extension.xep0060_pubsub.model.LeafNode;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainer;
 import org.apache.vysper.xmpp.stanza.IQStanza;
 import org.apache.vysper.xmpp.stanza.IQStanzaType;
 import org.apache.vysper.xmpp.stanza.Stanza;
diff --git a/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java b/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
index 360fd42..689d38c 100644
--- a/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
+++ b/server/extensions/xep0065-socks/src/test/java/org/apache/vysper/xmpp/extension/xep0065_socks/Socks5IqHandlerTest.java
@@ -27,7 +27,6 @@
 import org.apache.vysper.xmpp.addressing.Entity;
 import org.apache.vysper.xmpp.addressing.EntityImpl;
 import org.apache.vysper.xmpp.protocol.NamespaceURIs;
-import org.apache.vysper.xmpp.protocol.ResponseStanzaContainerImpl;
 import org.apache.vysper.xmpp.server.ServerRuntimeContext;
 import org.apache.vysper.xmpp.server.SessionContext;
 import org.apache.vysper.xmpp.stanza.IQStanza;
@@ -137,7 +136,7 @@
     @Test
     public void handleGet() throws BindException, XMLSemanticError {
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = StanzaBuilder
                 .createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
@@ -154,7 +153,7 @@
         proxyAddress = new InetSocketAddress(12345);
         handler = new Socks5IqHandler(jid, proxyAddress, connectionsRegistry);
         List<Stanza> responses = handler.handleGet(stanza, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = StanzaBuilder
                 .createIQStanza(stanza.getTo(), stanza.getFrom(), IQStanzaType.RESULT, stanza.getID())
@@ -178,7 +177,7 @@
         when(connectionsRegistry.activate(hash)).thenReturn(true);
 
         List<Stanza> responses = handler.handleSet(request, serverRuntimeContext, sessionContext, null);
-        Stanza response = new ResponseStanzaContainerImpl(responses).getUniqueResponseStanza();
+        Stanza response = responses.get(0);
 
         Stanza expected = StanzaBuilder.createIQStanza(TO, FROM, IQStanzaType.RESULT, "id1").build();
 
