diff --git a/dbus/dbusconfiguration.cpp b/dbus/dbusconfiguration.cpp
index 02eda38..bbe87d4 100644
--- a/dbus/dbusconfiguration.cpp
+++ b/dbus/dbusconfiguration.cpp
@@ -581,6 +581,50 @@
                                                   zone.at("MinThermalOutput"));
             details.failsafePercent = std::visit(VariantToDoubleVisitor(),
                                                  zone.at("FailSafePercent"));
+
+            auto findTimeInterval = zone.find("CycleIntervalTimeMS");
+            if (findTimeInterval != zone.end())
+            {
+                double tmp = 0.0;
+                auto ptrTimeInterval =
+                    std::get_if<double>(&(findTimeInterval->second));
+                if (ptrTimeInterval)
+                {
+                    tmp = *ptrTimeInterval;
+                }
+                if (tmp >= 1.0)
+                {
+                    details.cycleTime.cycleIntervalTimeMS = tmp;
+                }
+                else
+                {
+                    std::cerr << "CycleIntervalTimeMS cannot be 0. Use default "
+                              << details.cycleTime.cycleIntervalTimeMS
+                              << " ms\n";
+                }
+            }
+
+            auto findUpdateThermalsTime = zone.find("UpdateThermalsTimeMS");
+            if (findUpdateThermalsTime != zone.end())
+            {
+                double tmp = 0.0;
+                auto ptrUpdateThermalsTime =
+                    std::get_if<double>(&(findUpdateThermalsTime->second));
+                if (ptrUpdateThermalsTime)
+                {
+                    tmp = *ptrUpdateThermalsTime;
+                }
+                if (tmp >= 1.0)
+                {
+                    details.cycleTime.updateThermalsTimeMS = tmp;
+                }
+                else
+                {
+                    std::cerr
+                        << "UpdateThermalsTimeMS cannot be 0. Use default "
+                        << details.cycleTime.updateThermalsTimeMS << " ms\n";
+                }
+            }
         }
         auto findBase = configuration.second.find(pidConfigurationInterface);
         // loop through all the PID configurations and fill out a sensor config
diff --git a/pid/buildjson.cpp b/pid/buildjson.cpp
index 8dcbfbc..47aa752 100644
--- a/pid/buildjson.cpp
+++ b/pid/buildjson.cpp
@@ -184,22 +184,6 @@
             }
         }
 
-        double updateCount =
-            double(thisZoneConfig.cycleTime.updateThermalsTimeMS) /
-            double(thisZoneConfig.cycleTime.cycleIntervalTimeMS);
-
-        /* Check if updateThermalsTimeMS could be divided by cycleIntervalTimeMS
-         * without leaving a remainder */
-        if (updateCount != std::ceil(updateCount))
-        {
-            std::cerr
-                << "updateThermalsTimeMS cannot be divided by "
-                   "cycleIntervalTimeMS without leaving a remainder. Using the "
-                   "smallest integer that is not less than the result.\n";
-            updateCount = std::ceil(updateCount);
-        }
-        thisZoneConfig.cycleTime.updateThermalsTimeMS = updateCount;
-
         auto pids = zone["pids"];
         for (const auto& pid : pids)
         {
diff --git a/pid/pidloop.cpp b/pid/pidloop.cpp
index aba2b6e..0ccf35c 100644
--- a/pid/pidloop.cpp
+++ b/pid/pidloop.cpp
@@ -53,6 +53,8 @@
     if (*isCanceling)
         return;
 
+    std::chrono::steady_clock::time_point nextTime;
+
     if (first)
     {
         if (loggingEnabled)
@@ -62,11 +64,22 @@
 
         zone->initializeCache();
         processThermals(zone);
+
+        nextTime = std::chrono::steady_clock::now();
+    }
+    else
+    {
+        nextTime = timer->expiry();
     }
 
-    timer->expires_after(
-        std::chrono::milliseconds(zone->getCycleIntervalTime()));
-    timer->async_wait([zone, timer, cycleCnt, isCanceling](
+    uint64_t msPerFanCycle = zone->getCycleIntervalTime();
+
+    // Push forward the original expiration time of timer, instead of just
+    // resetting it with expires_after() from now, to make sure the interval
+    // is of the expected duration, and not stretched out by CPU time taken.
+    nextTime += std::chrono::milliseconds(msPerFanCycle);
+    timer->expires_at(nextTime);
+    timer->async_wait([zone, timer, cycleCnt, isCanceling, msPerFanCycle](
                           const boost::system::error_code& ec) mutable {
         if (ec == boost::asio::error::operation_aborted)
         {
@@ -110,9 +123,15 @@
         // Get the latest fan speeds.
         zone->updateFanTelemetry();
 
-        if (zone->getUpdateThermalsCycle() <= cycleCnt)
+        uint64_t msPerThermalCycle = zone->getUpdateThermalsCycle();
+
+        // Process thermal cycles at a rate that is less often than fan
+        // cycles. If thermal time is not an exact multiple of fan time,
+        // there will be some remainder left over, to keep the timing
+        // correct, as the intervals are staggered into one another.
+        if (cycleCnt >= msPerThermalCycle)
         {
-            cycleCnt = 0;
+            cycleCnt -= msPerThermalCycle;
 
             processThermals(zone);
         }
@@ -127,7 +146,9 @@
             zone->writeLog(out.str());
         }
 
-        cycleCnt += 1;
+        // Count how many milliseconds have elapsed, so we can know when
+        // to perform thermal cycles, in proper ratio with fan cycles.
+        cycleCnt += msPerFanCycle;
 
         pidControlLoop(zone, timer, isCanceling, false, cycleCnt);
     });
diff --git a/test/pid_json_unittest.cpp b/test/pid_json_unittest.cpp
index eb9ca58..c58f3f4 100644
--- a/test/pid_json_unittest.cpp
+++ b/test/pid_json_unittest.cpp
@@ -254,9 +254,7 @@
 
     EXPECT_EQ(pidConfig[1]["fan1-5"].type, "fan");
     EXPECT_EQ(zoneConfig[1].cycleTime.cycleIntervalTimeMS, 1000);
-    // updateThermalsTimeMS would be updated as updateThermalsTimeMS /
-    // cycleIntervalTimeMS
-    EXPECT_EQ(zoneConfig[1].cycleTime.updateThermalsTimeMS, 1);
+    EXPECT_EQ(zoneConfig[1].cycleTime.updateThermalsTimeMS, 1000);
     EXPECT_DOUBLE_EQ(zoneConfig[1].minThermalOutput, 3000.0);
 }
 
