diff --git a/extensions/openpower-pels/pel.cpp b/extensions/openpower-pels/pel.cpp
index af904ff..29d86d5 100644
--- a/extensions/openpower-pels/pel.cpp
+++ b/extensions/openpower-pels/pel.cpp
@@ -37,7 +37,7 @@
         _optionalSections.push_back(std::move(ud));
     }
 
-    _ph->sectionCount() = 2 + _optionalSections.size();
+    _ph->setSectionCount(2 + _optionalSections.size());
 }
 
 PEL::PEL(std::vector<uint8_t>& data) : PEL(data, 0)
@@ -55,7 +55,7 @@
     _ph = std::make_unique<PrivateHeader>(pelData);
     if (obmcLogID != 0)
     {
-        _ph->obmcLogID() = obmcLogID;
+        _ph->setOBMCLogID(obmcLogID);
     }
 
     _uh = std::make_unique<UserHeader>(pelData);
@@ -92,12 +92,12 @@
 void PEL::setCommitTime()
 {
     auto now = std::chrono::system_clock::now();
-    _ph->commitTimestamp() = getBCDTime(now);
+    _ph->setCommitTimestamp(getBCDTime(now));
 }
 
 void PEL::assignID()
 {
-    _ph->id() = generatePELID();
+    _ph->setID(generatePELID());
 }
 
 void PEL::flatten(std::vector<uint8_t>& pelBuffer)
diff --git a/extensions/openpower-pels/pel.hpp b/extensions/openpower-pels/pel.hpp
index f63cfdd..3d1318f 100644
--- a/extensions/openpower-pels/pel.hpp
+++ b/extensions/openpower-pels/pel.hpp
@@ -152,21 +152,21 @@
     /**
      * @brief Gives access to the Private Header section class
      *
-     * @return std::unique_ptr<PrivateHeader>& the private header
+     * @return const PrivateHeader& - the private header
      */
-    std::unique_ptr<PrivateHeader>& privateHeader()
+    const PrivateHeader& privateHeader() const
     {
-        return _ph;
+        return *_ph;
     }
 
     /**
      * @brief Gives access to the User Header section class
      *
-     * @return std::unique_ptr<UserHeader>& the user header
+     * @return const UserHeader& - the user header
      */
-    std::unique_ptr<UserHeader>& userHeader()
+    const UserHeader& userHeader() const
     {
-        return _uh;
+        return *_uh;
     }
 
     /**
diff --git a/extensions/openpower-pels/private_header.hpp b/extensions/openpower-pels/private_header.hpp
index 9c522a2..7d6a53d 100644
--- a/extensions/openpower-pels/private_header.hpp
+++ b/extensions/openpower-pels/private_header.hpp
@@ -75,9 +75,9 @@
     /**
      * @brief Returns the creation timestamp
      *
-     * @return BCDTime& - the timestamp
+     * @return const BCDTime& - the timestamp
      */
-    BCDTime& createTimestamp()
+    const BCDTime& createTimestamp() const
     {
         return _createTimestamp;
     }
@@ -85,19 +85,29 @@
     /**
      * @brief Returns the commit time timestamp
      *
-     * @return BCDTime& - the timestamp
+     * @return const BCDTime& - the timestamp
      */
-    BCDTime& commitTimestamp()
+    const BCDTime& commitTimestamp() const
     {
         return _commitTimestamp;
     }
 
     /**
+     * @brief Sets the commit timestamp
+     *
+     * @param[in] time - the new timestamp
+     */
+    void setCommitTimestamp(const BCDTime& time)
+    {
+        _commitTimestamp = time;
+    }
+
+    /**
      * @brief Returns the creator ID field
      *
-     * @return uint8_t& - the creator ID
+     * @return uint8_t - the creator ID
      */
-    uint8_t& creatorID()
+    uint8_t creatorID() const
     {
         return _creatorID;
     }
@@ -105,9 +115,9 @@
     /**
      * @brief Returns the log type field
      *
-     * @return uint8_t& - the log type
+     * @return uint8_t - the log type
      */
-    uint8_t& logType()
+    uint8_t logType() const
     {
         return _logType;
     }
