diff --git a/src/EntityManager.cpp b/src/EntityManager.cpp
index 8bd97fd..a46806a 100644
--- a/src/EntityManager.cpp
+++ b/src/EntityManager.cpp
@@ -39,6 +39,7 @@
 #include <filesystem>
 #include <fstream>
 #include <iostream>
+#include <map>
 #include <regex>
 #include <variant>
 constexpr const char* configurationDirectory = PACKAGE_DIR "configurations";
@@ -49,7 +50,7 @@
 constexpr const char* globalSchema = "global.json";
 constexpr const bool debug = false;
 
-static const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
+const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
     probeTypes{{{"FALSE", probe_type_codes::FALSE_T},
                 {"TRUE", probe_type_codes::TRUE_T},
                 {"AND", probe_type_codes::AND},
@@ -84,6 +85,22 @@
 const std::regex illegalDbusPathRegex("[^A-Za-z0-9_.]");
 const std::regex illegalDbusMemberRegex("[^A-Za-z0-9_]");
 
+FoundProbeTypeT findProbeType(const std::string& probe)
+{
+    boost::container::flat_map<const char*, probe_type_codes,
+                               CmpStr>::const_iterator probeType;
+    for (probeType = probeTypes.begin(); probeType != probeTypes.end();
+         ++probeType)
+    {
+        if (probe.find(probeType->first) != std::string::npos)
+        {
+            return probeType;
+        }
+    }
+
+    return std::nullopt;
+}
+
 static std::shared_ptr<sdbusplus::asio::dbus_interface>
     createInterface(sdbusplus::asio::object_server& objServer,
                     const std::string& path, const std::string& interface,
diff --git a/src/PerformProbe.cpp b/src/PerformProbe.cpp
index 7024e47..bd3e1b3 100644
--- a/src/PerformProbe.cpp
+++ b/src/PerformProbe.cpp
@@ -22,15 +22,6 @@
 
 constexpr const bool debug = false;
 
-/* Keep this in sync with EntityManager.cpp */
-static const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
-    probeTypes{{{"FALSE", probe_type_codes::FALSE_T},
-                {"TRUE", probe_type_codes::TRUE_T},
-                {"AND", probe_type_codes::AND},
-                {"OR", probe_type_codes::OR},
-                {"FOUND", probe_type_codes::FOUND},
-                {"MATCH_ONE", probe_type_codes::MATCH_ONE}}};
-
 // probes dbus interface dictionary for a key with a value that matches a regex
 // When an interface passes a probe, also save its D-Bus path with it.
 bool probeDbus(const std::string& interface,
@@ -99,22 +90,10 @@
 
     for (auto& probe : probeCommand)
     {
-        bool foundProbe = false;
-        boost::container::flat_map<const char*, probe_type_codes,
-                                   CmpStr>::const_iterator probeType;
-
-        for (probeType = probeTypes.begin(); probeType != probeTypes.end();
-             ++probeType)
+        FoundProbeTypeT probeType = findProbeType(probe);
+        if (probeType)
         {
-            if (probe.find(probeType->first) != std::string::npos)
-            {
-                foundProbe = true;
-                break;
-            }
-        }
-        if (foundProbe)
-        {
-            switch (probeType->second)
+            switch ((*probeType)->second)
             {
                 case probe_type_codes::FALSE_T:
                 {
@@ -188,6 +167,7 @@
             {
                 return false;
             }
+            bool foundProbe = !!probeType;
             std::string probeInterface = probe.substr(0, findStart);
             cur = probeDbus(probeInterface, dbusProbeMap, foundDevs, scan,
                             foundProbe);
@@ -209,8 +189,8 @@
             ret = cur;
             first = false;
         }
-        lastCommand = probeType != probeTypes.end() ? probeType->second
-                                                    : probe_type_codes::FALSE_T;
+        lastCommand =
+            probeType ? (*probeType)->second : probe_type_codes::FALSE_T;
     }
 
     // probe passed, but empty device
diff --git a/src/PerformScan.cpp b/src/PerformScan.cpp
index 70a4e47..5978710 100644
--- a/src/PerformScan.cpp
+++ b/src/PerformScan.cpp
@@ -30,15 +30,6 @@
     propertiesChangedCallback(nlohmann::json& systemConfiguration,
                               sdbusplus::asio::object_server& objServer);
 
-/* Keep this in sync with EntityManager.cpp */
-static const boost::container::flat_map<const char*, probe_type_codes, CmpStr>
-    probeTypes{{{"FALSE", probe_type_codes::FALSE_T},
-                {"TRUE", probe_type_codes::TRUE_T},
-                {"AND", probe_type_codes::AND},
-                {"OR", probe_type_codes::OR},
-                {"FOUND", probe_type_codes::FOUND},
-                {"MATCH_ONE", probe_type_codes::MATCH_ONE}}};
-
 using GetSubTreeType = std::vector<
     std::pair<std::string,
               std::vector<std::pair<std::string, std::vector<std::string>>>>>;
@@ -606,19 +597,7 @@
                 std::cerr << "Probe statement wasn't a string, can't parse";
                 continue;
             }
-            bool found = false;
-            boost::container::flat_map<const char*, probe_type_codes,
-                                       CmpStr>::const_iterator probeType;
-            for (probeType = probeTypes.begin(); probeType != probeTypes.end();
-                 ++probeType)
-            {
-                if (probe->find(probeType->first) != std::string::npos)
-                {
-                    found = true;
-                    break;
-                }
-            }
-            if (found)
+            if (findProbeType(probe->c_str()))
             {
                 continue;
             }
