diff --git a/LCS/Messaging/python/messaging/messagebus.py b/LCS/Messaging/python/messaging/messagebus.py
index 827cf0857b51947907b7aeb56ba34ed80225e41a..1cdaf3a819dbd3c82ecf8c91997e18d9e5974c98 100644
--- a/LCS/Messaging/python/messaging/messagebus.py
+++ b/LCS/Messaging/python/messaging/messagebus.py
@@ -1621,19 +1621,31 @@ class BusListenerJanitor:
     def __enter__(self) -> BusListener:
         """enter the context, and make the bus_listener start listening.
         :return a reference to the buslistener, not to the janitor!"""
-        self._bus_listener.start_listening()
-        return self._bus_listener
+        try:
+            self.open()
+            return self._bus_listener
+        except Exception as e:
+            logger.exception(e)
+            self.close()
+            raise
 
     def __exit__(self, exc_type, exc_val, exc_tb):
         """leave the context, make the bus_listener stop listening,
         and clean up the auto-generated queue"""
+        self.close()
+
+    def open(self):
+        """make the bus_listener start listening."""
+        self._bus_listener.start_listening()
+
+    def close(self):
+        """make the bus_listener stop listening, and delete listener queue"""
         try:
+            bus_listener_address = self._bus_listener.address
             self._bus_listener.stop_listening()
-        except Exception as e:
-            logger.error(e)
         finally:
-            logger.info("BusListenerJanitor deleting auto-generated queue: %s", self._bus_listener.address)
-            delete_queue(self._bus_listener.address)
+            logger.info("BusListenerJanitor deleting auto-generated queue: %s", bus_listener_address)
+            delete_queue(bus_listener_address)
 
 
 # do not expose create/delete_queue/exchange etc methods in all, it's not part of the public API