@@ -115,27 +125,47 @@
     /**
      * @brief Returns the section count field
      *
-     * @return uint8_t& - the section count
+     * @return uint8_t - the section count
      */
-    uint8_t& sectionCount()
+    uint8_t sectionCount() const
     {
         return _sectionCount;
     }
 
     /**
+     * @brief Sets the section count field
+     *
+     * @param[in] count - the new section count
+     */
+    void setSectionCount(uint8_t count)
+    {
+        _sectionCount = count;
+    }
+
+    /**
      * @brief Returns the OpenBMC log ID field
      *
      * This is the ID the OpenBMC event log that corresponds
      * to this PEL.
      *
-     * @return uint32_t& - the OpenBMC event log ID
+     * @return uint32_t - the OpenBMC event log ID
      */
-    uint32_t& obmcLogID()
+    uint32_t obmcLogID() const
     {
         return _obmcLogID;
     }
 
     /**
+     * @brief Sets the OpenBMC log ID field
+     *
+     * @param[in] id - the new ID
+     */
+    void setOBMCLogID(uint32_t id)
+    {
+        _obmcLogID = id;
+    }
+
+    /**
      * @brief Returns the Creator Version field
      *
      * @return CreatorVersion& - the creator version
@@ -148,19 +178,29 @@
     /**
      * @brief Returns the error log ID field
      *
-     * @return uint32_t& - the error log ID
+     * @return uint32_t - the error log ID
      */
-    uint32_t& id()
+    uint32_t id() const
     {
         return _id;
     }
 
     /**
+     * @brief Sets the ID field
+     *
+     * @param[in] id - the new ID
+     */
+    void setID(uint32_t id)
+    {
+        _id = id;
+    }
+
+    /**
      * @brief Returns the platform log ID field
      *
-     * @return uint32_t& - the platform log ID
+     * @return uint32_t - the platform log ID
      */
-    uint32_t& plid()
+    uint32_t plid() const
     {
         return _plid;
     }
diff --git a/extensions/openpower-pels/user_header.hpp b/extensions/openpower-pels/user_header.hpp
index c1b6636..459952b 100644
--- a/extensions/openpower-pels/user_header.hpp
+++ b/extensions/openpower-pels/user_header.hpp
@@ -64,9 +64,9 @@
     /**
      * @brief Returns the subsystem field.
      *
-     * @return uint8_t& - the subsystem
+     * @return uint8_t - the subsystem
      */
-    uint8_t& subsystem()
+    uint8_t subsystem() const
     {
         return _eventSubsystem;
     }
@@ -74,9 +74,9 @@
     /**
      * @brief Returns the event scope field.
      *
-     * @return uint8_t& - the event scope
+     * @return uint8_t - the event scope
      */
-    uint8_t& scope()
+    uint8_t scope() const
     {
         return _eventScope;
     }
@@ -84,9 +84,9 @@
     /**
      * @brief Returns the severity field.
      *
-     * @return uint8_t& - the severity
+     * @return uint8_t - the severity
      */
-    uint8_t& severity()
+    uint8_t severity() const
     {
         return _eventSeverity;
     }
@@ -94,9 +94,9 @@
     /**
      * @brief Returns the event type field.
      *
-     * @return uint8_t& - the event type
+     * @return uint8_t - the event type
      */
-    uint8_t& eventType()
+    uint8_t eventType() const
     {
         return _eventType;
     }
@@ -104,9 +104,9 @@
     /**
      * @brief Returns the problem domain field.
      *
-     * @return uint8_t& - the problem domain
+     * @return uint8_t - the problem domain
      */
-    uint8_t& problemDomain()
+    uint8_t problemDomain() const
     {
         return _problemDomain;
     }
@@ -114,9 +114,9 @@
     /**
      * @brief Returns the problem vector field.
      *
-     * @return uint8_t& - the problem vector
+     * @return uint8_t - the problem vector
      */
-    uint8_t& problemVector()
+    uint8_t problemVector() const
     {
         return _problemVector;
     }
@@ -124,9 +124,9 @@
     /**
      * @brief Returns the action flags field.
      *
-     * @return uint16_t& - the action flags
+     * @return uint16_t - the action flags
      */
-    uint16_t& actionFlags()
+    uint16_t actionFlags() const
     {
         return _actionFlags;
     }
