diff --git a/include/Overlay.hpp b/include/Overlay.hpp
index 54a8964..d3c8eff 100644
--- a/include/Overlay.hpp
+++ b/include/Overlay.hpp
@@ -18,4 +18,4 @@
 #include <nlohmann/json.hpp>
 
 void unloadAllOverlays(void);
-bool loadOverlays(const nlohmann::json &systemConfiguration);
\ No newline at end of file
+bool loadOverlays(const nlohmann::json& systemConfiguration);
\ No newline at end of file
diff --git a/include/Utils.hpp b/include/Utils.hpp
index 176f7ef..990eb14 100644
--- a/include/Utils.hpp
+++ b/include/Utils.hpp
@@ -16,26 +16,27 @@
 
 #pragma once
 #include "filesystem.hpp"
+
 #include <nlohmann/json.hpp>
 #include <sdbusplus/exception.hpp>
 
-bool findFiles(const std::filesystem::path &dirPath,
-               const std::string &matchString,
-               std::vector<std::filesystem::path> &foundPaths);
+bool findFiles(const std::filesystem::path& dirPath,
+               const std::string& matchString,
+               std::vector<std::filesystem::path>& foundPaths);
 
-bool validateJson(const nlohmann::json &schemaFile,
-                  const nlohmann::json &input);
+bool validateJson(const nlohmann::json& schemaFile,
+                  const nlohmann::json& input);
 struct DBusInternalError final : public sdbusplus::exception_t
 {
-    const char *name() const noexcept override
+    const char* name() const noexcept override
     {
         return "org.freedesktop.DBus.Error.Failed";
     };
-    const char *description() const noexcept override
+    const char* description() const noexcept override
     {
         return "internal error";
     };
-    const char *what() const noexcept override
+    const char* what() const noexcept override
     {
         return "org.freedesktop.DBus.Error.Failed: "
                "internal error";
diff --git a/include/VariantVisitors.hpp b/include/VariantVisitors.hpp
index 4b4adf4..935803e 100644
--- a/include/VariantVisitors.hpp
+++ b/include/VariantVisitors.hpp
@@ -19,56 +19,60 @@
 
 struct VariantToFloatVisitor
 {
-    template <typename T> float operator()(const T &t) const
+    template <typename T>
+    float operator()(const T& t) const
     {
         return static_cast<float>(t);
     }
 };
 template <>
 inline float VariantToFloatVisitor::
-    operator()<std::string>(const std::string &s) const
+    operator()<std::string>(const std::string& s) const
 {
     throw std::invalid_argument("Cannot translate string to float");
 }
 
 struct VariantToIntVisitor
 {
-    template <typename T> int operator()(const T &t) const
+    template <typename T>
+    int operator()(const T& t) const
     {
         return static_cast<int>(t);
     }
 };
 template <>
 inline int VariantToIntVisitor::
-    operator()<std::string>(const std::string &s) const
+    operator()<std::string>(const std::string& s) const
 {
     throw std::invalid_argument("Cannot translate string to int");
 }
 
 struct VariantToUnsignedIntVisitor
 {
-    template <typename T> unsigned int operator()(const T &t) const
+    template <typename T>
+    unsigned int operator()(const T& t) const
     {
         return static_cast<int>(t);
     }
 };
 template <>
 inline unsigned int VariantToUnsignedIntVisitor::
-    operator()<std::string>(const std::string &s) const
+    operator()<std::string>(const std::string& s) const
 {
     throw std::invalid_argument("Cannot translate string to unsigned int");
 }
 
 struct VariantToStringVisitor
 {
-    template <typename T> std::string operator()(const T &t) const
+    template <typename T>
+    std::string operator()(const T& t) const
     {
         return std::to_string(t);
     }
 };
 template <>
 inline std::string VariantToStringVisitor::
-    operator()<std::string>(const std::string &s) const
+    operator()<std::string>(const std::string& s) const
 {
     return s;
 }
diff --git a/include/devices.hpp b/include/devices.hpp
index 24cba32..ccce5d9 100644
--- a/include/devices.hpp
+++ b/include/devices.hpp
@@ -22,7 +22,7 @@
 
 struct CmpStr
 {
-    bool operator()(const char *a, const char *b) const
+    bool operator()(const char* a, const char* b) const
     {
         return std::strcmp(a, b) < 0;
     }
@@ -30,13 +30,13 @@
 
 struct ExportTemplate
 {
-    ExportTemplate(const char *parameters, const char *device) :
+    ExportTemplate(const char* parameters, const char* device) :
         parameters(parameters), device(device){};
-    const char *parameters;
-    const char *device;
+    const char* parameters;
+    const char* device;
 };
 
-const boost::container::flat_map<const char *, ExportTemplate, CmpStr>
+const boost::container::flat_map<const char*, ExportTemplate, CmpStr>
     exportTemplates{
         {{"EEPROM", ExportTemplate("eeprom $Address",
                                    "/sys/bus/i2c/devices/i2c-$Bus/new_device")},
