diff --git a/.clang-format b/.clang-format
index 28e3328..e5530e6 100644
--- a/.clang-format
+++ b/.clang-format
@@ -17,9 +17,7 @@
 AllowShortIfStatementsOnASingleLine: Never
 AllowShortLambdasOnASingleLine: true
 AllowShortLoopsOnASingleLine: false
-AlwaysBreakAfterReturnType: None
 AlwaysBreakBeforeMultilineStrings: false
-AlwaysBreakTemplateDeclarations: Yes
 BinPackArguments: true
 BinPackParameters: true
 BitFieldColonSpacing: None
@@ -43,12 +41,14 @@
   SplitEmptyRecord:     false
   SplitEmptyNamespace:  false
 BreakAfterAttributes: Never
+BreakAfterReturnType: Automatic
 BreakBeforeBinaryOperators: None
 BreakBeforeBraces: Custom
 BreakBeforeTernaryOperators: true
 BreakConstructorInitializers: AfterColon
 BreakInheritanceList: AfterColon
 BreakStringLiterals: false
+BreakTemplateDeclarations: Yes
 ColumnLimit:     80
 CommentPragmas:  '^ IWYU pragma:'
 CompactNamespaces: false
@@ -104,7 +104,7 @@
 PenaltyBreakString: 1000
 PenaltyBreakTemplateDeclaration: 10
 PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 60
+PenaltyReturnTypeOnItsOwnLine: 150
 PenaltyIndentedWhitespace: 1
 PointerAlignment: Left
 QualifierAlignment: Left
diff --git a/include/me_to_redfish_hooks.hpp b/include/me_to_redfish_hooks.hpp
index 0ce26e7..4a6cf2b 100644
--- a/include/me_to_redfish_hooks.hpp
+++ b/include/me_to_redfish_hooks.hpp
@@ -103,10 +103,10 @@
 }
 
 template <int idx>
-static inline bool
-    logByte(const SELData& selData, std::string& /* unused */,
-            std::vector<std::string>& args,
-            std::function<std::string(uint8_t)> conversion = nullptr)
+static inline bool logByte(
+    const SELData& selData, std::string& /* unused */,
+    std::vector<std::string>& args,
+    std::function<std::string(uint8_t)> conversion = nullptr)
 {
     uint8_t byte;
     switch (idx)
diff --git a/include/sdrutils.hpp b/include/sdrutils.hpp
index ed28314..f9b9030 100644
--- a/include/sdrutils.hpp
+++ b/include/sdrutils.hpp
@@ -474,8 +474,8 @@
     return interfacesResponse;
 }
 
-static inline std::map<std::string, DbusVariant>
-    getEntityManagerProperties(const char* path, const char* interface)
+static inline std::map<std::string, DbusVariant> getEntityManagerProperties(
+    const char* path, const char* interface)
 {
     std::map<std::string, DbusVariant> properties;
     std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
diff --git a/meson.build b/meson.build
index 20a440d..eb1de6c 100644
--- a/meson.build
+++ b/meson.build
@@ -1,13 +1,10 @@
 project(
-  'intel-ipmi-oem',
-  'cpp',
-  version: '0.1',
-  meson_version: '>=1.1.1',
-  default_options: [
-    'werror=true',
-    'warning_level=3',
-    'cpp_std=c++23',
-  ])
+    'intel-ipmi-oem',
+    'cpp',
+    version: '0.1',
+    meson_version: '>=1.1.1',
+    default_options: ['werror=true', 'warning_level=3', 'cpp_std=c++23'],
+)
 
 # Project Arguments
 all_args = [
@@ -22,25 +19,23 @@
     '-DUSING_ENTITY_MANAGER_DECORATORS',
     '-Wno-psabi',
     '-Wno-pedantic',
-  ]
+]
 
 feature_map = {
-  'intel-pfr': '-DINTEL_PFR_ENABLED',
-  'bmc-validation-unsecure-feature': '-DBMC_VALIDATION_UNSECURE_FEATURE',
-  'using-entity-manager-decorators': '-DUSING_ENTITY_MANAGER_DECORATORS',
+    'intel-pfr': '-DINTEL_PFR_ENABLED',
+    'bmc-validation-unsecure-feature': '-DBMC_VALIDATION_UNSECURE_FEATURE',
+    'using-entity-manager-decorators': '-DUSING_ENTITY_MANAGER_DECORATORS',
 }
 
 foreach option_key, option_value : feature_map
