diff --git a/configure.ac b/configure.ac
index 6cebfae..2600f60 100644
--- a/configure.ac
+++ b/configure.ac
@@ -209,10 +209,6 @@
             nlohmann/json.hpp,
             [],
             [AC_MSG_ERROR([Could not find nlohmann/json.hpp])])
-       AC_CHECK_HEADER(
-            fifo_map.hpp,
-            [],
-            [AC_MSG_ERROR([Could not find fifo_map.hpp])])
 
        AX_PKG_CHECK_MODULES([LIBPLDM], [libpldm])
        PKG_CHECK_MODULES([FMT], [fmt])
diff --git a/extensions/openpower-pels/src.cpp b/extensions/openpower-pels/src.cpp
index 398cfaa..e41de8c 100644
--- a/extensions/openpower-pels/src.cpp
+++ b/extensions/openpower-pels/src.cpp
@@ -22,7 +22,6 @@
 #ifdef PELTOOL
 #include <Python.h>
 
-#include <fifo_map.hpp>
 #include <nlohmann/json.hpp>
 #include <sstream>
 #endif
@@ -42,11 +41,7 @@
 constexpr size_t ccinSize = 4;
 
 #ifdef PELTOOL
-// Use fifo_map as nlohmann::json's map. We are just ignoring the 'less'
-// compare.  With this map the keys are kept in FIFO order.
-template <class K, class V, class dummy_compare, class A>
-using fifoMap = nlohmann::fifo_map<K, V, nlohmann::fifo_map_compare<K>, A>;
-using fifoJSON = nlohmann::basic_json<fifoMap>;
+using orderedJSON = nlohmann::ordered_json;
 
 void pyDecRef(PyObject* pyObj)
 {
@@ -64,9 +59,9 @@
  *
  * @return std::string - The JSON string
  */
-std::string prettyJSON(const fifoJSON& json)
+std::string prettyJSON(const orderedJSON& json)
 {
-    fifoJSON output;
+    orderedJSON output;
     if (!json.is_object())
     {
         output["SRC Details"] = json;
@@ -187,7 +182,7 @@
                 const char* output = PyBytes_AS_STRING(pBytes);
                 try
                 {
-                    fifoJSON json = nlohmann::json::parse(output);
+                    orderedJSON json = nlohmann::json::parse(output);
                     return prettyJSON(json);
                 }
                 catch (std::exception& e)
diff --git a/extensions/openpower-pels/user_data_json.cpp b/extensions/openpower-pels/user_data_json.cpp
index 934a4b8..4e15284 100644
--- a/extensions/openpower-pels/user_data_json.cpp
+++ b/extensions/openpower-pels/user_data_json.cpp
@@ -24,7 +24,6 @@
 
 #include <Python.h>
 
-#include <fifo_map.hpp>
 #include <iomanip>
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/log.hpp>
@@ -34,12 +33,7 @@
 {
 namespace pv = openpower::pels::pel_values;
 using namespace phosphor::logging;
-
-// Use fifo_map as nlohmann::json's map. We are just ignoring the 'less'
-// compare.  With this map the keys are kept in FIFO order.
-template <class K, class V, class dummy_compare, class A>
-using fifoMap = nlohmann::fifo_map<K, V, nlohmann::fifo_map_compare<K>, A>;
-using fifoJSON = nlohmann::basic_json<fifoMap>;
+using orderedJSON = nlohmann::ordered_json;
 
 void pyDecRef(PyObject* pyObj)
 {
@@ -58,9 +52,9 @@
  * @return std::string - The JSON string
  */
 std::string prettyJSON(uint16_t componentID, uint8_t subType, uint8_t version,
-                       const fifoJSON& json)
+                       const orderedJSON& json)
 {
-    fifoJSON output;
+    orderedJSON output;
     output[pv::sectionVer] = std::to_string(version);
     output[pv::subSection] = std::to_string(subType);
     output[pv::createdBy] = getNumberString("0x%04X", componentID);
@@ -134,7 +128,7 @@
         cborData.resize(data.size() - sizeof(pad) - pad);
     }
 
-    fifoJSON json = nlohmann::json::from_cbor(cborData);
+    orderedJSON json = nlohmann::json::from_cbor(cborData);
 
     return prettyJSON(componentID, subType, version, json);
 }
@@ -187,7 +181,7 @@
         text.push_back(std::move(line));
     }
 
-    fifoJSON json = text;
+    orderedJSON json = text;
     return prettyJSON(componentID, subType, version, json);
 }
 
@@ -213,7 +207,7 @@
         {
             std::string jsonString{data.begin(), data.begin() + data.size()};
 
-            fifoJSON json = nlohmann::json::parse(jsonString);
+            orderedJSON json = nlohmann::json::parse(jsonString);
 
             return prettyJSON(componentID, subType, version, json);
         }
@@ -315,7 +309,7 @@
                 const char* output = PyBytes_AS_STRING(pBytes);
                 try
                 {
-                    fifoJSON json = nlohmann::json::parse(output);
+                    orderedJSON json = nlohmann::json::parse(output);
                     return prettyJSON(componentID, subType, version, json);
                 }
                 catch (std::exception& e)
