diff --git a/.clang-format b/.clang-format
index d92a3f1..d43e884 100644
--- a/.clang-format
+++ b/.clang-format
@@ -14,26 +14,30 @@
 AllowShortBlocksOnASingleLine: Empty
 AllowShortCaseLabelsOnASingleLine: false
 AllowShortFunctionsOnASingleLine: Empty
-AllowShortIfStatementsOnASingleLine: false
+AllowShortIfStatementsOnASingleLine: Never
+AllowShortLambdasOnASingleLine: true
 AllowShortLoopsOnASingleLine: false
 AlwaysBreakAfterReturnType: None
 AlwaysBreakBeforeMultilineStrings: false
 AlwaysBreakTemplateDeclarations: Yes
 BinPackArguments: true
 BinPackParameters: true
+BitFieldColonSpacing: None
 BraceWrapping:
   AfterCaseLabel:  true
   AfterClass:      true
   AfterControlStatement: true
   AfterEnum:       true
+  AfterExternBlock: true
   AfterFunction:   true
   AfterNamespace:  true
   AfterObjCDeclaration: true
   AfterStruct:     true
   AfterUnion:      true
-  AfterExternBlock: true
   BeforeCatch:     true
   BeforeElse:      true
+  BeforeLambdaBody: false
+  BeforeWhile:     false
   IndentBraces:    false
   SplitEmptyFunction:   false
   SplitEmptyRecord:     false
@@ -48,17 +52,16 @@
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
-ConstructorInitializerAllOnOneLineOrOnePerLine: false
 ConstructorInitializerIndentWidth: 4
 ContinuationIndentWidth: 4
 Cpp11BracedListStyle: true
-DeriveLineEnding: false
 DerivePointerAlignment: false
-PointerAlignment: Left
 DisableFormat:   false
-ExperimentalAutoDetectBinPacking: false
 FixNamespaceComments: true
-ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
+ForEachMacros:
+  - foreach
+  - Q_FOREACH
+  - BOOST_FOREACH
 IncludeBlocks: Regroup
 IncludeCategories:
   - Regex:           '^[<"](gtest|gmock)'
@@ -78,6 +81,7 @@
   - Regex:           '.*'
     Priority:        6
 IndentCaseLabels: true
+IndentExternBlock: NoIndent
 IndentRequiresClause: true
 IndentWidth:     4
 IndentWrappedFunctionNames: true
@@ -92,6 +96,7 @@
 ObjCBlockIndentWidth: 2
 ObjCSpaceAfterProperty: false
 ObjCSpaceBeforeProtocolList: true
+PackConstructorInitializers: BinPack
 PenaltyBreakAssignment: 25
 PenaltyBreakBeforeFirstCallParameter: 19
 PenaltyBreakComment: 300
@@ -100,12 +105,13 @@
 PenaltyExcessCharacter: 1000000
 PenaltyReturnTypeOnItsOwnLine: 60
 PenaltyIndentedWhitespace: 0
+PointerAlignment: Left
 QualifierAlignment: Left
 ReferenceAlignment: Left
 ReflowComments:  true
 RequiresClausePosition: OwnLine
 RequiresExpressionIndentation: Keyword
-SortIncludes:    true
+SortIncludes: CaseSensitive
 SortUsingDeclarations: true
 SpaceAfterCStyleCast: false
 SpaceAfterTemplateKeyword: true
@@ -117,7 +123,7 @@
 SpaceBeforeRangeBasedForLoopColon: true
 SpaceInEmptyParentheses: false
 SpacesBeforeTrailingComments: 1
-SpacesInAngles:  false
+SpacesInAngles: Never
 SpacesInContainerLiterals: true
 SpacesInCStyleCastParentheses: false
 SpacesInParentheses: false
diff --git a/control/actions.cpp b/control/actions.cpp
index bd2adfc..25db5a9 100644
--- a/control/actions.cpp
+++ b/control/actions.cpp
@@ -73,10 +73,9 @@
         // Set/update the services of the group
         zone.setServices(&group);
         auto services = zone.getGroupServices(&group);
