diff --git a/sensor-monitor/alarm_timestamps.hpp b/sensor-monitor/alarm_timestamps.hpp
index 75586af..e25d9fc 100644
--- a/sensor-monitor/alarm_timestamps.hpp
+++ b/sensor-monitor/alarm_timestamps.hpp
@@ -215,7 +215,6 @@
      */
     void load()
     {
-
         std::vector<std::tuple<std::string, int, int, uint64_t>> times;
 
         std::filesystem::path path =
diff --git a/sensor-monitor/shutdown_alarm_monitor.cpp b/sensor-monitor/shutdown_alarm_monitor.cpp
index 8fad830..0828b16 100644
--- a/sensor-monitor/shutdown_alarm_monitor.cpp
+++ b/sensor-monitor/shutdown_alarm_monitor.cpp
@@ -132,14 +132,13 @@
 
         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);
+        });
     }
 }
 
@@ -294,8 +293,8 @@
 
             if (elapsedTime < static_cast<uint64_t>(shutdownDelay.count()))
             {
-                remainingTime =
-                    static_cast<uint64_t>(shutdownDelay.count()) - elapsedTime;
+                remainingTime = static_cast<uint64_t>(shutdownDelay.count()) -
+                                elapsedTime;
             }
 
             shutdownDelay = std::chrono::milliseconds{remainingTime};
@@ -470,9 +469,10 @@
 std::optional<ShutdownType>
     ShutdownAlarmMonitor::getShutdownType(const std::string& interface) const
 {
-    auto it = std::find_if(
-        shutdownInterfaces.begin(), shutdownInterfaces.end(),
-        [interface](const auto& a) { return a.second == interface; });
+    auto it = std::find_if(shutdownInterfaces.begin(), shutdownInterfaces.end(),
+                           [interface](const auto& a) {
+        return a.second == interface;
+    });
 
     if (it == shutdownInterfaces.end())
     {
diff --git a/sensor-monitor/threshold_alarm_logger.cpp b/sensor-monitor/threshold_alarm_logger.cpp
index 34090f9..99ed0d6 100644
--- a/sensor-monitor/threshold_alarm_logger.cpp
+++ b/sensor-monitor/threshold_alarm_logger.cpp
@@ -127,20 +127,17 @@
                                        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)
