diff --git a/control/manager.hpp b/control/manager.hpp
index c87d0d8..34ae0b9 100644
--- a/control/manager.hpp
+++ b/control/manager.hpp
@@ -1,12 +1,14 @@
 #pragma once
 
-#include <memory>
-#include <vector>
-#include <sdbusplus/bus.hpp>
-#include <sdeventplus/event.hpp>
 #include "types.hpp"
 #include "zone.hpp"
 
+#include <sdbusplus/bus.hpp>
+#include <sdeventplus/event.hpp>
+
+#include <memory>
+#include <vector>
+
 namespace phosphor
 {
 namespace fan
@@ -14,75 +16,70 @@
 namespace control
 {
 
-using ZoneMap = std::map<unsigned int,
-                         std::unique_ptr<Zone>>;
+using ZoneMap = std::map<unsigned int, std::unique_ptr<Zone>>;
 
 /**
  * @class Fan control manager
  */
 class Manager
 {
-    public:
+  public:
+    Manager() = delete;
+    Manager(const Manager&) = delete;
+    Manager(Manager&&) = default;
+    Manager& operator=(const Manager&) = delete;
+    Manager& operator=(Manager&&) = delete;
+    ~Manager() = default;
 
-        Manager() = delete;
-        Manager(const Manager&) = delete;
-        Manager(Manager&&) = default;
-        Manager& operator=(const Manager&) = delete;
-        Manager& operator=(Manager&&) = delete;
-        ~Manager() = default;
+    /**
+     * Constructor
+     * Creates the Zone objects based on the
+     * _zoneLayouts data.
+     *
+     * @param[in] bus - The dbus object
+     * @param[in] event - The event loop
+     * @param[in] mode - The control mode
+     */
+    Manager(sdbusplus::bus::bus& bus, const sdeventplus::Event& event,
+            Mode mode);
 
-        /**
-         * Constructor
-         * Creates the Zone objects based on the
-         * _zoneLayouts data.
-         *
-         * @param[in] bus - The dbus object
-         * @param[in] event - The event loop
-         * @param[in] mode - The control mode
-         */
-        Manager(sdbusplus::bus::bus& bus,
-                const sdeventplus::Event& event,
-                Mode mode);
+    /**
+     * Does the fan control inititialization, which is
+     * setting fans to full, delaying so they
+     * can get there, and starting a target.
+     */
+    void doInit();
 
-        /**
-         * Does the fan control inititialization, which is
-         * setting fans to full, delaying so they
-         * can get there, and starting a target.
-         */
-        void doInit();
+  private:
+    /**
+     * The dbus object
+     */
+    sdbusplus::bus::bus& _bus;
 
-    private:
+    /**
+     * The sdbusplus object manager
+     */
+    sdbusplus::server::manager::manager _objMgr;
 
-        /**
-         * The dbus object
-         */
-        sdbusplus::bus::bus& _bus;
+    /**
+     * The fan zones in the system
+     */
+    ZoneMap _zones;
 
-        /**
-         * The sdbusplus object manager
-         */
-        sdbusplus::server::manager::manager _objMgr;
+    /**
+     * The fan zone layout for the system.
+     * This is generated data.
+     */
+    static const std::vector<ZoneGroup> _zoneLayouts;
 
-        /**
-         * The fan zones in the system
-         */
-        ZoneMap _zones;
-
-        /**
-         * The fan zone layout for the system.
-         * This is generated data.
-         */
-        static const std::vector<ZoneGroup> _zoneLayouts;
-
-        /**
-         * The number of seconds to delay after
-         * fans get set to high speed on a power on
-         * to give them a chance to get there.
-         */
-        static const unsigned int _powerOnDelay;
+    /**
+     * The number of seconds to delay after
+     * fans get set to high speed on a power on
+     * to give them a chance to get there.
+     */
+    static const unsigned int _powerOnDelay;
 };
 
-
-}
-}
-}
+} // namespace control
+} // namespace fan
+} // namespace phosphor
