diff --git a/Marlin/src/HAL/HAL_AVR/HAL.h b/Marlin/src/HAL/HAL_AVR/HAL.h
index 02aafc0fbdd40e3f468d0b43ea56843a2c0295ed..3ce7d53ef16e55bdb3b333a224738213d7728d10 100644
--- a/Marlin/src/HAL/HAL_AVR/HAL.h
+++ b/Marlin/src/HAL/HAL_AVR/HAL.h
@@ -34,7 +34,7 @@
 #include <avr/interrupt.h>
 #include <avr/io.h>
 
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio_AVR.h"
 #include "watchdog_AVR.h"
 #include "math_AVR.h"
diff --git a/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
index 293955937f0ad9d77afb0a0a1e65ed3ba6827c20..6efdc6e3e5039f05cba4139665e31c02e4f44cf7 100644
--- a/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_AVR/persistent_store_eeprom.cpp
@@ -25,7 +25,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 bool PersistentStore::access_start() { return true; }
 bool PersistentStore::access_finish() { return true; }
diff --git a/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..96062e2c42e4108f3a94decb9a993777cd77e9eb
--- /dev/null
+++ b/Marlin/src/HAL/HAL_AVR/persistent_store_impl.cpp
@@ -0,0 +1,51 @@
+#ifdef __AVR__
+
+#include "../shared/persistent_store_api.h"
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(EEPROM_SETTINGS)
+
+namespace HAL {
+namespace PersistentStore {
+
+bool access_start() { return true; }
+bool access_finish() { return true; }
+
+bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+  while (size--) {
+    uint8_t * const p = (uint8_t * const)pos;
+    uint8_t v = *value;
+    // EEPROM has only ~100,000 write cycles,
+    // so only write bytes that have changed!
+    if (v != eeprom_read_byte(p)) {
+      eeprom_write_byte(p, v);
+      if (eeprom_read_byte(p) != v) {
+        SERIAL_ECHO_START();
+        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
+        return true;
+      }
+    }
+    crc16(crc, &v, 1);
+    pos++;
+    value++;
+  };
+  return false;
+}
+
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+  do {
+    uint8_t c = eeprom_read_byte((unsigned char*)pos);
+    if (writing) *value = c;
+    crc16(crc, &c, 1);
+    pos++;
+    value++;
+  } while (--size);
+  return false;  // always assume success for AVR's
+}
+
+}
+}
+
+#endif // EEPROM_SETTINGS
+#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp b/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp
index c02dd4c203b52a075cf244aeea37fa3b3a60d51b..ea227b195640fcbd37a5f61f71b793e99e836a68 100644
--- a/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp
+++ b/Marlin/src/HAL/HAL_AVR/servo_AVR.cpp
@@ -60,8 +60,8 @@
 #include <avr/interrupt.h>
 #include <Arduino.h>
 
-#include "../servo.h"
-#include "../servo_private.h"
+#include "../shared/servo.h"
+#include "../shared/servo_private.h"
 
 static volatile int8_t Channel[_Nbr_16timers];              // counter for the servo being pulsed for each timer (or -1 if refresh interval)
 
diff --git a/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp b/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp
index 466556554416993fade0fbd4857f29d171aa5373..b852af9fa3a7b4b5d36534be6301d551c51863d3 100644
--- a/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/EepromEmulation_Due.cpp
@@ -31,7 +31,7 @@
 
 #ifdef ARDUINO_ARCH_SAM
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 #include "../../inc/MarlinConfig.h"
 
 #if ENABLED(EEPROM_SETTINGS) && DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
diff --git a/Marlin/src/HAL/HAL_DUE/HAL.h b/Marlin/src/HAL/HAL_DUE/HAL.h
index c0f8141e5b8fac1f3e4039397ecfea438eba1efb..7cba8097ce16ec4960aac588ff0500796343ccdf 100644
--- a/Marlin/src/HAL/HAL_DUE/HAL.h
+++ b/Marlin/src/HAL/HAL_DUE/HAL.h
@@ -35,8 +35,8 @@
 
 #include <Arduino.h>
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio_Due.h"
 #include "watchdog_Due.h"
 #include "HAL_timers_Due.h"
diff --git a/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp b/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
index 84c0f8f4bf7ecc0f16ddc028b9f317431e9eae88..a45306e3169d94e95ee41903fdd5225560d810a8 100644
--- a/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/HAL_spi_Due.cpp
@@ -42,7 +42,7 @@
 // --------------------------------------------------------------------------
 
 #include "../../inc/MarlinConfig.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 // --------------------------------------------------------------------------
 // Public Variables
diff --git a/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp b/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
index 84c48999235b61aae8c93d5737f3b067f8578022..a9c34d7728e89a66cc0c38f2bd367a0eb73ab4e9 100644
--- a/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
+++ b/Marlin/src/HAL/HAL_DUE/Servo_Due.cpp
@@ -46,7 +46,7 @@
 
 #include <Arduino.h>
 #include "../servo.h"
-#include "../servo_private.h"
+#include "../shared/servo_private.h"
 
 static volatile int8_t Channel[_Nbr_16timers];              // counter for the servo being pulsed for each timer (or -1 if refresh interval)
 
diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
index 3bf0f443b377156f947a4ba519647279cad93195..3af0b0aa895df95b536dab79d262ea3947d77377 100644
--- a/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_DUE/persistent_store_eeprom.cpp
@@ -22,12 +22,12 @@
  */
 #ifdef ARDUINO_ARCH_SAM
 
-#include "../persistent_store_api.h"
-
-#include "../../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfigPre.h"
 
 #if ENABLED(EEPROM_SETTINGS)
 
+#include "../shared/persistent_store_api.h"
+
 extern void eeprom_flush(void);
 
 bool PersistentStore::access_start() { return true; }
diff --git a/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..b644b2e172bf24c3ede2023a41776bf438834243
--- /dev/null
+++ b/Marlin/src/HAL/HAL_DUE/persistent_store_impl.cpp
@@ -0,0 +1,59 @@
+#ifdef ARDUINO_ARCH_SAM
+
+#include "../shared/persistent_store_api.h"
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(EEPROM_SETTINGS)
+
+extern void eeprom_flush(void);
+
+namespace HAL {
+namespace PersistentStore {
+
+bool access_start() { return true; }
+
+bool access_finish() {
+  #if DISABLED(I2C_EEPROM) && DISABLED(SPI_EEPROM)
+    eeprom_flush();
+  #endif
+  return true;
+}
+
+bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+  while (size--) {
+    uint8_t * const p = (uint8_t * const)pos;
+    uint8_t v = *value;
+    // EEPROM has only ~100,000 write cycles,
+    // so only write bytes that have changed!
+    if (v != eeprom_read_byte(p)) {
+      eeprom_write_byte(p, v);
+      if (eeprom_read_byte(p) != v) {
+        SERIAL_ECHO_START();
+        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
+        return true;
+      }
+    }
+    crc16(crc, &v, 1);
+    pos++;
+    value++;
+  };
+  return false;
+}
+
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+  do {
+    uint8_t c = eeprom_read_byte((unsigned char*)pos);
+    if (writing) *value = c;
+    crc16(crc, &c, 1);
+    pos++;
+    value++;
+  } while (--size);
+  return false;
+}
+
+}
+}
+
+#endif // EEPROM_SETTINGS
+#endif // __AVR__
diff --git a/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp b/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
index df33f9db626a2d8e2a31684894ab369bf8101f33..243033e68b012aafd43c8b949e6323589b774216 100644
--- a/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/HAL_DUE/u8g_com_HAL_DUE_st7920_sw_spi.cpp
@@ -61,7 +61,7 @@
 
 #include <U8glib.h>
 #include <Arduino.h>
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 void u8g_SetPIOutput_DUE(u8g_t *u8g, uint8_t pin_index) {
    PIO_Configure(g_APinDescription[u8g->pin_list[pin_index]].pPort, PIO_OUTPUT_1,
diff --git a/Marlin/src/HAL/HAL_ESP32/HAL.h b/Marlin/src/HAL/HAL_ESP32/HAL.h
index 28e75b332e6fbe4075b23111c4e1396405659f03..106299295aa9cc9d5c6fcb63384e34dfc90284c0 100644
--- a/Marlin/src/HAL/HAL_ESP32/HAL.h
+++ b/Marlin/src/HAL/HAL_ESP32/HAL.h
@@ -40,8 +40,8 @@
 #undef DISABLED
 #define DISABLED(b) (!_CAT(SWITCH_ENABLED_, b))
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_ESP32.h"
 #include "watchdog_ESP32.h"
diff --git a/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp b/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp
index e59e1f90de7efa58cfb009a030ea8faa0976161a..c93227822d0592b896c0fdf535b5b8ca0e126836 100644
--- a/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp
+++ b/Marlin/src/HAL/HAL_ESP32/HAL_spi_ESP32.cpp
@@ -28,7 +28,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.cpp b/Marlin/src/HAL/HAL_LPC1768/HAL.cpp
index b579aa620a35cc700b407b7e9658261eeeba3896..9bb43c2b24c2047f9edcb9d9fa143636ef0edf6d 100644
--- a/Marlin/src/HAL/HAL_LPC1768/HAL.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/HAL.cpp
@@ -21,7 +21,7 @@
 #ifdef TARGET_LPC1768
 
 #include "../../inc/MarlinConfig.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 HalSerial usb_serial;
 
diff --git a/Marlin/src/HAL/HAL_LPC1768/HAL.h b/Marlin/src/HAL/HAL_LPC1768/HAL.h
index b26581d44356de3fcf5085eff65d6a4c66c99704..5a90dafa669814b3f001e063e2c0c6f70d2d8d28 100644
--- a/Marlin/src/HAL/HAL_LPC1768/HAL.h
+++ b/Marlin/src/HAL/HAL_LPC1768/HAL.h
@@ -60,8 +60,8 @@ extern "C" volatile uint32_t _millis;
 #include <Arduino.h>
 #include <pinmapping.h>
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio.h"
 #include "watchdog.h"
 #include "serial.h"
diff --git a/Marlin/src/HAL/HAL_LPC1768/arduino.cpp b/Marlin/src/HAL/HAL_LPC1768/arduino.cpp
index abdc6b353903c03f239d2bfe394316516542c244..92efd3495a738ac5d07bf4c26019ebbd73aef8d6 100644
--- a/Marlin/src/HAL/HAL_LPC1768/arduino.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/arduino.cpp
@@ -26,7 +26,7 @@
 #include <lpc17xx_pinsel.h>
 
 #include "../../inc/MarlinConfig.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 // Interrupts
 void cli(void) { __disable_irq(); } // Disable
diff --git a/Marlin/src/HAL/HAL_LPC1768/include/SPI.h b/Marlin/src/HAL/HAL_LPC1768/include/SPI.h
index bcd2d7b54f608ab1cd5112d14085c707c83eb02c..2515634236a273b2e570aeea78699029f2185176 100644
--- a/Marlin/src/HAL/HAL_LPC1768/include/SPI.h
+++ b/Marlin/src/HAL/HAL_LPC1768/include/SPI.h
@@ -22,7 +22,7 @@
 
 #pragma once
 
-#include "../../HAL_SPI.h"
+#include "../../shared/HAL_SPI.h"
 
 #include <stdint.h>
 
diff --git a/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp b/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp
index 607ea9dcb2f6bedb7b9a3bf7693c2e129f91fc97..1d469dab3a5b0213f0b55eadbd06ff866d7760d9 100644
--- a/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/include/SoftwareSerial.cpp
@@ -37,7 +37,7 @@
 //
 //#include <WInterrupts.h>
 #include "../../../inc/MarlinConfig.h"
-#include "../../Delay.h"
+#include "../../shared/Delay.h"
 #include <stdint.h>
 #include <stdarg.h>
 #include <Arduino.h>
diff --git a/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h b/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h
index 2b4d23a54a0c79c1a45341382c0571c0cd314068..9f6d626491944ee1379a96cafd17569e99a641ab 100644
--- a/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h
+++ b/Marlin/src/HAL/HAL_LPC1768/persistent_store_api.h
@@ -19,6 +19,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 //#define FLASH_EEPROM
diff --git a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp
index c61fa4a8cefa4eec7d477e99a40ed15783867bb9..6b036ba5eab2b210ce04a1e77853ff041fd6c910 100644
--- a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_hw_spi.cpp
@@ -61,7 +61,7 @@
 
 //#include <inttypes.h>
 #include <U8glib.h>
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 #define SPI_FULL_SPEED 0
 #define SPI_HALF_SPEED 1
diff --git a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
index 700ed5946320889943236a889c9f0aab540571ca..a189b9126d0132901946ab52ccdb9350cd6d849a 100644
--- a/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
+++ b/Marlin/src/HAL/HAL_LPC1768/u8g_com_HAL_LPC1768_st7920_sw_spi.cpp
@@ -61,7 +61,7 @@
 
 #include <U8glib.h>
 #include "SoftwareSPI.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 #define SPI_SPEED 3  // About 1 MHz
 
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL.h b/Marlin/src/HAL/HAL_STM32F1/HAL.h
index 8d459b1dbb6d9d27fe6a59651a7f47eed5797bf4..8ce614e73aaffd75bd0f046cb5ad252080ac2858 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL.h
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL.h
@@ -56,8 +56,8 @@
 // Includes
 // --------------------------------------------------------------------------
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_Stm32f1.h"
 #include "watchdog_Stm32f1.h"
diff --git a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
index 59835829a783136ab4627aaac061cd44b3bff26c..58d22ac572a5ab88ea5cb2f651f691e7d43f5333 100644
--- a/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/HAL_spi_Stm32f1.cpp
@@ -37,7 +37,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp
index 779225d093e90479e36e45cb2f9c3ce79ed9fc66..cb91f12bf4d4b68241d8ccaf9e7dcce6e138e4b1 100644
--- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_flash.cpp
@@ -34,7 +34,7 @@
 // This is for EEPROM emulation in flash
 #if ENABLED(EEPROM_SETTINGS) && ENABLED(FLASH_EEPROM_EMULATION)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 #include <flash_stm32.h>
 #include <EEPROM.h>
diff --git a/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp b/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
index 26e011cf1d1b55a6cfddc4ec7e11790956d18829..f25799d311a17bbc6642b2307a459d38f16c5bd4 100644
--- a/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
+++ b/Marlin/src/HAL/HAL_STM32F1/persistent_store_sdcard.cpp
@@ -31,7 +31,8 @@
 
 #if ENABLED(EEPROM_SETTINGS) && DISABLED(FLASH_EEPROM_EMULATION)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
+
 #include "../../sd/cardreader.h"
 
 #define HAL_STM32F1_EEPROM_SIZE 4096
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL.h b/Marlin/src/HAL/HAL_STM32F4/HAL.h
index b5beefbfe191316b6f48abd742c1edff73e2a321..bf648a108bcd1635cf54fdcac22bbdf7dfe037a5 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL.h
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL.h
@@ -43,8 +43,8 @@
   #include <USBSerial.h>
 #endif
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 #include "fastio_STM32F4.h"
 #include "watchdog_STM32F4.h"
 
diff --git a/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp b/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
index 606d43f7f91e3ce90ddf50ab9579e0ee99c36a04..5e3ff4d9d98a1de383d483c5913bb76f9aeb506b 100644
--- a/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/HAL_spi_STM32F4.cpp
@@ -37,7 +37,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
index 33a92f99d3ff914cefdda1f314eaa5584ad2cc84..4a0917744dfe5ed940832cdb51d45d9b636f23df 100644
--- a/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_STM32F4/persistent_store_eeprom.cpp
@@ -23,7 +23,7 @@
 
 #if defined(STM32F4) || defined(STM32F4xx)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 #include "../../inc/MarlinConfig.h"
 
diff --git a/Marlin/src/HAL/HAL_STM32F7/HAL.h b/Marlin/src/HAL/HAL_STM32F7/HAL.h
index c594392d881e49664b8493f66ff321e40831e8ab..04588057ba50f70f2b762969b9c87ad50380c817 100644
--- a/Marlin/src/HAL/HAL_STM32F7/HAL.h
+++ b/Marlin/src/HAL/HAL_STM32F7/HAL.h
@@ -39,8 +39,8 @@
 
 #include "Arduino.h"
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_STM32F7.h"
 #include "watchdog_STM32F7.h"
diff --git a/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp b/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp
index db595eeeb247293d5560f35aa07b513f02214a0e..edf889711cbec757a8e336f3fda75c997704adfd 100644
--- a/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp
+++ b/Marlin/src/HAL/HAL_STM32F7/HAL_spi_STM32F7.cpp
@@ -37,7 +37,7 @@
 // --------------------------------------------------------------------------
 
 #include "HAL.h"
-#include "../HAL_SPI.h"
+#include "../shared/HAL_SPI.h"
 #include "pins_arduino.h"
 #include "spi_pins.h"
 #include "../../core/macros.h"
diff --git a/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp
index a765d2e68d4608b97e42973dfe3f3dee6daec6ca..c9a409ad1bcdc1157fb7c2a892a2b3466620139c 100644
--- a/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_STM32F7/persistent_store_eeprom.cpp
@@ -23,11 +23,11 @@
 
 #ifdef STM32F7
 
-#include "../../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfigPre.h"
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 
 bool PersistentStore::access_start() { return true; }
 bool PersistentStore::access_finish() { return true; }
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp
index 5bd3369e439a9bd7a08ee07c67dfe2abbb42141d..4f7f67a3bb14921c44557e503315a3cceeb9874c 100644
--- a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.cpp
@@ -26,7 +26,7 @@
 #if defined(__MK64FX512__) || defined(__MK66FX1M0__)
 
 #include "HAL.h"
-#include "../Delay.h"
+#include "../shared/Delay.h"
 
 #include <Wire.h>
 
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h
index 6a11bf93c943a771be375fc79c4c84247133872c..b60a5d28ad59877c2906c0e2c1b679980a583f84 100644
--- a/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/HAL.h
@@ -42,8 +42,8 @@
 #undef sq
 #define sq(x) ((x)*(x))
 
-#include "../math_32bit.h"
-#include "../HAL_SPI.h"
+#include "../shared/math_32bit.h"
+#include "../shared/HAL_SPI.h"
 
 #include "fastio_Teensy.h"
 #include "watchdog_Teensy.h"
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
index 871e5887745efd3b6a2c65b1276b013893d9798c..7fc9fc6f733800d3ff210741abfd53e27f924bb4 100644
--- a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_eeprom.cpp
@@ -27,7 +27,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
-#include "../persistent_store_api.h"
+#include "../shared/persistent_store_api.h"
 #include <avr/eeprom.h>
 
 bool PersistentStore::access_start() { return true; }
diff --git a/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..009cdaa504b5f3ff2605eb2a84f8cc0beb8f7528
--- /dev/null
+++ b/Marlin/src/HAL/HAL_TEENSY35_36/persistent_store_impl.cpp
@@ -0,0 +1,51 @@
+#if defined(__MK64FX512__) || defined(__MK66FX1M0__)
+
+#include "../../inc/MarlinConfig.h"
+
+#if ENABLED(EEPROM_SETTINGS)
+
+#include "../shared/persistent_store_api.h"
+
+namespace HAL {
+namespace PersistentStore {
+
+bool access_start() { return true; }
+bool access_finish() { return true; }
+
+bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) {
+  while (size--) {
+    uint8_t * const p = (uint8_t * const)pos;
+    uint8_t v = *value;
+    // EEPROM has only ~100,000 write cycles,
+    // so only write bytes that have changed!
+    if (v != eeprom_read_byte(p)) {
+      eeprom_write_byte(p, v);
+      if (eeprom_read_byte(p) != v) {
+        SERIAL_ECHO_START();
+        SERIAL_ECHOLNPGM(MSG_ERR_EEPROM_WRITE);
+        return true;
+      }
+    }
+    crc16(crc, &v, 1);
+    pos++;
+    value++;
+  };
+  return false;
+}
+
+bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc, const bool writing/*=true*/) {
+  do {
+    uint8_t c = eeprom_read_byte((unsigned char*)pos);
+    if (writing) *value = c;
+    crc16(crc, &c, 1);
+    pos++;
+    value++;
+  } while (--size);
+  return false;
+}
+
+} // PersistentStore
+} // HAL
+
+#endif // EEPROM_SETTINGS
+#endif // __MK64FX512__ || __MK66FX1M0__
diff --git a/Marlin/src/HAL/persistent_store_api.cpp b/Marlin/src/HAL/persistent_store_api.cpp
index 68afa636202dde5bb3728ca2d8eabfc9aaecbe0c..b60b75ee8e776a3904cbc030cdba1114d4f8d4c7 100644
--- a/Marlin/src/HAL/persistent_store_api.cpp
+++ b/Marlin/src/HAL/persistent_store_api.cpp
@@ -24,7 +24,7 @@
 
 #if ENABLED(EEPROM_SETTINGS)
 
