diff --git a/libs/ardour/ardour/delivery.h b/libs/ardour/ardour/delivery.h
index 6945f4e..bacc992 100644
--- a/libs/ardour/ardour/delivery.h
+++ b/libs/ardour/ardour/delivery.h
@@ -112,6 +112,7 @@ public:
 	bool         no_panner_reset;
 	boost::shared_ptr<PannerShell> _panshell;
 	framecnt_t   scnt;
+	PBD::ScopedConnection _cycle_start_connection;
 
 	static bool panners_legal;
 	static PBD::Signal0<int>            PannersLegal;
diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc
index 75c32a0..6182cd4 100644
--- a/libs/ardour/delivery.cc
+++ b/libs/ardour/delivery.cc
@@ -74,7 +74,7 @@ Delivery::Delivery (Session& s, boost::shared_ptr<IO> io, boost::shared_ptr<Pann
 		_output->changed.connect_same_thread (*this, boost::bind (&Delivery::output_changed, this, _1, _2));
 	}
 
-	CycleStart.connect_same_thread (*this, boost::bind (&Delivery::cycle_start, this, _1));
+	CycleStart.connect_same_thread (_cycle_start_connection, boost::bind (&Delivery::cycle_start, this, _1));
 }
 
 /* deliver to a new IO object */
diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc
index d8bc1cc..ea787b6 100644
--- a/libs/ardour/internal_send.cc
+++ b/libs/ardour/internal_send.cc
@@ -50,6 +50,7 @@ InternalSend::InternalSend (Session& s, boost::shared_ptr<Pannable> p, boost::sh
 
 InternalSend::~InternalSend ()
 {
+	_cycle_start_connection.disconnect ();
 	if (_send_to) {
 		_send_to->remove_send_from_internal_return (this);
 	}
