diff --git a/example/asio-example.cpp b/example/asio-example.cpp
index f7ec6b0..f17d285 100644
--- a/example/asio-example.cpp
+++ b/example/asio-example.cpp
@@ -39,7 +39,7 @@
     return testCount;
 }
 
-int methodWithMessage(sdbusplus::message::message& m, int test)
+int methodWithMessage(sdbusplus::message::message& /*m*/, int test)
 {
     std::cout << "methodWithMessage(m, " << test << ") -> " << (test + 1)
               << "\n";
@@ -131,9 +131,9 @@
     }
 }
 
-auto ipmiInterface(boost::asio::yield_context yield, uint8_t netFn, uint8_t lun,
-                   uint8_t cmd, std::vector<uint8_t>& data,
-                   const std::map<std::string, variant>& options)
+auto ipmiInterface(boost::asio::yield_context /*yield*/, uint8_t netFn,
+                   uint8_t lun, uint8_t cmd, std::vector<uint8_t>& /*data*/,
+                   const std::map<std::string, variant>& /*options*/)
 {
     std::vector<uint8_t> reply = {1, 2, 3, 4};
     uint8_t cc = 0;
@@ -343,7 +343,7 @@
     conn->async_method_call(
         [nonConstCapture = std::move(nonConstCapture)](
             boost::system::error_code ec,
-            const std::vector<std::string>& things) mutable {
+            const std::vector<std::string>& /*things*/) mutable {
             std::cout << "async_method_call callback\n";
             nonConstCapture += " stuff";
             if (ec)
diff --git a/sdbusplus/asio/connection.hpp b/sdbusplus/asio/connection.hpp
index 32f5625..339bd67 100644
--- a/sdbusplus/asio/connection.hpp
+++ b/sdbusplus/asio/connection.hpp
@@ -294,7 +294,7 @@
     {
         socket.async_read_some(
             boost::asio::null_buffers(),
-            [&](const boost::system::error_code& ec, std::size_t) {
+            [&](const boost::system::error_code& /*ec*/, std::size_t) {
                 if (process_discard())
                 {
                     read_immediate();
diff --git a/sdbusplus/asio/detail/async_send_handler.hpp b/sdbusplus/asio/detail/async_send_handler.hpp
index 58f6a34..332e463 100644
--- a/sdbusplus/asio/detail/async_send_handler.hpp
+++ b/sdbusplus/asio/detail/async_send_handler.hpp
@@ -53,7 +53,7 @@
         }
     }
     static int callback(sd_bus_message* mesg, void* userdata,
-                        sd_bus_error* error)
+                        sd_bus_error* /*error*/)
     {
         if (userdata == nullptr || mesg == nullptr)
         {
diff --git a/sdbusplus/asio/object_server.hpp b/sdbusplus/asio/object_server.hpp
index dde17e9..7b2e930 100644
--- a/sdbusplus/asio/object_server.hpp
+++ b/sdbusplus/asio/object_server.hpp
@@ -619,9 +619,10 @@
     }
 #endif // __cpp_if_constexpr
 
-    static int get_handler(sd_bus* bus, const char* path, const char* interface,
-                           const char* property, sd_bus_message* reply,
-                           void* userdata, sd_bus_error* error)
+    static int get_handler(sd_bus* /*bus*/, const char* /*path*/,
+                           const char* /*interface*/, const char* property,
+                           sd_bus_message* reply, void* userdata,
+                           sd_bus_error* error)
     {
         dbus_interface* data = static_cast<dbus_interface*>(userdata);
         auto func = data->callbacksGet_.find(property);
@@ -649,9 +650,10 @@
         return sd_bus_error_set_const(error, SD_BUS_ERROR_INVALID_ARGS, NULL);
     }
 
-    static int set_handler(sd_bus* bus, const char* path, const char* interface,
-                           const char* property, sd_bus_message* value,
-                           void* userdata, sd_bus_error* error)
+    static int set_handler(sd_bus* /*bus*/, const char* /*path*/,
+                           const char* /*interface*/, const char* property,
+                           sd_bus_message* value, void* userdata,
+                           sd_bus_error* error)
     {
         dbus_interface* data = static_cast<dbus_interface*>(userdata);
         auto func = data->callbacksSet_.find(property);
diff --git a/sdbusplus/bus/match.hpp b/sdbusplus/bus/match.hpp
index 75d62b8..228b86b 100644
--- a/sdbusplus/bus/match.hpp
+++ b/sdbusplus/bus/match.hpp
@@ -83,7 +83,8 @@
     slot::slot _slot;
     std::unique_ptr<callback_t> _callback = nullptr;
 
-    static int callCallback(sd_bus_message* m, void* context, sd_bus_error* e)
+    static int callCallback(sd_bus_message* m, void* context,
+                            sd_bus_error* /*e*/)
     {
         auto c = static_cast<callback_t*>(context);
         message::message message{m};
diff --git a/sdbusplus/message/append.hpp b/sdbusplus/message/append.hpp
index 655a9e1..cc34322 100644
--- a/sdbusplus/message/append.hpp
+++ b/sdbusplus/message/append.hpp
@@ -418,7 +418,7 @@
  */
 template <typename Tuple>
 std::enable_if_t<0 == std::tuple_size<Tuple>::value> inline append_tuple(
-    sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t)
+    sdbusplus::SdBusInterface* /*intf*/, sd_bus_message* /*m*/, Tuple&& /*t*/)
 {
 }
 
diff --git a/sdbusplus/message/read.hpp b/sdbusplus/message/read.hpp
index 736b56f..3872e4c 100644
--- a/sdbusplus/message/read.hpp
+++ b/sdbusplus/message/read.hpp
@@ -533,7 +533,7 @@
  */
 template <typename Tuple>
 std::enable_if_t<0 == std::tuple_size<Tuple>::value> inline read_tuple(
-    sdbusplus::SdBusInterface* intf, sd_bus_message* m, Tuple&& t)
+    sdbusplus::SdBusInterface* /*intf*/, sd_bus_message* /*m*/, Tuple&& /*t*/)
 {
 }
 
diff --git a/sdbusplus/server/object.hpp b/sdbusplus/server/object.hpp
index add9cd2..2926a6d 100644
--- a/sdbusplus/server/object.hpp
+++ b/sdbusplus/server/object.hpp
@@ -71,7 +71,7 @@
 template <>
 struct compose<>
 {
-    compose(bus::bus& bus, const char* path)
+    compose(bus::bus& /*bus*/, const char* /*path*/)
     {
     }
 };
diff --git a/sdbusplus/timer.hpp b/sdbusplus/timer.hpp
index d94cebb..69cbcb2 100644
--- a/sdbusplus/timer.hpp
+++ b/sdbusplus/timer.hpp
@@ -178,7 +178,8 @@
             CLOCK_MONOTONIC, // Time base
             UINT64_MAX,      // Expire time - way long time
             0,               // Use default event accuracy
-            [](sd_event_source* eventSource, uint64_t usec, void* userData) {
+            [](sd_event_source* /*eventSource*/, uint64_t /*usec*/,
+               void* userData) {
                 auto timer = static_cast<Timer*>(userData);
                 return timer->timeoutHandler();
             },     // Callback handler on timeout
diff --git a/test/bus/match.cpp b/test/bus/match.cpp
index 2074cde..3fa1647 100644
--- a/test/bus/match.cpp
+++ b/test/bus/match.cpp
@@ -29,7 +29,8 @@
 TEST_F(Match, FunctorIs_sd_bus_message_handler_t)
 {
     bool triggered = false;
-    auto trigger = [](sd_bus_message* m, void* context, sd_bus_error* e) {
+    auto trigger = [](sd_bus_message* /*m*/, void* context,
+                      sd_bus_error* /*e*/) {
         *static_cast<bool*>(context) = true;
         return 0;
     };
@@ -49,7 +50,7 @@
 TEST_F(Match, FunctorIs_LambdaTakingMessage)
 {
     bool triggered = false;
-    auto trigger = [&triggered](sdbusplus::message::message& m) {
+    auto trigger = [&triggered](sdbusplus::message::message& /*m*/) {
         triggered = true;
     };
 
@@ -73,7 +74,7 @@
       public:
         bool triggered = false;
 
-        void callback(sdbusplus::message::message& m)
+        void callback(sdbusplus::message::message& /*m*/)
         {
             triggered = true;
         }
diff --git a/test/message/types.cpp b/test/message/types.cpp
index 327fe71..4020559 100644
--- a/test/message/types.cpp
+++ b/test/message/types.cpp
@@ -4,7 +4,7 @@
 #include <gtest/gtest.h>
 
 template <typename... Args>
-auto dbus_string(Args&&... args)
+auto dbus_string(Args&&... /*args*/)
 {
     return std::string(sdbusplus::utility::tuple_to_array(
                            sdbusplus::message::types::type_id<Args...>())
diff --git a/tools/sdbusplus/templates/property.mako.prototype.hpp b/tools/sdbusplus/templates/property.mako.prototype.hpp
index e88fb4f..7780d6e 100644
--- a/tools/sdbusplus/templates/property.mako.prototype.hpp
+++ b/tools/sdbusplus/templates/property.mako.prototype.hpp
@@ -28,8 +28,8 @@
 }
 
 int ${classname}::_callback_get_${property.name}(
-        sd_bus* bus, const char* path, const char* interface,
-        const char* property, sd_bus_message* reply, void* context,
+        sd_bus* /*bus*/, const char* /*path*/, const char* /*interface*/,
+        const char* /*property*/, sd_bus_message* reply, void* context,
         sd_bus_error* error)
 {
     // TODO(venture): Can this except? I wouldn't think so.
@@ -83,8 +83,8 @@
     return ${property.camelCase}(val, false);
 }
 int ${classname}::_callback_set_${property.name}(
-        sd_bus* bus, const char* path, const char* interface,
-        const char* property, sd_bus_message* value, void* context,
+        sd_bus* /*bus*/, const char* /*path*/, const char* /*interface*/,
+        const char* /*property*/, sd_bus_message* value, void* context,
         sd_bus_error* error)
 {
     auto o = static_cast<${classname}*>(context);
