diff --git a/src/entity_manager.cpp b/src/entity_manager.cpp
index 96eb384..84d131b 100644
--- a/src/entity_manager.cpp
+++ b/src/entity_manager.cpp
@@ -116,10 +116,10 @@
     return std::nullopt;
 }
 
-static std::shared_ptr<sdbusplus::asio::dbus_interface>
-    createInterface(sdbusplus::asio::object_server& objServer,
-                    const std::string& path, const std::string& interface,
-                    const std::string& parent, bool checkNull = false)
+static std::shared_ptr<sdbusplus::asio::dbus_interface> createInterface(
+    sdbusplus::asio::object_server& objServer, const std::string& path,
+    const std::string& interface, const std::string& parent,
+    bool checkNull = false)
 {
     // on first add we have no reason to check for null before add, as there
     // won't be any. For dynamically added interfaces, we check for null so that
diff --git a/src/fru_utils.cpp b/src/fru_utils.cpp
index c4b46cf..3ce9ef4 100644
--- a/src/fru_utils.cpp
+++ b/src/fru_utils.cpp
@@ -369,9 +369,9 @@
     }
 }
 
-resCodes
-    formatIPMIFRU(const std::vector<uint8_t>& fruBytes,
-                  boost::container::flat_map<std::string, std::string>& result)
+resCodes formatIPMIFRU(
+    const std::vector<uint8_t>& fruBytes,
+    boost::container::flat_map<std::string, std::string>& result)
 {
     resCodes ret = resCodes::resOK;
     if (fruBytes.size() <= fruBlockSize)
@@ -739,8 +739,8 @@
     return false;
 }
 
-std::pair<std::vector<uint8_t>, bool>
-    readFRUContents(FRUReader& reader, const std::string& errorHelp)
+std::pair<std::vector<uint8_t>, bool> readFRUContents(
+    FRUReader& reader, const std::string& errorHelp)
 {
     std::array<uint8_t, I2C_SMBUS_BLOCK_MAX> blockData{};
     off_t baseOffset = 0x0;
diff --git a/src/fru_utils.hpp b/src/fru_utils.hpp
index 8a117a7..dcd9752 100644
--- a/src/fru_utils.hpp
+++ b/src/fru_utils.hpp
@@ -123,9 +123,9 @@
 
 bool checkLangEng(uint8_t lang);
 
-resCodes
-    formatIPMIFRU(const std::vector<uint8_t>& fruBytes,
-                  boost::container::flat_map<std::string, std::string>& result);
+resCodes formatIPMIFRU(
+    const std::vector<uint8_t>& fruBytes,
+    boost::container::flat_map<std::string, std::string>& result);
 
 std::vector<uint8_t>& getFRUInfo(const uint16_t& bus, const uint8_t& address);
 
@@ -157,8 +157,8 @@
 /// \param errorHelp and a helper string for failures
 /// \return the FRU contents from the file and bool indicating if the FRU Header
 /// was found
-std::pair<std::vector<uint8_t>, bool>
-    readFRUContents(FRUReader& reader, const std::string& errorHelp);
+std::pair<std::vector<uint8_t>, bool> readFRUContents(
+    FRUReader& reader, const std::string& errorHelp);
 
 /// \brief Validate an IPMI FRU common header
 /// \param blockData the bytes comprising the common header
diff --git a/src/overlay.cpp b/src/overlay.cpp
index ddbddb4..2c0cbef 100644
--- a/src/overlay.cpp
+++ b/src/overlay.cpp
@@ -163,12 +163,12 @@
     return std::filesystem::exists(dirPath, ec);
 }
 
-static int
-    buildDevice(const std::string& name, const std::string& busPath,
-                const std::string& parameters, uint64_t bus, uint64_t address,
-                const std::string& constructor, const std::string& destructor,
-                const devices::createsHWMon hasHWMonDir,
-                std::vector<std::string> channelNames, const size_t retries = 5)
+static int buildDevice(
+    const std::string& name, const std::string& busPath,
+    const std::string& parameters, uint64_t bus, uint64_t address,
+    const std::string& constructor, const std::string& destructor,
+    const devices::createsHWMon hasHWMonDir,
+    std::vector<std::string> channelNames, const size_t retries = 5)
 {
     if (retries == 0U)
     {
diff --git a/src/perform_scan.cpp b/src/perform_scan.cpp
index f866b32..73df57d 100644
--- a/src/perform_scan.cpp
+++ b/src/perform_scan.cpp
@@ -28,9 +28,9 @@
 // NOLINTBEGIN(cppcoreguidelines-avoid-non-const-global-variables)
 extern std::shared_ptr<sdbusplus::asio::connection> systemBus;
 extern nlohmann::json lastJson;
-extern void
-    propertiesChangedCallback(nlohmann::json& systemConfiguration,
-                              sdbusplus::asio::object_server& objServer);
+extern void propertiesChangedCallback(
+    nlohmann::json& systemConfiguration,
+    sdbusplus::asio::object_server& objServer);
 // NOLINTEND(cppcoreguidelines-avoid-non-const-global-variables)
 
 using GetSubTreeType = std::vector<
@@ -46,10 +46,10 @@
     std::string interface;
 };
 
-void
-    getInterfaces(const DBusInterfaceInstance& instance,
-                  const std::vector<std::shared_ptr<PerformProbe>>& probeVector,
-                  const std::shared_ptr<PerformScan>& scan, size_t retries = 5)
+void getInterfaces(
+    const DBusInterfaceInstance& instance,
+    const std::vector<std::shared_ptr<PerformProbe>>& probeVector,
+    const std::shared_ptr<PerformScan>& scan, size_t retries = 5)
 {
     if (retries == 0U)
     {
@@ -108,10 +108,10 @@
     dbusMatches.emplace(path, std::move(match));
 }
 
-static void
-    processDbusObjects(std::vector<std::shared_ptr<PerformProbe>>& probeVector,
-                       const std::shared_ptr<PerformScan>& scan,
-                       const GetSubTreeType& interfaceSubtree)
+static void processDbusObjects(
+    std::vector<std::shared_ptr<PerformProbe>>& probeVector,
+    const std::shared_ptr<PerformScan>& scan,
+    const GetSubTreeType& interfaceSubtree)
 {
     for (const auto& [path, object] : interfaceSubtree)
     {
diff --git a/src/topology.cpp b/src/topology.cpp
index 168c160..ed827ad 100644
--- a/src/topology.cpp
+++ b/src/topology.cpp
@@ -42,8 +42,8 @@
     }
 }
 
-std::unordered_map<std::string, std::vector<Association>>
-    Topology::getAssocs(const std::map<Path, BoardName>& boards)
+std::unordered_map<std::string, std::vector<Association>> Topology::getAssocs(
+    const std::map<Path, BoardName>& boards)
 {
     std::unordered_map<std::string, std::vector<Association>> result;
 
diff --git a/src/topology.hpp b/src/topology.hpp
index 467a5ca..816704a 100644
--- a/src/topology.hpp
+++ b/src/topology.hpp
@@ -15,8 +15,8 @@
     void addBoard(const std::string& path, const std::string& boardType,
                   const std::string& boardName,
                   const nlohmann::json& exposesItem);
-    std::unordered_map<std::string, std::vector<Association>>
-        getAssocs(const std::map<std::string, std::string>& boards);
+    std::unordered_map<std::string, std::vector<Association>> getAssocs(
+        const std::map<std::string, std::string>& boards);
     void remove(const std::string& boardName);
 
   private:
