diff --git a/src/cpuinfo_main.cpp b/src/cpuinfo_main.cpp
index 6eb60e4..cbe2ed6 100644
--- a/src/cpuinfo_main.cpp
+++ b/src/cpuinfo_main.cpp
@@ -90,18 +90,18 @@
     return std::cerr << "[CPU " << cpu << "] ";
 }
 
-static void
-    setCpuProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                   size_t cpu, const std::string& interface,
-                   const std::string& propName, const std::string& propVal);
-static void
-    setDbusProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                    size_t cpu, const CpuProperty& newProp);
+static void setCpuProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const std::string& interface, const std::string& propName,
+    const std::string& propVal);
+static void setDbusProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const CpuProperty& newProp);
 static void createCpuUpdatedMatch(
     const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu);
 
-static std::optional<std::string>
-    readSSpec(uint8_t bus, uint8_t slaveAddr, uint8_t regAddr, size_t count)
+static std::optional<std::string> readSSpec(uint8_t bus, uint8_t slaveAddr,
+                                            uint8_t regAddr, size_t count)
 {
     unsigned long funcs = 0;
     std::string devPath = "/dev/i2c-" + std::to_string(bus);
@@ -259,10 +259,10 @@
  * @param[in]       propName    Property to set.
  * @param[in]       propVal     Value to set.
  */
-static void
-    setCpuProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                   size_t cpu, const std::string& interface,
-                   const std::string& propName, const std::string& propVal)
+static void setCpuProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const std::string& interface, const std::string& propName,
+    const std::string& propVal)
 {
     // cpuId from configuration is one based as
     // dbus object path used by smbios is 0 based
@@ -283,9 +283,9 @@
  * @param[in]       cpu     1-baesd CPU index.
  * @param[in]       newProp Property to set.
  */
-static void
-    setDbusProperty(const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                    size_t cpu, const CpuProperty& newProp)
+static void setDbusProperty(
+    const std::shared_ptr<sdbusplus::asio::connection>& conn, size_t cpu,
+    const CpuProperty& newProp)
 {
     createCpuUpdatedMatch(conn, cpu);
     conn->async_method_call(
@@ -476,11 +476,11 @@
 /**
  * Get cpu and pirom address
  */
-static void
-    getCpuAddress(boost::asio::io_service& io,
-                  const std::shared_ptr<sdbusplus::asio::connection>& conn,
-                  const std::string& service, const std::string& object,
-                  const std::string& interface)
+static void getCpuAddress(
+    boost::asio::io_service& io,
+    const std::shared_ptr<sdbusplus::asio::connection>& conn,
+    const std::string& service, const std::string& object,
+    const std::string& interface)
 {
     conn->async_method_call(
         [&io, conn](boost::system::error_code ec,
diff --git a/src/mdrv2.cpp b/src/mdrv2.cpp
index d65fd12..87b197a 100644
--- a/src/mdrv2.cpp
+++ b/src/mdrv2.cpp
@@ -836,8 +836,8 @@
     return true;
 }
 
-std::vector<uint32_t>
-    MDRV2::synchronizeDirectoryCommonData(uint8_t idIndex, uint32_t size)
+std::vector<uint32_t> MDRV2::synchronizeDirectoryCommonData(uint8_t idIndex,
+                                                            uint32_t size)
 {
     std::chrono::microseconds usec(
         defaultTimeout); // default lock time out is 2s
diff --git a/src/speed_select.cpp b/src/speed_select.cpp
index 8d4db67..a6c80da 100644
--- a/src/speed_select.cpp
+++ b/src/speed_select.cpp
@@ -230,8 +230,8 @@
         return bfEnabled;
     }
 
-    sdbusplus::message::object_path
-        appliedConfig(sdbusplus::message::object_path value) override
+    sdbusplus::message::object_path appliedConfig(
+        sdbusplus::message::object_path value) override
     {
         DEBUG_PRINT << "Writing AppliedConfig\n";
         const OperatingConfig* newConfig = nullptr;
diff --git a/src/sst_mailbox.cpp b/src/sst_mailbox.cpp
index e574b96..1db4107 100644
--- a/src/sst_mailbox.cpp
+++ b/src/sst_mailbox.cpp
@@ -527,8 +527,8 @@
     {
         return GetTjmaxInfo(pm, static_cast<uint8_t>(level)).tProchot();
     }
-    std::vector<unsigned int>
-        bfHighPriorityCoreList(unsigned int level) override
+    std::vector<unsigned int> bfHighPriorityCoreList(
+        unsigned int level) override
     {
         uint64_t coreMaskLo =
             PbfGetCoreMaskInfo(pm, static_cast<uint8_t>(level), 0)
@@ -570,8 +570,8 @@
     }
 };
 
-static std::unique_ptr<SSTInterface>
-    createMailbox(uint8_t address, CPUModel model, WakePolicy wakePolicy)
+static std::unique_ptr<SSTInterface> createMailbox(
+    uint8_t address, CPUModel model, WakePolicy wakePolicy)
 {
     DEBUG_PRINT << "createMailbox\n";
     switch (model)
