diff --git a/Marlin/src/Marlin.cpp b/Marlin/src/Marlin.cpp
index 873e046bb726bcfe617b72c97fb403668c0e8727..946b8405272a7bb11c7bd9b137499a1044ef2a81 100644
--- a/Marlin/src/Marlin.cpp
+++ b/Marlin/src/Marlin.cpp
@@ -179,10 +179,6 @@ volatile bool wait_for_heatup = true;
 millis_t max_inactive_time = 0,
          stepper_inactive_time = (DEFAULT_STEPPER_DEACTIVE_TIME) * 1000UL;
 
-#if ENABLED(Z_DUAL_ENDSTOPS)
-  float z_endstop_adj;
-#endif
-
 #if ENABLED(FILAMENT_RUNOUT_SENSOR)
   static bool filament_ran_out = false;
 #endif
diff --git a/Marlin/src/Marlin.h b/Marlin/src/Marlin.h
index e8e42d4f8d9d7e5649153da02ee200de949d4458..e28b09e4e60a5d9855845c28193c5838aa3cebd8 100644
--- a/Marlin/src/Marlin.h
+++ b/Marlin/src/Marlin.h
@@ -190,10 +190,6 @@ extern volatile bool wait_for_heatup;
 // Inactivity shutdown timer
 extern millis_t max_inactive_time, stepper_inactive_time;
 
-#if ENABLED(Z_DUAL_ENDSTOPS)
-  extern float z_endstop_adj;
-#endif
-
 #if HAS_SERVOS
   #include "HAL/servo.h"
   extern HAL_SERVO_LIB servo[NUM_SERVOS];
diff --git a/Marlin/src/gcode/calibrate/M666.cpp b/Marlin/src/gcode/calibrate/M666.cpp
index 2dcdc76b90c528654331137cb01c7b53d88a52ca..1e64565e651898b8ccbac9bfedaa5813ec7a78db 100644
--- a/Marlin/src/gcode/calibrate/M666.cpp
+++ b/Marlin/src/gcode/calibrate/M666.cpp
@@ -64,14 +64,14 @@
 
 #elif ENABLED(Z_DUAL_ENDSTOPS) // !DELTA && ENABLED(Z_DUAL_ENDSTOPS)
 
-  #include "../../Marlin.h" // for z_endstop_adj
+  #include "../../module/endstops.h"
 
   /**
    * M666: For Z Dual Endstop setup, set z axis offset to the z2 axis.
    */
   void GcodeSuite::M666() {
-    if (parser.seen('Z')) z_endstop_adj = parser.value_linear_units();
-    SERIAL_ECHOLNPAIR("Z Endstop Adjustment set to (mm):", z_endstop_adj);
+    if (parser.seen('Z')) endstops.z_endstop_adj = parser.value_linear_units();
+    SERIAL_ECHOLNPAIR("Z Endstop Adjustment set to (mm):", endstops.z_endstop_adj);
   }
 
 #endif
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index e32ce4fa7aa5f6e1103f9266161e2654a999346a..5edf67f874682969c56c44c6ad98eca1b31278ee 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -103,7 +103,7 @@
  *  ---  M665 Z    delta_tower_angle_trim[C]        (float) is always 0.0
  *
  * Z_DUAL_ENDSTOPS:                                 48 bytes
- *  348  M666 Z    z_endstop_adj                    (float)
+ *  348  M666 Z    endstops.z_endstop_adj           (float)
  *  ---            dummy data                       (float x11)
  *
  * ULTIPANEL:                                       6 bytes
