diff --git a/Marlin/Configuration.h b/Marlin/Configuration.h
index b437bfb01f..722cb9642d 100644
--- a/Marlin/Configuration.h
+++ b/Marlin/Configuration.h
@@ -61,11 +61,11 @@ const bool ENDSTOPS_INVERTING = true; // set to true to invert the logic of the
 #define ULTIPANEL
 #define ULTIPANEL
 #ifdef ULTIPANEL
- //#define NEWPANEL  //enable this if you have a click-encoder panel
- #define SDSUPPORT
- #define ULTRA_LCD
- #define LCD_WIDTH 20
-#define LCD_HEIGHT 4
+  //#define NEWPANEL  //enable this if you have a click-encoder panel
+  #define SDSUPPORT
+  #define ULTRA_LCD
+  #define LCD_WIDTH 20
+  #define LCD_HEIGHT 4
 #else //no panel but just lcd 
   #ifdef ULTRA_LCD
     #define LCD_WIDTH 16
@@ -251,4 +251,8 @@ const int dropsegments=5; //everything with this number of steps  will be ignore
   #define BLOCK_BUFFER_SIZE 16 // maximize block buffer
 #endif
 
+//The ASCII buffer for recieving from the serial:
+#define MAX_CMD_SIZE 96
+#define BUFSIZE 4
+
 #endif //__CONFIGURATION_H
diff --git a/Marlin/Marlin.pde b/Marlin/Marlin.pde
index 6c2c6c87a4..5a489ec522 100644
--- a/Marlin/Marlin.pde
+++ b/Marlin/Marlin.pde
@@ -107,68 +107,82 @@ char version_string[] = "1.0.0 Alpha 1";
 
 //Stepper Movement Variables
 
-const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
-float destination[NUM_AXIS] = {  0.0, 0.0, 0.0, 0.0};
-float current_position[NUM_AXIS] = {  0.0, 0.0, 0.0, 0.0};
-float offset[3] = {0.0, 0.0, 0.0};
-bool home_all_axis = true;
-float feedrate = 1500.0, next_feedrate, saved_feedrate;
-long gcode_N, gcode_LastN;
+//===========================================================================
+//=============================imported variables============================
+//===========================================================================
+extern float HeaterPower;
 
+//public variables
 float homing_feedrate[] = HOMING_FEEDRATE;
 bool axis_relative_modes[] = AXIS_RELATIVE_MODES;
-
-bool relative_mode = false;  //Determines Absolute or Relative Coordinates
-bool relative_mode_e = false;  //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
-
-uint8_t fanpwm=0;
-
 volatile int feedmultiply=100; //100->1 200->2
 int saved_feedmultiply;
 volatile bool feedmultiplychanged=false;
 
+//===========================================================================
+//=============================private variables=============================
+//===========================================================================
+const char axis_codes[NUM_AXIS] = {'X', 'Y', 'Z', 'E'};
+static float destination[NUM_AXIS] = {  0.0, 0.0, 0.0, 0.0};
+static float current_position[NUM_AXIS] = {  0.0, 0.0, 0.0, 0.0};
+static float offset[3] = {0.0, 0.0, 0.0};
+static bool home_all_axis = true;
+static float feedrate = 1500.0, next_feedrate, saved_feedrate;
+static long gcode_N, gcode_LastN;
+
+
+
+static bool relative_mode = false;  //Determines Absolute or Relative Coordinates
+static bool relative_mode_e = false;  //Determines Absolute or Relative E Codes while in Absolute Coordinates mode. E is always relative in Relative Coordinates mode.
+
+static uint8_t fanpwm=0;
+
+
 // comm variables
-#define MAX_CMD_SIZE 96
-#define BUFSIZE 4
-char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
-bool fromsd[BUFSIZE];
-int bufindr = 0;
-int bufindw = 0;
-int buflen = 0;
-int i = 0;
-char serial_char;
-int serial_count = 0;
-boolean comment_mode = false;
-char *strchr_pointer; // just a pointer to find chars in the cmd string like X, Y, Z, E, etc
-extern float HeaterPower;
+
+static char cmdbuffer[BUFSIZE][MAX_CMD_SIZE];
+static bool fromsd[BUFSIZE];
+static int bufindr = 0;
+static int bufindw = 0;
+static int buflen = 0;
+static int i = 0;
+static char serial_char;
+static int serial_count = 0;
+static boolean comment_mode = false;
+static char *strchr_pointer; // just a pointer to find chars in the cmd string like X, Y, Z, E, etc
 
 const int sensitive_pins[] = SENSITIVE_PINS; // Sensitive pin list for M42
 
-float tt = 0, bt = 0;
+static float tt = 0, bt = 0;
 
 //Inactivity shutdown variables
-unsigned long previous_millis_cmd = 0;
-unsigned long max_inactive_time = 0;
-unsigned long stepper_inactive_time = 0;
+static unsigned long previous_millis_cmd = 0;
+static unsigned long max_inactive_time = 0;
+static unsigned long stepper_inactive_time = 0;
+
+static unsigned long starttime=0;
+static unsigned long stoptime=0;
 
