diff --git a/src/main.cpp b/src/main.cpp
index 12969b1..86ef055 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -23,7 +23,6 @@
 AssociationMaps associationMaps;
 
 static AllowDenyList serviceAllowList;
-static AllowDenyList serviceDenyList;
 
 void updateOwners(sdbusplus::asio::connection* conn,
                   boost::container::flat_map<std::string, std::string>& owners,
@@ -264,7 +263,7 @@
 #endif
     sdbusplus::asio::object_server& objectServer)
 {
-    if (needToIntrospect(processName, serviceAllowList, serviceDenyList))
+    if (needToIntrospect(processName, serviceAllowList))
     {
         std::shared_ptr<InProgressIntrospect> transaction =
             std::make_shared<InProgressIntrospect>(systemBus, io, processName,
@@ -326,8 +325,7 @@
 #endif
             for (const std::string& processName : processNames)
             {
-                if (needToIntrospect(processName, serviceAllowList,
-                                     serviceDenyList))
+                if (needToIntrospect(processName, serviceAllowList))
                 {
                     startNewIntrospect(systemBus, io, interfaceMap, processName,
                                        assocMaps,
@@ -658,7 +656,6 @@
         std::make_shared<sdbusplus::asio::connection>(io);
 
     splitArgs(options["service-namespaces"], serviceAllowList);
-    splitArgs(options["service-blacklists"], serviceDenyList);
 
     sdbusplus::asio::object_server server(systemBus);
 
@@ -693,7 +690,7 @@
                     std::chrono::steady_clock::now());
 #endif
                 // New daemon added
-                if (needToIntrospect(name, serviceAllowList, serviceDenyList))
+                if (needToIntrospect(name, serviceAllowList))
                 {
                     nameOwners[newOwner] = name;
                     startNewIntrospect(systemBus.get(), io, interfaceMap, name,
@@ -721,7 +718,7 @@
             {
                 return; // only introspect well-known
             }
-            if (needToIntrospect(wellKnown, serviceAllowList, serviceDenyList))
+            if (needToIntrospect(wellKnown, serviceAllowList))
             {
                 processInterfaceAdded(interfaceMap, objPath, interfacesAdded,
                                       wellKnown, associationMaps, server);
diff --git a/src/processing.cpp b/src/processing.cpp
index 5239818..448830f 100644
--- a/src/processing.cpp
+++ b/src/processing.cpp
@@ -25,8 +25,7 @@
 }
 
 bool needToIntrospect(const std::string& processName,
-                      const AllowDenyList& allowList,
-                      const AllowDenyList& denyList)
+                      const AllowDenyList& allowList)
 {
     auto inAllowList =
         std::find_if(allowList.begin(), allowList.end(),
@@ -34,10 +33,7 @@
                          return boost::starts_with(processName, prefix);
                      }) != allowList.end();
 
-    // This holds full service names, not prefixes
-    auto inDenyList = denyList.find(processName) != denyList.end();
-
-    return inAllowList && !inDenyList;
+    return inAllowList;
 }
 
 void processNameChangeDelete(
diff --git a/src/processing.hpp b/src/processing.hpp
index e72c584..d17cacd 100644
--- a/src/processing.hpp
+++ b/src/processing.hpp
@@ -45,19 +45,16 @@
 
 /** @brief Determine if dbus service is something to monitor
  *
- * mapper supports an allowlist and denylist concept. If an allowlist is
- * provided as input then only dbus objects matching that list is monitored. If
- * a denylist is provided then objects matching it will not be monitored.
+ * mapper supports an allowlist concept. If an allowlist is provided as input
+ * then only dbus objects matching that list is monitored.
  *
  * @param[in] processName   - Dbus service name
  * @param[in] allowList     - The allow list
- * @param[in] denyList      - The deny list
  *
  * @return True if input processName should be monitored, false otherwise
  */
 bool needToIntrospect(const std::string& processName,
-                      const AllowDenyList& allowList,
-                      const AllowDenyList& denyList);
+                      const AllowDenyList& allowList);
 
 /** @brief Handle the removal of an existing name in objmgr data structures
  *
diff --git a/src/test/need_to_introspect.cpp b/src/test/need_to_introspect.cpp
index 1b4fa86..3150e3f 100644
--- a/src/test/need_to_introspect.cpp
+++ b/src/test/need_to_introspect.cpp
@@ -6,38 +6,16 @@
 TEST(NeedToIntrospect, PassEmptyName)
 {
     AllowDenyList allowList;
-    AllowDenyList denyList;
     std::string processName;
 
-    EXPECT_FALSE(needToIntrospect(processName, allowList, denyList));
+    EXPECT_FALSE(needToIntrospect(processName, allowList));
 }
 
 // Verify if name is on allowlist, true is returned
 TEST(NeedToIntrospect, ValidAllowListName)
 {
     AllowDenyList allowList = {"xyz.openbmc_project"};
-    AllowDenyList denyList;
     std::string processName = "xyz.openbmc_project.State.Host";
 
-    EXPECT_TRUE(needToIntrospect(processName, allowList, denyList));
-}
-
-// Verify if name is on denylist, false is returned
-TEST(NeedToIntrospect, ValidDenyListName)
-{
-    AllowDenyList allowList;
-    AllowDenyList denyList = {"xyz.openbmc_project.State.Host"};
-    std::string processName = "xyz.openbmc_project.State.Host";
-
-    EXPECT_FALSE(needToIntrospect(processName, allowList, denyList));
-}
-
-// Verify if name is on allowlist and denylist, false is returned
-TEST(NeedToIntrospect, ValidAllowAndDenyListName)
-{
-    AllowDenyList allowList = {"xyz.openbmc_project"};
-    AllowDenyList denyList = {"xyz.openbmc_project.State.Host"};
-    std::string processName = "xyz.openbmc_project.State.Host";
-
-    EXPECT_FALSE(needToIntrospect(processName, allowList, denyList));
+    EXPECT_TRUE(needToIntrospect(processName, allowList));
 }
