diff --git a/extensions/openpower-pels/mtms.cpp b/extensions/openpower-pels/mtms.cpp
index 9f4144e..3ef8e87 100644
--- a/extensions/openpower-pels/mtms.cpp
+++ b/extensions/openpower-pels/mtms.cpp
@@ -62,7 +62,7 @@
     }
 }
 
-Stream& operator<<(Stream& s, MTMS& mtms)
+Stream& operator<<(Stream& s, const MTMS& mtms)
 {
     for (size_t i = 0; i < MTMS::mtmSize; i++)
     {
@@ -79,16 +79,23 @@
 
 Stream& operator>>(Stream& s, MTMS& mtms)
 {
+    std::array<uint8_t, MTMS::mtmSize> mtm;
+
     for (size_t i = 0; i < MTMS::mtmSize; i++)
     {
-        s >> mtms.machineTypeAndModelRaw()[i];
+        s >> mtm[i];
     }
 
+    mtms.setMachineTypeAndModel(mtm);
+
+    std::array<uint8_t, MTMS::snSize> sn;
     for (size_t i = 0; i < MTMS::snSize; i++)
     {
-        s >> mtms.machineSerialNumberRaw()[i];
+        s >> sn[i];
     }
 
+    mtms.setMachineSerialNumber(sn);
+
     return s;
 }
 } // namespace pels
diff --git a/extensions/openpower-pels/mtms.hpp b/extensions/openpower-pels/mtms.hpp
index 6b76ec7..928fb74 100644
--- a/extensions/openpower-pels/mtms.hpp
+++ b/extensions/openpower-pels/mtms.hpp
@@ -63,12 +63,22 @@
      *
      * @return std::array<uint8_t, mtmSize>&  - The TM value
      */
-    std::array<uint8_t, mtmSize>& machineTypeAndModelRaw()
+    const std::array<uint8_t, mtmSize>& machineTypeAndModelRaw() const
     {
         return _machineTypeAndModel;
     }
 
     /**
+     * @brief Sets the machine type and model field
+     *
+     * @param[in] mtm - The new value
+     */
+    void setMachineTypeAndModel(const std::array<uint8_t, mtmSize>& mtm)
+    {
+        _machineTypeAndModel = mtm;
+    }
+
+    /**
      * @brief Returns the machine type/model value
      *
      * @return std::string - The TM value
@@ -91,12 +101,22 @@
      *
      * @return std::array<uint8_t, snSize>& - The SN value
      */
-    std::array<uint8_t, snSize>& machineSerialNumberRaw()
+    const std::array<uint8_t, snSize>& machineSerialNumberRaw() const
     {
         return _serialNumber;
     }
 
     /**
+     * @brief Sets the machine serial number field
+     *
+     * @param[in] sn - The new value
+     */
+    void setMachineSerialNumber(const std::array<uint8_t, snSize>& sn)
+    {
+        _serialNumber = sn;
+    }
+
+    /**
      * @brief Returns the machine serial number value
      *
      * @return std::string - The SN value
@@ -157,7 +177,7 @@
  *
  * @return Stream&
  */
-Stream& operator<<(Stream& s, MTMS& mtms);
+Stream& operator<<(Stream& s, const MTMS& mtms);
 
 } // namespace pels
 } // namespace openpower
