diff --git a/.clang-tidy b/.clang-tidy
index 873d901..4642279 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -204,6 +204,7 @@
 misc-unconventional-assign-operator,
 misc-uniqueptr-reset-release,
 misc-unused-using-decls,
+modernize-avoid-bind,
 modernize-deprecated-headers,
 modernize-deprecated-ios-base-aliases,
 modernize-loop-convert,
diff --git a/fault-monitor/fru-fault-monitor.hpp b/fault-monitor/fru-fault-monitor.hpp
index e5ddc53..fc6cafa 100644
--- a/fault-monitor/fru-fault-monitor.hpp
+++ b/fault-monitor/fru-fault-monitor.hpp
@@ -47,8 +47,7 @@
     Remove(sdbusplus::bus_t& bus, const std::string& path) :
         inventoryPath(path),
         matchRemoved(bus, match(path),
-                     std::bind(std::mem_fn(&Remove::removed), this,
-                               std::placeholders::_1))
+                     [this](sdbusplus::message_t& m) { removed(m); })
     {
         // Do nothing
     }
@@ -99,12 +98,11 @@
      *  @param[in] bus -  The Dbus bus object
      */
     explicit Add(sdbusplus::bus_t& bus) :
-        matchCreated(
-            bus,
-            sdbusplus::bus::match::rules::interfacesAdded() +
-                sdbusplus::bus::match::rules::path_namespace(
-                    "/xyz/openbmc_project/logging"),
-            std::bind(std::mem_fn(&Add::created), this, std::placeholders::_1))
+        matchCreated(bus,
+                     sdbusplus::bus::match::rules::interfacesAdded() +
+                         sdbusplus::bus::match::rules::path_namespace(
+                             "/xyz/openbmc_project/logging"),
+                     [this](sdbusplus::message_t& m) { created(m); })
     {
         processExistingCallouts(bus);
     }
diff --git a/fault-monitor/operational-status-monitor.hpp b/fault-monitor/operational-status-monitor.hpp
index 3b67edb..6bd2efc 100644
--- a/fault-monitor/operational-status-monitor.hpp
+++ b/fault-monitor/operational-status-monitor.hpp
@@ -47,8 +47,7 @@
                     "sender='xyz.openbmc_project.Inventory.Manager', "
                     "arg0namespace='xyz.openbmc_project.State.Decorator."
                     "OperationalStatus'",
-                    std::bind(std::mem_fn(&Monitor::matchHandler), this,
-                              std::placeholders::_1))
+                    [this](sdbusplus::message_t& m) { matchHandler(m); })
 
     {}
 
diff --git a/manager/json-config.hpp b/manager/json-config.hpp
index 64441b3..d02af56 100644
--- a/manager/json-config.hpp
+++ b/manager/json-config.hpp
@@ -41,8 +41,7 @@
             sdbusplus::bus::match::rules::interfacesAdded() +
                 sdbusplus::bus::match::rules::sender(
                     "xyz.openbmc_project.EntityManager"),
-            std::bind(&JsonConfig::ifacesAddedCallback, this,
-                      std::placeholders::_1));
+            [this](sdbusplus::message_t& m) { ifacesAddedCallback(m); });
         getFilePath();
 
         if (!confFile.empty())
diff --git a/manager/lamptest/lamptest.hpp b/manager/lamptest/lamptest.hpp
index 1d9dd86..c7804c8 100644
--- a/manager/lamptest/lamptest.hpp
+++ b/manager/lamptest/lamptest.hpp
@@ -38,8 +38,8 @@
      * @param[in] manager - reference to manager instance
      */
     LampTest(const sdeventplus::Event& event, Manager& manager) :
-        timer(event, std::bind(std::mem_fn(&LampTest::timeOutHandler), this)),
-        manager(manager), groupObj(NULL)
+        timer(event, [this](auto&) { timeOutHandler(); }), manager(manager),
+        groupObj(NULL)
     {
         // Get the force update and/or skipped physical LEDs names from the
         // lamp-test-led-overrides.json file during lamp
diff --git a/manager/led-main.cpp b/manager/led-main.cpp
index 450f4d7..7791747 100644
--- a/manager/led-main.cpp
+++ b/manager/led-main.cpp
@@ -70,14 +70,17 @@
 
     groups.emplace_back(std::make_unique<phosphor::led::Group>(
         bus, LAMP_TEST_OBJECT, manager, serializePtr,
-        std::bind(std::mem_fn(&phosphor::led::LampTest::requestHandler),
-                  &lampTest, std::placeholders::_1, std::placeholders::_2)));
+        [&lampTest](auto&& arg1, auto&& arg2) {
+            return lampTest.requestHandler(std::forward<decltype(arg1)>(arg1),
+                                           std::forward<decltype(arg2)>(arg2));
+        }));
 
     // Register a lamp test method in the manager class, and call this method
     // when the lamp test is started
-    manager.setLampTestCallBack(
-        std::bind(std::mem_fn(&phosphor::led::LampTest::processLEDUpdates),
-                  &lampTest, std::placeholders::_1, std::placeholders::_2));
+    manager.setLampTestCallBack([&lampTest](auto&& arg1, auto&& arg2) {
+        return lampTest.processLEDUpdates(std::forward<decltype(arg1)>(arg1),
+                                          std::forward<decltype(arg2)>(arg2));
+    });
 #endif
 
     /** Now create so many dbus objects as there are groups */
