diff --git a/occ_manager.cpp b/occ_manager.cpp
index 0fb5f1d..4833d5a 100644
--- a/occ_manager.cpp
+++ b/occ_manager.cpp
@@ -459,8 +459,8 @@
 {
     auto obj = std::find_if(statusObjects.begin(), statusObjects.end(),
                             [instance](const auto& obj) {
-                                return instance == obj->getOccInstanceID();
-                            });
+        return instance == obj->getOccInstanceID();
+    });
 
     if (obj != statusObjects.end() && (*obj)->occActive())
     {
@@ -478,8 +478,8 @@
 {
     auto obj = std::find_if(statusObjects.begin(), statusObjects.end(),
                             [instance](const auto& obj) {
-                                return instance == obj->getOccInstanceID();
-                            });
+        return instance == obj->getOccInstanceID();
+    });
 
     const bool hostRunning = open_power::occ::utils::isHostRunning();
     if (obj != statusObjects.end())
@@ -590,8 +590,8 @@
             constexpr auto function = "CreateDump";
 
             std::string service = utils::getService(path, interface);
-            auto method =
-                bus.new_method_call(service.c_str(), path, interface, function);
+            auto method = bus.new_method_call(service.c_str(), path, interface,
+                                              function);
 
             std::map<std::string, std::variant<std::string, uint64_t>>
                 createParams{
@@ -792,8 +792,8 @@
             continue;
         }
 
-        std::string sensorPath =
-            OCC_SENSORS_ROOT + std::string("/temperature/");
+        std::string sensorPath = OCC_SENSORS_ROOT +
+                                 std::string("/temperature/");
 
         std::string dvfsTempPath;
 
