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/average.cpp b/average.cpp
index 2cc5240..9e8e5d8 100644
--- a/average.cpp
+++ b/average.cpp
@@ -2,8 +2,8 @@
 
 #include <cassert>
 
-std::optional<Average::averageValue>
-    Average::getAverageValue(const Average::averageKey& sensorKey) const
+std::optional<Average::averageValue> Average::getAverageValue(
+    const Average::averageKey& sensorKey) const
 {
     const auto it = _previousAverageMap.find(sensorKey);
     if (it == _previousAverageMap.end())
@@ -20,9 +20,9 @@
     _previousAverageMap[sensorKey] = sensorValue;
 }
 
-std::optional<int64_t>
-    Average::calcAverage(int64_t preAverage, int64_t preInterval,
-                         int64_t curAverage, int64_t curInterval)
+std::optional<int64_t> Average::calcAverage(
+    int64_t preAverage, int64_t preInterval, int64_t curAverage,
+    int64_t curInterval)
 {
     int64_t value = 0;
     // Estimate that the interval will overflow about 292471
diff --git a/average.hpp b/average.hpp
index bf91404..47a1fdc 100644
--- a/average.hpp
+++ b/average.hpp
@@ -34,8 +34,8 @@
      *      return {}, if sensorKey can not be found in averageMap
      *      return averageValue, if sensorKey can be found in averageMap
      */
-    std::optional<averageValue>
-        getAverageValue(const averageKey& sensorKey) const;
+    std::optional<averageValue> getAverageValue(
+        const averageKey& sensorKey) const;
 
     /** @brief Set average value in averageMap based on sensor key.
      *  This function will be called only when the env AVERAGE_xxx is set to
@@ -60,9 +60,9 @@
      *      return {}, if curInterval-preInterval=0
      *      return new calculated average value, if curInterval-preInterval>0
      */
-    static std::optional<int64_t>
-        calcAverage(int64_t preAverage, int64_t preInterval, int64_t curAverage,
-                    int64_t curInterval);
+    static std::optional<int64_t> calcAverage(
+        int64_t preAverage, int64_t preInterval, int64_t curAverage,
+        int64_t curInterval);
 
   private:
     /** @brief Store the previous average sensor map */
diff --git a/gpio_handle.cpp b/gpio_handle.cpp
index a4f6115..5a13775 100644
--- a/gpio_handle.cpp
+++ b/gpio_handle.cpp
@@ -13,8 +13,8 @@
 
 using namespace phosphor::logging;
 
-std::unique_ptr<gpioplus::HandleInterface>
-    BuildGpioHandle(const std::string& gpiochip, const std::string& line)
+std::unique_ptr<gpioplus::HandleInterface> BuildGpioHandle(
+    const std::string& gpiochip, const std::string& line)
 {
     char *gpioEnd, *lineEnd;
     unsigned long chipId = std::strtoul(gpiochip.c_str(), &gpioEnd, 10);
diff --git a/gpio_handle.hpp b/gpio_handle.hpp
index 924efe8..e9c9454 100644
--- a/gpio_handle.hpp
+++ b/gpio_handle.hpp
@@ -15,7 +15,7 @@
  * @param[in] line - gpio line offset as string.
  * @return A gpioplus::HandleInterface on success nullptr on failure.
  */
-std::unique_ptr<gpioplus::HandleInterface>
-    BuildGpioHandle(const std::string& gpiochip, const std::string& line);
+std::unique_ptr<gpioplus::HandleInterface> BuildGpioHandle(
+    const std::string& gpiochip, const std::string& line);
 
 } // namespace gpio
diff --git a/mainloop.cpp b/mainloop.cpp
index 2271fba..825e053 100644
--- a/mainloop.cpp
+++ b/mainloop.cpp
@@ -169,8 +169,8 @@
     return id;
 }
 
