diff --git a/Marlin/src/feature/babystep.cpp b/Marlin/src/feature/babystep.cpp
index fd4491bc6f8a3db0b1daccc7302eb42909c35f48..25552a701cb5045a67c8b05f1eaeabeb53064c5e 100644
--- a/Marlin/src/feature/babystep.cpp
+++ b/Marlin/src/feature/babystep.cpp
@@ -35,17 +35,17 @@
 
 Babystep babystep;
 
-volatile int16_t Babystep::steps[BS_TODO_AXIS(Z_AXIS) + 1];
+volatile int16_t Babystep::steps[BS_AXIS_IND(Z_AXIS) + 1];
 #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
   int16_t Babystep::axis_total[BS_TOTAL_AXIS(Z_AXIS) + 1];
 #endif
 int16_t Babystep::accum;
 
 void Babystep::step_axis(const AxisEnum axis) {
-  const int16_t curTodo = steps[BS_TODO_AXIS(axis)]; // get rid of volatile for performance
+  const int16_t curTodo = steps[BS_AXIS_IND(axis)]; // get rid of volatile for performance
   if (curTodo) {
     stepper.do_babystep((AxisEnum)axis, curTodo > 0);
-    if (curTodo > 0) steps[BS_TODO_AXIS(axis)]--; else steps[BS_TODO_AXIS(axis)]++;
+    if (curTodo > 0) steps[BS_AXIS_IND(axis)]--; else steps[BS_AXIS_IND(axis)]++;
   }
 }
 
