diff --git a/libpldmresponder/base.cpp b/libpldmresponder/base.cpp
index 7195b80..dcb6fd6 100644
--- a/libpldmresponder/base.cpp
+++ b/libpldmresponder/base.cpp
@@ -232,6 +232,12 @@
         std::cerr << "Failed to send the setEventReceiver request"
                   << "\n";
     }
+
+    if (oemPlatformHandler)
+    {
+        oemPlatformHandler->countSetEventReceiver();
+        oemPlatformHandler->checkAndDisableWatchDog();
+    }
 }
 
 Response Handler::getTID(const pldm_msg* request, size_t /*payloadLength*/)
diff --git a/libpldmresponder/oem_handler.hpp b/libpldmresponder/oem_handler.hpp
index a0f8586..3d6c768 100644
--- a/libpldmresponder/oem_handler.hpp
+++ b/libpldmresponder/oem_handler.hpp
@@ -68,6 +68,11 @@
      */
     virtual void buildOEMPDR(pdr_utils::Repo& repo) = 0;
 
+    /** @brief Interface to check if setEventReceiver is sent to host already.
+     *         If sent then then disableWatchDogTimer() would be called to
+     *         disable the watchdog timer */
+    virtual void checkAndDisableWatchDog() = 0;
+
     /** @brief Interface to check if the watchdog timer is running
      *
      * @return - true if watchdog is running, false otherwise
@@ -77,6 +82,13 @@
     /** @brief Interface to reset the watchdog timer */
     virtual void resetWatchDogTimer() = 0;
 
+    /** @brief Interface to disable the watchdog timer */
+    virtual void disableWatchDogTimer() = 0;
+
+    /** @brief Interface to keep track of how many times setEventReceiver
+     *         is sent to host */
+    virtual void countSetEventReceiver() = 0;
+
     virtual ~Handler() = default;
 
   protected:
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index b3b1961..4a0c8c6 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -492,6 +492,16 @@
         });
 }
 
+void pldm::responder::oem_ibm_platform::Handler::checkAndDisableWatchDog()
+{
+    if (!hostOff && setEventReceiverCnt == SET_EVENT_RECEIVER_SENT)
+    {
+        disableWatchDogTimer();
+    }
+
+    return;
+}
+
 bool pldm::responder::oem_ibm_platform::Handler::watchDogRunning()
 {
     static constexpr auto watchDogObjectPath =
@@ -542,6 +552,29 @@
         return;
     }
 }
+
+void pldm::responder::oem_ibm_platform::Handler::disableWatchDogTimer()
+{
+    setEventReceiverCnt = 0;
+    pldm::utils::DBusMapping dbusMapping{"/xyz/openbmc_project/watchdog/host0",
+                                         "xyz.openbmc_project.State.Watchdog",
+                                         "Enabled", "bool"};
+    bool wdStatus = watchDogRunning();
+
+    if (!wdStatus)
+    {
+        return;
+    }
+    try
+    {
+        pldm::utils::DBusHandler().setDbusProperty(dbusMapping, false);
+    }
+    catch (const std::exception& e)
+    {
+        std::cerr << "Failed To disable watchdog timer"
+                  << "ERROR=" << e.what() << "\n";
+    }
+}
 } // namespace oem_ibm_platform
 } // namespace responder
 } // namespace pldm
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
index db89acf..84ea2a6 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
@@ -47,6 +47,11 @@
     POWER_CYCLE_HARD = 0x1,
 };
 
+enum SetEventReceiverCount
+{
+    SET_EVENT_RECEIVER_SENT = 0x2,
+};
+
 class Handler : public oem_platform::Handler
 {
   public:
@@ -60,6 +65,36 @@
         mctp_eid(mctp_eid), requester(requester), event(event), handler(handler)
     {
         codeUpdate->setVersions();
+        setEventReceiverCnt = 0;
+
+        using namespace sdbusplus::bus::match::rules;
+        hostOffMatch = std::make_unique<sdbusplus::bus::match::match>(
+            pldm::utils::DBusHandler::getBus(),
+            propertiesChanged("/xyz/openbmc_project/state/host0",
+                              "xyz.openbmc_project.State.Host"),
+            [this](sdbusplus::message::message& msg) {
+                pldm::utils::DbusChangedProps props{};
+                std::string intf;
+                msg.read(intf, props);
+                const auto itr = props.find("CurrentHostState");
+                if (itr != props.end())
+                {
+                    pldm::utils::PropertyValue value = itr->second;
+                    auto propVal = std::get<std::string>(value);
+                    if (propVal ==
+                        "xyz.openbmc_project.State.Host.HostState.Off")
+                    {
+                        hostOff = true;
+                        setEventReceiverCnt = 0;
+                        disableWatchDogTimer();
+                    }
+                    else if (propVal ==
+                             "xyz.openbmc_project.State.Host.HostState.Running")
+                    {
+                        hostOff = false;
+                    }
+                }
+            });
     }
 
     int getOemStateSensorReadingsHandler(
@@ -146,6 +181,15 @@
      */
     void _processSystemReboot(sdeventplus::source::EventBase& source);
 
+    /*keeps track how many times setEventReceiver is sent */
+    void countSetEventReceiver()
+    {
+        setEventReceiverCnt++;
+    }
+
+    /* disables watchdog if running and Host is up */
+    void checkAndDisableWatchDog();
+
     /** @brief To check if the watchdog app is running
      *
      *  @return the running status of watchdog app
@@ -157,6 +201,9 @@
      */
     void resetWatchDogTimer();
 
+    /** @brief To disable to the watchdog timer on host poweron completion*/
+    void disableWatchDogTimer();
+
     ~Handler() = default;
 
     pldm::responder::CodeUpdate* codeUpdate; //!< pointer to CodeUpdate object
@@ -189,6 +236,13 @@
 
     /** @brief PLDM request handler */
     pldm::requester::Handler<pldm::requester::Request>* handler;
+
+    /** @brief D-Bus property changed signal match */
+    std::unique_ptr<sdbusplus::bus::match::match> hostOffMatch;
+
+    bool hostOff = true;
+
+    int setEventReceiverCnt = 0;
 };
 
 /** @brief Method to encode code update event msg
