diff --git a/indexedDb/impl/channels/implementation.go b/indexedDb/impl/channels/implementation.go
index dfc000eba4476870a38b3e6dbd7c8181f55fb5f3..91dd1cbfb8dc67a09afea17a7591c47adf59ef7f 100644
--- a/indexedDb/impl/channels/implementation.go
+++ b/indexedDb/impl/channels/implementation.go
@@ -435,6 +435,22 @@ func (w *wasmModel) upsertMessage(msg *Message) (uint64, error) {
 	// Store message to database
 	msgIdObj, err := impl.Put(w.db, messageStoreName, messageObj)
 	if err != nil {
+		// Do not error out when this message already exists inside
+		// the DB. Instead, set the ID and re-attempt as an upsert.
+		if msg.ID == 0 { // always error out when not an insert attempt
+			msgID, inErr := message.UnmarshalID(msg.MessageID)
+			if inErr == nil {
+				jww.WARN.Printf("upsertMessage duplicate: %+v",
+					err)
+				existingMsg, inErr := w.GetMessage(msgID)
+				if inErr == nil && existingMsg.UUID != 0 {
+					msg.ID = existingMsg.UUID
+					return w.upsertMessage(msg)
+				}
+				jww.ERROR.Printf("upsertMessage no UUID: %+v",
+					inErr)
+			}
+		}
 		return 0, errors.Errorf("Unable to put Message: %+v\n%s",
 			err, newMessageJson)
 	}