diff --git a/Marlin/cardreader.pde b/Marlin/cardreader.pde
index 6ad04068e4559972230751023c0defaf63b10cba..735a1cdcd8e231b7682ccffa9444307a4af232fe 100644
--- a/Marlin/cardreader.pde
+++ b/Marlin/cardreader.pde
@@ -432,6 +432,7 @@ void CardReader::updir()
 
 void CardReader::printingHasFinished()
 {
+ quickStop();
  sdprinting = false;
  if(SD_FINISHED_STEPPERRELEASE)
  {
diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp
index 33c7e154c1c2866db960aad9cb59741199fb9b3c..51a9fe0719b6231ec22e3d0d3c9efffabf504203 100644
--- a/Marlin/stepper.cpp
+++ b/Marlin/stepper.cpp
@@ -752,3 +752,12 @@ void finishAndDisableSteppers()
   disable_z(); 
   disable_e(); 
 }
+
+void quickStop()
+{
+  DISABLE_STEPPER_DRIVER_INTERRUPT();
+  while(blocks_queued())
+    plan_discard_current_block();
+  ENABLE_STEPPER_DRIVER_INTERRUPT();
+}
+
diff --git a/Marlin/stepper.h b/Marlin/stepper.h
index fd388ca68bd5b338a9928cb2682dfd482ae7e8fe..37ce3b546992e7cd8662c72173c42726ee0edb9f 100644
--- a/Marlin/stepper.h
+++ b/Marlin/stepper.h
@@ -52,5 +52,5 @@ void finishAndDisableSteppers();
 
 extern block_t *current_block;  // A pointer to the block currently being traced
 
-
+void quickStop();
 #endif