diff --git a/.gitattributes b/.gitattributes
index d511b4ea94bbaa3d10fc0bcf18e793d0e63debce..2588229e05449aed99fd2fc62a57d43d84911f01 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -17,4 +17,3 @@
 *.png binary
 *.jpg binary
 *.fon binary
-
diff --git a/.gitignore b/.gitignore
index da3f8e225624968252a16b1a580c947c4eefc74e..826d41ea2dfcb863cce8d614707a08d3aa5f9fea 100755
--- a/.gitignore
+++ b/.gitignore
@@ -128,17 +128,17 @@ tags
 *.sln
 *.vcxproj
 *.vcxproj.filters
-Marlin/Release/
-Marlin/Debug/
-Marlin/__vm/
-Marlin/.vs/
+src/Release/
+src/Debug/
+src/__vm/
+src/.vs/
 
 #Visual Studio Code
 .vscode
 
 #cmake
 CMakeLists.txt
-Marlin/CMakeLists.txt
+src/CMakeLists.txt
 CMakeListsPrivate.txt
 
 #CLion
diff --git a/.travis.yml b/.travis.yml
index 8bfd021d87b8ab2dd62318e9c00d5be25eb04816..e74348761dec660cf853a0d6d96d7dadefe7c983 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,7 +10,7 @@ notifications:
 
 # Cache PlatformIO packages using Travis CI container-based infrastructure
 sudo: false
-cache: 
+cache:
   pip: true
   directories:
   - "~/.platformio"
