diff --git a/index.js b/index.js
index <HASH>..<HASH> 100644
--- a/index.js
+++ b/index.js
@@ -173,6 +173,10 @@ module.exports = function(messenger, opts) {
       // pass the queue to the sink
       pull(queue, sink);
 
+      // handle disconnection
+      signaller.removeListener('disconnected', handleDisconnect);
+      signaller.once('disconnected', handleDisconnect);
+
       // trigger the connected event
       signaller('connected');
     });
@@ -317,6 +321,7 @@ module.exports = function(messenger, opts) {
     send('/leave', { id: id });
 
     // stop announcing on reconnect
+    signaller.removeListener('disconnected', handleDisconnect);
     signaller.removeListener('connected', announceOnReconnect);
 
     // end our current queue
@@ -426,8 +431,5 @@ module.exports = function(messenger, opts) {
     connect();
   }
 
-  // handle disconnection
-  signaller.on('disconnected', handleDisconnect);
-
   return signaller;
 };
Ensure that a leave attempt actually results in a solid leave