diff --git a/Marlin/src/feature/fwretract.cpp b/Marlin/src/feature/fwretract.cpp
index 708b52ec71ef7a4000eea9a9752e4e92e85a87e5..0e43512aaddf4cf6627cd81c8ded9266419661f3 100644
--- a/Marlin/src/feature/fwretract.cpp
+++ b/Marlin/src/feature/fwretract.cpp
@@ -153,7 +153,7 @@ void FWRetract::retract(const bool retracting
   else {
     // If a hop was done and Z hasn't changed, undo the Z hop
     if (hop_amount) {
-      current_position[Z_AXIS] -= retract_zlift;          // Pretend current pos is lower. Next move raises Z.
+      current_position[Z_AXIS] += retract_zlift;          // Pretend current pos is lower. Next move raises Z.
       SYNC_PLAN_POSITION_KINEMATIC();                     // Set the planner to the new position
       feedrate_mm_s = planner.max_feedrate_mm_s[Z_AXIS];  // Z feedrate to max
       prepare_move_to_destination();                      // Raise up to the old current pos