diff --git a/Marlin/src/feature/controllerfan.cpp b/Marlin/src/feature/controllerfan.cpp
index 26560f4cde4def2beb03022a27eb466649740922..52b17ff953c2910fb1663c0dad34db576b13f375 100644
--- a/Marlin/src/feature/controllerfan.cpp
+++ b/Marlin/src/feature/controllerfan.cpp
@@ -53,22 +53,24 @@ void controllerfan_update() {
         #if HAS_Z3_ENABLE
           || Z3_ENABLE_READ == Z_ENABLE_ON
         #endif
-        || E0_ENABLE_READ == E_ENABLE_ON
-        #if E_STEPPERS > 1
-          || E1_ENABLE_READ == E_ENABLE_ON
-          #if E_STEPPERS > 2
-            || E2_ENABLE_READ == E_ENABLE_ON
-            #if E_STEPPERS > 3
-              || E3_ENABLE_READ == E_ENABLE_ON
-              #if E_STEPPERS > 4
-                || E4_ENABLE_READ == E_ENABLE_ON
-                #if E_STEPPERS > 5
-                  || E5_ENABLE_READ == E_ENABLE_ON
-                #endif
-              #endif
-            #endif
-          #endif
-        #endif
+        #if E_STEPPERS
+          || E0_ENABLE_READ == E_ENABLE_ON
+          #if E_STEPPERS > 1
+            || E1_ENABLE_READ == E_ENABLE_ON
+            #if E_STEPPERS > 2
+              || E2_ENABLE_READ == E_ENABLE_ON
+              #if E_STEPPERS > 3
+                || E3_ENABLE_READ == E_ENABLE_ON
+                #if E_STEPPERS > 4
+                  || E4_ENABLE_READ == E_ENABLE_ON
+                  #if E_STEPPERS > 5
+                    || E5_ENABLE_READ == E_ENABLE_ON
+                  #endif // E_STEPPERS > 5
+                #endif // E_STEPPERS > 4
+              #endif // E_STEPPERS > 3
+            #endif // E_STEPPERS > 2
+          #endif // E_STEPPERS > 1
+        #endif // E_STEPPERS
     ) {
       lastMotorOn = ms; //... set time to NOW so the fan will turn on
     }
diff --git a/Marlin/src/feature/power.cpp b/Marlin/src/feature/power.cpp
index fa98948161f91a8d55524d8fe317e8c97bc252dc..a4c32fa473c934173ea4612593a4c38be481cc19 100644
--- a/Marlin/src/feature/power.cpp
+++ b/Marlin/src/feature/power.cpp
@@ -64,22 +64,24 @@ bool Power::is_power_needed() {
       #if HAS_Z2_ENABLE
         || Z2_ENABLE_READ == Z_ENABLE_ON
       #endif
-      || E0_ENABLE_READ == E_ENABLE_ON
-      #if E_STEPPERS > 1
-        || E1_ENABLE_READ == E_ENABLE_ON
-        #if E_STEPPERS > 2
-          || E2_ENABLE_READ == E_ENABLE_ON
-          #if E_STEPPERS > 3
-            || E3_ENABLE_READ == E_ENABLE_ON
-            #if E_STEPPERS > 4
-              || E4_ENABLE_READ == E_ENABLE_ON
-              #if E_STEPPERS > 5
-                || E5_ENABLE_READ == E_ENABLE_ON
-              #endif
-            #endif
-          #endif
-        #endif
-      #endif
+      #if E_STEPPERS
+        || E0_ENABLE_READ == E_ENABLE_ON
+        #if E_STEPPERS > 1
+          || E1_ENABLE_READ == E_ENABLE_ON
+          #if E_STEPPERS > 2
+            || E2_ENABLE_READ == E_ENABLE_ON
+            #if E_STEPPERS > 3
+              || E3_ENABLE_READ == E_ENABLE_ON
+              #if E_STEPPERS > 4
+                || E4_ENABLE_READ == E_ENABLE_ON
+                #if E_STEPPERS > 5
+                  || E5_ENABLE_READ == E_ENABLE_ON
+                #endif // E_STEPPERS > 5
+              #endif // E_STEPPERS > 4
+            #endif // E_STEPPERS > 3
+          #endif // E_STEPPERS > 2
+        #endif // E_STEPPERS > 1
+      #endif // E_STEPPERS
   ) return true;
 
   HOTEND_LOOP() if (thermalManager.degTargetHotend(e) > 0) return true;
