diff --git a/sdbusplus.hpp b/sdbusplus.hpp
index fb6c51c..0b842e6 100644
--- a/sdbusplus.hpp
+++ b/sdbusplus.hpp
@@ -47,10 +47,10 @@
             Args&& ... args)
         {
             auto reqMsg = getBus().new_method_call(
-                              busName.c_str(),
-                              path.c_str(),
-                              interface.c_str(),
-                              method.c_str());
+                    busName.c_str(),
+                    path.c_str(),
+                    interface.c_str(),
+                    method.c_str());
             reqMsg.append(std::forward<Args>(args)...);
             auto respMsg = getBus().call(reqMsg);
 
@@ -60,7 +60,7 @@
                         "Failed to invoke DBus method.",
                         phosphor::logging::entry("PATH=%s", path.c_str()),
                         phosphor::logging::entry(
-                            "INTERFACE=%s", interface.c_str()),
+                                "INTERFACE=%s", interface.c_str()),
                         phosphor::logging::entry("METHOD=%s", method.c_str()));
                 phosphor::logging::elog<detail::errors::InternalFailure>();
             }
@@ -78,12 +78,12 @@
             Args&& ... args)
         {
             sdbusplus::message::message respMsg =
-                callMethod<Args...>(
-                    busName,
-                    path,
-                    interface,
-                    method,
-                    std::forward<Args>(args)...);
+                    callMethod<Args...>(
+                            busName,
+                            path,
+                            interface,
+                            method,
+                            std::forward<Args>(args)...);
             Ret resp;
             respMsg.read(resp);
             return resp;
@@ -98,12 +98,12 @@
             using GetObject = std::map<std::string, std::vector<std::string>>;
 
             auto mapperResp = callMethodAndRead<GetObject>(
-                                  "xyz.openbmc_project.ObjectMapper"s,
-                                  "/xyz/openbmc_project/object_mapper"s,
-                                  "xyz.openbmc_project.ObjectMapper"s,
-                                  "GetObject"s,
-                                  path,
-                                  GetObject::mapped_type{interface});
+                    "xyz.openbmc_project.ObjectMapper"s,
+                    "/xyz/openbmc_project/object_mapper"s,
+                    "xyz.openbmc_project.ObjectMapper"s,
+                    "GetObject"s,
+                    path,
+                    GetObject::mapped_type{interface});
 
             if (mapperResp.empty())
             {
@@ -111,7 +111,7 @@
                         "Object not found.",
                         phosphor::logging::entry("PATH=%s", path.c_str()),
                         phosphor::logging::entry(
-                            "INTERFACE=%s", interface.c_str()));
+                                "INTERFACE=%s", interface.c_str()));
                 phosphor::logging::elog<detail::errors::InternalFailure>();
             }
             return mapperResp.begin()->first;
@@ -127,12 +127,12 @@
             using namespace std::literals::string_literals;
 
             auto msg = callMethod(
-                           getService(path, interface),
-                           path,
-                           "org.freedesktop.DBus.Properties"s,
-                           "Get"s,
-                           interface,
-                           property);
+                    getService(path, interface),
+                    path,
+                    "org.freedesktop.DBus.Properties"s,
+                    "Get"s,
+                    interface,
+                    property);
             sdbusplus::message::variant<Property> value;
             msg.read(value);
             return value.template get<Property>();
@@ -149,16 +149,16 @@
             using namespace std::literals::string_literals;
 
             sdbusplus::message::variant<Property> varValue(
-                std::forward<Property>(value));
+                    std::forward<Property>(value));
 
             callMethod(
-                getService(path, interface),
-                path,
-                "org.freedesktop.DBus.Properties"s,
-                "Set"s,
-                interface,
-                property,
-                varValue);
+                    getService(path, interface),
+                    path,
+                    "org.freedesktop.DBus.Properties"s,
+                    "Set"s,
+                    interface,
+                    property,
+                    varValue);
         }
 
         /** @brief Invoke method with mapper lookup. */
@@ -170,11 +170,11 @@
             Args&& ... args)
         {
             return callMethod(
-                       getService(path, interface),
-                       path,
-                       interface,
-                       method,
-                       std::forward<Args>(args)...);
+                    getService(path, interface),
+                    path,
+                    interface,
+                    method,
+                    std::forward<Args>(args)...);
         }
 
         /** @brief Invoke method and read with mapper lookup. */
@@ -186,11 +186,11 @@
             Args&& ... args)
         {
             return callMethodAndRead(
-                       getService(path, interface),
-                       path,
-                       interface,
-                       method,
-                       std::forward<Args>(args)...);
+                    getService(path, interface),
+                    path,
+                    interface,
+                    method,
+                    std::forward<Args>(args)...);
         }
 };
 
