diff --git a/extensions/openpower-pels/failing_mtms.cpp b/extensions/openpower-pels/failing_mtms.cpp
index 0b02f2d..1b15c16 100644
--- a/extensions/openpower-pels/failing_mtms.cpp
+++ b/extensions/openpower-pels/failing_mtms.cpp
@@ -58,31 +58,6 @@
     _valid = (failed) ? false : true;
 }
 
-std::string FailingMTMS::getMachineTypeModel()
-{
-    std::string mtmString;
-    const auto& mtm = _mtms.machineTypeAndModel();
-
-    for (size_t i = 0; (i < MTMS::mtmSize) && (mtm[i] != 0); i++)
-    {
-        mtmString.push_back(mtm[i]);
-    }
-    return mtmString;
-}
-
-std::string FailingMTMS::getMachineSerialNumber()
-{
-    std::string snString;
-    const auto& sn = _mtms.machineSerialNumber();
-
-    // Get everything up to the 0s.
-    for (size_t i = 0; (i < MTMS::snSize) && (sn[i] != 0); i++)
-    {
-        snString.push_back(sn[i]);
-    }
-    return snString;
-}
-
 void FailingMTMS::flatten(Stream& stream)
 {
     stream << _header << _mtms;
diff --git a/extensions/openpower-pels/failing_mtms.hpp b/extensions/openpower-pels/failing_mtms.hpp
index 209eaa9..bbf0b2a 100644
--- a/extensions/openpower-pels/failing_mtms.hpp
+++ b/extensions/openpower-pels/failing_mtms.hpp
@@ -66,14 +66,20 @@
      *
      * @return std::string the MTM
      */
-    std::string getMachineTypeModel();
+    std::string getMachineTypeModel() const
+    {
+        return _mtms.machineTypeAndModel();
+    }
 
     /**
      * @brief Returns the machine serial number as a string
      *
      * @return std::string the serial number
      */
-    std::string getMachineSerialNumber();
+    std::string getMachineSerialNumber() const
+    {
+        return _mtms.machineSerialNumber();
+    }
 
   private:
     /**
diff --git a/extensions/openpower-pels/mtms.cpp b/extensions/openpower-pels/mtms.cpp
index 355431f..ec964f2 100644
--- a/extensions/openpower-pels/mtms.cpp
+++ b/extensions/openpower-pels/mtms.cpp
@@ -51,12 +51,12 @@
 {
     for (size_t i = 0; i < MTMS::mtmSize; i++)
     {
-        s << mtms.machineTypeAndModel()[i];
+        s << mtms.machineTypeAndModelRaw()[i];
     }
 
     for (size_t i = 0; i < MTMS::snSize; i++)
     {
-        s << mtms.machineSerialNumber()[i];
+        s << mtms.machineSerialNumberRaw()[i];
     }
 
     return s;
@@ -66,12 +66,12 @@
 {
     for (size_t i = 0; i < MTMS::mtmSize; i++)
     {
-        s >> mtms.machineTypeAndModel()[i];
+        s >> mtms.machineTypeAndModelRaw()[i];
     }
 
     for (size_t i = 0; i < MTMS::snSize; i++)
     {
-        s >> mtms.machineSerialNumber()[i];
+        s >> mtms.machineSerialNumberRaw()[i];
     }
 
     return s;
diff --git a/extensions/openpower-pels/mtms.hpp b/extensions/openpower-pels/mtms.hpp
index fe8723d..6b76ec7 100644
--- a/extensions/openpower-pels/mtms.hpp
+++ b/extensions/openpower-pels/mtms.hpp
@@ -59,26 +59,61 @@
     explicit MTMS(Stream& stream);
 
     /**
-     * @brief Returns the machine type/model value
+     * @brief Returns the raw machine type/model value
      *
      * @return std::array<uint8_t, mtmSize>&  - The TM value
      */
-    std::array<uint8_t, mtmSize>& machineTypeAndModel()
+    std::array<uint8_t, mtmSize>& machineTypeAndModelRaw()
     {
         return _machineTypeAndModel;
     }
 
     /**
-     * @brief Returns the machine serial number value
+     * @brief Returns the machine type/model value
+     *
+     * @return std::string - The TM value
+     */
+    std::string machineTypeAndModel() const
+    {
+        std::string mtm;
+
+        // Get everything up to the 0s.
+        for (size_t i = 0; (i < mtmSize) && (_machineTypeAndModel[i] != 0); i++)
+        {
+            mtm.push_back(_machineTypeAndModel[i]);
+        }
+
+        return mtm;
+    }
+
+    /**
+     * @brief Returns the raw machine serial number value
      *
      * @return std::array<uint8_t, snSize>& - The SN value
      */
-    std::array<uint8_t, snSize>& machineSerialNumber()
+    std::array<uint8_t, snSize>& machineSerialNumberRaw()
     {
         return _serialNumber;
     }
 
     /**
+     * @brief Returns the machine serial number value
+     *
+     * @return std::string - The SN value
+     */
+    std::string machineSerialNumber() const
+    {
+        std::string sn;
+
+        // Get everything up to the 0s.
+        for (size_t i = 0; (i < snSize) && (_serialNumber[i] != 0); i++)
+        {
+            sn.push_back(_serialNumber[i]);
+        }
+        return sn;
+    }
+
+    /**
      * @brief Returns the size of the data when flattened
      *
      * @return size_t - The size of the data
