diff --git a/recipes-phosphor/fans/phosphor-pid-control/0001-Fix-PID-failsafe-loggers.patch b/recipes-phosphor/fans/phosphor-pid-control/0001-Fix-PID-failsafe-loggers.patch
new file mode 100644
index 0000000..8cb4017
--- /dev/null
+++ b/recipes-phosphor/fans/phosphor-pid-control/0001-Fix-PID-failsafe-loggers.patch
@@ -0,0 +1,145 @@
+From 124b0fdcab70682d39d28f6890ec2a39e2ef0667 Mon Sep 17 00:00:00 2001
+From: James Zheng <alphetis@google.com>
+Date: Thu, 14 Aug 2025 17:59:59 +0000
+Subject: [PATCH] Fix PID failsafe logger
+
+Signed-off-by: James Zheng <alphetis@google.com>
+
+---
+ failsafeloggers/builder.cpp                 |  6 ++--
+ failsafeloggers/failsafe_logger.cpp         |  2 +-
+ failsafeloggers/failsafe_logger.hpp         |  5 ++-
+ failsafeloggers/failsafe_logger_utility.cpp |  5 ++-
+ failsafeloggers/failsafe_logger_utility.hpp | 35 ++++++++++-----------
+ 5 files changed, 26 insertions(+), 27 deletions(-)
+
+diff --git a/failsafeloggers/builder.cpp b/failsafeloggers/builder.cpp
+index 648abdc..c3a1b19 100644
+--- a/failsafeloggers/builder.cpp
++++ b/failsafeloggers/builder.cpp
+@@ -33,14 +33,12 @@ void buildFailsafeLoggers(
+     const std::unordered_map<int64_t, std::shared_ptr<ZoneInterface>>& zones,
+     const size_t logMaxCountPerSecond /* = 20 */) {
+   zoneIdToFailsafeLogger =
+-      std::unordered_map<int64_t,
+-                         std::shared_ptr<pid_control::FailsafeLogger>>();
++      std::unordered_map<int64_t, pid_control::FailsafeLogger>();
+   sensorNameToZoneId = std::unordered_map<std::string, std::vector<int64_t>>();
+   for (const auto& zoneIdToZone : zones) {
+     int64_t zoneId = zoneIdToZone.first;
+     // Create a failsafe logger for each zone.
+-    zoneIdToFailsafeLogger[zoneId] =
+-        std::make_shared<FailsafeLogger>(
++    zoneIdToFailsafeLogger[zoneId] = FailsafeLogger(
+             logMaxCountPerSecond, zoneIdToZone.second->getFailSafeMode());
+ 
+     // Build the sensor-zone topology map.
+diff --git a/failsafeloggers/failsafe_logger.cpp b/failsafeloggers/failsafe_logger.cpp
+index ace08e9..d10a540 100644
+--- a/failsafeloggers/failsafe_logger.cpp
++++ b/failsafeloggers/failsafe_logger.cpp
+@@ -28,7 +28,7 @@ void FailsafeLogger::outputFailsafeLog(const int64_t zoneId,
+   // encountered in the current state.
+   std::string locationReason = location + " @ " + reason;
+   if (_logTimestamps.size() >= _logMaxCountPerSecond ||
+-      !_logsInCurrentState.contains(locationReason)) {
++      _logsInCurrentState.contains(locationReason)) {
+     return;
+   }
+   _logsInCurrentState.insert(locationReason);
+diff --git a/failsafeloggers/failsafe_logger.hpp b/failsafeloggers/failsafe_logger.hpp
+index 6ac0ba5..53883b6 100644
+--- a/failsafeloggers/failsafe_logger.hpp
++++ b/failsafeloggers/failsafe_logger.hpp
+@@ -32,7 +32,10 @@ class FailsafeLogger
+     FailsafeLogger(size_t logMaxCountPerSecond = 20,
+                    bool currentFailsafeState = false)
+       : _logMaxCountPerSecond(logMaxCountPerSecond),
+-        _currentFailsafeState(currentFailsafeState) {}
++        _currentFailsafeState(currentFailsafeState) {
++            _logTimestamps.clear();
++            _logsInCurrentState.clear();
++        }
+     ~FailsafeLogger() = default;
+ 
+     /** Attempt to output an entering/leaving-failsafe-mode log.
+diff --git a/failsafeloggers/failsafe_logger_utility.cpp b/failsafeloggers/failsafe_logger_utility.cpp
+index 6e9d6aa..4ca17f0 100644
+--- a/failsafeloggers/failsafe_logger_utility.cpp
++++ b/failsafeloggers/failsafe_logger_utility.cpp
+@@ -3,9 +3,8 @@
+ #include <string>
+ 
+ 
+-std::unordered_map<int64_t, std::shared_ptr<pid_control::FailsafeLogger>>
+-  zoneIdToFailsafeLogger =
+-    std::unordered_map<int64_t, std::shared_ptr<pid_control::FailsafeLogger>>();
++std::unordered_map<int64_t, pid_control::FailsafeLogger> zoneIdToFailsafeLogger =
++    std::unordered_map<int64_t, pid_control::FailsafeLogger>();
+ 
+ std::unordered_map<std::string, std::vector<int64_t>>
+   sensorNameToZoneId = std::unordered_map<std::string, std::vector<int64_t>>();
+diff --git a/failsafeloggers/failsafe_logger_utility.hpp b/failsafeloggers/failsafe_logger_utility.hpp
+index 9ccdff3..7106808 100644
+--- a/failsafeloggers/failsafe_logger_utility.hpp
++++ b/failsafeloggers/failsafe_logger_utility.hpp
+@@ -10,8 +10,7 @@
+ 
+ /** Map of the zone ID to its failsafe logger.
+  */
+-extern std::unordered_map<int64_t, std::shared_ptr<pid_control::FailsafeLogger>>
+-    zoneIdToFailsafeLogger;
++extern std::unordered_map<int64_t, pid_control::FailsafeLogger> zoneIdToFailsafeLogger;
+ 
+ /** Map of the sensor name/ID to its corresponding zone IDs.
+  */
+@@ -33,31 +32,31 @@ extern const std::string failsafeReasonFailSensorNotFunctional;
+ namespace pid_control {
+ 
+     /** Given a sensor name, attempt to output entering/leaving-failsafe-mode
+-     * logs for its corresponding zones.
++     *  logs for its corresponding zones.
+      */
+     inline void outputFailsafeLogWithSensor(const std::string sensorName,
+-                                     const bool newFailsafeState,
+-                                     const std::string location,
+-                                     const std::string& reason) {
++                                            bool newFailsafeState,
++                                            const std::string& location,
++                                            const std::string& reason) {
+         for (const int64_t zoneId : sensorNameToZoneId[sensorName]) {
+-            zoneIdToFailsafeLogger[zoneId]->outputFailsafeLog(zoneId,
+-                                               newFailsafeState,
+-                                               location,
+-                                               reason);
++            zoneIdToFailsafeLogger[zoneId].outputFailsafeLog(zoneId,
++                                                             newFailsafeState,
++                                                             location,
++                                                             reason);
+         }
+     }
+ 
+     /** Given a zone ID, attempt to output entering/leaving-failsafe-mode
+-     * logs for its corresponding zones.
++     *  logs for it.
+      */
+     inline void outputFailsafeLogWithZone(const int64_t zoneId,
+-                                     const bool newFailsafeState,
+-                                     const std::string location,
+-                                     const std::string& reason) {
+-        zoneIdToFailsafeLogger[zoneId]->outputFailsafeLog(zoneId,
+-                                                        newFailsafeState,
+-                                                        location,
+-                                                        reason);
++                                          bool newFailsafeState,
++                                          const std::string& location,
++                                          const std::string& reason) {
++        zoneIdToFailsafeLogger[zoneId].outputFailsafeLog(zoneId,
++                                                         newFailsafeState,
++                                                         location,
++                                                         reason);
+     }
+ }  // namespace pid_control
+ 
+-- 
+2.51.0.rc1.163.g2494970778-goog
\ No newline at end of file
diff --git a/recipes-phosphor/fans/phosphor-pid-control_%.bbappend b/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
index 34f15bc..726d1a0 100644
--- a/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
+++ b/recipes-phosphor/fans/phosphor-pid-control_%.bbappend
@@ -5,4 +5,5 @@
   file://0001-set-fan-pwm-forcely.patch \
   file://0001-Add-failsafe-logger-for-zones.patch \
   file://0001-Optimize-failsafe-logger.patch \
+  file://0001-Fix-PID-failsafe-loggers.patch \
 "
