diff --git a/src/apps/cam/kms_sink.cpp b/src/apps/cam/kms_sink.cpp
index 353209cd..a508977d 100644
--- a/src/apps/cam/kms_sink.cpp
+++ b/src/apps/cam/kms_sink.cpp
@@ -63,7 +63,6 @@ KMSSink::KMSSink(const std::string &connectorName)
 		return;
 	}
 
-	dev_.requestComplete.connect(this, &KMSSink::requestComplete);
 }
 
 void KMSSink::mapBuffer(libcamera::FrameBuffer *buffer)
@@ -328,11 +327,15 @@ int KMSSink::start()
 		return ret;
 	}
 
+	dev_.requestComplete.connect(this, &KMSSink::requestComplete);
+
 	return 0;
 }
 
 int KMSSink::stop()
 {
+	dev_.requestComplete.disconnect();
+
 	/* Display pipeline. */
 	DRM::AtomicRequest request(&dev_);
 
