diff --git a/src/handler.cpp b/src/handler.cpp
index 67dc541..30b7ba3 100644
--- a/src/handler.cpp
+++ b/src/handler.cpp
@@ -77,11 +77,11 @@
                         interfaces.size(), interfaceMap.second.size()));
                     // Return iterator points at the first output elemtn,
                     // meaning that there are no intersections.
-                    if (std::set_intersection(interfaces.begin(),
-                                              interfaces.end(),
-                                              interfaceMap.second.begin(),
-                                              interfaceMap.second.end(),
-                                              output.begin()) != output.begin())
+                    if (std::set_intersection(
+                            interfaces.begin(), interfaces.end(),
+                            interfaceMap.second.begin(),
+                            interfaceMap.second.end(), output.begin()) !=
+                        output.begin())
                     {
                         addObjectMapResult(ret, thisPath, interfaceMap);
                     }
@@ -119,8 +119,8 @@
         // meaning that there are no intersections.
         if (std::set_intersection(interfaces.begin(), interfaces.end(),
                                   interfaceMap.second.begin(),
-                                  interfaceMap.second.end(),
-                                  output.begin()) != output.begin())
+                                  interfaceMap.second.end(), output.begin()) !=
+            output.begin())
         {
             results.emplace(interfaceMap.first, interfaceMap.second);
         }
@@ -203,9 +203,9 @@
     return ret;
 }
 
-std::vector<std::string> getSubTreePaths(const InterfaceMapType& interfaceMap,
-                                         std::string reqPath, int32_t depth,
-                                         std::vector<std::string>& interfaces)
+std::vector<std::string>
+    getSubTreePaths(const InterfaceMapType& interfaceMap, std::string reqPath,
+                    int32_t depth, std::vector<std::string>& interfaces)
 {
     if (depth <= 0)
     {
@@ -255,11 +255,11 @@
                         interfaces.size(), interfaceMap.second.size()));
                     // Return iterator points at the first output elemtn,
                     // meaning that there are no intersections.
-                    if (std::set_intersection(interfaces.begin(),
-                                              interfaces.end(),
-                                              interfaceMap.second.begin(),
-                                              interfaceMap.second.end(),
-                                              output.begin()) != output.begin())
+                    if (std::set_intersection(
+                            interfaces.begin(), interfaces.end(),
+                            interfaceMap.second.begin(),
+                            interfaceMap.second.end(), output.begin()) !=
+                        output.begin())
                     {
                         add = true;
                         break;
@@ -277,12 +277,12 @@
     return ret;
 }
 
-std::vector<InterfaceMapType::value_type>
-    getAssociatedSubTree(const InterfaceMapType& interfaceMap,
-                         const AssociationMaps& associationMaps,
-                         const sdbusplus::message::object_path& associationPath,
-                         const sdbusplus::message::object_path& reqPath,
-                         int32_t depth, std::vector<std::string>& interfaces)
+std::vector<InterfaceMapType::value_type> getAssociatedSubTree(
+    const InterfaceMapType& interfaceMap,
+    const AssociationMaps& associationMaps,
+    const sdbusplus::message::object_path& associationPath,
+    const sdbusplus::message::object_path& reqPath, int32_t depth,
+    std::vector<std::string>& interfaces)
 {
     auto findEndpoint = associationMaps.ifaces.find(associationPath.str);
     if (findEndpoint == associationMaps.ifaces.end())
