diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index 251991a2afc41851d949696ddbbbc6d1522edac8..03ce3a578d5f4b6a896639909615a368809ba740 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h
index fb297604941c3d1d741b29d6a30306d318fd6631..13110a1aaa73f373ffb2a82ecde4d888babbba4e 100644
--- a/Marlin/Configuration_adv.h
+++ b/Marlin/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -648,9 +648,7 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-#if ENABLED(AUTO_BED_LEVELING_UBL)
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
   #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
   #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
   #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
@@ -810,6 +808,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -851,6 +850,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -892,6 +895,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -977,6 +981,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1028,6 +1033,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/configuration_store.cpp b/Marlin/configuration_store.cpp
index 5f190ef2660d246d07daf1f14c388aa53d3e0656..f83057bed630bd302755b3ef697df519ed2e6ba1 100644
--- a/Marlin/configuration_store.cpp
+++ b/Marlin/configuration_store.cpp
@@ -144,9 +144,10 @@
  *  568  M906 E1   stepperE1 current                (uint16_t)
  *  570  M906 E2   stepperE2 current                (uint16_t)
  *  572  M906 E3   stepperE3 current                (uint16_t)
+ *  572  M906 E4   stepperE4 current                (uint16_t)
  *
- *  574                                Minimum end-point
- * 1895 (574 + 36 + 9 + 288 + 988)     Maximum end-point
+ *  576                                Minimum end-point
+ * 1897 (576 + 36 + 9 + 288 + 988)     Maximum end-point
  */
 #include "Marlin.h"
 #include "language.h"
