diff --git a/host-bmc/host_pdr_handler.cpp b/host-bmc/host_pdr_handler.cpp
index 61b4ccb..079c6dc 100644
--- a/host-bmc/host_pdr_handler.cpp
+++ b/host-bmc/host_pdr_handler.cpp
@@ -125,6 +125,22 @@
                     this->sensorMap.clear();
                     this->responseReceived = false;
                     this->mergedHostParents = false;
+
+                    // After a power off , the remote nodes will be deleted
+                    // from the entity association tree, making the nodes point
+                    // to junk values, so set them to nullptr
+                    for (const auto& element : this->objPathMap)
+                    {
+                        this->objPathMap[element.first] = nullptr;
+                    }
+                }
+                else if (propVal ==
+                         "xyz.openbmc_project.State.Host.HostState.Running")
+                {
+                    if (oemPlatformHandler)
+                    {
+                        oemPlatformHandler->handleBootTypesAtPowerOn();
+                    }
                 }
             }
         });
diff --git a/libpldmresponder/oem_handler.hpp b/libpldmresponder/oem_handler.hpp
index 8215b37..d8ca132 100644
--- a/libpldmresponder/oem_handler.hpp
+++ b/libpldmresponder/oem_handler.hpp
@@ -124,6 +124,12 @@
      * */
     virtual void setSurvTimer(uint8_t tid, bool value) = 0;
 
+    /** @brief To handle the boot types bios attributes at power on*/
+    virtual void handleBootTypesAtPowerOn() = 0;
+
+    /** @brief To handle the boot types bios attributes at shutdown*/
+    virtual void handleBootTypesAtChassisOff() = 0;
+
     virtual ~Handler() = default;
 
   protected:
diff --git a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
index 567d14f..86fc0d8 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.cpp
@@ -11,6 +11,7 @@
 
 #include <phosphor-logging/lg2.hpp>
 #include <xyz/openbmc_project/State/BMC/client.hpp>
+#include <xyz/openbmc_project/State/Host/common.hpp>
 
 PHOSPHOR_LOG2_USING;
 
@@ -864,6 +865,88 @@
     }
 }
 
+void pldm::responder::oem_ibm_platform::Handler::handleBootTypesAtPowerOn()
+{
+    PendingAttributesList biosAttrList;
+    auto bootInitiator =
+        getBiosAttrValue<std::string>("pvm_boot_initiator_current")
+            .value_or("");
+    std::string restartCause;
+    if (((bootInitiator != "HMC") || (bootInitiator != "Host")) &&
+        !bootInitiator.empty())
+    {
+        try
+        {
+            restartCause =
+                pldm::utils::DBusHandler().getDbusProperty<std::string>(
+                    "/xyz/openbmc_project/state/host0", "RestartCause",
+                    sdbusplus::common::xyz::openbmc_project::state::Host::
+                        interface);
+            setBootTypesBiosAttr(restartCause);
+        }
+        catch (const std::exception& e)
+        {
+            error(
+                "Failed to set the D-bus property for the Host restart reason ERROR={ERR}",
+                "ERR", e);
+        }
+    }
+}
+
+void pldm::responder::oem_ibm_platform::Handler::setBootTypesBiosAttr(
+    const std::string& restartCause)
+{
+    PendingAttributesList biosAttrList;
+    if (restartCause ==
+        "xyz.openbmc_project.State.Host.RestartCause.ScheduledPowerOn")
+    {
+        biosAttrList.emplace_back(std::make_pair(
+            "pvm_boot_initiator", std::make_tuple(EnumAttribute, "Host")));
+        setBiosAttr(biosAttrList);
+    }
+    else if (
+        (restartCause ==
+         "xyz.openbmc_project.State.Host.RestartCause.PowerPolicyAlwaysOn") ||
+        (restartCause ==
+         "xyz.openbmc_project.State.Host.RestartCause.PowerPolicyPreviousState"))
+    {
+        biosAttrList.emplace_back(std::make_pair(
+            "pvm_boot_initiator", std::make_tuple(EnumAttribute, "Auto")));
+        setBiosAttr(biosAttrList);
+    }
+    else if (restartCause ==
+             "xyz.openbmc_project.State.Host.RestartCause.HostCrash")
+    {
+        biosAttrList.emplace_back(std::make_pair(
+            "pvm_boot_initiator", std::make_tuple(EnumAttribute, "Auto")));
+        biosAttrList.emplace_back(std::make_pair(
+            "pvm_boot_type", std::make_tuple(EnumAttribute, "ReIPL")));
+        setBiosAttr(biosAttrList);
+    }
+}
+
+void pldm::responder::oem_ibm_platform::Handler::handleBootTypesAtChassisOff()
+{
+    PendingAttributesList biosAttrList;
+    auto bootInitiator =
+        getBiosAttrValue<std::string>("pvm_boot_initiator").value_or("");
+    auto bootType = getBiosAttrValue<std::string>("pvm_boot_type").value_or("");
+    if (bootInitiator.empty() || bootType.empty())
+    {
+        error(
+            "ERROR in fetching the pvm_boot_initiator and pvm_boot_type BIOS attribute values");
+        return;
+    }
+    else if (bootInitiator != "Host")
+    {
+        biosAttrList.emplace_back(std::make_pair(
+            "pvm_boot_initiator", std::make_tuple(EnumAttribute, "User")));
+        biosAttrList.emplace_back(std::make_pair(
+            "pvm_boot_type", std::make_tuple(EnumAttribute, "IPL")));
+        setBiosAttr(biosAttrList);
+    }
+}
+
 } // 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 895c9f2..52769ab 100644
