diff --git a/.clang-format b/.clang-format
index a75a2c2..e5530e6 100644
--- 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/bmc/activation.hpp b/bmc/activation.hpp
index 4ec621b..47da9b5 100644
--- a/bmc/activation.hpp
+++ b/bmc/activation.hpp
@@ -144,11 +144,11 @@
     }
 
     ActivationBlocksTransition(const ActivationBlocksTransition&) = delete;
-    ActivationBlocksTransition&
-        operator=(const ActivationBlocksTransition&) = delete;
+    ActivationBlocksTransition& operator=(const ActivationBlocksTransition&) =
+        delete;
     ActivationBlocksTransition(ActivationBlocksTransition&&) = delete;
-    ActivationBlocksTransition&
-        operator=(ActivationBlocksTransition&&) = delete;
+    ActivationBlocksTransition& operator=(ActivationBlocksTransition&&) =
+        delete;
 
   private:
     sdbusplus::bus_t& bus;
@@ -234,8 +234,8 @@
      *
      * @return Success or exception thrown
      */
-    RequestedActivations
-        requestedActivation(RequestedActivations value) override;
+    RequestedActivations requestedActivation(
+        RequestedActivations value) override;
 
     /** @brief Overloaded write flash function */
     void flashWrite() override;
diff --git a/bmc/item_updater.cpp b/bmc/item_updater.cpp
index 351fc4c..2e889fb 100644
--- a/bmc/item_updater.cpp
+++ b/bmc/item_updater.cpp
@@ -570,8 +570,8 @@
     helper.cleanup();
 }
 
-ItemUpdater::ActivationStatus
-    ItemUpdater::validateSquashFSImage(const std::string& filePath)
+ItemUpdater::ActivationStatus ItemUpdater::validateSquashFSImage(
+    const std::string& filePath)
 {
     bool valid = true;
 
diff --git a/bmc/update_manager.cpp b/bmc/update_manager.cpp
index 37bbb85..922f2bc 100644
--- a/bmc/update_manager.cpp
+++ b/bmc/update_manager.cpp
@@ -208,9 +208,9 @@
     co_return;
 }
 
-sdbusplus::message::object_path
-    Manager::startUpdate(sdbusplus::message::unix_fd image,
-                         ApplyTimeIntf::RequestedApplyTimes applyTime)
+sdbusplus::message::object_path Manager::startUpdate(
+    sdbusplus::message::unix_fd image,
+    ApplyTimeIntf::RequestedApplyTimes applyTime)
 {
     info("Starting update for image {FD}", "FD", static_cast<int>(image));
     using sdbusplus::xyz::openbmc_project::Common::Error::Unavailable;
diff --git a/bmc/update_manager.hpp b/bmc/update_manager.hpp
index 59c185f..caba541 100644
--- a/bmc/update_manager.hpp
+++ b/bmc/update_manager.hpp
@@ -48,9 +48,9 @@
     /** @brief Implementation for StartUpdate
      *  Start a firware update to be performed asynchronously.
      */
-    sdbusplus::message::object_path
-        startUpdate(sdbusplus::message::unix_fd image,
-                    ApplyTimeIntf::RequestedApplyTimes applyTime) override;
+    sdbusplus::message::object_path startUpdate(
+        sdbusplus::message::unix_fd image,
+        ApplyTimeIntf::RequestedApplyTimes applyTime) override;
 
     /* @brief Process the image supplied via image fd */
     auto processImage(sdbusplus::message::unix_fd image,
diff --git a/bmc/version.hpp b/bmc/version.hpp
index bb66341..5f97955 100644
--- a/bmc/version.hpp
+++ b/bmc/version.hpp
@@ -113,8 +113,8 @@
      *
      * @return The values of the repeated key.
      **/
-    static std::vector<std::string>
-        getRepeatedValues(const std::string& manifestFilePath, std::string key);
+    static std::vector<std::string> getRepeatedValues(
+        const std::string& manifestFilePath, std::string key);
 
     /**
      * @brief Calculate the version id from the version string.
@@ -148,8 +148,8 @@
      *
      * @return The extended version string.
      */
-    static std::string
-        getBMCExtendedVersion(const std::string& releaseFilePath);
+    static std::string getBMCExtendedVersion(
+        const std::string& releaseFilePath);
 
     /**
      * @brief Get the active BMC version string.
diff --git a/common/pldm/package_parser.hpp b/common/pldm/package_parser.hpp
index 67f9b95..c86cd2f 100644
--- a/common/pldm/package_parser.hpp
+++ b/common/pldm/package_parser.hpp
@@ -182,8 +182,8 @@
  *  @return On success return the PackageParser for the header format version
  *          on failure return nullptr
  */
-std::unique_ptr<PackageParser>
-    parsePackageHeader(std::vector<uint8_t>& pkgHdrInfo);
+std::unique_ptr<PackageParser> parsePackageHeader(
+    std::vector<uint8_t>& pkgHdrInfo);
 
 } // namespace fw_update
 
diff --git a/common/pldm/pldm_package_util.hpp b/common/pldm/pldm_package_util.hpp
index cff49ad..e510be1 100644
--- a/common/pldm/pldm_package_util.hpp
+++ b/common/pldm/pldm_package_util.hpp
@@ -14,8 +14,8 @@
 // @param buf           pointer to the pldm package
 // @param size          size of 'buf'
 // @returns             PackageParser instance
-std::shared_ptr<PackageParser>
-    parsePLDMPackage(const uint8_t* buf, size_t size);
+std::shared_ptr<PackageParser> parsePLDMPackage(const uint8_t* buf,
+                                                size_t size);
 
 // reads into a buffer, from file
 // @param file            the file to read from
diff --git a/test/create_package/create_pldm_fw_package.cpp b/test/create_package/create_pldm_fw_package.cpp
index c4353bb..216a31d 100644
--- a/test/create_package/create_pldm_fw_package.cpp
+++ b/test/create_package/create_pldm_fw_package.cpp
@@ -119,8 +119,8 @@
     of.write(reinterpret_cast<char*>(b), (long)size);
 }
 
-std::optional<std::string>
-    create_pldm_package(uint8_t* component_image, size_t component_image_size)
+std::optional<std::string> create_pldm_package(uint8_t* component_image,
+                                               size_t component_image_size)
 {
     std::random_device rd;
     std::mt19937 gen(rd());
diff --git a/test/create_package/create_pldm_fw_package.hpp b/test/create_package/create_pldm_fw_package.hpp
index 0d37c6a..5d037c1 100644
--- a/test/create_package/create_pldm_fw_package.hpp
+++ b/test/create_package/create_pldm_fw_package.hpp
@@ -6,8 +6,8 @@
 #include <optional>
 #include <string>
 
-std::optional<std::string>
-    create_pldm_package(uint8_t* component_image, size_t component_image_size);
+std::optional<std::string> create_pldm_package(uint8_t* component_image,
+                                               size_t component_image_size);
 
 std::unique_ptr<uint8_t[]> create_pldm_package_buffer(
     const uint8_t* component_image, size_t component_image_size,
