diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index 48dff51..a3314cd 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -493,6 +493,47 @@
     return calloutPresent;
 }
 
+void PEL::updateSysInfoInExtendedUserDataSection(
+    const DataInterfaceBase& dataIface)
+{
+    const AdditionalData additionalData;
+
+    // Check for PEL from Hostboot
+    if (_ph->creatorID() == static_cast<uint8_t>(CreatorID::hostboot))
+    {
+        // Get the ED section from PEL
+        auto op = std::find_if(_optionalSections.begin(),
+                               _optionalSections.end(), [](auto& section) {
+                                   return section->header().id ==
+                                          static_cast<uint16_t>(
+                                              SectionID::extUserData);
+                               });
+
+        // Check for ED section found and its not the last section of PEL
+        if (op != _optionalSections.end())
+        {
+            // Get the extended user data class mapped to found section
+            auto extUserData = static_cast<ExtendedUserData*>(op->get());
+
+            // Check for the creator ID is for OpenBMC
+            if (extUserData->creatorID() ==
+                static_cast<uint8_t>(CreatorID::openBMC))
+            {
+                // Update subtype and component id
+                auto subType = static_cast<uint8_t>(UserDataFormat::json);
+                auto componentId =
+                    static_cast<uint16_t>(ComponentID::phosphorLogging);
+
+                // Update system data to ED section
+                auto ud =
+                    util::makeSysInfoUserDataSection(additionalData, dataIface);
+                extUserData->updateDataSection(subType, componentId,
+                                               ud->data());
+            }
+        }
+    }
+}
+
 namespace util
 {
 
@@ -554,7 +595,10 @@
     {
     }
 
-    json["Process Name"] = std::move(name);
+    if (pid)
+    {
+        json["Process Name"] = std::move(name);
+    }
 }
 
 void addBMCFWVersionIDToJSON(nlohmann::json& json,