-  #include "persistent_store_api.h"
+  #include "shared/persistent_store_api.h"
   PersistentStore persistentStore;
 
 #endif
diff --git a/Marlin/src/HAL/Delay.h b/Marlin/src/HAL/shared/Delay.h
similarity index 99%
rename from Marlin/src/HAL/Delay.h
rename to Marlin/src/HAL/shared/Delay.h
index 972f1e2c18be85000fa332849d0ae01e5b31d819..9b5f1aa123d7dd6dbae276fb5d68104b209344e8 100644
--- a/Marlin/src/HAL/Delay.h
+++ b/Marlin/src/HAL/shared/Delay.h
@@ -31,7 +31,7 @@
 #ifndef MARLIN_DELAY_H
 #define MARLIN_DELAY_H
 
-#include "../core/macros.h"
+#include "../../core/macros.h"
 
 #if defined(__arm__) || defined(__thumb__)
 
diff --git a/Marlin/src/HAL/HAL_SPI.h b/Marlin/src/HAL/shared/HAL_SPI.h
similarity index 100%
rename from Marlin/src/HAL/HAL_SPI.h
rename to Marlin/src/HAL/shared/HAL_SPI.h
diff --git a/Marlin/src/HAL/I2cEeprom.cpp b/Marlin/src/HAL/shared/I2cEeprom.cpp
similarity index 99%
rename from Marlin/src/HAL/I2cEeprom.cpp
rename to Marlin/src/HAL/shared/I2cEeprom.cpp
index 874b99c80a35c4ce068cf5cd37ffa1b7a7facfb0..20fe7de3417dd4f02aa271a132fac2e54ce6101e 100644
--- a/Marlin/src/HAL/I2cEeprom.cpp
+++ b/Marlin/src/HAL/shared/I2cEeprom.cpp
@@ -25,7 +25,7 @@
  * Not platform dependent.
  */
 
