diff --git a/control/preconditions.cpp b/control/preconditions.cpp
index 09284a8..842c178 100644
--- a/control/preconditions.cpp
+++ b/control/preconditions.cpp
@@ -23,22 +23,21 @@
 {
     return [pg = std::move(pg), sse = std::move(sse)](auto& zone, auto& group) {
         // Compare given precondition entries
-        auto precondState =
-            std::all_of(pg.begin(), pg.end(), [&zone](auto const& entry) {
-                try
-                {
-                    return zone.getPropValueVariant(
-                               std::get<pcPathPos>(entry),
-                               std::get<pcIntfPos>(entry),
-                               std::get<pcPropPos>(entry)) ==
-                           std::get<pcValuePos>(entry);
-                }
-                catch (const std::out_of_range& oore)
-                {
-                    // Default to property variants not equal when not found
-                    return false;
-                }
-            });
+        auto precondState = std::all_of(pg.begin(), pg.end(),
+                                        [&zone](auto const& entry) {
+            try
+            {
+                return zone.getPropValueVariant(std::get<pcPathPos>(entry),
+                                                std::get<pcIntfPos>(entry),
+                                                std::get<pcPropPos>(entry)) ==
+                       std::get<pcValuePos>(entry);
+            }
+            catch (const std::out_of_range& oore)
+            {
+                // Default to property variants not equal when not found
+                return false;
+            }
+        });
 
         if (precondState)
         {
@@ -72,10 +71,10 @@
         // Set/update the services of the group
         zone.setServices(&group);
         const auto& services = zone.getGroupServices(&group);
-        auto precondState =
-            std::any_of(services.begin(), services.end(), [](const auto& s) {
-                return !std::get<hasOwnerPos>(s);
-            });
+        auto precondState = std::any_of(services.begin(), services.end(),
+                                        [](const auto& s) {
+            return !std::get<hasOwnerPos>(s);
+        });
 
         if (precondState)
         {
