diff --git a/sensor-monitor/shutdown_alarm_monitor.cpp b/sensor-monitor/shutdown_alarm_monitor.cpp
index 214e3a3..9b51a8b 100644
--- a/sensor-monitor/shutdown_alarm_monitor.cpp
+++ b/sensor-monitor/shutdown_alarm_monitor.cpp
@@ -88,8 +88,7 @@
 ShutdownAlarmMonitor::ShutdownAlarmMonitor(
     sdbusplus::bus_t& bus, sdeventplus::Event& event,
     std::shared_ptr<PowerState> powerState) :
-    bus(bus),
-    event(event), _powerState(std::move(powerState)),
+    bus(bus), event(event), _powerState(std::move(powerState)),
     hardShutdownMatch(bus,
                       "type='signal',member='PropertiesChanged',"
                       "path_namespace='/xyz/openbmc_project/sensors',"
@@ -133,13 +132,14 @@
 
         auto shutdownType2 = shutdownType;
 
-        std::for_each(paths.begin(), paths.end(),
-                      [this, shutdownType2](const auto& path) {
-            alarms.emplace(AlarmKey{path, shutdownType2, AlarmType::high},
-                           nullptr);
-            alarms.emplace(AlarmKey{path, shutdownType2, AlarmType::low},
-                           nullptr);
-        });
+        std::for_each(
+            paths.begin(), paths.end(),
+            [this, shutdownType2](const auto& path) {
+                alarms.emplace(AlarmKey{path, shutdownType2, AlarmType::high},
+                               nullptr);
+                alarms.emplace(AlarmKey{path, shutdownType2, AlarmType::low},
+                               nullptr);
+            });
     }
 }
 
diff --git a/sensor-monitor/threshold_alarm_logger.cpp b/sensor-monitor/threshold_alarm_logger.cpp
index 29cd229..6d78c0a 100644
--- a/sensor-monitor/threshold_alarm_logger.cpp
+++ b/sensor-monitor/threshold_alarm_logger.cpp
@@ -89,8 +89,7 @@
 ThresholdAlarmLogger::ThresholdAlarmLogger(
     sdbusplus::bus_t& bus, sdeventplus::Event& event,
     std::shared_ptr<PowerState> powerState) :
-    bus(bus),
-    event(event), _powerState(std::move(powerState)),
+    bus(bus), event(event), _powerState(std::move(powerState)),
     warningMatch(bus,
                  "type='signal',member='PropertiesChanged',"
                  "path_namespace='/xyz/openbmc_project/sensors',"
@@ -128,17 +127,20 @@
                                        this, std::placeholders::_1));
 
     // check for any currently asserted threshold alarms
-    std::for_each(thresholdData.begin(), thresholdData.end(),
-                  [this](const auto& thresholdInterface) {
-        const auto& interface = thresholdInterface.first;
-        auto objects = SDBusPlus::getSubTreeRaw(this->bus, "/", interface, 0);
-        std::for_each(objects.begin(), objects.end(),
-                      [interface, this](const auto& object) {
-            const auto& path = object.first;
-            const auto& service = object.second.begin()->first;
-            checkThresholds(interface, path, service);
+    std::for_each(
+        thresholdData.begin(), thresholdData.end(),
+        [this](const auto& thresholdInterface) {
+            const auto& interface = thresholdInterface.first;
+            auto objects =
+                SDBusPlus::getSubTreeRaw(this->bus, "/", interface, 0);
+            std::for_each(objects.begin(), objects.end(),
+                          [interface, this](const auto& object) {
+                              const auto& path = object.first;
+                              const auto& service =
+                                  object.second.begin()->first;
+                              checkThresholds(interface, path, service);
+                          });
         });
-    });
 }
 
 void ThresholdAlarmLogger::propertiesChanged(sdbusplus::message_t& msg)
@@ -262,10 +264,9 @@
     }
 }
 
-void ThresholdAlarmLogger::createEventLog(const std::string& sensorPath,
-                                          const std::string& interface,
-                                          const std::string& alarmProperty,
-                                          bool alarmValue)
+void ThresholdAlarmLogger::createEventLog(
+    const std::string& sensorPath, const std::string& interface,
+    const std::string& alarmProperty, bool alarmValue)
 {
     std::map<std::string, std::string> ad;
 
@@ -332,8 +333,8 @@
 
     try
     {
-        auto thresholdValue = SDBusPlus::getProperty<double>(bus, sensorPath,
-                                                             interface, name);
+        auto thresholdValue =
+            SDBusPlus::getProperty<double>(bus, sensorPath, interface, name);
 
         ad.emplace("THRESHOLD_VALUE", std::to_string(thresholdValue));
 
