diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index b272d73ef37b6dcaf185b3308061f6d5d1545add..cdf9e5c6f36afc8c12f0dede7325a80d66ca7d46 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1311,8 +1311,10 @@ static void retract_z_probe() {
   #ifdef SERVO_ENDSTOPS
     if (servo_endstops[Z_AXIS] > -1)
     {
+      #if Z_RAISE_AFTER_PROBING > 0
         do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], Z_RAISE_AFTER_PROBING);
         st_synchronize();
+      #endif
     
       #if SERVO_LEVELING
         servos[servo_endstops[Z_AXIS]].attach(0);
@@ -1382,14 +1384,14 @@ static float probe_pt(float x, float y, float z_before, ProbeAction retract_acti
   do_blocking_move_to(current_position[X_AXIS], current_position[Y_AXIS], z_before);
   do_blocking_move_to(x - X_PROBE_OFFSET_FROM_EXTRUDER, y - Y_PROBE_OFFSET_FROM_EXTRUDER, current_position[Z_AXIS]);
 
-  #if !defined(Z_PROBE_SLED)
+  #if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
     if (retract_action & ProbeEngage) engage_z_probe();
   #endif
 
   run_z_probe();
   float measured_z = current_position[Z_AXIS];
 
-  #if !defined(Z_PROBE_SLED)
+  #if !defined(Z_PROBE_SLED) && !defined(Z_PROBE_ALLEN_KEY)
     if (retract_action & ProbeRetract) retract_z_probe();
   #endif
 
@@ -2231,6 +2233,8 @@ inline void gcode_G28() {
 
     #ifdef Z_PROBE_SLED
       dock_sled(false); // engage (un-dock) the probe
+    #elif defined(Z_PROBE_ALLEN_KEY)
+      engage_z_probe();
     #endif
 
     st_synchronize();
@@ -2472,6 +2476,8 @@ inline void gcode_G28() {
 
   #ifdef Z_PROBE_SLED
     dock_sled(true, -SLED_DOCKING_OFFSET); // dock the probe, correcting for over-travel
+  #elif defined(Z_PROBE_ALLEN_KEY)
+    retract_z_probe();
   #endif
     
   #ifdef Z_PROBE_END_SCRIPT