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/ethernet_interface.cpp b/src/ethernet_interface.cpp
index c965ddc..b04bc2d 100644
--- a/src/ethernet_interface.cpp
+++ b/src/ethernet_interface.cpp
@@ -52,9 +52,9 @@
 constexpr auto METHOD_GET = "Get";
 
 template <typename Func>
-inline decltype(std::declval<Func>()())
-    ignoreError(std::string_view msg, stdplus::zstring_view intf,
-                decltype(std::declval<Func>()()) fallback, Func&& func) noexcept
+inline decltype(std::declval<Func>()()) ignoreError(
+    std::string_view msg, stdplus::zstring_view intf,
+    decltype(std::declval<Func>()()) fallback, Func&& func) noexcept
 {
     try
     {
diff --git a/src/ncsi_cmd.cpp b/src/ncsi_cmd.cpp
index 67c30e8..34f5c92 100644
--- a/src/ncsi_cmd.cpp
+++ b/src/ncsi_cmd.cpp
@@ -111,8 +111,8 @@
     // clang-format on
 }
 
-static std::optional<unsigned int>
-    parseUnsigned(const char* str, const char* label)
+static std::optional<unsigned int> parseUnsigned(const char* str,
+                                                 const char* label)
 {
     try
     {
@@ -171,8 +171,8 @@
     return addr;
 }
 
-static std::optional<std::vector<unsigned char>>
-    parsePayload(int argc, const char* const argv[])
+static std::optional<std::vector<unsigned char>> parsePayload(
+    int argc, const char* const argv[])
 {
     /* we have already checked that there are sufficient args in callers */
     assert(argc >= 1);
@@ -243,8 +243,8 @@
     return payload;
 }
 
-static std::optional<std::tuple<GlobalOptions, int>>
-    parseGlobalOptions(int argc, char* const* argv)
+static std::optional<std::tuple<GlobalOptions, int>> parseGlobalOptions(
+    int argc, char* const* argv)
 {
     std::optional<unsigned int> chan, package, interface;
     std::optional<MCTPAddress> mctp;
@@ -453,8 +453,8 @@
     return ncsiCommand(options, oemType, *payload);
 }
 
-static std::array<unsigned char, 12>
-    generateDumpCmdPayload(uint32_t chunkNum, uint32_t dataHandle, bool isAbort)
+static std::array<unsigned char, 12> generateDumpCmdPayload(
+    uint32_t chunkNum, uint32_t dataHandle, bool isAbort)
 {
     std::array<unsigned char, 12> payload = {};
     uint8_t opcode;
diff --git a/src/rtnetlink.cpp b/src/rtnetlink.cpp
index 5229c94..442eae9 100644
--- a/src/rtnetlink.cpp
+++ b/src/rtnetlink.cpp
@@ -88,8 +88,8 @@
 }
 
 template <typename Addr>
-static std::optional<std::tuple<unsigned, stdplus::InAnyAddr>>
-    parse(std::string_view msg)
+static std::optional<std::tuple<unsigned, stdplus::InAnyAddr>> parse(
+    std::string_view msg)
 {
     std::optional<unsigned> ifIdx;
     std::optional<stdplus::InAnyAddr> gw;
@@ -113,8 +113,8 @@
     return std::nullopt;
 }
 
-std::optional<std::tuple<unsigned, stdplus::InAnyAddr>>
-    gatewayFromRtm(std::string_view msg)
+std::optional<std::tuple<unsigned, stdplus::InAnyAddr>> gatewayFromRtm(
+    std::string_view msg)
 {
     const auto& rtm = extractRtData<rtmsg>(msg);
     if (rtm.rtm_table != RT_TABLE_MAIN || rtm.rtm_dst_len != 0)
diff --git a/src/rtnetlink.hpp b/src/rtnetlink.hpp
index f35c25f..821b811 100644
--- a/src/rtnetlink.hpp
+++ b/src/rtnetlink.hpp
@@ -10,8 +10,8 @@
 
 InterfaceInfo intfFromRtm(std::string_view msg);
 
-std::optional<std::tuple<unsigned, stdplus::InAnyAddr>>
-    gatewayFromRtm(std::string_view msg);
+std::optional<std::tuple<unsigned, stdplus::InAnyAddr>> gatewayFromRtm(
+    std::string_view msg);
 
 AddressInfo addrFromRtm(std::string_view msg);
 
diff --git a/src/util.cpp b/src/util.cpp
index ac4d1b4..6fba783 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -88,8 +88,8 @@
 }
 
 /** @brief Parse the comma separated interface names */
-std::unordered_set<std::string_view>
-    parseInterfaces(std::string_view interfaces)
+std::unordered_set<std::string_view> parseInterfaces(
+    std::string_view interfaces)
 {
     std::unordered_set<std::string_view> result;
     while (true)
diff --git a/src/util.hpp b/src/util.hpp
index 1c71eab..ff3b59a 100644
--- a/src/util.hpp
+++ b/src/util.hpp
@@ -90,8 +90,8 @@
 std::string_view getIgnoredInterfacesEnv();
 
 /** @brief Parse the comma separated interface names */
-std::unordered_set<std::string_view>
-    parseInterfaces(std::string_view interfaces);
+std::unordered_set<std::string_view> parseInterfaces(
+    std::string_view interfaces);
 
 /** @brief Get the ignored interfaces */
 const std::unordered_set<std::string_view>& getIgnoredInterfaces();