diff --git a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
index 2025712490e17d099c234c3c6b0d2bdbf129a407..ce07bb24f0b62c26e77aca8409993e9f946908ac 100644
--- a/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
+++ b/Marlin/src/gcode/feature/trinamic/M911-M914.cpp
@@ -232,28 +232,30 @@
           #endif
           break;
         case E_AXIS: {
-          const int8_t target_extruder = get_target_extruder_from_command();
-          if (target_extruder < 0) return;
-          switch (target_extruder) {
-            #if AXIS_HAS_STEALTHCHOP(E0)
-              case 0: TMC_SET_PWMTHRS_E(0); break;
-            #endif
-            #if E_STEPPERS > 1 && AXIS_HAS_STEALTHCHOP(E1)
-              case 1: TMC_SET_PWMTHRS_E(1); break;
-            #endif
-            #if E_STEPPERS > 2 && AXIS_HAS_STEALTHCHOP(E2)
-              case 2: TMC_SET_PWMTHRS_E(2); break;
-            #endif
-            #if E_STEPPERS > 3 && AXIS_HAS_STEALTHCHOP(E3)
-              case 3: TMC_SET_PWMTHRS_E(3); break;
-            #endif
-            #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4)
-              case 4: TMC_SET_PWMTHRS_E(4); break;
-            #endif
-            #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
-              case 5: TMC_SET_PWMTHRS_E(5); break;
-            #endif
-          }
+          #if E_STEPPERS
+            const int8_t target_extruder = get_target_extruder_from_command();
+            if (target_extruder < 0) return;
+            switch (target_extruder) {
+              #if AXIS_HAS_STEALTHCHOP(E0)
+                case 0: TMC_SET_PWMTHRS_E(0); break;
+              #endif
+              #if E_STEPPERS > 1 && AXIS_HAS_STEALTHCHOP(E1)
+                case 1: TMC_SET_PWMTHRS_E(1); break;
+              #endif
+              #if E_STEPPERS > 2 && AXIS_HAS_STEALTHCHOP(E2)
+                case 2: TMC_SET_PWMTHRS_E(2); break;
+              #endif
+              #if E_STEPPERS > 3 && AXIS_HAS_STEALTHCHOP(E3)
+                case 3: TMC_SET_PWMTHRS_E(3); break;
+              #endif
+              #if E_STEPPERS > 4 && AXIS_HAS_STEALTHCHOP(E4)
+                case 4: TMC_SET_PWMTHRS_E(4); break;
+              #endif
+              #if E_STEPPERS > 5 && AXIS_HAS_STEALTHCHOP(E5)
+                case 5: TMC_SET_PWMTHRS_E(5); break;
+              #endif
+            }
+          #endif // E_STEPPERS
         } break;
       }
     }
@@ -280,7 +282,7 @@
       #if AXIS_HAS_STEALTHCHOP(Z3)
         TMC_SAY_PWMTHRS(Z,Z3);
       #endif
-      #if AXIS_HAS_STEALTHCHOP(E0)
+      #if E_STEPPERS && AXIS_HAS_STEALTHCHOP(E0)
         TMC_SAY_PWMTHRS_E(0);
       #endif
       #if E_STEPPERS > 1 && AXIS_HAS_STEALTHCHOP(E1)
diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index f4b4571548b57169e12007dda91b69286bbe0e15..f30f5a92772d798837797adf69a3b792622efd6c 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -370,6 +370,16 @@
  *
  */
 
+#if EXTRUDERS == 0
+  #undef DISTINCT_E_FACTORS
+  #undef SINGLENOZZLE
+  #undef SWITCHING_EXTRUDER
+  #undef SWITCHING_NOZZLE
+  #undef MIXING_EXTRUDER
+  #undef MK2_MULTIPLEXER
+  #undef PRUSA_MMU2
+#endif
+
 #if ENABLED(SWITCHING_EXTRUDER)   // One stepper for every two EXTRUDERS
   #if EXTRUDERS > 4
     #define E_STEPPERS    3
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index 65e34d94e421ab05d8bbb12dece137f48ea0a69b..f7dd0446c2c357ce97155823435695767a74c2ba 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -43,6 +43,16 @@
   #define NOT_A_PIN 0 // For PINS_DEBUGGING
 #endif
 
