diff --git a/include/libcamera/timer.h b/include/libcamera/timer.h
index 09f426a59993..3540efb41b6f 100644
--- a/include/libcamera/timer.h
+++ b/include/libcamera/timer.h
@@ -39,6 +39,7 @@ private:
 	void registerTimer();
 	void unregisterTimer();
 
+	bool running_;
 	std::chrono::steady_clock::time_point deadline_;
 };
 
diff --git a/src/libcamera/timer.cpp b/src/libcamera/timer.cpp
index 34410bab0fb0..8c74e1015e43 100644
--- a/src/libcamera/timer.cpp
+++ b/src/libcamera/timer.cpp
@@ -43,7 +43,7 @@ LOG_DEFINE_CATEGORY(Timer)
  * \param[in] parent The parent Object
  */
 Timer::Timer(Object *parent)
-	: Object(parent)
+	: Object(parent), running_(false)
 {
 }
 
@@ -89,17 +89,17 @@ void Timer::start(std::chrono::milliseconds duration)
 void Timer::stop()
 {
 	unregisterTimer();
-
-	deadline_ = utils::time_point();
 }
 
 void Timer::registerTimer()
 {
 	thread()->eventDispatcher()->registerTimer(this);
+	running_ = true;
 }
 
 void Timer::unregisterTimer()
 {
+	running_ = false;
 	thread()->eventDispatcher()->unregisterTimer(this);
 }
 
@@ -109,7 +109,7 @@ void Timer::unregisterTimer()
  */
 bool Timer::isRunning() const
 {
-	return deadline_ != utils::time_point();
+	return running_;
 }
 
 /**
