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/src/ipmiblob/blob_handler.cpp b/src/ipmiblob/blob_handler.cpp
index 362e264..1f8a33b 100644
--- a/src/ipmiblob/blob_handler.cpp
+++ b/src/ipmiblob/blob_handler.cpp
@@ -36,8 +36,8 @@
 const std::array<std::uint8_t, 3> ipmiPhosphorOen = {0xcf, 0xc2, 0x00};
 }
 
-std::unique_ptr<BlobInterface>
-    BlobHandler::CreateBlobHandler(std::unique_ptr<IpmiInterface> ipmi)
+std::unique_ptr<BlobInterface> BlobHandler::CreateBlobHandler(
+    std::unique_ptr<IpmiInterface> ipmi)
 {
     return std::make_unique<BlobHandler>(std::move(ipmi));
 }
diff --git a/src/ipmiblob/blob_handler.hpp b/src/ipmiblob/blob_handler.hpp
index dddf41b..983f760 100644
--- a/src/ipmiblob/blob_handler.hpp
+++ b/src/ipmiblob/blob_handler.hpp
@@ -17,8 +17,8 @@
      * @note This is a convenience method.
      * @return a BlobHandler wrapped as a BlobInterface pointer.
      */
-    static std::unique_ptr<BlobInterface>
-        CreateBlobHandler(std::unique_ptr<IpmiInterface> ipmi);
+    static std::unique_ptr<BlobInterface> CreateBlobHandler(
+        std::unique_ptr<IpmiInterface> ipmi);
 
     explicit BlobHandler(std::unique_ptr<IpmiInterface> ipmi) :
         ipmi(std::move(ipmi)) {};
diff --git a/src/ipmiblob/ipmi_handler.hpp b/src/ipmiblob/ipmi_handler.hpp
index 1fbf5b6..a7e1613 100644
--- a/src/ipmiblob/ipmi_handler.hpp
+++ b/src/ipmiblob/ipmi_handler.hpp
@@ -38,9 +38,9 @@
     /**
      * @throws IpmiException on failure.
      */
-    std::vector<std::uint8_t>
-        sendPacket(std::uint8_t netfn, std::uint8_t cmd,
-                   std::vector<std::uint8_t>& data) override;
+    std::vector<std::uint8_t> sendPacket(
+        std::uint8_t netfn, std::uint8_t cmd,
+        std::vector<std::uint8_t>& data) override;
 
   private:
     const std::unique_ptr<internal::Sys> sys;
diff --git a/src/ipmiblob/ipmi_interface.hpp b/src/ipmiblob/ipmi_interface.hpp
index 4a62c2c..ea13b24 100644
--- a/src/ipmiblob/ipmi_interface.hpp
+++ b/src/ipmiblob/ipmi_interface.hpp
@@ -20,9 +20,9 @@
      * @return the bytes returned.
      * @throws IpmiException on failure.
      */
-    virtual std::vector<std::uint8_t>
-        sendPacket(std::uint8_t netfn, std::uint8_t cmd,
-                   std::vector<std::uint8_t>& data) = 0;
+    virtual std::vector<std::uint8_t> sendPacket(
+        std::uint8_t netfn, std::uint8_t cmd,
+        std::vector<std::uint8_t>& data) = 0;
 };
 
 } // namespace ipmiblob
diff --git a/src/ipmiblob/test/crc_mock.hpp b/src/ipmiblob/test/crc_mock.hpp
index 67bf9fd..f0378f7 100644
--- a/src/ipmiblob/test/crc_mock.hpp
+++ b/src/ipmiblob/test/crc_mock.hpp
@@ -13,8 +13,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
