diff --git a/monitor/fan_error.cpp b/monitor/fan_error.cpp
index 6d0ef20..ed8340d 100644
--- a/monitor/fan_error.cpp
+++ b/monitor/fan_error.cpp
@@ -126,8 +126,8 @@
     }
 }
 
-std::map<std::string, std::string>
-    FanError::getAdditionalData(bool isPowerOffError)
+std::map<std::string, std::string> FanError::getAdditionalData(
+    bool isPowerOffError)
 {
     std::map<std::string, std::string> ad;
 
diff --git a/monitor/json_parser.cpp b/monitor/json_parser.cpp
index 5faccb4..588cdd8 100644
--- a/monitor/json_parser.cpp
+++ b/monitor/json_parser.cpp
@@ -43,8 +43,8 @@
 {
 
 // Get a constructed trust group class for a non-zero speed group
-CreateGroupFunction
-    getNonZeroSpeed(const std::vector<trust::GroupDefinition>& group)
+CreateGroupFunction getNonZeroSpeed(
+    const std::vector<trust::GroupDefinition>& group)
 {
     return [group]() {
         return std::make_unique<trust::NonzeroSpeed>(std::move(group));
@@ -463,10 +463,10 @@
     return cause;
 }
 
-std::unique_ptr<PowerOffAction>
-    getPowerOffAction(const json& powerOffConfig,
-                      std::shared_ptr<PowerInterfaceBase>& powerInterface,
-                      PowerOffAction::PrePowerOffFunc& func)
+std::unique_ptr<PowerOffAction> getPowerOffAction(
+    const json& powerOffConfig,
+    std::shared_ptr<PowerInterfaceBase>& powerInterface,
+    PowerOffAction::PrePowerOffFunc& func)
 {
     std::unique_ptr<PowerOffAction> action;
     if (!powerOffConfig.contains("type"))
diff --git a/monitor/power_off_cause.hpp b/monitor/power_off_cause.hpp
index abc2cb4..c0304c0 100644
--- a/monitor/power_off_cause.hpp
+++ b/monitor/power_off_cause.hpp
@@ -179,11 +179,11 @@
     ~FanFRUsWithNonfuncRotorsCause() = default;
     FanFRUsWithNonfuncRotorsCause(const FanFRUsWithNonfuncRotorsCause&) =
         delete;
-    FanFRUsWithNonfuncRotorsCause&
-        operator=(const FanFRUsWithNonfuncRotorsCause&) = delete;
+    FanFRUsWithNonfuncRotorsCause& operator=(
+        const FanFRUsWithNonfuncRotorsCause&) = delete;
     FanFRUsWithNonfuncRotorsCause(FanFRUsWithNonfuncRotorsCause&&) = delete;
-    FanFRUsWithNonfuncRotorsCause&
-        operator=(FanFRUsWithNonfuncRotorsCause&&) = delete;
+    FanFRUsWithNonfuncRotorsCause& operator=(FanFRUsWithNonfuncRotorsCause&&) =
+        delete;
 
     /**
      * @brief Constructor
diff --git a/monitor/system.cpp b/monitor/system.cpp
index 476a7f1..a4434dc 100644
--- a/monitor/system.cpp
+++ b/monitor/system.cpp
@@ -240,8 +240,8 @@
     }
 }
 
-const std::vector<CreateGroupFunction>
-    System::getTrustGroups([[maybe_unused]] const json& jsonObj)
+const std::vector<CreateGroupFunction> System::getTrustGroups(
+    [[maybe_unused]] const json& jsonObj)
 {
 #ifdef MONITOR_USE_JSON
     return getTrustGrps(jsonObj);
@@ -255,8 +255,8 @@
     _trust = std::make_unique<trust::Manager>(groupFuncs);
 }
 
-const std::vector<FanDefinition>
-    System::getFanDefinitions([[maybe_unused]] const json& jsonObj)
+const std::vector<FanDefinition> System::getFanDefinitions(
+    [[maybe_unused]] const json& jsonObj)
 {
 #ifdef MONITOR_USE_JSON
     return getFanDefs(jsonObj);
diff --git a/monitor/tach_sensor.cpp b/monitor/tach_sensor.cpp
index 68c58a2..d26b246 100644
--- a/monitor/tach_sensor.cpp
+++ b/monitor/tach_sensor.cpp
@@ -54,9 +54,10 @@
  * @param[out] value - filled in with the property value
  */
 template <typename T>
-static void
-    readProperty(const std::string& interface, const std::string& propertyName,
-                 const std::string& path, sdbusplus::bus_t& bus, T& value)
+static void readProperty(const std::string& interface,
+                         const std::string& propertyName,
+                         const std::string& path, sdbusplus::bus_t& bus,
+                         T& value)
 {
     try
     {
