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/buildjson.cpp b/bmc/buildjson.cpp
index 61a97b7..873eba2 100644
--- a/bmc/buildjson.cpp
+++ b/bmc/buildjson.cpp
@@ -30,8 +30,8 @@
 namespace ipmi_flash
 {
 
-std::unique_ptr<TriggerableActionInterface>
-    buildFileSystemd(const nlohmann::json& data)
+std::unique_ptr<TriggerableActionInterface> buildFileSystemd(
+    const nlohmann::json& data)
 {
     /* This type of action requires a path and unit, and optionally a mode. */
     const auto& path = data.at("path");
@@ -49,8 +49,8 @@
         sdbusplus::bus::new_default(), path, unit, systemdMode);
 }
 
-std::unique_ptr<TriggerableActionInterface>
-    buildSystemd(const nlohmann::json& data)
+std::unique_ptr<TriggerableActionInterface> buildSystemd(
+    const nlohmann::json& data)
 {
     /* This type of action requires a unit, and optionally a mode. */
     const auto& unit = data.at("unit");
diff --git a/bmc/buildjson.hpp b/bmc/buildjson.hpp
index 1ef00ef..ae1c6bc 100644
--- a/bmc/buildjson.hpp
+++ b/bmc/buildjson.hpp
@@ -16,14 +16,14 @@
 /**
  * build a systemd file triggerable action from json data
  */
-std::unique_ptr<TriggerableActionInterface>
-    buildFileSystemd(const nlohmann::json& data);
+std::unique_ptr<TriggerableActionInterface> buildFileSystemd(
+    const nlohmann::json& data);
 
 /**
  * build a systemd triggerable action from json data
  */
-std::unique_ptr<TriggerableActionInterface>
-    buildSystemd(const nlohmann::json& data);
+std::unique_ptr<TriggerableActionInterface> buildSystemd(
+    const nlohmann::json& data);
 
 constexpr std::array defaultConfigPaths = {
     "/usr/share/phosphor-ipmi-flash",
@@ -108,7 +108,7 @@
      * @param[in] data - json data from a json file.
      * @return list of HandlerConfig objects.
      */
-    virtual std::vector<HandlerConfig<T>>
-        buildHandlerFromJson(const nlohmann::json& data) = 0;
+    virtual std::vector<HandlerConfig<T>> buildHandlerFromJson(
+        const nlohmann::json& data) = 0;
 };
 } // namespace ipmi_flash
diff --git a/bmc/file_handler.cpp b/bmc/file_handler.cpp
index 8005b8f..829f92c 100644
--- a/bmc/file_handler.cpp
+++ b/bmc/file_handler.cpp
@@ -52,8 +52,8 @@
     return file.good();
 }
 
-std::optional<std::vector<uint8_t>>
-    FileHandler::read(std::uint32_t offset, std::uint32_t size)
+std::optional<std::vector<uint8_t>> FileHandler::read(std::uint32_t offset,
+                                                      std::uint32_t size)
 {
     uint32_t file_size = getSize();
     if (offset > file_size)
diff --git a/bmc/file_handler.hpp b/bmc/file_handler.hpp
index a0c23af..3abbba3 100644
--- a/bmc/file_handler.hpp
+++ b/bmc/file_handler.hpp
@@ -27,8 +27,8 @@
     void close() override;
     bool write(std::uint32_t offset,
                const std::vector<std::uint8_t>& data) override;
-    virtual std::optional<std::vector<uint8_t>>
-        read(std::uint32_t offset, std::uint32_t size) override;
+    virtual std::optional<std::vector<uint8_t>> read(
+        std::uint32_t offset, std::uint32_t size) override;
     int getSize() override;
 
   private:
diff --git a/bmc/firmware-handler/firmware_handlers_builder.hpp b/bmc/firmware-handler/firmware_handlers_builder.hpp
index 6cfb649..40be15c 100644
--- a/bmc/firmware-handler/firmware_handlers_builder.hpp
+++ b/bmc/firmware-handler/firmware_handlers_builder.hpp
@@ -11,7 +11,7 @@
 class FirmwareHandlersBuilder : public HandlersBuilderIfc<ActionPack>
 {
   public:
-    std::vector<HandlerConfig<ActionPack>>
-        buildHandlerFromJson(const nlohmann::json& data) override;
+    std::vector<HandlerConfig<ActionPack>> buildHandlerFromJson(
+        const nlohmann::json& data) override;
 };
 } // namespace ipmi_flash
