diff --git a/coolamqp/clustering/cluster.py b/coolamqp/clustering/cluster.py
index 5d77c96d3549ef9ccfe53e45b7cf1dedc58d7ae8..741efb41de2e7185b62354fb51009548e7f1981d 100644
--- a/coolamqp/clustering/cluster.py
+++ b/coolamqp/clustering/cluster.py
@@ -51,7 +51,14 @@ class Cluster(object):
             raise NotImplementedError(u'Multiple nodes not supported yet')
 
         self.node, = nodes
-        self.on_fail = on_fail
+
+        if self.on_fail is not None:
+            def decorated():
+                if not self.listener.terminating:
+                    on_fail()
+            self.on_fail = decorated
+        else:
+            self.on_fail = on_fail
 
     def declare(self, obj, persistent=False):
         """
@@ -176,10 +183,7 @@ class Cluster(object):
         self.snr = SingleNodeReconnector(self.node, self.attache_group, self.listener)
         self.snr.on_fail.add(lambda: self.events.put_nowait(ConnectionLost()))
         if self.on_fail is not None:
-            self.snr.on_fail.add(
-                (lambda snr, of: lambda: of() if not snr.terminating else None)(
-                    self.listener, self.on_fail)
-            )
+            self.snr.on_fail.add(self.on_fail)
 
         # Spawn a transactional publisher and a noack publisher
         self.pub_tr = Publisher(Publisher.MODE_CNPUB)