-#include "../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfig.h"
 
 #if ENABLED(I2C_EEPROM)
 
diff --git a/Marlin/src/HAL/SpiEeprom.cpp b/Marlin/src/HAL/shared/SpiEeprom.cpp
similarity index 98%
rename from Marlin/src/HAL/SpiEeprom.cpp
rename to Marlin/src/HAL/shared/SpiEeprom.cpp
index 6d36d1ca7e471ff4047b7d3fa7ac724551bad445..98ed612d07436a6b6c7d50f1d3dd50c247347c7b 100644
--- a/Marlin/src/HAL/SpiEeprom.cpp
+++ b/Marlin/src/HAL/shared/SpiEeprom.cpp
@@ -25,7 +25,7 @@
  * Not platform dependent.
  */
 
-#include "../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfig.h"
 
 #if ENABLED(SPI_EEPROM)
 
diff --git a/Marlin/src/HAL/math_32bit.h b/Marlin/src/HAL/shared/math_32bit.h
similarity index 97%
rename from Marlin/src/HAL/math_32bit.h
rename to Marlin/src/HAL/shared/math_32bit.h
index a59d221369bf64423b60448e8271fff03d0535b4..472dfc3b56fef1c0d9d4e4dcd0c261c1eccbb85a 100644
--- a/Marlin/src/HAL/math_32bit.h
+++ b/Marlin/src/HAL/shared/math_32bit.h
@@ -23,7 +23,7 @@
 #ifndef MATH_32BIT_H
 #define MATH_32BIT_H
 
