diff --git a/command/channel_auth.cpp b/command/channel_auth.cpp
index e83ad95..8368412 100644
--- a/command/channel_auth.cpp
+++ b/command/channel_auth.cpp
@@ -24,7 +24,7 @@
 
 std::vector<uint8_t>
     GetChannelCapabilities(const std::vector<uint8_t>& inPayload,
-                           std::shared_ptr<message::Handler>& handler)
+                           std::shared_ptr<message::Handler>& /* handler */)
 {
     auto request =
         reinterpret_cast<const GetChannelCapabilitiesReq*>(inPayload.data());
@@ -183,7 +183,7 @@
  **/
 std::vector<uint8_t>
     getChannelCipherSuites(const std::vector<uint8_t>& inPayload,
-                           std::shared_ptr<message::Handler>& handler)
+                           std::shared_ptr<message::Handler>& /* handler */)
 {
     const auto errorResponse = [](uint8_t cc) {
         std::vector<uint8_t> rsp(1);
diff --git a/command/open_session.cpp b/command/open_session.cpp
index f88f433..0d82a06 100644
--- a/command/open_session.cpp
+++ b/command/open_session.cpp
@@ -11,8 +11,9 @@
 namespace command
 {
 
-std::vector<uint8_t> openSession(const std::vector<uint8_t>& inPayload,
-                                 std::shared_ptr<message::Handler>& handler)
+std::vector<uint8_t>
+    openSession(const std::vector<uint8_t>& inPayload,
+                std::shared_ptr<message::Handler>& /* handler */)
 {
     auto request =
         reinterpret_cast<const OpenSessionRequest*>(inPayload.data());
diff --git a/command/payload_cmds.cpp b/command/payload_cmds.cpp
index 01e1117..4083209 100644
--- a/command/payload_cmds.cpp
+++ b/command/payload_cmds.cpp
@@ -111,7 +111,7 @@
 
 std::vector<uint8_t>
     deactivatePayload(const std::vector<uint8_t>& inPayload,
-                      std::shared_ptr<message::Handler>& handler)
+                      std::shared_ptr<message::Handler>& /* handler */)
 {
     auto request =
         reinterpret_cast<const DeactivatePayloadRequest*>(inPayload.data());
@@ -183,7 +183,7 @@
 
 std::vector<uint8_t>
     getPayloadStatus(const std::vector<uint8_t>& inPayload,
-                     std::shared_ptr<message::Handler>& handler)
+                     std::shared_ptr<message::Handler>& /* handler */)
 {
     auto request =
         reinterpret_cast<const GetPayloadStatusRequest*>(inPayload.data());
@@ -215,8 +215,9 @@
     return outPayload;
 }
 
-std::vector<uint8_t> getPayloadInfo(const std::vector<uint8_t>& inPayload,
-                                    std::shared_ptr<message::Handler>& handler)
+std::vector<uint8_t>
+    getPayloadInfo(const std::vector<uint8_t>& inPayload,
+                   std::shared_ptr<message::Handler>& /* handler */)
 {
     auto request =
         reinterpret_cast<const GetPayloadInfoRequest*>(inPayload.data());
diff --git a/command/rakp12.cpp b/command/rakp12.cpp
index bec5c4f..a68cdcb 100644
--- a/command/rakp12.cpp
+++ b/command/rakp12.cpp
@@ -39,7 +39,7 @@
                                  messageArgs.value().c_str()));
 }
 std::vector<uint8_t> RAKP12(const std::vector<uint8_t>& inPayload,
-                            std::shared_ptr<message::Handler>& handler)
+                            std::shared_ptr<message::Handler>& /* handler */)
 {
     auto request = reinterpret_cast<const RAKP1request*>(inPayload.data());
     // verify inPayload minimum size
diff --git a/command/rakp34.cpp b/command/rakp34.cpp
index bee475d..626bc15 100644
--- a/command/rakp34.cpp
+++ b/command/rakp34.cpp
@@ -66,7 +66,7 @@
 }
 
 std::vector<uint8_t> RAKP34(const std::vector<uint8_t>& inPayload,
-                            std::shared_ptr<message::Handler>& handler)
+                            std::shared_ptr<message::Handler>& /* handler */)
 {
     std::vector<uint8_t> outPayload(sizeof(RAKP4response));
     auto request = reinterpret_cast<const RAKP3request*>(inPayload.data());
diff --git a/message_parsers.cpp b/message_parsers.cpp
index e5e9721..d0fe344 100644
--- a/message_parsers.cpp
+++ b/message_parsers.cpp
@@ -133,8 +133,9 @@
     return message;
 }
 
-std::vector<uint8_t> flatten(const std::shared_ptr<Message>& outMessage,
-                             const std::shared_ptr<session::Session>& session)
+std::vector<uint8_t>
+    flatten(const std::shared_ptr<Message>& outMessage,
+            const std::shared_ptr<session::Session>& /* session */)
 {
     std::vector<uint8_t> packet(sizeof(SessionHeader_t));
 
@@ -316,7 +317,7 @@
 }
 
 bool verifyPacketIntegrity(const std::vector<uint8_t>& packet,
-                           const std::shared_ptr<Message>& message,
+                           const std::shared_ptr<Message>& /* message */,
                            size_t payloadLen,
                            const std::shared_ptr<session::Session>& session)
 {
@@ -369,7 +370,7 @@
 }
 
 void addIntegrityData(std::vector<uint8_t>& packet,
-                      const std::shared_ptr<Message>& message,
+                      const std::shared_ptr<Message>& /* message */,
                       size_t payloadLen,
                       const std::shared_ptr<session::Session>& session)
 {
@@ -394,7 +395,8 @@
 
 std::vector<uint8_t>
     decryptPayload(const std::vector<uint8_t>& packet,
-                   const std::shared_ptr<Message>& message, size_t payloadLen,
+                   const std::shared_ptr<Message>& /* message */,
+                   size_t payloadLen,
                    const std::shared_ptr<session::Session>& session)
 {
     return session->getCryptAlgo()->decryptPayload(
diff --git a/sd_event_loop.cpp b/sd_event_loop.cpp
index ee3395c..ca0def9 100644
--- a/sd_event_loop.cpp
+++ b/sd_event_loop.cpp
@@ -241,12 +241,12 @@
 {
     // set up boost::asio signal handling
     boost::asio::signal_set signals(*io, SIGINT, SIGTERM);
-    signals.async_wait(
-        [this](const boost::system::error_code& error, int signalNumber) {
-            udpSocket->cancel();
-            udpSocket->close();
-            io->stop();
-        });
+    signals.async_wait([this](const boost::system::error_code& /* error */,
+                              int /* signalNumber */) {
+        udpSocket->cancel();
+        udpSocket->close();
+        io->stop();
+    });
 
     startRmcpReceive();
 
