diff --git a/extensions/openpower-pels/callout.cpp b/extensions/openpower-pels/callout.cpp
index 905c212..66181ff 100644
--- a/extensions/openpower-pels/callout.cpp
+++ b/extensions/openpower-pels/callout.cpp
@@ -94,7 +94,8 @@
     _size = flattenedSize();
 }
 
-Callout::Callout(CalloutPriority priority, MaintProcedure procedure)
+Callout::Callout(CalloutPriority priority,
+                 const std::string& procedureFromRegistry)
 {
     _flags = calloutType | fruIdentIncluded;
 
@@ -102,7 +103,7 @@
 
     _locationCodeSize = 0;
 
-    _fruIdentity = std::make_unique<FRUIdentity>(procedure);
+    _fruIdentity = std::make_unique<FRUIdentity>(procedureFromRegistry);
 
     _size = flattenedSize();
 }
diff --git a/extensions/openpower-pels/callout.hpp b/extensions/openpower-pels/callout.hpp
index c8bb0a3..6b7dbc7 100644
--- a/extensions/openpower-pels/callout.hpp
+++ b/extensions/openpower-pels/callout.hpp
@@ -87,9 +87,10 @@
      * out maintenance procedure.
      *
      * @param[in] priority - The priority of the callout
-     * @param[in] procedure - The maintenance procedure
+     * @param[in] procedureFromRegistry - The maintenance procedure name
+     *                                    as defined in the message registry.
      */
-    Callout(CalloutPriority priority, MaintProcedure procedure);
+    Callout(CalloutPriority priority, const std::string& procedureFromRegistry);
 
     /**
      * @brief Returns the size of this object when flattened into a PEL
diff --git a/extensions/openpower-pels/fru_identity.cpp b/extensions/openpower-pels/fru_identity.cpp
index 7e9bf1b..8cf6382 100644
--- a/extensions/openpower-pels/fru_identity.cpp
+++ b/extensions/openpower-pels/fru_identity.cpp
@@ -17,6 +17,10 @@
 
 #include "pel_values.hpp"
 
+#include <phosphor-logging/log.hpp>
+
+using namespace phosphor::logging;
+
 namespace openpower
 {
 namespace pels
@@ -79,12 +83,12 @@
     _size = flattenedSize();
 }
 
-FRUIdentity::FRUIdentity(MaintProcedure procedure)
+FRUIdentity::FRUIdentity(const std::string& procedureFromRegistry)
 {
     _type = substructureType;
     _flags = maintenanceProc;
 
-    setMaintenanceProcedure(procedure);
+    setMaintenanceProcedure(procedureFromRegistry);
 
     _size = flattenedSize();
 }
@@ -203,15 +207,25 @@
     strncpy(_sn.data(), serialNumber.c_str(), _sn.size());
 }
 
-void FRUIdentity::setMaintenanceProcedure(MaintProcedure procedure)
+void FRUIdentity::setMaintenanceProcedure(
+    const std::string& procedureFromRegistry)
 {
     _flags |= maintProcSupplied;
     _flags &= ~pnSupplied;
 
-    auto proc = pel_values::getMaintProcedure(procedure);
-
-    strncpy(_pnOrProcedureID.data(), std::get<pel_values::mpNamePos>(*proc),
+    if (pel_values::maintenanceProcedures.count(procedureFromRegistry))
+    {
+        strncpy(
+            _pnOrProcedureID.data(),
+            pel_values::maintenanceProcedures.at(procedureFromRegistry).c_str(),
             _pnOrProcedureID.size());
+    }
+    else
+    {
+        log<level::ERR>("Invalid maintenance procedure",
+                        entry("PROCEDURE=%s", procedureFromRegistry.c_str()));
+        strncpy(_pnOrProcedureID.data(), "INVALID", _pnOrProcedureID.size());
+    }
 
     // ensure null terminated
     _pnOrProcedureID.back() = 0;
diff --git a/extensions/openpower-pels/fru_identity.hpp b/extensions/openpower-pels/fru_identity.hpp
index 016f3fd..669dc01 100644
--- a/extensions/openpower-pels/fru_identity.hpp
+++ b/extensions/openpower-pels/fru_identity.hpp
@@ -89,9 +89,10 @@
      *
      * Creates the object with a maintenance procedure callout.
      *
-     * @param[in] procedure - The procedure to use
+     * @param[in] procedureFromRegistry - The maintenance procedure name
+     *                                    as defined in the message registry.
      */
-    FRUIdentity(MaintProcedure procedure);
+    FRUIdentity(const std::string& procedureFromRegistry);
 
     /**
      * @brief Flatten the object into the stream
@@ -230,8 +231,11 @@
      * @brief Sets the 8 character null terminated procedure
      *        field.  This is in the same field as the part
      *        number since they are mutually exclusive.
+     *
+     * @param procedureFromRegistry - The procedure name as defined in
+     *                                the PEL message registry.
      */
