diff --git a/indexedDb/impl/dm/implementation.go b/indexedDb/impl/dm/implementation.go
index e4c314a09b5c639a0012355c3acb1f3fc59ab6b7..cbb4744066833d77a3b075fcaa70a0219f5d1962 100644
--- a/indexedDb/impl/dm/implementation.go
+++ b/indexedDb/impl/dm/implementation.go
@@ -218,6 +218,8 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n
 	timestamp time.Time, round rounds.Round, mType dm.MessageType, status dm.Status) (uint64, error) {
 
 	// Keep track of whether Conversation was altered
+	// FIXME: this is very similar to updateConversation 
+	//.        below. Can we merge them?
 	conversationUpdated := false
 	result, err := w.getConversation(partnerKey)
 	if err != nil {
@@ -238,6 +240,7 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n
 		jww.DEBUG.Printf(
 			"[DM indexedDB] Conversation with %s already joined", nickname)
 
+		updateConversation := false
 		// Update Conversation if nickname was altered
 		isFromPartner := bytes.Equal(result.Pubkey, senderKey)
 		nicknameChanged := result.Nickname != nickname
@@ -245,13 +248,28 @@ func (w *wasmModel) receiveWrapper(messageID message.ID, parentID *message.ID, n
 			jww.DEBUG.Printf(
 				"[DM indexedDB] Updating from nickname %s to %s",
 				result.Nickname, nickname)
-			err = w.upsertConversation(nickname, result.Pubkey, result.Token,
-				result.CodesetVersion, result.Blocked)
+			updateConversation = true
+		}
+
+		// Fix conversation if dmToken is altered
+		dmTokenChanged := result.Token != dmToken
+		if isFromPartner && dmTokenChanged {
+			jww.WARN.Printf(
+				"[DM indexedDB] Updating from dmToken %s to %s",
+				result.Token, dmToken)
+			updateConversation = true
+		}
+
+		if updateConversation {
+			err = w.upsertConversation(nickname, result.Pubkey,
+				result.Token, result.CodesetVersion,
+				result.Blocked)
 			if err != nil {
 				return 0, err
 			}
 			conversationUpdated = true
 		}
+
 	}
 
 	// Handle encryption, if it is present