-  if(get_option(option_key).allowed())
-    summary(option_key,option_value, section : 'Enabled Features')
-    add_project_arguments(option_value,language:'cpp')
-  endif
+    if (get_option(option_key).allowed())
+        summary(option_key, option_value, section: 'Enabled Features')
+        add_project_arguments(option_value, language: 'cpp')
+    endif
 endforeach
 
 cpp = meson.get_compiler('cpp')
-add_project_arguments(
-  cpp.get_supported_arguments(all_args),
-  language : 'cpp')
+add_project_arguments(cpp.get_supported_arguments(all_args), language: 'cpp')
 
 fs = import('fs')
 
@@ -56,68 +51,69 @@
 userlayer_dep = dependency('libuserlayer')
 
 
-tinyxml_dep = dependency('tinyxml2',
+tinyxml_dep = dependency(
+    'tinyxml2',
     default_options: ['tests=false'],
     include_type: 'system',
 )
 
-gpio_dep = dependency('libgpiodcxx',
-      default_options: ['bindings=cxx'],
-      )
+gpio_dep = dependency('libgpiodcxx', default_options: ['bindings=cxx'])
 
 zinteloemcmds_pre = declare_dependency(
-  include_directories: root_inc,
-  dependencies: [
-    channellayer_dep,
-    ipmid_dep,
-    gpio_dep,
-    nlohmann_json_dep,
-    phosphor_dbus_interfaces_dep,
-    phosphor_logging_dep,
-    sdbusplus_dep,
-    tinyxml_dep,
-    userlayer_dep,
-  ])
+    include_directories: root_inc,
+    dependencies: [
+        channellayer_dep,
+        ipmid_dep,
+        gpio_dep,
+        nlohmann_json_dep,
+        phosphor_dbus_interfaces_dep,
+        phosphor_logging_dep,
+        sdbusplus_dep,
+        tinyxml_dep,
+        userlayer_dep,
+    ],
+)
 
 prog_python = import('python').find_installation('python3')
 generate_allowlist_script = files('generate-allowlist.py')
 ipmiallowlist = custom_target(
     'ipmi-allowlist.hpp',
-    input: [generate_allowlist_script, 'ipmi-allowlist.conf' ],
+    input: [generate_allowlist_script, 'ipmi-allowlist.conf'],
     output: 'ipmi-allowlist.hpp',
-    command: [ prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@' ],
-    )
+    command: [prog_python, '@INPUT0@', '@INPUT1@', '@OUTPUT@'],
+)
 
 zinteloemcmds_src = [
-  'src/oemcommands.cpp',
-  'src/sensorcommands.cpp',
-  'src/biosconfigcommands.cpp',
-  'src/storagecommands.cpp',
-  'src/multinodecommands.cpp',
-  'src/firmware-update.cpp',
-  'src/appcommands.cpp',
-  'src/smbiosmdrv2handler.cpp',
-  'src/manufacturingcommands.cpp',
-  'src/bmccontrolservices.cpp',
-  'src/bridgingcommands.cpp',
-  'src/ipmi_to_redfish_hooks.cpp',
-  'src/me_to_redfish_hooks.cpp',
-  'src/chassiscommands.cpp',
-  'src/allowlist-filter.cpp',
-  'src/fruutils.cpp',
-  ipmiallowlist,
+    'src/oemcommands.cpp',
+    'src/sensorcommands.cpp',
+    'src/biosconfigcommands.cpp',
+    'src/storagecommands.cpp',
+    'src/multinodecommands.cpp',
+    'src/firmware-update.cpp',
+    'src/appcommands.cpp',
+    'src/smbiosmdrv2handler.cpp',
+    'src/manufacturingcommands.cpp',
+    'src/bmccontrolservices.cpp',
+    'src/bridgingcommands.cpp',
+    'src/ipmi_to_redfish_hooks.cpp',
+    'src/me_to_redfish_hooks.cpp',
+    'src/chassiscommands.cpp',
+    'src/allowlist-filter.cpp',
+    'src/fruutils.cpp',
+    ipmiallowlist,
 ]
 
 zinteloemcmds_lib = library(
-  'zinteloemcmds',
-  sources: zinteloemcmds_src,
-  implicit_include_directories: false,
-  dependencies: zinteloemcmds_pre,
-  version: meson.project_version(),
-  override_options: ['b_lundef=false'],
-  install: true,
-  install_dir: get_option('libdir') / 'ipmid-providers')
+    'zinteloemcmds',
+    sources: zinteloemcmds_src,
+    implicit_include_directories: false,
+    dependencies: zinteloemcmds_pre,
+    version: meson.project_version(),
+    override_options: ['b_lundef=false'],
+    install: true,
+    install_dir: get_option('libdir') / 'ipmid-providers',
+)
 
 if get_option('tests').allowed()
