diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index 9d2772f50ee75bdd08da39a9b04210e423e9c7b5..a3a8d3a0466fbff8b32889db8f19286c6bfcfb77 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -355,10 +355,6 @@ bool pin_is_protected(const int8_t pin) {
   return false;
 }
 
-#if HAS_M206_COMMAND
-  #include "gcode/geometry/M206.h"
-#endif
-
 #if IS_KINEMATIC
   #include "gcode/calibrate/M665.h"
 #endif
diff --git a/Marlin/src/gcode/gcode.cpp b/Marlin/src/gcode/gcode.cpp
index 1525ba2fa50299904f1b6345e30dd229b11086d5..a5da9ce62c7a41b1b8af359a2a507b8134a9dd88 100644
--- a/Marlin/src/gcode/gcode.cpp
+++ b/Marlin/src/gcode/gcode.cpp
@@ -119,7 +119,6 @@ void GcodeSuite::dwell(millis_t time) {
 extern void gcode_M163();
 extern void gcode_M164();
 extern void gcode_M165();
-extern void gcode_M206();
 extern void gcode_M211();
 extern void gcode_M220();
 extern void gcode_M226();
@@ -538,9 +537,7 @@ void GcodeSuite::process_next_command() {
       case 205: M205(); break;    // M205: Set advanced settings
 
       #if HAS_M206_COMMAND
-        case 206: // M206: Set home offsets
-          gcode_M206();
-          break;
+        case 206: M206(); break;  // M206: Set home offsets
       #endif
 
       #if ENABLED(DELTA)
diff --git a/Marlin/src/gcode/geometry/M206.h b/Marlin/src/gcode/geometry/M206.cpp
similarity index 90%
rename from Marlin/src/gcode/geometry/M206.h
rename to Marlin/src/gcode/geometry/M206.cpp
index bf0e4e528ce8e26d8c3d009cd84ff5cd71df5877..f537e884c8f1cc5b49a49480345adbab60516b2b 100644
--- a/Marlin/src/gcode/geometry/M206.h
+++ b/Marlin/src/gcode/geometry/M206.cpp
@@ -20,6 +20,13 @@
  *
  */
 
+#include "../../inc/MarlinConfig.h"
+
+#if HAS_M206_COMMAND
+
+#include "../gcode.h"
+#include "../../module/motion.h"
+
 /**
  * M206: Set Additional Homing Offset (X Y Z). SCARA aliases T=X, P=Y
  *
@@ -27,7 +34,7 @@
  * ***              M206 for SCARA will remain enabled in 1.1.x for compatibility.
  * ***              In the 2.0 release, it will simply be disabled by default.
  */
-void gcode_M206() {
+void GcodeSuite::M206() {
   LOOP_XYZ(i)
     if (parser.seen(axis_codes[i]))
       set_home_offset((AxisEnum)i, parser.value_linear_units());
@@ -40,3 +47,5 @@ void gcode_M206() {
   SYNC_PLAN_POSITION_KINEMATIC();
   report_current_position();
 }
+
+#endif // HAS_M206_COMMAND