diff --git a/control/actions.hpp b/control/actions.hpp
index c7356ab..b079bf4 100644
--- a/control/actions.hpp
+++ b/control/actions.hpp
@@ -88,27 +88,28 @@
             speed,
             state = std::forward<T>(state)](auto& zone, auto& group)
     {
-        size_t numAtState = std::count_if(
-            group.begin(),
-            group.end(),
-            [&zone, &state](auto const& entry)
-            {
-                try
-                {
-                    return zone.template getPropertyValue<T>(
-                            entry.first,
-                            std::get<intfPos>(entry.second),
-                            std::get<propPos>(entry.second)) == state;
-                }
-                catch (const std::out_of_range& oore)
-                {
-                    // Default to property not equal when not found
-                    return false;
-                }
-            });
-        if (numAtState >= count)
+        size_t numAtState = 0;
+        for (auto& entry : group)
         {
-            zone.setSpeed(speed);
+            try
+            {
+                if (zone.template getPropertyValue<T>(
+                        entry.first,
+                        std::get<intfPos>(entry.second),
+                        std::get<propPos>(entry.second)) == state)
+                {
+                    numAtState++;
+                }
+            }
+            catch (const std::out_of_range& oore)
+            {
+                // Default to property not equal when not found
+            }
+            if (numAtState >= count)
+            {
+                zone.setSpeed(speed);
+                break;
+            }
         }
         // Update group's fan control active allowed based on action results
         zone.setActiveAllow(&group, !(numAtState >= count));
