diff --git a/Marlin/ConfigurationStore.h b/Marlin/ConfigurationStore.h
new file mode 100644
index 0000000000000000000000000000000000000000..06801aee8886304aef0707c4b4a55b465e602fa9
--- /dev/null
+++ b/Marlin/ConfigurationStore.h
@@ -0,0 +1,24 @@
+#ifndef CONFIG_STORE_H
+#define CONFIG_STORE_H
+
+#include "Configuration.h"
+
+#ifdef EEPROM_SETTINGS
+void Config_StoreSettings();
+void Config_RetrieveSettings();
+#else
+FORCE_INLINE void Config_StoreSettings() {}
+FORCE_INLINE void Config_RetrieveSettings() {}
+#endif
+
+#ifdef EEPROM_CHITCHAT
+void Config_PrintSettings();
+#else
+FORCE_INLINE void Config_PrintSettings() {}
+#endif
+
+void Config_ResetDefault();
+
+#endif
+
+
diff --git a/Marlin/EEPROMwrite.h b/Marlin/EEPROMwrite.h
deleted file mode 100644
index c8eaf1fd572c2982fa02039445dd758a529fd47e..0000000000000000000000000000000000000000
--- a/Marlin/EEPROMwrite.h
+++ /dev/null
@@ -1,232 +0,0 @@
-#ifndef EEPROM_H
-#define EEPROM_H
-
-#include "Marlin.h"
-#include "planner.h"
-#include "temperature.h"
-//#include <EEPROM.h>
-
-template <class T> int EEPROM_writeAnything(int &ee, const T& value)
-{
-  const byte* p = (const byte*)(const void*)&value;
-  int i;
-  for (i = 0; i < (int)sizeof(value); i++)
-    eeprom_write_byte((unsigned char *)ee++, *p++);
-  return i;
-}
-
-template <class T> int EEPROM_readAnything(int &ee, T& value)
-{
-  byte* p = (byte*)(void*)&value;
-  int i;
-  for (i = 0; i < (int)sizeof(value); i++)
-    *p++ = eeprom_read_byte((unsigned char *)ee++);
-  return i;
-}
-//======================================================================================
-
-
-
-
-#define EEPROM_OFFSET 100
-
-
-// IMPORTANT:  Whenever there are changes made to the variables stored in EEPROM
-// in the functions below, also increment the version number. This makes sure that
-// the default values are used whenever there is a change to the data, to prevent
-// wrong data being written to the variables.
-// ALSO:  always make sure the variables in the Store and retrieve sections are in the same order.
-#define EEPROM_VERSION "V07"
-
-inline void EEPROM_StoreSettings() 
-{
-#ifdef EEPROM_SETTINGS
-  char ver[4]= "000";
-  int i=EEPROM_OFFSET;
-  EEPROM_writeAnything(i,ver); // invalidate data first 
-  EEPROM_writeAnything(i,axis_steps_per_unit);  
-  EEPROM_writeAnything(i,max_feedrate);  
-  EEPROM_writeAnything(i,max_acceleration_units_per_sq_second);
-  EEPROM_writeAnything(i,acceleration);
-  EEPROM_writeAnything(i,retract_acceleration);
-  EEPROM_writeAnything(i,minimumfeedrate);
-  EEPROM_writeAnything(i,mintravelfeedrate);
-  EEPROM_writeAnything(i,minsegmenttime);
-  EEPROM_writeAnything(i,max_xy_jerk);
-  EEPROM_writeAnything(i,max_z_jerk);
-  EEPROM_writeAnything(i,max_e_jerk);
-  EEPROM_writeAnything(i,add_homeing);
-  EEPROM_writeAnything(i,plaPreheatHotendTemp);
-  EEPROM_writeAnything(i,plaPreheatHPBTemp);
-  EEPROM_writeAnything(i,plaPreheatFanSpeed);
-  EEPROM_writeAnything(i,absPreheatHotendTemp);
-  EEPROM_writeAnything(i,absPreheatHPBTemp);
-  EEPROM_writeAnything(i,absPreheatFanSpeed);
-  #ifdef PIDTEMP
-    EEPROM_writeAnything(i,Kp);
-    EEPROM_writeAnything(i,Ki);
-    EEPROM_writeAnything(i,Kd);
-  #else
-    EEPROM_writeAnything(i,3000);
-    EEPROM_writeAnything(i,0);
-    EEPROM_writeAnything(i,0);
-  #endif
-  char ver2[4]=EEPROM_VERSION;
-  i=EEPROM_OFFSET;
-  EEPROM_writeAnything(i,ver2); // validate data
-  SERIAL_ECHO_START;
-  SERIAL_ECHOLNPGM("Settings Stored");
-#endif //EEPROM_SETTINGS
-}
-
-
-inline void EEPROM_printSettings()
-{  // if def=true, the default values will be used
-//  #ifdef EEPROM_SETTINGS  
-      SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Steps per unit:");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("  M92 X",axis_steps_per_unit[0]);
-      SERIAL_ECHOPAIR(" Y",axis_steps_per_unit[1]);
-      SERIAL_ECHOPAIR(" Z",axis_steps_per_unit[2]);
-      SERIAL_ECHOPAIR(" E",axis_steps_per_unit[3]);
-      SERIAL_ECHOLN("");
-      
-    SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Maximum feedrates (mm/s):");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("  M203 X",max_feedrate[0]);
-      SERIAL_ECHOPAIR(" Y",max_feedrate[1] ); 
-      SERIAL_ECHOPAIR(" Z", max_feedrate[2] ); 
-      SERIAL_ECHOPAIR(" E", max_feedrate[3]);
-      SERIAL_ECHOLN("");
-    SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Maximum Acceleration (mm/s2):");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("  M201 X" ,max_acceleration_units_per_sq_second[0] ); 
-      SERIAL_ECHOPAIR(" Y" , max_acceleration_units_per_sq_second[1] ); 
-      SERIAL_ECHOPAIR(" Z" ,max_acceleration_units_per_sq_second[2] );
-      SERIAL_ECHOPAIR(" E" ,max_acceleration_units_per_sq_second[3]);
-      SERIAL_ECHOLN("");
-    SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Acceleration: S=acceleration, T=retract acceleration");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("  M204 S",acceleration ); 
-      SERIAL_ECHOPAIR(" T" ,retract_acceleration);
-      SERIAL_ECHOLN("");
-    SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum xY jerk (mm/s),  Z=maximum Z jerk (mm/s)");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("  M205 S",minimumfeedrate ); 
-      SERIAL_ECHOPAIR(" T" ,mintravelfeedrate ); 
-      SERIAL_ECHOPAIR(" B" ,minsegmenttime ); 
-      SERIAL_ECHOPAIR(" X" ,max_xy_jerk ); 
-      SERIAL_ECHOPAIR(" Z" ,max_z_jerk);
-      SERIAL_ECHOPAIR(" E" ,max_e_jerk);
-      SERIAL_ECHOLN(""); 
-    SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Home offset (mm):");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("  M206 X",add_homeing[0] );
-      SERIAL_ECHOPAIR(" Y" ,add_homeing[1] );
-      SERIAL_ECHOPAIR(" Z" ,add_homeing[2] );
-      SERIAL_ECHOLN("");
-    #ifdef PIDTEMP
-      SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("PID settings:");
-      SERIAL_ECHO_START;
-      SERIAL_ECHOPAIR("   M301 P",Kp); 
-      SERIAL_ECHOPAIR(" I" ,Ki/PID_dT); 
-      SERIAL_ECHOPAIR(" D" ,Kd*PID_dT);
-      SERIAL_ECHOLN(""); 
-    #endif
-//  #endif
-} 
-
-
-inline void EEPROM_RetrieveSettings(bool def=false)
-{  // if def=true, the default values will be used
-  #ifdef EEPROM_SETTINGS
-    int i=EEPROM_OFFSET;
-    char stored_ver[4];
-    char ver[4]=EEPROM_VERSION;
-    EEPROM_readAnything(i,stored_ver); //read stored version
-    //  SERIAL_ECHOLN("Version: [" << ver << "] Stored version: [" << stored_ver << "]");
-    if ((!def)&&(strncmp(ver,stored_ver,3)==0)) 
-    {   // version number match
-      EEPROM_readAnything(i,axis_steps_per_unit);  
-      EEPROM_readAnything(i,max_feedrate);  
-      EEPROM_readAnything(i,max_acceleration_units_per_sq_second);
-      EEPROM_readAnything(i,acceleration);
-      EEPROM_readAnything(i,retract_acceleration);
-      EEPROM_readAnything(i,minimumfeedrate);
-      EEPROM_readAnything(i,mintravelfeedrate);
-      EEPROM_readAnything(i,minsegmenttime);
-      EEPROM_readAnything(i,max_xy_jerk);
-      EEPROM_readAnything(i,max_z_jerk);
-      EEPROM_readAnything(i,max_e_jerk);
-      EEPROM_readAnything(i,add_homeing);
-	  EEPROM_readAnything(i,plaPreheatHotendTemp);
-	  EEPROM_readAnything(i,plaPreheatHPBTemp);
-	  EEPROM_readAnything(i,plaPreheatFanSpeed);
-	  EEPROM_readAnything(i,absPreheatHotendTemp);
-	  EEPROM_readAnything(i,absPreheatHPBTemp);
-	  EEPROM_readAnything(i,absPreheatFanSpeed);
-      #ifndef PIDTEMP
-        float Kp,Ki,Kd;
-      #endif
-      EEPROM_readAnything(i,Kp);
-      EEPROM_readAnything(i,Ki);
-      EEPROM_readAnything(i,Kd);
-
-      SERIAL_ECHO_START;
-      SERIAL_ECHOLNPGM("Stored settings retreived:");
-    }
-    else 
-  #endif
-    {
-      float tmp1[]=DEFAULT_AXIS_STEPS_PER_UNIT;
-      float tmp2[]=DEFAULT_MAX_FEEDRATE;
-      long tmp3[]=DEFAULT_MAX_ACCELERATION;
-      for (short i=0;i<4;i++) 
-      {
-        axis_steps_per_unit[i]=tmp1[i];  
-        max_feedrate[i]=tmp2[i];  
-        max_acceleration_units_per_sq_second[i]=tmp3[i];
-      }
-      acceleration=DEFAULT_ACCELERATION;
-      retract_acceleration=DEFAULT_RETRACT_ACCELERATION;
-      minimumfeedrate=DEFAULT_MINIMUMFEEDRATE;
-      minsegmenttime=DEFAULT_MINSEGMENTTIME;       
-      mintravelfeedrate=DEFAULT_MINTRAVELFEEDRATE;
-      max_xy_jerk=DEFAULT_XYJERK;
-      max_z_jerk=DEFAULT_ZJERK;
-      max_e_jerk=DEFAULT_EJERK;
-      add_homeing[0] = add_homeing[1] = add_homeing[2] = 0;
-      SERIAL_ECHO_START;
-      SERIAL_ECHOLN("Using Default settings:");
-#ifdef ULTIPANEL
-	  plaPreheatHotendTemp = PLA_PREHEAT_HOTEND_TEMP;
-	  plaPreheatHPBTemp = PLA_PREHEAT_HPB_TEMP;
-	  plaPreheatFanSpeed = PLA_PREHEAT_FAN_SPEED;
-	  absPreheatHotendTemp = ABS_PREHEAT_HOTEND_TEMP;
-	  absPreheatHPBTemp = ABS_PREHEAT_HPB_TEMP;
-	  absPreheatFanSpeed = ABS_PREHEAT_FAN_SPEED;
-#endif
-#ifdef PIDTEMP
-        Kp = DEFAULT_Kp;
-        Ki = DEFAULT_Ki;
-        Kd = DEFAULT_Kp;
-#ifdef PID_ADD_EXTRUSION_RATE
-        Kc = DEFAULT_Kc;
- #endif
-#endif
-    }
-  #ifdef EEPROM_CHITCHAT
-    EEPROM_printSettings();
-  #endif
-}  
-
-#endif
-
-
diff --git a/Marlin/Marlin_main.cpp b/Marlin/Marlin_main.cpp
index ed222b8cf12427d7c299128d30224a471ffe7a62..bbd11298e285c04821f2054231b580722b4be9f6 100644
--- a/Marlin/Marlin_main.cpp
+++ b/Marlin/Marlin_main.cpp
@@ -36,7 +36,7 @@
 #include "motion_control.h"
 #include "cardreader.h"
 #include "watchdog.h"