-        auto missingOwner = std::any_of(services.begin(), services.end(),
-                                        [](const auto& s) {
-            return !std::get<hasOwnerPos>(s);
-        });
+        auto missingOwner = std::any_of(
+            services.begin(), services.end(),
+            [](const auto& s) { return !std::get<hasOwnerPos>(s); });
         if (missingOwner)
         {
             zone.setSpeed(speed);
diff --git a/control/actions.hpp b/control/actions.hpp
index 968c1b2..fd7c8a6 100644
--- a/control/actions.hpp
+++ b/control/actions.hpp
@@ -150,7 +150,7 @@
                     count++;
                     return sum;
                 }
-                });
+            });
             if ((group.size() - count) > 0)
             {
                 auto groupSize = static_cast<int64_t>(group.size());
@@ -208,7 +208,7 @@
                     count++;
                     return sum;
                 }
-                });
+            });
             if ((group.size() - count) > 0)
             {
                 auto groupSize = static_cast<int64_t>(group.size());
@@ -617,18 +617,16 @@
         if (useEvents)
         {
             // Init events
-            std::for_each(events.begin(), events.end(),
-                          [&zone](auto const& entry) {
-                zone.initEvent(entry);
-            });
+            std::for_each(
+                events.begin(), events.end(),
+                [&zone](auto const& entry) { zone.initEvent(entry); });
         }
         else
         {
             // Remove events
-            std::for_each(events.begin(), events.end(),
-                          [&zone](auto const& entry) {
-                zone.removeEvent(entry);
-            });
+            std::for_each(
+                events.begin(), events.end(),
+                [&zone](auto const& entry) { zone.removeEvent(entry); });
         }
     };
 }
diff --git a/control/functor.hpp b/control/functor.hpp
index 1208aec..14d27d2 100644
--- a/control/functor.hpp
+++ b/control/functor.hpp
@@ -176,7 +176,7 @@
             {
                 // Property value not sent to handler
             }
-            });
+        });
     }
 
   private:
diff --git a/control/json/actions/default_floor.cpp b/control/json/actions/default_floor.cpp
index f1cc4af..95a2219 100644
--- a/control/json/actions/default_floor.cpp
+++ b/control/json/actions/default_floor.cpp
@@ -44,7 +44,7 @@
             std::any_of(members.begin(), members.end(),
                         [&intf = group.getInterface()](const auto& member) {
             return !Manager::hasOwner(member, intf);
-            });
+        });
         if (isMissingOwner)
         {
             zone.setFloor(zone.getDefaultFloor());
diff --git a/control/json/actions/mapped_floor.cpp b/control/json/actions/mapped_floor.cpp
index 97f659f..3de2188 100644
--- a/control/json/actions/mapped_floor.cpp
+++ b/control/json/actions/mapped_floor.cpp
@@ -237,7 +237,7 @@
         {
             value = static_cast<double>(val);
         }
-        },
+    },
         value);
 }
 
@@ -271,7 +271,7 @@
                             "isn't numeric",
                             ActionBase::getName(), group.getName())};
                     }
-                    },
+                },
                     value);
                 checked = true;
             }
diff --git a/control/json/actions/missing_owner_target.cpp b/control/json/actions/missing_owner_target.cpp
index 2138a06..deed3cb 100644
--- a/control/json/actions/missing_owner_target.cpp
+++ b/control/json/actions/missing_owner_target.cpp
@@ -47,7 +47,7 @@
             std::any_of(members.begin(), members.end(),
                         [&intf = group.getInterface()](const auto& member) {
             return !Manager::hasOwner(member, intf);
-            });
+        });
         // Update zone's target hold based on action results
         zone.setTargetHold(group.getName(), _target, isMissingOwner);
     }
diff --git a/control/json/actions/override_fan_target.cpp b/control/json/actions/override_fan_target.cpp
index 33fbd34..103008a 100644
--- a/control/json/actions/override_fan_target.cpp
+++ b/control/json/actions/override_fan_target.cpp
@@ -87,8 +87,8 @@
         {
             fanList = std::accumulate(std::next(_fans.begin()), _fans.end(),
                                       _fans[0], [](auto list, auto fan) {
-                                          return std::move(list) + ", " + fan;
-                                      });
+                return std::move(list) + ", " + fan;
+            });
         }
 
         record(std::format("Adding fan target lock of {} on fans [{}] zone {}",
diff --git a/control/json/actions/set_parameter_from_group_max.cpp b/control/json/actions/set_parameter_from_group_max.cpp
index 10c2b70..99e184f 100644
--- a/control/json/actions/set_parameter_from_group_max.cpp
+++ b/control/json/actions/set_parameter_from_group_max.cpp
@@ -77,7 +77,7 @@
                                             .c_str());
                         invalid = true;
                     }
