diff --git a/dbus-sdr/sdrutils.cpp b/dbus-sdr/sdrutils.cpp
index 0c77ef7..303a696 100644
--- a/dbus-sdr/sdrutils.cpp
+++ b/dbus-sdr/sdrutils.cpp
@@ -286,8 +286,8 @@
 
 #ifdef FEATURE_HYBRID_SENSORS
 // Static sensors are listed in sensor-gen.cpp.
-ipmi::sensor::IdInfoMap::const_iterator
-    findStaticSensor(const std::string& path)
+ipmi::sensor::IdInfoMap::const_iterator findStaticSensor(
+    const std::string& path)
 {
     return std::find_if(
         ipmi::sensor::sensors.begin(), ipmi::sensor::sensors.end(),
@@ -411,8 +411,8 @@
     return interfacesResponse;
 }
 
-std::map<std::string, Value>
-    getEntityManagerProperties(const char* path, const char* interface)
+std::map<std::string, Value> getEntityManagerProperties(const char* path,
+                                                        const char* interface)
 {
     std::map<std::string, Value> properties;
     std::shared_ptr<sdbusplus::asio::connection> dbus = getSdBus();
@@ -439,8 +439,8 @@
 
 // Fetch the ipmiDecoratorPaths to get the list of dbus objects that
 // have ipmi decorator to prevent unnessary dbus call to fetch the info
-std::optional<std::unordered_set<std::string>>&
-    getIpmiDecoratorPaths(const std::optional<ipmi::Context::ptr>& ctx)
+std::optional<std::unordered_set<std::string>>& getIpmiDecoratorPaths(
+    const std::optional<ipmi::Context::ptr>& ctx)
 {
     static std::optional<std::unordered_set<std::string>> ipmiDecoratorPaths;
 
diff --git a/dbus-sdr/sensorcommands.cpp b/dbus-sdr/sensorcommands.cpp
index b36ffe8..2ef33b9 100644
--- a/dbus-sdr/sensorcommands.cpp
+++ b/dbus-sdr/sensorcommands.cpp
@@ -411,8 +411,8 @@
 namespace sensor
 {
 // Read VR profiles from sensor(daemon) interface
-static std::optional<std::vector<std::string>>
-    getSupportedVrProfiles(const ipmi::DbusInterfaceMap::mapped_type& object)
+static std::optional<std::vector<std::string>> getSupportedVrProfiles(
+    const ipmi::DbusInterfaceMap::mapped_type& object)
 {
     // get VR mode profiles from Supported Interface
     auto supportedProperty = object.find("Supported");
@@ -472,9 +472,9 @@
 }
 
 // Calculate sensor value from IPMI reading byte
-static std::optional<double>
-    calculateValue(uint8_t reading, const ipmi::DbusInterfaceMap& sensorMap,
-                   const ipmi::DbusInterfaceMap::mapped_type& valueObject)
+static std::optional<double> calculateValue(
+    uint8_t reading, const ipmi::DbusInterfaceMap& sensorMap,
+    const ipmi::DbusInterfaceMap::mapped_type& valueObject)
 {
     if (valueObject.find("Value") == valueObject.end())
     {
diff --git a/dbus-sdr/storagecommands.cpp b/dbus-sdr/storagecommands.cpp
index fa27f22..d169367 100644
--- a/dbus-sdr/storagecommands.cpp
+++ b/dbus-sdr/storagecommands.cpp
@@ -232,8 +232,8 @@
     recalculateHashes();
 }
 
-std::pair<ipmi::Cc, std::vector<uint8_t>>
-    getFru(ipmi::Context::ptr ctx, uint8_t devId)
+std::pair<ipmi::Cc, std::vector<uint8_t>> getFru(ipmi::Context::ptr ctx,
+                                                 uint8_t devId)
 {
     if (lastDevId == devId && devId != 0xFF)
     {
@@ -816,9 +816,9 @@
     return false;
 }
 
-static uint16_t
-    getNextRecordID(const uint16_t recordID,
-                    const std::vector<std::filesystem::path>& selLogFiles)
+static uint16_t getNextRecordID(
+    const uint16_t recordID,
+    const std::vector<std::filesystem::path>& selLogFiles)
 {
     uint16_t nextRecordID = recordID + 1;
     std::string entry;
@@ -1140,9 +1140,9 @@
   uint8_t eventType, uint8_t eventData1, uint8_t eventData2,
   uint8_t eventData3
 */
-ipmi::RspType<uint16_t>
-    ipmiStorageAddSELEntry(uint16_t, uint8_t, uint32_t, uint16_t, uint8_t,
-                           uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)
+ipmi::RspType<uint16_t> ipmiStorageAddSELEntry(
+    uint16_t, uint8_t, uint32_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t,
+    uint8_t, uint8_t, uint8_t)
 {
     // Per the IPMI spec, need to cancel any reservation when a SEL entry is
     // added
