diff --git a/inc/button_factory.hpp b/inc/button_factory.hpp
index 1c513ef..0d427f7 100644
--- a/inc/button_factory.hpp
+++ b/inc/button_factory.hpp
@@ -4,6 +4,7 @@
 #include "gpio.hpp"
 
 #include <phosphor-logging/elog-errors.hpp>
+
 #include <unordered_map>
 
 using buttonIfCreatorMethod = std::function<std::unique_ptr<ButtonIface>(
@@ -16,7 +17,6 @@
 
 class ButtonFactory
 {
-
   public:
     static ButtonFactory& instance()
     {
@@ -35,7 +35,6 @@
     template <typename T>
     void addToRegistry()
     {
-
         buttonIfaceRegistry[std::string(T::getFormFactorName())] =
             [](sdbusplus::bus::bus& bus, EventPtr& event,
                buttonConfig& buttonCfg) {
@@ -52,7 +51,6 @@
                                                 EventPtr& event,
                                                 buttonConfig& buttonCfg)
     {
-
         // find matching name in the registry and call factory method.
         auto objectIter = buttonIfaceRegistry.find(name);
         if (objectIter != buttonIfaceRegistry.end())
diff --git a/inc/button_interface.hpp b/inc/button_interface.hpp
index f37a29c..0a0181b 100644
--- a/inc/button_interface.hpp
+++ b/inc/button_interface.hpp
@@ -9,7 +9,6 @@
 //
 class ButtonIface
 {
-
   public:
     ButtonIface(sdbusplus::bus::bus& bus, EventPtr& event,
                 buttonConfig& buttonCfg,
@@ -31,8 +30,7 @@
         }
     }
     virtual ~ButtonIface()
-    {
-    }
+    {}
 
     /**
      * @brief This method is called from sd-event provided callback function
@@ -47,7 +45,6 @@
     {
         if (userdata)
         {
-
             ButtonIface* buttonIface = static_cast<ButtonIface*>(userdata);
             buttonIface->handleEvent(es, fd, revents);
         }
@@ -70,7 +67,6 @@
 
     virtual void init()
     {
-
         // initialize the button io fd from the buttonConfig
         // which has fd stored when configGroupGpio is called
         for (auto gpioCfg : config.gpios)
diff --git a/inc/gpio.hpp b/inc/gpio.hpp
index a5b943a..6f0a67b 100644
--- a/inc/gpio.hpp
+++ b/inc/gpio.hpp
@@ -17,6 +17,7 @@
 
 #include <nlohmann/json.hpp>
 #include <sdbusplus/bus.hpp>
+
 #include <string>
 #include <vector>
 
diff --git a/inc/hostSelector_switch.hpp b/inc/hostSelector_switch.hpp
index acdae19..3f62012 100644
--- a/inc/hostSelector_switch.hpp
+++ b/inc/hostSelector_switch.hpp
@@ -8,11 +8,12 @@
 
 #include <unistd.h>
 
-#include <fstream>
-#include <iostream>
 #include <nlohmann/json.hpp>
 #include <phosphor-logging/elog-errors.hpp>
 
+#include <fstream>
+#include <iostream>
+
 static constexpr std::string_view HOST_SELECTOR = "HOST_SELECTOR";
 
 static constexpr auto INVALID_INDEX = std::numeric_limits<size_t>::max();
@@ -23,10 +24,11 @@
     high
 };
 
-class HostSelector final : public sdbusplus::server::object_t<
-                               sdbusplus::xyz::openbmc_project::Chassis::
-                                   Buttons::server::HostSelector>,
-                           public ButtonIface
+class HostSelector final :
+    public sdbusplus::server::object_t<
+        sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::
+            HostSelector>,
+    public ButtonIface
 {
   public:
     HostSelector(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
diff --git a/inc/id_button.hpp b/inc/id_button.hpp
index c58d264..3e9c9e4 100644
--- a/inc/id_button.hpp
+++ b/inc/id_button.hpp
@@ -28,12 +28,11 @@
 
 static constexpr std::string_view ID_BUTTON = "ID_BTN";
 
-class IDButton
-    : public sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::ID>,
-      public ButtonIface
+class IDButton :
+    public sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::ID>,
+    public ButtonIface
 {
-
   public:
     IDButton(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
              buttonConfig& buttonCfg) :
diff --git a/inc/power_button.hpp b/inc/power_button.hpp
index bef2662..9bf8744 100644
--- a/inc/power_button.hpp
+++ b/inc/power_button.hpp
@@ -24,15 +24,16 @@
 
 #include <unistd.h>
 
-#include <chrono>
 #include <phosphor-logging/elog-errors.hpp>
 
+#include <chrono>
+
 static constexpr std::string_view POWER_BUTTON = "POWER_BUTTON";
 
-class PowerButton
-    : public sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Power>,
-      public ButtonIface
+class PowerButton :
+    public sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Power>,
+    public ButtonIface
 {
   public:
     PowerButton(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
@@ -47,7 +48,6 @@
 
     ~PowerButton()
     {
-
         deInit();
     }
 
diff --git a/inc/reset_button.hpp b/inc/reset_button.hpp
index 8e15740..3bd7e3f 100644
--- a/inc/reset_button.hpp
+++ b/inc/reset_button.hpp
@@ -28,10 +28,10 @@
 
 static constexpr std::string_view RESET_BUTTON = "RESET_BUTTON";
 
-class ResetButton
-    : public sdbusplus::server::object::object<
-          sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Reset>,
-      public ButtonIface
+class ResetButton :
+    public sdbusplus::server::object::object<
+        sdbusplus::xyz::openbmc_project::Chassis::Buttons::server::Reset>,
+    public ButtonIface
 {
   public:
     ResetButton(sdbusplus::bus::bus& bus, const char* path, EventPtr& event,
