diff --git a/extensions/openpower-pels/manager.cpp b/extensions/openpower-pels/manager.cpp
index 1be0848..0a23e42 100644
--- a/extensions/openpower-pels/manager.cpp
+++ b/extensions/openpower-pels/manager.cpp
@@ -1094,7 +1094,26 @@
         if ((attributes.creator == static_cast<uint8_t>(CreatorID::openBMC)) &&
             attributes.deconfig)
         {
-            _repo.updatePEL(attributes.path, handlePowerThermalHardwarePresent);
+            auto updated = _repo.updatePEL(attributes.path,
+                                           handlePowerThermalHardwarePresent);
+
+            if (updated)
+            {
+                // Also update the property on D-Bus
+                auto objPath = std::string(OBJ_ENTRY) + '/' +
+                               std::to_string(id.obmcID.id);
+                auto entryN = _pelEntries.find(objPath);
+                if (entryN != _pelEntries.end())
+                {
+                    entryN->second->deconfig(false);
+                }
+                else
+                {
+                    lg2::error(
+                        "Could not find PEL Entry D-Bus object for {PATH}",
+                        "PATH", objPath);
+                }
+            }
         }
     }
 }
diff --git a/extensions/openpower-pels/repository.cpp b/extensions/openpower-pels/repository.cpp
index bc5249d..1860154 100644
--- a/extensions/openpower-pels/repository.cpp
+++ b/extensions/openpower-pels/repository.cpp
@@ -449,7 +449,7 @@
     }
 }
 
-void Repository::updatePEL(const fs::path& path, PELUpdateFunc updateFunc)
+bool Repository::updatePEL(const fs::path& path, PELUpdateFunc updateFunc)
 {
     std::ifstream file{path};
     std::vector<uint8_t> data{std::istreambuf_iterator<char>(file),
@@ -481,6 +481,7 @@
             }
 
             write(pel, path);
+            return true;
         }
     }
     else
@@ -488,6 +489,7 @@
         throw std::runtime_error(
             "Unable to read a valid PEL when trying to update it");
     }
+    return false;
 }
 
 bool Repository::isServiceableSev(const PELAttributes& pel)
diff --git a/extensions/openpower-pels/repository.hpp b/extensions/openpower-pels/repository.hpp
index 7bb7a11..f64efb4 100644
--- a/extensions/openpower-pels/repository.hpp
+++ b/extensions/openpower-pels/repository.hpp
@@ -465,8 +465,10 @@
      *
      * @param[in] path - The file path to use
      * @param[in] updateFunc - The function to run to update the PEL.
+     *
+     * @return bool - If the PEL was updated or not.
      */
-    void updatePEL(const std::filesystem::path& path, PELUpdateFunc updateFunc);
+    bool updatePEL(const std::filesystem::path& path, PELUpdateFunc updateFunc);
 
   private:
     /**
