diff --git a/backend/app/crud.py b/backend/app/crud.py
index 1e92bcb259a832ac7109153189d16cb091394998..809c6f793d629e3386249a993a035ed94fa5e896 100644
--- a/backend/app/crud.py
+++ b/backend/app/crud.py
@@ -192,18 +192,18 @@ def create_message_metadata(
     return db_message_metadata
 
 
-def create_message_spellcheck(
+def create_message_feedback(
     db: Session,
     message_id: int,
     message: str,
-    spellcheck: schemas.MessageSpellCheckCreate,
-):
+    feedback: schemas.MessageFeedbackCreate,
+) -> str:
     message = (
-        message[: spellcheck.start]
+        message[: feedback.start]
         + "¤µ"
-        + message[spellcheck.start : spellcheck.end]
+        + message[feedback.start : feedback.end]
         + "µ¤"
-        + message[spellcheck.end :]
+        + message[feedback.end :]
     )
 
     db.query(models.Message).filter(models.Message.id == message_id).update(
@@ -211,6 +211,8 @@ def create_message_spellcheck(
     )
     db.commit()
 
+    return message
+
 
 def create_test_typing(db: Session, test: schemas.TestTypingCreate, user: schemas.User):
     db_test = models.TestTyping(user_id=user.id)
diff --git a/backend/app/main.py b/backend/app/main.py
index 9c7f18d0b92d74877529dc1b5898746133b54417..3e82944ed33c99c1d587571e7c6e05eda5271b14 100644
--- a/backend/app/main.py
+++ b/backend/app/main.py
@@ -613,13 +613,14 @@ def create_message(
 
 
 @sessionsRouter.post(
-    "/{session_id}/messages/{message_id}/spellcheck",
+    "/{session_id}/messages/{message_id}/feedback",
     status_code=status.HTTP_204_NO_CONTENT,
 )
-def spellcheck_message(
+def feedback_message(
     session_id: int,
     message_id: int,
-    spellcheck: schemas.MessageSpellCheckCreate,
+    feedback: schemas.MessageFeedbackCreate,
+    background_tasks: BackgroundTasks,
     db: Session = Depends(get_db),
     current_user: schemas.User = Depends(get_jwt_user),
 ):
@@ -633,14 +634,23 @@ def spellcheck_message(
     ):
         raise HTTPException(
             status_code=401,
-            detail="You do not have permission to spellcheck a message in this session",
+            detail="You do not have permission to feedback this message in this session",
         )
 
     message = crud.get_message(db, message_id)
     if message is None:
         raise HTTPException(status_code=404, detail="Message not found")
 
-    crud.create_message_spellcheck(db, message_id, message.content, spellcheck)
+    new_message = crud.create_message_feedback(db, message_id, message.content, feedback)
+
+    message.content = new_message
+
+    background_tasks.add_task(
+        send_websoket_message,
+        session_id,
+        schemas.Message.model_validate(message),
+        'update',
+    )
 
 
 async def send_websoket_typing(session_id: int, user_id: int):
diff --git a/backend/app/schemas.py b/backend/app/schemas.py
index f5725ed215a6fe7b6719b738903e980d5cd18b6e..a1ca6eb2d3d91cf984f6d2898fdfb07664f117ec 100644
--- a/backend/app/schemas.py
+++ b/backend/app/schemas.py
@@ -128,7 +128,7 @@ class MessageCreate(BaseModel):
         from_attributes = True
 
 
-class MessageSpellCheckCreate(BaseModel):
+class MessageFeedbackCreate(BaseModel):
     start: int
     end: int
 
diff --git a/frontend/src/lib/api/sessions.ts b/frontend/src/lib/api/sessions.ts
index c62ad1ebf68da53698de8b5378243a148a80bf88..039f7789087c217286b079a8b5d3480e41a41307 100644
--- a/frontend/src/lib/api/sessions.ts
+++ b/frontend/src/lib/api/sessions.ts
@@ -75,18 +75,18 @@ export async function updateMessageAPI(
 	return response.data;
 }
 
-export async function addMessageSpellCheckAPI(
+export async function addMessageFeedbackAPI(
 	id: number,
 	message_id: number,
 	start: number,
 	end: number
 ): Promise<boolean> {
-	const response = await axiosInstance.post(`/sessions/${id}/messages/${message_id}/spellcheck`, {
+	const response = await axiosInstance.post(`/sessions/${id}/messages/${message_id}/feedback`, {
 		start,
 		end
 	});
 	if (response.status !== 204) {
-		toastAlert('Failed to add spellcheck');
+		toastAlert('Failed to add feedback');
 		return false;
 	}
 	return true;
diff --git a/frontend/src/lib/components/sessions/message.svelte b/frontend/src/lib/components/sessions/message.svelte
index f056d1450df621b0d81482b44a0f0283313fcd76..761fe2c0ceb5a43f5f787ce541a89e291221543d 100644
--- a/frontend/src/lib/components/sessions/message.svelte
+++ b/frontend/src/lib/components/sessions/message.svelte
@@ -126,7 +126,7 @@
 		const end = range.end;
 		console.log(start, end);
 
-		const res = await message.addSpellCheck(start, end);
+		const res = await message.addFeedback(start, end);
 
 		if (res) {
 			selection.removeAllRanges();
diff --git a/frontend/src/lib/types/message.ts b/frontend/src/lib/types/message.ts
index 87acfd307db6cfe4807a45d9428ca93911d85f52..35f00f6ce06e17e54bbcacfc36f823f5e012b0d8 100644
--- a/frontend/src/lib/types/message.ts
+++ b/frontend/src/lib/types/message.ts
@@ -1,6 +1,6 @@
 import Session from './session';
 import User from './user';
-import { updateMessageAPI, addMessageSpellCheckAPI } from '$lib/api/sessions';
+import { updateMessageAPI, addMessageFeedbackAPI } from '$lib/api/sessions';
 import { toastAlert } from '$lib/utils/toasts';
 import { writable, type Writable } from 'svelte/store';
 
@@ -74,14 +74,14 @@ export default class Message {
 		return true;
 	}
 
-	async localUpdate(content: string): Promise<boolean> {
+	async localUpdate(content: string, force: boolean = false): Promise<boolean> {
 		this._content = content;
-		this._edited = true;
+		if (!force) this._edited = true;
 
 		return true;
 	}
 
-	async addSpellCheck(start: number, end: number): Promise<boolean> {
+	async addFeedback(start: number, end: number): Promise<boolean> {
 		for (let i = 0; i < start + 1; i++) {
 			if (this._content[i] == '¤' || this._content[i] == 'µ') {
 				start++;
@@ -89,7 +89,7 @@ export default class Message {
 			}
 		}
 
-		const response = await addMessageSpellCheckAPI(this._session.id, this._id, start, end);
+		const response = await addMessageFeedbackAPI(this._session.id, this._id, start, end);
 
 		if (!response) return false;
 
diff --git a/frontend/src/lib/types/session.ts b/frontend/src/lib/types/session.ts
index 828ac2390d3907ae601b08bc5eff8fb68aa53f64..9051f7c2cb48331c590e574d67d1cfa478cbedcb 100644
--- a/frontend/src/lib/types/session.ts
+++ b/frontend/src/lib/types/session.ts
@@ -263,15 +263,24 @@ export default class Session {
 					}
 				} else if (data['action'] === 'update') {
 					const message = Message.parse(data['data']);
-					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;
-							mEdited.localUpdate(message.content);
-							return messages.map((m) => (m.message_id === message.message_id ? mEdited : m));
-						});
-
-						return;
+					if (message) {
+						if (get(this._messages).find((m) => m.id === message.id)) {
+							this._messages.update((messages) => {
+								const mEdited = messages.find((m) => m.id === message.id);
+								if (!mEdited) return messages;
+								mEdited.localUpdate(message.content, true);
+								return messages.map((m) => (m.id === message.id ? mEdited : m));
+							});
+						} else {
+							this._messages.update((messages) => {
+								const mEdited = messages.find((m) => m.message_id === message.message_id);
+								if (!mEdited) return messages;
+								mEdited.localUpdate(message.content);
+								return messages.map((m) => (m.message_id === message.message_id ? mEdited : m));
+							});
+
+							return;
+						}
 					}
 				} else if (data['action'] == 'typing') {
 					this._lastTyping.set(new Date());