diff --git a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java
index 5de0fd2..73ad748 100644
--- a/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java
+++ b/server/extensions/xep0313-mam/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0313_mam/MessageStanzaWithId.java
@@ -46,10 +46,6 @@
 
     private final Entity archiveId;
 
-    public MessageStanzaWithId(ArchivedMessage archivedMessage) {
-        this(archivedMessage, null);
-    }
-
     public MessageStanzaWithId(ArchivedMessage archivedMessage, Entity archiveId) {
         this.archivedMessage = requireNonNull(archivedMessage);
         this.archiveId = archiveId;
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 b818253..4fcc1bc 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
@@ -108,8 +108,7 @@
             addToSenderArchive(messageStanza, sessionContext);
             return messageStanza;
         } else {
-            return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::new).map(MessageStanzaWithId::toStanza)
-                    .orElse(stanza);
+            return addToReceiverArchive(messageStanza).map(MessageStanzaWithId::toStanza).orElse(stanza);
         }
     }
 
@@ -125,7 +124,7 @@
         senderArchive.get().archive(new SimpleMessage(messageStanza));
     }
 
-    private Optional<ArchivedMessage> addToReceiverArchive(MessageStanza messageStanza) {
+    private Optional<MessageStanzaWithId> addToReceiverArchive(MessageStanza messageStanza) {
         // 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)
@@ -136,7 +135,8 @@
             return Optional.empty();
         }
 
-        return Optional.ofNullable(receiverArchive.get().archive(new SimpleMessage(messageStanza)));
+        ArchivedMessage archivedMessage = receiverArchive.get().archive(new SimpleMessage(messageStanza));
+        return Optional.of(new MessageStanzaWithId(archivedMessage, receiverArchiveId));
     }
 
     private MessageArchives messageArchives() {
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 9e1fbb4..ba577ed 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
@@ -22,7 +22,6 @@
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -69,6 +68,25 @@
     }
 
     @Test
+    public void receivedArchivedMessageShouldHaveAStanzaId() throws SmackException.NotConnectedException, InterruptedException {
+        AtomicReference<Message> carolReceivedMessage = new AtomicReference<>();
+        ChatManager.getInstanceFor(carol())
+                .addIncomingListener((from, message, chat) -> carolReceivedMessage.set(message));
+
+        Chat chatFromAliceToCarol = ChatManager.getInstanceFor(alice()).chatWith(carol().getUser().asEntityBareJid());
+        chatFromAliceToCarol.send("Hello carol");
+
+        Thread.sleep(200);
+
+        assertNotNull(carolReceivedMessage.get());
+
+        StanzaIdElement stanzaIdElement = extractStanzaId(carolReceivedMessage.get());
+        assertNotNull(stanzaIdElement);
+        assertNotNull(stanzaIdElement.getId());
+        assertEquals(carol().getUser().asEntityBareJid(), stanzaIdElement.getBy());
+    }
+
+    @Test
     public void sendMessageAndQuerySenderAndReceiverArchive()
             throws SmackException.NotConnectedException, InterruptedException, SmackException.NotLoggedInException,
             XMPPException.XMPPErrorException, SmackException.NoResponseException {
@@ -89,7 +107,7 @@
         assertEquals(alice().getUser(), toCarolArchivedMessage.getFrom());
         assertEquals(carol().getUser().asEntityBareJidOrThrow(),
                 toCarolArchivedMessage.getTo().asEntityBareJidOrThrow());
-        String toCarolArchivedMessageId = extractStanzaId(toCarolArchivedMessage);
+        String toCarolArchivedMessageId = extractStanzaId(toCarolArchivedMessage).getId();
 
         MamManager.MamQuery carolArchive = MamManager.getInstanceFor(carol()).queryArchive(fullQuery);
 
@@ -100,10 +118,10 @@
         assertEquals(alice().getUser(), fromAliceArchivedMessage.getFrom());
         assertEquals(carol().getUser().asEntityBareJidOrThrow(),
                 fromAliceArchivedMessage.getTo().asEntityBareJidOrThrow());
-        String fromAliceArchivedMessageId = extractStanzaId(fromAliceArchivedMessage);
+        String fromAliceArchivedMessageId = extractStanzaId(fromAliceArchivedMessage).getId();
 
         assertFalse(toCarolArchivedMessageId.equals(fromAliceArchivedMessageId));
-        assertEquals(extractStanzaId(carolReceivedMessage.get()), fromAliceArchivedMessageId);
+        assertEquals(extractStanzaId(carolReceivedMessage.get()).getId(), fromAliceArchivedMessageId);
     }
 
     @Test
@@ -193,10 +211,10 @@
         assertEquals("Hello carol", carolReceivedMessage.get().getBody());
 
         Message archivedMessage = fetchUniqueArchivedMessage(carol());
-        String storedStanzaId = extractStanzaId(archivedMessage);
+        String storedStanzaId = extractStanzaId(archivedMessage).getId();
         assertNotNull(storedStanzaId);
 
-        String receivedStanzaId = extractStanzaId(carolReceivedMessage.get());
+        String receivedStanzaId = extractStanzaId(carolReceivedMessage.get()).getId();
 
         assertEquals(storedStanzaId, receivedStanzaId);
     }
@@ -220,7 +238,7 @@
         Thread.sleep(200);
 
         Message archivedMessage = fetchUniqueArchivedMessage(carol());
-        String storedStanzaId = extractStanzaId(archivedMessage);
+        String storedStanzaId = extractStanzaId(archivedMessage).getId();
         assertNotNull(storedStanzaId);
     }
 
@@ -284,14 +302,14 @@
         return archive.getMessages().get(0);
     }
 
-    private String extractStanzaId(Stanza stanza) {
+    private StanzaIdElement extractStanzaId(Stanza stanza) {
         assertNotNull(stanza);
         ExtensionElement extensionElement = stanza.getExtension(NamespaceURIs.XEP0359_STANZA_IDS);
         if (!(extensionElement instanceof StanzaIdElement)) {
             fail("No stanza id in " + stanza);
         }
 
-        return ((StanzaIdElement) extensionElement).getId();
+        return (StanzaIdElement) extensionElement;
     }
 
 }
