diff --git a/monitor/system.cpp b/monitor/system.cpp
index 5c2ed4e..476a7f1 100644
--- a/monitor/system.cpp
+++ b/monitor/system.cpp
@@ -50,8 +50,7 @@
 
 System::System(Mode mode, sdbusplus::bus_t& bus,
                const sdeventplus::Event& event) :
-    _mode(mode),
-    _bus(bus), _event(event),
+    _mode(mode), _bus(bus), _event(event),
 #ifdef MONITOR_USE_HOST_STATE
     _powerState(std::make_unique<HostPowerState>(
 #else
@@ -120,8 +119,8 @@
         // off here.
         std::for_each(_powerOffRules.begin(), _powerOffRules.end(),
                       [this](auto& rule) {
-            rule->check(PowerRuleState::runtime, _fanHealth);
-        });
+                          rule->check(PowerRuleState::runtime, _fanHealth);
+                      });
     }
 
     subscribeSensorsToServices();
@@ -329,8 +328,8 @@
         sensorStatus.push_back(sensor->functional());
     }
 
-    _fanHealth[fan.getName()] = std::make_tuple(fan.present(),
-                                                std::move(sensorStatus));
+    _fanHealth[fan.getName()] =
+        std::make_tuple(fan.present(), std::move(sensorStatus));
 }
 
 void System::fanStatusChange(const Fan& fan, bool skipRulesCheck)
@@ -341,8 +340,8 @@
     {
         std::for_each(_powerOffRules.begin(), _powerOffRules.end(),
                       [this](auto& rule) {
-            rule->check(PowerRuleState::runtime, _fanHealth);
-        });
+                          rule->check(PowerRuleState::runtime, _fanHealth);
+                      });
     }
 }
 
@@ -378,18 +377,18 @@
         // If no fan has its sensors on D-Bus, then there is a problem
         // with the fan controller.  Log an error and shut down.
         if (std::all_of(_fans.begin(), _fans.end(), [](const auto& fan) {
-            return fan->numSensorsOnDBusAtPowerOn() == 0;
-        }))
+                return fan->numSensorsOnDBusAtPowerOn() == 0;
+            }))
         {
 #if DELAY_HOST_CONTROL > 0
             sleep(DELAY_HOST_CONTROL);
             std::for_each(_fans.begin(), _fans.end(),
                           [powerStateOn](auto& fan) {
-                fan->powerStateChanged(powerStateOn);
-            });
+                              fan->powerStateChanged(powerStateOn);
+                          });
             if (std::all_of(_fans.begin(), _fans.end(), [](const auto& fan) {
-                return fan->numSensorsOnDBusAtPowerOn() == 0;
-            }))
+                    return fan->numSensorsOnDBusAtPowerOn() == 0;
+                }))
             {
                 handleOfflineFanController();
                 return;
@@ -407,12 +406,12 @@
 
         std::for_each(_powerOffRules.begin(), _powerOffRules.end(),
                       [this](auto& rule) {
-            rule->check(PowerRuleState::atPgood, _fanHealth);
-        });
+                          rule->check(PowerRuleState::atPgood, _fanHealth);
+                      });
         std::for_each(_powerOffRules.begin(), _powerOffRules.end(),
                       [this](auto& rule) {
-            rule->check(PowerRuleState::runtime, _fanHealth);
-        });
+                          rule->check(PowerRuleState::runtime, _fanHealth);
+                      });
     }
     else
     {
