diff --git a/control/json/zone.cpp b/control/json/zone.cpp
index 6249194..be827cf 100644
--- a/control/json/zone.cpp
+++ b/control/json/zone.cpp
@@ -27,6 +27,7 @@
 #include <sdeventplus/event.hpp>
 
 #include <algorithm>
+#include <chrono>
 #include <filesystem>
 #include <fstream>
 #include <iterator>
@@ -54,12 +55,15 @@
     ConfigBase(jsonObj),
     ThermalObject(bus, (fs::path{CONTROL_OBJPATH} /= getName()).c_str(), true),
     _manager(mgr), _incDelay(0), _floor(0), _target(0), _incDelta(0),
-    _decDelta(0), _requestTargetBase(0), _isActive(true)
+    _decDelta(0), _requestTargetBase(0), _isActive(true),
+    _incTimer(event, std::bind(&Zone::incTimerExpired, this)),
+    _decTimer(event, std::bind(&Zone::decTimerExpired, this))
 {
     // Increase delay is optional, defaults to 0
     if (jsonObj.contains("increase_delay"))
     {
-        _incDelay = jsonObj["increase_delay"].get<uint64_t>();
+        _incDelay =
+            std::chrono::seconds(jsonObj["increase_delay"].get<uint64_t>());
     }
     setDefaultCeiling(jsonObj);
     setDefaultFloor(jsonObj);
@@ -69,6 +73,9 @@
     {
         setInterfaces(jsonObj);
     }
+
+    // Start timer for fan target decreases
+    _decTimer.restart(_decInterval);
 }
 
 void Zone::addFan(std::unique_ptr<Fan> fan)
@@ -133,11 +140,18 @@
             requestTarget = _ceiling;
         }
         setTarget(requestTarget);
-        // TODO // Restart timer countdown for fan speed increase
-        // _incTimer.restartOnce(_incDelay);
+        // Restart timer countdown for fan target increase
+        _incTimer.restartOnce(_incDelay);
     }
 }
 
+void Zone::incTimerExpired()
+{
+    // Clear increase delta when timer expires allowing additional target
+    // increase requests or target decreases to occur
+    _incDelta = 0;
+}
+
 void Zone::requestDecrease(uint64_t targetDelta)
 {
     // Only decrease the lowest target delta requested
@@ -147,6 +161,40 @@
     }
 }
 
+void Zone::decTimerExpired()
+{
+    // Check all entries are set to allow a decrease
+    auto pred = [](auto const& entry) { return entry.second; };
+    auto decAllowed = std::all_of(_decAllowed.begin(), _decAllowed.end(), pred);
+
+    // Only decrease targets when allowed, a requested decrease target delta
+    // exists, where no requested increases exist and the increase timer is not
+    // running (i.e. not in the middle of increasing)
+    if (decAllowed && _decDelta != 0 && _incDelta == 0 &&
+        !_incTimer.isEnabled())
+    {
+        auto requestTarget = getRequestTargetBase();
+        // Request target should not start above ceiling
+        if (requestTarget > _ceiling)
+        {
+            requestTarget = _ceiling;
+        }
+        // Target can not go below the defined floor
+        if ((requestTarget < _decDelta) || (requestTarget - _decDelta < _floor))
+        {
+            requestTarget = _floor;
+        }
+        else
+        {
+            requestTarget = requestTarget - _decDelta;
+        }
+        setTarget(requestTarget);
+    }
+    // Clear decrease delta when timer expires
+    _decDelta = 0;
+    // Decrease timer is restarted since its repeating
+}
+
 void Zone::setPersisted(const std::string& intf, const std::string& prop)
 {
     if (std::find_if(_propsPersisted[intf].begin(), _propsPersisted[intf].end(),
@@ -226,7 +274,8 @@
                         entry("JSON=%s", jsonObj.dump().c_str()));
         throw std::runtime_error("Missing required zone's decrease interval");
     }
-    _decInterval = jsonObj["decrease_interval"].get<uint64_t>();
+    _decInterval =
+        std::chrono::seconds(jsonObj["decrease_interval"].get<uint64_t>());
 }
 
 void Zone::setInterfaces(const json& jsonObj)
diff --git a/control/json/zone.hpp b/control/json/zone.hpp
index 5256018..e39a735 100644
--- a/control/json/zone.hpp
+++ b/control/json/zone.hpp
@@ -22,8 +22,10 @@
 #include <nlohmann/json.hpp>
 #include <sdbusplus/bus.hpp>
 #include <sdeventplus/event.hpp>
+#include <sdeventplus/utility/timer.hpp>
 
 #include <any>
+#include <chrono>
 #include <functional>
 #include <map>
 #include <tuple>
@@ -39,6 +41,9 @@
 using ThermalObject = sdbusplus::server::object::object<
     sdbusplus::xyz::openbmc_project::Control::server::ThermalMode>;
 
+/* Dbus event timer */
+using Timer = sdeventplus::utility::Timer<sdeventplus::ClockId::Monotonic>;
+
 /**
  * @class Zone - Represents a configured fan control zone
  *
@@ -236,6 +241,12 @@
     void requestIncrease(uint64_t targetDelta);
 
     /**
+     * @brief Callback function for the increase timer that delays
+     * processing of requested target increases while fans are increasing
+     */
+    void incTimerExpired();
+
+    /**
      * @brief Calculate the lowest requested decrease target from the given
      * delta within a decrease interval.
      *
@@ -244,6 +255,12 @@
     void requestDecrease(uint64_t targetDelta);
 
     /**
+     * @brief Callback function for the decrease timer that processes any
+     * requested target decreases if allowed
+     */
+    void decTimerExpired();
+
+    /**
      * @brief Set the requested target base to be used as the target to base a
      * new requested target from
      *
@@ -334,10 +351,10 @@
     uint64_t _defaultFloor;
 
     /* Zone's increase delay(in seconds) (OPTIONAL) */
-    uint64_t _incDelay;
+    std::chrono::seconds _incDelay;
 
     /* Zone's decrease interval(in seconds) */
-    uint64_t _decInterval;
+    std::chrono::seconds _decInterval;
 
     /* The floor target to not go below */
     uint64_t _floor;
@@ -369,6 +386,12 @@
     /* Automatic fan control active state */
     bool _isActive;
 
+    /* The target increase timer object */
+    Timer _incTimer;
+
+    /* The target decrease timer object */
+    Timer _decTimer;
+
     /* Map of active fan control allowed by a string identifier */
     std::map<std::string, bool> _active;
 
