diff --git a/extensions/openpower-pels/ascii_string.cpp b/extensions/openpower-pels/ascii_string.cpp
index 4bfc9cf..124bd0c 100644
--- a/extensions/openpower-pels/ascii_string.cpp
+++ b/extensions/openpower-pels/ascii_string.cpp
@@ -65,7 +65,7 @@
     }
 }
 
-void AsciiString::flatten(Stream& stream)
+void AsciiString::flatten(Stream& stream) const
 {
     stream.write(_string.data(), _string.size());
 }
diff --git a/extensions/openpower-pels/ascii_string.hpp b/extensions/openpower-pels/ascii_string.hpp
index d3ede0f..0970df9 100644
--- a/extensions/openpower-pels/ascii_string.hpp
+++ b/extensions/openpower-pels/ascii_string.hpp
@@ -56,7 +56,7 @@
      *
      * @param[in] stream - The stream to write to
      */
-    void flatten(Stream& stream);
+    void flatten(Stream& stream) const;
 
     /**
      * @brief Fills in the object from the stream data
diff --git a/extensions/openpower-pels/callout.cpp b/extensions/openpower-pels/callout.cpp
index 9386862..95c6408 100644
--- a/extensions/openpower-pels/callout.cpp
+++ b/extensions/openpower-pels/callout.cpp
@@ -88,7 +88,7 @@
     return size;
 }
 
-void Callout::flatten(Stream& pel)
+void Callout::flatten(Stream& pel) const
 {
     pel << _size << _flags << _priority << _locationCodeSize;
 
diff --git a/extensions/openpower-pels/callout.hpp b/extensions/openpower-pels/callout.hpp
index ea28b7b..76eb0f9 100644
--- a/extensions/openpower-pels/callout.hpp
+++ b/extensions/openpower-pels/callout.hpp
@@ -62,7 +62,7 @@
      *
      * @param[in] stream - The stream to write to
      */
-    void flatten(Stream& pel);
+    void flatten(Stream& pel) const;
 
     /**
      * @brief Returns the priority field of a callout
diff --git a/extensions/openpower-pels/callouts.cpp b/extensions/openpower-pels/callouts.cpp
index 925b383..17f5bdd 100644
--- a/extensions/openpower-pels/callouts.cpp
+++ b/extensions/openpower-pels/callouts.cpp
@@ -36,7 +36,7 @@
     }
 }
 
-void Callouts::flatten(Stream& pel)
+void Callouts::flatten(Stream& pel) const
 {
     pel << _subsectionID << _subsectionFlags << _subsectionWordLength;
 
diff --git a/extensions/openpower-pels/callouts.hpp b/extensions/openpower-pels/callouts.hpp
index 430a5ae..9226a1b 100644
--- a/extensions/openpower-pels/callouts.hpp
+++ b/extensions/openpower-pels/callouts.hpp
@@ -44,7 +44,7 @@
      *
      * @param[in] stream - The stream to write to
      */
-    void flatten(Stream& pel);
+    void flatten(Stream& pel) const;
 
     /**
      * @brief Returns the size of this object when flattened into a PEL
diff --git a/extensions/openpower-pels/fru_identity.cpp b/extensions/openpower-pels/fru_identity.cpp
index 63c81fb..8c81e88 100644
--- a/extensions/openpower-pels/fru_identity.cpp
+++ b/extensions/openpower-pels/fru_identity.cpp
@@ -88,7 +88,7 @@
     return std::nullopt;
 }
 
-void FRUIdentity::flatten(Stream& pel)
+void FRUIdentity::flatten(Stream& pel) const
 {
     pel << _type << _size << _flags;
 
diff --git a/extensions/openpower-pels/fru_identity.hpp b/extensions/openpower-pels/fru_identity.hpp
index 76142a8..ecc2899 100644
--- a/extensions/openpower-pels/fru_identity.hpp
+++ b/extensions/openpower-pels/fru_identity.hpp
@@ -75,7 +75,7 @@
      *
      * @param[in] stream - The stream to write to
      */
-    void flatten(Stream& pel);
+    void flatten(Stream& pel) const;
 
     /**
      * @brief Returns the size of this structure when flattened into a PEL
diff --git a/extensions/openpower-pels/mru.cpp b/extensions/openpower-pels/mru.cpp
index 78ce6b4..a79c026 100644
--- a/extensions/openpower-pels/mru.cpp
+++ b/extensions/openpower-pels/mru.cpp
@@ -53,7 +53,7 @@
     }
 }
 
-void MRU::flatten(Stream& pel)
+void MRU::flatten(Stream& pel) const
 {
     pel << _type << _size << _flags << _reserved4B;
 
diff --git a/extensions/openpower-pels/mru.hpp b/extensions/openpower-pels/mru.hpp
index 8ad3e3c..e2293f1 100644
--- a/extensions/openpower-pels/mru.hpp
+++ b/extensions/openpower-pels/mru.hpp
@@ -61,7 +61,7 @@
      *
      * @param[in] stream - The stream to write to
      */
-    void flatten(Stream& pel);
+    void flatten(Stream& pel) const;
 
     /**
      * @brief Returns the size of this structure when flattened into a PEL
diff --git a/extensions/openpower-pels/pce_identity.cpp b/extensions/openpower-pels/pce_identity.cpp
index 43c5b21..6a6f257 100644
--- a/extensions/openpower-pels/pce_identity.cpp
+++ b/extensions/openpower-pels/pce_identity.cpp
@@ -38,7 +38,7 @@
     pel >> _pceName;
 }
 
-void PCEIdentity::flatten(Stream& pel)
+void PCEIdentity::flatten(Stream& pel) const
 {
     pel << _type << _size << _flags << _mtms << _pceName;
 }
diff --git a/extensions/openpower-pels/pce_identity.hpp b/extensions/openpower-pels/pce_identity.hpp
index 4503764..60c878e 100644
--- a/extensions/openpower-pels/pce_identity.hpp
+++ b/extensions/openpower-pels/pce_identity.hpp
@@ -47,7 +47,7 @@
      *
      * @param[in] stream - The stream to write to
      */
-    void flatten(Stream& pel);
+    void flatten(Stream& pel) const;
 
     /**
      * @brief Returns the size of this structure when flattened into a PEL
