diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index c4afca7f685c56581660297b6aa921bf16242cbb..a9a29dde6070780abcf5f71c5244f0a4392c34e4 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -1945,14 +1945,16 @@ void process_commands()
 
       /* See if we are heating up or cooling down */
       target_direction = isHeatingHotend(tmp_extruder); // true if heating, false if cooling
+      
+      forced_heating_stop = true;
 
       #ifdef TEMP_RESIDENCY_TIME
         long residencyStart;
         residencyStart = -1;
         /* continue to loop until we have reached the target temp
           _and_ until TEMP_RESIDENCY_TIME hasn't passed since we reached it */
-        while((residencyStart == -1) ||
-              (residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL))) ) {
+        while((forced_heating_stop == true)&&((residencyStart == -1) ||
+              (residencyStart >= 0 && (((unsigned int) (millis() - residencyStart)) < (TEMP_RESIDENCY_TIME * 1000UL)))) ) {
       #else
         while ( target_direction ? (isHeatingHotend(tmp_extruder)) : (isCoolingHotend(tmp_extruder)&&(CooldownNoWait==false)) ) {
       #endif //TEMP_RESIDENCY_TIME
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index f09dd410d6a6f4ad203f97e525cbaa87a7e3a1ed..4f5aaac998e0d1570c831e48e06b0c01c73f9b0c 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -19,6 +19,7 @@ int absPreheatHotendTemp;
 int absPreheatHPBTemp;
 int absPreheatFanSpeed;
 
+boolean forced_heating_stop = true ;
 
 #ifdef ULTIPANEL
 static float manual_feedrate[] = MANUAL_FEEDRATE;
@@ -256,6 +257,8 @@ static void lcd_sdcard_stop()
         enquecommand_P(PSTR(SD_FINISHED_RELEASECOMMAND));
     }
     autotempShutdown();
+    
+    forced_heating_stop = false;
 }
 
 /* Menu implementation */
diff --git a/Marlin/ultralcd.h b/Marlin/ultralcd.h
index f4570f6a587a7e69f8bf35567756697e07dd240d..b4195f397546eaf60f5e4e0f9857ac2d62b8cf89 100644
--- a/Marlin/ultralcd.h
+++ b/Marlin/ultralcd.h
@@ -42,6 +42,8 @@
   extern int absPreheatHotendTemp;
   extern int absPreheatHPBTemp;
   extern int absPreheatFanSpeed;
+  
+  extern boolean forced_heating_stop;
     
   void lcd_buzz(long duration,uint16_t freq);
   bool lcd_clicked();