diff --git a/bmc/firmware-handler/lpc_aspeed.hpp b/bmc/firmware-handler/lpc_aspeed.hpp
index 1a547c9..22ce66e 100644
--- a/bmc/firmware-handler/lpc_aspeed.hpp
+++ b/bmc/firmware-handler/lpc_aspeed.hpp
@@ -15,8 +15,8 @@
 class LpcMapperAspeed : public HardwareMapperInterface
 {
   public:
-    static std::unique_ptr<HardwareMapperInterface>
-        createAspeedMapper(std::uint32_t regionAddress, std::size_t regionSize);
+    static std::unique_ptr<HardwareMapperInterface> createAspeedMapper(
+        std::uint32_t regionAddress, std::size_t regionSize);
 
     /* NOTE: This object is created and then never destroyed (unless ipmid
      * stops/crashes, etc)
diff --git a/bmc/firmware-handler/lpc_nuvoton.cpp b/bmc/firmware-handler/lpc_nuvoton.cpp
index dcf9eaa..b0d2a4e 100644
--- a/bmc/firmware-handler/lpc_nuvoton.cpp
+++ b/bmc/firmware-handler/lpc_nuvoton.cpp
@@ -97,8 +97,8 @@
  *   - WindowOffset = 4 and WindowSize = len - 4 if (addr & 0x7) == 0
  *   - WindowSize = 0 means that the region cannot be mapped otherwise
  */
-WindowMapResult
-    LpcMapperNuvoton::mapWindow(std::uint32_t address, std::uint32_t length)
+WindowMapResult LpcMapperNuvoton::mapWindow(std::uint32_t address,
+                                            std::uint32_t length)
 {
     WindowMapResult result = {};
 
diff --git a/bmc/firmware-handler/test/crc_mock.hpp b/bmc/firmware-handler/test/crc_mock.hpp
index c33188d..5dbe1ee 100644
--- a/bmc/firmware-handler/test/crc_mock.hpp
+++ b/bmc/firmware-handler/test/crc_mock.hpp
@@ -10,8 +10,8 @@
   public:
     virtual ~CrcInterface() = default;
 
-    virtual std::uint16_t
-        generateCrc(const std::vector<std::uint8_t>& data) const = 0;
+    virtual std::uint16_t generateCrc(
+        const std::vector<std::uint8_t>& data) const = 0;
 };
 
 class CrcMock : public CrcInterface
diff --git a/bmc/general_systemd.hpp b/bmc/general_systemd.hpp
index 48e5177..523f623 100644
--- a/bmc/general_systemd.hpp
+++ b/bmc/general_systemd.hpp
@@ -14,9 +14,9 @@
 class SystemdNoFile : public TriggerableActionInterface
 {
   public:
-    static std::unique_ptr<TriggerableActionInterface>
-        CreateSystemdNoFile(sdbusplus::bus_t&& bus, const std::string& service,
-                            const std::string& mode);
+    static std::unique_ptr<TriggerableActionInterface> CreateSystemdNoFile(
+        sdbusplus::bus_t&& bus, const std::string& service,
+        const std::string& mode);
 
     SystemdNoFile(sdbusplus::bus_t&& bus, const std::string& service,
                   const std::string& mode) :
diff --git a/bmc/image_handler.hpp b/bmc/image_handler.hpp
index 59944c6..f52455a 100644
--- a/bmc/image_handler.hpp
+++ b/bmc/image_handler.hpp
@@ -50,8 +50,8 @@
      * on failure otherwise returns a vector filled with the bytes read.
      *
      */
-    virtual std::optional<std::vector<std::uint8_t>>
-        read(std::uint32_t offset, std::uint32_t size) = 0;
+    virtual std::optional<std::vector<std::uint8_t>> read(
+        std::uint32_t offset, std::uint32_t size) = 0;
 
     /**
      * return the size of the file (if that notion makes sense).
diff --git a/bmc/log-handler/log_handlers_builder.hpp b/bmc/log-handler/log_handlers_builder.hpp
index 552758d..fe124a9 100644
--- a/bmc/log-handler/log_handlers_builder.hpp
+++ b/bmc/log-handler/log_handlers_builder.hpp
@@ -29,7 +29,7 @@
 class LogHandlersBuilder : public HandlersBuilderIfc<LogBlobHandler::ActionPack>
 {
   public:
-    std::vector<HandlerConfig<LogBlobHandler::ActionPack>>
-        buildHandlerFromJson(const nlohmann::json& data) override;
+    std::vector<HandlerConfig<LogBlobHandler::ActionPack>> buildHandlerFromJson(
+        const nlohmann::json& data) override;
 };
 } // namespace ipmi_flash
diff --git a/tools/handler.cpp b/tools/handler.cpp
index 55503b9..5b5fc91 100644
--- a/tools/handler.cpp
+++ b/tools/handler.cpp
@@ -161,8 +161,8 @@
     return true;
 }
 
-std::vector<uint8_t>
-    UpdateHandler::retryReadVersion(const std::string& versionBlob)
+std::vector<uint8_t> UpdateHandler::retryReadVersion(
+    const std::string& versionBlob)
 {
     auto session =
         openBlob(blob, versionBlob,
diff --git a/tools/handler.hpp b/tools/handler.hpp
index 25dc2f5..69b7423 100644
--- a/tools/handler.hpp
+++ b/tools/handler.hpp
@@ -50,8 +50,8 @@
      * @param[in] versionBlob - the version blob id within the version handler.
      * @return firmware version
      */
-    virtual std::vector<uint8_t>
-        readVersion(const std::string& versionBlob) = 0;
+    virtual std::vector<uint8_t> readVersion(
+        const std::string& versionBlob) = 0;
 
     /**
      * Cleanup the artifacts by triggering this action.
@@ -107,8 +107,8 @@
     /**
      * @throw ToolException on failure.
      */
-    std::vector<uint8_t>
-        retryIfFailed(stdplus::function_view<std::vector<uint8_t>()> callback);
+    std::vector<uint8_t> retryIfFailed(
+        stdplus::function_view<std::vector<uint8_t>()> callback);
 };
 
 } // namespace host_tool
