diff --git a/control/actions.hpp b/control/actions.hpp
index 167149b..ecf900e 100644
--- a/control/actions.hpp
+++ b/control/actions.hpp
@@ -50,12 +50,12 @@
                     return false;
                 }
             });
-        // Update group's fan control active allowed based on action results
-        zone.setActiveAllow(&group, !(numAtState >= count));
         if (numAtState >= count)
         {
             zone.setSpeed(speed);
         }
+        // Update group's fan control active allowed based on action results
+        zone.setActiveAllow(&group, !(numAtState >= count));
     };
 }
 
diff --git a/control/preconditions.hpp b/control/preconditions.hpp
index 8b2e93e..65eb0e2 100644
--- a/control/preconditions.hpp
+++ b/control/preconditions.hpp
@@ -54,8 +54,6 @@
                 }
             });
 
-        // Update group's fan control active allowed
-        zone.setActiveAllow(&group, (precondState == pg.size()));
         if (precondState == pg.size())
         {
             // Init the event when all the precondition(s) are true
@@ -63,10 +61,12 @@
         }
         else
         {
-            zone.setFullSpeed();
             // Unsubscribe the event signals when any precondition is false
             zone.removeEvent(sse);
+            zone.setFullSpeed();
         }
+        // Update group's fan control active allowed
+        zone.setActiveAllow(&group, (precondState == pg.size()));
     };
 }
 
diff --git a/control/zone.cpp b/control/zone.cpp
index 9670127..56c6cb6 100644
--- a/control/zone.cpp
+++ b/control/zone.cpp
@@ -73,18 +73,33 @@
     }
 }
 
-
 void Zone::setSpeed(uint64_t speed)
 {
-    for (auto& fan : _fans)
+    if (_isActive)
     {
-        fan->setSpeed(speed);
+        _targetSpeed = speed;
+        for (auto& fan : _fans)
+        {
+            fan->setSpeed(_targetSpeed);
+        }
+    }
+}
+
+void Zone::setFullSpeed()
+{
+    if (_fullSpeed != 0)
+    {
+        _targetSpeed = _fullSpeed;
+        for (auto& fan : _fans)
+        {
+            fan->setSpeed(_targetSpeed);
+        }
     }
 }
 
 void Zone::setActiveAllow(const Group* group, bool isActiveAllow)
 {
-    _active[group] = isActiveAllow;
+    _active[*(group)] = isActiveAllow;
     if (!isActiveAllow)
     {
         _isActive = false;
@@ -116,19 +131,20 @@
     if (targetDelta > _incSpeedDelta &&
         _targetSpeed < _ceilingSpeed)
     {
-        _targetSpeed = (targetDelta - _incSpeedDelta) + _targetSpeed;
+        auto requestTarget = _targetSpeed;
+        requestTarget = (targetDelta - _incSpeedDelta) + requestTarget;
         _incSpeedDelta = targetDelta;
         // Target speed can not go above a defined ceiling speed
-        if (_targetSpeed > _ceilingSpeed)
+        if (requestTarget > _ceilingSpeed)
         {
-            _targetSpeed = _ceilingSpeed;
+            requestTarget = _ceilingSpeed;
         }
         // Cancel current timer countdown
         if (_incTimer.running())
         {
             _incTimer.stop();
         }
-        setSpeed(_targetSpeed);
+        setSpeed(requestTarget);
         // Start timer countdown for fan speed increase
         _incTimer.start(_incDelay,
                         phosphor::fan::util::Timer::TimerType::oneshot);
@@ -157,17 +173,18 @@
     // the increase timer is not running (i.e. not in the middle of increasing)
     if (_incSpeedDelta == 0 && !_incTimer.running())
     {
+        auto requestTarget = _targetSpeed;
         // Target speed can not go below the defined floor speed
-        if ((_targetSpeed < _decSpeedDelta) ||
-            (_targetSpeed - _decSpeedDelta < _floorSpeed))
+        if ((requestTarget < _decSpeedDelta) ||
+            (requestTarget - _decSpeedDelta < _floorSpeed))
         {
-            _targetSpeed = _floorSpeed;
+            requestTarget = _floorSpeed;
         }
         else
         {
-            _targetSpeed = _targetSpeed - _decSpeedDelta;
+            requestTarget = requestTarget - _decSpeedDelta;
         }
-        setSpeed(_targetSpeed);
+        setSpeed(requestTarget);
     }
     // Clear decrease delta when timer expires
     _decSpeedDelta = 0;
diff --git a/control/zone.hpp b/control/zone.hpp
index 6e81bd1..cb1ce69 100644
--- a/control/zone.hpp
+++ b/control/zone.hpp
@@ -57,22 +57,16 @@
 
         /**
          * Sets all fans in the zone to the speed
-         * passed in
+         * passed in when the zone is active
          *
          * @param[in] speed - the fan speed
          */
         void setSpeed(uint64_t speed);
 
         /**
-         * Sets the zone to full speed
+         * Sets the zone to full speed regardless of zone's active state
          */
-        inline void setFullSpeed()
-        {
-            if (_fullSpeed != 0)
-            {
-                setSpeed(_fullSpeed);
-            }
-        }
+        void setFullSpeed();
 
         /**
          * @brief Sets the automatic fan control allowed active state
@@ -359,7 +353,7 @@
         /**
          * @brief Map of active fan control allowed by groups
          */
-        std::map<const Group*, bool> _active;
+        std::map<const Group, bool> _active;
 
         /**
          * @brief List of signal event arguments and Dbus matches for callbacks
