diff --git a/power-control-x86/src/power_control.cpp b/power-control-x86/src/power_control.cpp
index 987a76f..0379c4c 100644
--- a/power-control-x86/src/power_control.cpp
+++ b/power-control-x86/src/power_control.cpp
@@ -219,6 +219,8 @@
     sioPowerGoodDeAssert,
     sioS5Assert,
     sioS5DeAssert,
+    pltRstAssert,
+    pltRstDeAssert,
     postCompleteAssert,
     postCompleteDeAssert,
     powerButtonPressed,
@@ -257,6 +259,12 @@
         case Event::sioS5DeAssert:
             return "SIO S5 de-assert";
             break;
+        case Event::pltRstAssert:
+            return "PLT_RST assert";
+            break;
+        case Event::pltRstDeAssert:
+            return "PLT_RST de-assert";
+            break;
         case Event::postCompleteAssert:
             return "POST Complete assert";
             break;
@@ -1416,7 +1424,11 @@
             setPowerState(PowerState::transitionToOff);
             addRestartCause(RestartCause::softReset);
             break;
+#if USE_PLT_RST
+        case Event::pltRstAssert:
+#else
         case Event::postCompleteDeAssert:
+#endif
             setPowerState(PowerState::checkForWarmReset);
             addRestartCause(RestartCause::softReset);
             warmResetCheckTimerStart();
@@ -2032,6 +2044,55 @@
                              });
 }
 
+static void pltRstHandler(bool pltRst)
+{
+    if (pltRst)
+    {
+        sendPowerControlEvent(Event::pltRstDeAssert);
+    }
+    else
+    {
+        sendPowerControlEvent(Event::pltRstAssert);
+    }
+}
+
+static void hostMiscHandler(sdbusplus::message::message& msg)
+{
+    std::string interfaceName;
+    boost::container::flat_map<std::string, std::variant<bool>>
+        propertiesChanged;
+    bool pltRst;
+    try
+    {
+        msg.read(interfaceName, propertiesChanged);
+    }
+    catch (std::exception& e)
+    {
+        std::cerr << "Unable to read Host Misc status\n";
+        return;
+    }
+    if (propertiesChanged.empty())
+    {
+        std::cerr
+            << "ERROR: Empty Host.Misc PropertiesChanged signal received\n";
+        return;
+    }
+
+    for (auto& [property, value] : propertiesChanged)
+    {
+        if (property == "ESpiPlatformReset")
+        {
+            bool* pltRst = std::get_if<bool>(&value);
+            if (pltRst == nullptr)
+            {
+                std::cerr << property << " property invalid\n";
+                return;
+            }
+            pltRstHandler(*pltRst);
+        }
+    }
+}
+
 static void postCompleteHandler()
 {
     gpiod::line_event gpioLineEvent = postCompleteLine.event_read();
@@ -2274,6 +2335,14 @@
             power_control::idButtonLine, power_control::idButtonEvent);
     }
 
+#ifdef USE_PLT_RST
+    sdbusplus::bus::match::match pltRstMatch(
+        *power_control::conn,
+        "type='signal',interface='org.freedesktop.DBus.Properties',member='"
+        "PropertiesChanged',arg0='xyz.openbmc_project.State.Host.Misc'",
+        power_control::hostMiscHandler);
+#endif
+
     // Request POST_COMPLETE GPIO events
     if (!power_control::postCompleteName.empty())
     {
