diff --git a/briar_wrapper/models/socket_listener.py b/briar_wrapper/models/socket_listener.py
index 64ec519b51bf2768d89857f002fa7aa5de842833..0850542e0e1bd51b66ae7b86b3afc7e613194f23 100644
--- a/briar_wrapper/models/socket_listener.py
+++ b/briar_wrapper/models/socket_listener.py
@@ -27,6 +27,11 @@ class SocketListener():  # pylint: disable=too-few-public-methods
         self._signals_lock.release()
         return signal_id
 
+    def disconnect(self, signal_id):
+        self._signals_lock.acquire()
+        self._remove_signal(signal_id)
+        self._signals_lock.release()
+
     def _add_signal(self, event, callback):
         self._highest_signal_id += 1
         signal_id = self._highest_signal_id
@@ -36,6 +41,9 @@ class SocketListener():  # pylint: disable=too-few-public-methods
             }
         return signal_id
 
+    def _remove_signal(self, signal_id):
+        del self._signals[signal_id]
+
     def _start_websocket_thread(self):
         websocket_thread = Thread(target=self._start_watch_loop,
                                   daemon=True)