-#include "../core/macros.h"
+#include "../../core/macros.h"
 
 /**
  * Math helper functions for 32 bit CPUs
diff --git a/Marlin/src/HAL/persistent_store_api.h b/Marlin/src/HAL/shared/persistent_store_api.h
similarity index 100%
rename from Marlin/src/HAL/persistent_store_api.h
rename to Marlin/src/HAL/shared/persistent_store_api.h
diff --git a/Marlin/src/HAL/platforms.h b/Marlin/src/HAL/shared/platforms.h
similarity index 100%
rename from Marlin/src/HAL/platforms.h
rename to Marlin/src/HAL/shared/platforms.h
diff --git a/Marlin/src/HAL/servo.cpp b/Marlin/src/HAL/shared/servo.cpp
similarity index 99%
rename from Marlin/src/HAL/servo.cpp
rename to Marlin/src/HAL/shared/servo.cpp
index a49aac0f998aa660552990bf00a64c6d27357052..2c6be5e1f2dfd6e9f8b4300c2af7c84339f3b2cb 100644
--- a/Marlin/src/HAL/servo.cpp
+++ b/Marlin/src/HAL/shared/servo.cpp
@@ -51,7 +51,7 @@
  *
  */
 
-#include "../inc/MarlinConfig.h"
+#include "../../inc/MarlinConfig.h"
 
 #if HAS_SERVOS && !(IS_32BIT_TEENSY || defined(TARGET_LPC1768) || defined(STM32F4) || defined(STM32F4xx))
 
