From 4e2baeb3e146d60e50367b829a055e7f4198c554 Mon Sep 17 00:00:00 2001
From: Scott Lahteine <github@thinkyhead.com>
Date: Thu, 19 Oct 2017 00:43:07 -0500
Subject: [PATCH] Update indentation, file-wrapping for Marlin 2.0.x

---
 Marlin/src/inc/Conditionals_LCD.h  |  770 ++++++------
 Marlin/src/inc/Conditionals_post.h | 1791 ++++++++++++++--------------
 Marlin/src/inc/SanityCheck.h       |    6 +-
 Marlin/src/inc/Version.h           |    9 +-
 4 files changed, 1294 insertions(+), 1282 deletions(-)

diff --git a/Marlin/src/inc/Conditionals_LCD.h b/Marlin/src/inc/Conditionals_LCD.h
index 3653396bb7..d3d08dd144 100644
--- a/Marlin/src/inc/Conditionals_LCD.h
+++ b/Marlin/src/inc/Conditionals_LCD.h
@@ -28,467 +28,467 @@
 #ifndef CONDITIONALS_LCD_H // Get the LCD defines which are needed first
 #define CONDITIONALS_LCD_H
 
-  #define LCD_HAS_DIRECTIONAL_BUTTONS (BUTTON_EXISTS(UP) || BUTTON_EXISTS(DWN) || BUTTON_EXISTS(LFT) || BUTTON_EXISTS(RT))
+#define LCD_HAS_DIRECTIONAL_BUTTONS (BUTTON_EXISTS(UP) || BUTTON_EXISTS(DWN) || BUTTON_EXISTS(LFT) || BUTTON_EXISTS(RT))
 
-  #if ENABLED(CARTESIO_UI)
+#if ENABLED(CARTESIO_UI)
 
-    #define DOGLCD
-    #define ULTIPANEL
-    #define DEFAULT_LCD_CONTRAST 90
-    #define LCD_CONTRAST_MIN 60
-    #define LCD_CONTRAST_MAX 140
+  #define DOGLCD
+  #define ULTIPANEL
+  #define DEFAULT_LCD_CONTRAST 90
+  #define LCD_CONTRAST_MIN 60
+  #define LCD_CONTRAST_MAX 140
 
-  #elif ENABLED(MAKRPANEL)
+#elif ENABLED(MAKRPANEL)
 
-    #define U8GLIB_ST7565_64128N
-
-  #elif ENABLED(ANET_KEYPAD_LCD)
-
-    #define REPRAPWORLD_KEYPAD
-    #define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
-    #define ADC_KEYPAD
-    #define ADC_KEY_NUM 8
-    #define ULTIPANEL
-
-    // this helps to implement ADC_KEYPAD menus
-    #define ENCODER_PULSES_PER_STEP 1
-    #define ENCODER_STEPS_PER_MENU_ITEM 1
-    #define REVERSE_MENU_DIRECTION
+  #define U8GLIB_ST7565_64128N
 
-  #elif ENABLED(ANET_FULL_GRAPHICS_LCD)
+#elif ENABLED(ANET_KEYPAD_LCD)
 
-    #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+  #define REPRAPWORLD_KEYPAD
+  #define REPRAPWORLD_KEYPAD_MOVE_STEP 10.0
+  #define ADC_KEYPAD
+  #define ADC_KEY_NUM 8
+  #define ULTIPANEL
 
-  #elif ENABLED(BQ_LCD_SMART_CONTROLLER)
+  // this helps to implement ADC_KEYPAD menus
+  #define ENCODER_PULSES_PER_STEP 1
+  #define ENCODER_STEPS_PER_MENU_ITEM 1
+  #define REVERSE_MENU_DIRECTION
 
-    #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+#elif ENABLED(ANET_FULL_GRAPHICS_LCD)
 
-  #elif ENABLED(miniVIKI) || ENABLED(VIKI2) || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) || ENABLED(AZSMZ_12864)
+  #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
 
-    #define ULTRA_LCD  //general LCD support, also 16x2
-    #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
-    #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
-
-    #if ENABLED(miniVIKI)
-      #define LCD_CONTRAST_MIN  75
-      #define LCD_CONTRAST_MAX 115
-      #define DEFAULT_LCD_CONTRAST 95
-      #define U8GLIB_ST7565_64128N
-    #elif ENABLED(VIKI2)
-      #define LCD_CONTRAST_MIN 0
-      #define LCD_CONTRAST_MAX 255
-      #define DEFAULT_LCD_CONTRAST 140
-      #define U8GLIB_ST7565_64128N
-    #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
-      #define LCD_CONTRAST_MIN  90
-      #define LCD_CONTRAST_MAX 130
-      #define DEFAULT_LCD_CONTRAST 110
-      #define U8GLIB_LM6059_AF
-      #define SD_DETECT_INVERTED
-    #elif ENABLED(AZSMZ_12864)
-      #define LCD_CONTRAST_MIN  120
-      #define LCD_CONTRAST_MAX 255
-      #define DEFAULT_LCD_CONTRAST 190
-      #define U8GLIB_ST7565_64128N
-    #endif
+#elif ENABLED(BQ_LCD_SMART_CONTROLLER)
 
-  #elif ENABLED(OLED_PANEL_TINYBOY2)
+  #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
 
-    #define U8GLIB_SSD1306
-    #define ULTIPANEL
-    #define REVERSE_ENCODER_DIRECTION
-    #define REVERSE_MENU_DIRECTION
+#elif ENABLED(miniVIKI) || ENABLED(VIKI2) || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) || ENABLED(AZSMZ_12864)
 
-  #elif ENABLED(RA_CONTROL_PANEL)
+  #define ULTRA_LCD  //general LCD support, also 16x2
+  #define DOGLCD  // Support for SPI LCD 128x64 (Controller ST7565R graphic Display Family)
+  #define ULTIMAKERCONTROLLER //as available from the Ultimaker online store.
 
-    #define LCD_I2C_TYPE_PCA8574
-    #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
-    #define ULTIPANEL
+  #if ENABLED(miniVIKI)
+    #define LCD_CONTRAST_MIN  75
+    #define LCD_CONTRAST_MAX 115
+    #define DEFAULT_LCD_CONTRAST 95
+    #define U8GLIB_ST7565_64128N
+  #elif ENABLED(VIKI2)
+    #define LCD_CONTRAST_MIN 0
+    #define LCD_CONTRAST_MAX 255
+    #define DEFAULT_LCD_CONTRAST 140
+    #define U8GLIB_ST7565_64128N
+  #elif ENABLED(ELB_FULL_GRAPHIC_CONTROLLER)
+    #define LCD_CONTRAST_MIN  90
+    #define LCD_CONTRAST_MAX 130
+    #define DEFAULT_LCD_CONTRAST 110
+    #define U8GLIB_LM6059_AF
+    #define SD_DETECT_INVERTED
+  #elif ENABLED(AZSMZ_12864)
+    #define LCD_CONTRAST_MIN  120
+    #define LCD_CONTRAST_MAX 255
+    #define DEFAULT_LCD_CONTRAST 190
+    #define U8GLIB_ST7565_64128N
+  #endif
 
-  #elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
+#elif ENABLED(OLED_PANEL_TINYBOY2)
 
-    #define DOGLCD
-    #define U8GLIB_ST7920
-    #define ULTIPANEL
+  #define U8GLIB_SSD1306
+  #define ULTIPANEL
+  #define REVERSE_ENCODER_DIRECTION
+  #define REVERSE_MENU_DIRECTION
 
-  #elif ENABLED(CR10_STOCKDISPLAY)
+#elif ENABLED(RA_CONTROL_PANEL)
 
-    #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-    #ifndef ST7920_DELAY_1
-      #define ST7920_DELAY_1 DELAY_2_NOP
-    #endif
-    #ifndef ST7920_DELAY_2
-      #define ST7920_DELAY_2 DELAY_2_NOP
-    #endif
-    #ifndef ST7920_DELAY_3
-      #define ST7920_DELAY_3 DELAY_2_NOP
-    #endif
+  #define LCD_I2C_TYPE_PCA8574
+  #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
+  #define ULTIPANEL
 
-  #elif ENABLED(MKS_12864OLED)
+#elif ENABLED(REPRAPWORLD_GRAPHICAL_LCD)
 
-    #define REPRAP_DISCOUNT_SMART_CONTROLLER
-    #define U8GLIB_SH1106
+  #define DOGLCD
+  #define U8GLIB_ST7920
+  #define ULTIPANEL
 
-  #elif ENABLED(MKS_MINI_12864)
-
-    #define MINIPANEL
+#elif ENABLED(CR10_STOCKDISPLAY)
 
+  #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
+  #ifndef ST7920_DELAY_1
+    #define ST7920_DELAY_1 DELAY_2_NOP
   #endif
-
-  #if ENABLED(MAKRPANEL) || ENABLED(MINIPANEL)
-    #define DOGLCD
-    #define ULTIPANEL
-    #define DEFAULT_LCD_CONTRAST 17
+  #ifndef ST7920_DELAY_2
+    #define ST7920_DELAY_2 DELAY_2_NOP
   #endif
-
-  // Generic support for SSD1306 / SH1106 OLED based LCDs.
-  #if ENABLED(U8GLIB_SSD1306) || ENABLED(U8GLIB_SH1106)
-    #define ULTRA_LCD  //general LCD support, also 16x2
-    #define DOGLCD  // Support for I2C LCD 128x64 (Controller SSD1306 / SH1106 graphic Display Family)
+  #ifndef ST7920_DELAY_3
+    #define ST7920_DELAY_3 DELAY_2_NOP
   #endif
 
-  #if ENABLED(PANEL_ONE) || ENABLED(U8GLIB_SH1106)
+#elif ENABLED(MKS_12864OLED)
 
-    #define ULTIMAKERCONTROLLER
+  #define REPRAP_DISCOUNT_SMART_CONTROLLER
+  #define U8GLIB_SH1106
 
-  #elif ENABLED(MAKEBOARD_MINI_2_LINE_DISPLAY_1602)
+#elif ENABLED(MKS_MINI_12864)
 
-    #define REPRAP_DISCOUNT_SMART_CONTROLLER
-    #define LCD_WIDTH 16
-    #define LCD_HEIGHT 2
+  #define MINIPANEL
 
-  #endif
+#endif
 
-  #if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) || ENABLED(LCD_FOR_MELZI)
-    #define DOGLCD
-    #define U8GLIB_ST7920
-    #define REPRAP_DISCOUNT_SMART_CONTROLLER
-  #endif
+#if ENABLED(MAKRPANEL) || ENABLED(MINIPANEL)
+  #define DOGLCD
+  #define ULTIPANEL
+  #define DEFAULT_LCD_CONTRAST 17
+#endif
 
-  #if ENABLED(ULTIMAKERCONTROLLER)              \
-   || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) \
-   || ENABLED(G3D_PANEL)                        \
-   || ENABLED(RIGIDBOT_PANEL)
-    #define ULTIPANEL
-  #endif
+// Generic support for SSD1306 / SH1106 OLED based LCDs.
+#if ENABLED(U8GLIB_SSD1306) || ENABLED(U8GLIB_SH1106)
+  #define ULTRA_LCD  //general LCD support, also 16x2
+  #define DOGLCD  // Support for I2C LCD 128x64 (Controller SSD1306 / SH1106 graphic Display Family)
+#endif
 
-  #if ENABLED(REPRAPWORLD_KEYPAD)
-    #define NEWPANEL
-    #if ENABLED(ULTIPANEL) && !defined(REPRAPWORLD_KEYPAD_MOVE_STEP)
-      #define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
-    #endif
-  #endif
+#if ENABLED(PANEL_ONE) || ENABLED(U8GLIB_SH1106)
 
-  /**
-   * I2C PANELS
-   */
+  #define ULTIMAKERCONTROLLER
 
-  #if ENABLED(LCD_I2C_SAINSMART_YWROBOT)
+#elif ENABLED(MAKEBOARD_MINI_2_LINE_DISPLAY_1602)
 
-    // Note: This controller requires F.Malpartida's LiquidCrystal_I2C library
-    // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
+  #define REPRAP_DISCOUNT_SMART_CONTROLLER
+  #define LCD_WIDTH 16
+  #define LCD_HEIGHT 2
 
-    #define LCD_I2C_TYPE_PCF8575
-    #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
-    #define ULTIPANEL
+#endif
 
-  #elif ENABLED(LCD_I2C_PANELOLU2)
+#if ENABLED(REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER) || ENABLED(LCD_FOR_MELZI)
+  #define DOGLCD
+  #define U8GLIB_ST7920
+  #define REPRAP_DISCOUNT_SMART_CONTROLLER
+#endif
 
-    // PANELOLU2 LCD with status LEDs, separate encoder and click inputs
+#if ENABLED(ULTIMAKERCONTROLLER)              \
+ || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER) \
+ || ENABLED(G3D_PANEL)                        \
+ || ENABLED(RIGIDBOT_PANEL)
+  #define ULTIPANEL
+#endif
 
-    #define LCD_I2C_TYPE_MCP23017
-    #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
-    #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
-    #define ULTIPANEL
+#if ENABLED(REPRAPWORLD_KEYPAD)
+  #define NEWPANEL
+  #if ENABLED(ULTIPANEL) && !defined(REPRAPWORLD_KEYPAD_MOVE_STEP)
+    #define REPRAPWORLD_KEYPAD_MOVE_STEP 1.0
+  #endif
+#endif
 
-  #elif ENABLED(LCD_I2C_VIKI)
+/**
+ * I2C PANELS
+ */
 
-    /**
-     * Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
-     *
-     * This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
-     * Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
-     * Note: The pause/stop/resume LCD button pin should be connected to the Arduino
-     *       BTN_ENC pin (or set BTN_ENC to -1 if not used)
-     */
-    #define LCD_I2C_TYPE_MCP23017
-    #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
-    #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
-    #define ULTIPANEL
+#if ENABLED(LCD_I2C_SAINSMART_YWROBOT)
 
-    #define ENCODER_FEEDRATE_DEADZONE 4
+  // Note: This controller requires F.Malpartida's LiquidCrystal_I2C library
+  // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/Home
 
-    #define STD_ENCODER_PULSES_PER_STEP 1
-    #define STD_ENCODER_STEPS_PER_MENU_ITEM 2
+  #define LCD_I2C_TYPE_PCF8575
+  #define LCD_I2C_ADDRESS 0x27   // I2C Address of the port expander
+  #define ULTIPANEL
 
-  #elif ENABLED(G3D_PANEL)
+#elif ENABLED(LCD_I2C_PANELOLU2)
 
-    #define STD_ENCODER_PULSES_PER_STEP 2
-    #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+  // PANELOLU2 LCD with status LEDs, separate encoder and click inputs
 
-  #elif ENABLED(miniVIKI) || ENABLED(VIKI2) \
-     || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
-     || ENABLED(AZSMZ_12864) \
-     || ENABLED(OLED_PANEL_TINYBOY2) \
-     || ENABLED(BQ_LCD_SMART_CONTROLLER) \
-     || ENABLED(LCD_I2C_PANELOLU2) \
-     || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
-    #define STD_ENCODER_PULSES_PER_STEP 4
-    #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
-  #endif
+  #define LCD_I2C_TYPE_MCP23017
+  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
+  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD
+  #define ULTIPANEL
 