diff --git a/tools/pciaccess.cpp b/tools/pciaccess.cpp
index f3c9e6e..0c3f4e3 100644
--- a/tools/pciaccess.cpp
+++ b/tools/pciaccess.cpp
@@ -39,8 +39,8 @@
     return ::pci_device_enable(dev);
 }
 
-struct pci_device*
-    PciAccessImpl::pci_device_next(struct pci_device_iterator* iter) const
+struct pci_device* PciAccessImpl::pci_device_next(
+    struct pci_device_iterator* iter) const
 {
     return ::pci_device_next(iter);
 }
diff --git a/tools/pciaccess.hpp b/tools/pciaccess.hpp
index 99ba265..0930304 100644
--- a/tools/pciaccess.hpp
+++ b/tools/pciaccess.hpp
@@ -35,11 +35,11 @@
   public:
     virtual struct pci_device_iterator* pci_id_match_iterator_create(
         const struct pci_id_match* match) const = 0;
-    virtual void
-        pci_iterator_destroy(struct pci_device_iterator* iter) const = 0;
+    virtual void pci_iterator_destroy(
+        struct pci_device_iterator* iter) const = 0;
     virtual void pci_device_enable(struct pci_device* dev) const = 0;
-    virtual struct pci_device*
-        pci_device_next(struct pci_device_iterator* iter) const = 0;
+    virtual struct pci_device* pci_device_next(
+        struct pci_device_iterator* iter) const = 0;
     virtual int pci_device_probe(struct pci_device* dev) const = 0;
     virtual int pci_device_cfg_read_u8(
         struct pci_device* dev, std::uint8_t* data, pciaddr_t offset) const = 0;
@@ -66,8 +66,8 @@
         const struct pci_id_match* match) const override;
     void pci_iterator_destroy(struct pci_device_iterator* iter) const override;
     void pci_device_enable(struct pci_device* dev) const override;
-    struct pci_device*
-        pci_device_next(struct pci_device_iterator* iter) const override;
+    struct pci_device* pci_device_next(
+        struct pci_device_iterator* iter) const override;
     int pci_device_probe(struct pci_device* dev) const override;
     int pci_device_cfg_read_u8(struct pci_device* dev, std::uint8_t* data,
                                pciaddr_t offset) const override;
diff --git a/tools/test/tools_pci_unittest.cpp b/tools/test/tools_pci_unittest.cpp
index 785b8da..3bbc8b4 100644
--- a/tools/test/tools_pci_unittest.cpp
+++ b/tools/test/tools_pci_unittest.cpp
@@ -71,8 +71,8 @@
     virtual const struct pci_id_match* getMatch() const = 0;
     virtual struct pci_device getDevice() const = 0;
     virtual void expectSetup(PciAccessMock&, const struct pci_device&) const {};
-    virtual std::unique_ptr<PciBridgeIntf>
-        getBridge(PciAccess* pci, bool skipBridgeDisable = false) const = 0;
+    virtual std::unique_ptr<PciBridgeIntf> getBridge(
+        PciAccess* pci, bool skipBridgeDisable = false) const = 0;
     virtual std::string getName() const = 0;
 };
 
@@ -121,8 +121,8 @@
             .WillOnce(Return(0));
     }
 
-    std::unique_ptr<PciBridgeIntf>
-        getBridge(PciAccess* pci, bool skipBridgeDisable = false) const override
+    std::unique_ptr<PciBridgeIntf> getBridge(
+        PciAccess* pci, bool skipBridgeDisable = false) const override
     {
         return std::make_unique<NuvotonPciBridge>(pci, skipBridgeDisable);
     }
@@ -164,8 +164,8 @@
         return dev;
     }
 
-    std::unique_ptr<PciBridgeIntf>
-        getBridge(PciAccess* pci, bool skipBridgeDisable = false) const override
+    std::unique_ptr<PciBridgeIntf> getBridge(
+        PciAccess* pci, bool skipBridgeDisable = false) const override
     {
         return std::make_unique<AspeedPciBridge>(pci, skipBridgeDisable);
     }