-SensorIdentifiers
-    MainLoop::getIdentifiers(SensorSet::container_t::const_reference sensor)
+SensorIdentifiers MainLoop::getIdentifiers(
+    SensorSet::container_t::const_reference sensor)
 {
     std::string id = getID(sensor);
     std::string label;
@@ -198,8 +198,8 @@
  * object's state data is then returned for sensor state monitoring within
  * the main loop.
  */
-std::optional<ObjectStateData>
-    MainLoop::getObject(SensorSet::container_t::const_reference sensor)
+std::optional<ObjectStateData> MainLoop::getObject(
+    SensorSet::container_t::const_reference sensor)
 {
     auto properties = getIdentifiers(sensor);
     if (std::get<sensorID>(properties).empty() ||
diff --git a/mainloop.hpp b/mainloop.hpp
index 6ce02a2..0c68a24 100644
--- a/mainloop.hpp
+++ b/mainloop.hpp
@@ -149,8 +149,8 @@
      *
      * @param[in] sensor - Sensor to get the identifiers of
      */
-    SensorIdentifiers
-        getIdentifiers(SensorSet::container_t::const_reference sensor);
+    SensorIdentifiers getIdentifiers(
+        SensorSet::container_t::const_reference sensor);
 
     /**
      * @brief Used to create and add sensor objects
@@ -160,8 +160,8 @@
      * @return - Optional
      *     Object state data on success, nothing on failure
      */
-    std::optional<ObjectStateData>
-        getObject(SensorSet::container_t::const_reference sensor);
+    std::optional<ObjectStateData> getObject(
+        SensorSet::container_t::const_reference sensor);
 };
 
 /** @brief Given a value and map of interfaces, update values and check
diff --git a/sensor.cpp b/sensor.cpp
index ff7635f..bfd4468 100644
--- a/sensor.cpp
+++ b/sensor.cpp
@@ -262,8 +262,8 @@
     return iface;
 }
 
-std::shared_ptr<AccuracyObject>
-    Sensor::addAccuracy(ObjectInfo& info, double accuracy)
+std::shared_ptr<AccuracyObject> Sensor::addAccuracy(ObjectInfo& info,
+                                                    double accuracy)
 {
     auto& objPath = std::get<std::string>(info);
     auto& obj = std::get<InterfaceMap>(info);
@@ -278,8 +278,8 @@
     return iface;
 }
 
-std::shared_ptr<PriorityObject>
-    Sensor::addPriority(ObjectInfo& info, size_t priority)
+std::shared_ptr<PriorityObject> Sensor::addPriority(ObjectInfo& info,
+                                                    size_t priority)
 {
     auto& objPath = std::get<std::string>(info);
     auto& obj = std::get<InterfaceMap>(info);
diff --git a/sensor.hpp b/sensor.hpp
index 9d426cb..4d8b689 100644
--- a/sensor.hpp
+++ b/sensor.hpp
@@ -133,8 +133,8 @@
      *
      * @return - Shared pointer to the accuracy object
      */
-    std::shared_ptr<AccuracyObject>
-        addAccuracy(ObjectInfo& info, double accuracy);
+    std::shared_ptr<AccuracyObject> addAccuracy(ObjectInfo& info,
+                                                double accuracy);
 
     /**
      * @brief Add Priority interface and priority property for sensors
@@ -146,8 +146,8 @@
      * @return - Shared pointer to the priority object
      */
 
-    std::shared_ptr<PriorityObject>
-        addPriority(ObjectInfo& info, size_t priority);
+    std::shared_ptr<PriorityObject> addPriority(ObjectInfo& info,
+                                                size_t priority);
 
     /**
      * @brief Get the scale from the sensor.
diff --git a/sysfs.hpp b/sysfs.hpp
index 6a84cba..9b542bb 100644
--- a/sysfs.hpp
+++ b/sysfs.hpp
@@ -5,9 +5,9 @@
 namespace sysfs
 {
 
-inline std::string
-    make_sysfs_path(const std::string& path, const std::string& type,
-                    const std::string& id, const std::string& entry)
+inline std::string make_sysfs_path(
+    const std::string& path, const std::string& type, const std::string& id,
+    const std::string& entry)
 {
     using namespace std::literals;
 
diff --git a/test/gpio.cpp b/test/gpio.cpp
index cf01a0a..2e3d397 100644
--- a/test/gpio.cpp
+++ b/test/gpio.cpp
@@ -9,8 +9,8 @@
 namespace gpio
 {
 
-std::unique_ptr<gpioplus::HandleInterface>
-    BuildGpioHandle(const std::string& gpiochip, const std::string& line)
+std::unique_ptr<gpioplus::HandleInterface> BuildGpioHandle(
+    const std::string& gpiochip, const std::string& line)
 {
     return (gpioIntf) ? gpioIntf->build(gpiochip, line) : nullptr;
 }
diff --git a/test/gpio_mock.hpp b/test/gpio_mock.hpp
index 0e659f8..b833b9b 100644
--- a/test/gpio_mock.hpp
+++ b/test/gpio_mock.hpp
@@ -11,8 +11,8 @@
 {
   public:
     virtual ~GpioHandleInterface() = default;
-    virtual std::unique_ptr<gpioplus::HandleInterface>
-        build(const std::string& gpiochip, const std::string& line) const = 0;
+    virtual std::unique_ptr<gpioplus::HandleInterface> build(
+        const std::string& gpiochip, const std::string& line) const = 0;
 };
 
 class GpioHandleMock : public GpioHandleInterface