-  #ifndef STD_ENCODER_PULSES_PER_STEP
-    #define STD_ENCODER_PULSES_PER_STEP 5
-  #endif
-  #ifndef STD_ENCODER_STEPS_PER_MENU_ITEM
-    #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+#elif ENABLED(LCD_I2C_VIKI)
+
+  /**
+   * Panucatt VIKI LCD with status LEDs, integrated click & L/R/U/P buttons, separate encoder inputs
+   *
+   * This uses the LiquidTWI2 library v1.2.3 or later ( https://github.com/lincomatic/LiquidTWI2 )
+   * Make sure the LiquidTWI2 directory is placed in the Arduino or Sketchbook libraries subdirectory.
+   * Note: The pause/stop/resume LCD button pin should be connected to the Arduino
+   *       BTN_ENC pin (or set BTN_ENC to -1 if not used)
+   */
+  #define LCD_I2C_TYPE_MCP23017
+  #define LCD_I2C_ADDRESS 0x20 // I2C Address of the port expander
+  #define LCD_USE_I2C_BUZZER //comment out to disable buzzer on LCD (requires LiquidTWI2 v1.2.3 or later)
+  #define ULTIPANEL
+
+  #define ENCODER_FEEDRATE_DEADZONE 4
+
+  #define STD_ENCODER_PULSES_PER_STEP 1
+  #define STD_ENCODER_STEPS_PER_MENU_ITEM 2
+
+#elif ENABLED(G3D_PANEL)
+
+  #define STD_ENCODER_PULSES_PER_STEP 2
+  #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+
+#elif ENABLED(miniVIKI) || ENABLED(VIKI2) \
+   || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
+   || ENABLED(AZSMZ_12864) \
+   || ENABLED(OLED_PANEL_TINYBOY2) \
+   || ENABLED(BQ_LCD_SMART_CONTROLLER) \
+   || ENABLED(LCD_I2C_PANELOLU2) \
+   || ENABLED(REPRAP_DISCOUNT_SMART_CONTROLLER)
+  #define STD_ENCODER_PULSES_PER_STEP 4
+  #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+#endif
+
+#ifndef STD_ENCODER_PULSES_PER_STEP
+  #define STD_ENCODER_PULSES_PER_STEP 5
+#endif
+#ifndef STD_ENCODER_STEPS_PER_MENU_ITEM
+  #define STD_ENCODER_STEPS_PER_MENU_ITEM 1
+#endif
+#ifndef ENCODER_PULSES_PER_STEP
+  #define ENCODER_PULSES_PER_STEP STD_ENCODER_PULSES_PER_STEP
+#endif
+#ifndef ENCODER_STEPS_PER_MENU_ITEM
+  #define ENCODER_STEPS_PER_MENU_ITEM STD_ENCODER_STEPS_PER_MENU_ITEM
+#endif
+#ifndef ENCODER_FEEDRATE_DEADZONE
+  #define ENCODER_FEEDRATE_DEADZONE 6
+#endif
+
+// Shift register panels
+// ---------------------
+// 2 wire Non-latching LCD SR from:
+// https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
+
+#if ENABLED(SAV_3DLCD)
+  #define SR_LCD_2W_NL    // Non latching 2 wire shift register
+  #define ULTIPANEL
+#endif
+
+#if ENABLED(DOGLCD) // Change number of lines to match the DOG graphic display
+  #ifndef LCD_WIDTH
+    #define LCD_WIDTH 22
   #endif
-  #ifndef ENCODER_PULSES_PER_STEP
-    #define ENCODER_PULSES_PER_STEP STD_ENCODER_PULSES_PER_STEP
+  #ifndef LCD_HEIGHT
+    #define LCD_HEIGHT 5
   #endif
-  #ifndef ENCODER_STEPS_PER_MENU_ITEM
-    #define ENCODER_STEPS_PER_MENU_ITEM STD_ENCODER_STEPS_PER_MENU_ITEM
+#endif
+
+#if ENABLED(ULTIPANEL)
+  #define NEWPANEL  // Disable this if you actually have no click-encoder panel
+  #define ULTRA_LCD
+  #ifndef LCD_WIDTH
+    #define LCD_WIDTH 20
   #endif
-  #ifndef ENCODER_FEEDRATE_DEADZONE
-    #define ENCODER_FEEDRATE_DEADZONE 6
+  #ifndef LCD_HEIGHT
+    #define LCD_HEIGHT 4
   #endif
-
-  // Shift register panels
-  // ---------------------
-  // 2 wire Non-latching LCD SR from:
-  // https://bitbucket.org/fmalpartida/new-liquidcrystal/wiki/schematics#!shiftregister-connection
-
-  #if ENABLED(SAV_3DLCD)
-    #define SR_LCD_2W_NL    // Non latching 2 wire shift register
-    #define ULTIPANEL
+#elif ENABLED(ULTRA_LCD)  // no panel but just LCD
+  #ifndef LCD_WIDTH
+    #define LCD_WIDTH 16
   #endif
-
-  #if ENABLED(DOGLCD) // Change number of lines to match the DOG graphic display
-    #ifndef LCD_WIDTH
-      #define LCD_WIDTH 22
-    #endif
-    #ifndef LCD_HEIGHT
-      #define LCD_HEIGHT 5
-    #endif
+  #ifndef LCD_HEIGHT
+    #define LCD_HEIGHT 2
   #endif
+#endif
+
+#if ENABLED(DOGLCD)
+  /* Custom characters defined in font dogm_font_data_Marlin_symbols.h / Marlin_symbols.fon */
+  // \x00 intentionally skipped to avoid problems in strings
+  #define LCD_STR_REFRESH     "\x01"
+  #define LCD_STR_FOLDER      "\x02"
+  #define LCD_STR_ARROW_RIGHT "\x03"
+  #define LCD_STR_UPLEVEL     "\x04"
+  #define LCD_STR_CLOCK       "\x05"
+  #define LCD_STR_FEEDRATE    "\x06"
+  #define LCD_STR_BEDTEMP     "\x07"
+  #define LCD_STR_THERMOMETER "\x08"
+  #define LCD_STR_DEGREE      "\x09"
+
+  #define LCD_STR_SPECIAL_MAX '\x09'
+  // Maximum here is 0x1F because 0x20 is ' ' (space) and the normal charsets begin.
+  // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
+
+  // Symbol characters
+  #define LCD_STR_FILAM_DIA   "\xf8"
+  #define LCD_STR_FILAM_MUL   "\xa4"
+#else
+  /* Custom characters defined in the first 8 characters of the LCD */
+  #define LCD_BEDTEMP_CHAR     0x00  // Print only as a char. This will have 'unexpected' results when used in a string!
+  #define LCD_DEGREE_CHAR      0x01
+  #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
+  #define LCD_UPLEVEL_CHAR     0x03
+  #define LCD_STR_REFRESH     "\x04"
+  #define LCD_STR_FOLDER      "\x05"
+  #define LCD_FEEDRATE_CHAR    0x06
+  #define LCD_CLOCK_CHAR       0x07
+  #define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
+#endif
 
-  #if ENABLED(ULTIPANEL)
-    #define NEWPANEL  // Disable this if you actually have no click-encoder panel
-    #define ULTRA_LCD
-    #ifndef LCD_WIDTH
-      #define LCD_WIDTH 20
-    #endif
-    #ifndef LCD_HEIGHT
-      #define LCD_HEIGHT 4
+/**
+ * Default LCD contrast for dogm-like LCD displays
+ */
+#if ENABLED(DOGLCD)
+
+  #define HAS_LCD_CONTRAST ( \
+      ENABLED(MAKRPANEL) \
+   || ENABLED(CARTESIO_UI) \
+   || ENABLED(VIKI2) \
+   || ENABLED(AZSMZ_12864) \
+   || ENABLED(miniVIKI) \
+   || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
+  )
+
+  #if HAS_LCD_CONTRAST
+    #ifndef LCD_CONTRAST_MIN
+      #define LCD_CONTRAST_MIN 0
     #endif
-  #elif ENABLED(ULTRA_LCD)  // no panel but just LCD
-    #ifndef LCD_WIDTH
-      #define LCD_WIDTH 16
+    #ifndef LCD_CONTRAST_MAX
+      #define LCD_CONTRAST_MAX 63
     #endif
-    #ifndef LCD_HEIGHT
-      #define LCD_HEIGHT 2
+    #ifndef DEFAULT_LCD_CONTRAST
+      #define DEFAULT_LCD_CONTRAST 32
     #endif
   #endif
+#endif
 
-  #if ENABLED(DOGLCD)
-    /* Custom characters defined in font dogm_font_data_Marlin_symbols.h / Marlin_symbols.fon */
-    // \x00 intentionally skipped to avoid problems in strings
-    #define LCD_STR_REFRESH     "\x01"
-    #define LCD_STR_FOLDER      "\x02"
-    #define LCD_STR_ARROW_RIGHT "\x03"
-    #define LCD_STR_UPLEVEL     "\x04"
-    #define LCD_STR_CLOCK       "\x05"
-    #define LCD_STR_FEEDRATE    "\x06"
-    #define LCD_STR_BEDTEMP     "\x07"
-    #define LCD_STR_THERMOMETER "\x08"
-    #define LCD_STR_DEGREE      "\x09"
-
-    #define LCD_STR_SPECIAL_MAX '\x09'
-    // Maximum here is 0x1F because 0x20 is ' ' (space) and the normal charsets begin.
-    // Better stay below 0x10 because DISPLAY_CHARSET_HD44780_WESTERN begins here.
-
-    // Symbol characters
-    #define LCD_STR_FILAM_DIA   "\xf8"
-    #define LCD_STR_FILAM_MUL   "\xa4"
-  #else
-    /* Custom characters defined in the first 8 characters of the LCD */
-    #define LCD_BEDTEMP_CHAR     0x00  // Print only as a char. This will have 'unexpected' results when used in a string!
-    #define LCD_DEGREE_CHAR      0x01
-    #define LCD_STR_THERMOMETER "\x02" // Still used with string concatenation
-    #define LCD_UPLEVEL_CHAR     0x03
-    #define LCD_STR_REFRESH     "\x04"
-    #define LCD_STR_FOLDER      "\x05"
-    #define LCD_FEEDRATE_CHAR    0x06
-    #define LCD_CLOCK_CHAR       0x07
-    #define LCD_STR_ARROW_RIGHT ">"  /* from the default character set */
-  #endif
-
-  /**
-   * Default LCD contrast for dogm-like LCD displays
-   */
-  #if ENABLED(DOGLCD)
-
-    #define HAS_LCD_CONTRAST ( \
-        ENABLED(MAKRPANEL) \
-     || ENABLED(CARTESIO_UI) \
-     || ENABLED(VIKI2) \
-     || ENABLED(AZSMZ_12864) \
-     || ENABLED(miniVIKI) \
-     || ENABLED(ELB_FULL_GRAPHIC_CONTROLLER) \
-    )
-
-    #if HAS_LCD_CONTRAST
-      #ifndef LCD_CONTRAST_MIN
-        #define LCD_CONTRAST_MIN 0
-      #endif
-      #ifndef LCD_CONTRAST_MAX
-        #define LCD_CONTRAST_MAX 63
-      #endif
-      #ifndef DEFAULT_LCD_CONTRAST
-        #define DEFAULT_LCD_CONTRAST 32
-      #endif
-    #endif
-  #endif
+// Boot screens
+#if DISABLED(ULTRA_LCD)
+  #undef SHOW_BOOTSCREEN
+#elif !defined(BOOTSCREEN_TIMEOUT)
+  #define BOOTSCREEN_TIMEOUT 2500
+#endif
 
-  // Boot screens
-  #if DISABLED(ULTRA_LCD)
-    #undef SHOW_BOOTSCREEN
-  #elif !defined(BOOTSCREEN_TIMEOUT)
-    #define BOOTSCREEN_TIMEOUT 2500
-  #endif
+#define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST)
 
-  #define HAS_DEBUG_MENU ENABLED(LCD_PROGRESS_BAR_TEST)
+// MK2 Multiplexer forces SINGLENOZZLE to be enabled
+#if ENABLED(MK2_MULTIPLEXER)
+  #define SINGLENOZZLE
+#endif
 
-  // MK2 Multiplexer forces SINGLENOZZLE to be enabled
-  #if ENABLED(MK2_MULTIPLEXER)
-    #define SINGLENOZZLE
+/**
+ * Extruders have some combination of stepper motors and hotends
+ * so we separate these concepts into the defines:
+ *
+ *  EXTRUDERS    - Number of Selectable Tools
+ *  HOTENDS      - Number of hotends, whether connected or separate
+ *  E_STEPPERS   - Number of actual E stepper motors
+ *  E_MANUAL     - Number of E steppers for LCD move options
+ *  TOOL_E_INDEX - Index to use when getting/setting the tool state
+ *
+ */
+#if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER)         // One hotend, one thermistor, no XY offset
+  #define HOTENDS       1
+  #undef TEMP_SENSOR_1_AS_REDUNDANT
+  #undef HOTEND_OFFSET_X
+  #undef HOTEND_OFFSET_Y
+#else                                                         // Two hotends
+  #define HOTENDS       EXTRUDERS
+  #if ENABLED(SWITCHING_NOZZLE) && !defined(HOTEND_OFFSET_Z)
+    #define HOTEND_OFFSET_Z { 0 }
   #endif
+#endif
 
-  /**
-   * Extruders have some combination of stepper motors and hotends
-   * so we separate these concepts into the defines:
-   *
-   *  EXTRUDERS    - Number of Selectable Tools
-   *  HOTENDS      - Number of hotends, whether connected or separate
-   *  E_STEPPERS   - Number of actual E stepper motors
-   *  E_MANUAL     - Number of E steppers for LCD move options
-   *  TOOL_E_INDEX - Index to use when getting/setting the tool state
-   *
-   */
-  #if ENABLED(SINGLENOZZLE) || ENABLED(MIXING_EXTRUDER)         // One hotend, one thermistor, no XY offset
-    #define HOTENDS       1
-    #undef TEMP_SENSOR_1_AS_REDUNDANT
-    #undef HOTEND_OFFSET_X
-    #undef HOTEND_OFFSET_Y
-  #else                                                         // Two hotends
-    #define HOTENDS       EXTRUDERS
-    #if ENABLED(SWITCHING_NOZZLE) && !defined(HOTEND_OFFSET_Z)
-      #define HOTEND_OFFSET_Z { 0 }
-    #endif
-  #endif
+#define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
 
-  #define HOTEND_LOOP() for (int8_t e = 0; e < HOTENDS; e++)
+#if HOTENDS == 1
+  #define HOTEND_INDEX  0
+#else
+  #define HOTEND_INDEX  e
+#endif
 
-  #if HOTENDS == 1
-    #define HOTEND_INDEX  0
+#if ENABLED(SWITCHING_EXTRUDER) || ENABLED(MIXING_EXTRUDER)   // Unified E axis
+  #if ENABLED(MIXING_EXTRUDER)
+    #define E_STEPPERS  MIXING_STEPPERS
   #else
-    #define HOTEND_INDEX  e
+    #define E_STEPPERS  1                                     // One E stepper
   #endif
+  #define E_MANUAL      1
+  #define TOOL_E_INDEX  0
+#else
+  #define E_STEPPERS    EXTRUDERS
+  #define E_MANUAL      EXTRUDERS
+  #define TOOL_E_INDEX  current_block->active_extruder
+#endif
 
-  #if ENABLED(SWITCHING_EXTRUDER) || ENABLED(MIXING_EXTRUDER)   // Unified E axis
-    #if ENABLED(MIXING_EXTRUDER)
-      #define E_STEPPERS  MIXING_STEPPERS
-    #else
-      #define E_STEPPERS  1                                     // One E stepper
-    #endif
-    #define E_MANUAL      1
-    #define TOOL_E_INDEX  0
-  #else
-    #define E_STEPPERS    EXTRUDERS
-    #define E_MANUAL      EXTRUDERS
-    #define TOOL_E_INDEX  current_block->active_extruder
-  #endif
+/**
+ * DISTINCT_E_FACTORS affects how some E factors are accessed
+ */
+#if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
+  #define XYZE_N (XYZ + E_STEPPERS)
+  #define E_AXIS_N (E_AXIS + extruder)
+#else
+  #undef DISTINCT_E_FACTORS
+  #define XYZE_N XYZE
+  #define E_AXIS_N E_AXIS
+#endif
 
-  /**
-   * DISTINCT_E_FACTORS affects how some E factors are accessed
-   */
-  #if ENABLED(DISTINCT_E_FACTORS) && E_STEPPERS > 1
-    #define XYZE_N (XYZ + E_STEPPERS)
-    #define E_AXIS_N (E_AXIS + extruder)
-  #else
-    #undef DISTINCT_E_FACTORS
-    #define XYZE_N XYZE
-    #define E_AXIS_N E_AXIS
+/**
+ * The BLTouch Probe emulates a servo probe
+ * and uses "special" angles for its state.
+ */
+#if ENABLED(BLTOUCH)
+  #ifndef Z_ENDSTOP_SERVO_NR
+    #define Z_ENDSTOP_SERVO_NR 0
   #endif
-
-  /**
-   * The BLTouch Probe emulates a servo probe
-   * and uses "special" angles for its state.
-   */
-  #if ENABLED(BLTOUCH)
-    #ifndef Z_ENDSTOP_SERVO_NR
-      #define Z_ENDSTOP_SERVO_NR 0
-    #endif
-    #ifndef NUM_SERVOS
-      #define NUM_SERVOS (Z_ENDSTOP_SERVO_NR + 1)
-    #endif
-    #undef DEACTIVATE_SERVOS_AFTER_MOVE
-    #if NUM_SERVOS == 1
-      #undef SERVO_DELAY
-      #define SERVO_DELAY { 50 }
-    #endif
-    #ifndef BLTOUCH_DELAY
-      #define BLTOUCH_DELAY 375
-    #endif
-    #undef Z_SERVO_ANGLES
-    #define Z_SERVO_ANGLES { BLTOUCH_DEPLOY, BLTOUCH_STOW }
-
-    #define BLTOUCH_DEPLOY    10
-    #define BLTOUCH_STOW      90
-    #define BLTOUCH_SELFTEST 120
-    #define BLTOUCH_RESET    160
-    #define _TEST_BLTOUCH(P) (READ(P##_PIN) != P##_ENDSTOP_INVERTING)
-
-    // Always disable probe pin inverting for BLTouch
-    #undef Z_MIN_PROBE_ENDSTOP_INVERTING
-    #define Z_MIN_PROBE_ENDSTOP_INVERTING false
-
-    #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
-      #undef Z_MIN_ENDSTOP_INVERTING
-      #define Z_MIN_ENDSTOP_INVERTING false
-      #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN)
-    #else
-      #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN_PROBE)
-    #endif
+  #ifndef NUM_SERVOS
+    #define NUM_SERVOS (Z_ENDSTOP_SERVO_NR + 1)
   #endif