@@ -520,7 +521,7 @@ void Config_Postprocess() {
       EEPROM_WRITE(val);
     #else
       val = 0;
-      for (uint8_t q = 0; q < 10; ++q) EEPROM_WRITE(val);
+      for (uint8_t q = 0; q < 11; ++q) EEPROM_WRITE(val);
     #endif
 
     if (!eeprom_write_error) {
@@ -824,8 +825,12 @@ void Config_Postprocess() {
         #if ENABLED(E3_IS_TMC2130)
           stepperE3.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
         #endif
+        EEPROM_READ(val);
+        #if ENABLED(E4_IS_TMC2130)
+          stepperE4.setCurrent(val, R_SENSE, HOLD_MULTIPLIER);
+        #endif
       #else
-        for (uint8_t q = 0; q < 10; q++) EEPROM_READ(val);
+        for (uint8_t q = 0; q < 11; q++) EEPROM_READ(val);
       #endif
 
       if (eeprom_checksum == stored_checksum) {
diff --git a/Marlin/example_configurations/Cartesio/Configuration.h b/Marlin/example_configurations/Cartesio/Configuration.h
index 4f451dff86ca0701574e5566526f69f745f90894..ff2113c989ccacc24e773d4f29e8b78085f89eed 100644
--- a/Marlin/example_configurations/Cartesio/Configuration.h
+++ b/Marlin/example_configurations/Cartesio/Configuration.h
@@ -143,7 +143,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 3
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/Cartesio/Configuration_adv.h b/Marlin/example_configurations/Cartesio/Configuration_adv.h
index f832fedec54f164a0a080d931eb1b8b6b49e6f64..7433ef314b9a5bde7a7820e217ec4d3b72c9e888 100644
--- a/Marlin/example_configurations/Cartesio/Configuration_adv.h
+++ b/Marlin/example_configurations/Cartesio/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/Felix/Configuration.h b/Marlin/example_configurations/Felix/Configuration.h
index 95a8da48a62f173f08bd13c5687446742bd16740..dc3c07d4aeec82acc1ad99f3b64fff010aa725f9 100644
--- a/Marlin/example_configurations/Felix/Configuration.h
+++ b/Marlin/example_configurations/Felix/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/Felix/Configuration_adv.h b/Marlin/example_configurations/Felix/Configuration_adv.h
index 2e7efabe6d4db7e6ab23145976089928761ab7fb..0baab2f0e5b5472c4d9c2eec9421afc15fe876b4 100644
--- a/Marlin/example_configurations/Felix/Configuration_adv.h
+++ b/Marlin/example_configurations/Felix/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/Felix/DUAL/Configuration.h b/Marlin/example_configurations/Felix/DUAL/Configuration.h
index b01a1c144081f59d57c60d3bd3004c0a0bcf50e5..aa0af7f488e81e8d2e3ce73eba79f77ad41fa977 100644
--- a/Marlin/example_configurations/Felix/DUAL/Configuration.h
+++ b/Marlin/example_configurations/Felix/DUAL/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 2
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/Hephestos/Configuration.h b/Marlin/example_configurations/Hephestos/Configuration.h
index a3a89535a120260eb4b0a96bcaec191d6c77f869..973ff06eec3a9878a54a949b2f67b121d033095f 100644
--- a/Marlin/example_configurations/Hephestos/Configuration.h
+++ b/Marlin/example_configurations/Hephestos/Configuration.h
@@ -145,7 +145,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/Hephestos/Configuration_adv.h b/Marlin/example_configurations/Hephestos/Configuration_adv.h
index a7a6a31ef81a60270a8ef3634f32e2e72517e1d3..bc24d48abda126ec445911a19a3aa5876cc3c4ae 100644
--- a/Marlin/example_configurations/Hephestos/Configuration_adv.h
+++ b/Marlin/example_configurations/Hephestos/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration.h b/Marlin/example_configurations/Hephestos_2/Configuration.h
index cb7166891a2d8e511a6867704345df1a5a4fa9c3..e37b7b5c07d8973785f16757133cced2a4214670 100644
--- a/Marlin/example_configurations/Hephestos_2/Configuration.h
+++ b/Marlin/example_configurations/Hephestos_2/Configuration.h
@@ -142,7 +142,7 @@
 #define MACHINE_UUID "8d083632-40c5-4649-85b8-43d9ae6c5d55" // BQ Hephestos 2 standard config
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
index 89287837b6f2a1527b2dd49e6bccad6b93895afb..3802f63da0a353db6a38edf05b17af6789048577 100644
--- a/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
+++ b/Marlin/example_configurations/Hephestos_2/Configuration_adv.h
@@ -420,10 +420,10 @@
 
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -629,6 +629,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -784,6 +789,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -825,6 +831,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -866,6 +876,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -951,6 +962,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1002,6 +1014,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/K8200/Configuration.h b/Marlin/example_configurations/K8200/Configuration.h
index 6c91924e1574fbf467aad8236d7054af0acff3e9..031b50989cb53d4d8cc43257a26c8f0a614b7c69 100644
--- a/Marlin/example_configurations/K8200/Configuration.h
+++ b/Marlin/example_configurations/K8200/Configuration.h
@@ -162,7 +162,7 @@
 #endif
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/K8200/Configuration_adv.h b/Marlin/example_configurations/K8200/Configuration_adv.h
index f54193efa15f8e235c6b36298fc4c69cb715edbf..2861cb319ad354978e0804b5d376890ea9ee4bf4 100644
--- a/Marlin/example_configurations/K8200/Configuration_adv.h
+++ b/Marlin/example_configurations/K8200/Configuration_adv.h
@@ -432,10 +432,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -658,6 +658,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -813,6 +818,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -854,6 +860,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -895,6 +905,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -980,6 +991,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1031,6 +1043,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/K8400/Configuration.h b/Marlin/example_configurations/K8400/Configuration.h
index ee7c8c3f7216a02a4656d97abad9555b928f6313..43a52598730610ba3dfd0867062cf3a606a11f47 100644
--- a/Marlin/example_configurations/K8400/Configuration.h
+++ b/Marlin/example_configurations/K8400/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/K8400/Configuration_adv.h b/Marlin/example_configurations/K8400/Configuration_adv.h
index e35effc43722adbf3e6a369987b929cb2345daec..eb86f2d8d6e0ad0d0572b96deb400045f81cf9e2 100644
--- a/Marlin/example_configurations/K8400/Configuration_adv.h
+++ b/Marlin/example_configurations/K8400/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/K8400/Dual-head/Configuration.h b/Marlin/example_configurations/K8400/Dual-head/Configuration.h
index ef7606ebc43721d06e887ec5419002d5f17c8c5a..4637625aa0f17456268e20b693d055b87683330e 100644
--- a/Marlin/example_configurations/K8400/Dual-head/Configuration.h
+++ b/Marlin/example_configurations/K8400/Dual-head/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 2
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
index 7ab7f01269129fd1fef359aededecf3ffe7ef48b..ea487e811e994c2a4a00e41ada145eddf70de5c3 100644
--- a/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
+++ b/Marlin/example_configurations/RepRapWorld/Megatronics/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/RigidBot/Configuration.h b/Marlin/example_configurations/RigidBot/Configuration.h
index 642a7c6e6c1b66ef120d2d1755b7eed6967d4a2d..e87929b6f21dfeafb07266ba2ff34f87fb91cfac 100644
--- a/Marlin/example_configurations/RigidBot/Configuration.h
+++ b/Marlin/example_configurations/RigidBot/Configuration.h
@@ -145,7 +145,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1  // Single extruder. Set to 2 for dual extruders
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/RigidBot/Configuration_adv.h b/Marlin/example_configurations/RigidBot/Configuration_adv.h
index fb9cc9de6c11e6a6c292ca05ff1c12e95695e23c..8d5d3e9568904984e2d1fe4cba6ffc95f551698e 100644
--- a/Marlin/example_configurations/RigidBot/Configuration_adv.h
+++ b/Marlin/example_configurations/RigidBot/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/SCARA/Configuration.h b/Marlin/example_configurations/SCARA/Configuration.h
index d36c0b53a95dc0dbe4bb288d9870678e78bd7b20..04b5ac7a2000842dc0eef53ed648e1aade694446 100644
--- a/Marlin/example_configurations/SCARA/Configuration.h
+++ b/Marlin/example_configurations/SCARA/Configuration.h
@@ -174,7 +174,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/SCARA/Configuration_adv.h b/Marlin/example_configurations/SCARA/Configuration_adv.h
index 029bf9c2ac209c7bc0754b2e90ce9ccf3f149d03..6ecfbd3f159b0cc204ca2182d2d5cab84ad7e72d 100644
--- a/Marlin/example_configurations/SCARA/Configuration_adv.h
+++ b/Marlin/example_configurations/SCARA/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/TAZ4/Configuration.h b/Marlin/example_configurations/TAZ4/Configuration.h
index a6499369d8d0363dca2caf482dcc6b1212536787..654e362a1593e1cb6b9c6cdef1f20b455ca63c07 100644
--- a/Marlin/example_configurations/TAZ4/Configuration.h
+++ b/Marlin/example_configurations/TAZ4/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/TAZ4/Configuration_adv.h b/Marlin/example_configurations/TAZ4/Configuration_adv.h
index dee0ad407538b711e5b4e67f61f99e28350e3251..f28ecd0b1ff8c136cc9609765fc29138875ec871 100644
--- a/Marlin/example_configurations/TAZ4/Configuration_adv.h
+++ b/Marlin/example_configurations/TAZ4/Configuration_adv.h
@@ -427,10 +427,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -653,6 +653,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -808,6 +813,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -849,6 +855,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -890,6 +900,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -975,6 +986,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1026,6 +1038,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/TinyBoy2/Configuration.h b/Marlin/example_configurations/TinyBoy2/Configuration.h
index e5b2ab3a596ac02a1c20abe31ff9b10a68b82070..00478c9159338ff736f38946ad68bd64f0eee4f9 100644
--- a/Marlin/example_configurations/TinyBoy2/Configuration.h
+++ b/Marlin/example_configurations/TinyBoy2/Configuration.h
@@ -164,7 +164,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
@@ -988,13 +988,6 @@
 
   //#define MESH_G28_REST_ORIGIN // After homing all axes ('G28' or 'G28 XYZ') rest Z at Z_MIN_POS
 
-  //#define MANUAL_BED_LEVELING  // Add display menu option for bed leveling.
-  #define MANUAL_PROBE_Z_RANGE 4 // Z Range centered on Z_MIN_POS for LCD Z adjustment
-
-  #if ENABLED(MANUAL_BED_LEVELING)
-    #define MBL_Z_STEP 0.025     // Step size while manually probing Z axis.
-  #endif
-
 #endif // BED_LEVELING
 
 /**
diff --git a/Marlin/example_configurations/TinyBoy2/Configuration_adv.h b/Marlin/example_configurations/TinyBoy2/Configuration_adv.h
index aba1cb5cd0547889c99c2a5edcf5f3b978873224..5849f85f4fc8c3a3696070f02e9888440f70df9e 100644
--- a/Marlin/example_configurations/TinyBoy2/Configuration_adv.h
+++ b/Marlin/example_configurations/TinyBoy2/Configuration_adv.h
@@ -400,11 +400,11 @@
 // Motor Current controlled via PWM (Overridable on supported boards with PWM-driven motor driver current)
 //#define PWM_MOTOR_CURRENT {1300, 1300, 1250} // Values in milliamps
 
-// uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
 //#define DIGIPOT_I2C
 // Number of channels available for I2C digipot, For Azteeg X3 Pro we have 8
 #define DIGIPOT_I2C_NUM_CHANNELS 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}
 
 //===========================================================================
@@ -630,9 +630,7 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
-#endif
-
-#if ENABLED(AUTO_BED_LEVELING_UBL)
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
   #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
   #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
   #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
@@ -791,6 +789,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -832,6 +831,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -873,6 +876,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -958,6 +962,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1009,6 +1014,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/WITBOX/Configuration.h b/Marlin/example_configurations/WITBOX/Configuration.h
index 1e7902b57309fc6efcad73bc1b1a42ef292e06d1..7fda8247ef644bbf41d471c5242183441acb42f4 100644
--- a/Marlin/example_configurations/WITBOX/Configuration.h
+++ b/Marlin/example_configurations/WITBOX/Configuration.h
@@ -145,7 +145,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/WITBOX/Configuration_adv.h b/Marlin/example_configurations/WITBOX/Configuration_adv.h
index a7a6a31ef81a60270a8ef3634f32e2e72517e1d3..bc24d48abda126ec445911a19a3aa5876cc3c4ae 100644
--- a/Marlin/example_configurations/WITBOX/Configuration_adv.h
+++ b/Marlin/example_configurations/WITBOX/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/adafruit/ST7565/Configuration.h b/Marlin/example_configurations/adafruit/ST7565/Configuration.h
index 30b7a5dd54ddcec0337cf2aca47411cbc17f895a..bf8c9863cba27f1c2ca2f0b8d09b02a53edc6651 100644
--- a/Marlin/example_configurations/adafruit/ST7565/Configuration.h
+++ b/Marlin/example_configurations/adafruit/ST7565/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h b/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h
index addc89a7cbd0554f04d84d338c8b28eb237d6777..d7693db2b85c0b3b6dbec7aea5a27ffc98e5f575 100644
--- a/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h
+++ b/Marlin/example_configurations/delta/flsun_kossel_mini/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
@@ -311,9 +311,9 @@
   //#define PID_OPENLOOP 1 // Puts PID in open loop. M104/M140 sets the output power from 0 to PID_MAX
   //#define SLOW_PWM_HEATERS // PWM with very low frequency (roughly 0.125Hz=8s) and minimum state time of approximately 1s useful for heaters driven by a relay
   //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
-  // Set/get with gcode: M301 E[extruder number, 0-2]
+                                  // Set/get with gcode: M301 E[extruder number, 0-2]
   #define PID_FUNCTIONAL_RANGE 10 // If the temperature difference between the target temperature and the actual temperature
-  // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
+                                  // is more than PID_FUNCTIONAL_RANGE then the PID will be shut off and the heater will be set to min/max.
   #define K1 0.95 //smoothing factor within the PID
 
   // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it
@@ -754,7 +754,6 @@
 
 #endif // Z_PROBE_ALLEN_KEY
 
-
 /**
  *
  *   *** PLEASE READ ALL INSTRUCTIONS BELOW FOR SAFETY! ***
@@ -810,11 +809,10 @@
  *          ignored by Marlin
  */
 
-//#define Z_MIN_PROBE_ENDSTOP // A3K leave disable!
+//#define Z_MIN_PROBE_ENDSTOP // A3K leave disabled!
 #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
 
-
-/* Enable Z Probe Repeatability test to see how accurate your probe is  */
+// Enable Z Probe Repeatability test to see how accurate your probe is
 #define Z_MIN_PROBE_REPEATABILITY_TEST
 
 /**
@@ -834,7 +832,7 @@
 #define Z_CLEARANCE_DEPLOY_PROBE   50 // Z Clearance for Deploy/Stow
 #define Z_CLEARANCE_BETWEEN_PROBES  5 // Z Clearance between probe points
 
-/* For M851 give a range for adjusting the Z probe offset */
+// For M851 give a range for adjusting the Z probe offset
 #define Z_PROBE_OFFSET_RANGE_MIN -20
 #define Z_PROBE_OFFSET_RANGE_MAX 20
 
@@ -959,9 +957,9 @@
  *   leveling in steps so you can manually adjust the Z height at each grid-point.
  *   With an LCD controller the process is guided step-by-step.
  */
-//#define AUTO_BED_LEVELING_3POINT // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
-//#define AUTO_BED_LEVELING_LINEAR // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
-#define AUTO_BED_LEVELING_BILINEAR // Only AUTO_BED_LEVELING_BILINEAR is supported for DELTA bed leveling.
+//#define AUTO_BED_LEVELING_3POINT
+//#define AUTO_BED_LEVELING_LINEAR
+#define AUTO_BED_LEVELING_BILINEAR
 //#define AUTO_BED_LEVELING_UBL
 //#define MESH_BED_LEVELING
 
diff --git a/Marlin/example_configurations/delta/generic/Configuration.h b/Marlin/example_configurations/delta/generic/Configuration.h
index 39957c1ac9620a13cf331ca0704d56159dcb35f9..f8970faaa4d39fa542143726ed956e0ec7ab29f5 100644
--- a/Marlin/example_configurations/delta/generic/Configuration.h
+++ b/Marlin/example_configurations/delta/generic/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/delta/generic/Configuration_adv.h b/Marlin/example_configurations/delta/generic/Configuration_adv.h
index 44f80c1ca9edfa7f77658ccab170c1aaf55fd52e..88c273978d9c332366530d10e6d4d6fb3a50a043 100644
--- a/Marlin/example_configurations/delta/generic/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/generic/Configuration_adv.h
@@ -421,12 +421,30 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
+//===========================================================================
+//============================== Delta Settings =============================
+//===========================================================================
+
+#if ENABLED(DELTA_AUTO_CALIBRATION)
+  /**
+   * Set the height short (H-10) with M665 Hx.xx.
+   * Set the delta_radius offset (R-5, R-10, R+5, R+10) with M665 Rx.xx.
+   * Run G33 Cx V3 with different values (C2, C-2).
+   * Take the average for R_FACTOR and maximum for H_FACTOR.
+   * If R_FACTOR is too low accuracy is reduced. Too high reduces iteration speed.
+   * Run the tests with default values!!!
+   */
+  //#define DELTA_CALIBRATE_EXPERT_MODE
+  //#define H_FACTOR  1.02 //  1.0 < H_FACTOR <  1.11, default  1.00
+  //#define R_FACTOR -3.95 // -6.7 < R_FACTOR < -2.25, default -2.25
+#endif
+
 //===========================================================================
 //=============================Additional Features===========================
 //===========================================================================
@@ -647,6 +665,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -802,6 +825,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -843,6 +867,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -884,6 +912,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -969,6 +998,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1020,6 +1050,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration.h b/Marlin/example_configurations/delta/kossel_mini/Configuration.h
index faaa5c12c462b0c9771da425427dec08b7d4e8bf..b8633ae895eecf7e4092c0406948315118e994dd 100644
--- a/Marlin/example_configurations/delta/kossel_mini/Configuration.h
+++ b/Marlin/example_configurations/delta/kossel_mini/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
index 44f80c1ca9edfa7f77658ccab170c1aaf55fd52e..88c273978d9c332366530d10e6d4d6fb3a50a043 100644
--- a/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_mini/Configuration_adv.h
@@ -421,12 +421,30 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
+//===========================================================================
+//============================== Delta Settings =============================
+//===========================================================================
+
+#if ENABLED(DELTA_AUTO_CALIBRATION)
+  /**
+   * Set the height short (H-10) with M665 Hx.xx.
+   * Set the delta_radius offset (R-5, R-10, R+5, R+10) with M665 Rx.xx.
+   * Run G33 Cx V3 with different values (C2, C-2).
+   * Take the average for R_FACTOR and maximum for H_FACTOR.
+   * If R_FACTOR is too low accuracy is reduced. Too high reduces iteration speed.
+   * Run the tests with default values!!!
+   */
+  //#define DELTA_CALIBRATE_EXPERT_MODE
+  //#define H_FACTOR  1.02 //  1.0 < H_FACTOR <  1.11, default  1.00
+  //#define R_FACTOR -3.95 // -6.7 < R_FACTOR < -2.25, default -2.25
+#endif
+
 //===========================================================================
 //=============================Additional Features===========================
 //===========================================================================
@@ -647,6 +665,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -802,6 +825,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -843,6 +867,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -884,6 +912,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -969,6 +998,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1020,6 +1050,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration.h b/Marlin/example_configurations/delta/kossel_pro/Configuration.h
index 83d21af57ba641ca3d483556b5c11d6459253644..24c795cf9b49ddeb67e96b6a4053dceb6416ccca 100644
--- a/Marlin/example_configurations/delta/kossel_pro/Configuration.h
+++ b/Marlin/example_configurations/delta/kossel_pro/Configuration.h
@@ -146,7 +146,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
index 6fc72b8af122f4ddc49d5078fa0ecfa1b061ad7b..495f2dec95f183e476af8f8d912f0c2d463f50ff 100644
--- a/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_pro/Configuration_adv.h
@@ -426,10 +426,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -652,6 +652,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -807,6 +812,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -848,6 +854,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -889,6 +899,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -974,6 +985,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1025,6 +1037,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration.h b/Marlin/example_configurations/delta/kossel_xl/Configuration.h
index 7152cdc95b3cbe4ef5b8c3507a3b45045c0cd996..f515fb98ba85ea6a9c72f4f10a9cb16ca929a16e 100644
--- a/Marlin/example_configurations/delta/kossel_xl/Configuration.h
+++ b/Marlin/example_configurations/delta/kossel_xl/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
index ef3e6272c562f9108d17499fd8d3626dfe2aabac..08411b75510253f4aa5e745e7c5f4094e1a8d7e3 100644
--- a/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
+++ b/Marlin/example_configurations/delta/kossel_xl/Configuration_adv.h
@@ -421,10 +421,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -647,6 +647,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -802,6 +807,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -843,6 +849,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -884,6 +894,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -969,6 +980,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1020,6 +1032,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/makibox/Configuration.h b/Marlin/example_configurations/makibox/Configuration.h
index 942949eb594339986a1c31977d35d5aadda7fad2..84bc07b4eb00116916e5baa13cb2bd5690953485 100644
--- a/Marlin/example_configurations/makibox/Configuration.h
+++ b/Marlin/example_configurations/makibox/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/makibox/Configuration_adv.h b/Marlin/example_configurations/makibox/Configuration_adv.h
index c15f34e8346bfac7341fc2ee369d5d95f9139396..f451ce0478801afcba68ccf5988587be623ed49b 100644
--- a/Marlin/example_configurations/makibox/Configuration_adv.h
+++ b/Marlin/example_configurations/makibox/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 4 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-// actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS { 1.7, 1.7, 1.7, 1.7 }  // 5DPRINT
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration.h b/Marlin/example_configurations/tvrrug/Round2/Configuration.h
index 06ede265762446865fc7e0c06bbebbfa928f7a93..0c2bfeffd7cdd054204faca3600da67beb806245 100644
--- a/Marlin/example_configurations/tvrrug/Round2/Configuration.h
+++ b/Marlin/example_configurations/tvrrug/Round2/Configuration.h
@@ -142,7 +142,7 @@
 //#define MACHINE_UUID "00000000-0000-0000-0000-000000000000"
 
 // This defines the number of extruders
-// :[1, 2, 3, 4]
+// :[1, 2, 3, 4, 5]
 #define EXTRUDERS 1
 
 // Enable if your E steppers or extruder gear ratios are not identical
diff --git a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
index cb96f0260a033c0db2a051565053fc44e2ef935e..f951bd273191f6950284f9803d43ef6bc3e42d60 100644
--- a/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
+++ b/Marlin/example_configurations/tvrrug/Round2/Configuration_adv.h
@@ -419,10 +419,10 @@
 //#define DIGIPOT_MOTOR_CURRENT {135,135,135,135,135} // Values 0-255 (RAMBO 135 = ~0.75A, 185 = ~1A)
 //#define DAC_MOTOR_CURRENT_DEFAULT { 70, 80, 90, 80 } // Default drive percent - X, Y, Z, E axis
 
-/*  5DPRINT & AZTEEG_X3_PRO */
-//#define DIGIPOT_I2C  // uncomment to enable
+// Uncomment to enable an I2C based DIGIPOT like on the Azteeg X3 Pro
+//#define DIGIPOT_I2C
 #define DIGIPOT_I2C_NUM_CHANNELS 8 // 5DPRINT: 4     AZTEEG_X3_PRO: 8
-/* actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS */
+// Actual motor currents in Amps, need as many here as DIGIPOT_I2C_NUM_CHANNELS
 #define DIGIPOT_I2C_MOTOR_CURRENTS {1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0}  //  AZTEEG_X3_PRO
 
 //===========================================================================
@@ -645,6 +645,11 @@
   #define MESH_MAX_X (X_MAX_POS - (MESH_INSET))
   #define MESH_MIN_Y (Y_MIN_POS + MESH_INSET)
   #define MESH_MAX_Y (Y_MAX_POS - (MESH_INSET))
+#elif ENABLED(AUTO_BED_LEVELING_UBL)
+  #define UBL_MESH_MIN_X (X_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_X (X_MAX_POS - (UBL_MESH_INSET))
+  #define UBL_MESH_MIN_Y (Y_MIN_POS + UBL_MESH_INSET)
+  #define UBL_MESH_MAX_Y (Y_MAX_POS - (UBL_MESH_INSET))
 #endif
 
 // @section extras
@@ -800,6 +805,7 @@
   //#define E1_IS_TMC
   //#define E2_IS_TMC
   //#define E3_IS_TMC
+  //#define E4_IS_TMC
 
   #define X_MAX_CURRENT     1000 // in mA
   #define X_SENSE_RESISTOR    91 // in mOhms
@@ -841,6 +847,10 @@
   #define E3_SENSE_RESISTOR   91
   #define E3_MICROSTEPS       16
 
+  #define E4_MAX_CURRENT    1000
+  #define E4_SENSE_RESISTOR   91
+  #define E4_MICROSTEPS       16
+
 #endif
 
 // @section TMC2130
@@ -882,6 +892,7 @@
   //#define E1_IS_TMC2130
   //#define E2_IS_TMC2130
   //#define E3_IS_TMC2130
+  //#define E4_IS_TMC2130
 
   /**
    * Stepper driver settings
@@ -967,6 +978,7 @@
   //#define E1_IS_L6470
   //#define E2_IS_L6470
   //#define E3_IS_L6470
+  //#define E4_IS_L6470
 
   #define X_MICROSTEPS      16 // number of microsteps
   #define X_K_VAL           50 // 0 - 255, Higher values, are higher power. Be careful not to go too high
@@ -1018,6 +1030,11 @@
   #define E3_OVERCURRENT  2000
   #define E3_STALLCURRENT 1500
 
+  #define E4_MICROSTEPS     16
+  #define E4_K_VAL          50
+  #define E4_OVERCURRENT  2000
+  #define E4_STALLCURRENT 1500
+
 #endif
 
 /**
diff --git a/Marlin/language_an.h b/Marlin/language_an.h
index 1ee83c423f997f5802cf78f6c8ab4762b3368d35..bf10b85439e1308b561244a069fabeee0c317f5b 100644
--- a/Marlin/language_an.h
+++ b/Marlin/language_an.h
@@ -112,6 +112,7 @@
 #define MSG_E2STEPS                         _UxGT("E2 trangos/mm")
 #define MSG_E3STEPS                         _UxGT("E3 trangos/mm")
 #define MSG_E4STEPS                         _UxGT("E4 trangos/mm")
+#define MSG_E5STEPS                         _UxGT("E5 trangos/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Movimiento")
 #define MSG_VOLUMETRIC                      _UxGT("Filamento")
diff --git a/Marlin/language_bg.h b/Marlin/language_bg.h
index 2349610f1becdb237353b343d67de48c249c959a..4c6db482daf1a360910bc33a9c90cf28b7902405 100644
--- a/Marlin/language_bg.h
+++ b/Marlin/language_bg.h
@@ -113,6 +113,7 @@
 #define MSG_E2STEPS                         _UxGT("E2 стъпки/mm")
 #define MSG_E3STEPS                         _UxGT("E3 стъпки/mm")
 #define MSG_E4STEPS                         _UxGT("E4 стъпки/mm")
+#define MSG_E5STEPS                         _UxGT("E5 стъпки/mm")
 #define MSG_TEMPERATURE                     _UxGT("Температура")
 #define MSG_MOTION                          _UxGT("Движение")
 #define MSG_VOLUMETRIC                      _UxGT("Нишка")
diff --git a/Marlin/language_ca.h b/Marlin/language_ca.h
index 796f2a7daafc0a2b14473e6965e8192933a5f525..699706f481056dfa6c5e078643873db67397f2bb 100644
--- a/Marlin/language_ca.h
+++ b/Marlin/language_ca.h
@@ -117,6 +117,7 @@
 #define MSG_E2STEPS                         _UxGT("E2passos/mm")
 #define MSG_E3STEPS                         _UxGT("E3passos/mm")
 #define MSG_E4STEPS                         _UxGT("E4passos/mm")
+#define MSG_E5STEPS                         _UxGT("E5passos/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Moviment")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_cn.h b/Marlin/language_cn.h
index 2ef90b7d71883b9baf6079145e391f155bf0a6e3..d1b59e820162f11b6fd5f98925419f31b1e414b4 100644
--- a/Marlin/language_cn.h
+++ b/Marlin/language_cn.h
@@ -105,6 +105,7 @@
 #define MSG_E2STEPS                         "E2steps/mm"
 #define MSG_E3STEPS                         "E3steps/mm"
 #define MSG_E4STEPS                         "E4steps/mm"
+#define MSG_E5STEPS                         "E5steps/mm"
 #define MSG_TEMPERATURE                     "\xc9\xd2"
 #define MSG_MOTION                          "\xdf\xb2"
 #define MSG_VOLUMETRIC                      "Filament"
diff --git a/Marlin/language_cz.h b/Marlin/language_cz.h
index d53ff6dda05c295e879d3025dcb5aa4195c7f97e..77f9ac21d403050048403e2c7724fd91be50a050 100644
--- a/Marlin/language_cz.h
+++ b/Marlin/language_cz.h
@@ -116,6 +116,7 @@
 #define MSG_E2STEPS                         _UxGT("E2kroku/mm")
 #define MSG_E3STEPS                         _UxGT("E3kroku/mm")
 #define MSG_E4STEPS                         _UxGT("E4kroku/mm")
+#define MSG_E5STEPS                         _UxGT("E5kroku/mm")
 #define MSG_TEMPERATURE                     _UxGT("Teplota")
 #define MSG_MOTION                          _UxGT("Pohyb")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_da.h b/Marlin/language_da.h
index 9a963455c0992f715306639b2e400effffe9e86b..abe1a775e141d7f450767299548b2d263d511477 100644
--- a/Marlin/language_da.h
+++ b/Marlin/language_da.h
@@ -114,6 +114,7 @@
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatur")
 #define MSG_MOTION                          _UxGT("Bevægelse")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_de.h b/Marlin/language_de.h
index 8a61bb1639eefdaf05a86596c2e0b9a3b19bd49b..b0b50c2ae900c630bd6b9d05377a8055dd332d07 100644
--- a/Marlin/language_de.h
+++ b/Marlin/language_de.h
@@ -118,6 +118,7 @@
 #define MSG_E2STEPS                         _UxGT("E2 Steps/mm")
 #define MSG_E3STEPS                         _UxGT("E3 Steps/mm")
 #define MSG_E4STEPS                         _UxGT("E4 Steps/mm")
+#define MSG_E5STEPS                         _UxGT("E5 Steps/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatur")
 #define MSG_MOTION                          _UxGT("Bewegung")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_el-gr.h b/Marlin/language_el-gr.h
index 273a07a1d78948361e971ea88f3c575ab7aeb4c4..2a8298852558dc8ba4bb1cc27389bc3f6c60775a 100644
--- a/Marlin/language_el-gr.h
+++ b/Marlin/language_el-gr.h
@@ -112,6 +112,7 @@
 #define MSG_E2STEPS                         _UxGT("Bήματα Ε2 ανά μμ")
 #define MSG_E3STEPS                         _UxGT("Bήματα Ε3 ανά μμ")
 #define MSG_E4STEPS                         _UxGT("Bήματα Ε4 ανά μμ")
+#define MSG_E5STEPS                         _UxGT("Bήματα Ε5 ανά μμ")
 #define MSG_TEMPERATURE                     _UxGT("Θερμοκρασία")
 #define MSG_MOTION                          _UxGT("Κίνηση")
 #define MSG_VOLUMETRIC                      _UxGT("Νήμα")
diff --git a/Marlin/language_el.h b/Marlin/language_el.h
index 3f99b2b835ac346ea8afca27d2a860237b4bea49..832b4c6c76e586cb09b238a0661d95718df40588 100644
--- a/Marlin/language_el.h
+++ b/Marlin/language_el.h
@@ -112,6 +112,7 @@
 #define MSG_E2STEPS                         _UxGT("Bήματα Ε2 ανά μμ")
 #define MSG_E3STEPS                         _UxGT("Bήματα Ε3 ανά μμ")
 #define MSG_E4STEPS                         _UxGT("Bήματα Ε4 ανά μμ")
+#define MSG_E5STEPS                         _UxGT("Bήματα Ε5 ανά μμ")
 #define MSG_TEMPERATURE                     _UxGT("Θερμοκρασία")
 #define MSG_MOTION                          _UxGT("Κίνηση")
 #define MSG_VOLUMETRIC                      _UxGT("Νήμα")
diff --git a/Marlin/language_en.h b/Marlin/language_en.h
index b0ad5c986c996d7fe66c9125eaaaaf6ee7ad6b7a..cf032266389dd1cf5e9908cbd9fd9f5b80f84a01 100644
--- a/Marlin/language_en.h
+++ b/Marlin/language_en.h
@@ -291,6 +291,9 @@
 #ifndef MSG_E4STEPS
   #define MSG_E4STEPS                         _UxGT("E4steps/mm")
 #endif
+#ifndef MSG_E5STEPS
+  #define MSG_E5STEPS                         _UxGT("E5steps/mm")
+#endif
 #ifndef MSG_TEMPERATURE
   #define MSG_TEMPERATURE                     _UxGT("Temperature")
 #endif
diff --git a/Marlin/language_es.h b/Marlin/language_es.h
index 0da06d43b78fcab4f62b56fb841f870e4736c31b..7c4da00c7a3e9fe2cf7d85af363ca5b0605f5401 100644
--- a/Marlin/language_es.h
+++ b/Marlin/language_es.h
@@ -116,6 +116,7 @@
 #define MSG_E2STEPS                         _UxGT("E2 pasos/mm")
 #define MSG_E3STEPS                         _UxGT("E3 pasos/mm")
 #define MSG_E4STEPS                         _UxGT("E4 pasos/mm")
+#define MSG_E5STEPS                         _UxGT("E5 pasos/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Movimiento")
 #define MSG_VOLUMETRIC                      _UxGT("Filamento")
diff --git a/Marlin/language_eu.h b/Marlin/language_eu.h
index a83edb7006de1a361b743a18043b99c5833f893a..9c9cd0eca9b94a3d49a33a30b52c965e860de83d 100644
--- a/Marlin/language_eu.h
+++ b/Marlin/language_eu.h
@@ -103,6 +103,7 @@
 #define MSG_E2STEPS                         _UxGT("E2 pausoak/mm")
 #define MSG_E3STEPS                         _UxGT("E3 pausoak/mm")
 #define MSG_E4STEPS                         _UxGT("E4 pausoak/mm")
+#define MSG_E5STEPS                         _UxGT("E5 pausoak/mm")
 #define MSG_TEMPERATURE                     _UxGT("Tenperatura")
 #define MSG_MOTION                          _UxGT("Mugimendua")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_fi.h b/Marlin/language_fi.h
index 8072a8afee3dedd22a62bd6c19b89089cbd5daa6..f604752a6a945efa2d347012ae6ef5cc195423cf 100644
--- a/Marlin/language_fi.h
+++ b/Marlin/language_fi.h
@@ -104,6 +104,7 @@
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")
 #define MSG_TEMPERATURE                     _UxGT("Lämpötila")
 #define MSG_MOTION                          _UxGT("Liike")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_fr.h b/Marlin/language_fr.h
index c4e1b6e66867056921c816ccb46dd812dee135f3..c58d43943dc0d788f3ab2436f588b820cf2b5cdb 100644
--- a/Marlin/language_fr.h
+++ b/Marlin/language_fr.h
@@ -117,6 +117,7 @@
 #define MSG_E2STEPS                         _UxGT("E2pas/mm")
 #define MSG_E3STEPS                         _UxGT("E3pas/mm")
 #define MSG_E4STEPS                         _UxGT("E4pas/mm")
+#define MSG_E5STEPS                         _UxGT("E5pas/mm")
 #define MSG_TEMPERATURE                     _UxGT("Tempzrature")
 #define MSG_MOTION                          _UxGT("Mouvement")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_gl.h b/Marlin/language_gl.h
index 442af39ff4014073c81601fe100d8d36a0a2721d..f1a69aee430e8eb365187eed966746899d983729 100644
--- a/Marlin/language_gl.h
+++ b/Marlin/language_gl.h
@@ -113,6 +113,7 @@
 #define MSG_E2STEPS                         _UxGT("E2pasos/mm")
 #define MSG_E3STEPS                         _UxGT("E3pasos/mm")
 #define MSG_E4STEPS                         _UxGT("E4pasos/mm")
+#define MSG_E5STEPS                         _UxGT("E5pasos/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Movemento")
 #define MSG_VOLUMETRIC                      _UxGT("Filamento")
diff --git a/Marlin/language_hr.h b/Marlin/language_hr.h
index 3a326793d84c6aa925e277e4569b394d2c26aa1f..4f7eac9d7d557269c85dcd099d307e601bb2d0ff 100644
--- a/Marlin/language_hr.h
+++ b/Marlin/language_hr.h
@@ -112,6 +112,7 @@
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperature")
 #define MSG_MOTION                          _UxGT("Gibanje")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_it.h b/Marlin/language_it.h
index fe1608e7ebf639d4745eb8b524fbc6171605179c..70016cce6860fb4826f1ec3dcebb75d9144ff6d3 100644
--- a/Marlin/language_it.h
+++ b/Marlin/language_it.h
@@ -120,6 +120,7 @@
 #define MSG_E2STEPS                         _UxGT("E2passi/mm")
 #define MSG_E3STEPS                         _UxGT("E3passi/mm")
 #define MSG_E4STEPS                         _UxGT("E4passi/mm")
+#define MSG_E5STEPS                         _UxGT("E5passi/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Movimento")
 #define MSG_VOLUMETRIC                      _UxGT("Filamento")
diff --git a/Marlin/language_kana.h b/Marlin/language_kana.h
index 7925adbd0207df6af36dd8ee1293ab8e64ad5b27..2752ca5b46cda3469a53d699ff7e7519a4cd6435 100644
--- a/Marlin/language_kana.h
+++ b/Marlin/language_kana.h
@@ -137,6 +137,7 @@
   #define MSG_E2STEPS                         "E2steps/mm"
   #define MSG_E3STEPS                         "E3steps/mm"
   #define MSG_E4STEPS                         "E4steps/mm"
+  #define MSG_E5STEPS                         "E5steps/mm"
 #else
   #define MSG_XSTEPS                          "Xsteps"
   #define MSG_YSTEPS                          "Ysteps"
@@ -146,6 +147,7 @@
   #define MSG_E2STEPS                         "E2steps"
   #define MSG_E3STEPS                         "E3steps"
   #define MSG_E4STEPS                         "E4steps"
+  #define MSG_E5STEPS                         "E5steps"
 #endif
 #define MSG_TEMPERATURE                     "\xb5\xdd\xc4\xde"                                                 // "オンド" ("Temperature")
 #define MSG_MOTION                          "\xb3\xba\xde\xb7\xbe\xaf\xc3\xb2"                                 // "ウゴキセッテイ" ("Motion")
diff --git a/Marlin/language_kana_utf8.h b/Marlin/language_kana_utf8.h
index 48ffa373857f8538b3fb196576ce95b4de17768a..a21b1e3a76cd10cc1a6c59f7083ce9e18a2e04cf 100644
--- a/Marlin/language_kana_utf8.h
+++ b/Marlin/language_kana_utf8.h
@@ -122,6 +122,7 @@
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")
 #define MSG_TEMPERATURE                     _UxGT("オンド")                      // "Temperature"
 #define MSG_MOTION                          _UxGT("ウゴキセッテイ")                // "Motion"
 #define MSG_VOLUMETRIC                      _UxGT("フィラメント")                   // "Filament"
diff --git a/Marlin/language_nl.h b/Marlin/language_nl.h
index 33d38550413e3fbaf994768dfc0240d2bde7c31d..c75145b9be1ad8a45df32d8356898f236eda7b65 100644
--- a/Marlin/language_nl.h
+++ b/Marlin/language_nl.h
@@ -112,6 +112,7 @@
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatuur")
 #define MSG_MOTION                          _UxGT("Beweging")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_pl.h b/Marlin/language_pl.h
index dc08e10e26f9b51a953fbafee80a1e01d3a76adc..49b53b005ed2cba0acc6842460b51265a4880bce 100644
--- a/Marlin/language_pl.h
+++ b/Marlin/language_pl.h
@@ -112,6 +112,7 @@
 #define MSG_E2STEPS                         _UxGT("krokiE2/mm")
 #define MSG_E3STEPS                         _UxGT("krokiE3/mm")
 #define MSG_E4STEPS                         _UxGT("krokiE4/mm")
+#define MSG_E5STEPS                         _UxGT("krokiE5/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Ruch")
 #define MSG_VOLUMETRIC                      _UxGT("Filament")
diff --git a/Marlin/language_pt-br.h b/Marlin/language_pt-br.h
index b6a0778a6c9d656558be434246a56fb5484ed514..e1d0ed4b1b3d01da5d53124ab4b306ffc5cbb030 100644
--- a/Marlin/language_pt-br.h
+++ b/Marlin/language_pt-br.h
@@ -105,6 +105,7 @@
 #define MSG_E2STEPS                         "E2/mm"
 #define MSG_E3STEPS                         "E3/mm"
 #define MSG_E4STEPS                         "E4/mm"
+#define MSG_E5STEPS                         "E5/mm"
 #define MSG_TEMPERATURE                     "Temperatura"
 #define MSG_MOTION                          "Movimento"
 #define MSG_VOLUMETRIC                      "Filamento"
diff --git a/Marlin/language_pt-br_utf8.h b/Marlin/language_pt-br_utf8.h
index ece1ff84a12f8da7bfe5e24314a1205fe6aeaff4..2b34886a01a67487daf76af1a91b9f1f9281c7cf 100644
--- a/Marlin/language_pt-br_utf8.h
+++ b/Marlin/language_pt-br_utf8.h
@@ -105,6 +105,7 @@
 #define MSG_E2STEPS                         _UxGT("E2/mm")
 #define MSG_E3STEPS                         _UxGT("E3/mm")
 #define MSG_E4STEPS                         _UxGT("E4/mm")
+#define MSG_E5STEPS                         _UxGT("E5/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Movimento")
 #define MSG_VOLUMETRIC                      _UxGT("Filamento")
diff --git a/Marlin/language_pt.h b/Marlin/language_pt.h
index 16a2cb9458f514dadcbedd6f8866c02de880bfbe..2682da58eccfad9393aa885ea0e1973a88745866 100644
--- a/Marlin/language_pt.h
+++ b/Marlin/language_pt.h
@@ -109,6 +109,7 @@
 #define MSG_E2STEPS                         "E2 passo/mm"
 #define MSG_E3STEPS                         "E3 passo/mm"
 #define MSG_E4STEPS                         "E4 passo/mm"
+#define MSG_E5STEPS                         "E5 passo/mm"
 #define MSG_TEMPERATURE                     "Temperatura"
 #define MSG_MOTION                          "Movimento"
 #define MSG_VOLUMETRIC                      "Filamento"
diff --git a/Marlin/language_pt_utf8.h b/Marlin/language_pt_utf8.h
index 84f95188a80586d28d677b716b7d19c408a6ca0a..e2aedb50d0065d9a7dd7b0a4b2d0b745e25d58f9 100644
--- a/Marlin/language_pt_utf8.h
+++ b/Marlin/language_pt_utf8.h
@@ -109,6 +109,7 @@
 #define MSG_E2STEPS                         _UxGT("E2 passo/mm")
 #define MSG_E3STEPS                         _UxGT("E3 passo/mm")
 #define MSG_E4STEPS                         _UxGT("E4 passo/mm")
+#define MSG_E5STEPS                         _UxGT("E5 passo/mm")
 #define MSG_TEMPERATURE                     _UxGT("Temperatura")
 #define MSG_MOTION                          _UxGT("Movimento")
 #define MSG_VOLUMETRIC                      _UxGT("Filamento")
diff --git a/Marlin/language_tr.h b/Marlin/language_tr.h
index d007a0afb278136715fe5eeaff89a379ed8d0b0e..095eedd9dc7c4757f221ada1dd6f64eece160959 100644
--- a/Marlin/language_tr.h
+++ b/Marlin/language_tr.h
@@ -117,6 +117,7 @@
 #define MSG_E2STEPS                         _UxGT("E2steps/mm")                                         // E2steps/mm
 #define MSG_E3STEPS                         _UxGT("E3steps/mm")                                         // E3steps/mm
 #define MSG_E4STEPS                         _UxGT("E4steps/mm")                                         // E4steps/mm
+#define MSG_E5STEPS                         _UxGT("E5steps/mm")                                         // E4steps/mm
 #define MSG_TEMPERATURE                     _UxGT("Sıcaklık")                                           // Sıcaklık
 #define MSG_MOTION                          _UxGT("Hareket")                                            // Hareket
 #define MSG_VOLUMETRIC                      _UxGT("Filaman")                                            // Filaman
diff --git a/Marlin/language_uk.h b/Marlin/language_uk.h
index 4279edc8f0a003122597d24add8acd06d3d93429..f36a366fee2630af53aa66187d18b55509ad9faa 100644
--- a/Marlin/language_uk.h
+++ b/Marlin/language_uk.h
@@ -113,6 +113,7 @@
 #define MSG_E2STEPS                         _UxGT("E2кроків/мм")
 #define MSG_E3STEPS                         _UxGT("E3кроків/мм")
 #define MSG_E4STEPS                         _UxGT("E4кроків/мм")
+#define MSG_E5STEPS                         _UxGT("E5кроків/мм")
 #define MSG_TEMPERATURE                     _UxGT("Температура")
 #define MSG_MOTION                          _UxGT("Рух")
 #define MSG_VOLUMETRIC                      _UxGT("Волокно")
diff --git a/Marlin/pinsDebug_list.h b/Marlin/pinsDebug_list.h
index 9ce20fb130e9e436ac412bf11cb33878931ee3d9..54b7ae5d7d5a7d257371a0d0a04227a1d9d8e6ab 100644
--- a/Marlin/pinsDebug_list.h
+++ b/Marlin/pinsDebug_list.h
@@ -212,6 +212,9 @@
 #if PIN_EXISTS(E3_STEP)
   REPORT_NAME_DIGITAL(E3_STEP_PIN, __LINE__ )
 #endif
+#if PIN_EXISTS(E4_AUTO_FAN)
+  REPORT_NAME_DIGITAL(E4_AUTO_FAN_PIN, __LINE__ )
+#endif
 #if PIN_EXISTS(E4_DIR)
   REPORT_NAME_DIGITAL(E4_DIR_PIN, __LINE__ )
 #endif
@@ -434,6 +437,9 @@
 #if PIN_EXISTS(ORIG_E3_AUTO_FAN)
   REPORT_NAME_DIGITAL(ORIG_E3_AUTO_FAN_PIN, __LINE__ )
 #endif
+#if PIN_EXISTS(ORIG_E4_AUTO_FAN)
+  REPORT_NAME_DIGITAL(ORIG_E4_AUTO_FAN_PIN, __LINE__ )
+#endif
 #if PIN_EXISTS(PHOTOGRAPH)
   REPORT_NAME_DIGITAL(PHOTOGRAPH_PIN, __LINE__ )
 #endif
diff --git a/Marlin/serial.h b/Marlin/serial.h
index 864a9d8f66fd47fd847f36ec1ae0ea1c16539154..b6e7add430d34a5c9882baba78028b40015ab87d 100644
--- a/Marlin/serial.h
+++ b/Marlin/serial.h
@@ -65,6 +65,12 @@ extern const char errormagic[] PROGMEM;
 #define SERIAL_ERRORLN(x)              SERIAL_PROTOCOLLN(x)
 #define SERIAL_ERRORLNPGM(x)           SERIAL_PROTOCOLLNPGM(x)
 
+// These macros compensate for float imprecision
+#define SERIAL_PROTOCOLPAIR_F(name, value)    SERIAL_PROTOCOLPAIR(name, FIXFLOAT(value))
+#define SERIAL_PROTOCOLLNPAIR_F(name, value)  SERIAL_PROTOCOLLNPAIR(name, FIXFLOAT(value))
+#define SERIAL_ECHOPAIR_F(name,value)         SERIAL_ECHOPAIR(name, FIXFLOAT(value))
+#define SERIAL_ECHOLNPAIR_F(name, value)      SERIAL_ECHOLNPAIR(name, FIXFLOAT(value))
+
 void serial_echopair_P(const char* s_P, const char *v);
 void serial_echopair_P(const char* s_P, char v);
 void serial_echopair_P(const char* s_P, int v);
diff --git a/Marlin/stepper.cpp b/Marlin/stepper.cpp
index cf7d1c23aa5721e4ef80f65bbd192d2bc267fee1..46270179506f3d719175cb265dd611ad45420402 100644
--- a/Marlin/stepper.cpp
+++ b/Marlin/stepper.cpp
@@ -931,6 +931,9 @@ void Stepper::init() {
   #if HAS_E3_DIR
     E3_DIR_INIT;
   #endif
+  #if HAS_E4_DIR
+    E4_DIR_INIT;
+  #endif
 
   // Init Enable Pins - steppers default to disabled.
   #if HAS_X_ENABLE
@@ -973,6 +976,10 @@ void Stepper::init() {
     E3_ENABLE_INIT;
     if (!E_ENABLE_ON) E3_ENABLE_WRITE(HIGH);
   #endif
+  #if HAS_E4_ENABLE
+    E4_ENABLE_INIT;
+    if (!E_ENABLE_ON) E4_ENABLE_WRITE(HIGH);
+  #endif
 
   // Init endstops and pullups
   endstops.init();
diff --git a/Marlin/stepper_indirection.cpp b/Marlin/stepper_indirection.cpp
index 930b2752d4dbe84e1b7e80f054838705df8bd0b7..4e072dff2e67af02e5f4588b3c07d4f67425b5b4 100644
--- a/Marlin/stepper_indirection.cpp
+++ b/Marlin/stepper_indirection.cpp
@@ -75,6 +75,9 @@
   #if ENABLED(E3_IS_TMC)
     _TMC_DEFINE(E3);
   #endif
+  #if ENABLED(E4_IS_TMC)
+    _TMC_DEFINE(E4);
+  #endif
 
   #define _TMC_INIT(A) do{ \
     stepper##A.setMicrosteps(A##_MICROSTEPS); \
@@ -112,6 +115,9 @@
     #if ENABLED(E3_IS_TMC)
       _TMC_INIT(E3);
     #endif
+    #if ENABLED(E4_IS_TMC)
+      _TMC_INIT(E4);
+    #endif
   }
 
 #endif // HAVE_TMCDRIVER
@@ -157,6 +163,9 @@
   #if ENABLED(E3_IS_TMC2130)
     _TMC2130_DEFINE(E3);
   #endif
+  #if ENABLED(E4_IS_TMC2130)
+    _TMC2130_DEFINE(E4);
+  #endif
 
   // Use internal reference voltage for current calculations. This is the default.
   // Following values from Trinamic's spreadsheet with values for a NEMA17 (42BYGHW609)
@@ -213,6 +222,9 @@
     #if ENABLED(E3_IS_TMC2130)
       _TMC2130_INIT(E3);
     #endif
+    #if ENABLED(E4_IS_TMC2130)
+      _TMC2130_INIT(E4);
+    #endif
 
     TMC2130_ADV()
   }
@@ -260,6 +272,9 @@
   #if ENABLED(E3_IS_L6470)
     _L6470_DEFINE(E3);
   #endif
+  #if ENABLED(E4_IS_L6470)
+    _L6470_DEFINE(E4);
+  #endif
 
   #define _L6470_INIT(A) do{ \
     stepper##A.init(A##_K_VAL); \
@@ -300,6 +315,9 @@
     #if ENABLED(E3_IS_L6470)
       _L6470_INIT(E3);
     #endif
+    #if ENABLED(E4_IS_L6470)
+      _L6470_INIT(E4);
+    #endif
   }
 
 #endif // HAVE_L6470DRIVER
diff --git a/Marlin/stepper_indirection.h b/Marlin/stepper_indirection.h
index 22056072cdc12902d2c6c7fdfa0fdf3a2ea9ed0a..79a8da4f63df2ba7a5c89ac981cc2e47f6061c25 100644
--- a/Marlin/stepper_indirection.h
+++ b/Marlin/stepper_indirection.h
@@ -381,6 +381,37 @@
 #define E3_STEP_WRITE(STATE) WRITE(E3_STEP_PIN,STATE)
 #define E3_STEP_READ READ(E3_STEP_PIN)
 
+// E4 Stepper
+#if ENABLED(HAVE_L6470DRIVER) && ENABLED(E4_IS_L6470)
+  extern L6470 stepperE4;
+  #define E4_ENABLE_INIT NOOP
+  #define E4_ENABLE_WRITE(STATE) do{ if (STATE) stepperE4.Step_Clock(stepperE4.getStatus() & STATUS_HIZ); else stepperE4.softFree(); }while(0)
+  #define E4_ENABLE_READ (stepperE4.getStatus() & STATUS_HIZ)
+  #define E4_DIR_INIT NOOP
+  #define E4_DIR_WRITE(STATE) stepperE4.Step_Clock(STATE)
+  #define E4_DIR_READ (stepperE4.getStatus() & STATUS_DIR)
+#else
+  #if ENABLED(HAVE_TMCDRIVER) && ENABLED(E4_IS_TMC)
+    extern TMC26XStepper stepperE4;
+    #define E4_ENABLE_INIT NOOP
+    #define E4_ENABLE_WRITE(STATE) stepperE4.setEnabled(STATE)
+    #define E4_ENABLE_READ stepperE4.isEnabled()
+  #else
+    #if ENABLED(HAVE_TMC2130) && ENABLED(E4_IS_TMC2130)
+      extern TMC2130Stepper stepperE4;
+    #endif
+    #define E4_ENABLE_INIT SET_OUTPUT(E4_ENABLE_PIN)
+    #define E4_ENABLE_WRITE(STATE) WRITE(E4_ENABLE_PIN,STATE)
+    #define E4_ENABLE_READ READ(E4_ENABLE_PIN)
+  #endif
+  #define E4_DIR_INIT SET_OUTPUT(E4_DIR_PIN)
+  #define E4_DIR_WRITE(STATE) WRITE(E4_DIR_PIN,STATE)
+  #define E4_DIR_READ READ(E4_DIR_PIN)
+#endif
+#define E4_STEP_INIT SET_OUTPUT(E4_STEP_PIN)
+#define E4_STEP_WRITE(STATE) WRITE(E4_STEP_PIN,STATE)
+#define E4_STEP_READ READ(E4_STEP_PIN)
+
 /**
  * Extruder indirection for the single E axis
  */
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index 0bf8e314153d0362b3eaab8bf780407d440864c1..e9c8700b94d4fac6f263ff0b00f01167a6be7984 100755
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -918,39 +918,26 @@ void kill_screen(const char* lcd_msg) {
   /**
    * Watch temperature callbacks
    */
-  #if WATCH_HOTENDS
-    #if HAS_TEMP_HOTEND
-      void watch_temp_callback_E0() { thermalManager.start_watching_heater(0); }
-      #if HOTENDS > 1
-        void watch_temp_callback_E1() { thermalManager.start_watching_heater(1); }
-        #if HOTENDS > 2
-          void watch_temp_callback_E2() { thermalManager.start_watching_heater(2); }
-          #if HOTENDS > 3
-            void watch_temp_callback_E3() { thermalManager.start_watching_heater(3); }
-            #if HOTENDS > 4
-              void watch_temp_callback_E4() { thermalManager.start_watching_heater(4); }
-            #endif // HOTENDS > 4
-          #endif // HOTENDS > 3
-        #endif // HOTENDS > 2
-      #endif // HOTENDS > 1
-    #endif
-  #else
-    #if HAS_TEMP_HOTEND
-      void watch_temp_callback_E0() {}
-      #if HOTENDS > 1
-        void watch_temp_callback_E1() {}
-        #if HOTENDS > 2
-          void watch_temp_callback_E2() {}
-          #if HOTENDS > 3
-            void watch_temp_callback_E3() {}
-            #if HOTENDS > 4
-              void watch_temp_callback_E4() {}
-            #endif // HOTENDS > 4
-          #endif // HOTENDS > 3
-        #endif // HOTENDS > 2
-      #endif // HOTENDS > 1
+  #if HAS_TEMP_HOTEND
+    #if WATCH_HOTENDS
+      #define _WATCH_FUNC(N) thermalManager.start_watching_heater(N)
+    #else
+      #define _WATCH_FUNC(N) NOOP
     #endif
-  #endif
+    void watch_temp_callback_E0() { _WATCH_FUNC(0); }
+    #if HOTENDS > 1
+      void watch_temp_callback_E1() { _WATCH_FUNC(1); }
+      #if HOTENDS > 2
+        void watch_temp_callback_E2() { _WATCH_FUNC(2); }
+        #if HOTENDS > 3
+          void watch_temp_callback_E3() { _WATCH_FUNC(3); }
+          #if HOTENDS > 4
+            void watch_temp_callback_E4() { _WATCH_FUNC(4); }
+          #endif // HOTENDS > 4
+        #endif // HOTENDS > 3
+      #endif // HOTENDS > 2
+    #endif // HOTENDS > 1
+  #endif // HAS_TEMP_HOTEND
 
   #if WATCH_THE_BED
     void watch_temp_callback_bed() { thermalManager.start_watching_bed(); }
@@ -1905,10 +1892,13 @@ void kill_screen(const char* lcd_msg) {
             case 2: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E3); break;
             #if E_MANUAL > 3
               case 3: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E4); break;
-            #endif
-          #endif
+              #if E_MANUAL > 4
+                case 4: pos_label = PSTR(MSG_MOVE_E MSG_MOVE_E5); break;
+              #endif // E_MANUAL > 4
+            #endif // E_MANUAL > 3
+          #endif // E_MANUAL > 2
         }
-      #endif
+      #endif // E_MANUAL > 1
       lcd_implementation_drawedit(pos_label, ftostr41sign(current_position[E_AXIS]));
     }
   }
@@ -1921,9 +1911,12 @@ void kill_screen(const char* lcd_msg) {
       void lcd_move_e2() { _lcd_move_e(2); }
       #if E_MANUAL > 3
         void lcd_move_e3() { _lcd_move_e(3); }
-      #endif
-    #endif
-  #endif
+        #if E_MANUAL > 4
+          void lcd_move_e4() { _lcd_move_e(4); }
+        #endif // E_MANUAL > 4
+      #endif // E_MANUAL > 3
+    #endif // E_MANUAL > 2
+  #endif // E_MANUAL > 1
 
   /**
    *
@@ -1970,9 +1963,12 @@ void kill_screen(const char* lcd_msg) {
       void lcd_move_get_e2_amount()   { _lcd_move_distance_menu(E_AXIS, lcd_move_e2); }
       #if E_MANUAL > 3
         void lcd_move_get_e3_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e3); }
-      #endif
-    #endif
-  #endif
+        #if E_MANUAL > 4
+          void lcd_move_get_e4_amount() { _lcd_move_distance_menu(E_AXIS, lcd_move_e4); }
+        #endif // E_MANUAL > 4
+      #endif // E_MANUAL > 3
+    #endif // E_MANUAL > 2
+  #endif // E_MANUAL > 1
 
   /**
    *
@@ -2033,9 +2029,12 @@ void kill_screen(const char* lcd_msg) {
         MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E3, lcd_move_get_e2_amount);
         #if E_MANUAL > 3
           MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E4, lcd_move_get_e3_amount);
-        #endif
-      #endif
-    #endif
+          #if E_MANUAL > 4
+            MENU_ITEM(submenu, MSG_MOVE_E MSG_MOVE_E5, lcd_move_get_e4_amount);
+          #endif // E_MANUAL > 4
+        #endif // E_MANUAL > 3
+      #endif // E_MANUAL > 2
+    #endif // E_MANUAL > 1
 
     END_MENU();
   }
@@ -2239,6 +2238,7 @@ void kill_screen(const char* lcd_msg) {
     // PID-P E2, PID-I E2, PID-D E2, PID-C E2, PID Autotune E2
     // PID-P E3, PID-I E3, PID-D E3, PID-C E3, PID Autotune E3
     // PID-P E4, PID-I E4, PID-D E4, PID-C E4, PID Autotune E4
+    // PID-P E5, PID-I E5, PID-D E5, PID-C E5, PID Autotune E5
     //
     #if ENABLED(PIDTEMP)
 
@@ -2350,8 +2350,11 @@ void kill_screen(const char* lcd_msg) {
       void _reset_e2_acceleration_rate() { _reset_e_acceleration_rate(2); }
       #if E_STEPPERS > 3
         void _reset_e3_acceleration_rate() { _reset_e_acceleration_rate(3); }
-      #endif
-    #endif
+        #if E_STEPPERS > 4
+          void _reset_e4_acceleration_rate() { _reset_e_acceleration_rate(4); }
+        #endif // E_STEPPERS > 4
+      #endif // E_STEPPERS > 3
+    #endif // E_STEPPERS > 2
   #endif
 
   void _planner_refresh_positioning() { planner.refresh_positioning(); }
@@ -2368,8 +2371,11 @@ void kill_screen(const char* lcd_msg) {
       void _planner_refresh_e2_positioning() { _reset_e_acceleration_rate(2); }
       #if E_STEPPERS > 3
         void _planner_refresh_e3_positioning() { _reset_e_acceleration_rate(3); }
-      #endif
-    #endif
+        #if E_STEPPERS > 4
+          void _planner_refresh_e4_positioning() { _reset_e_acceleration_rate(4); }
+        #endif // E_STEPPERS > 4
+      #endif // E_STEPPERS > 3
+    #endif // E_STEPPERS > 2
   #endif
 
   /**
@@ -2411,9 +2417,12 @@ void kill_screen(const char* lcd_msg) {
       #if E_STEPPERS > 2
         MENU_ITEM_EDIT(float3, MSG_VMAX MSG_E3, &planner.max_feedrate_mm_s[E_AXIS + 2], 1, 999);
         #if E_STEPPERS > 3
-          MENU_ITEM_EDIT(float3, MSG_VMAX MSG_E3, &planner.max_feedrate_mm_s[E_AXIS + 3], 1, 999);
-        #endif
-      #endif
+          MENU_ITEM_EDIT(float3, MSG_VMAX MSG_E4, &planner.max_feedrate_mm_s[E_AXIS + 3], 1, 999);
+          #if E_STEPPERS > 4
+            MENU_ITEM_EDIT(float3, MSG_VMAX MSG_E5, &planner.max_feedrate_mm_s[E_AXIS + 4], 1, 999);
+          #endif // E_STEPPERS > 4
+        #endif // E_STEPPERS > 3
+      #endif // E_STEPPERS > 2
     #else
       MENU_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.max_feedrate_mm_s[E_AXIS], 1, 999);
     #endif
@@ -2436,8 +2445,11 @@ void kill_screen(const char* lcd_msg) {
         MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E3, &planner.max_acceleration_mm_per_s2[E_AXIS + 2], 100, 99000, _reset_e2_acceleration_rate);
         #if E_STEPPERS > 3
           MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E4, &planner.max_acceleration_mm_per_s2[E_AXIS + 3], 100, 99000, _reset_e3_acceleration_rate);
-        #endif
-      #endif
+          #if E_STEPPERS > 4
+            MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E5, &planner.max_acceleration_mm_per_s2[E_AXIS + 4], 100, 99000, _reset_e4_acceleration_rate);
+          #endif // E_STEPPERS > 4
+        #endif // E_STEPPERS > 3
+      #endif // E_STEPPERS > 2
     #else
       MENU_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &planner.max_acceleration_mm_per_s2[E_AXIS], 100, 99000, _reset_acceleration_rates);
     #endif
@@ -2460,8 +2472,11 @@ void kill_screen(const char* lcd_msg) {
         MENU_ITEM_EDIT_CALLBACK(float62, MSG_E3STEPS, &planner.axis_steps_per_mm[E_AXIS + 2], 5, 9999, _planner_refresh_e2_positioning);
         #if E_STEPPERS > 3
           MENU_ITEM_EDIT_CALLBACK(float62, MSG_E4STEPS, &planner.axis_steps_per_mm[E_AXIS + 3], 5, 9999, _planner_refresh_e3_positioning);
-        #endif
-      #endif
+          #if E_STEPPERS > 4
+            MENU_ITEM_EDIT_CALLBACK(float62, MSG_E5STEPS, &planner.axis_steps_per_mm[E_AXIS + 4], 5, 9999, _planner_refresh_e4_positioning);
+          #endif // E_STEPPERS > 4
+        #endif // E_STEPPERS > 3
+      #endif // E_STEPPERS > 2
     #else
       MENU_ITEM_EDIT_CALLBACK(float62, MSG_ESTEPS, &planner.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
     #endif