diff --git a/extensions/openpower-pels/extended_user_data.cpp b/extensions/openpower-pels/extended_user_data.cpp
index 97ba86b..e685b13 100644
--- a/extensions/openpower-pels/extended_user_data.cpp
+++ b/extensions/openpower-pels/extended_user_data.cpp
@@ -110,10 +110,9 @@
 bool ExtendedUserData::shrink(size_t newSize)
 {
     // minimum size is 8B header + 4B of fields + 4B of data
-    if ((newSize < flattenedSize()) &&
-        (newSize >= (Section::flattenedSize() + 8)))
+    if ((newSize < flattenedSize()) && (newSize >= (Section::headerSize() + 8)))
     {
-        auto dataSize = newSize - Section::flattenedSize() - 4;
+        auto dataSize = newSize - Section::headerSize() - 4;
 
         // Ensure it's 4B aligned
         _data.resize((dataSize / 4) * 4);
diff --git a/extensions/openpower-pels/extended_user_data.hpp b/extensions/openpower-pels/extended_user_data.hpp
index 8822e7b..b2803e2 100644
--- a/extensions/openpower-pels/extended_user_data.hpp
+++ b/extensions/openpower-pels/extended_user_data.hpp
@@ -68,7 +68,7 @@
      */
     size_t flattenedSize()
     {
-        return Section::flattenedSize() + sizeof(_creatorID) +
+        return Section::headerSize() + sizeof(_creatorID) +
                sizeof(_reserved1B) + sizeof(_reserved2B) + _data.size();
     }
 
@@ -124,7 +124,7 @@
             {
                 // Use shrink to handle 4B alignment and update the header size
                 auto status =
-                    shrink(Section::flattenedSize() + 4 + newData.size());
+                    shrink(Section::headerSize() + 4 + newData.size());
                 if (status)
                 {
                     origDataSize = _data.size();
diff --git a/extensions/openpower-pels/extended_user_header.hpp b/extensions/openpower-pels/extended_user_header.hpp
index e964bd4..e30d771 100644
--- a/extensions/openpower-pels/extended_user_header.hpp
+++ b/extensions/openpower-pels/extended_user_header.hpp
@@ -70,7 +70,7 @@
      */
     size_t flattenedSize()
     {
-        return Section::flattenedSize() + _mtms.flattenedSize() +
+        return Section::headerSize() + _mtms.flattenedSize() +
                _serverFWVersion.size() + _subsystemFWVersion.size() +
                sizeof(_reserved4B) + sizeof(_refTime) + sizeof(_reserved1B1) +
                sizeof(_reserved1B2) + sizeof(_reserved1B3) +
diff --git a/extensions/openpower-pels/failing_mtms.hpp b/extensions/openpower-pels/failing_mtms.hpp
index 7f728c3..4206b6a 100644
--- a/extensions/openpower-pels/failing_mtms.hpp
+++ b/extensions/openpower-pels/failing_mtms.hpp
@@ -58,7 +58,7 @@
      */
     static constexpr size_t flattenedSize()
     {
-        return Section::flattenedSize() + MTMS::flattenedSize();
+        return Section::headerSize() + MTMS::flattenedSize();
     }
 
     /**
diff --git a/extensions/openpower-pels/generic.hpp b/extensions/openpower-pels/generic.hpp
index a03b233..977fd51 100644
--- a/extensions/openpower-pels/generic.hpp
+++ b/extensions/openpower-pels/generic.hpp
@@ -49,7 +49,7 @@
      */
     size_t flattenedSize()
     {
-        return Section::flattenedSize() + _data.size();
+        return Section::headerSize() + _data.size();
     }
 
     /**
diff --git a/extensions/openpower-pels/private_header.hpp b/extensions/openpower-pels/private_header.hpp
index dbdaca6..6ba505f 100644
--- a/extensions/openpower-pels/private_header.hpp
+++ b/extensions/openpower-pels/private_header.hpp
@@ -212,7 +212,7 @@
      */
     static constexpr size_t flattenedSize()
     {
-        return Section::flattenedSize() + sizeof(_createTimestamp) +
+        return Section::headerSize() + sizeof(_createTimestamp) +
                sizeof(_commitTimestamp) + sizeof(_creatorID) +
                sizeof(_logType) + sizeof(_reservedByte) +
                sizeof(_sectionCount) + sizeof(_obmcLogID) +
diff --git a/extensions/openpower-pels/section.hpp b/extensions/openpower-pels/section.hpp
index 4c48bbf..ab0ad59 100644
--- a/extensions/openpower-pels/section.hpp
+++ b/extensions/openpower-pels/section.hpp
@@ -125,7 +125,7 @@
     /**
      * @brief Returns the flattened size of the section header
      */
-    static constexpr size_t flattenedSize()
+    static constexpr size_t headerSize()
     {
         return SectionHeader::flattenedSize();
     }
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index 43bf205..919c411 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -379,7 +379,7 @@
 
     _size = baseSRCSize;
     _size += _callouts ? _callouts->flattenedSize() : 0;
-    _header.size = Section::flattenedSize() + _size;
+    _header.size = Section::headerSize() + _size;
 
     _valid = true;
 }
diff --git a/extensions/openpower-pels/user_data.cpp b/extensions/openpower-pels/user_data.cpp
index 72b216c..b2ebd3c 100644
--- a/extensions/openpower-pels/user_data.cpp
+++ b/extensions/openpower-pels/user_data.cpp
@@ -70,7 +70,7 @@
                    const std::vector<uint8_t>& data)
 {
     _header.id = static_cast<uint16_t>(SectionID::userData);
-    _header.size = Section::flattenedSize() + data.size();
+    _header.size = Section::headerSize() + data.size();
     _header.version = version;
     _header.subType = subType;
     _header.componentID = componentID;
@@ -108,14 +108,13 @@
 bool UserData::shrink(size_t newSize)
 {
     // minimum size is 4 bytes plus the 8B header
-    if ((newSize < flattenedSize()) &&
-        (newSize >= (Section::flattenedSize() + 4)))
+    if ((newSize < flattenedSize()) && (newSize >= (Section::headerSize() + 4)))
     {
-        auto dataSize = newSize - Section::flattenedSize();
+        auto dataSize = newSize - Section::headerSize();
 
         // Ensure it's 4B aligned
         _data.resize((dataSize / 4) * 4);
-        _header.size = Section::flattenedSize() + _data.size();
+        _header.size = Section::headerSize() + _data.size();
         return true;
     }
 
diff --git a/extensions/openpower-pels/user_data.hpp b/extensions/openpower-pels/user_data.hpp
index 142a502..22340db 100644
--- a/extensions/openpower-pels/user_data.hpp
+++ b/extensions/openpower-pels/user_data.hpp
@@ -67,7 +67,7 @@
      */
     size_t flattenedSize()
     {
-        return Section::flattenedSize() + _data.size();
+        return Section::headerSize() + _data.size();
     }
 
     /**
diff --git a/extensions/openpower-pels/user_header.hpp b/extensions/openpower-pels/user_header.hpp
index d212831..b338f1b 100644
--- a/extensions/openpower-pels/user_header.hpp
+++ b/extensions/openpower-pels/user_header.hpp
@@ -211,7 +211,7 @@
      */
     static constexpr size_t flattenedSize()
     {
-        return Section::flattenedSize() + sizeof(_eventSubsystem) +
+        return Section::headerSize() + sizeof(_eventSubsystem) +
                sizeof(_eventScope) + sizeof(_eventSeverity) +
                sizeof(_eventType) + sizeof(_reserved4Byte1) +
                sizeof(_problemDomain) + sizeof(_problemVector) +
