diff --git a/extensions/openpower-pels/mtms.cpp b/extensions/openpower-pels/mtms.cpp
new file mode 100644
index 0000000..355431f
--- /dev/null
+++ b/extensions/openpower-pels/mtms.cpp
@@ -0,0 +1,80 @@
+#include "mtms.hpp"
+
+namespace openpower
+{
+namespace pels
+{
+
+MTMS::MTMS()
+{
+    memset(_machineTypeAndModel.data(), 0, mtmSize);
+    memset(_serialNumber.data(), 0, snSize);
+}
+
+MTMS::MTMS(const std::string& typeModel, const std::string& serialNumber)
+{
+    memset(_machineTypeAndModel.data(), 0, mtmSize);
+    memset(_serialNumber.data(), 0, snSize);
+
+    // Copy in as much as the fields as possible
+    for (size_t i = 0; i < mtmSize; i++)
+    {
+        if (typeModel.size() > i)
+        {
+            _machineTypeAndModel[i] = typeModel[i];
+        }
+    }
+
+    for (size_t i = 0; i < snSize; i++)
+    {
+        if (serialNumber.size() > i)
+        {
+            _serialNumber[i] = serialNumber[i];
+        }
+    }
+}
+
+MTMS::MTMS(Stream& stream)
+{
+    for (size_t i = 0; i < mtmSize; i++)
+    {
+        stream >> _machineTypeAndModel[i];
+    }
+
+    for (size_t i = 0; i < snSize; i++)
+    {
+        stream >> _serialNumber[i];
+    }
+}
+
+Stream& operator<<(Stream& s, MTMS& mtms)
+{
+    for (size_t i = 0; i < MTMS::mtmSize; i++)
+    {
+        s << mtms.machineTypeAndModel()[i];
+    }
+
+    for (size_t i = 0; i < MTMS::snSize; i++)
+    {
+        s << mtms.machineSerialNumber()[i];
+    }
+
+    return s;
+}
+
+Stream& operator>>(Stream& s, MTMS& mtms)
+{
+    for (size_t i = 0; i < MTMS::mtmSize; i++)
+    {
+        s >> mtms.machineTypeAndModel()[i];
+    }
+
+    for (size_t i = 0; i < MTMS::snSize; i++)
+    {
+        s >> mtms.machineSerialNumber()[i];
+    }
+
+    return s;
+}
+} // namespace pels
+} // namespace openpower
