diff --git a/backend/app/main.py b/backend/app/main.py
index 14b8b273f953da54d96be685ba46094d7cd24fd9..38de27689f431573523af08cdc18ec62800c2cd2 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -574,10 +574,10 @@ def create_message(
             detail="You do not have permission to create a message in this session",
         )
 
-    message = crud.create_message(db, entryMessage, current_user, db_session)
-
     action = "create" if entryMessage.message_id is None else "update"
 
+    message = crud.create_message(db, entryMessage, current_user, db_session)
+
     background_tasks.add_task(store_metadata, db, message.id, entryMessage.metadata)
     background_tasks.add_task(
         send_websoket_message,
diff --git a/frontend/src/lib/types/session.ts b/frontend/src/lib/types/session.ts
index c8b7ea9ee48ede51084263e8fb6df2d87714aeb2..332cb20e06380236134376910f866bec9aad21f5 100644
--- a/frontend/src/lib/types/session.ts
+++ b/frontend/src/lib/types/session.ts
@@ -254,7 +254,7 @@ export default class Session {
 					}
 				} else if (data['action'] === 'update') {
 					const message = Message.parse(data['data']);
-					if (message) {
+					if (message && !get(this._messages).find((m) => m.id === message.id)) {
 						this._messages.update((messages) => {
 							const mEdited = messages.find((m) => m.message_id === message.message_id);
 							if (!mEdited) return messages;