diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index 070749276003427054e68a59bddc66726aee9abf..8736051c82b40927f9742d5abfa562024b6b7024 100755
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -2177,6 +2177,11 @@ static void clean_up_after_endstop_or_probe_move() {
 
     float old_feedrate_mm_s = feedrate_mm_s;
 
+    #if ENABLED(DELTA)
+      if (current_position[Z_AXIS] > delta_clip_start_height)
+        do_blocking_move_to_z(delta_clip_start_height);
+    #endif
+
     // Ensure a minimum height before moving the probe
     do_probe_raise(Z_CLEARANCE_BETWEEN_PROBES);
 
diff --git a/Marlin/nozzle.h b/Marlin/nozzle.h
index cce22db411d7bb2d2650e2aee864b11f16733c5f..748610554516e67cce5688802d8eb4c61c3cfe1d 100644
--- a/Marlin/nozzle.h
+++ b/Marlin/nozzle.h
@@ -70,8 +70,7 @@ class Nozzle {
 
         #if ENABLED(NOZZLE_CLEAN_GOBACK)
           // Move the nozzle to the initial point
-          do_blocking_move_to_z(initial.z);
-          do_blocking_move_to_xy(initial.x, initial.y);
+          do_blocking_move_to(initial.x, initial.y, initial.z);
         #endif // NOZZLE_CLEAN_GOBACK
 
       #endif // NOZZLE_CLEAN_FEATURE
@@ -149,6 +148,10 @@ class Nozzle {
       __attribute__((unused)) uint8_t const &objects = 0
     ) __attribute__((optimize ("Os"))) {
       #if ENABLED(NOZZLE_CLEAN_FEATURE)
+        #if ENABLED(DELTA)
+          if (current_position[Z_AXIS] > delta_clip_start_height)
+            do_blocking_move_to_z(delta_clip_start_height);
+        #endif
         switch (pattern) {
           case 1:
             Nozzle::zigzag(