+#if EXTRUDERS == 0
+  #define NO_VOLUMETRICS
+  #undef FWRETRACT
+  #undef LIN_ADVANCE
+  #undef ADVANCED_PAUSE_FEATURE
+  #undef DISABLE_INACTIVE_EXTRUDER
+  #undef EXTRUDER_RUNOUT_PREVENT
+  #undef FILAMENT_LOAD_UNLOAD_GCODES
+#endif
+
 #define HAS_CLASSIC_JERK (IS_KINEMATIC || DISABLED(JUNCTION_DEVIATION))
 
 /**
diff --git a/Marlin/src/lcd/menu/menu_advanced.cpp b/Marlin/src/lcd/menu/menu_advanced.cpp
index 87c0337ce1339497fc8bad8b667450e2b181d384..7e1a7112a2bbe5d024bc6608b8c2986fff407182 100644
--- a/Marlin/src/lcd/menu/menu_advanced.cpp
+++ b/Marlin/src/lcd/menu/menu_advanced.cpp
@@ -475,7 +475,7 @@ DEFINE_PIDTEMP_FUNCS(0);
           #endif // E_STEPPERS > 4
         #endif // E_STEPPERS > 3
       #endif // E_STEPPERS > 2
-    #else
+    #elif E_STEPPERS
       MENU_MULTIPLIER_ITEM_EDIT(float3, MSG_VMAX MSG_E, &planner.settings.max_feedrate_mm_s[E_AXIS], 1, 999);
     #endif
 
@@ -525,7 +525,7 @@ DEFINE_PIDTEMP_FUNCS(0);
           #endif // E_STEPPERS > 4
         #endif // E_STEPPERS > 3
       #endif // E_STEPPERS > 2
-    #else
+    #elif E_STEPPERS
       MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(long5, MSG_AMAX MSG_E, &planner.settings.max_acceleration_mm_per_s2[E_AXIS], 100, 99000, _reset_acceleration_rates);
     #endif
 
@@ -588,7 +588,7 @@ DEFINE_PIDTEMP_FUNCS(0);
           #endif // E_STEPPERS > 4
         #endif // E_STEPPERS > 3
       #endif // E_STEPPERS > 2
-    #else
+    #elif E_STEPPERS
       MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(float62, MSG_ESTEPS, &planner.settings.axis_steps_per_mm[E_AXIS], 5, 9999, _planner_refresh_positioning);
     #endif
 
diff --git a/Marlin/src/lcd/menu/menu_filament.cpp b/Marlin/src/lcd/menu/menu_filament.cpp
index b4f7c3b780be291fcdeefe697cd6e09208af6818..80395cda63896f3ca15b31d689fee0ef64bf4081 100644
--- a/Marlin/src/lcd/menu/menu_filament.cpp
+++ b/Marlin/src/lcd/menu/menu_filament.cpp
@@ -104,32 +104,34 @@ void _menu_temp_filament_op(const AdvancedPauseMode mode, const int8_t extruder)
   MENU_MULTIPLIER_ITEM_EDIT_CALLBACK(int3, MSG_PREHEAT_CUSTOM, &thermalManager.target_temperature[_change_filament_temp_extruder], EXTRUDE_MINTEMP, max_temp - 15, _lcd_change_filament_temp_custom_cb);
   END_MENU();
 }
-void menu_temp_e0_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 0); }
-void menu_temp_e0_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 0); }
-void menu_temp_e0_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 0); }
-#if E_STEPPERS > 1
-  void menu_temp_e1_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 1); }
-  void menu_temp_e1_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 1); }
-  void menu_temp_e1_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 1); }
-  #if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
-    void menu_unload_filament_all_temp() { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, -1); }
-  #endif
-  #if E_STEPPERS > 2
-    void menu_temp_e2_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 2); }
-    void menu_temp_e2_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 2); }
-    void menu_temp_e2_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 2); }
-    #if E_STEPPERS > 3
-      void menu_temp_e3_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 3); }
-      void menu_temp_e3_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 3); }
-      void menu_temp_e3_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 3); }
-      #if E_STEPPERS > 4
-        void menu_temp_e4_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 4); }
-        void menu_temp_e4_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 4); }
-        void menu_temp_e4_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 4); }
-      #endif // E_STEPPERS > 4
-    #endif // E_STEPPERS > 3
-  #endif // E_STEPPERS > 2
-#endif // E_STEPPERS > 1
+#if E_STEPPERS
+  void menu_temp_e0_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 0); }
+  void menu_temp_e0_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 0); }
+  void menu_temp_e0_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 0); }
+  #if E_STEPPERS > 1
+    void menu_temp_e1_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 1); }
+    void menu_temp_e1_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 1); }
+    void menu_temp_e1_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 1); }
+    #if ENABLED(FILAMENT_UNLOAD_ALL_EXTRUDERS)
+      void menu_unload_filament_all_temp() { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, -1); }
+    #endif
+    #if E_STEPPERS > 2
+      void menu_temp_e2_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 2); }
+      void menu_temp_e2_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 2); }
+      void menu_temp_e2_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 2); }
+      #if E_STEPPERS > 3
+        void menu_temp_e3_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 3); }
+        void menu_temp_e3_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 3); }
+        void menu_temp_e3_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 3); }
+        #if E_STEPPERS > 4
+          void menu_temp_e4_filament_change()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_PAUSE_PRINT, 4); }
+          void menu_temp_e4_filament_load()    { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_LOAD_FILAMENT, 4); }
+          void menu_temp_e4_filament_unload()  { _menu_temp_filament_op(ADVANCED_PAUSE_MODE_UNLOAD_FILAMENT, 4); }
+        #endif // E_STEPPERS > 4
+      #endif // E_STEPPERS > 3
+    #endif // E_STEPPERS > 2
+  #endif // E_STEPPERS > 1
+#endif // E_STEPPERS
 
 /**
  *
diff --git a/Marlin/src/lcd/menu/menu_tune.cpp b/Marlin/src/lcd/menu/menu_tune.cpp
index 4ccf59a50a79dc7e1f98079f0a21244d1ae5ea2d..e24d239c49d183854bce6fe513ef12feeb3530fe 100644
--- a/Marlin/src/lcd/menu/menu_tune.cpp
+++ b/Marlin/src/lcd/menu/menu_tune.cpp
@@ -43,23 +43,25 @@
 #endif
 
 // Refresh the E factor after changing flow
-void _lcd_refresh_e_factor_0() { planner.refresh_e_factor(0); }
-#if EXTRUDERS > 1
-  void _lcd_refresh_e_factor() { planner.refresh_e_factor(active_extruder); }
-  void _lcd_refresh_e_factor_1() { planner.refresh_e_factor(1); }
-  #if EXTRUDERS > 2
-    void _lcd_refresh_e_factor_2() { planner.refresh_e_factor(2); }
-    #if EXTRUDERS > 3
-      void _lcd_refresh_e_factor_3() { planner.refresh_e_factor(3); }
-      #if EXTRUDERS > 4
-        void _lcd_refresh_e_factor_4() { planner.refresh_e_factor(4); }
-        #if EXTRUDERS > 5
-          void _lcd_refresh_e_factor_5() { planner.refresh_e_factor(5); }
-        #endif // EXTRUDERS > 5
-      #endif // EXTRUDERS > 4
-    #endif // EXTRUDERS > 3
-  #endif // EXTRUDERS > 2
-#endif // EXTRUDERS > 1
+#if EXTRUDERS
+  void _lcd_refresh_e_factor_0() { planner.refresh_e_factor(0); }
+  #if EXTRUDERS > 1
+    void _lcd_refresh_e_factor() { planner.refresh_e_factor(active_extruder); }
+    void _lcd_refresh_e_factor_1() { planner.refresh_e_factor(1); }
+    #if EXTRUDERS > 2
+      void _lcd_refresh_e_factor_2() { planner.refresh_e_factor(2); }
+      #if EXTRUDERS > 3
+        void _lcd_refresh_e_factor_3() { planner.refresh_e_factor(3); }
+        #if EXTRUDERS > 4
+          void _lcd_refresh_e_factor_4() { planner.refresh_e_factor(4); }
+          #if EXTRUDERS > 5
+            void _lcd_refresh_e_factor_5() { planner.refresh_e_factor(5); }
+          #endif // EXTRUDERS > 5
+        #endif // EXTRUDERS > 4
+      #endif // EXTRUDERS > 3
+    #endif // EXTRUDERS > 2
+  #endif // EXTRUDERS > 1
+#endif // EXTRUDERS
 
 #if ENABLED(BABYSTEPPING)
 
@@ -174,7 +176,7 @@ void menu_tune() {
   //
   #if EXTRUDERS == 1
     MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW, &planner.flow_percentage[0], 10, 999, _lcd_refresh_e_factor_0);
-  #else // EXTRUDERS > 1
+  #elif EXTRUDERS
     MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW, &planner.flow_percentage[active_extruder], 10, 999, _lcd_refresh_e_factor);
     #define EDIT_FLOW(N) MENU_ITEM_EDIT_CALLBACK(int3, MSG_FLOW MSG_LCD_N##N, &planner.flow_percentage[N], 10, 999, _lcd_refresh_e_factor_##N)
     EDIT_FLOW(0);
@@ -191,7 +193,7 @@ void menu_tune() {
         #endif // EXTRUDERS > 4
       #endif // EXTRUDERS > 3
     #endif // EXTRUDERS > 2
-  #endif // EXTRUDERS > 1
+  #endif // EXTRUDERS
 
   //
   // Babystep X:
diff --git a/Marlin/src/module/stepper_indirection.h b/Marlin/src/module/stepper_indirection.h
index f0039f145475ec3b9d578eb2a4845fe7392be4a0..eafb0c6eef87351fed368d71a9b9c016881aedff 100644
--- a/Marlin/src/module/stepper_indirection.h
+++ b/Marlin/src/module/stepper_indirection.h
@@ -628,8 +628,12 @@ void reset_stepper_drivers();    // Called by settings.load / settings.reset
     #define   NORM_E_DIR(E)   do{ if (E == 0) { E0_DIR_WRITE(!INVERT_E0_DIR); } else { E1_DIR_WRITE(!INVERT_E1_DIR); } }while(0)
     #define    REV_E_DIR(E)   do{ if (E == 0) { E0_DIR_WRITE( INVERT_E0_DIR); } else { E1_DIR_WRITE( INVERT_E1_DIR); } }while(0)
   #endif
-#else
+#elif E_STEPPERS
   #define E_STEP_WRITE(E,V) E0_STEP_WRITE(V)
   #define   NORM_E_DIR(E)   E0_DIR_WRITE(!INVERT_E0_DIR)
   #define    REV_E_DIR(E)   E0_DIR_WRITE( INVERT_E0_DIR)
+#else
+  #define E_STEP_WRITE(E,V) NOOP
+  #define   NORM_E_DIR(E)   NOOP
+  #define    REV_E_DIR(E)   NOOP
 #endif
diff --git a/Marlin/src/pins/sensitive_pins.h b/Marlin/src/pins/sensitive_pins.h
index a912cf5f5c407840da92b55123cf76c0f3c28d45..e39f880c15625fb96d1e99e2b623700495a4a9ad 100644
--- a/Marlin/src/pins/sensitive_pins.h
+++ b/Marlin/src/pins/sensitive_pins.h
@@ -133,25 +133,28 @@
                  || (ENABLED(SWITCHING_EXTRUDER) && E_STEPPERS > N) \
                  || (DISABLED(SWITCHING_EXTRUDER) && DISABLED(MIXING_EXTRUDER) && EXTRUDERS > N)
 
-#if PIN_EXISTS(E0_CS)
-  #define _E0_CS E0_CS_PIN,
-#else
-  #define _E0_CS
-#endif
-#if PIN_EXISTS(E0_MS1)
-  #define _E0_MS1 E0_MS1_PIN,
-#else
-  #define _E0_MS1
-#endif
-#if PIN_EXISTS(E0_MS2)
-  #define _E0_MS2 E0_MS2_PIN,
-#else
-  #define _E0_MS2
-#endif
-#if PIN_EXISTS(E0_MS3)
-  #define _E0_MS3 E0_MS3_PIN,
-#else
-  #define _E0_MS3
+#define _E0_CS
+#define _E0_MS1
+#define _E0_MS2
+#define _E0_MS3
+
+#if E_NEEDED(0)
+  #if PIN_EXISTS(E0_CS)
+    #undef _E0_CS
+    #define _E0_CS E0_CS_PIN,
+  #endif
+  #if PIN_EXISTS(E0_MS1)
+    #undef _E0_MS1
+    #define _E0_MS1 E0_MS1_PIN,
+  #endif
+  #if PIN_EXISTS(E0_MS2)
+    #undef _E0_MS2
+    #define _E0_MS2 E0_MS2_PIN,
+  #endif
+  #if PIN_EXISTS(E0_MS3)
+    #undef _E0_MS3
+    #define _E0_MS3 E0_MS3_PIN,
+  #endif
 #endif
 
 #define _E1_CS
@@ -278,13 +281,18 @@
 // E Steppers
 //
 
-#define _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN, _E0_CS _E0_MS1 _E0_MS2 _E0_MS3
+#define _E0_PINS
 #define _E1_PINS
 #define _E2_PINS
 #define _E3_PINS
 #define _E4_PINS
 #define _E5_PINS
 
+#if EXTRUDERS
+  #undef _E0_PINS
+  #define _E0_PINS E0_STEP_PIN, E0_DIR_PIN, E0_ENABLE_PIN, _E0_CS _E0_MS1 _E0_MS2 _E0_MS3
+#endif
+
 #if ENABLED(SWITCHING_EXTRUDER)
                       // Tools 0 and 1 use E0
   #if EXTRUDERS > 2   // Tools 2 and 3 use E1
@@ -320,33 +328,37 @@
 // Heaters, Fans, Temp Sensors
 //
 
-#define _H0_PINS HEATER_0_PIN, E0_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_0_PIN),
+#define _H0_PINS
 #define _H1_PINS
 #define _H2_PINS
 #define _H3_PINS
 #define _H4_PINS
 #define _H5_PINS
 
-#if HOTENDS > 1
-  #undef _H1_PINS
-  #define _H1_PINS HEATER_1_PIN, E1_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_1_PIN),
-  #if HOTENDS > 2
-    #undef _H2_PINS
-    #define _H2_PINS HEATER_2_PIN, E2_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_2_PIN),
-    #if HOTENDS > 3
-      #undef _H3_PINS
-      #define _H3_PINS HEATER_3_PIN, E3_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_3_PIN),
-      #if HOTENDS > 4
-        #undef _H4_PINS
-        #define _H4_PINS HEATER_4_PIN, E4_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_4_PIN),
-        #if HOTENDS > 5
-          #undef _H5_PINS
-          #define _H5_PINS HEATER_5_PIN, E5_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_5_PIN),
-        #endif // HOTENDS > 5
-      #endif // HOTENDS > 4
-    #endif // HOTENDS > 3
-  #endif // HOTENDS > 2
-#endif // HOTENDS > 1
+#if HOTENDS
+  #undef _H0_PINS
+  #define _H0_PINS HEATER_0_PIN, E0_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_0_PIN),
+  #if HOTENDS > 1
+    #undef _H1_PINS
+    #define _H1_PINS HEATER_1_PIN, E1_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_1_PIN),
+    #if HOTENDS > 2
+      #undef _H2_PINS
+      #define _H2_PINS HEATER_2_PIN, E2_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_2_PIN),
+      #if HOTENDS > 3
+        #undef _H3_PINS
+        #define _H3_PINS HEATER_3_PIN, E3_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_3_PIN),
+        #if HOTENDS > 4
+          #undef _H4_PINS
+          #define _H4_PINS HEATER_4_PIN, E4_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_4_PIN),
+          #if HOTENDS > 5
+            #undef _H5_PINS
+            #define _H5_PINS HEATER_5_PIN, E5_AUTO_FAN_PIN, analogInputToDigitalPin(TEMP_5_PIN),
+          #endif // HOTENDS > 5
+        #endif // HOTENDS > 4
+      #endif // HOTENDS > 3
+    #endif // HOTENDS > 2
+  #endif // HOTENDS > 1
+#endif // HOTENDS
 
 #define _BED_PINS HEATER_BED_PIN, analogInputToDigitalPin(TEMP_BED_PIN),