diff --git a/include/libcamera/internal/v4l2_videodevice.h b/include/libcamera/internal/v4l2_videodevice.h
index f021c2a01..f8d017b01 100644
--- a/include/libcamera/internal/v4l2_videodevice.h
+++ b/include/libcamera/internal/v4l2_videodevice.h
@@ -232,6 +232,8 @@ public:
 
 	V4L2PixelFormat toV4L2PixelFormat(const PixelFormat &pixelFormat) const;
 
+	void changePollerThread(Thread *thread);
+
 protected:
 	std::string logPrefix() const override;
 
diff --git a/src/libcamera/v4l2_videodevice.cpp b/src/libcamera/v4l2_videodevice.cpp
index 14eba0561..fc6b88ec1 100644
--- a/src/libcamera/v4l2_videodevice.cpp
+++ b/src/libcamera/v4l2_videodevice.cpp
@@ -2120,6 +2120,19 @@ V4L2PixelFormat V4L2VideoDevice::toV4L2PixelFormat(const PixelFormat &pixelForma
 	return {};
 }
 
+/**
+ * \brief Move the event notifier and timer to \a thread
+ * \param[in] thread The thread to poll on
+ */
+void V4L2VideoDevice::changePollerThread(Thread *thread)
+{
+	if (!isOpen())
+		return;
+
+	fdBufferNotifier_->moveToThread(thread);
+	watchdog_.moveToThread(thread);
+}
+
 /**
  * \class V4L2M2MDevice
  * \brief Memory-to-Memory video device
