diff --git a/Marlin/Marlin.h b/Marlin/Marlin.h
index 42f8af2c6e797abc90610c242e401ba462661196..99176089af8c0d38fd12d2818b63f7872205e0df 100644
--- a/Marlin/Marlin.h
+++ b/Marlin/Marlin.h
@@ -103,7 +103,11 @@ FORCE_INLINE void serialprintPGM(const char* str) {
 
 void get_command();
 
-void idle(); // the standard idle routine calls manage_inactivity(false)
+void idle(
+  #if ENABLED(FILAMENTCHANGEENABLE)
+    bool no_stepper_sleep=false  // pass true to keep steppers from disabling on timeout
+  #endif
+);
 
 void manage_inactivity(bool ignore_stepper_queue = false);
 
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 550cea0f0eeccb5fd4681e58be3656165a0e9534..2f2c557fc6ca6bac8ea8f214c5518f351cd715fe 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -5391,13 +5391,6 @@ inline void gcode_M503() {
 
 #if ENABLED(FILAMENTCHANGEENABLE)
 
-  inline void idle2() {
-    manage_heater();
-    manage_inactivity(true);
-    host_keepalive();
-    lcd_update();
-  }
-
   /**
    * M600: Pause for filament change
    *
@@ -5484,7 +5477,7 @@ inline void gcode_M503() {
           lcd_quick_feedback();
           next_tick = ms + 2500; // feedback every 2.5s while waiting
         }
-        idle2();
+        idle(true);
       #else
         current_position[E_AXIS] += AUTO_FILAMENT_CHANGE_LENGTH;
         destination[E_AXIS] = current_position[E_AXIS];
@@ -7040,9 +7033,17 @@ void disable_all_steppers() {
 /**
  * Standard idle routine keeps the machine alive
  */
-void idle() {
+void idle(
+  #if ENABLED(FILAMENTCHANGEENABLE)
+    bool no_stepper_sleep/*=false*/
+  #endif
+) {
   manage_heater();
-  manage_inactivity();
+  manage_inactivity(
+    #if ENABLED(FILAMENTCHANGEENABLE)
+      no_stepper_sleep
+    #endif
+  );
   host_keepalive();
   lcd_update();
 }