diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 20c71945ecdf13f2e6211d36e64bb54472f729fd..4bc128645f646d02d286a5df1b511b65a8ad89ce 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -3150,6 +3150,10 @@ static void homeaxis(const AxisEnum axis) {
     const bool has_zhop = retract_zlift > 0.01;     // Is there a hop set?
 
     const float old_feedrate_mm_s = feedrate_mm_s;
+    const int16_t old_flow = flow_percentage[active_extruder];
+
+    // Don't apply flow multiplication to retract/recover
+    flow_percentage[active_extruder] = 100;
 
     // The current position will be the destination for E and Z moves
     set_destination_to_current();
@@ -3192,6 +3196,8 @@ static void homeaxis(const AxisEnum axis) {
       prepare_move_to_destination();  // Recover E
     }
 
+    // Restore flow and feedrate
+    flow_percentage[active_extruder] = old_flow;
     feedrate_mm_s = old_feedrate_mm_s;
 
     // The active extruder is now retracted or recovered