diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp
index ed7fca1fe7..0746700407 100644
--- a/Marlin/src/feature/controllerfan.cpp
+++ b/Marlin/src/feature/controllerfan.cpp
@@ -55,35 +55,36 @@ void ControllerFan::update() {
     #define MOTOR_IS_ON(A,B) (A##_ENABLE_READ() == bool(B##_ENABLE_ON))
     #define _OR_ENABLED_E(N) || MOTOR_IS_ON(E##N,E)
 
-    const bool
-    xy_motor_on = MOTOR_IS_ON(X,X) || MOTOR_IS_ON(Y,Y)
-                  #if HAS_X2_ENABLE
-                    || MOTOR_IS_ON(X2,X)
-                  #endif
-                  #if HAS_Y2_ENABLE
-                    || MOTOR_IS_ON(Y2,Y)
-                  #endif
-                  ,
-    z_motor_on  = MOTOR_IS_ON(Z,Z)
-                  #if HAS_Z2_ENABLE
-                    || MOTOR_IS_ON(Z2,Z)
-                  #endif
-                  #if HAS_Z3_ENABLE
-                    || MOTOR_IS_ON(Z3,Z)
-                  #endif
-                  #if HAS_Z4_ENABLE
-                    || MOTOR_IS_ON(Z4,Z)
-                  #endif
-                  ;
+    const bool motor_on = MOTOR_IS_ON(Z,Z)
+      #if HAS_Z2_ENABLE
+        || MOTOR_IS_ON(Z2,Z)
+      #endif
+      #if HAS_Z3_ENABLE
+        || MOTOR_IS_ON(Z3,Z)
+      #endif
+      #if HAS_Z4_ENABLE
+        || MOTOR_IS_ON(Z4,Z)
+      #endif
+      || (DISABLED(CONTROLLER_FAN_USE_Z_ONLY) && (
+          MOTOR_IS_ON(X,X) || MOTOR_IS_ON(Y,Y)
+          #if HAS_X2_ENABLE
+            || MOTOR_IS_ON(X2,X)
+          #endif
+          #if HAS_Y2_ENABLE
+            || MOTOR_IS_ON(Y2,Y)
+          #endif
+          #if E_STEPPERS
+            REPEAT(E_STEPPERS, _OR_ENABLED_E)
+          #endif
+        )
+      )
+    ;
 
-    // If any of the drivers or the bed are enabled...
-    if (xy_motor_on || z_motor_on
+    // If any of the drivers or the heated bed are enabled...
+    if (motor_on
       #if HAS_HEATED_BED
         || thermalManager.temp_bed.soft_pwm_amount > 0
       #endif
-      #if E_STEPPERS
-        REPEAT(E_STEPPERS, _OR_ENABLED_E)
-      #endif
     ) lastMotorOn = ms; //... set time to NOW so the fan will turn on
 
     // Fan Settings. Set fan > 0:
diff --git a/Marlin/src/gcode/feature/controllerfan/M710.cpp b/Marlin/src/gcode/feature/controllerfan/M710.cpp
index 8e5845fa85..e00fa77d62 100644
--- a/Marlin/src/gcode/feature/controllerfan/M710.cpp
+++ b/Marlin/src/gcode/feature/controllerfan/M710.cpp
@@ -74,9 +74,7 @@ void GcodeSuite::M710() {
   const bool seenD = parser.seenval('D');
   if (seenD) controllerFan.settings.duration = parser.value_ushort();
 
-  if (seenR || seenS || seenI || seenA || seenD)
-    controllerFan.update();
-  else
+  if (!(seenR || seenS || seenI || seenA || seenD))
     M710_report(false);
 }
 
diff --git a/Marlin/src/lcd/menu/menu_configuration.cpp b/Marlin/src/lcd/menu/menu_configuration.cpp
index 59c80b1af0..6dbc680659 100644
--- a/Marlin/src/lcd/menu/menu_configuration.cpp
+++ b/Marlin/src/lcd/menu/menu_configuration.cpp
@@ -234,11 +234,11 @@ void menu_advanced_settings();
   void menu_controller_fan() {
     START_MENU();
     BACK_ITEM(MSG_CONFIGURATION);
-    EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_IDLE_SPEED, &controllerFan.settings.idle_speed, _MAX(1, CONTROLLERFAN_SPEED_MIN) - 1, 255, controllerFan.update);
-    EDIT_ITEM(bool, MSG_CONTROLLER_FAN_AUTO_ON, &controllerFan.settings.auto_mode, controllerFan.update);
+    EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_IDLE_SPEED, &controllerFan.settings.idle_speed, _MAX(1, CONTROLLERFAN_SPEED_MIN) - 1, 255);
+    EDIT_ITEM(bool, MSG_CONTROLLER_FAN_AUTO_ON, &controllerFan.settings.auto_mode);
     if (controllerFan.settings.auto_mode) {
-      EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_SPEED, &controllerFan.settings.active_speed, _MAX(1, CONTROLLERFAN_SPEED_MIN) - 1, 255, controllerFan.update);
-      EDIT_ITEM(uint16_4, MSG_CONTROLLER_FAN_DURATION, &controllerFan.settings.duration, 0, 4800, controllerFan.update);
+      EDIT_ITEM_FAST(percent, MSG_CONTROLLER_FAN_SPEED, &controllerFan.settings.active_speed, _MAX(1, CONTROLLERFAN_SPEED_MIN) - 1, 255);
+      EDIT_ITEM(uint16_4, MSG_CONTROLLER_FAN_DURATION, &controllerFan.settings.duration, 0, 4800);
     }
     END_MENU();
   }