diff --git a/src/soc-reset-me.cpp b/src/soc-reset-me.cpp
index dc40705..8f97cc7 100644
--- a/src/soc-reset-me.cpp
+++ b/src/soc-reset-me.cpp
@@ -99,11 +99,18 @@
     }
 }
 
-void SocResetMeHandler::handle(
+void SocResetMeHandler::issueReset(const ResetTimeStamp& requestTime,
+                                   uint16_t resetType)
+{
+    this->resetSoC(resetType);
+    logRequestIssued(requestTime);
+}
+
+std::optional<ResetTimeStamp> SocResetMeHandler::handleDeferable(
     [[maybe_unused]] uint8_t requesterTid,
     [[maybe_unused]] const struct pldm_event_oem_google_soc_reset_me*
         resetMeMsg,
-    [[maybe_unused]] size_t resetMeMsgLen)
+    [[maybe_unused]] size_t resetMeMsgLen, bool resetDeferred)
 {
     auto requestTime = std::chrono::steady_clock::now();
     auto resetReason = std::string(reinterpret_cast<const char*>(resetMeMsg) +
@@ -115,15 +122,20 @@
     if (requestTime <= quiescentEnd)
     {
         logRequestIgnored(requestTime);
-        return;
+        return std::nullopt;
     }
 
-    this->resetSoC(resetMeMsg->resetType);
-
     quiescentEnd = std::chrono::steady_clock::now() +
                    std::chrono::seconds(resetMeMsg->resetQuiesent);
 
-    logRequestIssued(requestTime);
+    if (resetDeferred)
+    {
+        logRequestDeferred(requestTime);
+        return requestTime;
+    }
+
+    issueReset(requestTime, resetMeMsg->resetType);
+    return requestTime;
 }
 
 std::string SocResetMeHandler::requestedHostTransition(
@@ -187,5 +199,19 @@
             .count());
 }
 
+void SocResetMeHandler::logRequestDeferred(
+    const ResetTimeStamp& requestTime) const
+{
+    lg2::info(
+        "SOC_RESET_ME request from {SOC_RESET_ME_SOCID}@{SOC_RESET_ME_REQUEST_AT} deferred",
+        "SOC_RESET_ME", "deferred"sv, "SOC_RESET_ME_SOCID",
+        static_cast<int>(socId), "SOC_RESET_ME_REQUEST_AT",
+        duration_cast<std::chrono::seconds>(requestTime.time_since_epoch())
+            .count(),
+        "SOC_RESET_ME_QUIESCENT_END",
+        duration_cast<std::chrono::seconds>(quiescentEnd.time_since_epoch())
+            .count());
+}
+
 } // namespace soc_reset_me
 } // namespace pldm_oem_google
diff --git a/src/soc-reset-me.hpp b/src/soc-reset-me.hpp
index 43fca30..207593b 100644
--- a/src/soc-reset-me.hpp
+++ b/src/soc-reset-me.hpp
@@ -76,19 +76,31 @@
 
 const ResetDBusParams* cn1DbusParams();
 const ResetDBusParams* cn2DbusParams();
+
+using ResetTimeStamp = std::chrono::time_point<std::chrono::steady_clock>;
 class SocResetMeHandler
 {
   public:
     SocResetMeHandler(SocId id, sdbusplus::bus_t&& b);
     ~SocResetMeHandler() = default;
-    virtual void
+
+    virtual std::optional<ResetTimeStamp>
         handle(uint8_t requesterTid,
                const struct pldm_event_oem_google_soc_reset_me* resetMeMsg,
-               size_t resetMeMsgLen);
+               size_t resetMeMsgLen)
+    {
+        return handleDeferable(requesterTid, resetMeMsg, resetMeMsgLen, false);
+    };
+    virtual std::optional<ResetTimeStamp> handleDeferable(
+        uint8_t requesterTid,
+        const struct pldm_event_oem_google_soc_reset_me* resetMeMsg,
+        size_t resetMeMsgLen, bool resetDeferred);
+
+    virtual void issueReset(const ResetTimeStamp& requestTime,
+                            uint16_t resetType);
 
   protected:
     friend class SocResetMeHandlerTest;
-    using ResetTimeStamp = std::chrono::time_point<std::chrono::steady_clock>;
     virtual void resetSoC(uint16_t resetType);
     virtual std::string requestedHostTransition(uint16_t resetType);
     virtual void logRequest(uint64_t internalInfo, uint16_t resetType,
@@ -96,6 +108,7 @@
                             const std::string& resetReason) const;
     virtual void logRequestIgnored(const ResetTimeStamp& requestTime) const;
     virtual void logRequestIssued(const ResetTimeStamp& requestTime) const;
+    virtual void logRequestDeferred(const ResetTimeStamp& requestTime) const;
 
     const SocId socId;
     const ResetDBusParams* dbusParams;
