diff --git a/Marlin/planner.cpp b/Marlin/planner.cpp
index 5b20f86f990b13c3da0f5999180aa2cec812f4a9..4ae1871cd068560cb5745bc73b7d79340554eddc 100644
--- a/Marlin/planner.cpp
+++ b/Marlin/planner.cpp
@@ -96,6 +96,8 @@ float autotemp_factor=0.1;
bool autotemp_enabled=false;
#endif
+unsigned char g_uc_extruder_last_move[3] = {0,0,0};
+
//===========================================================================
//=================semi-private variables, used in inline functions =====
//===========================================================================
@@ -662,11 +664,34 @@ block->steps_y = labs((target[X_AXIS]-position[X_AXIS]) - (target[Y_AXIS]-positi
{
if (DISABLE_INACTIVE_EXTRUDER) //enable only selected extruder
{
+
+ if(g_uc_extruder_last_move[0] > 0) g_uc_extruder_last_move[0]--;
+ if(g_uc_extruder_last_move[1] > 0) g_uc_extruder_last_move[1]--;
+ if(g_uc_extruder_last_move[2] > 0) g_uc_extruder_last_move[2]--;
+
switch(extruder)
{
- case 0: enable_e0(); disable_e1(); disable_e2(); break;
- case 1: disable_e0(); enable_e1(); disable_e2(); break;
- case 2: disable_e0(); disable_e1(); enable_e2(); break;
+ case 0:
+ enable_e0();
+ g_uc_extruder_last_move[0] = BLOCK_BUFFER_SIZE*2;
+
+ if(g_uc_extruder_last_move[1] == 0) disable_e1();
+ if(g_uc_extruder_last_move[2] == 0) disable_e2();
+ break;
+ case 1:
+ enable_e1();
+ g_uc_extruder_last_move[1] = BLOCK_BUFFER_SIZE*2;
+
+ if(g_uc_extruder_last_move[0] == 0) disable_e0();
+ if(g_uc_extruder_last_move[2] == 0) disable_e2();
+ break;
+ case 2:
+ enable_e2();
+ g_uc_extruder_last_move[2] = BLOCK_BUFFER_SIZE*2;
+
+ if(g_uc_extruder_last_move[0] == 0) disable_e0();
+ if(g_uc_extruder_last_move[1] == 0) disable_e1();
+ break;
}
}
else //enable all