diff --git a/.clang-format b/.clang-format
index d43e884..28e3328 100644
--- a/.clang-format
+++ b/.clang-format
@@ -87,7 +87,7 @@
 IndentWrappedFunctionNames: true
 InsertNewlineAtEOF: true
 KeepEmptyLinesAtTheStartOfBlocks: false
-LambdaBodyIndentation: OuterScope
+LambdaBodyIndentation: Signature
 LineEnding: LF
 MacroBlockBegin: ''
 MacroBlockEnd:   ''
@@ -98,13 +98,14 @@
 ObjCSpaceBeforeProtocolList: true
 PackConstructorInitializers: BinPack
 PenaltyBreakAssignment: 25
-PenaltyBreakBeforeFirstCallParameter: 19
+PenaltyBreakBeforeFirstCallParameter: 50
 PenaltyBreakComment: 300
 PenaltyBreakFirstLessLess: 120
 PenaltyBreakString: 1000
+PenaltyBreakTemplateDeclaration: 10
 PenaltyExcessCharacter: 1000000
 PenaltyReturnTypeOnItsOwnLine: 60
-PenaltyIndentedWhitespace: 0
+PenaltyIndentedWhitespace: 1
 PointerAlignment: Left
 QualifierAlignment: Left
 ReferenceAlignment: Left
diff --git a/inc/button_factory.hpp b/inc/button_factory.hpp
index 29fb990..83cf530 100644
--- a/inc/button_factory.hpp
+++ b/inc/button_factory.hpp
@@ -38,18 +38,17 @@
         buttonIfaceRegistry[std::string(T::getFormFactorName())] =
             [](sdbusplus::bus_t& bus, EventPtr& event,
                ButtonConfig& buttonCfg) {
-            return std::make_unique<T>(bus, T::getDbusObjectPath(), event,
-                                       buttonCfg);
-        };
+                return std::make_unique<T>(bus, T::getDbusObjectPath(), event,
+                                           buttonCfg);
+            };
     }
     /**
      * @brief this method returns the button interface object
      *    corresponding to the button formfactor name provided
      */
-    std::unique_ptr<ButtonIface> createInstance(const std::string& name,
-                                                sdbusplus::bus_t& bus,
-                                                EventPtr& event,
-                                                ButtonConfig& buttonCfg)
+    std::unique_ptr<ButtonIface>
+        createInstance(const std::string& name, sdbusplus::bus_t& bus,
+                       EventPtr& event, ButtonConfig& buttonCfg)
     {
         // find matching name in the registry and call factory method.
         auto objectIter = buttonIfaceRegistry.find(name);
diff --git a/inc/button_interface.hpp b/inc/button_interface.hpp
index b3a98cc..0b8cd47 100644
--- a/inc/button_interface.hpp
+++ b/inc/button_interface.hpp
@@ -12,8 +12,7 @@
   public:
     ButtonIface(sdbusplus::bus_t& bus, EventPtr& event, ButtonConfig& buttonCfg,
                 sd_event_io_handler_t handler = ButtonIface::EventHandler) :
-        bus(bus),
-        event(event), config(buttonCfg), callbackHandler(handler)
+        bus(bus), event(event), config(buttonCfg), callbackHandler(handler)
     {
         int ret = -1;
         std::string configType;
diff --git a/inc/power_button_profile.hpp b/inc/power_button_profile.hpp
index bb113a3..abce90a 100644
--- a/inc/power_button_profile.hpp
+++ b/inc/power_button_profile.hpp
@@ -35,13 +35,13 @@
                          sdbusRule::interface(powerButtonInterface),
                      std::bind(&PowerButtonProfile::pressedHandler, this,
                                std::placeholders::_1)),
-        releasedMatch(bus,
-                      sdbusRule::type::signal() +
-                          sdbusRule::member("Released") +
-                          sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
-                          sdbusRule::interface(powerButtonInterface),
-                      std::bind(&PowerButtonProfile::releasedHandler, this,
-                                std::placeholders::_1))
+        releasedMatch(
+            bus,
+            sdbusRule::type::signal() + sdbusRule::member("Released") +
+                sdbusRule::path(POWER_DBUS_OBJECT_NAME) +
+                sdbusRule::interface(powerButtonInterface),
+            std::bind(&PowerButtonProfile::releasedHandler, this,
+                      std::placeholders::_1))
     {}
 
     virtual ~PowerButtonProfile() = default;
diff --git a/src/hostSelector_switch.cpp b/src/hostSelector_switch.cpp
index 81bd247..c398e35 100644
--- a/src/hostSelector_switch.cpp
+++ b/src/hostSelector_switch.cpp
@@ -136,8 +136,8 @@
     if (config.type == ConfigType::gpio)
     {
         // read the gpio state for the io event received
-        GpioState gpioState = (buf == '0') ? (GpioState::deassert)
-                                           : (GpioState::assert);
+        GpioState gpioState =
+            (buf == '0') ? (GpioState::deassert) : (GpioState::assert);
 
         setHostSelectorValue(fd, gpioState);
         hsPosMapped = getMappedHSConfig(hostSelectorPosition);
diff --git a/src/host_then_chassis_poweroff.cpp b/src/host_then_chassis_poweroff.cpp
index 7abde43..4489364 100644
--- a/src/host_then_chassis_poweroff.cpp
+++ b/src/host_then_chassis_poweroff.cpp
@@ -134,9 +134,9 @@
         lg2::info("Power button action requesting host transition of {TRANS}",
                   "TRANS", std::get<std::string>(state));
 
-        auto method = bus.new_method_call(service::hostState,
-                                          object_path::hostState,
-                                          interface::property, "Set");
+        auto method =
+            bus.new_method_call(service::hostState, object_path::hostState,
+                                interface::property, "Set");
         method.append(interface::hostState, "RequestedHostTransition", state);
 
         bus.call(method);
@@ -214,9 +214,9 @@
 
     try
     {
-        auto method = bus.new_method_call(service::bmcState,
-                                          object_path::bmcState,
-                                          interface::property, "Get");
+        auto method =
+            bus.new_method_call(service::bmcState, object_path::bmcState,
+                                interface::property, "Get");
         method.append(interface::bmcState, "CurrentBMCState");
         auto result = bus.call(method);
 
diff --git a/src/serial_uart_mux.cpp b/src/serial_uart_mux.cpp
index bd1c0d8..c36e82a 100644
--- a/src/serial_uart_mux.cpp
+++ b/src/serial_uart_mux.cpp
@@ -40,8 +40,8 @@
 // check the debug card present pin
 bool SerialUartMux::isOCPDebugCardPresent()
 {
-    auto gpioState = getGpioState(debugCardPresentGpio.fd,
-                                  debugCardPresentGpio.polarity);
+    auto gpioState =
+        getGpioState(debugCardPresentGpio.fd, debugCardPresentGpio.polarity);
     return (gpioState == GpioState::assert);
 }
 // set the serial uart MUX to select the console w.r.t host selector position
@@ -65,8 +65,8 @@
 
         if (gpioConfig.name == SERIAL_UART_RX_GPIO)
         {
-            gpioState = debugCardPresent ? GpioState::assert
-                                         : GpioState::deassert;
+            gpioState =
+                debugCardPresent ? GpioState::assert : GpioState::deassert;
         }
         else
         {