-  subdir('tests')
+    subdir('tests')
 endif
diff --git a/meson.options b/meson.options
index e0bf2d1..ddc1ab1 100644
--- a/meson.options
+++ b/meson.options
@@ -1,4 +1,16 @@
 option('tests', type: 'feature', description: 'Build tests')
-option('intel-pfr', type: 'feature', description: 'Intel Platform Firmware Resilience enabled')
-option('bmc-validation-unsecure-feature', type: 'feature', description: 'Enables unsecure features required by validation. Note: must be turned off for production images.')
-option('using-entity-manager-decorators', type: 'feature', description: 'Enable using EM decorators to map FRUs to entity IDs')
+option(
+    'intel-pfr',
+    type: 'feature',
+    description: 'Intel Platform Firmware Resilience enabled',
+)
+option(
+    'bmc-validation-unsecure-feature',
+    type: 'feature',
+    description: 'Enables unsecure features required by validation. Note: must be turned off for production images.',
+)
+option(
+    'using-entity-manager-decorators',
+    type: 'feature',
+    description: 'Enable using EM decorators to map FRUs to entity IDs',
+)
diff --git a/src/appcommands.cpp b/src/appcommands.cpp
index 2d4e1a9..e0b3bd5 100644
--- a/src/appcommands.cpp
+++ b/src/appcommands.cpp
@@ -268,8 +268,8 @@
 }
 
 static constexpr size_t uuidLength = 16;
-static std::array<uint8_t, uuidLength>
-    rfc4122ToIpmiConvesrion(std::string rfc4122)
+static std::array<uint8_t, uuidLength> rfc4122ToIpmiConvesrion(
+    std::string rfc4122)
 {
     using Argument = xyz::openbmc_project::common::InvalidArgument;
     // UUID is in RFC4122 format. Ex: 61a39523-78f2-11e5-9862-e6402cfc3223
@@ -317,8 +317,8 @@
     return uuid;
 }
 
-ipmi::RspType<std::array<uint8_t, 16>>
-    ipmiAppGetSystemGuid(ipmi::Context::ptr& ctx)
+ipmi::RspType<std::array<uint8_t, 16>> ipmiAppGetSystemGuid(
+    ipmi::Context::ptr& ctx)
 {
     static constexpr auto uuidInterface = "xyz.openbmc_project.Common.UUID";
     static constexpr auto uuidProperty = "UUID";
diff --git a/src/biosconfigcommands.cpp b/src/biosconfigcommands.cpp
index ba2610a..96d0c4e 100644
--- a/src/biosconfigcommands.cpp
+++ b/src/biosconfigcommands.cpp
@@ -668,8 +668,8 @@
     return ipmi::responseSuccess();
 }
 
-ipmi::RspType<uint8_t, uint8_t, uint8_t, uint8_t>
-    ipmiOEMGetBIOSCap(ipmi::Context::ptr&)
+ipmi::RspType<uint8_t, uint8_t, uint8_t, uint8_t> ipmiOEMGetBIOSCap(
+    ipmi::Context::ptr&)
 {
     if (gNVOOBdata.mIsBIOSCapInitDone)
     {
@@ -682,9 +682,9 @@
     }
 }
 
