diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index 3000864..1eac869 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -58,7 +58,7 @@
     Stream pelData{pelBuffer};
     if (_ph->valid())
     {
-        pelData << *_ph;
+        _ph->flatten(pelData);
     }
     else
     {
@@ -67,7 +67,7 @@
 
     if (_uh->valid())
     {
-        pelData << *_uh;
+        _uh->flatten(pelData);
     }
 }
 
diff --git a/extensions/openpower-pels/private_header.cpp b/extensions/openpower-pels/private_header.cpp
index 7611a75..d4c3dee 100644
--- a/extensions/openpower-pels/private_header.cpp
+++ b/extensions/openpower-pels/private_header.cpp
@@ -13,7 +13,7 @@
 {
     try
     {
-        pel >> *this;
+        unflatten(pel);
         validate();
     }
     catch (const std::exception& e)
@@ -52,20 +52,18 @@
     _valid = (failed) ? false : true;
 }
 
-Stream& operator>>(Stream& s, PrivateHeader& ph)
+void PrivateHeader::unflatten(Stream& stream)
 {
-    s >> ph._header >> ph._createTimestamp >> ph._commitTimestamp >>
-        ph._creatorID >> ph._logType >> ph._reservedByte >> ph._sectionCount >>
-        ph._obmcLogID >> ph._creatorVersion >> ph._plid >> ph._id;
-    return s;
+    stream >> _header >> _createTimestamp >> _commitTimestamp >> _creatorID >>
+        _logType >> _reservedByte >> _sectionCount >> _obmcLogID >>
+        _creatorVersion >> _plid >> _id;
 }
 
-Stream& operator<<(Stream& s, PrivateHeader& ph)
+void PrivateHeader::flatten(Stream& stream)
 {
-    s << ph._header << ph._createTimestamp << ph._commitTimestamp
-      << ph._creatorID << ph._logType << ph._reservedByte << ph._sectionCount
-      << ph._obmcLogID << ph._creatorVersion << ph._plid << ph._id;
-    return s;
+    stream << _header << _createTimestamp << _commitTimestamp << _creatorID
+           << _logType << _reservedByte << _sectionCount << _obmcLogID
+           << _creatorVersion << _plid << _id;
 }
 
 Stream& operator>>(Stream& s, CreatorVersion& cv)