-    void setMaintenanceProcedure(MaintProcedure procedure);
+    void setMaintenanceProcedure(const std::string& procedureFromRegistry);
 
     /**
      * @brief The callout substructure type field. Will be "ID".
diff --git a/extensions/openpower-pels/pel_types.hpp b/extensions/openpower-pels/pel_types.hpp
index f6f66a5..1706c98 100644
--- a/extensions/openpower-pels/pel_types.hpp
+++ b/extensions/openpower-pels/pel_types.hpp
@@ -143,13 +143,5 @@
     low = 'L'
 };
 
-/**
- * @brief Maintenance procedure enums
- */
-enum class MaintProcedure
-{
-    noVPDforFRU
-};
-
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/pel_values.cpp b/extensions/openpower-pels/pel_values.cpp
index 9fb6f05..07a0671 100644
--- a/extensions/openpower-pels/pel_values.cpp
+++ b/extensions/openpower-pels/pel_values.cpp
@@ -212,10 +212,11 @@
     {0x4C, "low", "Lowest priority replacement"}};
 
 /**
- * @brief The possible maintenance procedures.
+ * @brief Map of the registry names for the maintenance procedures
+ *        to their actual names.
  */
-const MaintenanceProcedureValues maintenanceProcedures = {
-    {MaintProcedure::noVPDforFRU, "no_vpd_for_fru", "BMCSP01"}};
+const std::map<std::string, std::string> maintenanceProcedures = {
+    {"no_vpd_for_fru", "BMCSP01"}};
 
 PELValues::const_iterator findByValue(uint32_t value, const PELValues& fields)
 {
@@ -329,20 +330,6 @@
     return foundValues;
 }
 
-MaintenanceProcedureValues::const_iterator
-    getMaintProcedure(MaintProcedure procedure)
-{
-    auto proc =
-        std::find_if(maintenanceProcedures.begin(), maintenanceProcedures.end(),
-                     [procedure](const auto& entry) {
-                         return std::get<mpEnumPos>(entry) == procedure;
-                     });
-
-    assert(proc != maintenanceProcedures.end());
-
-    return proc;
-}
-
 } // namespace pel_values
 } // namespace pels
 } // namespace openpower
diff --git a/extensions/openpower-pels/pel_values.hpp b/extensions/openpower-pels/pel_values.hpp
index 163c6da..04c287d 100644
--- a/extensions/openpower-pels/pel_values.hpp
+++ b/extensions/openpower-pels/pel_values.hpp
@@ -26,19 +26,6 @@
 using PELFieldValue = std::tuple<uint32_t, const char*, const char*>;
 using PELValues = std::vector<PELFieldValue>;
 
-// The maintenance procedure enum
-const int mpEnumPos = 0;
-
-// The maintenance procedure value from the registry
-const int mpRegistryNamePos = 1;
-
-// The string name of the maintenance procedure
-const int mpNamePos = 2;
-
-using MaintenanceProcedureValue =
-    std::tuple<MaintProcedure, const char*, const char*>;
-using MaintenanceProcedureValues = std::vector<MaintenanceProcedureValue>;
-
 const std::string sectionVer = "Section Version";
 const std::string subSection = "Sub-section type";
 const std::string createdBy = "Created by";
@@ -85,19 +72,6 @@
                                      const PELValues& fields);
 
 /**
- * @brief Finds the entry in the maintenance procedure list
- *        based on the enum passed in.
- *
- * The function asserts that a result is found.
- *
- * @param[in] procedure - The procedure enum
- *
- * @return const_iterator - Iterator for that list entry
- */
-MaintenanceProcedureValues::const_iterator
-    getMaintProcedure(MaintProcedure procedure);
-
-/**
  * @brief The values for the 'subsystem' field in the User Header
  */
 extern const PELValues subsystemValues;
@@ -158,11 +132,9 @@
 extern const std::map<bool, std::string> boolString;
 
 /**
- * @brief All maintenance procedures.
- *
- * The procedure enum, registry name, and actual string value.
+ * @brief Map for maintenance procedures
  */
-extern const MaintenanceProcedureValues maintenanceProcedures;
+extern const std::map<std::string, std::string> maintenanceProcedures;
 
 } // namespace pel_values
 } // namespace pels
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index b15c777..5310947 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -539,7 +539,7 @@
 
         // Use the 'NoVPDforFRU' maintenance procedure instead
         callout = std::make_unique<src::Callout>(CalloutPriority::high,
-                                                 MaintProcedure::noVPDforFRU);
+                                                 "no_vpd_for_fru");
     }
 
     _callouts->addCallout(std::move(callout));