-ipmi::RspType<uint32_t>
-    ipmiOEMSetPayload(ipmi::Context::ptr&, uint8_t paramSel,
-                      uint8_t payloadType, std::vector<uint8_t> payload)
+ipmi::RspType<uint32_t> ipmiOEMSetPayload(ipmi::Context::ptr&, uint8_t paramSel,
+                                          uint8_t payloadType,
+                                          std::vector<uint8_t> payload)
 {
     uint8_t biosCapOffsetBit = 2; // BIT:1 0-OOB BIOS config not supported
                                   //      1-OOB BIOS config is supported
@@ -912,9 +912,9 @@
     return ipmi::responseResponseError();
 }
 
-ipmi::RspType<message::Payload>
-    ipmiOEMGetPayload(ipmi::Context::ptr& ctx, uint8_t paramSel,
-                      uint8_t payloadType, ipmi::message::Payload& payload)
+ipmi::RspType<message::Payload> ipmiOEMGetPayload(
+    ipmi::Context::ptr& ctx, uint8_t paramSel, uint8_t payloadType,
+    ipmi::message::Payload& payload)
 {
     //      1-OOB BIOS config is supported
     message::Payload retValue;
diff --git a/src/bridgingcommands.cpp b/src/bridgingcommands.cpp
index 3fa8635..0eaf1e7 100644
--- a/src/bridgingcommands.cpp
+++ b/src/bridgingcommands.cpp
@@ -91,15 +91,15 @@
     return checksum;
 }
 
-static inline bool
-    ipmbConnectionHeaderChecksumValidate(const ipmbHeader* ipmbHeader)
+static inline bool ipmbConnectionHeaderChecksumValidate(
+    const ipmbHeader* ipmbHeader)
 {
     return ipmbChecksumValidate(reinterpret_cast<const uint8_t*>(ipmbHeader),
                                 ipmbConnectionHeaderLength);
 }
 