-unsigned long starttime=0;
-unsigned long stoptime=0;
 #ifdef SDSUPPORT
-  Sd2Card card;
-  SdVolume volume;
-  SdFile root;
-  SdFile file;
-  uint32_t filesize = 0;
-  uint32_t sdpos = 0;
-  bool sdmode = false;
-  bool sdactive = false;
-  bool savetosd = false;
-  int16_t n;
-  unsigned long autostart_atmillis=0;
+  static Sd2Card card;
+  static SdVolume volume;
+  static SdFile root;
+  static SdFile file;
+  static uint32_t filesize = 0;
+  static uint32_t sdpos = 0;
+  static bool sdmode = false;
+  static bool sdactive = false;
+  static bool savetosd = false;
+  static int16_t n;
+  static unsigned long autostart_atmillis=0;
   
-  bool autostart_stilltocheck=true; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
-
+  static bool autostart_stilltocheck=true; //the sd start is delayed, because otherwise the serial cannot answer fast enought to make contact with the hostsoftware.
+#endif //SDSUPPORT
 
+//===========================================================================
+//=============================ROUTINES=============================
+//===========================================================================
+#ifdef SDSUPPORT
   void initsd()
   {
     sdactive = false;
@@ -223,6 +237,65 @@ unsigned long stoptime=0;
       SERIAL_ERRORLN("error writing to file");
     }
   }
+  
+
+  void checkautostart(bool force)
+  {
+  //this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset
+    if(!force)
+    {
+      if(!autostart_stilltocheck)
+        return;
+      if(autostart_atmillis<millis())
+        return;
+    }
+    autostart_stilltocheck=false;
+    if(!sdactive)
+    {
+      initsd();
+      if(!sdactive) //fail
+        return;
+    }
+    static int lastnr=0;
+    char autoname[30];
+    sprintf(autoname,"auto%i.g",lastnr);
+    for(int i=0;i<(int)strlen(autoname);i++)
+      autoname[i]=tolower(autoname[i]);
+    dir_t p;
+
+    root.rewind();
+    
+    bool found=false;
+    while (root.readDir(p) > 0) 
+    {
+      for(int i=0;i<(int)strlen((char*)p.name);i++)
+      p.name[i]=tolower(p.name[i]);
+      //Serial.print((char*)p.name);
+      //Serial.print(" ");
+      //Serial.println(autoname);
+      if(p.name[9]!='~') //skip safety copies
+      if(strncmp((char*)p.name,autoname,5)==0)
+      {
+        char cmd[30];
+
+        sprintf(cmd,"M23 %s",autoname);
+        //sprintf(cmd,"M115");
+        //enquecommand("G92 Z0");
+        //enquecommand("G1 Z10 F2000");
+        //enquecommand("G28 X-105 Y-105");
+        enquecommand(cmd);
+        enquecommand("M24");
+        found=true;
+      }
+    }
+    if(!found)
+      lastnr=-1;
+    else
+      lastnr++;
+  }
+#else  //NO SD SUPORT
+  inline void checkautostart(bool x){};
+  
 #endif //SDSUPPORT
 
 
@@ -272,66 +345,6 @@ void setup()
   tp_init();    // Initialize temperature loop
 }
 
-#ifdef SDSUPPORT
-
-void checkautostart(bool force)
-{
-//this is to delay autostart and hence the initialisaiton of the sd card to some seconds after the normal init, so the device is available quick after a reset
-  if(!force)
-  {
-    if(!autostart_stilltocheck)
-      return;
-    if(autostart_atmillis<millis())
-      return;
-  }
-  autostart_stilltocheck=false;
-  if(!sdactive)
-  {
-    initsd();
-    if(!sdactive) //fail
-      return;
-  }
-  static int lastnr=0;
-  char autoname[30];
-  sprintf(autoname,"auto%i.g",lastnr);
-  for(int i=0;i<(int)strlen(autoname);i++)
-    autoname[i]=tolower(autoname[i]);
-  dir_t p;
-
-  root.rewind();
-  
-  bool found=false;
-  while (root.readDir(p) > 0) 
-  {
-    for(int i=0;i<(int)strlen((char*)p.name);i++)
-    p.name[i]=tolower(p.name[i]);
-    //Serial.print((char*)p.name);
-    //Serial.print(" ");
-    //Serial.println(autoname);
-    if(p.name[9]!='~') //skip safety copies
-    if(strncmp((char*)p.name,autoname,5)==0)
-    {
-      char cmd[30];
-
-      sprintf(cmd,"M23 %s",autoname);
-      //sprintf(cmd,"M115");
-      //enquecommand("G92 Z0");
-      //enquecommand("G1 Z10 F2000");
-      //enquecommand("G28 X-105 Y-105");
-      enquecommand(cmd);
-      enquecommand("M24");
-      found=true;
-    }
-  }
-  if(!found)
-    lastnr=-1;
-  else
-    lastnr++;
-}
-#else  //NO SD SUPORT
-  inline void checkautostart(bool x){}
-#endif
-
 
 void loop()
 {