diff --git a/gajim/common/styling.py b/gajim/common/styling.py
index 7ffc5e782857c1e84b9a2fd6859c8e1ec874cbd6..1f5ccc95fcb01f35a83572f9e04dcf4cc38cae09 100644
--- a/gajim/common/styling.py
+++ b/gajim/common/styling.py
@@ -127,6 +127,7 @@ class StrikeSpan(StyleObject):
 
 @dataclass
 class ParsingResult:
+    text: str
     blocks: list
 
 
@@ -144,7 +145,7 @@ def process(text, nested=False):
             result = process(block.unquote(), nested=True)
             block.blocks = result.blocks
 
-    return ParsingResult(blocks)
+    return ParsingResult(text, blocks)
 
 
 def _parse_blocks(text, nested):
diff --git a/gajim/gtk/conversation/message_widget.py b/gajim/gtk/conversation/message_widget.py
index cb4fab76c9c808c5132b6a156719c550709ee95e..ab741d7f58616e79615e8d45cdabbbcb75f64dba 100644
--- a/gajim/gtk/conversation/message_widget.py
+++ b/gajim/gtk/conversation/message_widget.py
@@ -24,8 +24,15 @@ def __init__(self, account):
         Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
         self._account = account
 
-    def add_content(self, blocks):
-        for block in blocks:
+        self._content = None
+
+    def get_content(self):
+        return self._content
+
+    def add_content(self, content):
+        self.clear()
+        self._content = content
+        for block in content.blocks:
             if block.name == 'plain':
                 widget = PlainWidget(self._account)
                 widget.add_content(block)
@@ -40,8 +47,13 @@ def add_content(self, blocks):
 
             if block.name == 'quote':
                 message_widget = MessageWidget(self._account)
-                message_widget.add_content(block.blocks)
+                message_widget.add_content(block)
                 widget = QuoteWidget(self._account)
                 widget.attach_message_widget(message_widget)
                 self.add(widget)
                 continue
+
+        self.show_all()
+
+    def clear(self):
+        self.foreach(self.remove)
diff --git a/gajim/gtk/conversation/rows/info.py b/gajim/gtk/conversation/rows/info.py
index d66221b939ed9d40cea2c9a55986dc318eddea04..db1fd3f2ad2dcefcb28ae0e583c931dc85359f8b 100644
--- a/gajim/gtk/conversation/rows/info.py
+++ b/gajim/gtk/conversation/rows/info.py
@@ -60,7 +60,7 @@ def __init__(self,
 
         result = process(text)
         message_widget = MessageWidget(account)
-        message_widget.add_content(result.blocks)
+        message_widget.add_content(result)
 
         self.grid.attach(message_widget, 1, 0, 1, 1)
         self.show_all()
diff --git a/gajim/gtk/conversation/rows/message.py b/gajim/gtk/conversation/rows/message.py
index 7979305a19f9fb0db7f68822c385de81329f990f..a278b0bf9320a409c2656db78c1242d2f6083e04 100644
--- a/gajim/gtk/conversation/rows/message.py
+++ b/gajim/gtk/conversation/rows/message.py
@@ -82,8 +82,8 @@ def __init__(self,
                     'conversation-mention-highlight')
 
         result = process(text)
-        message_widget = MessageWidget(account)
-        message_widget.add_content(result.blocks)
+        self._message_widget = MessageWidget(account)
+        self._message_widget.add_content(result)
 
         self._meta_box = Gtk.Box(spacing=6)
         self._meta_box.pack_start(
@@ -129,7 +129,7 @@ def __init__(self,
         avatar_placeholder.add(self._avatar_surface)
 
         bottom_box = Gtk.Box(spacing=6)
-        bottom_box.add(message_widget)
+        bottom_box.add(self._message_widget)
         bottom_box.add(MoreMenuButton(self, history_mode=history_mode))
 
         self.grid.attach(avatar_placeholder, 0, 0, 1, 2)
@@ -214,21 +214,15 @@ def set_receipt(self):
     def set_displayed(self):
         self._has_displayed = True
 
-    def set_correction(self, message_id, text, other_text_tags, kind, name,
-                       additional_data=None):
-        self._corrections.append(self.textview.get_text())
-        self.textview.clear()
+    def set_correction(self, text, message_id):
+        self._corrections.append(self._message_widget.get_content().text)
+        result = process(text)
+        self._message_widget.add_content(result)
+
         self._has_receipt = False
         self._message_icons.set_receipt_icon_visible(False)
         self._message_icons.set_correction_icon_visible(True)
 
-        self.textview.print_text(
-            text,
-            other_text_tags=other_text_tags,
-            kind=kind,
-            name=name,
-            additional_data=additional_data)
-
         corrections = '\n'.join(line for line in self._corrections)
         corrections = reduce_chars_newlines(
             corrections, max_chars=150, max_lines=10)
diff --git a/gajim/gtk/conversation/view.py b/gajim/gtk/conversation/view.py
index 0898aeca4f4687393401d917fc814f0c9621bf78..04fa705ecb95e78686c8b7448c76948aee0271e7 100644
--- a/gajim/gtk/conversation/view.py
+++ b/gajim/gtk/conversation/view.py
@@ -150,14 +150,7 @@ def add_message(self,
                 history_mode=self._history_mode)
         else:
             if correct_id:
-                self.correct_message(
-                    correct_id,
-                    message_id,
-                    text,
-                    other_text_tags,
-                    kind,
-                    name,
-                    additional_data=additional_data)
+                self.correct_message(correct_id, message_id, text)
                 return
 
             avatar = self._get_avatar(kind, name)
@@ -371,13 +364,10 @@ def scroll_to_end(self, force=False):
         if self.autoscroll or force:
             GLib.idle_add(scroll_to_end, self.get_parent().get_parent())
 
-    def correct_message(self, correct_id, message_id, text,
-                        other_text_tags, kind, name, additional_data=None):
+    def correct_message(self, correct_id, message_id, text):
         message_row = self._get_row_by_message_id(correct_id)
         if message_row is not None:
-            message_row.set_correction(
-                message_id, text, other_text_tags, kind, name,
-                additional_data=additional_data)
+            message_row.set_correction(text, message_id)
             message_row.set_merged(False)
 
     def show_receipt(self, id_):