diff --git a/include/host_error_event_monitor.hpp b/include/host_error_event_monitor.hpp
index 25683e0..9823623 100644
--- a/include/host_error_event_monitor.hpp
+++ b/include/host_error_event_monitor.hpp
@@ -67,8 +67,8 @@
     }
     std::string eventName = objectPath.substr(objectPath.find_last_of('/') + 1,
                                               objectPath.length());
-    std::string message = (assert) ? eventName + " Asserted"
-                                   : eventName + " De-Asserted";
+    std::string message =
+        (assert) ? eventName + " Asserted" : eventName + " De-Asserted";
     uint8_t selType = (msgInterface.ends_with("ThermalTrip")) ? 0x01 : 0x00;
 
     std::vector<uint8_t> selData{selType, 0xff, 0xff};
@@ -88,7 +88,7 @@
             "HostErrorMonitor.Processor." +
                 iter->first + "'",
             [conn, iter](sdbusplus::message_t& msg) {
-            hostErrorEventMonitor(conn, msg);
-        });
+                hostErrorEventMonitor(conn, msg);
+            });
     }
 }
diff --git a/include/sensorutils.hpp b/include/sensorutils.hpp
index af979b0..cc95cf5 100644
--- a/include/sensorutils.hpp
+++ b/include/sensorutils.hpp
@@ -169,10 +169,9 @@
 // To use with Wolfram Alpha, make all variables single letters
 // bExp becomes E, rExp becomes R
 // https://www.wolframalpha.com/input/?i=y%3D%28%28M*x%29%2B%28B*%2810%5EE%29%29%29*%2810%5ER%29
-static inline bool getSensorAttributes(const double max, const double min,
-                                       int16_t& mValue, int8_t& rExp,
-                                       int16_t& bValue, int8_t& bExp,
-                                       bool& bSigned)
+static inline bool getSensorAttributes(
+    const double max, const double min, int16_t& mValue, int8_t& rExp,
+    int16_t& bValue, int8_t& bExp, bool& bSigned)
 {
     if (!(std::isfinite(min)))
     {
@@ -263,9 +262,8 @@
     // Step 4: Constrain B, and set bExp accordingly
     if (!(scaleFloatExp(dB, bExp)))
     {
-        std::cerr << "getSensorAttributes: Offset (B=" << dB
-                  << ", bExp=" << (int)bExp
-                  << ") exceeds multiplier scale (M=" << dM
+        std::cerr << "getSensorAttributes: Offset (B=" << dB << ", bExp="
+                  << (int)bExp << ") exceeds multiplier scale (M=" << dM
                   << ", rExp=" << (int)rExp << ")\n";
         return false;
     }
@@ -278,10 +276,9 @@
     return true;
 }
 
-static inline uint8_t
-    scaleIPMIValueFromDouble(const double value, const int16_t mValue,
-                             const int8_t rExp, const int16_t bValue,
-                             const int8_t bExp, const bool bSigned)
+static inline uint8_t scaleIPMIValueFromDouble(
+    const double value, const int16_t mValue, const int8_t rExp,
+    const int16_t bValue, const int8_t bExp, const bool bSigned)
 {
     // Avoid division by zero below
     if (mValue == 0)
@@ -336,8 +333,8 @@
     int8_t bExp = 0;
     bool bSigned = false;
 
-    bool result = getSensorAttributes(max, min, mValue, rExp, bValue, bExp,
-                                      bSigned);
+    bool result =
+        getSensorAttributes(max, min, mValue, rExp, bValue, bExp, bSigned);
     if (!result)
     {
         throw std::runtime_error("Illegal sensor attributes");
diff --git a/include/threshold_alarm_event_monitor.hpp b/include/threshold_alarm_event_monitor.hpp
index fc0d383..6b0544a 100644
--- a/include/threshold_alarm_event_monitor.hpp
+++ b/include/threshold_alarm_event_monitor.hpp
@@ -209,8 +209,8 @@
                   << "\n";
         return;
     }
-    double thresholdVal = std::visit(ipmi::VariantToDoubleVisitor(),
-                                     thresholdValue);
+    double thresholdVal =
+        std::visit(ipmi::VariantToDoubleVisitor(), thresholdValue);
 
     double scale = 0;
     auto findScale = sensorValue.find("Scale");
@@ -254,7 +254,7 @@
             static_cast<sdbusplus::bus_t&>(*conn),
             "type='signal',member=" + iter->first,
             [conn, iter](sdbusplus::message_t& msg) {
-            generateEvent(iter->first, conn, msg);
-        });
+                generateEvent(iter->first, conn, msg);
+            });
     }
 }
diff --git a/include/threshold_event_monitor.hpp b/include/threshold_event_monitor.hpp
index cea25c1..685bb4e 100644
--- a/include/threshold_event_monitor.hpp
+++ b/include/threshold_event_monitor.hpp
@@ -179,15 +179,15 @@
                       << msg.get_path() << "\n";
             return;
         }
-        double thresholdVal = std::visit(ipmi::VariantToDoubleVisitor(),
-                                         thresholdValue);
+        double thresholdVal =
+            std::visit(ipmi::VariantToDoubleVisitor(), thresholdValue);
 
         double scale = 0;
         auto findScale = sensorValue.find("Scale");
         if (findScale != sensorValue.end())
         {
-            scale = std::visit(ipmi::VariantToDoubleVisitor(),
-                               findScale->second);
+            scale =
+                std::visit(ipmi::VariantToDoubleVisitor(), findScale->second);
             thresholdVal *= std::pow(10, scale);
         }
         try
@@ -202,8 +202,8 @@
 
         std::string threshold;
         std::string direction;
-        std::string redfishMessageID = "OpenBMC." +
-                                       openBMCMessageRegistryVersion;
+        std::string redfishMessageID =
+            "OpenBMC." + openBMCMessageRegistryVersion;
         enum EventType
         {
             eventNone,