--- a/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
+++ b/oem/ibm/libpldmresponder/oem_ibm_handler.hpp
@@ -122,7 +122,7 @@
             pldm::utils::DBusHandler::getBus(),
             propertiesChanged("/xyz/openbmc_project/state/chassis0",
                               "xyz.openbmc_project.State.Chassis"),
-            [](sdbusplus::message_t& msg) {
+            [this](sdbusplus::message_t& msg) {
                 pldm::utils::DbusChangedProps props{};
                 std::string intf;
                 msg.read(intf, props);
@@ -134,6 +134,7 @@
                     if (propVal ==
                         "xyz.openbmc_project.State.Chassis.PowerState.Off")
                     {
+                        handleBootTypesAtChassisOff();
                         static constexpr auto searchpath =
                             "/xyz/openbmc_project/inventory/system/chassis/motherboard";
                         int depth = 0;
@@ -363,6 +364,19 @@
      */
     void setSurvTimer(uint8_t tid, bool value);
 
+    /** @brief To handle the boot types bios attributes at power on*/
+    void handleBootTypesAtPowerOn();
+
+    /** @brief To handle the boot types bios attributes at shutdown*/
+    void handleBootTypesAtChassisOff();
+
+    /** @brief To set the boot types bios attributes based on the RestartCause
+     *  of host
+     *
+     *  @param[in] RestartCause - Host restart cause
+     */
+    void setBootTypesBiosAttr(const std::string& restartCause);
+
     ~Handler() = default;
 
     pldm::responder::CodeUpdate* codeUpdate; //!< pointer to CodeUpdate object
diff --git a/softoff/softoff.cpp b/softoff/softoff.cpp
index 9721c7e..71fa9dc 100644
--- a/softoff/softoff.cpp
+++ b/softoff/softoff.cpp
@@ -14,6 +14,7 @@
 #include <sdeventplus/exception.hpp>
 #include <sdeventplus/source/io.hpp>
 #include <sdeventplus/source/time.hpp>
+#include <xyz/openbmc_project/State/Host/common.hpp>
 
 #include <array>
 #include <filesystem>
@@ -278,13 +279,27 @@
     // TODO: fix mapping to work around OpenBMC ecosystem deficiencies
     pldm_tid_t pldmTID = static_cast<pldm_tid_t>(mctpEID);
 
+    uint8_t effecterState;
+    auto requestHostTransition =
+        pldm::utils::DBusHandler().getDbusProperty<std::string>(
+            "/xyz/openbmc_project/state/host0", "RequestedHostTransition",
+            sdbusplus::common::xyz::openbmc_project::state::Host::interface);
+    if (requestHostTransition !=
+        "xyz.openbmc_project.State.Host.Transition.Off")
+    {
+        effecterState = PLDM_SW_TERM_GRACEFUL_RESTART_REQUESTED;
+    }
+    else
+    {
+        effecterState = PLDM_SW_TERM_GRACEFUL_SHUTDOWN_REQUESTED;
+    }
+
     std::array<uint8_t,
                sizeof(pldm_msg_hdr) + sizeof(effecterID) +
                    sizeof(effecterCount) + sizeof(set_effecter_state_field)>
         requestMsg{};
     auto request = new (requestMsg.data()) pldm_msg;
-    set_effecter_state_field stateField{
-        PLDM_REQUEST_SET, PLDM_SW_TERM_GRACEFUL_SHUTDOWN_REQUESTED};
+    set_effecter_state_field stateField{PLDM_REQUEST_SET, effecterState};
     instanceID = instanceIdDb.next(pldmTID);
     auto rc = encode_set_state_effecter_states_req(
         instanceID, effecterID, effecterCount, &stateField, request);
