diff --git a/src/PSUEvent.cpp b/src/PSUEvent.cpp
index 9e73df5..3e8c589 100644
--- a/src/PSUEvent.cpp
+++ b/src/PSUEvent.cpp
@@ -42,7 +42,7 @@
         std::string,
         boost::container::flat_map<std::string, std::vector<std::string>>>&
         groupEventPathList,
-    const std::string& combineEventName) :
+    const std::string& combineEventName, double pollRate) :
     objServer(objectServer)
 {
     std::string psuNameEscaped = sensor_paths::escapePathForDbus(psuName);
@@ -71,7 +71,7 @@
         {
             auto p = std::make_shared<PSUSubEvent>(
                 eventInterface, path, conn, io, eventName, eventName, assert,
-                combineEvent, state, psuName);
+                combineEvent, state, psuName, pollRate);
             p->setupRead();
 
             events[eventPSUName].emplace_back(p);
@@ -94,7 +94,8 @@
             {
                 auto p = std::make_shared<PSUSubEvent>(
                     eventInterface, path, conn, io, groupEventName,
-                    groupPathList.first, assert, combineEvent, state, psuName);
+                    groupPathList.first, assert, combineEvent, state, psuName,
+                    pollRate);
                 p->setupRead();
                 events[eventPSUName].emplace_back(p);
 
@@ -144,13 +145,17 @@
     const std::string& eventName,
     std::shared_ptr<std::set<std::string>> asserts,
     std::shared_ptr<std::set<std::string>> combineEvent,
-    std::shared_ptr<bool> state, const std::string& psuName) :
+    std::shared_ptr<bool> state, const std::string& psuName, double pollRate) :
     std::enable_shared_from_this<PSUSubEvent>(),
     eventInterface(std::move(eventInterface)), asserts(std::move(asserts)),
     combineEvent(std::move(combineEvent)), assertState(std::move(state)),
     errCount(0), path(path), eventName(eventName), waitTimer(io), inputDev(io),
     psuName(psuName), groupEventName(groupEventName), systemBus(conn)
 {
+    if (pollRate > 0.0)
+    {
+        eventPollMs = static_cast<unsigned int>(pollRate * 1000);
+    }
     fd = open(path.c_str(), O_RDONLY);
     if (fd < 0)
     {
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index 077f7ed..d323b4d 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -43,7 +43,7 @@
                      const std::string& sensorConfiguration,
                      const std::string& sensorUnits, unsigned int factor,
                      double max, double min, const std::string& label,
-                     size_t tSize) :
+                     size_t tSize, double pollRate) :
     Sensor(boost::replace_all_copy(sensorName, " ", "_"),
            std::move(thresholdsIn), sensorConfiguration, objectType, false, max,
            min, conn),
@@ -60,6 +60,10 @@
                   << min << " max " << max << " name \"" << sensorName
                   << "\"\n";
     }
+    if (pollRate > 0.0)
+    {
+        sensorPollMs = static_cast<unsigned int>(pollRate * 1000);
+    }
 
     fd = open(path.c_str(), O_RDONLY | O_NONBLOCK);
     if (fd < 0)
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index 3f0dfbf..01ae6d8 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -466,6 +466,20 @@
             }
         }
 
+        /* The poll rate for the sensors */
+        double pollRate = 0.0;
+        auto pollRateObj = baseConfig->second.find("PollRate");
+
+        if (pollRateObj != baseConfig->second.end())
+        {
+            pollRate =
+                std::visit(VariantToDoubleVisitor(), pollRateObj->second);
+            if (pollRate <= 0.0)
+            {
+                pollRate = PSUSensor::defaultSensorPoll;
+            }
+        }
+
         /* Find array of labels to be exposed if it is defined in config */
         std::vector<std::string> findLabels;
         auto findLabelObj = baseConfig->second.find("Labels");
@@ -822,7 +836,8 @@
                 sensorPathStr, sensorType, objectServer, dbusConnection, io,
                 sensorName, std::move(sensorThresholds), *interfacePath,
                 findSensorUnit->second, factor, psuProperty->maxReading,
-                psuProperty->minReading, labelHead, thresholdConfSize);
+                psuProperty->minReading, labelHead, thresholdConfSize,
+                pollRate);
             sensors[sensorName]->setupRead();
             ++numCreated;
             if constexpr (debug)
@@ -836,7 +851,7 @@
         combineEvents[*psuName + "OperationalStatus"] =
             std::make_unique<PSUCombineEvent>(
                 objectServer, dbusConnection, io, *psuName, eventPathList,
-                groupEventPathList, "OperationalStatus");
+                groupEventPathList, "OperationalStatus", pollRate);
     }
 
     if constexpr (debug)