@@ -426,7 +426,7 @@ void MarlinSettings::postprocess() {
       dummy = 0.0f;
       for (uint8_t q = 3; q--;) EEPROM_WRITE(dummy);
     #elif ENABLED(Z_DUAL_ENDSTOPS)
-      EEPROM_WRITE(z_endstop_adj);             // 1 float
+      EEPROM_WRITE(endstops.z_endstop_adj);    // 1 float
       dummy = 0.0f;
       for (uint8_t q = 11; q--;) EEPROM_WRITE(dummy);
     #else
@@ -811,7 +811,7 @@ void MarlinSettings::postprocess() {
         dummy = 0.0f;
         for (uint8_t q=3; q--;) EEPROM_READ(dummy);
       #elif ENABLED(Z_DUAL_ENDSTOPS)
-        EEPROM_READ(z_endstop_adj);
+        EEPROM_READ(endstops.z_endstop_adj);    // 1 float
         dummy = 0.0f;
         for (uint8_t q=11; q--;) EEPROM_READ(dummy);
       #else
@@ -1203,7 +1203,7 @@ void MarlinSettings::reset() {
 
   #elif ENABLED(Z_DUAL_ENDSTOPS)
 
-    z_endstop_adj =
+    endstops.z_endstop_adj =
       #ifdef Z_DUAL_ENDSTOPS_ADJUSTMENT
         Z_DUAL_ENDSTOPS_ADJUSTMENT
       #else
@@ -1621,7 +1621,7 @@ void MarlinSettings::reset() {
         SERIAL_ECHOLNPGM("Z2 Endstop adjustment:");
       }
       CONFIG_ECHO_START;
-      SERIAL_ECHOLNPAIR("  M666 Z", LINEAR_UNIT(z_endstop_adj));
+      SERIAL_ECHOLNPAIR("  M666 Z", LINEAR_UNIT(endstops.z_endstop_adj));
     #endif // DELTA
 
     #if ENABLED(ULTIPANEL)
diff --git a/Marlin/src/module/endstops.cpp b/Marlin/src/module/endstops.cpp
index 510f13df412162594f5a692a24f445e92da94a55..b194abd5df06f62ca5233b7a0398251adc3d3144 100644
--- a/Marlin/src/module/endstops.cpp
+++ b/Marlin/src/module/endstops.cpp
@@ -54,6 +54,10 @@ volatile char Endstops::endstop_hit_bits; // use X_MIN, Y_MIN, Z_MIN and Z_MIN_P
   volatile bool Endstops::z_probe_enabled = false;
 #endif
 
+#if ENABLED(Z_DUAL_ENDSTOPS)
+  float Endstops::z_endstop_adj;
+#endif
+
 /**
  * Class and Instance Methods
  */
diff --git a/Marlin/src/module/endstops.h b/Marlin/src/module/endstops.h
index ddce0636073933a95d1d099cb9b315d2957af1ec..c0cef47655ffac75231e52bdbdcef0c4529968cc 100644
--- a/Marlin/src/module/endstops.h
+++ b/Marlin/src/module/endstops.h
@@ -50,6 +50,7 @@ class Endstops {
     static volatile char endstop_hit_bits; // use X_MIN, Y_MIN, Z_MIN and Z_MIN_PROBE as BIT value
 
     #if ENABLED(Z_DUAL_ENDSTOPS)
+      static float z_endstop_adj;
       typedef uint16_t esbits_t;
     #else
       typedef byte esbits_t;
diff --git a/Marlin/src/module/motion.cpp b/Marlin/src/module/motion.cpp
index 8a99d99eb2c8380f6023efb9d437519cf491e5cf..35a97d25b12fb86ffa0cb0d6006af10b980581ac 100644
--- a/Marlin/src/module/motion.cpp
+++ b/Marlin/src/module/motion.cpp
@@ -1099,14 +1099,14 @@ void homeaxis(const AxisEnum axis) {
 
   #if ENABLED(Z_DUAL_ENDSTOPS)
     if (axis == Z_AXIS) {
-      float adj = FABS(z_endstop_adj);
+      float adj = FABS(endstops.z_endstop_adj);
       bool lockZ1;
       if (axis_home_dir > 0) {
         adj = -adj;
-        lockZ1 = (z_endstop_adj > 0);
+        lockZ1 = (endstops.z_endstop_adj > 0);
       }
       else
-        lockZ1 = (z_endstop_adj < 0);
+        lockZ1 = (endstops.z_endstop_adj < 0);
 
       if (lockZ1) stepper.set_z_lock(true); else stepper.set_z2_lock(true);