diff --git a/.travis.yml b/.travis.yml
index f32778b3a21bb9bc7c64db710eb7b0818a6541ec..8d22bd06abe9e33b0859ba1314670f6e40b49e15 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -107,7 +107,7 @@ script:
   # Test DUAL_X_CARRIAGE
   #
   - restore_configs
-  - opt_set MOTHERBOARD BOARD_RAMPS_14_EEB
+  - opt_set MOTHERBOARD BOARD_RUMBA
   - opt_set EXTRUDERS 2
   - opt_set TEMP_SENSOR_1 1
   - opt_enable USE_XMAX_PLUG
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index 5209f3d7192efd9c46838afdd559713fc7c07e10..f04ca2eb99bb2652175386a5dbb5645244ac1ec3 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h
index 313ac6b0166d6204f0c2cc56c59e46e8365f62a8..58256be885fbec5b5a8288b9476bcaa0810f71c4 100644
--- a/Marlin/example_configurations/Felix/Configuration_adv.h
+++ b/Marlin/example_configurations/Felix/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h
index 1ddfa5c65e2c96d34412de88c2cc07fdd9f81b07..2d5a149c824998f8dac7f954e71dec2dc5267f75 100644
--- a/Marlin/example_configurations/Hephestos/Configuration_adv.h
+++ b/Marlin/example_configurations/Hephestos/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
index ead4ecb067fcae42a2db5799b604b6e7a37f296d..04bf2b1bcf2308e54610dfbaa30551c22e47018e 100644
--- a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
+++ b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h
index 408667d0a026d14cf0cfc0661a218139c3f9b4f0..2eccfff5561d88e1b20ad78da6b9365f3a4359a0 100644
--- a/Marlin/example_configurations/K8200/Configuration_adv.h
+++ b/Marlin/example_configurations/K8200/Configuration_adv.h
@@ -233,7 +233,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -248,11 +248,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/RigidBot/Configuration_adv.h b/Marlin/example_configurations/RigidBot/Configuration_adv.h
index cd5b5ee151e8291fbaef3fe1b0313fe30bca8c6d..6b0c88bf32cb270f32bcebdcf7ee65ad7f72c3cc 100644
--- a/Marlin/example_configurations/RigidBot/Configuration_adv.h
+++ b/Marlin/example_configurations/RigidBot/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h
index 955ad4f06ca28b8ef7d9a9e54302ec3709a180cb..5bd27cd6090d99b05ef3191b0b32552326a7125d 100644
--- a/Marlin/example_configurations/SCARA/Configuration_adv.h
+++ b/Marlin/example_configurations/SCARA/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/TAZ4/Configuration_adv.h b/Marlin/example_configurations/TAZ4/Configuration_adv.h
index ce5ee33daba1c4451a0e273c215d601527af83b3..f113ece3735b68ab9d0121da9d5b14233880ec5d 100644
--- a/Marlin/example_configurations/TAZ4/Configuration_adv.h
+++ b/Marlin/example_configurations/TAZ4/Configuration_adv.h
@@ -235,7 +235,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -250,11 +250,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/WITBOX/Configuration_adv.h b/Marlin/example_configurations/WITBOX/Configuration_adv.h
index 1ddfa5c65e2c96d34412de88c2cc07fdd9f81b07..2d5a149c824998f8dac7f954e71dec2dc5267f75 100644
--- a/Marlin/example_configurations/WITBOX/Configuration_adv.h
+++ b/Marlin/example_configurations/WITBOX/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h b/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
index 066a5204c7621d3d1a7670f70454cf258a1ff388..d3bf8d8bbe53ef5b33019e42c14234212d832ebc 100644
--- a/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/biv2.5/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/delta/generic/Configuration_adv.h b/Marlin/example_configurations/delta/generic/Configuration_adv.h
index 16ced546f3c5038a4b4b5840fb5bf5b1ef1344d6..094f54b0a33930638e96649bf5cd9c49aa8956a8 100644
--- a/Marlin/example_configurations/delta/generic/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/generic/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
index 3d833b7ca1ed6ba957610c7fdd8479bf61598331..81a9f9aa88a30b75633664a819b71aa89536d644 100644
--- a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
index b8bf9d63831cac81528d5a08737e749541c21bfe..89e3ef3b42c9c76f65d8df85a7c9c48e737c240f 100644
--- a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
@@ -232,7 +232,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -247,11 +247,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
index 13e3f741a1b4083a05417e1aebd2162dfdac6ae1..37bddc291c59a46edf08c73b23030ab079ec130f 100644
--- a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/makibox/Configuration_adv.h b/Marlin/example_configurations/makibox/Configuration_adv.h
index 229fe63abaa310f8c25ac69c96275bb811c7f682..4a513926742caef07f22fcf318367ce87183fba4 100644
--- a/Marlin/example_configurations/makibox/Configuration_adv.h
+++ b/Marlin/example_configurations/makibox/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
index 679dc2ef9abadd73574c85ceafa8a5b6906f945d..4c4458ecbe4c11923ea9ceb8d235980593ea4860 100644
--- a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
+++ b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
@@ -227,7 +227,7 @@
 // Enable this for dual x-carriage printers.
 // A dual x-carriage design has the advantage that the inactive extruder can be parked which
 // prevents hot-end ooze contaminating the print. It also reduces the weight of each x-carriage
