diff --git a/Marlin/src/gcode/feature/pause/M125.cpp b/Marlin/src/gcode/feature/pause/M125.cpp
index f96c1b93d8bac8854ef11aa470884b8a7a36e087..4f02592a21e45873db9f25ab32b6c7f95ab6d1b5 100644
--- a/Marlin/src/gcode/feature/pause/M125.cpp
+++ b/Marlin/src/gcode/feature/pause/M125.cpp
@@ -31,6 +31,10 @@
 #include "../../../sd/cardreader.h"
 #include "../../../module/printcounter.h"
 
+#if HAS_LCD_MENU
+  #include "../../../lcd/ultralcd.h"
+#endif
+
 /**
  * M125: Store current position and move to filament change position.
  *       Called on pause (by M25) to prevent material leaking onto the
@@ -74,12 +78,17 @@ void GcodeSuite::M125() {
     constexpr bool sd_printing = false;
   #endif
 
-  if (pause_print(retract, park_point)) {
-    // SD Printing simply pauses, leaving the machine in a ready state,
-    // and can be resumed at any time, so don't wait in a loop here.
-    if (!sd_printing) {
-      wait_for_confirmation();
-      resume_print();
+  #if HAS_LCD_MENU
+    const bool show_lcd = parser.seenval('P');
+    lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT, ADVANCED_PAUSE_MODE_PAUSE_PRINT, active_extruder);
+  #else
+    constexpr bool show_lcd = false;
+  #endif
+
+  if (pause_print(retract, park_point, 0, show_lcd)) {
+    if (!sd_printing || show_lcd ) {
+      wait_for_confirmation(false, 0);
+      resume_print(0, 0, PAUSE_PARK_RETRACT_LENGTH, 0);
     }
   }
 }
diff --git a/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M524_M928.cpp b/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M524_M928.cpp
index f1cdaa1078ea5fd917ae59ea7f2aac5cb880bf6a..c54b56763cde3c6221cfc98efec46cf9f6a5f245 100644
--- a/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M524_M928.cpp
+++ b/Marlin/src/gcode/sdcard/M20-M30_M32-M34_M524_M928.cpp
@@ -114,13 +114,15 @@ void GcodeSuite::M24() {
  * M25: Pause SD Print
  */
 void GcodeSuite::M25() {
+  
+  // Set initial pause flag to prevent more commands from landing in the queue while we try to pause
+  #if ENABLED(SDSUPPORT)
+    if (IS_SD_PRINTING()) { card.pauseSDPrint(); }
+  #endif
+
   #if ENABLED(PARK_HEAD_ON_PAUSE)
     M125();
   #else
-    #if ENABLED(SDSUPPORT)
-      if (IS_SD_PRINTING()) card.pauseSDPrint();
-    #endif
-
     print_job_timer.pause();
     ui.reset_status();
 
diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp
index b643b06afe7e6ce0e32e025383564a1d43484390..82563655389f1023952b16021546d602f64b8e20 100644
--- a/Marlin/src/lcd/menu/menu_main.cpp
+++ b/Marlin/src/lcd/menu/menu_main.cpp
@@ -32,6 +32,7 @@
 #include "../../module/temperature.h"
 #include "../../gcode/queue.h"
 #include "../../module/printcounter.h"
+#include "../../module/stepper.h"
 
 #if ENABLED(POWER_LOSS_RECOVERY)
   #include "../../feature/power_loss_recovery.h"
@@ -43,12 +44,14 @@ void lcd_pause() {
   #endif
 
   #if ENABLED(PARK_HEAD_ON_PAUSE)
-    pause_print(PAUSE_PARK_RETRACT_LENGTH, NOZZLE_PARK_POINT, 0, true);
+    lcd_advanced_pause_show_message(ADVANCED_PAUSE_MESSAGE_INIT, ADVANCED_PAUSE_MODE_PAUSE_PRINT, active_extruder);
+    enqueue_and_echo_commands_P(PSTR("M25 P; \n M24"));
   #elif ENABLED(SDSUPPORT)
     enqueue_and_echo_commands_P(PSTR("M25"));
   #elif defined(ACTION_ON_PAUSE)
     SERIAL_ECHOLNPGM("//action:" ACTION_ON_PAUSE);
   #endif
+  planner.synchronize();
 }
 
 void lcd_resume() {
@@ -97,14 +100,15 @@ void menu_main() {
 
   if (busy) {
     MENU_ITEM(function, MSG_PAUSE_PRINT, lcd_pause);
-    MENU_ITEM(submenu, MSG_TUNE, menu_tune);
-  }
-  else {
-    MENU_ITEM(function, MSG_RESUME_PRINT, lcd_resume);
     #if ENABLED(SDSUPPORT)
       if (card.isFileOpen())
         MENU_ITEM(submenu, MSG_STOP_PRINT, menu_sdcard_abort_confirm);
     #endif
+    MENU_ITEM(submenu, MSG_TUNE, menu_tune);
+  }
+  else {
+    MENU_ITEM(function, MSG_RESUME_PRINT, lcd_resume);
+    
     MENU_ITEM(submenu, MSG_MOTION, menu_motion);
     MENU_ITEM(submenu, MSG_TEMPERATURE, menu_temperature);
   }
@@ -154,11 +158,13 @@ void menu_main() {
         MENU_ITEM(function, MSG_AUTOSTART, card.beginautostart);
     #endif
 
-    if (card.isDetected() && !card.isFileOpen()) {
+    if (card.isDetected()) {
+      if(!card.isFileOpen()) {
+      MENU_ITEM(submenu, MSG_CARD_MENU, menu_sdcard);
       #if !PIN_EXISTS(SD_DETECT)
         MENU_ITEM(gcode, MSG_CHANGE_SDCARD, PSTR("M21"));  // SD-card changed by user
       #endif
-      MENU_ITEM(submenu, MSG_CARD_MENU, menu_sdcard);
+      }
     }
     else {
       #if !PIN_EXISTS(SD_DETECT)
@@ -166,7 +172,6 @@ void menu_main() {
       #endif
       MENU_ITEM(function, MSG_NO_CARD, NULL);
     }
-
   #endif // SDSUPPORT
 
   END_MENU();