diff --git a/Marlin/src/HAL/servo.h b/Marlin/src/HAL/shared/servo.h
similarity index 96%
rename from Marlin/src/HAL/servo.h
rename to Marlin/src/HAL/shared/servo.h
index 5df396efd6fb65105bd53f16a4e8663e0ed86c98..e1a57485b051eb788e8c290f0fa60eb26501af33 100644
--- a/Marlin/src/HAL/servo.h
+++ b/Marlin/src/HAL/shared/servo.h
@@ -70,12 +70,12 @@
 #define SERVO_H
 
 #if IS_32BIT_TEENSY
-  #include "HAL_TEENSY35_36/HAL_Servo_Teensy.h" // Teensy HAL uses an inherited library
+  #include "../HAL_TEENSY35_36/HAL_Servo_Teensy.h" // Teensy HAL uses an inherited library
 
 #elif defined(TARGET_LPC1768)
-  #include "HAL_LPC1768/LPC1768_Servo.h"
+  #include "../HAL_LPC1768/LPC1768_Servo.h"
 #elif defined(STM32F4) || defined(STM32F4xx)
-  #include "HAL_STM32F4/HAL_Servo_STM32F4.h"
+  #include "../HAL_STM32F4/HAL_Servo_STM32F4.h"
 #else
   #include <stdint.h>
 
diff --git a/Marlin/src/HAL/servo_private.h b/Marlin/src/HAL/shared/servo_private.h
similarity index 98%
rename from Marlin/src/HAL/servo_private.h
rename to Marlin/src/HAL/shared/servo_private.h
index 3b1bcda584ab0d40f0eeb8d5fbcbe268ea36ec73..2dcc9eb98f829d2f95d57ca7ea3d245fe5f2598d 100644
--- a/Marlin/src/HAL/servo_private.h
+++ b/Marlin/src/HAL/shared/servo_private.h
@@ -46,9 +46,9 @@
 
 // Architecture specific include
 #ifdef __AVR__
-  #include "HAL_AVR/ServoTimers.h"
+  #include "../HAL_AVR/ServoTimers.h"
 #elif defined(ARDUINO_ARCH_SAM)
-  #include "HAL_DUE/ServoTimers.h"
+  #include "../HAL_DUE/ServoTimers.h"
 #else
   #error "This library only supports boards with an AVR or SAM3X processor."
 #endif
diff --git a/Marlin/src/feature/Max7219_Debug_LEDs.cpp b/Marlin/src/feature/Max7219_Debug_LEDs.cpp
index 3e808d56beb5f5f106f4050e4b315b61a206b3a9..c69be41d4e92ea454ef914c8d3429857e8bf479a 100644
--- a/Marlin/src/feature/Max7219_Debug_LEDs.cpp
+++ b/Marlin/src/feature/Max7219_Debug_LEDs.cpp
@@ -46,7 +46,7 @@
 #include "../module/planner.h"
 #include "../module/stepper.h"
 #include "../Marlin.h"
-#include "../HAL/Delay.h"
+#include "../HAL/shared/Delay.h"
 
 uint8_t LEDs[8 * (MAX7219_NUMBER_UNITS)] = { 0 };
 
diff --git a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
index e1771c91f73d1f5ed03e621b21b889715e58e16d..73a0cfdeb38672b09357ac8afac6ce5143dd9e3b 100644
--- a/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
+++ b/Marlin/src/feature/bedlevel/ubl/ubl_G29.cpp
@@ -29,7 +29,7 @@
   #include "ubl.h"
 
   #include "../../../Marlin.h"
-  #include "../../../HAL/persistent_store_api.h"
+  #include "../../../HAL/shared/persistent_store_api.h"
   #include "../../../libs/hex_print_routines.h"
   #include "../../../module/configuration_store.h"
   #include "../../../lcd/ultralcd.h"
diff --git a/Marlin/src/feature/dac/dac_dac084s085.cpp b/Marlin/src/feature/dac/dac_dac084s085.cpp
index 934b3165bd148338ff55d44737f2eebb0bb8838c..eb3a67de2a6727c75114588cb668a24660f4720d 100644
--- a/Marlin/src/feature/dac/dac_dac084s085.cpp
+++ b/Marlin/src/feature/dac/dac_dac084s085.cpp
@@ -12,7 +12,7 @@
 
 #include "../../Marlin.h"
 #include "../../module/stepper.h"
-#include "../../HAL/Delay.h"
+#include "../../HAL/shared/Delay.h"
 
 dac084s085::dac084s085() { }
 
diff --git a/Marlin/src/inc/MarlinConfigPre.h b/Marlin/src/inc/MarlinConfigPre.h
index 7f9b50eb0135679e869a528c1a81769968547ca3..f3bc903bf22d16e814e743c77d635d83df98b8b4 100644
--- a/Marlin/src/inc/MarlinConfigPre.h
+++ b/Marlin/src/inc/MarlinConfigPre.h
@@ -23,7 +23,7 @@
 #ifndef _MARLIN_CONFIGPRE_H_
 #define _MARLIN_CONFIGPRE_H_
 
-#include "../HAL/platforms.h"
+#include "../HAL/shared/platforms.h"
 #include "../core/boards.h"
 #include "../core/macros.h"
 #include "../core/types.h"
diff --git a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
index 8e176b8a0104e776447024ceadfa825b66a21623..81533ed76e5f1dfc1dccd5a4bcfca4f948293e2c 100644
--- a/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
+++ b/Marlin/src/lcd/dogm/ultralcd_st7920_u8glib_rrd_AVR.cpp
@@ -29,7 +29,7 @@
 
 #if !(defined(U8G_HAL_LINKS) || defined(__SAM3X8E__))
 
-#include "../../HAL/Delay.h"
+#include "../../HAL/shared/Delay.h"
 
 #define ST7920_CLK_PIN  LCD_PINS_D4
 #define ST7920_DAT_PIN  LCD_PINS_ENABLE
diff --git a/Marlin/src/module/configuration_store.cpp b/Marlin/src/module/configuration_store.cpp
index 05f7d3766a16966cb474cce6ddd9605411fe33a2..092934a66e77dc8cc396ad20fabe436f1c5da4e9 100644
--- a/Marlin/src/module/configuration_store.cpp
+++ b/Marlin/src/module/configuration_store.cpp
@@ -344,7 +344,7 @@ void MarlinSettings::postprocess() {
 }
 
 #if ENABLED(EEPROM_SETTINGS)
-  #include "../HAL/persistent_store_api.h"
+  #include "../HAL/shared/persistent_store_api.h"
 
   #define DUMMY_PID_VALUE 3000.0f
   #define EEPROM_START() int eeprom_index = EEPROM_OFFSET; persistentStore.access_start()
diff --git a/Marlin/src/module/configuration_store.h b/Marlin/src/module/configuration_store.h
index 7e678ade5e0cce930d0921fe37ba0dbd2125cd65..84e90527b3c61b11f49a847657c63ecdf6cb4148 100644
--- a/Marlin/src/module/configuration_store.h
+++ b/Marlin/src/module/configuration_store.h
@@ -24,8 +24,9 @@
 #define CONFIGURATION_STORE_H
 
 #include "../inc/MarlinConfig.h"
+
 #if ENABLED(EEPROM_SETTINGS)
-  #include "../HAL/persistent_store_api.h"
+  #include "../HAL/shared/persistent_store_api.h"
 #endif
 
 #define ADD_PORT_ARG ENABLED(EEPROM_CHITCHAT) && NUM_SERIAL > 1
diff --git a/Marlin/src/module/printcounter.cpp b/Marlin/src/module/printcounter.cpp
index b8fa89707bb2d2cc38db7aac83597574e94f2ad5..5f4d226286eb85c93044e74ddd071e8c5c9e6889 100644
--- a/Marlin/src/module/printcounter.cpp
+++ b/Marlin/src/module/printcounter.cpp
@@ -31,7 +31,7 @@ Stopwatch print_job_timer;      // Global Print Job Timer instance
 
 #include "printcounter.h"
 #include "../Marlin.h"
-#include "../HAL/persistent_store_api.h"
+#include "../HAL/shared/persistent_store_api.h"
 
 PrintCounter print_job_timer;   // Global Print Job Timer instance
 
diff --git a/Marlin/src/module/servo.h b/Marlin/src/module/servo.h
index 77d3f6eb87b289f6d0cc3781721b293013611651..05f4d6f4ef355143fc793ece65cbdc9939761b8b 100644
--- a/Marlin/src/module/servo.h
+++ b/Marlin/src/module/servo.h
@@ -27,7 +27,7 @@
 #ifndef _SERVO_H_
 #define _SERVO_H_
 
-#include "../HAL/servo.h"
+#include "../HAL/shared/servo.h"
 
 extern HAL_SERVO_LIB servo[NUM_SERVOS];
 extern void servo_init();
diff --git a/Marlin/src/module/stepper.cpp b/Marlin/src/module/stepper.cpp
index 1b85dcbb7ba0624021c4506786104036a2d33708..67907ac0172896ee190d6463f05d2f6ded5440f6 100644
--- a/Marlin/src/module/stepper.cpp
+++ b/Marlin/src/module/stepper.cpp
@@ -93,7 +93,7 @@
 #include "../gcode/queue.h"
 #include "../sd/cardreader.h"
 #include "../Marlin.h"
-#include "../HAL/Delay.h"
+#include "../HAL/shared/Delay.h"
 
 #if MB(ALLIGATOR)
   #include "../feature/dac/dac_dac084s085.h"
diff --git a/Marlin/src/module/temperature.cpp b/Marlin/src/module/temperature.cpp
index c483fd090312988115f4baac772bf95088d1d7f1..6156545ef434eaedeaca98f9ac64a1e90880ddc5 100644
--- a/Marlin/src/module/temperature.cpp
+++ b/Marlin/src/module/temperature.cpp
@@ -31,7 +31,7 @@
 #include "../lcd/ultralcd.h"
 #include "planner.h"
 #include "../core/language.h"
-#include "../HAL/Delay.h"
+#include "../HAL/shared/Delay.h"
 
 #if ENABLED(HEATER_0_USES_MAX6675)
   #include "../libs/private_spi.h"