-
-  /**
-   * Set a flag for a servo probe
-   */
-  #define HAS_Z_SERVO_ENDSTOP (defined(Z_ENDSTOP_SERVO_NR) && Z_ENDSTOP_SERVO_NR >= 0)
-
-  /**
-   * UBL has its own manual probing, so this just causes trouble.
-   */
-  #if ENABLED(AUTO_BED_LEVELING_UBL)
-    #undef PROBE_MANUALLY
+  #undef DEACTIVATE_SERVOS_AFTER_MOVE
+  #if NUM_SERVOS == 1
+    #undef SERVO_DELAY
+    #define SERVO_DELAY { 50 }
+  #endif
+  #ifndef BLTOUCH_DELAY
+    #define BLTOUCH_DELAY 375
   #endif
+  #undef Z_SERVO_ANGLES
+  #define Z_SERVO_ANGLES { BLTOUCH_DEPLOY, BLTOUCH_STOW }
+
+  #define BLTOUCH_DEPLOY    10
+  #define BLTOUCH_STOW      90
+  #define BLTOUCH_SELFTEST 120
+  #define BLTOUCH_RESET    160
+  #define _TEST_BLTOUCH(P) (READ(P##_PIN) != P##_ENDSTOP_INVERTING)
+
+  // Always disable probe pin inverting for BLTouch
+  #undef Z_MIN_PROBE_ENDSTOP_INVERTING
+  #define Z_MIN_PROBE_ENDSTOP_INVERTING false
+
+  #if ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)
+    #undef Z_MIN_ENDSTOP_INVERTING
+    #define Z_MIN_ENDSTOP_INVERTING false
+    #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN)
+  #else
+    #define TEST_BLTOUCH() _TEST_BLTOUCH(Z_MIN_PROBE)
+  #endif
+#endif
 
-  /**
-   * Set a flag for any enabled probe
-   */
-  #define PROBE_SELECTED (ENABLED(PROBE_MANUALLY) || ENABLED(FIX_MOUNTED_PROBE) || ENABLED(Z_PROBE_ALLEN_KEY) || HAS_Z_SERVO_ENDSTOP || ENABLED(Z_PROBE_SLED) || ENABLED(SOLENOID_PROBE))
+/**
+ * Set a flag for a servo probe
+ */
+#define HAS_Z_SERVO_ENDSTOP (defined(Z_ENDSTOP_SERVO_NR) && Z_ENDSTOP_SERVO_NR >= 0)
 
-  /**
-   * Clear probe pin settings when no probe is selected
-   */
-  #if !PROBE_SELECTED || ENABLED(PROBE_MANUALLY)
-    #undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
-    #undef Z_MIN_PROBE_ENDSTOP
-  #endif
+/**
+ * UBL has its own manual probing, so this just causes trouble.
+ */
+#if ENABLED(AUTO_BED_LEVELING_UBL)
+  #undef PROBE_MANUALLY
+#endif
+
+/**
+ * Set a flag for any enabled probe
+ */
+#define PROBE_SELECTED (ENABLED(PROBE_MANUALLY) || ENABLED(FIX_MOUNTED_PROBE) || ENABLED(Z_PROBE_ALLEN_KEY) || HAS_Z_SERVO_ENDSTOP || ENABLED(Z_PROBE_SLED) || ENABLED(SOLENOID_PROBE))
 
-  #define HAS_SOFTWARE_ENDSTOPS (ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS))
-  #define HAS_RESUME_CONTINUE (ENABLED(NEWPANEL) || ENABLED(EMERGENCY_PARSER))
-  #define HAS_COLOR_LEDS (ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED))
+/**
+ * Clear probe pin settings when no probe is selected
+ */
+#if !PROBE_SELECTED || ENABLED(PROBE_MANUALLY)
+  #undef Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
+  #undef Z_MIN_PROBE_ENDSTOP
+#endif
+
+#define HAS_SOFTWARE_ENDSTOPS (ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS))
+#define HAS_RESUME_CONTINUE (ENABLED(NEWPANEL) || ENABLED(EMERGENCY_PARSER))
+#define HAS_COLOR_LEDS (ENABLED(BLINKM) || ENABLED(RGB_LED) || ENABLED(RGBW_LED) || ENABLED(PCA9632) || ENABLED(NEOPIXEL_LED))
 
 #endif // CONDITIONALS_LCD_H
diff --git a/Marlin/src/inc/Conditionals_post.h b/Marlin/src/inc/Conditionals_post.h
index b9f5e7db15..b37cc5792b 100644
--- a/Marlin/src/inc/Conditionals_post.h
+++ b/Marlin/src/inc/Conditionals_post.h
@@ -28,1001 +28,1002 @@
 #ifndef CONDITIONALS_POST_H
 #define CONDITIONALS_POST_H
 
-  #define AVR_ATmega2560_FAMILY_PLUS_70 ( \
-       MB(BQ_ZUM_MEGA_3D)                 \
-    || MB(MIGHTYBOARD_REVE)               \
-    || MB(MINIRAMBO)                      \
-    || MB(SCOOVO_X9H)                     \
-  )
+#define AVR_ATmega2560_FAMILY_PLUS_70 ( \
+     MB(BQ_ZUM_MEGA_3D)                 \
+  || MB(MIGHTYBOARD_REVE)               \
+  || MB(MINIRAMBO)                      \
+  || MB(SCOOVO_X9H)                     \
+)
 
-  #define IS_SCARA (ENABLED(MORGAN_SCARA) || ENABLED(MAKERARM_SCARA))
-  #define IS_KINEMATIC (ENABLED(DELTA) || IS_SCARA)
-  #define IS_CARTESIAN !IS_KINEMATIC
+#define IS_SCARA (ENABLED(MORGAN_SCARA) || ENABLED(MAKERARM_SCARA))
+#define IS_KINEMATIC (ENABLED(DELTA) || IS_SCARA)
+#define IS_CARTESIAN !IS_KINEMATIC
 
-  /**
-   * Axis lengths and center
-   */
-  #define X_MAX_LENGTH (X_MAX_POS - (X_MIN_POS))
-  #define Y_MAX_LENGTH (Y_MAX_POS - (Y_MIN_POS))
-  #define Z_MAX_LENGTH (Z_MAX_POS - (Z_MIN_POS))
-
-  // Defined only if the sanity-check is bypassed
-  #ifndef X_BED_SIZE
-    #define X_BED_SIZE X_MAX_LENGTH
-  #endif
-  #ifndef Y_BED_SIZE
-    #define Y_BED_SIZE Y_MAX_LENGTH
-  #endif
-
-  // Require 0,0 bed center for Delta and SCARA
-  #if IS_KINEMATIC
-    #define BED_CENTER_AT_0_0
-  #endif
+/**
+ * Axis lengths and center
+ */
+#define X_MAX_LENGTH (X_MAX_POS - (X_MIN_POS))
+#define Y_MAX_LENGTH (Y_MAX_POS - (Y_MIN_POS))
+#define Z_MAX_LENGTH (Z_MAX_POS - (Z_MIN_POS))
+
+// Defined only if the sanity-check is bypassed
+#ifndef X_BED_SIZE
+  #define X_BED_SIZE X_MAX_LENGTH
+#endif
+#ifndef Y_BED_SIZE
+  #define Y_BED_SIZE Y_MAX_LENGTH
+#endif
+
+// Require 0,0 bed center for Delta and SCARA
+#if IS_KINEMATIC
+  #define BED_CENTER_AT_0_0
+#endif
+
+// Define center values for future use
+#if ENABLED(BED_CENTER_AT_0_0)
+  #define X_CENTER 0
+  #define Y_CENTER 0
+#else
+  #define X_CENTER ((X_BED_SIZE) / 2)
+  #define Y_CENTER ((Y_BED_SIZE) / 2)
+#endif
+#define Z_CENTER ((Z_MIN_POS + Z_MAX_POS) / 2)
+
+// Get the linear boundaries of the bed
+#define X_MIN_BED (X_CENTER - (X_BED_SIZE) / 2)
+#define X_MAX_BED (X_CENTER + (X_BED_SIZE) / 2)
+#define Y_MIN_BED (Y_CENTER - (Y_BED_SIZE) / 2)
+#define Y_MAX_BED (Y_CENTER + (Y_BED_SIZE) / 2)
 
-  // Define center values for future use
-  #if ENABLED(BED_CENTER_AT_0_0)
-    #define X_CENTER 0
-    #define Y_CENTER 0
+/**
+ * CoreXY, CoreXZ, and CoreYZ - and their reverse
+ */
+#define CORE_IS_XY (ENABLED(COREXY) || ENABLED(COREYX))
+#define CORE_IS_XZ (ENABLED(COREXZ) || ENABLED(COREZX))
+#define CORE_IS_YZ (ENABLED(COREYZ) || ENABLED(COREZY))
+#define IS_CORE (CORE_IS_XY || CORE_IS_XZ || CORE_IS_YZ)
+#if IS_CORE
+  #if CORE_IS_XY
+    #define CORE_AXIS_1 A_AXIS
+    #define CORE_AXIS_2 B_AXIS
+    #define NORMAL_AXIS Z_AXIS
+  #elif CORE_IS_XZ
+    #define CORE_AXIS_1 A_AXIS
+    #define NORMAL_AXIS Y_AXIS
+    #define CORE_AXIS_2 C_AXIS
+  #elif CORE_IS_YZ
+    #define NORMAL_AXIS X_AXIS
+    #define CORE_AXIS_1 B_AXIS
+    #define CORE_AXIS_2 C_AXIS
+  #endif
+  #if (ENABLED(COREYX) || ENABLED(COREZX) || ENABLED(COREZY))
+    #define CORESIGN(n) (-(n))
   #else
-    #define X_CENTER ((X_BED_SIZE) / 2)
-    #define Y_CENTER ((Y_BED_SIZE) / 2)
+    #define CORESIGN(n) (n)
   #endif
-  #define Z_CENTER ((Z_MIN_POS + Z_MAX_POS) / 2)
-
-  // Get the linear boundaries of the bed
-  #define X_MIN_BED (X_CENTER - (X_BED_SIZE) / 2)
-  #define X_MAX_BED (X_CENTER + (X_BED_SIZE) / 2)
-  #define Y_MIN_BED (Y_CENTER - (Y_BED_SIZE) / 2)
-  #define Y_MAX_BED (Y_CENTER + (Y_BED_SIZE) / 2)
+#endif
 
-  /**
-   * CoreXY, CoreXZ, and CoreYZ - and their reverse
-   */
-  #define CORE_IS_XY (ENABLED(COREXY) || ENABLED(COREYX))
-  #define CORE_IS_XZ (ENABLED(COREXZ) || ENABLED(COREZX))
-  #define CORE_IS_YZ (ENABLED(COREYZ) || ENABLED(COREZY))
-  #define IS_CORE (CORE_IS_XY || CORE_IS_XZ || CORE_IS_YZ)
-  #if IS_CORE
-    #if CORE_IS_XY
-      #define CORE_AXIS_1 A_AXIS
-      #define CORE_AXIS_2 B_AXIS
-      #define NORMAL_AXIS Z_AXIS
-    #elif CORE_IS_XZ
-      #define CORE_AXIS_1 A_AXIS
-      #define NORMAL_AXIS Y_AXIS
-      #define CORE_AXIS_2 C_AXIS
-    #elif CORE_IS_YZ
-      #define NORMAL_AXIS X_AXIS
-      #define CORE_AXIS_1 B_AXIS
-      #define CORE_AXIS_2 C_AXIS
-    #endif
-    #if (ENABLED(COREYX) || ENABLED(COREZX) || ENABLED(COREZY))
-      #define CORESIGN(n) (-(n))
-    #else
-      #define CORESIGN(n) (n)
-    #endif
-  #endif
+/**
+ * No adjustable bed on non-cartesians
+ */
+#if IS_KINEMATIC
+  #undef LEVEL_BED_CORNERS
+#endif
 
-  /**
-   * No adjustable bed on non-cartesians
-   */
-  #if IS_KINEMATIC
-    #undef LEVEL_BED_CORNERS
-  #endif
+/**
+ * SCARA cannot use SLOWDOWN and requires QUICKHOME
+ */
+#if IS_SCARA
+  #undef SLOWDOWN
+  #define QUICK_HOME
+#endif
 
-  /**
-   * SCARA cannot use SLOWDOWN and requires QUICKHOME
-   */
-  #if IS_SCARA
-    #undef SLOWDOWN
-    #define QUICK_HOME
+/**
+ * Set the home position based on settings or manual overrides
+ */
+#ifdef MANUAL_X_HOME_POS
+  #define X_HOME_POS MANUAL_X_HOME_POS
+#elif ENABLED(BED_CENTER_AT_0_0)
+  #if ENABLED(DELTA)
+    #define X_HOME_POS 0
+  #else
+    #define X_HOME_POS ((X_BED_SIZE) * (X_HOME_DIR) * 0.5)
   #endif
-
-  /**
-   * Set the home position based on settings or manual overrides
-   */
-  #ifdef MANUAL_X_HOME_POS
-    #define X_HOME_POS MANUAL_X_HOME_POS
-  #elif ENABLED(BED_CENTER_AT_0_0)
-    #if ENABLED(DELTA)
-      #define X_HOME_POS 0
-    #else
-      #define X_HOME_POS ((X_BED_SIZE) * (X_HOME_DIR) * 0.5)
-    #endif
+#else
+  #if ENABLED(DELTA)
+    #define X_HOME_POS (X_MIN_POS + (X_BED_SIZE) * 0.5)
   #else
-    #if ENABLED(DELTA)
-      #define X_HOME_POS (X_MIN_POS + (X_BED_SIZE) * 0.5)
-    #else
-      #define X_HOME_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
-    #endif
+    #define X_HOME_POS (X_HOME_DIR < 0 ? X_MIN_POS : X_MAX_POS)
   #endif
+#endif
 
-  #ifdef MANUAL_Y_HOME_POS
-    #define Y_HOME_POS MANUAL_Y_HOME_POS
-  #elif ENABLED(BED_CENTER_AT_0_0)
-    #if ENABLED(DELTA)
-      #define Y_HOME_POS 0
-    #else
-      #define Y_HOME_POS ((Y_BED_SIZE) * (Y_HOME_DIR) * 0.5)
-    #endif
+#ifdef MANUAL_Y_HOME_POS
+  #define Y_HOME_POS MANUAL_Y_HOME_POS
+#elif ENABLED(BED_CENTER_AT_0_0)
+  #if ENABLED(DELTA)
+    #define Y_HOME_POS 0
   #else
-    #if ENABLED(DELTA)
-      #define Y_HOME_POS (Y_MIN_POS + (Y_BED_SIZE) * 0.5)
-    #else
-      #define Y_HOME_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
-    #endif
+    #define Y_HOME_POS ((Y_BED_SIZE) * (Y_HOME_DIR) * 0.5)
   #endif
-
-  #ifdef MANUAL_Z_HOME_POS
-    #define Z_HOME_POS MANUAL_Z_HOME_POS
+#else
+  #if ENABLED(DELTA)
+    #define Y_HOME_POS (Y_MIN_POS + (Y_BED_SIZE) * 0.5)
   #else
-    #define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
+    #define Y_HOME_POS (Y_HOME_DIR < 0 ? Y_MIN_POS : Y_MAX_POS)
   #endif
+#endif
 
-  /**
-   * If DELTA_HEIGHT isn't defined use the old setting
-   */
-  #if ENABLED(DELTA) && !defined(DELTA_HEIGHT)
-    #define DELTA_HEIGHT Z_HOME_POS
-  #endif
+#ifdef MANUAL_Z_HOME_POS
+  #define Z_HOME_POS MANUAL_Z_HOME_POS
+#else
+  #define Z_HOME_POS (Z_HOME_DIR < 0 ? Z_MIN_POS : Z_MAX_POS)
+#endif
 
-  /**
-   * Auto Bed Leveling and Z Probe Repeatability Test
-   */
-  #define HOMING_Z_WITH_PROBE (HAS_BED_PROBE && Z_HOME_DIR < 0 && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN))
+/**
+ * If DELTA_HEIGHT isn't defined use the old setting
+ */
+#if ENABLED(DELTA) && !defined(DELTA_HEIGHT)
+  #define DELTA_HEIGHT Z_HOME_POS
+#endif
 
-  /**
-   * Z Sled Probe requires Z_SAFE_HOMING
-   */
-  #if ENABLED(Z_PROBE_SLED)
-    #define Z_SAFE_HOMING
-  #endif
+/**
+ * Auto Bed Leveling and Z Probe Repeatability Test
+ */
+#define HOMING_Z_WITH_PROBE (HAS_BED_PROBE && Z_HOME_DIR < 0 && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN))
 
-  /**
-   * DELTA should ignore Z_SAFE_HOMING and SLOWDOWN
-   */
-  #if ENABLED(DELTA)
-    #undef Z_SAFE_HOMING
-    #undef SLOWDOWN
-  #endif
+/**
+ * Z Sled Probe requires Z_SAFE_HOMING
+ */
+#if ENABLED(Z_PROBE_SLED)
+  #define Z_SAFE_HOMING
+#endif
 
-  /**
-   * Safe Homing Options
-   */
-  #if ENABLED(Z_SAFE_HOMING)
-    #ifndef Z_SAFE_HOMING_X_POINT
-      #define Z_SAFE_HOMING_X_POINT X_CENTER
-    #endif
-    #ifndef Z_SAFE_HOMING_Y_POINT
-      #define Z_SAFE_HOMING_Y_POINT Y_CENTER
-    #endif
-    #define X_TILT_FULCRUM Z_SAFE_HOMING_X_POINT
-    #define Y_TILT_FULCRUM Z_SAFE_HOMING_Y_POINT
-  #else
-    #define X_TILT_FULCRUM X_HOME_POS
-    #define Y_TILT_FULCRUM Y_HOME_POS
-  #endif
+/**
+ * DELTA should ignore Z_SAFE_HOMING and SLOWDOWN
+ */
+#if ENABLED(DELTA)
+  #undef Z_SAFE_HOMING
+  #undef SLOWDOWN
+#endif
 
-  /**
-   * Host keep alive
-   */
-  #ifndef DEFAULT_KEEPALIVE_INTERVAL
-    #define DEFAULT_KEEPALIVE_INTERVAL 2
+/**
+ * Safe Homing Options
+ */
+#if ENABLED(Z_SAFE_HOMING)
+  #ifndef Z_SAFE_HOMING_X_POINT
+    #define Z_SAFE_HOMING_X_POINT X_CENTER
   #endif
-
-  #ifdef CPU_32_BIT
-    /**
-     * Hidden options for developer
-     */
-    // Double stepping starts at STEP_DOUBLER_FREQUENCY + 1, quad stepping starts at STEP_DOUBLER_FREQUENCY * 2 + 1
-    #ifndef STEP_DOUBLER_FREQUENCY
-      #if ENABLED(LIN_ADVANCE)
-        #define STEP_DOUBLER_FREQUENCY 60000 // Hz
-      #else
-        #define STEP_DOUBLER_FREQUENCY 80000 // Hz
-      #endif
-    #endif
-    // Disable double / quad stepping
-    //#define DISABLE_MULTI_STEPPING
+  #ifndef Z_SAFE_HOMING_Y_POINT
+    #define Z_SAFE_HOMING_Y_POINT Y_CENTER
   #endif
+  #define X_TILT_FULCRUM Z_SAFE_HOMING_X_POINT
+  #define Y_TILT_FULCRUM Z_SAFE_HOMING_Y_POINT
+#else
+  #define X_TILT_FULCRUM X_HOME_POS
+  #define Y_TILT_FULCRUM Y_HOME_POS
+#endif
 
-  /**
-   * Provide a MAX_AUTORETRACT for older configs
-   */
-  #if ENABLED(FWRETRACT) && !defined(MAX_AUTORETRACT)
-    #define MAX_AUTORETRACT 99
-  #endif
+/**
+ * Host keep alive
+ */
+#ifndef DEFAULT_KEEPALIVE_INTERVAL
+  #define DEFAULT_KEEPALIVE_INTERVAL 2
+#endif
 
+#ifdef CPU_32_BIT
   /**
-   * MAX_STEP_FREQUENCY differs for TOSHIBA
+   * Hidden options for developer
    */
-  #if ENABLED(CONFIG_STEPPERS_TOSHIBA)
-    #ifdef CPU_32_BIT
-      #define MAX_STEP_FREQUENCY STEP_DOUBLER_FREQUENCY // Max step frequency for Toshiba Stepper Controllers, 96kHz is close to maximum for an Arduino Due
-    #else
-      #define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
-    #endif
-  #else
-    #ifdef CPU_32_BIT
-      #define MAX_STEP_FREQUENCY (STEP_DOUBLER_FREQUENCY * 4) // Max step frequency for the Due is approx. 330kHz
+  // Double stepping starts at STEP_DOUBLER_FREQUENCY + 1, quad stepping starts at STEP_DOUBLER_FREQUENCY * 2 + 1
+  #ifndef STEP_DOUBLER_FREQUENCY
+    #if ENABLED(LIN_ADVANCE)
+      #define STEP_DOUBLER_FREQUENCY 60000 // Hz
     #else
-      #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
+      #define STEP_DOUBLER_FREQUENCY 80000 // Hz
     #endif
   #endif
+  // Disable double / quad stepping
+  //#define DISABLE_MULTI_STEPPING
+#endif
 
-  // MS1 MS2 Stepper Driver Microstepping mode table
-  #define MICROSTEP1 LOW,LOW
-  #define MICROSTEP2 HIGH,LOW
-  #define MICROSTEP4 LOW,HIGH
-  #define MICROSTEP8 HIGH,HIGH
-  #ifdef __SAM3X8E__
-    #if MB(ALLIGATOR)
-      #define MICROSTEP16 LOW,LOW
-      #define MICROSTEP32 HIGH,HIGH
-    #else
-      #define MICROSTEP16 HIGH,HIGH
-    #endif
-  #else
-  #define MICROSTEP16 HIGH,HIGH
-  #endif
-
-  /**
-   * Override here because this is set in Configuration_adv.h
-   */
-  #if ENABLED(ULTIPANEL) && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER)
-    #undef SD_DETECT_INVERTED
-  #endif
-
-  /**
-   * Set defaults for missing (newer) options
-   */
-  #ifndef DISABLE_INACTIVE_X
-    #define DISABLE_INACTIVE_X DISABLE_X
-  #endif
-  #ifndef DISABLE_INACTIVE_Y
-    #define DISABLE_INACTIVE_Y DISABLE_Y
-  #endif
-  #ifndef DISABLE_INACTIVE_Z
-    #define DISABLE_INACTIVE_Z DISABLE_Z
-  #endif
-  #ifndef DISABLE_INACTIVE_E
-    #define DISABLE_INACTIVE_E DISABLE_E
-  #endif
+/**
+ * Provide a MAX_AUTORETRACT for older configs
+ */
+#if ENABLED(FWRETRACT) && !defined(MAX_AUTORETRACT)
+  #define MAX_AUTORETRACT 99
+#endif
 
-  // Power Signal Control Definitions
-  // By default use ATX definition
-  #ifndef POWER_SUPPLY
-    #define POWER_SUPPLY 1
-  #endif
-  #if (POWER_SUPPLY == 1)     // 1 = ATX
-    #define PS_ON_AWAKE  LOW
-    #define PS_ON_ASLEEP HIGH
-  #elif (POWER_SUPPLY == 2)   // 2 = X-Box 360 203W
-    #define PS_ON_AWAKE  HIGH
-    #define PS_ON_ASLEEP LOW
+/**
+ * MAX_STEP_FREQUENCY differs for TOSHIBA
+ */
+#if ENABLED(CONFIG_STEPPERS_TOSHIBA)
+  #ifdef CPU_32_BIT
+    #define MAX_STEP_FREQUENCY STEP_DOUBLER_FREQUENCY // Max step frequency for Toshiba Stepper Controllers, 96kHz is close to maximum for an Arduino Due
+  #else
+    #define MAX_STEP_FREQUENCY 10000 // Max step frequency for Toshiba Stepper Controllers
   #endif
-  #define HAS_POWER_SWITCH (POWER_SUPPLY > 0 && PIN_EXISTS(PS_ON))
-
-  /**
-   * Temp Sensor defines
-   */
-  #if TEMP_SENSOR_0 == -3
-    #define HEATER_0_USES_MAX6675
-    #define MAX6675_IS_MAX31855
-    #define MAX6675_TMIN -270
-    #define MAX6675_TMAX 1800
-  #elif TEMP_SENSOR_0 == -2
-    #define HEATER_0_USES_MAX6675
-    #define MAX6675_TMIN 0
-    #define MAX6675_TMAX 1024
-  #elif TEMP_SENSOR_0 == -1
-    #define HEATER_0_USES_AD595
-  #elif TEMP_SENSOR_0 == 0
-    #undef HEATER_0_MINTEMP
-    #undef HEATER_0_MAXTEMP
-  #elif TEMP_SENSOR_0 > 0
-    #define THERMISTORHEATER_0 TEMP_SENSOR_0
-    #define HEATER_0_USES_THERMISTOR
+#else
+  #ifdef CPU_32_BIT
+    #define MAX_STEP_FREQUENCY (STEP_DOUBLER_FREQUENCY * 4) // Max step frequency for the Due is approx. 330kHz
+  #else
+    #define MAX_STEP_FREQUENCY 40000 // Max step frequency for Ultimaker (5000 pps / half step)
+  #endif
+#endif
+
+// MS1 MS2 Stepper Driver Microstepping mode table
+#define MICROSTEP1 LOW,LOW
+#define MICROSTEP2 HIGH,LOW
+#define MICROSTEP4 LOW,HIGH
+#define MICROSTEP8 HIGH,HIGH
+#ifdef __SAM3X8E__
+  #if MB(ALLIGATOR)
+    #define MICROSTEP16 LOW,LOW
+    #define MICROSTEP32 HIGH,HIGH
+  #else
+    #define MICROSTEP16 HIGH,HIGH
   #endif
+#else
+#define MICROSTEP16 HIGH,HIGH
+#endif
 
-  #if TEMP_SENSOR_1 <= -2
-    #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_1"
-  #elif TEMP_SENSOR_1 == -1
-    #define HEATER_1_USES_AD595
-  #elif TEMP_SENSOR_1 == 0
-    #undef HEATER_1_MINTEMP
-    #undef HEATER_1_MAXTEMP
-  #elif TEMP_SENSOR_1 > 0
-    #define THERMISTORHEATER_1 TEMP_SENSOR_1
-    #define HEATER_1_USES_THERMISTOR
-  #endif
+/**
+ * Override here because this is set in Configuration_adv.h
+ */
+#if ENABLED(ULTIPANEL) && DISABLED(ELB_FULL_GRAPHIC_CONTROLLER)
+  #undef SD_DETECT_INVERTED
+#endif
 
-  #if TEMP_SENSOR_2 <= -2
-    #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_2"
-  #elif TEMP_SENSOR_2 == -1
-    #define HEATER_2_USES_AD595
-  #elif TEMP_SENSOR_2 == 0
-    #undef HEATER_2_MINTEMP
-    #undef HEATER_2_MAXTEMP
-  #elif TEMP_SENSOR_2 > 0
-    #define THERMISTORHEATER_2 TEMP_SENSOR_2
-    #define HEATER_2_USES_THERMISTOR
-  #endif
+/**
+ * Set defaults for missing (newer) options
+ */
+#ifndef DISABLE_INACTIVE_X
+  #define DISABLE_INACTIVE_X DISABLE_X
+#endif
+#ifndef DISABLE_INACTIVE_Y
+  #define DISABLE_INACTIVE_Y DISABLE_Y
+#endif
+#ifndef DISABLE_INACTIVE_Z
+  #define DISABLE_INACTIVE_Z DISABLE_Z
+#endif
+#ifndef DISABLE_INACTIVE_E
+  #define DISABLE_INACTIVE_E DISABLE_E
+#endif
+
+// Power Signal Control Definitions
+// By default use ATX definition
+#ifndef POWER_SUPPLY
+  #define POWER_SUPPLY 1
+#endif
+#if (POWER_SUPPLY == 1)     // 1 = ATX
+  #define PS_ON_AWAKE  LOW
+  #define PS_ON_ASLEEP HIGH
+#elif (POWER_SUPPLY == 2)   // 2 = X-Box 360 203W
+  #define PS_ON_AWAKE  HIGH
+  #define PS_ON_ASLEEP LOW
+#endif
+#define HAS_POWER_SWITCH (POWER_SUPPLY > 0 && PIN_EXISTS(PS_ON))
 
-  #if TEMP_SENSOR_3 <= -2
-    #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_3"
-  #elif TEMP_SENSOR_3 == -1
-    #define HEATER_3_USES_AD595
-  #elif TEMP_SENSOR_3 == 0
-    #undef HEATER_3_MINTEMP
-    #undef HEATER_3_MAXTEMP
-  #elif TEMP_SENSOR_3 > 0
-    #define THERMISTORHEATER_3 TEMP_SENSOR_3
-    #define HEATER_3_USES_THERMISTOR
-  #endif
+/**
+ * Temp Sensor defines
+ */
+#if TEMP_SENSOR_0 == -3
+  #define HEATER_0_USES_MAX6675
+  #define MAX6675_IS_MAX31855
+  #define MAX6675_TMIN -270
+  #define MAX6675_TMAX 1800
+#elif TEMP_SENSOR_0 == -2
+  #define HEATER_0_USES_MAX6675
+  #define MAX6675_TMIN 0
+  #define MAX6675_TMAX 1024
+#elif TEMP_SENSOR_0 == -1
+  #define HEATER_0_USES_AD595
+#elif TEMP_SENSOR_0 == 0
+  #undef HEATER_0_MINTEMP
+  #undef HEATER_0_MAXTEMP
+#elif TEMP_SENSOR_0 > 0
+  #define THERMISTORHEATER_0 TEMP_SENSOR_0
+  #define HEATER_0_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_1 <= -2
+  #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_1"
+#elif TEMP_SENSOR_1 == -1
+  #define HEATER_1_USES_AD595
+#elif TEMP_SENSOR_1 == 0
+  #undef HEATER_1_MINTEMP
+  #undef HEATER_1_MAXTEMP
+#elif TEMP_SENSOR_1 > 0
+  #define THERMISTORHEATER_1 TEMP_SENSOR_1
+  #define HEATER_1_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_2 <= -2
+  #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_2"
+#elif TEMP_SENSOR_2 == -1
+  #define HEATER_2_USES_AD595
+#elif TEMP_SENSOR_2 == 0
+  #undef HEATER_2_MINTEMP
+  #undef HEATER_2_MAXTEMP
+#elif TEMP_SENSOR_2 > 0
+  #define THERMISTORHEATER_2 TEMP_SENSOR_2
+  #define HEATER_2_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_3 <= -2
+  #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_3"
+#elif TEMP_SENSOR_3 == -1
+  #define HEATER_3_USES_AD595
+#elif TEMP_SENSOR_3 == 0
+  #undef HEATER_3_MINTEMP
+  #undef HEATER_3_MAXTEMP
+#elif TEMP_SENSOR_3 > 0
+  #define THERMISTORHEATER_3 TEMP_SENSOR_3
+  #define HEATER_3_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_4 <= -2
+  #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_4"
+#elif TEMP_SENSOR_4 == -1
+  #define HEATER_4_USES_AD595
+#elif TEMP_SENSOR_4 == 0
+  #undef HEATER_4_MINTEMP
+  #undef HEATER_4_MAXTEMP
+#elif TEMP_SENSOR_4 > 0
+  #define THERMISTORHEATER_4 TEMP_SENSOR_4
+  #define HEATER_4_USES_THERMISTOR
+#endif
+
+#if TEMP_SENSOR_BED <= -2
+  #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_BED"
+#elif TEMP_SENSOR_BED == -1
+  #define BED_USES_AD595
+#elif TEMP_SENSOR_BED == 0
+  #undef BED_MINTEMP
+  #undef BED_MAXTEMP
+#elif TEMP_SENSOR_BED > 0
+  #define THERMISTORBED TEMP_SENSOR_BED
+  #define BED_USES_THERMISTOR
+#endif
+
+#ifdef __SAM3X8E__
+  #define HEATER_USES_AD595 (ENABLED(HEATER_0_USES_AD595) || ENABLED(HEATER_1_USES_AD595) || ENABLED(HEATER_2_USES_AD595) || ENABLED(HEATER_3_USES_AD595))
+#endif
 
-  #if TEMP_SENSOR_4 <= -2
-    #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_4"
-  #elif TEMP_SENSOR_4 == -1
-    #define HEATER_4_USES_AD595
-  #elif TEMP_SENSOR_4 == 0
-    #undef HEATER_4_MINTEMP
-    #undef HEATER_4_MAXTEMP
-  #elif TEMP_SENSOR_4 > 0
-    #define THERMISTORHEATER_4 TEMP_SENSOR_4
-    #define HEATER_4_USES_THERMISTOR
-  #endif
+/**
+ * Flags for PID handling
+ */
+#define HAS_PID_HEATING (ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED))
+#define HAS_PID_FOR_BOTH (ENABLED(PIDTEMP) && ENABLED(PIDTEMPBED))
 
-  #if TEMP_SENSOR_BED <= -2
-    #error "MAX6675 / MAX31855 Thermocouples not supported for TEMP_SENSOR_BED"
-  #elif TEMP_SENSOR_BED == -1
-    #define BED_USES_AD595
-  #elif TEMP_SENSOR_BED == 0
-    #undef BED_MINTEMP
-    #undef BED_MAXTEMP
-  #elif TEMP_SENSOR_BED > 0
-    #define THERMISTORBED TEMP_SENSOR_BED
-    #define BED_USES_THERMISTOR
+/**
+ * Default hotend offsets, if not defined
+ */
+#if HOTENDS > 1
+  #ifndef HOTEND_OFFSET_X
+    #define HOTEND_OFFSET_X { 0 } // X offsets for each extruder
   #endif
-
-  #ifdef __SAM3X8E__
-    #define HEATER_USES_AD595 (ENABLED(HEATER_0_USES_AD595) || ENABLED(HEATER_1_USES_AD595) || ENABLED(HEATER_2_USES_AD595) || ENABLED(HEATER_3_USES_AD595))
+  #ifndef HOTEND_OFFSET_Y
+    #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder
   #endif
-
-  /**
-   * Flags for PID handling
-   */
-  #define HAS_PID_HEATING (ENABLED(PIDTEMP) || ENABLED(PIDTEMPBED))
-  #define HAS_PID_FOR_BOTH (ENABLED(PIDTEMP) && ENABLED(PIDTEMPBED))
-
-  /**
-   * Default hotend offsets, if not defined
-   */
-  #if HOTENDS > 1
-    #ifndef HOTEND_OFFSET_X
-      #define HOTEND_OFFSET_X { 0 } // X offsets for each extruder
-    #endif
-    #ifndef HOTEND_OFFSET_Y
-      #define HOTEND_OFFSET_Y { 0 } // Y offsets for each extruder
-    #endif
-    #if !defined(HOTEND_OFFSET_Z) && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE))
-      #define HOTEND_OFFSET_Z { 0 }
-    #endif
+  #if !defined(HOTEND_OFFSET_Z) && (ENABLED(DUAL_X_CARRIAGE) || ENABLED(SWITCHING_NOZZLE))
+    #define HOTEND_OFFSET_Z { 0 }
   #endif
+#endif
 
-  /**
-   * ARRAY_BY_EXTRUDERS based on EXTRUDERS
-   */
-  #define ARRAY_BY_EXTRUDERS(...) ARRAY_N(EXTRUDERS, __VA_ARGS__)
-  #define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1, v1, v1)
+/**
+ * ARRAY_BY_EXTRUDERS based on EXTRUDERS
+ */
+#define ARRAY_BY_EXTRUDERS(...) ARRAY_N(EXTRUDERS, __VA_ARGS__)
+#define ARRAY_BY_EXTRUDERS1(v1) ARRAY_BY_EXTRUDERS(v1, v1, v1, v1, v1, v1)
 
-  /**
-   * ARRAY_BY_HOTENDS based on HOTENDS
-   */
-  #define ARRAY_BY_HOTENDS(...) ARRAY_N(HOTENDS, __VA_ARGS__)
-  #define ARRAY_BY_HOTENDS1(v1) ARRAY_BY_HOTENDS(v1, v1, v1, v1, v1, v1)
+/**
+ * ARRAY_BY_HOTENDS based on HOTENDS
+ */
+#define ARRAY_BY_HOTENDS(...) ARRAY_N(HOTENDS, __VA_ARGS__)
+#define ARRAY_BY_HOTENDS1(v1) ARRAY_BY_HOTENDS(v1, v1, v1, v1, v1, v1)
 
-  /**
-   * Z_DUAL_ENDSTOPS endstop reassignment
-   */
-  #if ENABLED(Z_DUAL_ENDSTOPS)
-    #define _XMIN_ 100
-    #define _YMIN_ 200
-    #define _ZMIN_ 300
-    #define _XMAX_ 101
-    #define _YMAX_ 201
-    #define _ZMAX_ 301
+/**
+ * Z_DUAL_ENDSTOPS endstop reassignment
+ */
+#if ENABLED(Z_DUAL_ENDSTOPS)
+  #define _XMIN_ 100
+  #define _YMIN_ 200
+  #define _ZMIN_ 300
+  #define _XMAX_ 101
+  #define _YMAX_ 201
+  #define _ZMAX_ 301
+  #if Z2_USE_ENDSTOP == _XMIN_
+    #define USE_XMIN_PLUG
+  #elif Z2_USE_ENDSTOP == _XMAX_
+    #define USE_XMAX_PLUG
+  #elif Z2_USE_ENDSTOP == _YMIN_
+    #define USE_YMIN_PLUG
+  #elif Z2_USE_ENDSTOP == _YMAX_
+    #define USE_YMAX_PLUG
+  #elif Z2_USE_ENDSTOP == _ZMIN_
+    #define USE_ZMIN_PLUG
+  #elif Z2_USE_ENDSTOP == _ZMAX_
+    #define USE_ZMAX_PLUG
+  #endif
+  #if Z_HOME_DIR > 0
     #if Z2_USE_ENDSTOP == _XMIN_
-      #define USE_XMIN_PLUG
+      #define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
+      #define Z2_MAX_PIN X_MIN_PIN
     #elif Z2_USE_ENDSTOP == _XMAX_
-      #define USE_XMAX_PLUG
+      #define Z2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
+      #define Z2_MAX_PIN X_MAX_PIN
     #elif Z2_USE_ENDSTOP == _YMIN_
-      #define USE_YMIN_PLUG
+      #define Z2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
+      #define Z2_MAX_PIN Y_MIN_PIN
     #elif Z2_USE_ENDSTOP == _YMAX_
-      #define USE_YMAX_PLUG
+      #define Z2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
+      #define Z2_MAX_PIN Y_MAX_PIN
     #elif Z2_USE_ENDSTOP == _ZMIN_
-      #define USE_ZMIN_PLUG
+      #define Z2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
+      #define Z2_MAX_PIN Z_MIN_PIN
     #elif Z2_USE_ENDSTOP == _ZMAX_
-      #define USE_ZMAX_PLUG
-    #endif
-    #if Z_HOME_DIR > 0
-      #if Z2_USE_ENDSTOP == _XMIN_
-        #define Z2_MAX_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
-        #define Z2_MAX_PIN X_MIN_PIN
-      #elif Z2_USE_ENDSTOP == _XMAX_
-        #define Z2_MAX_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
-        #define Z2_MAX_PIN X_MAX_PIN
-      #elif Z2_USE_ENDSTOP == _YMIN_
-        #define Z2_MAX_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
-        #define Z2_MAX_PIN Y_MIN_PIN
-      #elif Z2_USE_ENDSTOP == _YMAX_
-        #define Z2_MAX_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
-        #define Z2_MAX_PIN Y_MAX_PIN
-      #elif Z2_USE_ENDSTOP == _ZMIN_
-        #define Z2_MAX_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
-        #define Z2_MAX_PIN Z_MIN_PIN
-      #elif Z2_USE_ENDSTOP == _ZMAX_
-        #define Z2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
-        #define Z2_MAX_PIN Z_MAX_PIN
-      #else
-        #define Z2_MAX_ENDSTOP_INVERTING false
-      #endif
+      #define Z2_MAX_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
+      #define Z2_MAX_PIN Z_MAX_PIN
     #else
-      #if Z2_USE_ENDSTOP == _XMIN_
-        #define Z2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
-        #define Z2_MIN_PIN X_MIN_PIN
-      #elif Z2_USE_ENDSTOP == _XMAX_
-        #define Z2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
-        #define Z2_MIN_PIN X_MAX_PIN
-      #elif Z2_USE_ENDSTOP == _YMIN_
-        #define Z2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
-        #define Z2_MIN_PIN Y_MIN_PIN
-      #elif Z2_USE_ENDSTOP == _YMAX_
-        #define Z2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
-        #define Z2_MIN_PIN Y_MAX_PIN
-      #elif Z2_USE_ENDSTOP == _ZMIN_
-        #define Z2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
-        #define Z2_MIN_PIN Z_MIN_PIN
-      #elif Z2_USE_ENDSTOP == _ZMAX_
-        #define Z2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
-        #define Z2_MIN_PIN Z_MAX_PIN
-      #else
-        #define Z2_MIN_ENDSTOP_INVERTING false
-      #endif
+      #define Z2_MAX_ENDSTOP_INVERTING false
     #endif
-  #endif
-
-  // Is an endstop plug used for the Z2 endstop or the bed probe?
-  #define IS_Z2_OR_PROBE(A,M) ( \
-       (ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP == _##A##M##_) \
-    || (ENABLED(Z_MIN_PROBE_ENDSTOP) && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
-
-  /**
-   * Set ENDSTOPPULLUPS for active endstop switches
-   */
-  #if ENABLED(ENDSTOPPULLUPS)
-    #if ENABLED(USE_XMAX_PLUG)
-      #define ENDSTOPPULLUP_XMAX
-    #endif
-    #if ENABLED(USE_YMAX_PLUG)
-      #define ENDSTOPPULLUP_YMAX
-    #endif
-    #if ENABLED(USE_ZMAX_PLUG)
-      #define ENDSTOPPULLUP_ZMAX
-    #endif
-    #if ENABLED(USE_XMIN_PLUG)
-      #define ENDSTOPPULLUP_XMIN
-    #endif
-    #if ENABLED(USE_YMIN_PLUG)
-      #define ENDSTOPPULLUP_YMIN
-    #endif
-    #if ENABLED(USE_ZMIN_PLUG)
-      #define ENDSTOPPULLUP_ZMIN
+  #else
+    #if Z2_USE_ENDSTOP == _XMIN_
+      #define Z2_MIN_ENDSTOP_INVERTING X_MIN_ENDSTOP_INVERTING
+      #define Z2_MIN_PIN X_MIN_PIN
+    #elif Z2_USE_ENDSTOP == _XMAX_
+      #define Z2_MIN_ENDSTOP_INVERTING X_MAX_ENDSTOP_INVERTING
+      #define Z2_MIN_PIN X_MAX_PIN
+    #elif Z2_USE_ENDSTOP == _YMIN_
+      #define Z2_MIN_ENDSTOP_INVERTING Y_MIN_ENDSTOP_INVERTING
+      #define Z2_MIN_PIN Y_MIN_PIN
+    #elif Z2_USE_ENDSTOP == _YMAX_
+      #define Z2_MIN_ENDSTOP_INVERTING Y_MAX_ENDSTOP_INVERTING
+      #define Z2_MIN_PIN Y_MAX_PIN
+    #elif Z2_USE_ENDSTOP == _ZMIN_
+      #define Z2_MIN_ENDSTOP_INVERTING Z_MIN_ENDSTOP_INVERTING
+      #define Z2_MIN_PIN Z_MIN_PIN
+    #elif Z2_USE_ENDSTOP == _ZMAX_
+      #define Z2_MIN_ENDSTOP_INVERTING Z_MAX_ENDSTOP_INVERTING
+      #define Z2_MIN_PIN Z_MAX_PIN
+    #else
+      #define Z2_MIN_ENDSTOP_INVERTING false
     #endif
   #endif
+#endif
 
-  /**
-   * Shorthand for pin tests, used wherever needed
-   */
-
-  // Steppers
-  #define HAS_X_ENABLE      (PIN_EXISTS(X_ENABLE))
-  #define HAS_X_DIR         (PIN_EXISTS(X_DIR))
-  #define HAS_X_STEP        (PIN_EXISTS(X_STEP))
-  #define HAS_X_MICROSTEPS  (PIN_EXISTS(X_MS1))
-
-  #define HAS_X2_ENABLE     (PIN_EXISTS(X2_ENABLE))
-  #define HAS_X2_DIR        (PIN_EXISTS(X2_DIR))
-  #define HAS_X2_STEP       (PIN_EXISTS(X2_STEP))
-  #define HAS_Y_MICROSTEPS  (PIN_EXISTS(Y_MS1))
-
-  #define HAS_Y_ENABLE      (PIN_EXISTS(Y_ENABLE))
-  #define HAS_Y_DIR         (PIN_EXISTS(Y_DIR))
-  #define HAS_Y_STEP        (PIN_EXISTS(Y_STEP))
-  #define HAS_Z_MICROSTEPS  (PIN_EXISTS(Z_MS1))
-
-  #define HAS_Y2_ENABLE     (PIN_EXISTS(Y2_ENABLE))
-  #define HAS_Y2_DIR        (PIN_EXISTS(Y2_DIR))
-  #define HAS_Y2_STEP       (PIN_EXISTS(Y2_STEP))
-
-  #define HAS_Z_ENABLE      (PIN_EXISTS(Z_ENABLE))
-  #define HAS_Z_DIR         (PIN_EXISTS(Z_DIR))
-  #define HAS_Z_STEP        (PIN_EXISTS(Z_STEP))
-
-  #define HAS_Z2_ENABLE     (PIN_EXISTS(Z2_ENABLE))
-  #define HAS_Z2_DIR        (PIN_EXISTS(Z2_DIR))
-  #define HAS_Z2_STEP       (PIN_EXISTS(Z2_STEP))
-
-  // Extruder steppers and solenoids
-  #define HAS_E0_ENABLE     (PIN_EXISTS(E0_ENABLE))
-  #define HAS_E0_DIR        (PIN_EXISTS(E0_DIR))
-  #define HAS_E0_STEP       (PIN_EXISTS(E0_STEP))
-  #define HAS_E0_MICROSTEPS (PIN_EXISTS(E0_MS1))
-  #define HAS_SOLENOID_0    (PIN_EXISTS(SOL0))
-
-  #define HAS_E1_ENABLE     (PIN_EXISTS(E1_ENABLE))
-  #define HAS_E1_DIR        (PIN_EXISTS(E1_DIR))
-  #define HAS_E1_STEP       (PIN_EXISTS(E1_STEP))
-  #define HAS_E1_MICROSTEPS (PIN_EXISTS(E1_MS1))
-  #define HAS_SOLENOID_1    (PIN_EXISTS(SOL1))
-
-  #define HAS_E2_ENABLE     (PIN_EXISTS(E2_ENABLE))
-  #define HAS_E2_DIR        (PIN_EXISTS(E2_DIR))
-  #define HAS_E2_STEP       (PIN_EXISTS(E2_STEP))
-  #define HAS_E2_MICROSTEPS (PIN_EXISTS(E2_MS1))
-  #define HAS_SOLENOID_2    (PIN_EXISTS(SOL2))
-
-  #define HAS_E3_ENABLE     (PIN_EXISTS(E3_ENABLE))
-  #define HAS_E3_DIR        (PIN_EXISTS(E3_DIR))
-  #define HAS_E3_STEP       (PIN_EXISTS(E3_STEP))
-  #define HAS_E3_MICROSTEPS (PIN_EXISTS(E3_MS1))
-  #define HAS_SOLENOID_3    (PIN_EXISTS(SOL3))
-
-  #define HAS_E4_ENABLE     (PIN_EXISTS(E4_ENABLE))
-  #define HAS_E4_DIR        (PIN_EXISTS(E4_DIR))
-  #define HAS_E4_STEP       (PIN_EXISTS(E4_STEP))
-  #define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
-  #define HAS_SOLENOID_4    (PIN_EXISTS(SOL4))
-
-  // Endstops and bed probe
-  #define HAS_X_MIN (PIN_EXISTS(X_MIN) && !IS_Z2_OR_PROBE(X,MIN))
-  #define HAS_X_MAX (PIN_EXISTS(X_MAX) && !IS_Z2_OR_PROBE(X,MAX))
-  #define HAS_Y_MIN (PIN_EXISTS(Y_MIN) && !IS_Z2_OR_PROBE(Y,MIN))
-  #define HAS_Y_MAX (PIN_EXISTS(Y_MAX) && !IS_Z2_OR_PROBE(Y,MAX))
-  #define HAS_Z_MIN (PIN_EXISTS(Z_MIN) && !IS_Z2_OR_PROBE(Z,MIN))
-  #define HAS_Z_MAX (PIN_EXISTS(Z_MAX) && !IS_Z2_OR_PROBE(Z,MAX))
-  #define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
-  #define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
-  #define HAS_Z_MIN_PROBE_PIN (PIN_EXISTS(Z_MIN_PROBE))
-
-  // Thermistors
-  #define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 > -2)
-  #define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0 && TEMP_SENSOR_1 > -2)
-  #define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0 && TEMP_SENSOR_2 > -2)
-  #define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0 && TEMP_SENSOR_3 > -2)
-  #define HAS_TEMP_4 (PIN_EXISTS(TEMP_4) && TEMP_SENSOR_4 != 0 && TEMP_SENSOR_4 > -2)
-  #define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
-  #define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
-
-  // Heaters
-  #define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
-  #define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
-  #define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
-  #define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
-  #define HAS_HEATER_4 (PIN_EXISTS(HEATER_4))
-  #define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
-
-  // Thermal protection
-  #define HAS_THERMALLY_PROTECTED_BED (ENABLED(THERMAL_PROTECTION_BED) && HAS_TEMP_BED && HAS_HEATER_BED)
-  #define WATCH_HOTENDS (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0)
-  #define WATCH_THE_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0)
-
-  // Auto fans
-  #define HAS_AUTO_FAN_0 (PIN_EXISTS(E0_AUTO_FAN))
-  #define HAS_AUTO_FAN_1 (HOTENDS > 1 && PIN_EXISTS(E1_AUTO_FAN))
-  #define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
-  #define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
-  #define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
-  #define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
-  #define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_3_IS_0 (E3_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_3_IS_1 (E3_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_3_IS_2 (E3_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
-  #define AUTO_4_IS_0 (E4_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
-  #define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
-  #define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
-  #define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
-
-  // Other fans
-  #define HAS_FAN0 (PIN_EXISTS(FAN))
-  #define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN)
-  #define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN)
-  #define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
-
-  // Servos
-  #define HAS_SERVOS (defined(NUM_SERVOS) && NUM_SERVOS > 0)
-  #define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
-  #define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
-  #define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
-  #define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
-
-  // Sensors
-  #define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
-  #define HAS_FIL_RUNOUT (PIN_EXISTS(FIL_RUNOUT))
-
-  // User Interface
-  #define HAS_HOME (PIN_EXISTS(HOME))
-  #define HAS_KILL (PIN_EXISTS(KILL))
-  #define HAS_SUICIDE (PIN_EXISTS(SUICIDE))
-  #define HAS_PHOTOGRAPH (PIN_EXISTS(PHOTOGRAPH))
-  #define HAS_BUZZER (PIN_EXISTS(BEEPER) || ENABLED(LCD_USE_I2C_BUZZER))
-  #define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE))
-
-  // Digital control
-  #define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS)
-  #define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
-  #define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
-  #define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
+// Is an endstop plug used for the Z2 endstop or the bed probe?
+#define IS_Z2_OR_PROBE(A,M) ( \
+     (ENABLED(Z_DUAL_ENDSTOPS) && Z2_USE_ENDSTOP == _##A##M##_) \
+  || (ENABLED(Z_MIN_PROBE_ENDSTOP) && Z_MIN_PROBE_PIN == A##_##M##_PIN ) )
 
-  /**
-   * This setting is also used by M109 when trying to calculate
-   * a ballpark safe margin to prevent wait-forever situation.
-   */
-  #ifndef EXTRUDE_MINTEMP
-    #define EXTRUDE_MINTEMP 170
+/**
+ * Set ENDSTOPPULLUPS for active endstop switches
+ */
+#if ENABLED(ENDSTOPPULLUPS)
+  #if ENABLED(USE_XMAX_PLUG)
+    #define ENDSTOPPULLUP_XMAX
   #endif
-
-  /**
-   * Helper Macros for heaters and extruder fan
-   */
-  #define WRITE_HEATER_0P(v) WRITE(HEATER_0_PIN, v)
-  #if HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
-    #define WRITE_HEATER_1(v) WRITE(HEATER_1_PIN, v)
-    #if HOTENDS > 2
-      #define WRITE_HEATER_2(v) WRITE(HEATER_2_PIN, v)
-      #if HOTENDS > 3
-        #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, v)
-        #if HOTENDS > 4
-          #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, v)
-        #endif // HOTENDS > 4
-      #endif // HOTENDS > 3
-    #endif // HOTENDS > 2
-  #endif // HOTENDS > 1
-  #if ENABLED(HEATERS_PARALLEL)
-    #define WRITE_HEATER_0(v) { WRITE_HEATER_0P(v); WRITE_HEATER_1(v); }
-  #else
-    #define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
+  #if ENABLED(USE_YMAX_PLUG)
+    #define ENDSTOPPULLUP_YMAX
   #endif
-
-  /**
-   * Heated bed requires settings
-   */
-  #if HAS_HEATER_BED
-    #ifndef MAX_BED_POWER
-      #define MAX_BED_POWER 255
-    #endif
-    #ifndef HEATER_BED_INVERTING
-      #define HEATER_BED_INVERTING false
-    #endif
-    #define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, (v) ^ HEATER_BED_INVERTING)
-  #endif
-
-  /**
-   * Up to 3 PWM fans
-   */
-  #if HAS_FAN2
-    #define FAN_COUNT 3
-  #elif HAS_FAN1
-    #define FAN_COUNT 2
-  #elif HAS_FAN0
-    #define FAN_COUNT 1
-  #else
-    #define FAN_COUNT 0
+  #if ENABLED(USE_ZMAX_PLUG)
+    #define ENDSTOPPULLUP_ZMAX
   #endif
-
-  #if HAS_FAN0
-    #define WRITE_FAN(v) WRITE(FAN_PIN, v)
-    #define WRITE_FAN0(v) WRITE_FAN(v)
+  #if ENABLED(USE_XMIN_PLUG)
+    #define ENDSTOPPULLUP_XMIN
   #endif
-  #if HAS_FAN1
-    #define WRITE_FAN1(v) WRITE(FAN1_PIN, v)
+  #if ENABLED(USE_YMIN_PLUG)
+    #define ENDSTOPPULLUP_YMIN
   #endif
-  #if HAS_FAN2
-    #define WRITE_FAN2(v) WRITE(FAN2_PIN, v)
+  #if ENABLED(USE_ZMIN_PLUG)
+    #define ENDSTOPPULLUP_ZMIN
   #endif
-  #define WRITE_FAN_N(n, v) WRITE_FAN##n(v)
+#endif
 
-  /**
-   * Part Cooling fan multipliexer
-   */
-  #define HAS_FANMUX PIN_EXISTS(FANMUX0)
+/**
+ * Shorthand for pin tests, used wherever needed
+ */
 
-  /**
-   * Servos and probes
-   */
+// Steppers
+#define HAS_X_ENABLE      (PIN_EXISTS(X_ENABLE))
+#define HAS_X_DIR         (PIN_EXISTS(X_DIR))
+#define HAS_X_STEP        (PIN_EXISTS(X_STEP))
+#define HAS_X_MICROSTEPS  (PIN_EXISTS(X_MS1))
+
+#define HAS_X2_ENABLE     (PIN_EXISTS(X2_ENABLE))
+#define HAS_X2_DIR        (PIN_EXISTS(X2_DIR))
+#define HAS_X2_STEP       (PIN_EXISTS(X2_STEP))
+#define HAS_Y_MICROSTEPS  (PIN_EXISTS(Y_MS1))
+
+#define HAS_Y_ENABLE      (PIN_EXISTS(Y_ENABLE))
+#define HAS_Y_DIR         (PIN_EXISTS(Y_DIR))
+#define HAS_Y_STEP        (PIN_EXISTS(Y_STEP))
+#define HAS_Z_MICROSTEPS  (PIN_EXISTS(Z_MS1))
+
+#define HAS_Y2_ENABLE     (PIN_EXISTS(Y2_ENABLE))
+#define HAS_Y2_DIR        (PIN_EXISTS(Y2_DIR))
+#define HAS_Y2_STEP       (PIN_EXISTS(Y2_STEP))
+
+#define HAS_Z_ENABLE      (PIN_EXISTS(Z_ENABLE))
+#define HAS_Z_DIR         (PIN_EXISTS(Z_DIR))
+#define HAS_Z_STEP        (PIN_EXISTS(Z_STEP))
+
+#define HAS_Z2_ENABLE     (PIN_EXISTS(Z2_ENABLE))
+#define HAS_Z2_DIR        (PIN_EXISTS(Z2_DIR))
+#define HAS_Z2_STEP       (PIN_EXISTS(Z2_STEP))
+
+// Extruder steppers and solenoids
+#define HAS_E0_ENABLE     (PIN_EXISTS(E0_ENABLE))
+#define HAS_E0_DIR        (PIN_EXISTS(E0_DIR))
+#define HAS_E0_STEP       (PIN_EXISTS(E0_STEP))
+#define HAS_E0_MICROSTEPS (PIN_EXISTS(E0_MS1))
+#define HAS_SOLENOID_0    (PIN_EXISTS(SOL0))
+
+#define HAS_E1_ENABLE     (PIN_EXISTS(E1_ENABLE))
+#define HAS_E1_DIR        (PIN_EXISTS(E1_DIR))
+#define HAS_E1_STEP       (PIN_EXISTS(E1_STEP))
+#define HAS_E1_MICROSTEPS (PIN_EXISTS(E1_MS1))
+#define HAS_SOLENOID_1    (PIN_EXISTS(SOL1))
+
+#define HAS_E2_ENABLE     (PIN_EXISTS(E2_ENABLE))
+#define HAS_E2_DIR        (PIN_EXISTS(E2_DIR))
+#define HAS_E2_STEP       (PIN_EXISTS(E2_STEP))
+#define HAS_E2_MICROSTEPS (PIN_EXISTS(E2_MS1))
+#define HAS_SOLENOID_2    (PIN_EXISTS(SOL2))
+
+#define HAS_E3_ENABLE     (PIN_EXISTS(E3_ENABLE))
+#define HAS_E3_DIR        (PIN_EXISTS(E3_DIR))
+#define HAS_E3_STEP       (PIN_EXISTS(E3_STEP))
+#define HAS_E3_MICROSTEPS (PIN_EXISTS(E3_MS1))
+#define HAS_SOLENOID_3    (PIN_EXISTS(SOL3))
+
+#define HAS_E4_ENABLE     (PIN_EXISTS(E4_ENABLE))
+#define HAS_E4_DIR        (PIN_EXISTS(E4_DIR))
+#define HAS_E4_STEP       (PIN_EXISTS(E4_STEP))
+#define HAS_E4_MICROSTEPS (PIN_EXISTS(E4_MS1))
+#define HAS_SOLENOID_4    (PIN_EXISTS(SOL4))
+
+// Endstops and bed probe
+#define HAS_X_MIN (PIN_EXISTS(X_MIN) && !IS_Z2_OR_PROBE(X,MIN))
+#define HAS_X_MAX (PIN_EXISTS(X_MAX) && !IS_Z2_OR_PROBE(X,MAX))
+#define HAS_Y_MIN (PIN_EXISTS(Y_MIN) && !IS_Z2_OR_PROBE(Y,MIN))
+#define HAS_Y_MAX (PIN_EXISTS(Y_MAX) && !IS_Z2_OR_PROBE(Y,MAX))
+#define HAS_Z_MIN (PIN_EXISTS(Z_MIN) && !IS_Z2_OR_PROBE(Z,MIN))
+#define HAS_Z_MAX (PIN_EXISTS(Z_MAX) && !IS_Z2_OR_PROBE(Z,MAX))
+#define HAS_Z2_MIN (PIN_EXISTS(Z2_MIN))
+#define HAS_Z2_MAX (PIN_EXISTS(Z2_MAX))
+#define HAS_Z_MIN_PROBE_PIN (PIN_EXISTS(Z_MIN_PROBE))
+
+// Thermistors
+#define HAS_TEMP_0 (PIN_EXISTS(TEMP_0) && TEMP_SENSOR_0 != 0 && TEMP_SENSOR_0 > -2)
+#define HAS_TEMP_1 (PIN_EXISTS(TEMP_1) && TEMP_SENSOR_1 != 0 && TEMP_SENSOR_1 > -2)
+#define HAS_TEMP_2 (PIN_EXISTS(TEMP_2) && TEMP_SENSOR_2 != 0 && TEMP_SENSOR_2 > -2)
+#define HAS_TEMP_3 (PIN_EXISTS(TEMP_3) && TEMP_SENSOR_3 != 0 && TEMP_SENSOR_3 > -2)
+#define HAS_TEMP_4 (PIN_EXISTS(TEMP_4) && TEMP_SENSOR_4 != 0 && TEMP_SENSOR_4 > -2)
+#define HAS_TEMP_HOTEND (HAS_TEMP_0 || ENABLED(HEATER_0_USES_MAX6675))
+#define HAS_TEMP_BED (PIN_EXISTS(TEMP_BED) && TEMP_SENSOR_BED != 0 && TEMP_SENSOR_BED > -2)
+
+// Heaters
+#define HAS_HEATER_0 (PIN_EXISTS(HEATER_0))
+#define HAS_HEATER_1 (PIN_EXISTS(HEATER_1))
+#define HAS_HEATER_2 (PIN_EXISTS(HEATER_2))
+#define HAS_HEATER_3 (PIN_EXISTS(HEATER_3))
+#define HAS_HEATER_4 (PIN_EXISTS(HEATER_4))
+#define HAS_HEATER_BED (PIN_EXISTS(HEATER_BED))
+
+// Thermal protection
+#define HAS_THERMALLY_PROTECTED_BED (ENABLED(THERMAL_PROTECTION_BED) && HAS_TEMP_BED && HAS_HEATER_BED)
+#define WATCH_HOTENDS (ENABLED(THERMAL_PROTECTION_HOTENDS) && WATCH_TEMP_PERIOD > 0)
+#define WATCH_THE_BED (HAS_THERMALLY_PROTECTED_BED && WATCH_BED_TEMP_PERIOD > 0)
+
+// Auto fans
+#define HAS_AUTO_FAN_0 (PIN_EXISTS(E0_AUTO_FAN))
+#define HAS_AUTO_FAN_1 (HOTENDS > 1 && PIN_EXISTS(E1_AUTO_FAN))
+#define HAS_AUTO_FAN_2 (HOTENDS > 2 && PIN_EXISTS(E2_AUTO_FAN))
+#define HAS_AUTO_FAN_3 (HOTENDS > 3 && PIN_EXISTS(E3_AUTO_FAN))
+#define HAS_AUTO_FAN_4 (HOTENDS > 4 && PIN_EXISTS(E4_AUTO_FAN))
+#define HAS_AUTO_FAN (HAS_AUTO_FAN_0 || HAS_AUTO_FAN_1 || HAS_AUTO_FAN_2 || HAS_AUTO_FAN_3)
+#define AUTO_1_IS_0 (E1_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
+#define AUTO_2_IS_0 (E2_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
+#define AUTO_2_IS_1 (E2_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
+#define AUTO_3_IS_0 (E3_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
+#define AUTO_3_IS_1 (E3_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
+#define AUTO_3_IS_2 (E3_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
+#define AUTO_4_IS_0 (E4_AUTO_FAN_PIN == E0_AUTO_FAN_PIN)
+#define AUTO_4_IS_1 (E4_AUTO_FAN_PIN == E1_AUTO_FAN_PIN)
+#define AUTO_4_IS_2 (E4_AUTO_FAN_PIN == E2_AUTO_FAN_PIN)
+#define AUTO_4_IS_3 (E4_AUTO_FAN_PIN == E3_AUTO_FAN_PIN)
+
+// Other fans
+#define HAS_FAN0 (PIN_EXISTS(FAN))
+#define HAS_FAN1 (PIN_EXISTS(FAN1) && CONTROLLER_FAN_PIN != FAN1_PIN && E0_AUTO_FAN_PIN != FAN1_PIN && E1_AUTO_FAN_PIN != FAN1_PIN && E2_AUTO_FAN_PIN != FAN1_PIN && E3_AUTO_FAN_PIN != FAN1_PIN)
+#define HAS_FAN2 (PIN_EXISTS(FAN2) && CONTROLLER_FAN_PIN != FAN2_PIN && E0_AUTO_FAN_PIN != FAN2_PIN && E1_AUTO_FAN_PIN != FAN2_PIN && E2_AUTO_FAN_PIN != FAN2_PIN && E3_AUTO_FAN_PIN != FAN2_PIN)
+#define HAS_CONTROLLER_FAN (PIN_EXISTS(CONTROLLER_FAN))
+
+// Servos
+#define HAS_SERVOS (defined(NUM_SERVOS) && NUM_SERVOS > 0)
+#define HAS_SERVO_0 (PIN_EXISTS(SERVO0))
+#define HAS_SERVO_1 (PIN_EXISTS(SERVO1))
+#define HAS_SERVO_2 (PIN_EXISTS(SERVO2))
+#define HAS_SERVO_3 (PIN_EXISTS(SERVO3))
+
+// Sensors
+#define HAS_FILAMENT_WIDTH_SENSOR (PIN_EXISTS(FILWIDTH))
+#define HAS_FIL_RUNOUT (PIN_EXISTS(FIL_RUNOUT))
+
+// User Interface
+#define HAS_HOME (PIN_EXISTS(HOME))
+#define HAS_KILL (PIN_EXISTS(KILL))
+#define HAS_SUICIDE (PIN_EXISTS(SUICIDE))
+#define HAS_PHOTOGRAPH (PIN_EXISTS(PHOTOGRAPH))
+#define HAS_BUZZER (PIN_EXISTS(BEEPER) || ENABLED(LCD_USE_I2C_BUZZER))
+#define HAS_CASE_LIGHT (PIN_EXISTS(CASE_LIGHT) && ENABLED(CASE_LIGHT_ENABLE))
+
+// Digital control
+#define HAS_MICROSTEPS (HAS_X_MICROSTEPS || HAS_Y_MICROSTEPS || HAS_Z_MICROSTEPS || HAS_E0_MICROSTEPS || HAS_E1_MICROSTEPS || HAS_E2_MICROSTEPS || HAS_E3_MICROSTEPS || HAS_E4_MICROSTEPS)
+#define HAS_STEPPER_RESET (PIN_EXISTS(STEPPER_RESET))
+#define HAS_DIGIPOTSS (PIN_EXISTS(DIGIPOTSS))
+#define HAS_MOTOR_CURRENT_PWM (PIN_EXISTS(MOTOR_CURRENT_PWM_XY) || PIN_EXISTS(MOTOR_CURRENT_PWM_Z) || PIN_EXISTS(MOTOR_CURRENT_PWM_E))
 
-  #if HAS_SERVOS
-    #ifndef Z_ENDSTOP_SERVO_NR
-      #define Z_ENDSTOP_SERVO_NR -1
-    #endif
-  #endif
+/**
+ * This setting is also used by M109 when trying to calculate
+ * a ballpark safe margin to prevent wait-forever situation.
+ */
+#ifndef EXTRUDE_MINTEMP
+  #define EXTRUDE_MINTEMP 170
+#endif
 
-  #define PROBE_PIN_CONFIGURED (HAS_Z_MIN_PROBE_PIN || (HAS_Z_MIN && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)))
-  #define HAS_BED_PROBE (PROBE_SELECTED && PROBE_PIN_CONFIGURED && DISABLED(PROBE_MANUALLY))
+/**
+ * Helper Macros for heaters and extruder fan
+ */
+#define WRITE_HEATER_0P(v) WRITE(HEATER_0_PIN, v)
+#if HOTENDS > 1 || ENABLED(HEATERS_PARALLEL)
+  #define WRITE_HEATER_1(v) WRITE(HEATER_1_PIN, v)
+  #if HOTENDS > 2
+    #define WRITE_HEATER_2(v) WRITE(HEATER_2_PIN, v)
+    #if HOTENDS > 3
+      #define WRITE_HEATER_3(v) WRITE(HEATER_3_PIN, v)
+      #if HOTENDS > 4
+        #define WRITE_HEATER_4(v) WRITE(HEATER_4_PIN, v)
+      #endif // HOTENDS > 4
+    #endif // HOTENDS > 3
+  #endif // HOTENDS > 2
+#endif // HOTENDS > 1
+#if ENABLED(HEATERS_PARALLEL)
+  #define WRITE_HEATER_0(v) { WRITE_HEATER_0P(v); WRITE_HEATER_1(v); }
+#else
+  #define WRITE_HEATER_0(v) WRITE_HEATER_0P(v)
+#endif
 
-  #if ENABLED(Z_PROBE_ALLEN_KEY)
-    #define PROBE_IS_TRIGGERED_WHEN_STOWED_TEST
+/**
+ * Heated bed requires settings
+ */
+#if HAS_HEATER_BED
+  #ifndef MAX_BED_POWER
+    #define MAX_BED_POWER 255
   #endif
-
-  /**
-   * Bed Probe dependencies
-   */
-  #if HAS_BED_PROBE
-    #if ENABLED(ENDSTOPPULLUPS) && HAS_Z_MIN_PROBE_PIN
-      #define ENDSTOPPULLUP_ZMIN_PROBE
-    #endif
-    #ifndef Z_PROBE_OFFSET_RANGE_MIN
-      #define Z_PROBE_OFFSET_RANGE_MIN -20
-    #endif
-    #ifndef Z_PROBE_OFFSET_RANGE_MAX
-      #define Z_PROBE_OFFSET_RANGE_MAX 20
-    #endif
-    #ifndef XY_PROBE_SPEED
-      #ifdef HOMING_FEEDRATE_XY
-        #define XY_PROBE_SPEED HOMING_FEEDRATE_XY
-      #else
-        #define XY_PROBE_SPEED 4000
-      #endif
-    #endif
-    #if Z_CLEARANCE_BETWEEN_PROBES > Z_CLEARANCE_DEPLOY_PROBE
-      #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_BETWEEN_PROBES
-    #else
-      #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_DEPLOY_PROBE
-    #endif
-  #else
-    #undef X_PROBE_OFFSET_FROM_EXTRUDER
-    #undef Y_PROBE_OFFSET_FROM_EXTRUDER
-    #undef Z_PROBE_OFFSET_FROM_EXTRUDER
-    #define X_PROBE_OFFSET_FROM_EXTRUDER 0
-    #define Y_PROBE_OFFSET_FROM_EXTRUDER 0
-    #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
+  #ifndef HEATER_BED_INVERTING
+    #define HEATER_BED_INVERTING false
   #endif
+  #define WRITE_HEATER_BED(v) WRITE(HEATER_BED_PIN, (v) ^ HEATER_BED_INVERTING)
+#endif
 
-  /**
-   * Heater & Fan Pausing
-   */
-  #if FAN_COUNT == 0
-    #undef PROBING_FANS_OFF
-  #endif
-  #define QUIET_PROBING (HAS_BED_PROBE && (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0))
-  #define HEATER_IDLE_HANDLER (ENABLED(ADVANCED_PAUSE_FEATURE) || ENABLED(PROBING_HEATERS_OFF))
+/**
+ * Up to 3 PWM fans
+ */
+#if HAS_FAN2
+  #define FAN_COUNT 3
+#elif HAS_FAN1
+  #define FAN_COUNT 2
+#elif HAS_FAN0
+  #define FAN_COUNT 1
+#else
+  #define FAN_COUNT 0
+#endif
+
+#if HAS_FAN0
+  #define WRITE_FAN(v) WRITE(FAN_PIN, v)
+  #define WRITE_FAN0(v) WRITE_FAN(v)
+#endif
+#if HAS_FAN1
+  #define WRITE_FAN1(v) WRITE(FAN1_PIN, v)
+#endif
+#if HAS_FAN2
+  #define WRITE_FAN2(v) WRITE(FAN2_PIN, v)
+#endif
+#define WRITE_FAN_N(n, v) WRITE_FAN##n(v)
 
-  /**
-   * Only constrain Z on DELTA / SCARA machines
-   */
-  #if IS_KINEMATIC
-    #undef MIN_SOFTWARE_ENDSTOP_X
-    #undef MIN_SOFTWARE_ENDSTOP_Y
-    #undef MAX_SOFTWARE_ENDSTOP_X
-    #undef MAX_SOFTWARE_ENDSTOP_Y
-  #endif
+/**
+ * Part Cooling fan multipliexer
+ */
+#define HAS_FANMUX PIN_EXISTS(FANMUX0)
 
-  /**
-   * Delta endstops, radius/rod trimmers, angle trimmers
-   */
-  #if ENABLED(DELTA)
-    #ifndef DELTA_CALIBRATION_RADIUS
-      #define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - 10
-    #endif
-    #ifndef DELTA_ENDSTOP_ADJ
-      #define DELTA_ENDSTOP_ADJ { 0, 0, 0 }
-    #endif
-    #ifndef DELTA_TOWER_ANGLE_TRIM
-      #define DELTA_TOWER_ANGLE_TRIM {0, 0, 0}
-    #endif
-    #ifndef DELTA_RADIUS_TRIM_TOWER
-      #define DELTA_RADIUS_TRIM_TOWER {0, 0, 0}
-    #endif
-    #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER
-      #define DELTA_DIAGONAL_ROD_TRIM_TOWER {0, 0, 0}
-    #endif
+/**
+ * Servos and probes
+ */
+
+#if HAS_SERVOS
+  #ifndef Z_ENDSTOP_SERVO_NR
+    #define Z_ENDSTOP_SERVO_NR -1
   #endif
+#endif
 
-  /**
-   * Set granular options based on the specific type of leveling
-   */
+#define PROBE_PIN_CONFIGURED (HAS_Z_MIN_PROBE_PIN || (HAS_Z_MIN && ENABLED(Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN)))
+#define HAS_BED_PROBE (PROBE_SELECTED && PROBE_PIN_CONFIGURED && DISABLED(PROBE_MANUALLY))
 
-  #define UBL_DELTA  (ENABLED(AUTO_BED_LEVELING_UBL) && (ENABLED(DELTA) || ENABLED(UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN)))
-  #define ABL_PLANAR (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_3POINT))
-  #define ABL_GRID   (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR))
-  #define OLDSCHOOL_ABL         (ABL_PLANAR || ABL_GRID)
-  #define HAS_ABL               (OLDSCHOOL_ABL || ENABLED(AUTO_BED_LEVELING_UBL))
-  #define HAS_LEVELING          (HAS_ABL || ENABLED(MESH_BED_LEVELING))
-  #define HAS_AUTOLEVEL         (HAS_ABL && DISABLED(PROBE_MANUALLY))
-  #define HAS_MESH              (ENABLED(AUTO_BED_LEVELING_BILINEAR) || ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(MESH_BED_LEVELING))
-  #define PLANNER_LEVELING      (OLDSCHOOL_ABL || ENABLED(MESH_BED_LEVELING) || UBL_DELTA)
-  #define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
-  #if HAS_PROBING_PROCEDURE
-    #define PROBE_BED_WIDTH abs(RIGHT_PROBE_BED_POSITION - (LEFT_PROBE_BED_POSITION))
-    #define PROBE_BED_HEIGHT abs(BACK_PROBE_BED_POSITION - (FRONT_PROBE_BED_POSITION))
-  #endif
+#if ENABLED(Z_PROBE_ALLEN_KEY)
+  #define PROBE_IS_TRIGGERED_WHEN_STOWED_TEST
+#endif
 
-  /**
-   * Buzzer/Speaker
-   */
-  #if ENABLED(LCD_USE_I2C_BUZZER)
-    #ifndef LCD_FEEDBACK_FREQUENCY_HZ
-      #define LCD_FEEDBACK_FREQUENCY_HZ 1000
-    #endif
-    #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
-      #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
-    #endif
-  #else
-    #ifndef LCD_FEEDBACK_FREQUENCY_HZ
-      #define LCD_FEEDBACK_FREQUENCY_HZ 5000
-    #endif
-    #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
-      #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
-    #endif
+/**
+ * Bed Probe dependencies
+ */
+#if HAS_BED_PROBE
+  #if ENABLED(ENDSTOPPULLUPS) && HAS_Z_MIN_PROBE_PIN
+    #define ENDSTOPPULLUP_ZMIN_PROBE
   #endif
-
-  /**
-   * VIKI2, miniVIKI, and AZSMZ_12864 require DOGLCD_SCK and DOGLCD_MOSI to be defined.
-   */
-  #if ENABLED(VIKI2) || ENABLED(miniVIKI) || ENABLED(AZSMZ_12864)
-    #ifndef DOGLCD_SCK
-      #define DOGLCD_SCK  SCK_PIN
-    #endif
-    #ifndef DOGLCD_MOSI
-      #define DOGLCD_MOSI MOSI_PIN
-    #endif
+  #ifndef Z_PROBE_OFFSET_RANGE_MIN
+    #define Z_PROBE_OFFSET_RANGE_MIN -20
   #endif
-
-  /**
-   * Z_HOMING_HEIGHT / Z_CLEARANCE_BETWEEN_PROBES
-   */
-  #ifndef Z_HOMING_HEIGHT
-    #ifndef Z_CLEARANCE_BETWEEN_PROBES
-      #define Z_HOMING_HEIGHT 0
+  #ifndef Z_PROBE_OFFSET_RANGE_MAX
+    #define Z_PROBE_OFFSET_RANGE_MAX 20
+  #endif
+  #ifndef XY_PROBE_SPEED
+    #ifdef HOMING_FEEDRATE_XY
+      #define XY_PROBE_SPEED HOMING_FEEDRATE_XY
     #else
-      #define Z_HOMING_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
+      #define XY_PROBE_SPEED 4000
     #endif
   #endif
-  #ifndef Z_CLEARANCE_BETWEEN_PROBES
-    #define Z_CLEARANCE_BETWEEN_PROBES Z_HOMING_HEIGHT
-  #endif
-  #if Z_CLEARANCE_BETWEEN_PROBES > Z_HOMING_HEIGHT
-    #define MANUAL_PROBE_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
+  #if Z_CLEARANCE_BETWEEN_PROBES > Z_CLEARANCE_DEPLOY_PROBE
+    #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_BETWEEN_PROBES
   #else
-    #define MANUAL_PROBE_HEIGHT Z_HOMING_HEIGHT
+    #define _Z_CLEARANCE_DEPLOY_PROBE Z_CLEARANCE_DEPLOY_PROBE
   #endif
+#else
+  #undef X_PROBE_OFFSET_FROM_EXTRUDER
+  #undef Y_PROBE_OFFSET_FROM_EXTRUDER
+  #undef Z_PROBE_OFFSET_FROM_EXTRUDER
+  #define X_PROBE_OFFSET_FROM_EXTRUDER 0
+  #define Y_PROBE_OFFSET_FROM_EXTRUDER 0
+  #define Z_PROBE_OFFSET_FROM_EXTRUDER 0
+#endif
 
-  /**
-   * Bed Probing rectangular bounds
-   * These can be further constrained in code for Delta and SCARA
-   */
-  #if ENABLED(DELTA)
-    #ifndef DELTA_PROBEABLE_RADIUS
-      #define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
-    #endif
-    // Probing points may be verified at compile time within the radius
-    // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
-    // so that may be added to SanityCheck.h in the future.
-    #define MIN_PROBE_X (X_CENTER - (DELTA_PROBEABLE_RADIUS))
-    #define MIN_PROBE_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS))
-    #define MAX_PROBE_X (X_CENTER +  DELTA_PROBEABLE_RADIUS)
-    #define MAX_PROBE_Y (Y_CENTER +  DELTA_PROBEABLE_RADIUS)
-  #elif IS_SCARA
-    #define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
-    #define MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS))
-    #define MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS))
-    #define MAX_PROBE_X (X_CENTER +  SCARA_PRINTABLE_RADIUS)
-    #define MAX_PROBE_Y (Y_CENTER +  SCARA_PRINTABLE_RADIUS)
-  #else
-    // Boundaries for Cartesian probing based on bed limits
-    #define MIN_PROBE_X (max(X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MIN_BED))
-    #define MIN_PROBE_Y (max(Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MIN_BED))
-    #define MAX_PROBE_X (min(X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MAX_BED))
-    #define MAX_PROBE_Y (min(Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MAX_BED))
-  #endif
+/**
+ * Heater & Fan Pausing
+ */
+#if FAN_COUNT == 0
+  #undef PROBING_FANS_OFF
+#endif
+#define QUIET_PROBING (HAS_BED_PROBE && (ENABLED(PROBING_HEATERS_OFF) || ENABLED(PROBING_FANS_OFF) || DELAY_BEFORE_PROBING > 0))
+#define HEATER_IDLE_HANDLER (ENABLED(ADVANCED_PAUSE_FEATURE) || ENABLED(PROBING_HEATERS_OFF))
 
-  // Stepper pulse duration, in cycles
-  #define STEP_PULSE_CYCLES ((MINIMUM_STEPPER_PULSE) * CYCLES_PER_MICROSECOND)
-  #ifdef CPU_32_BIT
-    // Add additional delay for between direction signal and pulse signal of stepper
-    #ifndef STEPPER_DIRECTION_DELAY
-      #define STEPPER_DIRECTION_DELAY 0 // time in microseconds
-    #endif
-  #endif
+/**
+ * Only constrain Z on DELTA / SCARA machines
+ */
+#if IS_KINEMATIC
+  #undef MIN_SOFTWARE_ENDSTOP_X
+  #undef MIN_SOFTWARE_ENDSTOP_Y
+  #undef MAX_SOFTWARE_ENDSTOP_X
+  #undef MAX_SOFTWARE_ENDSTOP_Y
+#endif
 
-  #ifndef __SAM3X8E__ //todo: hal: broken hal encapsulation
-    #undef UI_VOLTAGE_LEVEL
-    #undef RADDS_DISPLAY
-    #undef MOTOR_CURRENT
+/**
+ * Delta endstops, radius/rod trimmers, angle trimmers
+ */
+#if ENABLED(DELTA)
+  #ifndef DELTA_CALIBRATION_RADIUS
+    #define DELTA_CALIBRATION_RADIUS DELTA_PRINTABLE_RADIUS - 10
   #endif
-
-  #if ENABLED(SDCARD_SORT_ALPHA)
-    #define HAS_FOLDER_SORTING (FOLDER_SORTING || ENABLED(SDSORT_GCODE))
+  #ifndef DELTA_ENDSTOP_ADJ
+    #define DELTA_ENDSTOP_ADJ { 0, 0, 0 }
   #endif
-
-  // Updated G92 behavior shifts the workspace
-  #define HAS_POSITION_SHIFT DISABLED(NO_WORKSPACE_OFFSETS)
-  // The home offset also shifts the coordinate space
-  #define HAS_HOME_OFFSET (DISABLED(NO_WORKSPACE_OFFSETS) || ENABLED(DELTA))
-  // Either offset yields extra calculations on all moves
-  #define HAS_WORKSPACE_OFFSET (HAS_POSITION_SHIFT || HAS_HOME_OFFSET)
-  // M206 doesn't apply to DELTA
-  #define HAS_M206_COMMAND (HAS_HOME_OFFSET && DISABLED(DELTA))
-
-  // LCD timeout to status screen default is 15s
-  #ifndef LCD_TIMEOUT_TO_STATUS
-    #define LCD_TIMEOUT_TO_STATUS 15000
+  #ifndef DELTA_TOWER_ANGLE_TRIM
+    #define DELTA_TOWER_ANGLE_TRIM {0, 0, 0}
   #endif
-
-  /**
-   * DELTA_SEGMENT_MIN_LENGTH for UBL_DELTA
-   */
-  #if UBL_DELTA
-    #ifndef DELTA_SEGMENT_MIN_LENGTH
-      #if IS_SCARA
-        #define DELTA_SEGMENT_MIN_LENGTH 0.25 // SCARA minimum segment size is 0.25mm
-      #elif ENABLED(DELTA)
-        #define DELTA_SEGMENT_MIN_LENGTH 0.10 // mm (still subject to DELTA_SEGMENTS_PER_SECOND)
-      #else // CARTESIAN
-        #define DELTA_SEGMENT_MIN_LENGTH 1.00 // mm (similar to G2/G3 arc segmentation)
-      #endif
-    #endif
+  #ifndef DELTA_RADIUS_TRIM_TOWER
+    #define DELTA_RADIUS_TRIM_TOWER {0, 0, 0}
+  #endif
+  #ifndef DELTA_DIAGONAL_ROD_TRIM_TOWER
+    #define DELTA_DIAGONAL_ROD_TRIM_TOWER {0, 0, 0}
   #endif
+#endif
 
-  // Shorthand
-  #define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y))
+/**
+ * Set granular options based on the specific type of leveling
+ */
 
-  // Add commands that need sub-codes to this list
-  #define USE_GCODE_SUBCODES ENABLED(G38_PROBE_TARGET)
+#define UBL_DELTA  (ENABLED(AUTO_BED_LEVELING_UBL) && (ENABLED(DELTA) || ENABLED(UBL_GRANULAR_SEGMENTATION_FOR_CARTESIAN)))
+#define ABL_PLANAR (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_3POINT))
+#define ABL_GRID   (ENABLED(AUTO_BED_LEVELING_LINEAR) || ENABLED(AUTO_BED_LEVELING_BILINEAR))
+#define OLDSCHOOL_ABL         (ABL_PLANAR || ABL_GRID)
+#define HAS_ABL               (OLDSCHOOL_ABL || ENABLED(AUTO_BED_LEVELING_UBL))
+#define HAS_LEVELING          (HAS_ABL || ENABLED(MESH_BED_LEVELING))
+#define HAS_AUTOLEVEL         (HAS_ABL && DISABLED(PROBE_MANUALLY))
+#define HAS_MESH              (ENABLED(AUTO_BED_LEVELING_BILINEAR) || ENABLED(AUTO_BED_LEVELING_UBL) || ENABLED(MESH_BED_LEVELING))
+#define PLANNER_LEVELING      (OLDSCHOOL_ABL || ENABLED(MESH_BED_LEVELING) || UBL_DELTA)
+#define HAS_PROBING_PROCEDURE (HAS_ABL || ENABLED(Z_MIN_PROBE_REPEATABILITY_TEST))
+#if HAS_PROBING_PROCEDURE
+  #define PROBE_BED_WIDTH abs(RIGHT_PROBE_BED_POSITION - (LEFT_PROBE_BED_POSITION))
+  #define PROBE_BED_HEIGHT abs(BACK_PROBE_BED_POSITION - (FRONT_PROBE_BED_POSITION))
+#endif
 
-  // MESH_BED_LEVELING overrides PROBE_MANUALLY
-  #if ENABLED(MESH_BED_LEVELING)
-    #undef PROBE_MANUALLY
+/**
+ * Buzzer/Speaker
+ */
+#if ENABLED(LCD_USE_I2C_BUZZER)
+  #ifndef LCD_FEEDBACK_FREQUENCY_HZ
+    #define LCD_FEEDBACK_FREQUENCY_HZ 1000
   #endif
-
-  // Parking Extruder
-  #if ENABLED(PARKING_EXTRUDER)
-    #ifndef PARKING_EXTRUDER_GRAB_DISTANCE
-      #define PARKING_EXTRUDER_GRAB_DISTANCE 0
-    #endif
-    #ifndef PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE
-      #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE HIGH
-    #endif
+  #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
+    #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 100
+  #endif
+#else
+  #ifndef LCD_FEEDBACK_FREQUENCY_HZ
+    #define LCD_FEEDBACK_FREQUENCY_HZ 5000
+  #endif
+  #ifndef LCD_FEEDBACK_FREQUENCY_DURATION_MS
+    #define LCD_FEEDBACK_FREQUENCY_DURATION_MS 2
   #endif
+#endif
 
-  // Use float instead of double. Needs profiling.
-  #if defined(ARDUINO_ARCH_SAM) && ENABLED(DELTA_FAST_SQRT)
-    #undef ATAN2
-    #undef FABS
-    #undef POW
-    #undef SQRT
-    #undef CEIL
-    #undef FLOOR
-    #undef LROUND
-    #undef FMOD
-    #define ATAN2(y, x) atan2f(y, x)
-    #define FABS(x) fabsf(x)
-    #define POW(x, y) powf(x, y)
-    #define SQRT(x) sqrtf(x)
-    #define CEIL(x) ceilf(x)
-    #define FLOOR(x) floorf(x)
-    #define LROUND(x) lroundf(x)
-    #define FMOD(x, y) fmodf(x, y)
+/**
+ * VIKI2, miniVIKI, and AZSMZ_12864 require DOGLCD_SCK and DOGLCD_MOSI to be defined.
+ */
+#if ENABLED(VIKI2) || ENABLED(miniVIKI) || ENABLED(AZSMZ_12864)
+  #ifndef DOGLCD_SCK
+    #define DOGLCD_SCK  SCK_PIN
+  #endif
+  #ifndef DOGLCD_MOSI
+    #define DOGLCD_MOSI MOSI_PIN
   #endif
+#endif
 
-  #ifdef TEENSYDUINO
-    #undef max
-    #define max(a,b) ((a)>(b)?(a):(b))
-    #undef min
-    #define min(a,b) ((a)<(b)?(a):(b))
+/**
+ * Z_HOMING_HEIGHT / Z_CLEARANCE_BETWEEN_PROBES
+ */
+#ifndef Z_HOMING_HEIGHT
+  #ifndef Z_CLEARANCE_BETWEEN_PROBES
+    #define Z_HOMING_HEIGHT 0
+  #else
+    #define Z_HOMING_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
+  #endif
+#endif
+#ifndef Z_CLEARANCE_BETWEEN_PROBES
+  #define Z_CLEARANCE_BETWEEN_PROBES Z_HOMING_HEIGHT
+#endif
+#if Z_CLEARANCE_BETWEEN_PROBES > Z_HOMING_HEIGHT
+  #define MANUAL_PROBE_HEIGHT Z_CLEARANCE_BETWEEN_PROBES
+#else
+  #define MANUAL_PROBE_HEIGHT Z_HOMING_HEIGHT
+#endif
+
+/**
+ * Bed Probing rectangular bounds
+ * These can be further constrained in code for Delta and SCARA
+ */
+#if ENABLED(DELTA)
+  #ifndef DELTA_PROBEABLE_RADIUS
+    #define DELTA_PROBEABLE_RADIUS DELTA_PRINTABLE_RADIUS
+  #endif
+  // Probing points may be verified at compile time within the radius
+  // using static_assert(HYPOT2(X2-X1,Y2-Y1)<=sq(DELTA_PRINTABLE_RADIUS),"bad probe point!")
+  // so that may be added to SanityCheck.h in the future.
+  #define MIN_PROBE_X (X_CENTER - (DELTA_PROBEABLE_RADIUS))
+  #define MIN_PROBE_Y (Y_CENTER - (DELTA_PROBEABLE_RADIUS))
+  #define MAX_PROBE_X (X_CENTER +  DELTA_PROBEABLE_RADIUS)
+  #define MAX_PROBE_Y (Y_CENTER +  DELTA_PROBEABLE_RADIUS)
+#elif IS_SCARA
+  #define SCARA_PRINTABLE_RADIUS (SCARA_LINKAGE_1 + SCARA_LINKAGE_2)
+  #define MIN_PROBE_X (X_CENTER - (SCARA_PRINTABLE_RADIUS))
+  #define MIN_PROBE_Y (Y_CENTER - (SCARA_PRINTABLE_RADIUS))
+  #define MAX_PROBE_X (X_CENTER +  SCARA_PRINTABLE_RADIUS)
+  #define MAX_PROBE_Y (Y_CENTER +  SCARA_PRINTABLE_RADIUS)
+#else
+  // Boundaries for Cartesian probing based on bed limits
+  #define MIN_PROBE_X (max(X_MIN_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MIN_BED))
+  #define MIN_PROBE_Y (max(Y_MIN_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MIN_BED))
+  #define MAX_PROBE_X (min(X_MAX_POS + X_PROBE_OFFSET_FROM_EXTRUDER, X_MAX_BED))
+  #define MAX_PROBE_Y (min(Y_MAX_POS + Y_PROBE_OFFSET_FROM_EXTRUDER, Y_MAX_BED))
+#endif
+
+// Stepper pulse duration, in cycles
+#define STEP_PULSE_CYCLES ((MINIMUM_STEPPER_PULSE) * CYCLES_PER_MICROSECOND)
+#ifdef CPU_32_BIT
+  // Add additional delay for between direction signal and pulse signal of stepper
+  #ifndef STEPPER_DIRECTION_DELAY
+    #define STEPPER_DIRECTION_DELAY 0 // time in microseconds
+  #endif
+#endif
+
+#ifndef __SAM3X8E__ //todo: hal: broken hal encapsulation
+  #undef UI_VOLTAGE_LEVEL
+  #undef RADDS_DISPLAY
+  #undef MOTOR_CURRENT
+#endif
+
+#if ENABLED(SDCARD_SORT_ALPHA)
+  #define HAS_FOLDER_SORTING (FOLDER_SORTING || ENABLED(SDSORT_GCODE))
+#endif
+
+// Updated G92 behavior shifts the workspace
+#define HAS_POSITION_SHIFT DISABLED(NO_WORKSPACE_OFFSETS)
+// The home offset also shifts the coordinate space
+#define HAS_HOME_OFFSET (DISABLED(NO_WORKSPACE_OFFSETS) || ENABLED(DELTA))
+// Either offset yields extra calculations on all moves
+#define HAS_WORKSPACE_OFFSET (HAS_POSITION_SHIFT || HAS_HOME_OFFSET)
+// M206 doesn't apply to DELTA
+#define HAS_M206_COMMAND (HAS_HOME_OFFSET && DISABLED(DELTA))
+
+// LCD timeout to status screen default is 15s
+#ifndef LCD_TIMEOUT_TO_STATUS
+  #define LCD_TIMEOUT_TO_STATUS 15000
+#endif
 
-    #define NOT_A_PIN 0 // For PINS_DEBUGGING
+/**
+ * DELTA_SEGMENT_MIN_LENGTH for UBL_DELTA
+ */
+#if UBL_DELTA
+  #ifndef DELTA_SEGMENT_MIN_LENGTH
+    #if IS_SCARA
+      #define DELTA_SEGMENT_MIN_LENGTH 0.25 // SCARA minimum segment size is 0.25mm
+    #elif ENABLED(DELTA)
+      #define DELTA_SEGMENT_MIN_LENGTH 0.10 // mm (still subject to DELTA_SEGMENTS_PER_SECOND)
+    #else // CARTESIAN
+      #define DELTA_SEGMENT_MIN_LENGTH 1.00 // mm (similar to G2/G3 arc segmentation)
+    #endif
   #endif
+#endif
+
+// Shorthand
+#define GRID_MAX_POINTS ((GRID_MAX_POINTS_X) * (GRID_MAX_POINTS_Y))
+
+// Add commands that need sub-codes to this list
+#define USE_GCODE_SUBCODES ENABLED(G38_PROBE_TARGET)
+
+// MESH_BED_LEVELING overrides PROBE_MANUALLY
+#if ENABLED(MESH_BED_LEVELING)
+  #undef PROBE_MANUALLY
+#endif
+
+// Parking Extruder
+#if ENABLED(PARKING_EXTRUDER)
+  #ifndef PARKING_EXTRUDER_GRAB_DISTANCE
+    #define PARKING_EXTRUDER_GRAB_DISTANCE 0
+  #endif
+  #ifndef PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE
+    #define PARKING_EXTRUDER_SOLENOIDS_PINS_ACTIVE HIGH
+  #endif
+#endif
+
+// Use float instead of double. Needs profiling.
+#if defined(ARDUINO_ARCH_SAM) && ENABLED(DELTA_FAST_SQRT)
+  #undef ATAN2
+  #undef FABS
+  #undef POW
+  #undef SQRT
+  #undef CEIL
+  #undef FLOOR
+  #undef LROUND
+  #undef FMOD
+  #define ATAN2(y, x) atan2f(y, x)
+  #define FABS(x) fabsf(x)
+  #define POW(x, y) powf(x, y)
+  #define SQRT(x) sqrtf(x)
+  #define CEIL(x) ceilf(x)
+  #define FLOOR(x) floorf(x)
+  #define LROUND(x) lroundf(x)
+  #define FMOD(x, y) fmodf(x, y)
+#endif
+
+#ifdef TEENSYDUINO
+  #undef max
+  #define max(a,b) ((a)>(b)?(a):(b))
+  #undef min
+  #define min(a,b) ((a)<(b)?(a):(b))
+
+  #define NOT_A_PIN 0 // For PINS_DEBUGGING
+#endif
+
 #endif // CONDITIONALS_POST_H
diff --git a/Marlin/src/inc/SanityCheck.h b/Marlin/src/inc/SanityCheck.h
index f75be67e96..4b667f0c74 100644
--- a/Marlin/src/inc/SanityCheck.h
+++ b/Marlin/src/inc/SanityCheck.h
@@ -26,6 +26,9 @@
  * Test configuration values for errors at compile-time.
  */
 
+#ifndef _SANITYCHECK_H_
+#define _SANITYCHECK_H_
+
 /**
  * Require gcc 4.7 or newer (first included with Arduino 1.6.8) for C++11 features.
  */
@@ -1361,5 +1364,6 @@ static_assert(COUNT(sanity_arr_1) <= XYZE_N, "DEFAULT_AXIS_STEPS_PER_UNIT has to
 static_assert(COUNT(sanity_arr_2) <= XYZE_N, "DEFAULT_MAX_FEEDRATE has too many elements.");
 static_assert(COUNT(sanity_arr_3) <= XYZE_N, "DEFAULT_MAX_ACCELERATION has too many elements.");
 
-
 #include "../HAL/HAL_SanityCheck.h"  // get CPU specific checks
+
+#endif // _SANITYCHECK_H_
diff --git a/Marlin/src/inc/Version.h b/Marlin/src/inc/Version.h
index fa628f4216..3731b476fe 100644
--- a/Marlin/src/inc/Version.h
+++ b/Marlin/src/inc/Version.h
@@ -20,6 +20,11 @@
  *
  */
 
+#ifndef _VERSION_H_
+#define _VERSION_H_
+
+#include "MarlinConfig.h"
+
 /**
  * This file is the standard Marlin version identifier file, all fields can be
  * overriden by the ones defined on _Version.h by using the Configuration.h
@@ -48,7 +53,7 @@
    * here we define this default string as the date where the latest release
    * version was tagged.
    */
-  #define STRING_DISTRIBUTION_DATE "2017-07-27 12:00"
+  #define STRING_DISTRIBUTION_DATE "2017-10-19 12:00"
 
   /**
    * Required minimum Configuration.h and Configuration_adv.h file versions.
@@ -92,3 +97,5 @@
   #define WEBSITE_URL "http://marlinfw.org"
 
 #endif // USE_AUTOMATIC_VERSIONING
+
+#endif // _VERSION_H_
-- 
GitLab