diff --git a/Marlin/cardreader.cpp b/Marlin/cardreader.cpp
index 2fead538232b36ff1ab3c9345c54ef5ff194c92c..3910bee4ee0958bffca58f41468d57c813d1f2bf 100644
--- a/Marlin/cardreader.cpp
+++ b/Marlin/cardreader.cpp
@@ -282,6 +282,13 @@ void CardReader::pauseSDPrint() {
   if (sdprinting) sdprinting = false;
 }
 
+void CardReader::stopSDPrint() {
+  if (sdprinting) {
+    sdprinting = false;
+    file.close();
+  }
+}
+
 void CardReader::openLogFile(char* name) {
   logging = true;
   openFile(name, false);
diff --git a/Marlin/cardreader.h b/Marlin/cardreader.h
index a18b718b5648e0286e35bbfc37f7502dba838b87..78280fc8d18c157dd0054e0ffdf37f0caa8039f2 100644
--- a/Marlin/cardreader.h
+++ b/Marlin/cardreader.h
@@ -48,6 +48,7 @@ public:
   void openAndPrintFile(const char *name);
   void startFileprint();
   void pauseSDPrint();
+  void stopSDPrint();
   void getStatus();
   void printingHasFinished();
 
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 5372626849d0e3687bbaf4dc7a54918b58f6d719..6f5990acadaf8889e6185c1c859933f84a9540d6 100755
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -496,17 +496,16 @@ static void lcd_status_screen() {
     }
 
     static void lcd_sdcard_stop() {
-      stepper.quick_stop();
-      #if DISABLED(DELTA) && DISABLED(SCARA)
-        set_current_position_from_planner();
-      #endif // !DELTA && !SCARA
+      card.stopSDPrint();
       clear_command_queue();
-      card.sdprinting = false;
-      card.closefile();
+      stepper.quick_stop();
       print_job_timer.stop();
       thermalManager.autotempShutdown();
       cancel_heatup = true;
       lcd_setstatus(MSG_PRINT_ABORTED, true);
+      #if DISABLED(DELTA) && DISABLED(SCARA)
+        set_current_position_from_planner();
+      #endif // !DELTA && !SCARA
     }
 
   #endif //SDSUPPORT