diff --git a/pid/fancontroller.cpp b/pid/fancontroller.cpp
index 57902ab..7d4a92d 100644
--- a/pid/fancontroller.cpp
+++ b/pid/fancontroller.cpp
@@ -145,8 +145,24 @@
             {
                 percent = failsafePercent;
             }
+
+            if (failsafePrint || debugEnabled)
+            {
+                std::cerr << "Zone " << _owner->getZoneID()
+                          << " fans output failsafe pwm: " << percent << "\n";
+                failsafePrint = false;
+            }
 #endif
         }
+        else
+        {
+            failsafePrint = true;
+            if (debugEnabled)
+            {
+                std::cerr << "Zone " << _owner->getZoneID()
+                          << " fans output pwm: " << percent << "\n";
+            }
+        }
     }
 
     // value and kFanFailSafeDutyCycle are 10 for 10% so let's fix that.
diff --git a/pid/fancontroller.hpp b/pid/fancontroller.hpp
index 25eebad..89b3d5e 100644
--- a/pid/fancontroller.hpp
+++ b/pid/fancontroller.hpp
@@ -47,6 +47,7 @@
   private:
     std::vector<std::string> _inputs;
     FanSpeedDirection _direction;
+    bool failsafePrint = true;
 };
 
 } // namespace pid_control
diff --git a/pid/stepwisecontroller.cpp b/pid/stepwisecontroller.cpp
index 5c36778..d141f87 100644
--- a/pid/stepwisecontroller.cpp
+++ b/pid/stepwisecontroller.cpp
@@ -18,6 +18,7 @@
 
 #include "ec/stepwise.hpp"
 #include "errors/exception.hpp"
+#include "tuning.hpp"
 #include "util.hpp"
 #include "zone.hpp"
 
@@ -90,6 +91,13 @@
     {
         value = std::max(value, _owner->getCachedValue(in));
     }
+
+    if (debugEnabled)
+    {
+        std::cerr << getID()
+                  << " choose the maximum temperature value: " << value << "\n";
+    }
+
     return value;
 }
 
@@ -102,6 +110,10 @@
     else
     {
         _owner->addSetPoint(value, _id);
+        if (debugEnabled)
+        {
+            std::cerr << getID() << " stepwise output pwm: " << value << "\n";
+        }
     }
     return;
 }
diff --git a/pid/thermalcontroller.cpp b/pid/thermalcontroller.cpp
index 71374a1..8778719 100644
--- a/pid/thermalcontroller.cpp
+++ b/pid/thermalcontroller.cpp
@@ -17,6 +17,7 @@
 #include "thermalcontroller.hpp"
 
 #include "errors/exception.hpp"
+#include "tuning.hpp"
 #include "util.hpp"
 #include "zone.hpp"
 
@@ -98,6 +99,12 @@
         value = 0;
     }
 
+    if (debugEnabled)
+    {
+        std::cerr << getID() << " choose the temperature value: " << value
+                  << "\n";
+    }
+
     return value;
 }
 
@@ -125,6 +132,11 @@
 {
     _owner->addSetPoint(value, _id);
 
+    if (debugEnabled)
+    {
+        std::cerr << getID() << " pid output pwm: " << value << "\n";
+    }
+
     return;
 }
 
diff --git a/pid/tuning.cpp b/pid/tuning.cpp
index 3422e34..38fa07b 100644
--- a/pid/tuning.cpp
+++ b/pid/tuning.cpp
@@ -20,3 +20,5 @@
 
 std::string loggingPath;
 bool loggingEnabled = false;
+
+bool debugEnabled = false;
diff --git a/pid/tuning.hpp b/pid/tuning.hpp
index ba4ec32..7f1cb63 100644
--- a/pid/tuning.hpp
+++ b/pid/tuning.hpp
@@ -11,3 +11,8 @@
 extern std::string loggingPath;
 /** Boolean variable whether loggingPath is non-empty. */
 extern bool loggingEnabled;
+
+/** Boolean variable controlling whether debug mode is enabled
+ * during this run.
+ */
+extern bool debugEnabled;
diff --git a/pid/zone.cpp b/pid/zone.cpp
index cac4577..69464e1 100644
--- a/pid/zone.cpp
+++ b/pid/zone.cpp
@@ -383,14 +383,27 @@
             _log << "," << p.scaled << "," << p.unscaled;
         }
 
+        if (debugEnabled)
+        {
+            std::cerr << f << " fan sensor reading: " << r.value << "\n";
+        }
+
         // check if fan fail.
         if (sensor->getFailed())
         {
             _failSafeSensors.insert(f);
+            if (debugEnabled)
+            {
+                std::cerr << f << " fan sensor get failed\n";
+            }
         }
         else if (timeout != 0 && duration >= period)
         {
             _failSafeSensors.insert(f);
+            if (debugEnabled)
+            {
+                std::cerr << f << " fan sensor timeout\n";
+            }
         }
         else
         {
@@ -398,6 +411,10 @@
             auto kt = _failSafeSensors.find(f);
             if (kt != _failSafeSensors.end())
             {
+                if (debugEnabled)
+                {
+                    std::cerr << f << " is erased from failsafe sensor set\n";
+                }
                 _failSafeSensors.erase(kt);
             }
         }
@@ -433,14 +450,28 @@
         auto duration = duration_cast<std::chrono::seconds>(now - then).count();
         auto period = std::chrono::seconds(timeout).count();
 
+        if (debugEnabled)
+        {
+            std::cerr << t << " temperature sensor reading: " << r.value
+                      << "\n";
+        }
+
         if (sensor->getFailed())
         {
             _failSafeSensors.insert(t);
+            if (debugEnabled)
+            {
+                std::cerr << t << " temperature sensor get failed\n";
+            }
         }
         else if (timeout != 0 && duration >= period)
         {
             // std::cerr << "Entering fail safe mode.\n";
             _failSafeSensors.insert(t);
+            if (debugEnabled)
+            {
+                std::cerr << t << " temperature sensor get timeout\n";
+            }
         }
         else
         {
@@ -448,6 +479,10 @@
             auto kt = _failSafeSensors.find(t);
             if (kt != _failSafeSensors.end())
             {
+                if (debugEnabled)
+                {
+                    std::cerr << t << " is erased from failsafe sensor set\n";
+                }
                 _failSafeSensors.erase(kt);
             }
         }
diff --git a/pid/zone.hpp b/pid/zone.hpp
index 41514a7..0504a6d 100644
--- a/pid/zone.hpp
+++ b/pid/zone.hpp
@@ -60,7 +60,7 @@
     void setManualMode(bool mode);
     bool getFailSafeMode(void) const override;
 
-    int64_t getZoneID(void) const;
+    int64_t getZoneID(void) const override;
     void addSetPoint(double setPoint, const std::string& name) override;
     double getMaxSetPointRequest(void) const override;
     void addRPMCeiling(double ceiling) override;
diff --git a/pid/zone_interface.hpp b/pid/zone_interface.hpp
index d7f73b4..179c856 100644
--- a/pid/zone_interface.hpp
+++ b/pid/zone_interface.hpp
@@ -16,6 +16,9 @@
   public:
     virtual ~ZoneInterface() = default;
 
+    /** Get Current Zone ID */
+    virtual int64_t getZoneID(void) const = 0;
+
     /** If the zone implementation supports logging, initialize the log. */
     virtual void initializeLog(void) = 0;
     /** If the zone implementation supports logging, write string to log. */
