diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index 4add62ff72..7d6231423b 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -320,8 +320,6 @@ void quickstop_stepper() {
   SYNC_PLAN_POSITION_KINEMATIC();
 }
 
-#include "gcode/control/M999.h"
-
 #include "gcode/control/T.h"
 
 #if ENABLED(USE_CONTROLLER_FAN)
diff --git a/Marlin/src/gcode/control/M999.h b/Marlin/src/gcode/control/M999.cpp
similarity index 85%
rename from Marlin/src/gcode/control/M999.h
rename to Marlin/src/gcode/control/M999.cpp
index e8a82e1b14..12c2cfdc59 100644
--- a/Marlin/src/gcode/control/M999.h
+++ b/Marlin/src/gcode/control/M999.cpp
@@ -20,7 +20,11 @@
  *
  */
 
-#include "../queue.h"
+#include "../gcode.h"
+
+#include "../../lcd/ultralcd.h" // for lcd_reset_alert_level
+#include "../../Marlin.h"       // for Running
+#include "../queue.h"           // for flush_and_request_resend
 
 /**
  * M999: Restart after being stopped
@@ -32,7 +36,7 @@
  * existing command buffer.
  *
  */
-void gcode_M999() {
+void GcodeSuite::M999() {
   Running = true;
   lcd_reset_alert_level();
 
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index ee68d5a77e..c3a1597c06 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -116,7 +116,6 @@ void GcodeSuite::dwell(millis_t time) {
 //
 // Placeholders for non-migrated codes
 //
-extern void gcode_M999();
 extern void gcode_T(uint8_t tmp_extruder);
 
 #if ENABLED(M100_FREE_MEMORY_WATCHER)
@@ -687,9 +686,7 @@ void GcodeSuite::process_next_command() {
         case 869: M869(); break; // M869: Report axis error
       #endif
 
-      case 999: // M999: Restart after being Stopped
-        gcode_M999();
-        break;
+      case 999: M999(); break;  // M999: Restart after being Stopped
     }
     break;