-                    },
+                },
                     value);
                 if (invalid)
                 {
diff --git a/control/json/actions/target_from_group_max.cpp b/control/json/actions/target_from_group_max.cpp
index 045b2d5..341c67d 100644
--- a/control/json/actions/target_from_group_max.cpp
+++ b/control/json/actions/target_from_group_max.cpp
@@ -197,7 +197,7 @@
                                         .c_str());
                     invalid = true;
                 }
-                },
+            },
                 value);
             if (invalid)
             {
diff --git a/control/json/actions/timer_based_actions.cpp b/control/json/actions/timer_based_actions.cpp
index 81d8fc1..02779bd 100644
--- a/control/json/actions/timer_based_actions.cpp
+++ b/control/json/actions/timer_based_actions.cpp
@@ -42,10 +42,9 @@
 {
     // If any of groups' value == nullopt(i.e. not configured), action is
     // driven by the service owned state of the group members
-    _byOwner = std::any_of(_groups.begin(), _groups.end(),
-                           [](const auto& group) {
-        return group.getValue() == std::nullopt;
-    });
+    _byOwner = std::any_of(
+        _groups.begin(), _groups.end(),
+        [](const auto& group) { return group.getValue() == std::nullopt; });
 
     setTimerConf(jsonObj);
     setActions(jsonObj);
@@ -58,12 +57,12 @@
         // If any service providing a group member is not owned, start
         // timer and if all members' services are owned, stop timer.
         if (std::any_of(_groups.begin(), _groups.end(), [](const auto& group) {
-                const auto& members = group.getMembers();
-                return std::any_of(members.begin(), members.end(),
-                                   [&group](const auto& member) {
+            const auto& members = group.getMembers();
+            return std::any_of(members.begin(), members.end(),
+                               [&group](const auto& member) {
                 return !Manager::hasOwner(member, group.getInterface());
-                });
-            }))
+            });
+        }))
         {
             startTimer();
         }
@@ -87,7 +86,7 @@
                        mgr->getProperty(member, group.getInterface(),
                                         group.getProperty());
             });
-            }))
+        }))
         {
             // Timer will be started(and never stopped) when _groups is empty
             startTimer();
diff --git a/control/json/event.cpp b/control/json/event.cpp
index 3a74f30..628c222 100644
--- a/control/json/event.cpp
+++ b/control/json/event.cpp
@@ -299,8 +299,8 @@
             auto availTrigs = std::accumulate(
                 std::next(trigger::triggers.begin()), trigger::triggers.end(),
                 trigger::triggers.begin()->first, [](auto list, auto trig) {
-                    return std::move(list) + ", " + trig.first;
-                });
+                return std::move(list) + ", " + trig.first;
+            });
             log<level::ERR>(
                 std::format("Trigger '{}' is not recognized", tClass).c_str(),
                 entry("AVAILABLE_TRIGGERS=%s", availTrigs.c_str()));
diff --git a/control/json/fan.cpp b/control/json/fan.cpp
index 0010d2b..5abcfbe 100644
--- a/control/json/fan.cpp
+++ b/control/json/fan.cpp
@@ -144,10 +144,9 @@
 void Fan::unlockTarget(uint64_t target)
 {
     // find and remove the requested lock
-    auto itr(std::find_if(_lockedTargets.begin(), _lockedTargets.end(),
-                          [target](auto lockedTarget) {
-        return target == lockedTarget;
-    }));
+    auto itr(std::find_if(
+        _lockedTargets.begin(), _lockedTargets.end(),
+        [target](auto lockedTarget) { return target == lockedTarget; }));
 
     if (_lockedTargets.end() != itr)
     {
diff --git a/control/json/manager.cpp b/control/json/manager.cpp
index 5121e97..838bd30 100644
--- a/control/json/manager.cpp
+++ b/control/json/manager.cpp
@@ -339,10 +339,9 @@
     // Set owner state for specific object given
     auto& ownIntf = _servTree[path][serv];
     ownIntf.first = isOwned;
-    auto itIntf = std::find_if(ownIntf.second.begin(), ownIntf.second.end(),
-                               [&intf](const auto& interface) {
-        return intf == interface;
-    });
+    auto itIntf = std::find_if(
+        ownIntf.second.begin(), ownIntf.second.end(),
+        [&intf](const auto& interface) { return intf == interface; });
     if (itIntf == std::end(ownIntf.second))
     {
         ownIntf.second.emplace_back(intf);
diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index 369b6bf..d7657e9 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -229,7 +229,7 @@
                         return std::find(getActiveProfiles().begin(),
                                          getActiveProfiles().end(),
                                          name) != getActiveProfiles().end();
-                        }))
+                    }))
                     {
                         continue;
                     }
