diff --git a/extensions/openpower-pels/repository.cpp b/extensions/openpower-pels/repository.cpp
index fa2020c..9bab95b 100644
--- a/extensions/openpower-pels/repository.cpp
+++ b/extensions/openpower-pels/repository.cpp
@@ -409,13 +409,12 @@
     {
         PELUpdateFunc func = [state](PEL& pel) {
             pel.setHostTransmissionState(state);
+            return true;
         };
 
         try
         {
             updatePEL(attr->second.path, func);
-
-            attr->second.hostState = state;
         }
         catch (const std::exception& e)
         {
@@ -436,13 +435,12 @@
     {
         PELUpdateFunc func = [state](PEL& pel) {
             pel.setHMCTransmissionState(state);
+            return true;
         };
 
         try
         {
             updatePEL(attr->second.path, func);
-
-            attr->second.hmcState = state;
         }
         catch (const std::exception& e)
         {
@@ -464,9 +462,28 @@
 
     if (pel.valid())
     {
-        updateFunc(pel);
+        if (updateFunc(pel))
+        {
+            // Three attribute fields can change post creation from
+            // an updatePEL call:
+            //  - hmcTransmissionState - When HMC acks a PEL
+            //  - hostTransmissionState - When host acks a PEL
+            //  - deconfig flag - Can be cleared for PELs that call out
+            //                    hotplugged FRUs.
+            // Make sure they're up to date.
+            LogID id{LogID::Pel(pel.id())};
+            auto attr =
+                std::find_if(_pelAttributes.begin(), _pelAttributes.end(),
+                             [&id](const auto& a) { return a.first == id; });
+            if (attr != _pelAttributes.end())
+            {
+                attr->second.hmcState = pel.hmcTransmissionState();
+                attr->second.hostState = pel.hostTransmissionState();
+                attr->second.deconfig = pel.getDeconfigFlag();
+            }
 
-        write(pel, path);
+            write(pel, path);
+        }
     }
     else
     {
diff --git a/extensions/openpower-pels/repository.hpp b/extensions/openpower-pels/repository.hpp
index 07a499d..e1c565e 100644
--- a/extensions/openpower-pels/repository.hpp
+++ b/extensions/openpower-pels/repository.hpp
@@ -445,13 +445,14 @@
     void archivePEL(const PEL& pel);
 
   private:
-    using PELUpdateFunc = std::function<void(PEL&)>;
+    using PELUpdateFunc = std::function<bool(PEL&)>;
 
     /**
      * @brief Lets a function modify a PEL and saves the results
      *
-     * Runs updateFunc (a void(PEL&) function) on the PEL data
-     * on the file specified, and writes the results back to the file.
+     * Runs updateFunc (a bool(PEL&) function) on the PEL data
+     * on the file specified, and writes the results back to the file
+     * if the function returned true.
      *
      * @param[in] path - The file path to use
      * @param[in] updateFunc - The function to run to update the PEL.
