diff --git a/briar-gtk/briar_gtk/containers/main_window.py b/briar-gtk/briar_gtk/containers/main_window.py
index f471d4eb4f64d60f66dde68fb9bda08725cf9306..f94d18db4a2d6d18abae5c521a59a214274063ac 100644
--- a/briar-gtk/briar_gtk/containers/main_window.py
+++ b/briar-gtk/briar_gtk/containers/main_window.py
@@ -125,7 +125,7 @@ class MainWindowContainer(Container):
     def _clear_history_container(self):
         children = self.history_container.get_children()
         for child in children:
-            self.history_container.remove(child)
+            child.destroy()
 
     def _setup_view(self):
         self._add_from_resource(self.MENU_UI)
@@ -174,4 +174,4 @@ class MainWindowContainer(Container):
     def _clear_contact_list(self):
         contacts_list_box_children = self.contacts_list_box.get_children()
         for child in contacts_list_box_children:
-            self.contacts_list_box.remove(child)
+            child.destroy()
diff --git a/briar-gtk/briar_gtk/containers/private_chat.py b/briar-gtk/briar_gtk/containers/private_chat.py
index a2dbcb6b15c9d1289b37cc7cb3180b9993c020f8..cac24539b686660178252f962ad7e1aef8a93b4d 100644
--- a/briar-gtk/briar_gtk/containers/private_chat.py
+++ b/briar-gtk/briar_gtk/containers/private_chat.py
@@ -23,6 +23,7 @@ class PrivateChatContainer(Container):
     def __init__(self, contact_name, contact_id):
         super().__init__()
 
+        self._signals = list()
         self._contact_name = contact_name
         self._contact_id = contact_id
 
@@ -70,6 +71,18 @@ class PrivateChatContainer(Container):
         self.add(messages_scroll)
 
         self.builder.connect_signals(self)
+        self._setup_destroy_listener()
+
+    def _setup_destroy_listener(self):
+        self.connect("destroy", self._on_destroy)
+
+    # pylint: disable=unused-argument
+    def _on_destroy(self, widget):
+        self._disconnect_signals()
+
+    def _disconnect_signals(self):
+        for signal in self._signals:
+            APP().api.socket_listener.disconnect(signal)
 
     def _load_content(self):
         private_chat = PrivateChat(APP().api, self._contact_id)
@@ -79,9 +92,10 @@ class PrivateChatContainer(Container):
             # Abusing idle_add function here because otherwise the message box
             # is too small and scrolling cuts out messages
             GLib.idle_add(self._add_message, message)
-        # TODO: Disconnect if no more needed
-        APP().api.socket_listener.connect("ConversationMessageReceivedEvent",
-                                          self._add_message_async)
+        socket_listener = APP().api.socket_listener
+        signal_id = socket_listener.connect("ConversationMessageReceivedEvent",
+                                            self._add_message_async)
+        self._signals.append(signal_id)
 
     def _add_message(self, message):
         message_widget = PrivateMessageWidget(self._contact_name, message)