-#include "EEPROMwrite.h"
+#include "ConfigurationStore.h"
 #include "language.h"
 #include "pins_arduino.h"
 
@@ -322,7 +322,7 @@ void setup()
     fromsd[i] = false;
   }
   
-  EEPROM_RetrieveSettings(); // loads data from EEPROM if available
+  Config_RetrieveSettings(); // loads data from EEPROM if available
 
   for(int8_t i=0; i < NUM_AXIS; i++)
   {
@@ -1457,22 +1457,22 @@ void process_commands()
     break;
     case 500: // Store settings in EEPROM
     {
-        EEPROM_StoreSettings();
+        Config_StoreSettings();
     }
     break;
     case 501: // Read settings from EEPROM
     {
-      EEPROM_RetrieveSettings();
+        Config_RetrieveSettings();
     }
     break;
     case 502: // Revert to default settings
     {
-      EEPROM_RetrieveSettings(true);
+        Config_ResetDefault();
     }
     break;
     case 503: // print settings currently in memory
     {
-      EEPROM_printSettings();
+        Config_PrintSettings();
     }
     break;
     case 999: // Restart after being stopped
diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp
index a7fd12cead65f30ce5d6ab76efd1f50b9f00079f..c0f2fe897495fbf3be6805b5b89d15264d092b32 100644
--- a/Marlin/ultralcd.cpp
+++ b/Marlin/ultralcd.cpp
@@ -5,7 +5,7 @@
 #include "Marlin.h"
 #include "language.h"
 #include "temperature.h"
-#include "EEPROMwrite.h"
+#include "ConfigurationStore.h"
 
 //===========================================================================
 //=============================imported variables============================
@@ -2220,7 +2220,7 @@ void MainMenu::showControl()
         //enquecommand("M84");
         beepshort();
         BLOCK;
-        EEPROM_StoreSettings();
+        Config_StoreSettings();
       }
     }break;
     case ItemC_load:
@@ -2234,7 +2234,7 @@ void MainMenu::showControl()
         //enquecommand("M84");
         beepshort();
         BLOCK;
-        EEPROM_RetrieveSettings();
+        Config_RetrieveSettings();
       }
     }break;
     case ItemC_failsafe:
@@ -2248,7 +2248,7 @@ void MainMenu::showControl()
         //enquecommand("M84");
         beepshort();
         BLOCK;
-        EEPROM_RetrieveSettings(true);
+        Config_ResetDefault();
       }
     }break;
     default:   
@@ -2785,7 +2785,7 @@ void MainMenu::showPLAsettings()
         //enquecommand("M84");
         beepshort();
         BLOCK;
-        EEPROM_StoreSettings();
+        Config_StoreSettings();
       }
     }break;
       default:   
@@ -2931,7 +2931,7 @@ void MainMenu::showABSsettings()
         //enquecommand("M84");
         beepshort();
         BLOCK;
-        EEPROM_StoreSettings();
+        Config_StoreSettings();
       }
     }break;
       default: