diff --git a/src/utils.cpp b/src/utils.cpp
index 6ff7a2b..d95fb5e 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -158,28 +158,28 @@
             "',path='" + std::string(power::path) + "',arg0='" +
             std::string(power::interface) + "'",
         [](sdbusplus::message_t& message) {
-        std::string objectName;
-        boost::container::flat_map<std::string, std::variant<std::string>>
-            values;
-        message.read(objectName, values);
-        auto findState = values.find(power::property);
-        if (findState != values.end())
-        {
-            powerStatusOn = boost::ends_with(
-                std::get<std::string>(findState->second), "Running");
-        }
-    });
+            std::string objectName;
+            boost::container::flat_map<std::string, std::variant<std::string>>
+                values;
+            message.read(objectName, values);
+            auto findState = values.find(power::property);
+            if (findState != values.end())
+            {
+                powerStatusOn = boost::ends_with(
+                    std::get<std::string>(findState->second), "Running");
+            }
+        });
 
     conn->async_method_call(
         [](boost::system::error_code ec,
            const std::variant<std::string>& state) {
-        if (ec)
-        {
-            return;
-        }
-        powerStatusOn = boost::ends_with(std::get<std::string>(state),
-                                         "Running");
-    },
+            if (ec)
+            {
+                return;
+            }
+            powerStatusOn =
+                boost::ends_with(std::get<std::string>(state), "Running");
+        },
         power::busname, power::path, properties::interface, properties::get,
         power::interface, power::property);
 }
@@ -187,10 +187,9 @@
 // Replaces the template character like the other version of this function,
 // but checks all properties on all interfaces provided to do the substitution
 // with.
-std::optional<std::string>
-    templateCharReplace(nlohmann::json::iterator& keyPair,
-                        const DBusObject& object, const size_t index,
-                        const std::optional<std::string>& replaceStr)
+std::optional<std::string> templateCharReplace(
+    nlohmann::json::iterator& keyPair, const DBusObject& object,
+    const size_t index, const std::optional<std::string>& replaceStr)
 {
     for (const auto& [_, interface] : object)
     {
@@ -206,10 +205,9 @@
 // finds the template character (currently set to $) and replaces the value with
 // the field found in a dbus object i.e. $ADDRESS would get populated with the
 // ADDRESS field from a object on dbus
-std::optional<std::string>
-    templateCharReplace(nlohmann::json::iterator& keyPair,
-                        const DBusInterface& interface, const size_t index,
-                        const std::optional<std::string>& replaceStr)
+std::optional<std::string> templateCharReplace(
+    nlohmann::json::iterator& keyPair, const DBusInterface& interface,
+    const size_t index, const std::optional<std::string>& replaceStr)
 {
     std::optional<std::string> ret = std::nullopt;
 
