diff --git a/presence/fallback.cpp b/presence/fallback.cpp
index 4a025a7..36824fc 100644
--- a/presence/fallback.cpp
+++ b/presence/fallback.cpp
@@ -31,7 +31,7 @@
 namespace presence
 {
 
-void Fallback::stateChanged(bool present, PresenceSensor& sensor)
+void Fallback::stateChanged(bool present, PresenceSensor& /*sensor*/)
 {
     if (!present)
     {
diff --git a/presence/fallback.hpp b/presence/fallback.hpp
index bd9d1a5..d6bad02 100644
--- a/presence/fallback.hpp
+++ b/presence/fallback.hpp
@@ -58,7 +58,7 @@
      *             to the active sensor.
      * @param[in] sensor - The sensor that changed state.
      */
-    void stateChanged(bool present, PresenceSensor& sensor) override;
+    void stateChanged(bool present, PresenceSensor& /*sensor*/) override;
 
     /**
      * @brief monitor
diff --git a/presence/gpio.hpp b/presence/gpio.hpp
index 317e264..fc650ca 100644
--- a/presence/gpio.hpp
+++ b/presence/gpio.hpp
@@ -159,7 +159,7 @@
      *
      * @param[in] fanInventoryPath - The fan inventory D-Bus object path.
      */
-    void logConflict(const std::string& fanInventoryPath) const override
+    void logConflict(const std::string& /*fanInventoryPath*/) const override
     {}
 
   private:
diff --git a/presence/json_parser.cpp b/presence/json_parser.cpp
index e09317b..7858c4f 100644
--- a/presence/json_parser.cpp
+++ b/presence/json_parser.cpp
@@ -61,8 +61,7 @@
 
     if (!_loaded)
     {
-        process(
-            config::load(config::getConfFile(_bus, confAppName, confFileName)));
+        process(config::load(config::getConfFile(confAppName, confFileName)));
 
         _loaded = true;
 
@@ -78,8 +77,8 @@
     return _policies;
 }
 
-void JsonConfig::sighupHandler(sdeventplus::source::Signal& sigSrc,
-                               const struct signalfd_siginfo* sigInfo)
+void JsonConfig::sighupHandler(sdeventplus::source::Signal& /*sigSrc*/,
+                               const struct signalfd_siginfo* /*sigInfo*/)
 {
     try
     {
@@ -88,8 +87,7 @@
         _reporter.reset();
 
         // Load and process the json configuration
-        process(
-            config::load(config::getConfFile(_bus, confAppName, confFileName)));
+        process(config::load(config::getConfFile(confAppName, confFileName)));
 
         for (auto& p : _policies)
         {
diff --git a/presence/json_parser.hpp b/presence/json_parser.hpp
index dfd2ce2..216c235 100644
--- a/presence/json_parser.hpp
+++ b/presence/json_parser.hpp
@@ -71,8 +71,8 @@
      * @param[in] sigSrc - sd_event_source signal wrapper
      * @param[in] sigInfo - signal info on signal fd
      */
-    void sighupHandler(sdeventplus::source::Signal& sigSrc,
-                       const struct signalfd_siginfo* sigInfo);
+    void sighupHandler(sdeventplus::source::Signal& /*sigSrc*/,
+                       const struct signalfd_siginfo* /*sigInfo*/);
 
     /**
      * @brief Parses and populates the fan presence policies from