diff --git a/control/json/triggers/init.cpp b/control/json/triggers/init.cpp
index 32277d7..bd557d7 100644
--- a/control/json/triggers/init.cpp
+++ b/control/json/triggers/init.cpp
@@ -159,10 +159,9 @@
         if (!groups.empty() && handler == methods.end())
         {
             // Construct list of available methods
-            auto availMethods = std::accumulate(std::next(methods.begin()),
-                                                methods.end(),
-                                                methods.begin()->first,
-                                                [](auto list, auto method) {
+            auto availMethods = std::accumulate(
+                std::next(methods.begin()), methods.end(),
+                methods.begin()->first, [](auto list, auto method) {
                 return std::move(list) + ", " + method.first;
             });
             auto msg =
diff --git a/control/json/triggers/signal.cpp b/control/json/triggers/signal.cpp
index 5e78d6e..537ef50 100644
--- a/control/json/triggers/signal.cpp
+++ b/control/json/triggers/signal.cpp
@@ -249,11 +249,11 @@
     if (subscriber == signals.end())
     {
         // Construct list of available signals
-        auto availSignals = std::accumulate(
-            std::next(signals.begin()), signals.end(), signals.begin()->first,
-            [](auto list, auto signal) {
+        auto availSignals =
+            std::accumulate(std::next(signals.begin()), signals.end(),
+                            signals.begin()->first, [](auto list, auto signal) {
             return std::move(list) + ", " + signal.first;
-            });
+        });
         auto msg =
             std::format("Event '{}' requires a supported signal given to be "
                         "triggered by signal, available signals: {}",
diff --git a/control/json/zone.cpp b/control/json/zone.cpp
index 487a7d4..12f8c02 100644
--- a/control/json/zone.cpp
+++ b/control/json/zone.cpp
@@ -161,10 +161,9 @@
 
 void Zone::lockFanTarget(const std::string& fname, uint64_t target)
 {
-    auto fanItr = std::find_if(_fans.begin(), _fans.end(),
-                               [&fname](const auto& fan) {
-        return fan->getName() == fname;
-    });
+    auto fanItr = std::find_if(
+        _fans.begin(), _fans.end(),
+        [&fname](const auto& fan) { return fan->getName() == fname; });
 
     if (_fans.end() != fanItr)
     {
@@ -181,10 +180,9 @@
 
 void Zone::unlockFanTarget(const std::string& fname, uint64_t target)
 {
-    auto fanItr = std::find_if(_fans.begin(), _fans.end(),
-                               [&fname](const auto& fan) {
-        return fan->getName() == fname;
-    });
+    auto fanItr = std::find_if(
+        _fans.begin(), _fans.end(),
+        [&fname](const auto& fan) { return fan->getName() == fname; });
 
     if (_fans.end() != fanItr)
     {
@@ -460,10 +458,9 @@
         if (propFuncs == _intfPropHandlers.end())
         {
             // Construct list of available configurable interfaces
-            auto intfs = std::accumulate(std::next(_intfPropHandlers.begin()),
-                                         _intfPropHandlers.end(),
-                                         _intfPropHandlers.begin()->first,
-                                         [](auto list, auto intf) {
+            auto intfs = std::accumulate(
+                std::next(_intfPropHandlers.begin()), _intfPropHandlers.end(),
+                _intfPropHandlers.begin()->first, [](auto list, auto intf) {
                 return std::move(list) + ", " + intf.first;
             });
             log<level::ERR>("Configured interface not available",
@@ -500,7 +497,7 @@
                     propFuncs->second.end(), propFuncs->second.begin()->first,
                     [](auto list, auto prop) {
                     return std::move(list) + ", " + prop.first;
-                    });
+                });
                 log<level::ERR>("Configured property not available",
                                 entry("JSON=%s", property.dump().c_str()),
                                 entry("AVAILABLE_PROPS=%s", props.c_str()));
diff --git a/control/manager.cpp b/control/manager.cpp
index 43e500e..27c3b47 100644
--- a/control/manager.cpp
+++ b/control/manager.cpp
@@ -98,7 +98,7 @@
         if (std::all_of(conditions.begin(), conditions.end(),
                         [&bus](const auto& condition) {
             return checkCondition(bus, condition);
-            }))
+        }))
         {
             // Create a Zone object for each zone in this group
             auto& zones = std::get<zoneListPos>(group);
diff --git a/control/preconditions.cpp b/control/preconditions.cpp
index 842c178..6365d41 100644
--- a/control/preconditions.cpp
+++ b/control/preconditions.cpp
@@ -71,10 +71,9 @@
         // Set/update the services of the group
         zone.setServices(&group);
         const auto& services = zone.getGroupServices(&group);
-        auto precondState = std::any_of(services.begin(), services.end(),
-                                        [](const auto& s) {
-            return !std::get<hasOwnerPos>(s);
-        });
+        auto precondState = std::any_of(
+            services.begin(), services.end(),
+            [](const auto& s) { return !std::get<hasOwnerPos>(s); });
 
         if (precondState)
         {
diff --git a/control/triggers.cpp b/control/triggers.cpp
index eb2580f..362f4b6 100644
--- a/control/triggers.cpp
+++ b/control/triggers.cpp
@@ -13,12 +13,11 @@
 
 Trigger timer(TimerConf&& tConf)
 {
-    return
-        [tConf = std::move(tConf)](control::Zone& zone, const std::string& name,
-                                   const Group& group,
-                                   const std::vector<Action>& actions) {
+    return [tConf = std::move(tConf)](
+               control::Zone& zone, const std::string& name, const Group& group,
+               const std::vector<Action>& actions) {
         zone.addTimer(name, group, actions, tConf);
-        };
+    };
 }
 
 Trigger signal(const std::string& match, SignalHandler&& handler)
@@ -75,10 +74,9 @@
         }
 
         // Run action functions for initial event state
-        std::for_each(actions.begin(), actions.end(),
-                      [&zone, &group](auto const& action) {
-            action(zone, group);
-        });
+        std::for_each(
+            actions.begin(), actions.end(),
+            [&zone, &group](auto const& action) { action(zone, group); });
     };
 }
 
diff --git a/control/zone.cpp b/control/zone.cpp
index 46e1f08..b1badc1 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -409,10 +409,9 @@
                         const std::vector<Action>& eventActions)
 {
     // Perform the actions
-    std::for_each(eventActions.begin(), eventActions.end(),
-                  [this, &eventGroup](const auto& action) {
-        action(*this, eventGroup);
-    });
+    std::for_each(
+        eventActions.begin(), eventActions.end(),
+        [this, &eventGroup](const auto& action) { action(*this, eventGroup); });
 }
 
 void Zone::handleEvent(sdbusplus::message_t& msg, const EventData* eventData)
@@ -436,10 +435,9 @@
     {
         for (auto& serv : srvIter->second)
         {
-            auto it = std::find_if(serv.second.begin(), serv.second.end(),
-                                   [&intf](const auto& interface) {
-                return intf == interface;
-            });
+            auto it = std::find_if(
+                serv.second.begin(), serv.second.end(),
+                [&intf](const auto& interface) { return intf == interface; });
             if (it != std::end(serv.second))
             {
                 // Service found
diff --git a/control/zone.hpp b/control/zone.hpp
index 183bd78..ce9c6bf 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -258,7 +258,7 @@
                 {
                     value = val;
                 }
-                },
+            },
                 variant);
 
             // Unable to return Sensor Value property
@@ -633,7 +633,7 @@
                         {
                             value = val;
                         }
-                        },
+                    },
                         var);
 
                     return value;
diff --git a/json_config.hpp b/json_config.hpp
index c3f041f..3ec0c8a 100644
--- a/json_config.hpp
+++ b/json_config.hpp
@@ -240,7 +240,7 @@
                          [&confFile, &appName, &fileName](const auto& value) {
             confFile = fs::path{confBasePath} / appName / value / fileName;
             return fs::exists(confFile);
-            });
+        });
         if (it == _confCompatValues.end())
         {
             confFile.clear();
diff --git a/monitor/json_parser.cpp b/monitor/json_parser.cpp
index b5b7291..bf37307 100644
--- a/monitor/json_parser.cpp
+++ b/monitor/json_parser.cpp
@@ -437,8 +437,8 @@
             {"missing_fan_frus",
              [count]() { return std::make_unique<MissingFanFRUCause>(count); }},
             {"nonfunc_fan_rotors", [count]() {
-                 return std::make_unique<NonfuncFanRotorCause>(count);
-             }}};
+        return std::make_unique<NonfuncFanRotorCause>(count);
+    }}};
 
     auto it = causes.find(powerOffCause);
     if (it != causes.end())
