diff --git a/control/json/actions/action.hpp b/control/json/actions/action.hpp
index 0377a8a..93cd9e2 100644
--- a/control/json/actions/action.hpp
+++ b/control/json/actions/action.hpp
@@ -153,10 +153,11 @@
      */
     virtual void addZone(Zone& zone)
     {
-        auto itZone = std::find_if(_zones.begin(), _zones.end(),
-                                   [&zone](std::reference_wrapper<Zone>& z) {
-            return z.get().getName() == zone.getName();
-        });
+        auto itZone =
+            std::find_if(_zones.begin(), _zones.end(),
+                         [&zone](std::reference_wrapper<Zone>& z) {
+                             return z.get().getName() == zone.getName();
+                         });
         if (itZone == _zones.end())
         {
             _zones.emplace_back(std::reference_wrapper<Zone>(zone));
@@ -223,8 +224,8 @@
         json groups = json::array();
         std::for_each(_groups.begin(), _groups.end(),
                       [&groups](const auto& group) {
-            groups.push_back(group.getName());
-        });
+                          groups.push_back(group.getName());
+                      });
         json output;
         output["groups"] = groups;
         return output;
@@ -331,11 +332,11 @@
         else
         {
             // Construct list of available actions
-            auto acts = std::accumulate(std::next(actions.begin()),
-                                        actions.end(), actions.begin()->first,
-                                        [](auto list, auto act) {
-                return std::move(list) + ", " + act.first;
-            });
+            auto acts = std::accumulate(
+                std::next(actions.begin()), actions.end(),
+                actions.begin()->first, [](auto list, auto act) {
+                    return std::move(list) + ", " + act.first;
+                });
             log<level::ERR>(
                 std::format("Action '{}' is not registered", name).c_str(),
                 entry("AVAILABLE_ACTIONS=%s", acts.c_str()));
