diff --git a/include/libcamera/event_notifier.h b/include/libcamera/event_notifier.h
index 1e9b6da1340c..f80945c743dc 100644
--- a/include/libcamera/event_notifier.h
+++ b/include/libcamera/event_notifier.h
@@ -7,11 +7,14 @@
 #ifndef __LIBCAMERA_EVENT_NOTIFIER_H__
 #define __LIBCAMERA_EVENT_NOTIFIER_H__
 
+#include <libcamera/object.h>
 #include <libcamera/signal.h>
 
 namespace libcamera {
 
-class EventNotifier
+class Message;
+
+class EventNotifier : public Object
 {
 public:
 	enum Type {
@@ -31,6 +34,9 @@ public:
 
 	Signal<EventNotifier *> activated;
 
+protected:
+	void message(Message *msg) override;
+
 private:
 	int fd_;
 	Type type_;
diff --git a/src/libcamera/event_notifier.cpp b/src/libcamera/event_notifier.cpp
index b32c7ed2d315..96be27601982 100644
--- a/src/libcamera/event_notifier.cpp
+++ b/src/libcamera/event_notifier.cpp
@@ -10,6 +10,9 @@
 #include <libcamera/camera_manager.h>
 #include <libcamera/event_dispatcher.h>
 
+#include "message.h"
+#include "thread.h"
+
 /**
  * \file event_notifier.h
  * \brief File descriptor event notifier
@@ -103,7 +106,7 @@ void EventNotifier::setEnabled(bool enable)
 
 	enabled_ = enable;
 
-	EventDispatcher *dispatcher = CameraManager::instance()->eventDispatcher();
+	EventDispatcher *dispatcher = thread()->eventDispatcher();
 	if (enable)
 		dispatcher->registerEventNotifier(this);
 	else
@@ -119,4 +122,16 @@ void EventNotifier::setEnabled(bool enable)
  * parameter.
  */
 
+void EventNotifier::message(Message *msg)
+{
+	if (msg->type() == Message::ThreadMoveMessage) {
+		if (enabled_) {
+			setEnabled(false);
+			invokeMethod(&EventNotifier::setEnabled, true);
+		}
+	}
+
+	Object::message(msg);
+}
+
 } /* namespace libcamera */