-// allowing faster printing speeds.
+// allowing faster printing speeds. Connect your X2 stepper to the first unused E plug.
 //#define DUAL_X_CARRIAGE
 #if ENABLED(DUAL_X_CARRIAGE)
   // Configuration for second X-carriage
@@ -242,11 +242,6 @@
       // without modifying the firmware (through the "M218 T1 X???" command).
       // Remember: you should set the second extruder x-offset to 0 in your slicer.
 
-  // Pins for second x-carriage stepper driver (defined here to avoid further complicating pins.h)
-  #define X2_ENABLE_PIN 29
-  #define X2_STEP_PIN 25
-  #define X2_DIR_PIN 23
-
   // There are a few selectable movement modes for dual x-carriages using M605 S<mode>
   //    Mode 0: Full control. The slicer has full control over both x-carriages and can achieve optimal travel results
   //                           as long as it supports dual x-carriages. (M605 S0)
diff --git a/Marlin/macros.h b/Marlin/macros.h
index 69ecc6fdb8ad0ec46d7e9e1e4efb0ec00f34a04e..eaa9875e0a1313f9cf605f7db1d59acc379752c7 100644
--- a/Marlin/macros.h
+++ b/Marlin/macros.h
@@ -55,6 +55,32 @@
 #define NUMERIC_SIGNED(a) (NUMERIC(a) || (a) == '-')
 #define COUNT(a) (sizeof(a)/sizeof(*a))
 
+// Macros for adding
+#define INC_0 1
+#define INC_1 2
+#define INC_2 3
+#define INC_3 4
+#define INC_4 5
+#define INC_5 6
+#define INC_6 7
+#define INC_7 8
+#define INC_8 9
+#define INCREMENT_(n) INC_ ##n
+#define INCREMENT(n) INCREMENT_(n)
+
+// Macros for subtracting
+#define DEC_1 0
+#define DEC_2 1
+#define DEC_3 2
+#define DEC_4 3
+#define DEC_5 4
+#define DEC_6 5
+#define DEC_7 6
+#define DEC_8 7
+#define DEC_9 8
+#define DECREMENT_(n) DEC_ ##n
+#define DECREMENT(n) DECREMENT_(n)
+
 #define PIN_EXISTS(PN) (defined(PN ##_PIN) && PN ##_PIN >= 0)
 
 #define PENDING(NOW,SOON) ((long)(NOW-(SOON))<0)
diff --git a/Marlin/pins.h b/Marlin/pins.h
index d0295f25bb4a9e508d0fa90cf219500c65d67925..8447db61e9fb28ff1bab71bb7cc844540a0e26c6 100644
--- a/Marlin/pins.h
+++ b/Marlin/pins.h
@@ -259,9 +259,6 @@
       #define _E3_PINS E3_STEP_PIN, E3_DIR_PIN, E3_ENABLE_PIN, HEATER_3_PIN, EXTRUDER_3_AUTO_FAN_PIN, marlinAnalogInputToDigitalPin(TEMP_3_PIN),
     #endif
   #endif
-#elif ENABLED(Y_DUAL_STEPPER_DRIVERS) || ENABLED(Z_DUAL_STEPPER_DRIVERS)
-  #undef _E1_PINS
-  #define _E1_PINS E1_STEP_PIN, E1_DIR_PIN, E1_ENABLE_PIN,
 #endif
 
 #define BED_PINS HEATER_BED_PIN, marlinAnalogInputToDigitalPin(TEMP_BED_PIN),
@@ -338,25 +335,46 @@
 #endif
 
 //
-// Dual Y and Dual Z support
-// These options are mutually-exclusive
+// Dual X-carriage, Dual Y, Dual Z support
 //
 
+#define _X2_PINS
+#define _Y2_PINS
+#define _Z2_PINS
+
 #define __EPIN(p,q) E##p##_##q##_PIN
 #define _EPIN(p,q) __EPIN(p,q)
 