-static inline bool
-    ipmbDataChecksumValidate(const ipmbHeader* ipmbHeader, size_t length)
+static inline bool ipmbDataChecksumValidate(const ipmbHeader* ipmbHeader,
+                                            size_t length)
 {
     return ipmbChecksumValidate((reinterpret_cast<const uint8_t*>(ipmbHeader) +
                                  ipmbConnectionHeaderLength),
diff --git a/src/firmware-update.cpp b/src/firmware-update.cpp
index 59554d0..8bc2fdc 100644
--- a/src/firmware-update.cpp
+++ b/src/firmware-update.cpp
@@ -1098,8 +1098,8 @@
     return ipmi::responseSuccess(channelListSize, channelList);
 }
 
-ipmi::RspType<uint8_t, uint8_t>
-    ipmiGetBmcExecutionContext(ipmi::Context::ptr ctx)
+ipmi::RspType<uint8_t, uint8_t> ipmiGetBmcExecutionContext(
+    ipmi::Context::ptr ctx)
 {
     // Byte 1 - Current execution context
     //          0x10 - Linux OS, 0x11 - Bootloader, Forced-firmware updat mode
@@ -1160,9 +1160,9 @@
  * @parameter randNum - Random number(token)
  * @returns IPMI completion code
  **/
-ipmi::RspType<>
-    ipmiSetFirmwareUpdateMode(const ipmi::Context::ptr& ctx,
-                              std::array<uint8_t, fwRandomNumLength>& randNum)
+ipmi::RspType<> ipmiSetFirmwareUpdateMode(
+    const ipmi::Context::ptr& ctx,
+    std::array<uint8_t, fwRandomNumLength>& randNum)
 {
     phosphor::logging::log<phosphor::logging::level::INFO>(
         "Start FW update mode");
@@ -1590,8 +1590,8 @@
                                  sha2CheckState, uint5_t{});
 }
 
-ipmi::RspType<uint32_t>
-    ipmiFwImageWriteData(const std::vector<uint8_t>& writeData)
+ipmi::RspType<uint32_t> ipmiFwImageWriteData(
+    const std::vector<uint8_t>& writeData)
 {
     const uint8_t ccCmdNotSupportedInPresentState = 0xD5;
     size_t writeDataLen = writeData.size();
diff --git a/src/manufacturingcommands.cpp b/src/manufacturingcommands.cpp
index 59f7880..a4f797b 100644
--- a/src/manufacturingcommands.cpp
+++ b/src/manufacturingcommands.cpp
@@ -1120,8 +1120,8 @@
     return ipmi::responseSuccess();
 }
 
-ipmi::RspType<uint8_t, std::array<uint8_t, maxEthSize>>
-    getManufacturingData(ipmi::Context::ptr ctx, uint8_t dataType)
+ipmi::RspType<uint8_t, std::array<uint8_t, maxEthSize>> getManufacturingData(
+    ipmi::Context::ptr ctx, uint8_t dataType)
 {
     // mfg filter logic will restrict this command executing only in mfg
     // mode.
@@ -1311,8 +1311,8 @@
     return ipmi::responseSuccess();
 }
 
-static std::vector<std::string>
-    getMCTPServiceConfigPaths(ipmi::Context::ptr& ctx)
+static std::vector<std::string> getMCTPServiceConfigPaths(
+    ipmi::Context::ptr& ctx)
 {
     boost::system::error_code ec;
     auto configPaths = ctx->bus->yield_method_call<std::vector<std::string>>(
diff --git a/src/oemcommands.cpp b/src/oemcommands.cpp
index 6cbe908..8ae0680 100644
--- a/src/oemcommands.cpp
+++ b/src/oemcommands.cpp
@@ -374,8 +374,8 @@
     return IPMI_CC_OK;
 }
 
-ipmi::RspType<>
-    ipmiOEMDisableBMCSystemReset(bool disableResetOnSMI, uint7_t reserved1)
+ipmi::RspType<> ipmiOEMDisableBMCSystemReset(bool disableResetOnSMI,
+                                             uint7_t reserved1)
 {
     if (reserved1)
     {
@@ -3107,8 +3107,8 @@
     return ipmi::responseSuccess();
 }
 
-ipmi::RspType<uint8_t /* restore status */>
-    ipmiRestoreConfiguration(const std::array<uint8_t, 3>& clr, uint8_t cmd)
+ipmi::RspType<uint8_t /* restore status */> ipmiRestoreConfiguration(
+    const std::array<uint8_t, 3>& clr, uint8_t cmd)
 {
     static constexpr std::array<uint8_t, 3> expClr = {'C', 'L', 'R'};
 
@@ -3728,8 +3728,8 @@
 static const constexpr uint8_t defaultPSUBus = 7;
 // Second Minor, Primary Minor, Major
 static const constexpr size_t verLen = 3;
-ipmi::RspType<std::vector<uint8_t>>
-    ipmiOEMGetPSUVersion(ipmi::Context::ptr& ctx)
+ipmi::RspType<std::vector<uint8_t>> ipmiOEMGetPSUVersion(
+    ipmi::Context::ptr& ctx)
 {
     uint8_t bus = defaultPSUBus;
     std::vector<uint64_t> addrTable;
@@ -3767,8 +3767,8 @@
     return ipmi::responseSuccess(result);
 }
 
-std::optional<uint8_t>
-    getMultiNodeInfoPresence(ipmi::Context::ptr& ctx, const std::string& name)
+std::optional<uint8_t> getMultiNodeInfoPresence(ipmi::Context::ptr& ctx,
+                                                const std::string& name)
 {
     Value dbusValue = 0;
     std::string serviceName;
@@ -3891,9 +3891,9 @@
     return ipmi::responseSuccess(kcsMaxBufferSize, ipmbMaxBufferSize);
 }
 
-ipmi::RspType<std::vector<uint8_t>>
-    ipmiOEMReadPFRMailbox(ipmi::Context::ptr& ctx, const uint8_t readRegister,
-                          const uint8_t numOfBytes, uint8_t registerIdentifier)
+ipmi::RspType<std::vector<uint8_t>> ipmiOEMReadPFRMailbox(
+    ipmi::Context::ptr& ctx, const uint8_t readRegister,
+    const uint8_t numOfBytes, uint8_t registerIdentifier)
 {
     if (!ipmi::mailbox::i2cConfigLoaded)
     {
diff --git a/src/smbiosmdrv2handler.cpp b/src/smbiosmdrv2handler.cpp
index 16f8ae0..0dee364 100644
--- a/src/smbiosmdrv2handler.cpp
+++ b/src/smbiosmdrv2handler.cpp
@@ -234,8 +234,8 @@
  *  - dirEntries
  *  - dataRequest
  */
-ipmi::RspType<uint8_t, uint8_t, uint8_t, uint8_t, uint8_t>
-    mdr2AgentStatus(uint16_t agentId, uint8_t dirVersion)
+ipmi::RspType<uint8_t, uint8_t, uint8_t, uint8_t, uint8_t> mdr2AgentStatus(
+    uint16_t agentId, uint8_t dirVersion)
 {
     if (mdrv2 == nullptr)
     {
@@ -278,8 +278,8 @@
  *  @returns IPMI completion code plus response data
  *  - dataOut
  */
-ipmi::RspType<std::vector<uint8_t>>
-    mdr2GetDir(uint16_t agentId, uint8_t dirIndex)
+ipmi::RspType<std::vector<uint8_t>> mdr2GetDir(uint16_t agentId,
+                                               uint8_t dirIndex)
 {
     std::shared_ptr<sdbusplus::asio::connection> bus = getSdBus();
     std::string service = ipmi::getService(*bus, mdrv2Interface, mdrv2Path);
@@ -369,10 +369,10 @@
  *  - bool
  */
 
-ipmi::RspType<bool>
-    mdr2SendDir(uint16_t agentId, uint8_t dirVersion, uint8_t dirIndex,
-                uint8_t returnedEntries, uint8_t remainingEntries,
-                std::vector<uint8_t> dataInfo)
+ipmi::RspType<bool> mdr2SendDir(uint16_t agentId, uint8_t dirVersion,
+                                uint8_t dirIndex, uint8_t returnedEntries,
+                                uint8_t remainingEntries,
+                                std::vector<uint8_t> dataInfo)
 {
     if ((static_cast<size_t>(returnedEntries) * dataInfoSize) !=
         dataInfo.size())
@@ -434,8 +434,8 @@
  *  - response - mdrVersion, data info, validFlag,
  *               dataLength, dataVersion, timeStamp
  */
-ipmi::RspType<std::vector<uint8_t>>
-    mdr2GetDataInfo(uint16_t agentId, std::vector<uint8_t> dataInfo)
+ipmi::RspType<std::vector<uint8_t>> mdr2GetDataInfo(
+    uint16_t agentId, std::vector<uint8_t> dataInfo)
 {
     constexpr size_t getDataInfoReqSize = 16;
 
diff --git a/src/storagecommands.cpp b/src/storagecommands.cpp
index 4034cff..ad63d77 100644
--- a/src/storagecommands.cpp
+++ b/src/storagecommands.cpp
@@ -768,9 +768,9 @@
     return false;
 }
 
-static uint16_t
-    getNextRecordID(const uint16_t recordID,
-                    const std::vector<std::filesystem::path>& selLogFiles)
+static uint16_t getNextRecordID(
+    const uint16_t recordID,
+    const std::vector<std::filesystem::path>& selLogFiles)
 {
     uint16_t nextRecordID = recordID + 1;
     std::string entry;
diff --git a/tests/meson.build b/tests/meson.build
index 22c1859..376d446 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -8,27 +8,25 @@
                 dependency('threads'),
                 gtest_proj.dependency('gtest'),
                 gtest_proj.dependency('gtest_main'),
-            ]
+            ],
         )
         gmock_dep = gtest_proj.dependency('gmock')
     else
         assert(
             not get_option('tests').enabled(),
-            'Googletest is required if tests are enabled'
+            'Googletest is required if tests are enabled',
         )
     endif
 endif
 
-test('message',
-  executable(
-    'sensorcommands',
-    'test_sensorcommands.cpp',
-    include_directories: root_inc,
-    build_by_default: false,
-    implicit_include_directories: false,
-    dependencies: [
-        gtest_dep,
-        gmock_dep,
-    ],
-  )
+test(
+    'message',
+    executable(
+        'sensorcommands',
+        'test_sensorcommands.cpp',
+        include_directories: root_inc,
+        build_by_default: false,
+        implicit_include_directories: false,
+        dependencies: [gtest_dep, gmock_dep],
+    ),
 )