diff --git a/monitor/system.cpp b/monitor/system.cpp
index bb2e95e..5c2ed4e 100644
--- a/monitor/system.cpp
+++ b/monitor/system.cpp
@@ -378,8 +378,8 @@
         // 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);
@@ -388,8 +388,8 @@
                 fan->powerStateChanged(powerStateOn);
             });
             if (std::all_of(_fans.begin(), _fans.end(), [](const auto& fan) {
-                    return fan->numSensorsOnDBusAtPowerOn() == 0;
-                }))
+                return fan->numSensorsOnDBusAtPowerOn() == 0;
+            }))
             {
                 handleOfflineFanController();
                 return;
diff --git a/monitor/trust_group.hpp b/monitor/trust_group.hpp
index e2cb269..3e73525 100644
--- a/monitor/trust_group.hpp
+++ b/monitor/trust_group.hpp
@@ -91,7 +91,7 @@
         return (std::find_if(_sensors.begin(), _sensors.end(),
                              [&sensor](const auto& s) {
             return sensor.name() == s.sensor->name();
-                }) != _sensors.end());
+        }) != _sensors.end());
     }
 
     /**
diff --git a/presence/error_reporter.cpp b/presence/error_reporter.cpp
index 790a260..b095717 100644
--- a/presence/error_reporter.cpp
+++ b/presence/error_reporter.cpp
@@ -201,10 +201,9 @@
     if (powerState)
     {
         // If there are fans already missing, log it.
-        auto missing = std::count_if(_fanStates.begin(), _fanStates.end(),
-                                     [](const auto& fanState) {
-            return fanState.second == false;
-        });
+        auto missing = std::count_if(
+            _fanStates.begin(), _fanStates.end(),
+            [](const auto& fanState) { return fanState.second == false; });
 
         if (missing)
         {
@@ -213,10 +212,9 @@
         }
     }
 
-    std::for_each(_fanStates.begin(), _fanStates.end(),
-                  [this](const auto& fanState) {
-        this->checkFan(fanState.first);
-    });
+    std::for_each(
+        _fanStates.begin(), _fanStates.end(),
+        [this](const auto& fanState) { this->checkFan(fanState.first); });
 }
 
 } // namespace phosphor::fan::presence
diff --git a/presence/json_parser.cpp b/presence/json_parser.cpp
index 70cac08..ea1d496 100644
--- a/presence/json_parser.cpp
+++ b/presence/json_parser.cpp
@@ -213,9 +213,9 @@
 
     // Create the error reporter class if necessary
     if (std::any_of(_fans.begin(), _fans.end(), [](const auto& fan) {
-            return std::get<std::optional<size_t>>(std::get<Fan>(fan)) !=
-                   std::nullopt;
-        }))
+        return std::get<std::optional<size_t>>(std::get<Fan>(fan)) !=
+               std::nullopt;
+    }))
     {
         _reporter = std::make_unique<ErrorReporter>(_bus, _fans);
     }
diff --git a/sensor-monitor/shutdown_alarm_monitor.cpp b/sensor-monitor/shutdown_alarm_monitor.cpp
index 05692c0..214e3a3 100644
--- a/sensor-monitor/shutdown_alarm_monitor.cpp
+++ b/sensor-monitor/shutdown_alarm_monitor.cpp
@@ -470,10 +470,9 @@
 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())
     {
