diff --git a/monitor/fan.hpp b/monitor/fan.hpp
index a581b3b..5136cee 100644
--- a/monitor/fan.hpp
+++ b/monitor/fan.hpp
@@ -1,13 +1,15 @@
 #pragma once
 
-#include <sdbusplus/bus.hpp>
-#include <sdeventplus/event.hpp>
-#include <tuple>
-#include <vector>
 #include "tach_sensor.hpp"
 #include "trust_manager.hpp"
 #include "types.hpp"
 
+#include <sdbusplus/bus.hpp>
+#include <sdeventplus/event.hpp>
+
+#include <tuple>
+#include <vector>
+
 namespace phosphor
 {
 namespace fan
@@ -21,7 +23,8 @@
  * An exception type for sensors that don't exist or
  * are otherwise inaccessible.
  */
-class InvalidSensorError : public std::exception {};
+class InvalidSensorError : public std::exception
+{};
 
 /**
  * @class Fan
@@ -64,140 +67,135 @@
     using Object = sdbusplus::message::object_path;
     using ObjectMap = std::map<Object, InterfaceMap>;
 
-    public:
+  public:
+    Fan() = delete;
+    Fan(const Fan&) = delete;
+    Fan(Fan&&) = default;
+    Fan& operator=(const Fan&) = delete;
+    Fan& operator=(Fan&&) = default;
+    ~Fan() = default;
 
-        Fan() = delete;
-        Fan(const Fan&) = delete;
-        Fan(Fan&&) = default;
-        Fan& operator=(const Fan&) = delete;
-        Fan& operator=(Fan&&) = default;
-        ~Fan() = default;
+    /**
+     * @brief Constructor
+     *
+     * @param mode - mode of fan monitor
+     * @param bus - the dbus object
+     * @param event - event loop reference
+     * @param trust - the tach trust manager
+     * @param def - the fan definition structure
+     */
+    Fan(Mode mode, sdbusplus::bus::bus& bus, const sdeventplus::Event& event,
+        std::unique_ptr<trust::Manager>& trust, const FanDefinition& def);
 
-        /**
-         * @brief Constructor
-         *
-         * @param mode - mode of fan monitor
-         * @param bus - the dbus object
-         * @param event - event loop reference
-         * @param trust - the tach trust manager
-         * @param def - the fan definition structure
-         */
-        Fan(Mode mode,
-            sdbusplus::bus::bus& bus,
-            const sdeventplus::Event& event,
-            std::unique_ptr<trust::Manager>& trust,
-            const FanDefinition& def);
+    /**
+     * @brief Callback function for when an input sensor changes
+     *
+     * Starts a timer, where if it expires then the sensor
+     * was out of range for too long and can be considered not functional.
+     */
+    void tachChanged(TachSensor& sensor);
 
-        /**
-         * @brief Callback function for when an input sensor changes
-         *
-         * Starts a timer, where if it expires then the sensor
-         * was out of range for too long and can be considered not functional.
-         */
-        void tachChanged(TachSensor& sensor);
+    /**
+     * @brief Calls tachChanged(sensor) on each sensor
+     */
+    void tachChanged();
 
-        /**
-         * @brief Calls tachChanged(sensor) on each sensor
-         */
-        void tachChanged();
+    /**
+     * @brief The callback function for the timer
+     *
+     * Sets the sensor to not functional.
+     * If enough sensors are now not functional,
+     * updates the functional status of the whole
+     * fan in the inventory.
+     *
+     * @param[in] sensor - the sensor whose timer expired
+     */
+    void timerExpired(TachSensor& sensor);
 
-        /**
-         * @brief The callback function for the timer
-         *
-         * Sets the sensor to not functional.
-         * If enough sensors are now not functional,
-         * updates the functional status of the whole
-         * fan in the inventory.
-         *
-         * @param[in] sensor - the sensor whose timer expired
-         */
-        void timerExpired(TachSensor& sensor);
+    /**
+     * @brief Get the name of the fan
+     *
+     * @return - The fan name
+     */
+    inline const std::string& getName() const
+    {
+        return _name;
+    }
 
-        /**
-         * @brief Get the name of the fan
-         *
-         * @return - The fan name
-         */
-        inline const std::string& getName() const
-        {
-            return _name;
-        }
+    /**
+     * @brief Finds the target speed of this fan
+     *
+     * Finds the target speed from the list of sensors that make up this
+     * fan. At least one sensor should contain a target speed value.
+     *
+     * @return - The target speed found from the list of sensors on the fan
+     */
+    uint64_t findTargetSpeed();
 
-        /**
-         * @brief Finds the target speed of this fan
-         *
-         * Finds the target speed from the list of sensors that make up this
-         * fan. At least one sensor should contain a target speed value.
-         *
-         * @return - The target speed found from the list of sensors on the fan
-         */
-        uint64_t findTargetSpeed();
+  private:
+    /**
+     * @brief Returns true if the sensor input is not within
+     * some deviation of the target.
+     *
+     * @param[in] sensor - the sensor to check
+     */
+    bool outOfRange(const TachSensor& sensor);
 
-    private:
+    /**
+     * @brief Returns true if too many sensors are nonfunctional
+     *        as defined by _numSensorFailsForNonFunc
+     */
+    bool tooManySensorsNonfunctional();
 
-        /**
-         * @brief Returns true if the sensor input is not within
-         * some deviation of the target.
-         *
-         * @param[in] sensor - the sensor to check
-         */
-        bool outOfRange(const TachSensor& sensor);
+    /**
+     * @brief Updates the Functional property in the inventory
+     *        for the fan based on the value passed in.
+     *
+     * @param[in] functional - If the Functional property should
+     *                         be set to true or false.
+     */
+    void updateInventory(bool functional);
 
-        /**
-         * @brief Returns true if too many sensors are nonfunctional
-         *        as defined by _numSensorFailsForNonFunc
-         */
-        bool tooManySensorsNonfunctional();
+    /**
+     * @brief the dbus object
+     */
+    sdbusplus::bus::bus& _bus;
 
-        /**
-         * @brief Updates the Functional property in the inventory
-         *        for the fan based on the value passed in.
-         *
-         * @param[in] functional - If the Functional property should
-         *                         be set to true or false.
-         */
-        void updateInventory(bool functional);
+    /**
+     * @brief The inventory name of the fan
+     */
+    const std::string _name;
 
-        /**
-         * @brief the dbus object
-         */
-        sdbusplus::bus::bus& _bus;
+    /**
+     * @brief The percentage that the input speed must be below
+     *        the target speed to be considered an error.
+     *        Between 0 and 100.
+     */
+    const size_t _deviation;
 
-        /**
-         * @brief The inventory name of the fan
-         */
-        const std::string _name;
+    /**
+     * The number of sensors that must be nonfunctional at the
+     * same time in order for the fan to be set to nonfunctional
+     * in the inventory.
+     */
+    const size_t _numSensorFailsForNonFunc;
 
-        /**
-         * @brief The percentage that the input speed must be below
-         *        the target speed to be considered an error.
-         *        Between 0 and 100.
-         */
-        const size_t _deviation;
+    /**
+     * @brief The current functional state of the fan
+     */
+    bool _functional = true;
 
-        /**
-         * The number of sensors that must be nonfunctional at the
-         * same time in order for the fan to be set to nonfunctional
-         * in the inventory.
-         */
-        const size_t _numSensorFailsForNonFunc;
+    /**
+     * The sensor objects for the fan
+     */
+    std::vector<std::shared_ptr<TachSensor>> _sensors;
 
-        /**
-         * @brief The current functional state of the fan
-         */
-        bool _functional = true;
-
-        /**
-         * The sensor objects for the fan
-         */
-        std::vector<std::shared_ptr<TachSensor>> _sensors;
-
-        /**
-         * The tach trust manager object
-         */
-        std::unique_ptr<trust::Manager>& _trustManager;
+    /**
+     * The tach trust manager object
+     */
+    std::unique_ptr<trust::Manager>& _trustManager;
 };
 
-}
-}
-}
+} // namespace monitor
+} // namespace fan
+} // namespace phosphor
