diff --git a/extensions/openpower-pels/json_utils.cpp b/extensions/openpower-pels/json_utils.cpp
index 871bd32..dfb6698 100644
--- a/extensions/openpower-pels/json_utils.cpp
+++ b/extensions/openpower-pels/json_utils.cpp
@@ -67,10 +67,10 @@
 
     return output;
 }
-char* dumpHex(const void* data, size_t size)
+char* dumpHex(const void* data, size_t size, size_t indentCount)
 {
     const int symbolSize = 100;
-    std::string jsonIndent(indentLevel, 0x20);
+    std::string jsonIndent(indentLevel * indentCount, 0x20);
     jsonIndent.append("\"");
     char* buffer = (char*)calloc(10 * size, sizeof(char));
     char* symbol = (char*)calloc(symbolSize, sizeof(char));
diff --git a/extensions/openpower-pels/json_utils.hpp b/extensions/openpower-pels/json_utils.hpp
index e122f47..71a85e3 100644
--- a/extensions/openpower-pels/json_utils.hpp
+++ b/extensions/openpower-pels/json_utils.hpp
@@ -24,11 +24,12 @@
 
 /**
  * @brief get hex dump for PEL section in json format.
- * @param[in] const void* - Raw PEL data
- * @param[i] size_t - size of Raw PEL
+ * @param[in] const void* data - Raw PEL data
+ * @param[i] size_t size - size of Raw PEL
+ * @param[in] size_t indentCount - The number of indent levels to indent
  * @return char * - the Hex dump
  */
-char* dumpHex(const void* data, size_t size);
+char* dumpHex(const void* data, size_t size, size_t indentCount);
 
 /**
  * @brief Inserts key-value into a JSON string
diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index 625546e..5114761 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -235,19 +235,35 @@
         auto json = (sectionID == "PS" || sectionID == "SS")
                         ? section.getJSON(registry)
                         : section.getJSON();
+
+        buf += "\"" + sectionName + "\": {\n";
+
         if (json)
         {
-            buf += "\"" + sectionName + "\": {\n";
             buf += *json + "\n},\n";
         }
         else
         {
-            buf += "\"" + sectionName + "\": [\n";
+            jsonInsert(buf, pv::sectionVer,
+                       getNumberString("%d", section.header().version), 1);
+            jsonInsert(buf, pv::subSection,
+                       getNumberString("%d", section.header().subType), 1);
+            jsonInsert(buf, pv::createdBy,
+                       getNumberString("0x%X", section.header().componentID),
+                       1);
+
             std::vector<uint8_t> data;
             Stream s{data};
             section.flatten(s);
-            std::string dstr = dumpHex(std::data(data), data.size());
-            buf += dstr + "],\n";
+            std::string dstr =
+                dumpHex(std::data(data) + SectionHeader::flattenedSize(),
+                        data.size(), 2);
+
+            std::string jsonIndent(indentLevel, 0x20);
+            buf += jsonIndent + "\"Data\": [\n";
+            buf += dstr;
+            buf += jsonIndent + "]\n";
+            buf += "},\n";
         }
     }
     else