@@ -112,7 +112,7 @@ void Babystep::add_steps(const AxisEnum axis, const int16_t distance) {
     #else
       BSA_ENABLE(Z_AXIS);
     #endif
-    steps[BS_TODO_AXIS(axis)] += distance;
+    steps[BS_AXIS_IND(axis)] += distance;
   #endif
   #if ENABLED(BABYSTEP_ALWAYS_AVAILABLE)
     gcode.reset_stepper_timeout();
diff --git a/Marlin/src/feature/babystep.h b/Marlin/src/feature/babystep.h
index 192817bc7b0345b12ee00053e72f3f32b0923871..8ce48e397debc9f3d4996c0411aebcceb27268f0 100644
--- a/Marlin/src/feature/babystep.h
+++ b/Marlin/src/feature/babystep.h
@@ -32,9 +32,11 @@
 #endif
 
 #if IS_CORE || EITHER(BABYSTEP_XY, I2C_POSITION_ENCODERS)
-  #define BS_TODO_AXIS(A) A
+  #define BS_AXIS_IND(A) A
+  #define BS_AXIS(I) AxisEnum(I)
 #else
-  #define BS_TODO_AXIS(A) 0
+  #define BS_AXIS_IND(A) 0
+  #define BS_AXIS(I) Z_AXIS
 #endif
 
 #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
@@ -47,7 +49,7 @@
 
 class Babystep {
 public:
-  static volatile int16_t steps[BS_TODO_AXIS(Z_AXIS) + 1];
+  static volatile int16_t steps[BS_AXIS_IND(Z_AXIS) + 1];
   static int16_t accum;                                     // Total babysteps in current edit
 
   #if ENABLED(BABYSTEP_DISPLAY_TOTAL)
@@ -65,7 +67,7 @@ public:
   static void add_mm(const AxisEnum axis, const float &mm);
 
   static inline bool has_steps() {
-    return steps[BS_TODO_AXIS(X_AXIS)] || steps[BS_TODO_AXIS(Y_AXIS)] || steps[BS_TODO_AXIS(Z_AXIS)];
+    return steps[BS_AXIS_IND(X_AXIS)] || steps[BS_AXIS_IND(Y_AXIS)] || steps[BS_AXIS_IND(Z_AXIS)];
   }
 
   //
@@ -73,7 +75,7 @@ public:
   // apply accumulated babysteps to the axes.
   //
   static inline void task() {
-    LOOP_LE_N(axis, BS_TODO_AXIS(Z_AXIS)) step_axis((AxisEnum)axis);
+    LOOP_LE_N(i, BS_AXIS_IND(Z_AXIS)) step_axis(BS_AXIS(i));
   }
 
 private:
diff --git a/Marlin/src/feature/tmc_util.cpp b/Marlin/src/feature/tmc_util.cpp
index 9f905021ea6e2f3cec594b303e5f074ffdd57c5e..a2723fd3935b1856eed0a8dddf72cd0fd1fcbcfe 100644
--- a/Marlin/src/feature/tmc_util.cpp
+++ b/Marlin/src/feature/tmc_util.cpp
@@ -1097,7 +1097,7 @@
 
   bool tmc_enable_stallguard(TMC2209Stepper &st) {
     const bool stealthchop_was_enabled = !st.en_spreadCycle();
-    
+
     st.TCOOLTHRS(0xFFFFF);
     st.en_spreadCycle(false);
     return stealthchop_was_enabled;
diff --git a/Marlin/src/gcode/motion/M290.cpp b/Marlin/src/gcode/motion/M290.cpp
index 9422307cda1d1f996578cbec80d28eb83da65f0b..d6535af82f7a7eaf6d5837edad3ec4f79ea9684c 100644
--- a/Marlin/src/gcode/motion/M290.cpp
+++ b/Marlin/src/gcode/motion/M290.cpp
@@ -131,7 +131,7 @@ void GcodeSuite::M290() {
         #else
           PSTR("Babystep Z")
         #endif
-        , babystep.axis_total[BS_TODO_AXIS(Z_AXIS)]
+        , babystep.axis_total[BS_AXIS_IND(Z_AXIS)]
       );
     }
     #endif
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.cpp b/Marlin/src/lcd/extensible_ui/ui_api.cpp
index 31d195c95de47f7cd71a0dca023021f0309f3789..7ef7614b8df8ab4597cf78d59db051ec41c9ada3 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.cpp
+++ b/Marlin/src/lcd/extensible_ui/ui_api.cpp
@@ -785,7 +785,7 @@ namespace ExtUI {
     #if HAS_BED_PROBE
       return probe.offset.z;
     #elif ENABLED(BABYSTEP_DISPLAY_TOTAL)
-      return (planner.steps_to_mm[Z_AXIS] * babystep.axis_total[BS_TODO_AXIS(Z_AXIS)]);
+      return (planner.steps_to_mm[Z_AXIS] * babystep.axis_total[BS_AXIS_IND(Z_AXIS)]);
     #else
       return 0.0;
     #endif
@@ -898,11 +898,11 @@ namespace ExtUI {
     float getPIDValues_Kp(const extruder_t tool) {
       return PID_PARAM(Kp, tool);
     }
-    
+
     float getPIDValues_Ki(const extruder_t tool) {
       return unscalePID_i(PID_PARAM(Ki, tool));
     }
-    
+
     float getPIDValues_Kd(const extruder_t tool) {
       return unscalePID_d(PID_PARAM(Kd, tool));
     }
@@ -918,27 +918,27 @@ namespace ExtUI {
       thermalManager.PID_autotune(temp, (heater_ind_t)tool, 8, true);
     }
   #endif
-  
+
   #if ENABLED(PIDTEMPBED)
     float getBedPIDValues_Kp() {
       return thermalManager.temp_bed.pid.Kp;
     }
-    
+
     float getBedPIDValues_Ki() {
       return unscalePID_i(thermalManager.temp_bed.pid.Ki);
     }
-    
+
     float getBedPIDValues_Kd() {
       return unscalePID_d(thermalManager.temp_bed.pid.Kd);
     }
-    
+
     void setBedPIDValues(const float p, const float i, const float d) {
       thermalManager.temp_bed.pid.Kp = p;
       thermalManager.temp_bed.pid.Ki = scalePID_i(i);
       thermalManager.temp_bed.pid.Kd = scalePID_d(d);
       thermalManager.updatePID();
     }
-    
+
     void startBedPIDTune(const float temp) {
       thermalManager.PID_autotune(temp, H_BED, 4, true);
     }
diff --git a/Marlin/src/lcd/extensible_ui/ui_api.h b/Marlin/src/lcd/extensible_ui/ui_api.h
index d99cfcedb4f66664451a86a21231364a50c4edb9..10df2bc72d99833e7b2c39cfad3dd1e0b19dddff 100644
--- a/Marlin/src/lcd/extensible_ui/ui_api.h
+++ b/Marlin/src/lcd/extensible_ui/ui_api.h
@@ -256,7 +256,7 @@ namespace ExtUI {
     void setPIDValues(const float, const float, const float, extruder_t);
     void startPIDTune(const float, extruder_t);
   #endif
-  
+
   #if ENABLED(PIDTEMPBED)
     float getBedPIDValues_Kp();
     float getBedPIDValues_Ki();
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index d21d1fe3591c354a05baf212691ddbf237746c94..66fc39228dd3460b73bb2540f2e5e77a3d2e2059 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -81,6 +81,8 @@
 
 Stepper stepper; // Singleton
 
+#define BABYSTEPPING_EXTRA_DIR_WAIT
+
 #if HAS_MOTOR_CURRENT_PWM
   bool Stepper::initialized; // = false
 #endif
@@ -1367,8 +1369,8 @@ void Stepper::isr() {
     #endif
 
     #if ENABLED(INTEGRATED_BABYSTEPPING)
-      const bool do_babystep = (nextBabystepISR == 0);              // 0 = Do Babystepping (XY)Z pulses
-      if (do_babystep) nextBabystepISR = babystepping_isr();
+      const bool is_babystep = (nextBabystepISR == 0);              // 0 = Do Babystepping (XY)Z pulses
+      if (is_babystep) nextBabystepISR = babystepping_isr();
     #endif
 
     // ^== Time critical. NOTHING besides pulse generation should be above here!!!
@@ -1376,7 +1378,7 @@ void Stepper::isr() {
     if (!nextMainISR) nextMainISR = block_phase_isr();  // Manage acc/deceleration, get next block
 
     #if ENABLED(INTEGRATED_BABYSTEPPING)
-      if (do_babystep)                                  // Avoid ANY stepping too soon after baby-stepping
+      if (is_babystep)                                  // Avoid ANY stepping too soon after baby-stepping
         NOLESS(nextMainISR, (BABYSTEP_TICKS) / 8);      // FULL STOP for 125µs after a baby-step
 
       if (nextBabystepISR != BABYSTEP_NEVER)            // Avoid baby-stepping too close to axis Stepping
@@ -2507,6 +2509,14 @@ void Stepper::report_positions() {
     #endif
   #endif
 
+  #if ENABLED(BABYSTEPPING_EXTRA_DIR_WAIT)
+    #define EXTRA_DIR_WAIT_BEFORE DIR_WAIT_BEFORE
+    #define EXTRA_DIR_WAIT_AFTER  DIR_WAIT_AFTER
+  #else
+    #define EXTRA_DIR_WAIT_BEFORE()
+    #define EXTRA_DIR_WAIT_AFTER()
+  #endif
+
   #if DISABLED(DELTA)
 
     #define BABYSTEP_AXIS(AXIS, INV, DIR) do{           \
@@ -2519,9 +2529,9 @@ void Stepper::report_positions() {
       _APPLY_STEP(AXIS, !_INVERT_STEP_PIN(AXIS), true); \
       _PULSE_WAIT();                                    \
       _APPLY_STEP(AXIS, _INVERT_STEP_PIN(AXIS), true);  \
-      DIR_WAIT_BEFORE();                                \
+      EXTRA_DIR_WAIT_BEFORE();                          \
       _APPLY_DIR(AXIS, old_dir);                        \
-      DIR_WAIT_AFTER();                                 \
+      EXTRA_DIR_WAIT_AFTER();                           \
     }while(0)
 
   #elif IS_CORE
@@ -2539,9 +2549,9 @@ void Stepper::report_positions() {
       _PULSE_WAIT();                                            \
       _APPLY_STEP(A, _INVERT_STEP_PIN(A), true);                \
       _APPLY_STEP(B, _INVERT_STEP_PIN(B), true);                \
-      DIR_WAIT_BEFORE();                                        \
+      EXTRA_DIR_WAIT_BEFORE();                                  \
       _APPLY_DIR(A, old_dir.a); _APPLY_DIR(B, old_dir.b);       \
-      DIR_WAIT_AFTER();                                         \
+      EXTRA_DIR_WAIT_AFTER();                                   \
     }while(0)
 
   #endif
@@ -2620,13 +2630,13 @@ void Stepper::report_positions() {
           Z_STEP_WRITE(INVERT_Z_STEP_PIN);
 
           // Restore direction bits
-          DIR_WAIT_BEFORE();
+          EXTRA_DIR_WAIT_BEFORE();
 
           X_DIR_WRITE(old_dir.x);
           Y_DIR_WRITE(old_dir.y);
           Z_DIR_WRITE(old_dir.z);
 
-          DIR_WAIT_AFTER();
+          EXTRA_DIR_WAIT_AFTER();
 
         #endif
 
diff --git a/Marlin/src/pins/mega/pins_PICA.h b/Marlin/src/pins/mega/pins_PICA.h
index 7771d5887f24e208aeb9874ad7a970504610f415..4c618bda4e33d35ede3eae944eada48c77db7a9b 100644
--- a/Marlin/src/pins/mega/pins_PICA.h
+++ b/Marlin/src/pins/mega/pins_PICA.h
@@ -36,8 +36,8 @@
 /*
 // Note that these are the "pins" that correspond to the analog inputs on the arduino mega.
 // These are not the same as the physical pin numbers
-  AD0 = 54;   AD1 = 55;   AD2 = 56;   AD3 = 57;   
-  AD4 = 58;   AD5 = 59;   AD6 = 60;   AD7 = 61;   
+  AD0 = 54;   AD1 = 55;   AD2 = 56;   AD3 = 57;
+  AD4 = 58;   AD5 = 59;   AD6 = 60;   AD7 = 61;
   AD8 = 62;   AD9 = 63;   AD10 = 64;  AD11 = 65;
   AD12 = 66;  AD13 = 67;  AD14 = 68;  AD15 = 69;
 */
@@ -61,7 +61,7 @@
 //
 #define X_STEP_PIN         55
 #define X_DIR_PIN          54
-#define X_ENABLE_PIN       60     
+#define X_ENABLE_PIN       60
 
 #define Y_STEP_PIN         57
 #define Y_DIR_PIN          56
@@ -71,7 +71,7 @@
 #define Z_DIR_PIN          58
 #define Z_ENABLE_PIN       62
 
-#define E0_STEP_PIN        67 
+#define E0_STEP_PIN        67
 #define E0_DIR_PIN         24
 #define E0_ENABLE_PIN      26
 
@@ -103,10 +103,10 @@
 #endif
 
 #define SDPOWER_PIN        -1
-#define LED_PIN            -1 
+#define LED_PIN            -1
 #define PS_ON_PIN          -1
 #define KILL_PIN           -1
-      
+
 #define SSR_PIN             6
 
 // SPI for Max6675 or Max31855 Thermocouple
@@ -119,7 +119,7 @@
 //
 // SD Support
 //
-#define SD_DETECT_PIN      49 
+#define SD_DETECT_PIN      49
 #define SDSS               53
 
 //