diff --git a/test/openpower-pels/fru_identity_test.cpp b/test/openpower-pels/fru_identity_test.cpp
index 5e738aa..e31ffad 100644
--- a/test/openpower-pels/fru_identity_test.cpp
+++ b/test/openpower-pels/fru_identity_test.cpp
@@ -159,31 +159,46 @@
 // Test the constructor that takes in a maint procedure
 TEST(FRUIdentityTest, CreateProcedureCalloutTest)
 {
-    FRUIdentity fru{MaintProcedure::noVPDforFRU};
+    {
+        FRUIdentity fru{"no_vpd_for_fru"};
 
-    EXPECT_EQ(fru.flattenedSize(), 12);
-    EXPECT_EQ(fru.type(), 0x4944);
-    EXPECT_EQ(fru.failingComponentType(), FRUIdentity::maintenanceProc);
-    EXPECT_EQ(fru.getMaintProc().value(), "BMCSP01");
-    EXPECT_FALSE(fru.getPN());
-    EXPECT_FALSE(fru.getCCIN());
-    EXPECT_FALSE(fru.getSN());
+        EXPECT_EQ(fru.flattenedSize(), 12);
+        EXPECT_EQ(fru.type(), 0x4944);
+        EXPECT_EQ(fru.failingComponentType(), FRUIdentity::maintenanceProc);
+        EXPECT_EQ(fru.getMaintProc().value(), "BMCSP01");
+        EXPECT_FALSE(fru.getPN());
+        EXPECT_FALSE(fru.getCCIN());
+        EXPECT_FALSE(fru.getSN());
 
-    // Flatten and unflatten, then compare again
-    std::vector<uint8_t> data;
-    Stream stream{data};
-    fru.flatten(stream);
+        // Flatten and unflatten, then compare again
+        std::vector<uint8_t> data;
+        Stream stream{data};
+        fru.flatten(stream);
 
-    EXPECT_EQ(data.size(), fru.flattenedSize());
+        EXPECT_EQ(data.size(), fru.flattenedSize());
 
-    stream.offset(0);
-    FRUIdentity newFRU{stream};
+        stream.offset(0);
+        FRUIdentity newFRU{stream};
 
-    EXPECT_EQ(newFRU.flattenedSize(), 12);
-    EXPECT_EQ(newFRU.type(), 0x4944);
-    EXPECT_EQ(newFRU.failingComponentType(), FRUIdentity::maintenanceProc);
-    EXPECT_EQ(newFRU.getMaintProc().value(), "BMCSP01");
-    EXPECT_FALSE(newFRU.getPN());
-    EXPECT_FALSE(newFRU.getCCIN());
-    EXPECT_FALSE(newFRU.getSN());
+        EXPECT_EQ(newFRU.flattenedSize(), 12);
+        EXPECT_EQ(newFRU.type(), 0x4944);
+        EXPECT_EQ(newFRU.failingComponentType(), FRUIdentity::maintenanceProc);
+        EXPECT_EQ(newFRU.getMaintProc().value(), "BMCSP01");
+        EXPECT_FALSE(newFRU.getPN());
+        EXPECT_FALSE(newFRU.getCCIN());
+        EXPECT_FALSE(newFRU.getSN());
+    }
+
+    {
+        // Invalid maintenance procedure
+        FRUIdentity fru{"invalid"};
+
+        EXPECT_EQ(fru.flattenedSize(), 12);
+        EXPECT_EQ(fru.type(), 0x4944);
+        EXPECT_EQ(fru.failingComponentType(), FRUIdentity::maintenanceProc);
+        EXPECT_EQ(fru.getMaintProc().value(), "INVALID");
+        EXPECT_FALSE(fru.getPN());
+        EXPECT_FALSE(fru.getCCIN());
+        EXPECT_FALSE(fru.getSN());
+    }
 }
diff --git a/test/openpower-pels/pel_values_test.cpp b/test/openpower-pels/pel_values_test.cpp
index b90ccca..a62e6c5 100644
--- a/test/openpower-pels/pel_values_test.cpp
+++ b/test/openpower-pels/pel_values_test.cpp
@@ -38,9 +38,4 @@
 
     s = findByName("foo", subsystemValues);
     ASSERT_EQ(s, subsystemValues.end());
-
-    auto p = getMaintProcedure(MaintProcedure::noVPDforFRU);
-    ASSERT_NE(p, maintenanceProcedures.end());
-    ASSERT_EQ("no_vpd_for_fru", std::get<mpRegistryNamePos>(*p));
-    ASSERT_EQ("BMCSP01", std::get<mpNamePos>(*p));
 }
diff --git a/test/openpower-pels/src_callout_test.cpp b/test/openpower-pels/src_callout_test.cpp
index 36e9e38..68090f7 100644
--- a/test/openpower-pels/src_callout_test.cpp
+++ b/test/openpower-pels/src_callout_test.cpp
@@ -281,7 +281,7 @@
 // Create a callout object by passing in the maintenance procedure to add.
 TEST(CalloutTest, TestProcedureCallout)
 {
-    Callout callout{CalloutPriority::medium, MaintProcedure::noVPDforFRU};
+    Callout callout{CalloutPriority::medium, "no_vpd_for_fru"};
 
     // size/flags/pri/locsize fields + FRUIdentity size
     // No location code.
