diff --git a/.clang-format b/.clang-format
index a75a2c2..e5530e6 100755
--- a/.clang-format
+++ b/.clang-format
@@ -104,7 +104,7 @@
 PenaltyBreakString: 1000
 PenaltyBreakTemplateDeclaration: 10
 PenaltyExcessCharacter: 1000000
-PenaltyReturnTypeOnItsOwnLine: 60
+PenaltyReturnTypeOnItsOwnLine: 150
 PenaltyIndentedWhitespace: 1
 PointerAlignment: Left
 QualifierAlignment: Left
diff --git a/include/mdrv2.hpp b/include/mdrv2.hpp
index 5834408..d248073 100644
--- a/include/mdrv2.hpp
+++ b/include/mdrv2.hpp
@@ -157,8 +157,8 @@
 
     bool agentSynchronizeData() override;
 
-    std::vector<uint32_t>
-        synchronizeDirectoryCommonData(uint8_t idIndex, uint32_t size) override;
+    std::vector<uint32_t> synchronizeDirectoryCommonData(
+        uint8_t idIndex, uint32_t size) override;
 
     uint8_t directoryEntries(uint8_t value) override;
 
diff --git a/include/speed_select.hpp b/include/speed_select.hpp
index 1cb783d..3ca2dc3 100644
--- a/include/speed_select.hpp
+++ b/include/speed_select.hpp
@@ -123,8 +123,8 @@
      * Return the list of logical core indices which have high priority when
      * SST-BF is enabled for a given level.
      */
-    virtual std::vector<unsigned int>
-        bfHighPriorityCoreList(unsigned int level) = 0;
+    virtual std::vector<unsigned int> bfHighPriorityCoreList(
+        unsigned int level) = 0;
     /** Return the high priority base frequency for a given level. */
     virtual unsigned int bfHighPriorityFreq(unsigned int level) = 0;
     /** Return the low priority base frequency for a given level. */
diff --git a/src/cpuinfo_main.cpp b/src/cpuinfo_main.cpp
index 6eb60e4..cbe2ed6 100644
--- a/src/cpuinfo_main.cpp
+++ b/src/cpuinfo_main.cpp
@@ -90,18 +90,18 @@
     return std::cerr << "[CPU " << cpu << "] ";
 }
 
-static void
-    setCpuProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                   size_t cpu, const std::string& interface,
-                   const std::string& propName, const std::string& propVal);
-static void
-    setDbusProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                    size_t cpu, const CpuProperty& newProp);
+static void setCpuProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const std::string& interface, const std::string& propName,
+    const std::string& propVal);
+static void setDbusProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const CpuProperty& newProp);
 static void createCpuUpdatedMatch(
     const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu);
 
-static std::optional<std::string>
-    readSSpec(uint8_t bus, uint8_t slaveAddr, uint8_t regAddr, size_t count)
+static std::optional<std::string> readSSpec(uint8_t bus, uint8_t slaveAddr,
+                                            uint8_t regAddr, size_t count)
 {
     unsigned long funcs = 0;
     std::string devPath = "/dev/i2c-" + std::to_string(bus);
@@ -259,10 +259,10 @@
  * @param[in]       propName    Property to set.
  * @param[in]       propVal     Value to set.
  */
-static void
-    setCpuProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                   size_t cpu, const std::string& interface,
-                   const std::string& propName, const std::string& propVal)
+static void setCpuProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const std::string& interface, const std::string& propName,
+    const std::string& propVal)
 {
     // cpuId from configuration is one based as
     // dbus object path used by smbios is 0 based
@@ -283,9 +283,9 @@
  * @param[in]       cpu     1-baesd CPU index.
  * @param[in]       newProp Property to set.
  */
-static void
-    setDbusProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                    size_t cpu, const CpuProperty& newProp)
+static void setDbusProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const CpuProperty& newProp)
 {
     createCpuUpdatedMatch(conn, cpu);
     conn->async_method_call(
@@ -476,11 +476,11 @@
 /**
  * Get cpu and pirom address
  */
-static void
-    getCpuAddress(boost::asio::io_service& io,
-                  const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                  const std::string& service, const std::string& object,
-                  const std::string& interface)
+static void getCpuAddress(
+    boost::asio::io_service& io,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
+    const std::string& service, const std::string& object,
+    const std::string& interface)
 {
     conn->async_method_call(
         [&io, conn](boost::system::error_code ec,
diff --git a/src/mdrv2.cpp b/src/mdrv2.cpp
index d65fd12..87b197a 100644
--- a/src/mdrv2.cpp
+++ b/src/mdrv2.cpp
@@ -836,8 +836,8 @@
     return true;
 }
 
-std::vector<uint32_t>
-    MDRV2::synchronizeDirectoryCommonData(uint8_t idIndex, uint32_t size)
+std::vector<uint32_t> MDRV2::synchronizeDirectoryCommonData(uint8_t idIndex,
+                                                            uint32_t size)
 {
     std::chrono::microseconds usec(
         defaultTimeout); // default lock time out is 2s
diff --git a/src/speed_select.cpp b/src/speed_select.cpp
index 8d4db67..a6c80da 100644
--- a/src/speed_select.cpp
+++ b/src/speed_select.cpp
@@ -230,8 +230,8 @@
         return bfEnabled;
     }
 
-    sdbusplus::message::object_path
-        appliedConfig(sdbusplus::message::object_path value) override
+    sdbusplus::message::object_path appliedConfig(
+        sdbusplus::message::object_path value) override
     {
         DEBUG_PRINT << "Writing AppliedConfig\n";
         const OperatingConfig* newConfig = nullptr;
diff --git a/src/sst_mailbox.cpp b/src/sst_mailbox.cpp
index e574b96..1db4107 100644
--- a/src/sst_mailbox.cpp
+++ b/src/sst_mailbox.cpp
@@ -527,8 +527,8 @@
     {
         return GetTjmaxInfo(pm, static_cast<uint8_t>(level)).tProchot();
     }
-    std::vector<unsigned int>
-        bfHighPriorityCoreList(unsigned int level) override
+    std::vector<unsigned int> bfHighPriorityCoreList(
+        unsigned int level) override
     {
         uint64_t coreMaskLo =
             PbfGetCoreMaskInfo(pm, static_cast<uint8_t>(level), 0)
@@ -570,8 +570,8 @@
     }
 };
 
-static std::unique_ptr<SSTInterface>
-    createMailbox(uint8_t address, CPUModel model, WakePolicy wakePolicy)
+static std::unique_ptr<SSTInterface> createMailbox(
+    uint8_t address, CPUModel model, WakePolicy wakePolicy)
 {
     DEBUG_PRINT << "createMailbox\n";
     switch (model)