+#if ENABLED(DUAL_X_CARRIAGE)
+  // The X2 axis, if any, should be the next open extruder port
+  #ifndef X2_STEP_PIN
+    #define X2_STEP_PIN   _EPIN(EXTRUDERS, STEP)
+    #define X2_DIR_PIN    _EPIN(EXTRUDERS, DIR)
+    #define X2_ENABLE_PIN _EPIN(EXTRUDERS, ENABLE)
+  #endif
+  #undef _X2_PINS
+  #define _X2_PINS X2_STEP_PIN, X2_DIR_PIN, X2_ENABLE_PIN,
+  #define Y2_Z2_E_INDEX INCREMENT(EXTRUDERS)
+#else
+  #define Y2_Z2_E_INDEX EXTRUDERS
+#endif
+
 // The Y2 axis, if any, should be the next open extruder port
-#ifndef Y2_STEP_PIN
-  #define Y2_STEP_PIN   _EPIN(EXTRUDERS, STEP)
-  #define Y2_DIR_PIN    _EPIN(EXTRUDERS, DIR)
-  #define Y2_ENABLE_PIN _EPIN(EXTRUDERS, ENABLE)
+#if ENABLED(Y_DUAL_STEPPER_DRIVERS) && !defined(Y2_STEP_PIN)
+  #define Y2_STEP_PIN   _EPIN(Y2_Z2_E_INDEX, STEP)
+  #define Y2_DIR_PIN    _EPIN(Y2_Z2_E_INDEX, DIR)
+  #define Y2_ENABLE_PIN _EPIN(Y2_Z2_E_INDEX, ENABLE)
+  #undef _Y2_PINS
+  #define _Y2_PINS Y2_STEP_PIN, Y2_DIR_PIN, Y2_ENABLE_PIN,
 #endif
 
 // The Z2 axis, if any, should be the next open extruder port
-#ifndef Z2_STEP_PIN
-  #define Z2_STEP_PIN   _EPIN(EXTRUDERS, STEP)
-  #define Z2_DIR_PIN    _EPIN(EXTRUDERS, DIR)
-  #define Z2_ENABLE_PIN _EPIN(EXTRUDERS, ENABLE)
+#if ENABLED(Z_DUAL_STEPPER_DRIVERS) && !defined(Z2_STEP_PIN)
+  #define Z2_STEP_PIN   _EPIN(Y2_Z2_E_INDEX, STEP)
+  #define Z2_DIR_PIN    _EPIN(Y2_Z2_E_INDEX, DIR)
+  #define Z2_ENABLE_PIN _EPIN(Y2_Z2_E_INDEX, ENABLE)
+  #undef _Z2_PINS
+  #define _Z2_PINS Z2_STEP_PIN, Z2_DIR_PIN, Z2_ENABLE_PIN,
 #endif
 
 #define SENSITIVE_PINS { 0, 1, \
@@ -365,6 +383,7 @@
     Z_STEP_PIN, Z_DIR_PIN, Z_ENABLE_PIN, Z_MIN_PIN, Z_MAX_PIN, Z_MIN_PROBE_PIN, \
     PS_ON_PIN, HEATER_BED_PIN, FAN_PIN, FAN1_PIN, FAN2_PIN, CONTROLLERFAN_PIN, \
     _E0_PINS _E1_PINS _E2_PINS _E3_PINS BED_PINS \
+    _X2_PINS _Y2_PINS _Z2_PINS \
     X_MS1_PIN, X_MS2_PIN, Y_MS1_PIN, Y_MS2_PIN, Z_MS1_PIN, Z_MS2_PIN \
   }
 
diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp
index 88d54ace474658d84c107c8bc12d17e7cf4d659e..909d86b555211c599306eaf0801d57bd8292c452 100644
--- a/Marlin/stepper.cpp
+++ b/Marlin/stepper.cpp
@@ -491,29 +491,30 @@ void Stepper::init() {
   #if HAS_X_ENABLE
     X_ENABLE_INIT;
     if (!X_ENABLE_ON) X_ENABLE_WRITE(HIGH);
+    #if ENABLED(DUAL_X_CARRIAGE) && HAS_X2_ENABLE
+      X2_ENABLE_INIT;
+      if (!X_ENABLE_ON) X2_ENABLE_WRITE(HIGH);
+    #endif
   #endif
-  #if HAS_X2_ENABLE
-    X2_ENABLE_INIT;
-    if (!X_ENABLE_ON) X2_ENABLE_WRITE(HIGH);
-  #endif
+
   #if HAS_Y_ENABLE
     Y_ENABLE_INIT;
     if (!Y_ENABLE_ON) Y_ENABLE_WRITE(HIGH);
-
-  #if ENABLED(Y_DUAL_STEPPER_DRIVERS) && HAS_Y2_ENABLE
-    Y2_ENABLE_INIT;
-    if (!Y_ENABLE_ON) Y2_ENABLE_WRITE(HIGH);
-  #endif
+    #if ENABLED(Y_DUAL_STEPPER_DRIVERS) && HAS_Y2_ENABLE
+      Y2_ENABLE_INIT;
+      if (!Y_ENABLE_ON) Y2_ENABLE_WRITE(HIGH);
+    #endif
   #endif
+
   #if HAS_Z_ENABLE
     Z_ENABLE_INIT;
     if (!Z_ENABLE_ON) Z_ENABLE_WRITE(HIGH);
-
     #if ENABLED(Z_DUAL_STEPPER_DRIVERS) && HAS_Z2_ENABLE
       Z2_ENABLE_INIT;
       if (!Z_ENABLE_ON) Z2_ENABLE_WRITE(HIGH);
     #endif
   #endif
+
   #if HAS_E0_ENABLE
     E0_ENABLE_INIT;
     if (!E_ENABLE_ON) E0_ENABLE_WRITE(HIGH);
@@ -550,10 +551,11 @@ void Stepper::init() {
   // Initialize Step Pins
   #if HAS_X_STEP
     AXIS_INIT(x, X, X);
+    #if ENABLED(DUAL_X_CARRIAGE) && HAS_X2_STEP
+      AXIS_INIT(x, X2, X);
+    #endif
   #endif
-  #if HAS_X2_STEP
-    AXIS_INIT(x, X2, X);
-  #endif
+
   #if HAS_Y_STEP
     #if ENABLED(Y_DUAL_STEPPER_DRIVERS) && HAS_Y2_STEP
       Y2_STEP_INIT;
@@ -561,6 +563,7 @@ void Stepper::init() {
     #endif
     AXIS_INIT(y, Y, Y);
   #endif
+
   #if HAS_Z_STEP
     #if ENABLED(Z_DUAL_STEPPER_DRIVERS) && HAS_Z2_STEP
       Z2_STEP_INIT;
@@ -568,6 +571,7 @@ void Stepper::init() {
     #endif
     AXIS_INIT(z, Z, Z);
   #endif
+
   #if HAS_E0_STEP
     E_AXIS_INIT(0);
   #endif
diff --git a/Marlin/stepper_indirection.h b/Marlin/stepper_indirection.h
index c013d268e3e6a6ff01bf407065798538907a0bd8..24e4c7c0ac04f9a620a8a5150bc632ea8d2903d5 100644
--- a/Marlin/stepper_indirection.h
+++ b/Marlin/stepper_indirection.h
@@ -60,17 +60,19 @@
 #define X_ENABLE_READ READ(X_ENABLE_PIN)
 
 // X2 motor
-#define X2_STEP_INIT SET_OUTPUT(X2_STEP_PIN)
-#define X2_STEP_WRITE(STATE) WRITE(X2_STEP_PIN,STATE)
-#define X2_STEP_READ READ(X2_STEP_PIN)
+#if ENABLED(DUAL_X_CARRIAGE)
+  #define X2_STEP_INIT SET_OUTPUT(X2_STEP_PIN)
+  #define X2_STEP_WRITE(STATE) WRITE(X2_STEP_PIN,STATE)
+  #define X2_STEP_READ READ(X2_STEP_PIN)
 
-#define X2_DIR_INIT SET_OUTPUT(X2_DIR_PIN)
-#define X2_DIR_WRITE(STATE) WRITE(X2_DIR_PIN,STATE)
-#define X2_DIR_READ READ(X_DIR_PIN)
+  #define X2_DIR_INIT SET_OUTPUT(X2_DIR_PIN)
+  #define X2_DIR_WRITE(STATE) WRITE(X2_DIR_PIN,STATE)
+  #define X2_DIR_READ READ(X_DIR_PIN)
 
-#define X2_ENABLE_INIT SET_OUTPUT(X2_ENABLE_PIN)
-#define X2_ENABLE_WRITE(STATE) WRITE(X2_ENABLE_PIN,STATE)
-#define X2_ENABLE_READ READ(X_ENABLE_PIN)
+  #define X2_ENABLE_INIT SET_OUTPUT(X2_ENABLE_PIN)
+  #define X2_ENABLE_WRITE(STATE) WRITE(X2_ENABLE_PIN,STATE)
+  #define X2_ENABLE_READ READ(X_ENABLE_PIN)
+#endif // DUAL_X_CARRIAGE
 
 // Y motor
 #define Y_STEP_INIT SET_OUTPUT(Y_STEP_PIN)
@@ -86,17 +88,19 @@
 #define Y_ENABLE_READ READ(Y_ENABLE_PIN)
 
 // Y2 motor
-#define Y2_STEP_INIT SET_OUTPUT(Y2_STEP_PIN)
-#define Y2_STEP_WRITE(STATE) WRITE(Y2_STEP_PIN,STATE)
-#define Y2_STEP_READ READ(Y2_STEP_PIN)
+#if ENABLED(Y_DUAL_STEPPER_DRIVERS)
+  #define Y2_STEP_INIT SET_OUTPUT(Y2_STEP_PIN)
+  #define Y2_STEP_WRITE(STATE) WRITE(Y2_STEP_PIN,STATE)
+  #define Y2_STEP_READ READ(Y2_STEP_PIN)
 
-#define Y2_DIR_INIT SET_OUTPUT(Y2_DIR_PIN)
-#define Y2_DIR_WRITE(STATE) WRITE(Y2_DIR_PIN,STATE)
-#define Y2_DIR_READ READ(Y2_DIR_PIN)
+  #define Y2_DIR_INIT SET_OUTPUT(Y2_DIR_PIN)
+  #define Y2_DIR_WRITE(STATE) WRITE(Y2_DIR_PIN,STATE)
+  #define Y2_DIR_READ READ(Y2_DIR_PIN)
 
-#define Y2_ENABLE_INIT SET_OUTPUT(Y2_ENABLE_PIN)
-#define Y2_ENABLE_WRITE(STATE) WRITE(Y2_ENABLE_PIN,STATE)
-#define Y2_ENABLE_READ READ(Y2_ENABLE_PIN)
+  #define Y2_ENABLE_INIT SET_OUTPUT(Y2_ENABLE_PIN)
+  #define Y2_ENABLE_WRITE(STATE) WRITE(Y2_ENABLE_PIN,STATE)
+  #define Y2_ENABLE_READ READ(Y2_ENABLE_PIN)
+#endif // Y_DUAL_STEPPER_DRIVERS
 
 // Z motor
 #define Z_STEP_INIT SET_OUTPUT(Z_STEP_PIN)
@@ -112,17 +116,19 @@
 #define Z_ENABLE_READ READ(Z_ENABLE_PIN)
 
 // Z2 motor
-#define Z2_STEP_INIT SET_OUTPUT(Z2_STEP_PIN)
-#define Z2_STEP_WRITE(STATE) WRITE(Z2_STEP_PIN,STATE)
-#define Z2_STEP_READ READ(Z2_STEP_PIN)
-
-#define Z2_DIR_INIT SET_OUTPUT(Z2_DIR_PIN)
-#define Z2_DIR_WRITE(STATE) WRITE(Z2_DIR_PIN,STATE)
-#define Z2_DIR_READ READ(Z2_DIR_PIN)
-
-#define Z2_ENABLE_INIT SET_OUTPUT(Z2_ENABLE_PIN)
-#define Z2_ENABLE_WRITE(STATE) WRITE(Z2_ENABLE_PIN,STATE)
-#define Z2_ENABLE_READ READ(Z2_ENABLE_PIN)
+#if ENABLED(Z_DUAL_STEPPER_DRIVERS)
+  #define Z2_STEP_INIT SET_OUTPUT(Z2_STEP_PIN)
+  #define Z2_STEP_WRITE(STATE) WRITE(Z2_STEP_PIN,STATE)
+  #define Z2_STEP_READ READ(Z2_STEP_PIN)
+
+  #define Z2_DIR_INIT SET_OUTPUT(Z2_DIR_PIN)
+  #define Z2_DIR_WRITE(STATE) WRITE(Z2_DIR_PIN,STATE)
+  #define Z2_DIR_READ READ(Z2_DIR_PIN)
+
+  #define Z2_ENABLE_INIT SET_OUTPUT(Z2_ENABLE_PIN)
+  #define Z2_ENABLE_WRITE(STATE) WRITE(Z2_ENABLE_PIN,STATE)
+  #define Z2_ENABLE_READ READ(Z2_ENABLE_PIN)
+#endif // Z_DUAL_STEPPER_DRIVERS
 
 // E0 motor
 #define E0_STEP_INIT SET_OUTPUT(E0_STEP_PIN)