diff --git a/control/json/manager.hpp b/control/json/manager.hpp
index d7657e9..2f66181 100644
--- a/control/json/manager.hpp
+++ b/control/json/manager.hpp
@@ -198,8 +198,8 @@
      *     Map of configuration keys to their corresponding configuration object
      */
     template <typename T, typename... Args>
-    static std::map<configKey, std::unique_ptr<T>> getConfig(bool isOptional,
-                                                             Args&&... args)
+    static std::map<configKey, std::unique_ptr<T>>
+        getConfig(bool isOptional, Args&&... args)
     {
         std::map<configKey, std::unique_ptr<T>> config;
 
@@ -226,16 +226,18 @@
                     if (!profiles.empty() &&
                         !std::any_of(profiles.begin(), profiles.end(),
                                      [](const auto& name) {
-                        return std::find(getActiveProfiles().begin(),
-                                         getActiveProfiles().end(),
-                                         name) != getActiveProfiles().end();
-                    }))
+                                         return std::find(
+                                                    getActiveProfiles().begin(),
+                                                    getActiveProfiles().end(),
+                                                    name) !=
+                                                getActiveProfiles().end();
+                                     }))
                     {
                         continue;
                     }
                 }
-                auto obj = std::make_unique<T>(entry,
-                                               std::forward<Args>(args)...);
+                auto obj =
+                    std::make_unique<T>(entry, std::forward<Args>(args)...);
                 config.emplace(
                     std::make_pair(obj->getName(), obj->getProfiles()),
                     std::move(obj));
