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