@@ -25,7 +25,7 @@ before_install:
   #
   # Publish the buildroot script folder
   - chmod +x ${TRAVIS_BUILD_DIR}/buildroot/bin/*
-  - export PATH=${TRAVIS_BUILD_DIR}/buildroot/bin/:${PATH} 
+  - export PATH=${TRAVIS_BUILD_DIR}/buildroot/bin/:${PATH}
 
 install:
   - pip install -U platformio
@@ -36,19 +36,20 @@ before_script:
   - cd ${TRAVIS_BUILD_DIR}
   #
   # Generate custom version include
-  - generate_version_header_for_marlin ${TRAVIS_BUILD_DIR}/Marlin
-  - cat ${TRAVIS_BUILD_DIR}/Marlin/_Version.h
+  - generate_version_header_for_marlin ${TRAVIS_BUILD_DIR}/Marlin/src/inc
+  - cat ${TRAVIS_BUILD_DIR}/Marlin/src/inc/_Version.h
   #
 script:
   #
   # Backup Configuration.h, Configuration_adv.h, and pins_RAMPS.h
   #
-  - cp Marlin/Configuration.h Marlin/Configuration.h.backup
-  - cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup
-  - cp Marlin/pins_RAMPS.h Marlin/pins_RAMPS.h.backup
+  - cp Marlin/src/config/Configuration.h Marlin/src/config/Configuration.h.backup
+  - cp Marlin/src/config/Configuration_adv.h Marlin/src/config/Configuration_adv.h.backup
+  - cp Marlin/src/pins/pins_RAMPS.h Marlin/src/pins/pins_RAMPS.h.backup
   #
   # Build with the default configurations
   #
+  - restore_configs
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Test 2 extruders (one MAX6675) and heated bed on basic RAMPS 1.4
@@ -60,7 +61,7 @@ script:
   - opt_set TEMP_SENSOR_0 -2
   - opt_set TEMP_SENSOR_1 1
   - opt_set TEMP_SENSOR_BED 1
-  - opt_enable PIDTEMPBED FIX_MOUNTED_PROBE Z_SAFE_HOMING ARC_P_CIRCLES CNC_WORKSPACE_PLANES
+  - opt_enable PIDTEMPBED Z_SAFE_HOMING ARC_P_CIRCLES CNC_WORKSPACE_PLANES
   - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT EEPROM_SETTINGS
   - opt_enable BLINKM PCA9632 RGB_LED NEOPIXEL_RGBW_LED
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
@@ -68,7 +69,7 @@ script:
   #
   # ...with AUTO_BED_LEVELING_LINEAR, Z_MIN_PROBE_REPEATABILITY_TEST, and DEBUG_LEVELING_FEATURE
   #
-  - opt_enable AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE
+  - opt_enable AUTO_BED_LEVELING_LINEAR BLTOUCH Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE
   - opt_enable_adv FWRETRACT MAX7219_DEBUG
   - opt_set ABL_GRID_POINTS_X 16
   - opt_set ABL_GRID_POINTS_Y 16
@@ -77,15 +78,15 @@ script:
   # Test a simple build of AUTO_BED_LEVELING_UBL
   #
   - restore_configs
-  - opt_enable AUTO_BED_LEVELING_UBL UBL_G26_MESH_EDITING ENABLE_LEVELING_FADE_HEIGHT FIX_MOUNTED_PROBE EEPROM_SETTINGS G3D_PANEL
-  - opt_enable_adv CUSTOM_USER_MENUS I2C_POSITION_ENCODERS BABYSTEPPING
+  - opt_enable AUTO_BED_LEVELING_UBL UBL_G26_MESH_EDITING ENABLE_LEVELING_FADE_HEIGHT BLTOUCH EEPROM_SETTINGS G3D_PANEL
+  - opt_enable_adv CUSTOM_USER_MENUS I2C_POSITION_ENCODERS BABYSTEPPING BABYSTEP_ZPROBE_OFFSET
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Test a Sled Z Probe
   # ...with AUTO_BED_LEVELING_LINEAR, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, and EEPROM_CHITCHAT
   #
   - restore_configs
-  - opt_enable Z_PROBE_SLED AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT
+  - opt_enable Z_PROBE_SLED AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE EEPROM_SETTINGS
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Test a Servo Probe
@@ -94,7 +95,7 @@ script:
   - restore_configs
   - opt_enable NUM_SERVOS Z_ENDSTOP_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
   - opt_set NUM_SERVOS 1
-  - opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT
+  - opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS
   - opt_enable_adv EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES AUTOTEMP G38_PROBE_TARGET
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
@@ -111,7 +112,7 @@ script:
   - restore_configs
   - opt_set MOTHERBOARD BOARD_MINIRAMBO
   - opt_enable PROBE_MANUALLY AUTO_BED_LEVELING_BILINEAR LCD_BED_LEVELING ULTIMAKERCONTROLLER
-  - opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT M100_FREE_MEMORY_WATCHER M100_FREE_MEMORY_DUMPER M100_FREE_MEMORY_CORRUPTOR INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT
+  - opt_enable EEPROM_SETTINGS M100_FREE_MEMORY_WATCHER M100_FREE_MEMORY_DUMPER M100_FREE_MEMORY_CORRUPTOR INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Test 5 extruders on AZTEEG_X3_PRO (can use any board with >=5 extruders defined)
@@ -292,14 +293,14 @@ script:
   #
   # Delta Config (generic) + ABL bilinear + PROBE_MANUALLY
   - use_example_configs delta/generic
-  - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER DELTA_CALIBRATION_MENU AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY
+  - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER DELTA_AUTO_CALIBRATION DELTA_CALIBRATION_MENU AUTO_BED_LEVELING_BILINEAR PROBE_MANUALLY
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Delta Config (generic) + UBL + ALLEN_KEY + OLED_PANEL_TINYBOY2 + EEPROM_SETTINGS
   #
   - use_example_configs delta/generic
   - opt_disable DISABLE_MIN_ENDSTOPS
-  - opt_enable AUTO_BED_LEVELING_UBL Z_PROBE_ALLEN_KEY EEPROM_SETTINGS EEPROM_CHITCHAT OLED_PANEL_TINYBOY2
+  - opt_enable AUTO_BED_LEVELING_UBL Z_PROBE_ALLEN_KEY EEPROM_SETTINGS OLED_PANEL_TINYBOY2
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Delta Config (FLSUN AC because it's complex)
@@ -315,7 +316,7 @@ script:
   # SCARA with TMC2130
   #
   - use_example_configs SCARA
-  - opt_enable AUTO_BED_LEVELING_BILINEAR FIX_MOUNTED_PROBE USE_ZMIN_PLUG EEPROM_SETTINGS EEPROM_CHITCHAT ULTIMAKERCONTROLLER
+  - opt_enable AUTO_BED_LEVELING_BILINEAR FIX_MOUNTED_PROBE USE_ZMIN_PLUG EEPROM_SETTINGS ULTIMAKERCONTROLLER
   - opt_enable_adv HAVE_TMC2130 X_IS_TMC2130 Y_IS_TMC2130 Z_IS_TMC2130
   - opt_enable_adv AUTOMATIC_CURRENT_CONTROL STEALTHCHOP HYBRID_THRESHOLD SENSORLESS_HOMING
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
@@ -334,64 +335,48 @@ script:
   - export TEST_PLATFORM="-e teensy35"
   - restore_configs
   - opt_set MOTHERBOARD BOARD_TEENSY35_36
-  - cp Marlin/Configuration.h Marlin/Configuration.h.backup
-  - cp Marlin/Configuration_adv.h Marlin/Configuration_adv.h.backup
-  - cp Marlin/pins_RAMPS.h Marlin/pins_RAMPS.h.backup
+  - cp Marlin/src/config/Configuration.h Marlin/src/config/Configuration.h.backup
+  - cp Marlin/src/config/Configuration_adv.h Marlin/src/config/Configuration_adv.h.backup
+  - cp Marlin/src/pins/pins_RAMPS.h Marlin/src/pins/pins_RAMPS.h.backup
   #
   # Test Teensy3.5 with default config
   #
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
-  # Test heated bed temperature sensor
-  #
-  - opt_set TEMP_SENSOR_BED 1
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Test 2 extruders on basic RAMPS 1.4
-  #
-  - opt_set EXTRUDERS 2
-  - opt_set TEMP_SENSOR_1 1
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Test PIDTEMPBED
-  #
-  - restore_configs
-  - opt_enable PIDTEMPBED
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Test a "Fix Mounted" Probe along with Safe Homing
+  # Test as many features together as possible
   #
   - restore_configs
-  - opt_enable FIX_MOUNTED_PROBE Z_SAFE_HOMING
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # ...with AUTO_BED_LEVELING_LINEAR, Z_MIN_PROBE_REPEATABILITY_TEST, and DEBUG_LEVELING_FEATURE
-  #
-  - opt_enable AUTO_BED_LEVELING_LINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE
+  - opt_set EXTRUDERS 2
+  - opt_set TEMP_SENSOR_0 1
+  - opt_set TEMP_SENSOR_1 5
+  - opt_set TEMP_SENSOR_BED 1
+  - opt_enable ULTIMAKERCONTROLLER SDSUPPORT
+  - opt_enable FILAMENT_WIDTH_SENSOR FILAMENT_LCD_DISPLAY
+  - opt_enable FIX_MOUNTED_PROBE Z_SAFE_HOMING AUTO_BED_LEVELING_BILINEAR Z_MIN_PROBE_REPEATABILITY_TEST DEBUG_LEVELING_FEATURE
+  - opt_enable PRINTCOUNTER NOZZLE_PARK_FEATURE NOZZLE_CLEAN_FEATURE PIDTEMPBED EEPROM_SETTINGS INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT M100_FREE_MEMORY_WATCHER
+  - opt_enable_adv FILAMENT_CHANGE_FEATURE LCD_INFO_MENU ARC_SUPPORT BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES SDCARD_SORT_ALPHA
+  - opt_set_adv I2C_SLAVE_ADDRESS 63
   - opt_set ABL_GRID_POINTS_X 16
   - opt_set ABL_GRID_POINTS_Y 16
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
-  # Test a Sled Z Probe
+  # Test a Sled Z Probe with Linear leveling
   #
   - restore_configs
   - opt_enable Z_PROBE_SLED
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # ...with AUTO_BED_LEVELING_LINEAR, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, and EEPROM_CHITCHAT
-  #
-  - opt_enable AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT
+  - opt_enable AUTO_BED_LEVELING_LINEAR DEBUG_LEVELING_FEATURE EEPROM_SETTINGS
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Test a Servo Probe
   #
   - restore_configs
   - opt_enable NUM_SERVOS Z_ENDSTOP_SERVO_NR Z_SERVO_ANGLES DEACTIVATE_SERVOS_AFTER_MOVE
+  - opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # ...with AUTO_BED_LEVELING_3POINT, DEBUG_LEVELING_FEATURE, EEPROM_SETTINGS, EEPROM_CHITCHAT, EXTENDED_CAPABILITIES_REPORT, and AUTO_REPORT_TEMPERATURES
   #
-  - opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS EEPROM_CHITCHAT
+  - opt_enable AUTO_BED_LEVELING_3POINT DEBUG_LEVELING_FEATURE EEPROM_SETTINGS
   - opt_enable_adv EXTENDED_CAPABILITIES_REPORT AUTO_REPORT_TEMPERATURES
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
@@ -401,14 +386,6 @@ script:
   - opt_enable MESH_BED_LEVELING MESH_G28_REST_ORIGIN MANUAL_BED_LEVELING ULTIMAKERCONTROLLER
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
-  # Test EEPROM_SETTINGS, EEPROM_CHITCHAT, M100_FREE_MEMORY_WATCHER,
-  #   INCH_MODE_SUPPORT, TEMPERATURE_UNITS_SUPPORT
-  #
-  - restore_configs
-  # - opt_enable M100_FREE_MEMORY_WATCHER // Compiler error!
-  - opt_enable EEPROM_SETTINGS EEPROM_CHITCHAT INCH_MODE_SUPPORT TEMPERATURE_UNITS_SUPPORT
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
   # Mixing Extruder
   #
   - restore_configs
@@ -423,7 +400,7 @@ script:
   #- opt_set TEMP_SENSOR_1 1
   #- opt_enable USE_XMAX_PLUG
   #- opt_enable_adv DUAL_X_CARRIAGE
-  #- build_marlin_teensy35
+  #- build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
   # Test SWITCHING_EXTRUDER
   #
@@ -435,31 +412,6 @@ script:
   - opt_enable SWITCHING_EXTRUDER ULTIMAKERCONTROLLER
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
   #
-  # Test FILAMENT_CHANGE_FEATURE and LCD_INFO_MENU
-  #
-  - restore_configs
-  - opt_enable ULTIMAKERCONTROLLER
-  - opt_enable_adv FILAMENT_CHANGE_FEATURE LCD_INFO_MENU
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Enable filament sensor
-  #
-  - restore_configs
-  - opt_enable FILAMENT_WIDTH_SENSOR
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Enable filament sensor with LCD display
-  #
-  - opt_enable ULTIMAKERCONTROLLER FILAMENT_LCD_DISPLAY
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Enable BEZIER_CURVE_SUPPORT, EXPERIMENTAL_I2CBUS, and I2C_SLAVE_ADDRESS
-  #
-  - restore_configs
-  - opt_enable_adv BEZIER_CURVE_SUPPORT EXPERIMENTAL_I2CBUS
-  - opt_set_adv I2C_SLAVE_ADDRESS 63
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
   # Enable COREXY
   #
   - restore_configs
@@ -479,110 +431,3 @@ script:
   - pins_set RAMPS X_MAX_PIN -1
   - opt_set_adv Z2_MAX_PIN 2
   - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Test PRINTCOUNTER
-  #
-  - restore_configs
-  - opt_enable PRINTCOUNTER
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Test NOZZLE_PARK_FEATURE
-  #
-  - restore_configs
-  - opt_enable NOZZLE_PARK_FEATURE
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # Test NOZZLE_CLEAN_FEATURE
-  #
-  - restore_configs
-  - opt_enable NOZZLE_CLEAN_FEATURE
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  #
-  ######## STANDARD LCD/PANELS ##############
-  #
-  # ULTRA_LCD
-  #
-  - restore_configs
-  - opt_enable ULTRA_LCD
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # DOGLCD
-  #
-  - restore_configs
-  - opt_enable DOGLCD
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # ULTIMAKERCONTROLLER
-  #
-  - restore_configs
-  - opt_enable ULTIMAKERCONTROLLER
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # MAKRPANEL
-  # Needs to use Melzi and Sanguino hardware
-  #
-  #- restore_configs
-  #- opt_enable MAKRPANEL
-  #- build_marlin
-  #
-  # REPRAP_DISCOUNT_SMART_CONTROLLER, SDSUPPORT, and BABYSTEPPING
-  #
-  - restore_configs
-  - opt_enable REPRAP_DISCOUNT_SMART_CONTROLLER SDSUPPORT BABYSTEPPING
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # G3D_PANEL
-  #
-  - restore_configs
-  - opt_enable G3D_PANEL SDSUPPORT
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER
-  #
-  - restore_configs
-  - opt_enable REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER SDSUPPORT
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  # REPRAPWORLD_KEYPAD
-  #
-  # Cant find configuration details to get it to compile
-  #- restore_configs
-  #- opt_enable ULTRA_LCD REPRAPWORLD_KEYPAD REPRAPWORLD_KEYPAD_MOVE_STEP
-  #- build_marlin
-  #
-  # RA_CONTROL_PANEL
-  #
-  - restore_configs
-  - opt_enable RA_CONTROL_PANEL
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
-  #
-  ######## I2C LCD/PANELS ##############
-  #
-  # !!!ATTENTION!!!
-  # Most I2C configurations are failing at the moment because they require
-  # a different Liquid Crystal library "LiquidTWI2".
-  #
-  # LCD_I2C_SAINSMART_YWROBOT
-  #
-  #- restore_configs
-  #- opt_enable LCD_I2C_SAINSMART_YWROBOT
-  #- build_marlin
-  #
-  # LCD_I2C_PANELOLU2
-  #
-  #- restore_configs
-  #- opt_enable LCD_I2C_PANELOLU2
-  #- build_marlin
-  #
-  # LCD_I2C_VIKI
-  #
-  #- restore_configs
-  #- opt_enable LCD_I2C_VIKI
-  #- build_marlin
-  #
-  # LCM1602
-  #
-  - restore_configs
-  - opt_enable LCM1602
-  - build_marlin_pio ${TRAVIS_BUILD_DIR} ${TEST_PLATFORM}
diff --git a/README.md b/README.md
index 2f472313733d6e8ca07963000f3f02e6d9d89301..6da0746589c9009b522e6d9fdd70e7cfd564a6f3 100644
--- a/README.md
+++ b/README.md
@@ -12,18 +12,38 @@ Please test this firmware and let us know if it misbehaves in any way. Volunteer
 
 __Not for production use. Use with caution!__
 
-This branch is used to accumulate patches to the latest 2.0.x release version. Periodically this branch will form the basis for the next minor 2.0.x release.
+Marlin 2.0 is bringing open source RepRap firmware to the next level with support of much faster 32-bit processor boards.
+
+This branch is for patches to the latest 2.0.x release version. Periodically this branch will form the basis for the next minor 2.0.x release.
 
 Download earlier versions of Marlin on the [Releases page](https://github.com/MarlinFirmware/Marlin/releases).
 
-## Recent Changes
-- Add a Hardware Abstraction Layer (HAL) supporting current AVR platforms
-- Planning a HAL for Re:Arm
-- Planning a HAL for STM32
+## Hardware Abstraction Layer (HAL)
+
+Marlin 2.0 adds a new abstraction layer so that Marlin can build and run on 32-bit boards while still retaining the ability to build and run on 8-bit AVR. In this way, new features can be enhanced for more powerful platforms while still supporting AVR, whereas splitting up the code makes it hard to follow these changes and keep them in sync.
+
+### Current HALs
+
+  name|processor|speed|flash|sram|logic|fpu
+  ----|---------|-----|-----|----|-----|---
+  [Arduino AVR](https://www.arduino.cc/)|ATmega, ATTiny, etc.|16,20MHz|64-256k|2-8k|5V|no
+  [Teensy++ 2.0](http://www.microchip.com/wwwproducts/en/AT90USB1286)|[AT90USB1286](http://www.microchip.com/wwwproducts/en/AT90USB1286)|16MHz|128k|8k|5V|no
+  [Due](https://www.arduino.cc/en/Guide/ArduinoDue), [RAMPS-FD](http://www.reprap.org/wiki/RAMPS-FD), etc.|[SAM3X8E ARM-Cortex M3](http://www.microchip.com/wwwproducts/en/ATsam3x8e)|84MHz|512k|64+32k|3.3V|no
+  [Re-ARM](https://www.kickstarter.com/projects/1245051645/re-arm-for-ramps-simple-32-bit-upgrade)|[LPC1768 ARM-Cortex M3](http://www.nxp.com/products/microcontrollers-and-processors/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1700-cortex-m3/512kb-flash-64kb-sram-ethernet-usb-lqfp100-package:LPC1768FBD100)|100MHz|512k|32+16+16k|3.3-5V|no
+  [Teensy 3.5](https://www.pjrc.com/store/teensy35.html)|ARM-Cortex M4|120MHz|512k|192k|3.3-5V|yes
+  [Teensy 3.6](https://www.pjrc.com/store/teensy36.html)|ARM-Cortex M4|180MHz|1M|256k|3.3V|yes
+
+### HALs in Development
+
+  name|processor|speed|flash|sram|logic|fpu
+  ----|---------|-----|-----|----|-----|---
+  [STEVAL-3DP001V1](http://www.st.com/en/evaluation-tools/steval-3dp001v1.html)|[STM32F401VE Arm-Cortex M4](http://www.st.com/en/microcontrollers/stm32f401ve.html)|84MHz|512k|64+32k|3.3-5V|yes
+  [Smoothieboard](http://reprap.org/wiki/Smoothieboard)|LPC1769 ARM-Cortex M3|120MHz|512k|64k|3.3-5V|no
+  [MKS SBASE](http://forums.reprap.org/read.php?13,499322)|LPC1768 ARM-Cortex M3|100MHz|512k|32+16+16k|3.3-5V|no
 
 ## Submitting Patches
 
-Proposed patches should be submitted as a Pull Request against this branch ([bugfix-2.0.x](https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x)).
+Proposed patches should be submitted as a Pull Request against the ([bugfix-2.0.x](https://github.com/MarlinFirmware/Marlin/tree/bugfix-2.0.x)) branch.
 
 - This branch is for fixing bugs and integrating any new features for the duration of the Marlin 2.0.x life-cycle.
 - Follow the [Coding Standards](http://marlinfw.org/docs/development/coding_standards.html) to gain points with the maintainers.
diff --git a/buildroot/bin/build_marlin_teensy35 b/buildroot/bin/build_marlin_teensy35
deleted file mode 100755
index ed6e95cd2352191d59ad34b8375113020b4efa3a..0000000000000000000000000000000000000000
--- a/buildroot/bin/build_marlin_teensy35
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/usr/bin/env bash
-
-arduino --verify --board teensy:avr:teensy35:usb=serial,speed=120,opt=o1std,keys=en-us Marlin/Marlin.ino
diff --git a/buildroot/bin/opt_disable b/buildroot/bin/opt_disable
index 35ad1aad4a8a730d706c79dafd6fa5510e614fa7..57bb0fd1a267aa2b36b564f1dfa8b2886a662a8e 100755
--- a/buildroot/bin/opt_disable
+++ b/buildroot/bin/opt_disable
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
 
 for opt in "$@" ; do
-  eval "sed -i 's/\([[:blank:]]*\)\(#define \b${opt}\b\)/\1\/\/\2/g' Marlin/Configuration.h"
+  eval "sed -i 's/\([[:blank:]]*\)\(#define \b${opt}\b\)/\1\/\/\2/g' Marlin/src/config/Configuration.h"
 done
diff --git a/buildroot/bin/opt_disable_adv b/buildroot/bin/opt_disable_adv
index 80d83183e5344c399f6edcbe3ef2aa14bfdea05d..59f6c6b6e2502f240984c2a4b0b3a94a2bd31179 100755
--- a/buildroot/bin/opt_disable_adv
+++ b/buildroot/bin/opt_disable_adv
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
 
 for opt in "$@" ; do
-  eval "sed -i 's/\([[:blank:]]*\)\(#define \b${opt}\b\)/\1\/\/\2/g' Marlin/Configuration_adv.h"
+  eval "sed -i 's/\([[:blank:]]*\)\(#define \b${opt}\b\)/\1\/\/\2/g' Marlin/src/config/Configuration_adv.h"
 done
diff --git a/buildroot/bin/opt_enable b/buildroot/bin/opt_enable
index 7b119fa15f87e57b4327036260e615f968328bd1..b049b3d8e0fd796e008bf93e23d46d7890a819ee 100755
--- a/buildroot/bin/opt_enable
+++ b/buildroot/bin/opt_enable
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
 
 for opt in "$@" ; do
-  eval "sed -i 's/\/\/[[:blank:]]*\(#define \b${opt}\b\)/\1/g' Marlin/Configuration.h"
+  eval "sed -i 's/\/\/[[:blank:]]*\(#define \b${opt}\b\)/\1/g' Marlin/src/config/Configuration.h"
 done
diff --git a/buildroot/bin/opt_enable_adv b/buildroot/bin/opt_enable_adv
index a34e56f12c15eb4d1a0e3174e359e26a25058ff4..92b6cbb855f451b9a98f418b00541d434bb7f42e 100755
--- a/buildroot/bin/opt_enable_adv
+++ b/buildroot/bin/opt_enable_adv
@@ -1,5 +1,5 @@
 #!/usr/bin/env bash
 
 for opt in "$@" ; do
-  eval "sed -i 's/\/\/[[:blank:]]*\(#define \b${opt}\b\)/\1/g' Marlin/Configuration_adv.h"
+  eval "sed -i 's/\/\/[[:blank:]]*\(#define \b${opt}\b\)/\1/g' Marlin/src/config/Configuration_adv.h"
 done
diff --git a/buildroot/bin/opt_set b/buildroot/bin/opt_set
index cf8c0d850ce5d9c41fc7900a526ed2a95f561180..26a84787187ab2f8d637e1d67de69e8f0d4c41b4 100755
--- a/buildroot/bin/opt_set
+++ b/buildroot/bin/opt_set
@@ -1,3 +1,3 @@
 #!/usr/bin/env bash
 
-eval "sed -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Marlin/Configuration.h"
+eval "sed -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Marlin/src/config/Configuration.h"
diff --git a/buildroot/bin/opt_set_adv b/buildroot/bin/opt_set_adv
index 54076a0bcae2462e9cda09ec0fe3f1393bb24c46..21184872d34eac1b020b2e4cce93c670dcde3115 100755
--- a/buildroot/bin/opt_set_adv
+++ b/buildroot/bin/opt_set_adv
@@ -1,3 +1,3 @@
 #!/usr/bin/env bash
 
-eval "sed -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Marlin/Configuration_adv.h"
+eval "sed -i 's/\(#define \b${1}\b\).*$/\1 ${2}/g' Marlin/src/config/Configuration_adv.h"
diff --git a/buildroot/bin/pins_set b/buildroot/bin/pins_set
index ae6549fb3dc431077e64fee1778c46eeb8c1132f..2dc56939370ba352462efe167fe2424f6ecb2ed2 100755
--- a/buildroot/bin/pins_set
+++ b/buildroot/bin/pins_set
@@ -1,3 +1,3 @@
 #!/usr/bin/env bash
 
-eval "sed -i 's/\(#define \b${2}\b\).*$/\1 ${3}/g' Marlin/pins_${1}.h"
+eval "sed -i 's/\(#define \b${2}\b\).*$/\1 ${3}/g' Marlin/src/pins/pins_${1}.h"
diff --git a/buildroot/bin/restore_configs b/buildroot/bin/restore_configs
index 73240bd438ef476bd9336a84082e1d0b4d2dae8b..77094ac23bc477f1c2afda33f68a12c014a737c1 100755
--- a/buildroot/bin/restore_configs
+++ b/buildroot/bin/restore_configs
@@ -1,9 +1,9 @@
 #!/usr/bin/env bash
 
-cp Marlin/Configuration.h.backup      Marlin/Configuration.h
-cp Marlin/Configuration_adv.h.backup  Marlin/Configuration_adv.h
-cp Marlin/pins_RAMPS.h.backup         Marlin/pins_RAMPS.h
+cp Marlin/src/config/Configuration.h.backup      Marlin/src/config/Configuration.h
+cp Marlin/src/config/Configuration_adv.h.backup  Marlin/src/config/Configuration_adv.h
+cp Marlin/src/pins/pins_RAMPS.h.backup        	 Marlin/src/pins/pins_RAMPS.h
 
-if [ -f Marlin/_Bootscreen.h ]; then
-  rm Marlin/_Bootscreen.h
+if [ -f Marlin/src/config/_Bootscreen.h ]; then
+  rm Marlin/src/config/_Bootscreen.h
 fi
diff --git a/buildroot/bin/use_example_configs b/buildroot/bin/use_example_configs
index 9f55c52e1f3f9df695ceb51848eecfeda504a967..d745de84d4354deaa3aecf014ece8a6c1683fd79 100755
--- a/buildroot/bin/use_example_configs
+++ b/buildroot/bin/use_example_configs
@@ -1,7 +1,9 @@
 #!/usr/bin/env bash
 
-eval "cp Marlin/example_configurations/${1}/Configuration* Marlin/"
+restore_configs
 
-if [ -f "Marlin/example_configurations/${1}/_Bootscreen.h" ]; then
-  cp "Marlin/example_configurations/${1}/_Bootscreen.h" Marlin/
+eval "cp Marlin/src/config/examples/${1}/Configuration* Marlin/src/config/"
+
+if [ -f "Marlin/src/config/examples/${1}/_Bootscreen.h" ]; then
+  cp "Marlin/src/config/examples/${1}/_Bootscreen.h" Marlin/src/config/
 fi
diff --git a/buildroot/share/cmake/CMakeLists.txt b/buildroot/share/cmake/CMakeLists.txt
index 54cef29cc4495806a81fa76cc37495d0119b24de..1308f8bf97539b23dde1157f654acefb9fe9aea6 100644
--- a/buildroot/share/cmake/CMakeLists.txt
+++ b/buildroot/share/cmake/CMakeLists.txt
@@ -93,11 +93,11 @@ setup_motherboard(${PROJECT_NAME} ${CMAKE_CURRENT_LIST_DIR}/../../../Marlin)
 
 #====================================================================#
 #  Setup all source files                                            #
-#  Incude Marlin.ino to compile libs not included in *.cpp files     #
+#  Include Marlin.ino to compile libs not included in *.cpp files    #
 #====================================================================#
 
-file(GLOB SOURCES "../../../Marlin/*.cpp")
-set(${PROJECT_NAME}_SRCS "${SOURCES};../../../Marlin/Marlin.ino")
+file(GLOB SOURCES "../../../src/*.cpp")
+set(${PROJECT_NAME}_SRCS "${SOURCES};../../../src/Marlin.ino")
 
 #====================================================================#
 #  Define the port for uploading code to the Arduino                 #