diff --git a/src/CPUSensorMain.cpp b/src/CPUSensorMain.cpp
index 80f3f1c..32039e9 100644
--- a/src/CPUSensorMain.cpp
+++ b/src/CPUSensorMain.cpp
@@ -71,7 +71,7 @@
 
 const static std::regex ILLEGAL_NAME_REGEX("[^A-Za-z0-9_]");
 
-void createSensors(
+bool createSensors(
     boost::asio::io_service& io, sdbusplus::asio::object_server& objectServer,
     boost::container::flat_map<std::string, std::unique_ptr<CPUSensor>>&
         sensors,
@@ -89,7 +89,7 @@
     }
     if (!available)
     {
-        return;
+        return false;
     }
 
     // use new data the first time, then refresh
@@ -102,7 +102,7 @@
                                     useCache))
         {
             std::cerr << "error communicating to entity manager\n";
-            return;
+            return false;
         }
         useCache = true;
     }
@@ -112,7 +112,7 @@
                     R"(peci\d+/\d+-.+/of_node/oemname1$)", oemNamePaths, 2))
     {
         std::cerr << "No CPU sensors in system\n";
-        return;
+        return true;
     }
 
     for (fs::path& oemNamePath : oemNamePaths)
@@ -231,6 +231,8 @@
                           << "\n";
         }
     }
+
+    return true;
 }
 
 void reloadOverlay(const std::string& overlay)
@@ -323,27 +325,28 @@
             {
                 reloadOverlay(config.ovName);
             }
-            if (state != State::OFF)
-            {
-                if (state == State::ON)
-                {
-                    rescanDelaySeconds = 1;
-                }
-                else
-                {
-                    rescanDelaySeconds = 5;
-                }
-            }
             config.state = state;
         }
 
-        if (state != State::READY)
+        if (config.state != State::OFF)
+        {
+            if (config.state == State::ON)
+            {
+                rescanDelaySeconds = 1;
+            }
+            else
+            {
+                rescanDelaySeconds = 5;
+            }
+        }
+
+        if (config.state != State::READY)
         {
             keepPinging = true;
         }
 
         if (DEBUG)
-            std::cout << config.ovName << ", state: " << state << "\n";
+            std::cout << config.ovName << ", state: " << config.state << "\n";
     }
 
     close(file);
@@ -351,7 +354,10 @@
     if (rescanDelaySeconds)
     {
         std::this_thread::sleep_for(std::chrono::seconds(rescanDelaySeconds));
-        createSensors(io, objectServer, sensors, configs, dbusConnection);
+        if (!createSensors(io, objectServer, sensors, configs, dbusConnection))
+        {
+            keepPinging = true;
+        }
     }
 
     if (keepPinging)
