diff --git a/Marlin/src/MarlinCore.cpp b/Marlin/src/MarlinCore.cpp
index abae09a6dc..6ccc1344b0 100644
--- a/Marlin/src/MarlinCore.cpp
+++ b/Marlin/src/MarlinCore.cpp
@@ -423,14 +423,14 @@ void startOrResumeJob() {
 
       #if HAS_RESUME_CONTINUE                   // Display "Click to Continue..."
         case 1:                                 // 30 min timeout with LCD, 1 min without
-          did_state = queue.enqueue_P(PSTR("M0Q1S" TERN(HAS_LCD_MENU, "1800", "60")));
+          did_state = queue.enqueue_one_P(PSTR("M0Q1S" TERN(HAS_LCD_MENU, "1800", "60")));
           break;
       #endif
 
       case 2: print_job_timer.stop(); break;
 
       case 3:
-        did_state = print_job_timer.duration() < 60 || queue.enqueue_P(PSTR("M31"));
+        did_state = print_job_timer.duration() < 60 || queue.enqueue_one_P(PSTR("M31"));
         break;
 
       case 4:
diff --git a/Marlin/src/gcode/queue.cpp b/Marlin/src/gcode/queue.cpp
index 0a5dfd0378..3a1f3d2d3d 100644
--- a/Marlin/src/gcode/queue.cpp
+++ b/Marlin/src/gcode/queue.cpp
@@ -209,6 +209,21 @@ void GCodeQueue::inject_P(PGM_P const pgcode) { injected_commands_P = pgcode; }
  */
 void GCodeQueue::enqueue_one_now(const char* cmd) { while (!enqueue_one(cmd)) idle(); }
 
+/**
+ * Attempt to enqueue a single G-code command
+ * and return 'true' if successful.
+ */
+bool GCodeQueue::enqueue_one_P(PGM_P const pgcode) {
+  size_t i = 0;
+  PGM_P p = pgcode;
+  char c;
+  while ((c = pgm_read_byte(&p[i])) && c != '\n') i++;
+  char cmd[i + 1];
+  memcpy_P(cmd, p, i);
+  cmd[i] = '\0';
+  return _enqueue(cmd);
+}
+
 /**
  * Enqueue from program memory and return only when commands are actually enqueued
  * Never call this from a G-code handler!
diff --git a/Marlin/src/gcode/queue.h b/Marlin/src/gcode/queue.h
index 1ce64590c3..6a87d47ac8 100644
--- a/Marlin/src/gcode/queue.h
+++ b/Marlin/src/gcode/queue.h
@@ -77,6 +77,12 @@ public:
    */
   static void enqueue_one_now(const char* cmd);
 
+  /**
+   * Attempt to enqueue a single G-code command
+   * and return 'true' if successful.
+   */
+  static bool enqueue_one_P(PGM_P const pgcode);
+
   /**
    * Enqueue from program memory and return only when commands are actually enqueued
    */
@@ -117,12 +123,6 @@ public:
    */
   static void flush_and_request_resend();
 
-  /**
-   * Attempt to enqueue a single G-code command
-   * and return 'true' if successful.
-   */
-  FORCE_INLINE static bool enqueue_P(const char* cmd) { return _enqueue(cmd); }
-
 private:
 
   static uint8_t index_w;  // Ring buffer write position