diff --git a/extensions/openpower-pels/extended_user_header.cpp b/extensions/openpower-pels/extended_user_header.cpp
index c5c1938..282bb41 100644
--- a/extensions/openpower-pels/extended_user_header.cpp
+++ b/extensions/openpower-pels/extended_user_header.cpp
@@ -15,6 +15,7 @@
  */
 #include "extended_user_header.hpp"
 
+#include "json_utils.hpp"
 #include "pel_types.hpp"
 
 #include <phosphor-logging/log.hpp>
@@ -175,5 +176,35 @@
     _symptomIDSize = _symptomID.size();
 }
 
+std::optional<std::string> ExtendedUserHeader::getJSON() const
+{
+    std::string json;
+    jsonInsert(json, "Section Version", getNumberString("%d", _header.version),
+               1);
+    jsonInsert(json, "Sub-section type", getNumberString("%d", _header.subType),
+               1);
+    jsonInsert(json, "Created by", getNumberString("0x%X", _header.componentID),
+               1);
+    jsonInsert(json, "Reporting Machine Type", machineTypeModel(), 1);
+    jsonInsert(json, "Reporting Serial Number", trimEnd(machineSerialNumber()),
+               1);
+    jsonInsert(json, "FW Released Ver", serverFWVersion(), 1);
+    jsonInsert(json, "FW SubSys Version", subsystemFWVersion(), 1);
+    jsonInsert(json, "Common Ref Time",
+               getNumberString("%02X", _refTime.month) + '/' +
+                   getNumberString("%02X", _refTime.day) + '/' +
+                   getNumberString("%02X", _refTime.yearMSB) +
+                   getNumberString("%02X", _refTime.yearLSB) + ' ' +
+                   getNumberString("%02X", _refTime.hour) + ':' +
+                   getNumberString("%02X", _refTime.minutes) + ':' +
+                   getNumberString("%02X", _refTime.seconds),
+               1);
+    jsonInsert(json, "Symptom Id Len", getNumberString("%d", _symptomIDSize),
+               1);
+    jsonInsert(json, "Symptom Id", symptomID(), 1);
+    json.erase(json.size() - 2);
+    return json;
+}
+
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/extended_user_header.hpp b/extensions/openpower-pels/extended_user_header.hpp
index 422b3f5..b5a447d 100644
--- a/extensions/openpower-pels/extended_user_header.hpp
+++ b/extensions/openpower-pels/extended_user_header.hpp
@@ -155,6 +155,12 @@
         return symptom;
     }
 
+    /**
+     * @brief Get section in JSON.
+     * @return std::optional<std::string> - ExtendedUserHeader section's JSON
+     */
+    std::optional<std::string> getJSON() const override;
+
   private:
     /**
      * @brief Fills in the object from the stream data
diff --git a/extensions/openpower-pels/private_header.cpp b/extensions/openpower-pels/private_header.cpp
index 1bf54ca..a0424d8 100644
--- a/extensions/openpower-pels/private_header.cpp
+++ b/extensions/openpower-pels/private_header.cpp
@@ -85,13 +85,13 @@
 std::optional<std::string> PrivateHeader::getJSON() const
 {
     char tmpPhVal[50];
-    sprintf(tmpPhVal, "%02X/%02X/%02X%02X  %02X:%02X:%02X",
+    sprintf(tmpPhVal, "%02X/%02X/%02X%02X %02X:%02X:%02X",
             _createTimestamp.month, _createTimestamp.day,
             _createTimestamp.yearMSB, _createTimestamp.yearLSB,
             _createTimestamp.hour, _createTimestamp.minutes,
             _createTimestamp.seconds);
     std::string phCreateTStr(tmpPhVal);
-    sprintf(tmpPhVal, "%02X/%02X/%02X%02X  %02X:%02X:%02X",
+    sprintf(tmpPhVal, "%02X/%02X/%02X%02X %02X:%02X:%02X",
             _commitTimestamp.month, _commitTimestamp.day,
             _createTimestamp.yearMSB, _commitTimestamp.yearLSB,
             _commitTimestamp.hour, _commitTimestamp.minutes,
diff --git a/extensions/openpower-pels/tools/peltool.cpp b/extensions/openpower-pels/tools/peltool.cpp
index ed6daa2..ef59cd7 100644
--- a/extensions/openpower-pels/tools/peltool.cpp
+++ b/extensions/openpower-pels/tools/peltool.cpp
@@ -244,7 +244,7 @@
                     pel.userHeader().subsystem(), pel_values::subsystemValues);
                 listStr += "\t\t\"Subsystem\": \"" + subsystem + "\",\n";
                 // commit time
-                sprintf(tmpValStr, "%02X/%02X/%02X%02X  %02X:%02X:%02X",
+                sprintf(tmpValStr, "%02X/%02X/%02X%02X %02X:%02X:%02X",
                         pel.privateHeader().commitTimestamp().month,
                         pel.privateHeader().commitTimestamp().day,
                         pel.privateHeader().commitTimestamp().yearMSB,
