diff --git a/include/IpmbSensor.hpp b/include/IpmbSensor.hpp
index b6bfa32..1775c13 100644
--- a/include/IpmbSensor.hpp
+++ b/include/IpmbSensor.hpp
@@ -29,6 +29,7 @@
     void read(void);
     void init(void);
     void loadDefaults(void);
+    void runInitCmd(void);
 
     IpmbType type;
     uint8_t commandAddress;
diff --git a/src/IpmbSensor.cpp b/src/IpmbSensor.cpp
index af1f725..e72f1af 100644
--- a/src/IpmbSensor.cpp
+++ b/src/IpmbSensor.cpp
@@ -45,6 +45,8 @@
 using IpmbMethodType =
     std::tuple<int, uint8_t, uint8_t, uint8_t, uint8_t, std::vector<uint8_t>>;
 
+boost::container::flat_map<std::string, std::unique_ptr<IpmbSensor>> sensors;
+
 IpmbSensor::IpmbSensor(std::shared_ptr<sdbusplus::asio::connection>& conn,
                        boost::asio::io_service& io,
                        const std::string& sensorName,
@@ -92,6 +94,15 @@
     loadDefaults();
     if (initCommand)
     {
+        runInitCmd();
+    }
+    read();
+}
+
+void IpmbSensor::runInitCmd()
+{
+    if (initCommand)
+    {
         dbusConnection->async_method_call(
             [this](boost::system::error_code ec,
                    const IpmbMethodType& response) {
@@ -109,10 +120,6 @@
             "/xyz/openbmc_project/Ipmi/Channel/Ipmb", "org.openbmc.Ipmb",
             "sendRequest", commandAddress, netfn, lun, *initCommand, initData);
     }
-    else
-    {
-        read();
-    }
 }
 
 void IpmbSensor::loadDefaults()
@@ -349,6 +356,29 @@
         "GetManagedObjects");
 }
 
+void reinitSensors(sdbusplus::message::message& message)
+{
+
+    std::string objectName;
+    boost::container::flat_map<std::string, std::variant<int32_t>> values;
+    message.read(objectName, values);
+    auto findPgood = values.find("pgood");
+    if (findPgood != values.end())
+    {
+        int32_t powerStatus = std::get<int32_t>(findPgood->second);
+        if (powerStatus)
+        {
+            for (auto& sensor : sensors)
+            {
+                if (sensor.second)
+                {
+                    sensor.second->runInitCmd();
+                }
+            }
+        }
+    }
+}
+
 int main(int argc, char** argv)
 {
 
@@ -356,8 +386,6 @@
     auto systemBus = std::make_shared<sdbusplus::asio::connection>(io);
     systemBus->request_name("xyz.openbmc_project.IpmbSensor");
     sdbusplus::asio::object_server objectServer(systemBus);
-    boost::container::flat_map<std::string, std::unique_ptr<IpmbSensor>>
-        sensors;
 
     io.post([&]() { createSensors(io, objectServer, sensors, systemBus); });
 
@@ -380,12 +408,19 @@
             });
         };
 
-    sdbusplus::bus::match::match match(
+    sdbusplus::bus::match::match configMatch(
         static_cast<sdbusplus::bus::bus&>(*systemBus),
         "type='signal',member='PropertiesChanged',path_namespace='" +
             std::string(inventoryPath) + "',arg0namespace='" + configInterface +
             "'",
         eventHandler);
 
+    sdbusplus::bus::match::match powerChangeMatch(
+        static_cast<sdbusplus::bus::bus&>(*systemBus),
+        "type='signal',interface='org.freedesktop.DBus.Properties',path_"
+        "namespace='/xyz/openbmc_project/Chassis/Control/"
+        "Power0',arg0='xyz.openbmc_project.Chassis.Control.Power'",
+        reinitSensors);
+
     io.run();
 }
