diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 04cac77ef6ac5097e95c404520f3fa0922d9fe56..0714072e9330e23a000c241078ef38900295b1d2 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -2951,7 +2951,11 @@ inline void gcode_G28() {
         }
         else {
           // One last "return to the bed" (as originally coded) at completion
-          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
+          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
+            #if MIN_Z_HEIGHT_FOR_HOMING > 0
+              + MIN_Z_HEIGHT_FOR_HOMING
+            #endif
+          ;
           line_to_current_position();
           st_synchronize();
 
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 31d5d3165dbdb496aebc231ad5a67685edc75cf8..c1a55380c32ee39cb7a6e8260b47c176b7b8a6f9 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -960,7 +960,11 @@ void lcd_cooldown() {
             buzz(200, 659);
             buzz(200, 698);
           #endif
-          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z;
+          current_position[Z_AXIS] = MESH_HOME_SEARCH_Z
+            #if MIN_Z_HEIGHT_FOR_HOMING > 0
+              + MIN_Z_HEIGHT_FOR_HOMING
+            #endif
+          ;
           line_to_current(Z_AXIS);
           st_synchronize();
           mbl.active = true;