diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 17a8854638dce1bd84b5535e62ddd6bc09ab487b..7bd94f640364b1f846ef4855ce310060eed872fa 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -207,6 +207,11 @@ const bool Z_ENDSTOPS_INVERTING = true; // set to true to invert the logic of th
 #define NUM_AXIS 4 // The axis order in all axis related arrays is X, Y, Z, E
 #define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0}  // set the homing speeds (mm/min)
 
+//homing hits the endstop, then retracts by this distance, before it tries to slowly bump again:
+#define X_HOME_RETRACT_MM 5 
+#define Y_HOME_RETRACT_MM 5 
+#define Z_HOME_RETRACT_MM 1 
+
 #define AXIS_RELATIVE_MODES {false, false, false, false}
 
 #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde
index d94f810c1dbd11e7bea2c322738cb46241ce0865..d765d222b6fa12093213c580dbedc0a63ad611ef 100644
--- a/Marlin/Marlin.pde
+++ b/Marlin/Marlin.pde
@@ -469,10 +469,10 @@ inline bool code_seen(char code)
     \
     current_position[LETTER##_AXIS] = 0;\
     plan_set_position(current_position[X_AXIS], current_position[Y_AXIS], current_position[Z_AXIS], current_position[E_AXIS]);\
-    destination[LETTER##_AXIS] = -5 * LETTER##_HOME_DIR;\
+    destination[LETTER##_AXIS] = -LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\
     prepare_move(); \
     \
-    destination[LETTER##_AXIS] = 10 * LETTER##_HOME_DIR;\
+    destination[LETTER##_AXIS] = 2*LETTER##_HOME_RETRACT_MM * LETTER##_HOME_DIR;\
     feedrate = homing_feedrate[LETTER##_AXIS]/2 ;  \
     prepare_move(); \
     \