diff --git a/extensions/openpower-pels/private_header.hpp b/extensions/openpower-pels/private_header.hpp
index d9353ab..4a8b330 100644
--- a/extensions/openpower-pels/private_header.hpp
+++ b/extensions/openpower-pels/private_header.hpp
@@ -51,6 +51,13 @@
     explicit PrivateHeader(Stream& pel);
 
     /**
+     * @brief Flatten the section into the stream
+     *
+     * @param[in] stream - The stream to write to
+     */
+    void flatten(Stream& stream) override;
+
+    /**
      * @brief Returns the creation timestamp
      *
      * @return BCDTime& - the timestamp
@@ -157,11 +164,15 @@
                sizeof(_creatorVersion) + sizeof(_plid) + sizeof(_id);
     }
 
-    friend Stream& operator>>(Stream& s, PrivateHeader& ph);
-    friend Stream& operator<<(Stream& s, PrivateHeader& ph);
-
   private:
     /**
+     * @brief Fills in the object from the stream data
+     *
+     * @param[in] stream - The stream to read from
+     */
+    void unflatten(Stream& stream);
+
+    /**
      * @brief Validates the section contents
      *
      * Updates _valid (in Section) with the results.
@@ -221,22 +232,6 @@
 };
 
 /**
- * @brief Stream extraction operator for the PrivateHeader
- *
- * @param[in] s - the stream
- * @param[out] ph - the PrivateHeader object
- */
-Stream& operator>>(Stream& s, PrivateHeader& ph);
-
-/**
- * @brief Stream insertion operator for the PrivateHeader
- *
- * @param[out] s - the stream
- * @param[in] ph - the PrivateHeader object
- */
-Stream& operator<<(Stream& s, PrivateHeader& ph);
-
-/**
  * @brief Stream extraction operator for the CreatorVersion
  *
  * @param[in] s - the stream
diff --git a/extensions/openpower-pels/section.hpp b/extensions/openpower-pels/section.hpp
index 7214e17..d0f88e1 100644
--- a/extensions/openpower-pels/section.hpp
+++ b/extensions/openpower-pels/section.hpp
@@ -39,6 +39,13 @@
         return _valid;
     }
 
+    /**
+     * @brief Flatten the section into the stream
+     *
+     * @param[in] stream - The stream to write to
+     */
+    virtual void flatten(Stream& stream) = 0;
+
   protected:
     /**
      * @brief Returns the flattened size of the section header
diff --git a/extensions/openpower-pels/user_header.cpp b/extensions/openpower-pels/user_header.cpp
index 16d6212..117ade1 100644
--- a/extensions/openpower-pels/user_header.cpp
+++ b/extensions/openpower-pels/user_header.cpp
@@ -9,28 +9,25 @@
 
 using namespace phosphor::logging;
 
-Stream& operator>>(Stream& s, UserHeader& uh)
+void UserHeader::unflatten(Stream& stream)
 {
-    s >> uh._header >> uh._eventSubsystem >> uh._eventScope >>
-        uh._eventSeverity >> uh._eventType >> uh._reserved4Byte1 >>
-        uh._problemDomain >> uh._problemVector >> uh._actionFlags >>
-        uh._reserved4Byte2;
-    return s;
+    stream >> _header >> _eventSubsystem >> _eventScope >> _eventSeverity >>
+        _eventType >> _reserved4Byte1 >> _problemDomain >> _problemVector >>
+        _actionFlags >> _reserved4Byte2;
 }
 
-Stream& operator<<(Stream& s, UserHeader& uh)
+void UserHeader::flatten(Stream& stream)
 {
-    s << uh._header << uh._eventSubsystem << uh._eventScope << uh._eventSeverity
-      << uh._eventType << uh._reserved4Byte1 << uh._problemDomain
-      << uh._problemVector << uh._actionFlags << uh._reserved4Byte2;
-    return s;
+    stream << _header << _eventSubsystem << _eventScope << _eventSeverity
+           << _eventType << _reserved4Byte1 << _problemDomain << _problemVector
+           << _actionFlags << _reserved4Byte2;
 }
 
 UserHeader::UserHeader(Stream& pel)
 {
     try
     {
-        pel >> *this;
+        unflatten(pel);
         validate();
     }
     catch (const std::exception& e)
diff --git a/extensions/openpower-pels/user_header.hpp b/extensions/openpower-pels/user_header.hpp
index d2c6ffc..ae7a922 100644
--- a/extensions/openpower-pels/user_header.hpp
+++ b/extensions/openpower-pels/user_header.hpp
@@ -43,6 +43,13 @@
     explicit UserHeader(Stream& pel);
 
     /**
+     * @brief Flatten the section into the stream
+     *
+     * @param[in] stream - The stream to write to
+     */
+    void flatten(Stream& stream) override;
+
+    /**
      * @brief Returns the subsystem field.
      *
      * @return uint8_t& - the subsystem
@@ -126,11 +133,15 @@
                sizeof(_actionFlags) + sizeof(_reserved4Byte2);
     }
 
-    friend Stream& operator>>(Stream& s, UserHeader& ph);
-    friend Stream& operator<<(Stream& s, UserHeader& ph);
-
   private:
     /**
+     * @brief Fills in the object from the stream data
+     *
+     * @param[in] stream - The stream to read from
+     */
+    void unflatten(Stream& stream);
+
+    /**
      * @brief Validates the section contents
      *
      * Updates _valid (in Section) with the results.
@@ -183,21 +194,5 @@
     uint32_t _reserved4Byte2;
 };
 
-/**
- * @brief Stream extraction operator for the UserHeader
- *
- * @param[in] s - the stream
- * @param[out] uh - the UserHeader object
- */
-Stream& operator>>(Stream& s, UserHeader& uh);
-
-/**
- * @brief Stream insertion operator for the UserHeader
- *
- * @param[out] s - the stream
- * @param[in] uh - the UserHeader object
- */
-Stream& operator<<(Stream& s, UserHeader& uh);
-
 } // namespace pels
 } // namespace openpower
