diff --git a/group.hpp b/group.hpp
index 34f7afd..4e0a283 100644
--- a/group.hpp
+++ b/group.hpp
@@ -1,9 +1,10 @@
 #pragma once
 
+#include "manager.hpp"
+
 #include <sdbusplus/bus.hpp>
 #include <sdbusplus/server/object.hpp>
 #include <xyz/openbmc_project/Led/Group/server.hpp>
-#include "manager.hpp"
 namespace phosphor
 {
 namespace led
@@ -13,48 +14,46 @@
  *  @brief Manages group of LEDs and applies action on the elements of group
  */
 class Group : sdbusplus::server::object::object<
-              sdbusplus::xyz::openbmc_project::Led::server::Group>
+                  sdbusplus::xyz::openbmc_project::Led::server::Group>
 {
-    public:
-        Group() = delete;
-        ~Group() = default;
-        Group(const Group&) = delete;
-        Group& operator=(const Group&) = delete;
-        Group(Group&&) = default;
-        Group& operator=(Group&&) = default;
+  public:
+    Group() = delete;
+    ~Group() = default;
+    Group(const Group&) = delete;
+    Group& operator=(const Group&) = delete;
+    Group(Group&&) = default;
+    Group& operator=(Group&&) = default;
 
-        /** @brief Constructs LED Group
-         *
-         * @param[in] bus     - Handle to system dbus
-         * @param[in] objPath - The Dbus path that hosts LED group
-         * @param[in] manager - Reference to Manager
-         */
-        Group(sdbusplus::bus::bus& bus,
-              const std::string& objPath,
-              Manager& manager) :
+    /** @brief Constructs LED Group
+     *
+     * @param[in] bus     - Handle to system dbus
+     * @param[in] objPath - The Dbus path that hosts LED group
+     * @param[in] manager - Reference to Manager
+     */
+    Group(sdbusplus::bus::bus& bus, const std::string& objPath,
+          Manager& manager) :
 
-            sdbusplus::server::object::object<
+        sdbusplus::server::object::object<
             sdbusplus::xyz::openbmc_project::Led::server::Group>(
-                    bus, objPath.c_str()),
-            path(objPath),
-            manager(manager)
-        {
-            // Nothing to do here
-        }
+            bus, objPath.c_str()),
+        path(objPath), manager(manager)
+    {
+        // Nothing to do here
+    }
 
-        /** @brief Property SET Override function
-         *
-         *  @param[in]  value   -  True or False
-         *  @return             -  Success or exception thrown
-         */
-        bool asserted(bool value) override;
+    /** @brief Property SET Override function
+     *
+     *  @param[in]  value   -  True or False
+     *  @return             -  Success or exception thrown
+     */
+    bool asserted(bool value) override;
 
-    private:
-        /** @brief Path of the group instance */
-        std::string path;
+  private:
+    /** @brief Path of the group instance */
+    std::string path;
 
-        /** @brief Reference to Manager object */
-        Manager& manager;
+    /** @brief Reference to Manager object */
+    Manager& manager;
 };
 
 } // namespace led
