diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index ab14f9907fa45d9b93bce9e06ba9fa434b498361..7c7a0b04429b15543179b671808a923445900b10 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1114,7 +1114,9 @@ void process_commands()
destination[Y_AXIS]=current_position[Y_AXIS];
destination[Z_AXIS]=current_position[Z_AXIS];
current_position[Z_AXIS]-=retract_zlift;
- destination[E_AXIS]=current_position[E_AXIS]-retract_length/volumetric_multiplier[active_extruder];
+ destination[E_AXIS]=current_position[E_AXIS];
+ current_position[E_AXIS]+=retract_length/volumetric_multiplier[active_extruder];
+ plan_set_e_position(current_position[E_AXIS]);
float oldFeedrate = feedrate;
feedrate=retract_feedrate;
retracted=true;
@@ -1130,7 +1132,9 @@ void process_commands()
destination[Y_AXIS]=current_position[Y_AXIS];
destination[Z_AXIS]=current_position[Z_AXIS];
current_position[Z_AXIS]+=retract_zlift;
- destination[E_AXIS]=current_position[E_AXIS]+(retract_length+retract_recover_length)/volumetric_multiplier[active_extruder];
+ destination[E_AXIS]=current_position[E_AXIS];
+ current_position[E_AXIS]-=(retract_length+retract_recover_length)/volumetric_multiplier[active_extruder];
+ plan_set_e_position(current_position[E_AXIS]);
float oldFeedrate = feedrate;
feedrate=retract_recover_feedrate;
retracted=false;