diff --git a/platformio.ini b/platformio.ini
index 49731ef91a5a9967c92b6357bbf0aee146044cf0..c93fbfdda6d4bc4ab22653df4328427670da0163 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -58,7 +58,7 @@ board             = megaatmega2560
 build_flags       = ${common.build_flags}
 board_build.f_cpu = 16000000L
 lib_deps          = ${common.lib_deps}
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed     = 250000
 
 #
@@ -71,7 +71,7 @@ board             = megaatmega1280
 build_flags       = ${common.build_flags}
 board_build.f_cpu = 16000000L
 lib_deps          = ${common.lib_deps}
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed     = 250000
 
 #
@@ -88,7 +88,7 @@ board         = at90usb1286
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ldf_mode  = deep+
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 extra_scripts = pre:buildroot/share/atom/create_custom_upload_command_CDC.py
 monitor_speed = 250000
 
@@ -122,7 +122,7 @@ board         = due
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ignore    = c1921b4
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
 monitor_speed = 250000
 [env:DUE_USB]
 platform      = atmelsam
@@ -131,7 +131,7 @@ board         = dueUSB
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ignore    = c1921b4
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
 monitor_speed = 250000
 [env:DUE_debug]
 # Used when WATCHDOG_RESET_MANUAL is enabled
@@ -143,7 +143,7 @@ build_flags   = ${common.build_flags}
   -mpoke-function-name
 lib_deps      = ${common.lib_deps}
 lib_ignore    = c1921b4
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_DUE>
 monitor_speed = 250000
 
 #
@@ -165,7 +165,7 @@ lib_deps          = CMSIS-LPC1768
   TMC2130Stepper@>=2.2.1
   TMC2208Stepper@>=0.2.1
 extra_scripts     = Marlin/src/HAL/HAL_LPC1768/debug_extra_script.py, Marlin/src/HAL/HAL_LPC1768/lpc1768_flag_script.py, Marlin/src/HAL/HAL_LPC1768/upload_extra_script.py
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_LPC1768>
 monitor_speed     = 250000
 debug_tool        = custom
 debug_server      =
@@ -187,7 +187,7 @@ board         = sanguino_atmega1284p
 build_flags   = ${common.build_flags}
 upload_speed  = 57600
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -200,7 +200,7 @@ board         = sanguino_atmega1284p
 build_flags   = ${common.build_flags}
 upload_speed  = 115200
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -213,7 +213,7 @@ board             = reprap_rambo
 build_flags       = ${common.build_flags}
 board_build.f_cpu = 16000000L
 lib_deps          = ${common.lib_deps}
-src_filter        = ${common.default_src_filter}
+src_filter        = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed     = 250000
 
 #
@@ -225,7 +225,7 @@ framework     = arduino
 board         = sanguino_atmega644p
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -237,7 +237,7 @@ framework     = arduino
 board         = sanguino_atmega1284p
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_AVR>
 monitor_speed = 250000
 
 #
@@ -259,7 +259,7 @@ lib_ignore    = U8glib-HAL
   libf3e
   TMC26XStepper
 lib_ldf_mode  = 1
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
 monitor_speed = 250000
 
 #
@@ -272,7 +272,7 @@ board         = disco_f407vg
 build_flags   = ${common.build_flags} -DUSE_STM32GENERIC -DSTM32GENERIC -DMENU_USB_SERIAL -DMENU_SERIAL=SerialUSB
 lib_deps      = ${common.lib_deps}
 lib_ignore    = Adafruit NeoPixel, c1921b4, TMC2130Stepper
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_STM32F4>
 monitor_speed = 250000
 
 #
@@ -285,7 +285,7 @@ board         = teensy35
 build_flags   = ${common.build_flags}
 lib_deps      = ${common.lib_deps}
 lib_ignore    = Adafruit NeoPixel
-src_filter    = ${common.default_src_filter}
+src_filter    = ${common.default_src_filter} +<src/HAL/HAL_TEENSY35_36>
 monitor_speed = 250000
 
 [env:malyanm200]
@@ -293,7 +293,7 @@ platform    = ststm32
 framework   = arduino
 board       = malyanM200
 build_flags = !python Marlin/src/HAL/HAL_STM32F1/stm32f1_flag_script.py -DMCU_STM32F103CB -D __STM32F1__=1 -std=c++1y -D MOTHERBOARD="BOARD_MALYAN_M200" -DSERIAL_USB -ffunction-sections -fdata-sections -Wl,--gc-sections
-src_filter  = ${common.default_src_filter}
+src_filter  = ${common.default_src_filter} +<src/HAL/HAL_STM32F1>
 #-<frameworks>
 lib_ignore  =
   U8glib
@@ -313,9 +313,9 @@ lib_ignore  =
 # Espressif ESP32
 #
 [env:esp32]
-platform = https://github.com/platformio/platform-espressif32.git#feature/stage
-board = esp32dev
-framework = arduino
+platform    = https://github.com/platformio/platform-espressif32.git#feature/stage
+board       = esp32dev
+framework   = arduino
 upload_port = COM3
 lib_ignore  =
   LiquidCrystal_I2C
@@ -324,3 +324,4 @@ lib_ignore  =
   LiquidTWI2
   TMC26XStepper
   c1921b4
+src_filter  = ${common.default_src_filter} +<src/HAL/HAL_ESP32>