Index: /orxonox/branches/updater/src/gui/orxonox_gui_exec.cc
===================================================================
--- /orxonox/branches/updater/src/gui/orxonox_gui_exec.cc	(revision 3463)
+++ /orxonox/branches/updater/src/gui/orxonox_gui_exec.cc	(revision 3464)
@@ -50,5 +50,5 @@
   this->saveSettings->saveability();
   this->execBox->fill(this->saveSettings);
-  this->verboseMode = new Menu("verbose mode", "no output", "error", "warning", "info", "lastItem");
+  this->verboseMode = new Menu("verbose mode", "nothing", "error", "warning", "info", "lastItem");
   this->verboseMode->setFlagName("verbose", "v", 0);
   this->verboseMode->saveability();
@@ -190,8 +190,5 @@
 	    space2under[0] = '_';
 	  }
-	if(widget->isOption <=3)
-	  fprintf(CONFIG_FILE, "%s = %d\n", Buffer, static_cast<Option*>(widget)->value);
-	else if(widget->isOption == 5)
-	  fprintf(CONFIG_FILE, "%s = %s\n", Buffer, static_cast<OptionLabel*>(widget)->cValue);
+	  fprintf(CONFIG_FILE, "%s = %s\n", Buffer, static_cast<Option*>(widget)->save());
       }
 
@@ -259,11 +256,6 @@
     {
       PRINT(3)("Located Option %s.\n", widget->title);
-      if(widget->isOption >= 1 && widget->isOption <= 3)
-	{
-	  static_cast<Option*>(widget)->value = atoi(info->variableValue);
-	  static_cast<Option*>(widget)->redraw(); //!< \todo change this to setValue.
-	}
-      else if(widget->isOption == 5)
-	static_cast<OptionLabel*>(widget)->setValue(info->variableValue);
+      if(widget->isOption >= 1)
+	  static_cast<Option*>(widget)->load(info->variableValue);
     }
 }
Index: /orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc
===================================================================
--- /orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc	(revision 3463)
+++ /orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc	(revision 3464)
@@ -1123,4 +1123,28 @@
 
 /**
+   \brief saves an Option
+   \returns the String that should be saved.
+
+   this is a default Option save
+*/
+char* Option::save(void)
+{
+  char* value = new char [10];
+  sprintf (value, "%d", this->value);
+  return value;
+}
+
+/**
+   \brief loads an Option from of its loadString
+   \param loadString the string from which to load the data from
+*/
+void Option::load(char* loadString)
+{
+  this->value = atoi(loadString);
+  printf( "Loading %s: %s %d\n", this->title, loadString, value); 
+  this->redraw();
+}
+
+/**
    \returns The saveable-state.
 */
@@ -1448,5 +1472,6 @@
   this->init();
   this->setTitle(menuname);
-    
+  va_list itemlist;                     //!< The list to readin multiple Options.
+
   char *itemName;
 
@@ -1480,4 +1505,5 @@
 {
   this->isOption = 2;
+  this->firstItem = NULL;
 
   static_cast<Option*>(this)->init();
@@ -1489,5 +1515,4 @@
 
 }
-
 /**
    \brief Destroys a Menu.
@@ -1500,8 +1525,54 @@
     PRINTF(3)("deleting the Menu.\n");
   //! \todo destroy menu
+
+  // deleting all the items
+  Item* tmpItem = this->firstItem;
+  while(tmpItem)
+    {
+      delete []tmpItem->label;
+      
+      tmpItem = tmpItem->next;
+    }
   
   static_cast<Option*>(this)->destroy();
 }
 
+/**
+   \brief saves the Label of the Menu
+   \returns the name of the selected Menu-Item
+*/
+char* Menu::save(void)
+{
+  Item* tmpItem = this->firstItem;
+  for (int i = 0; i<this->value; i++)
+    tmpItem = tmpItem->next;
+      
+  return tmpItem->label;
+}
+
+/**
+   \brief loads a Menu from of its loadString
+   \param loadString the string from which to load the data from
+*/
+void Menu::load(char* loadString)
+{
+  Item* tmpItem = firstItem;
+  bool foundItem = false;
+  while (tmpItem)
+    {
+      if (!strcmp(loadString, tmpItem->label))
+	{foundItem = true; break;}
+      tmpItem = tmpItem->next;
+    }
+  if (foundItem)
+    this->value = tmpItem->itemNumber;
+  else
+    {
+      this->value = 0;
+      PRINTF(2)("Sorry, but %s has not been found in the Itemlist of %s\n", loadString, this->title);
+    }
+  PRINTF(3)( "Loading %s: setting to %d\n", this->title, this->value); 
+  this->redraw();
+}
 
 /**
@@ -1525,7 +1596,28 @@
 void Menu::addItem(char* itemName)
 {
-#ifdef HAVE_GTK2
-  this->item = gtk_menu_item_new_with_label(itemName);
-  gtk_menu_shell_append(GTK_MENU_SHELL(this->menu), this->item);
+  Item* tmpItem;
+  int i = 0;
+  if (!this->firstItem)
+    {
+      tmpItem = this->firstItem = new Item;
+    }
+  else
+    {
+      ++i;
+      tmpItem = this->firstItem;
+      while (tmpItem->next)
+	{ 
+	  ++i;
+	  tmpItem = tmpItem->next;
+	}
+      tmpItem = tmpItem->next = new Item;
+    }
+  tmpItem->next = NULL;
+  tmpItem->itemNumber = i;
+  tmpItem->label = new char[strlen(itemName)+1];
+  strcpy(tmpItem->label, itemName);
+#ifdef HAVE_GTK2
+  tmpItem->item = gtk_menu_item_new_with_label(itemName);
+  gtk_menu_shell_append(GTK_MENU_SHELL(this->menu), tmpItem->item);
 #endif /* HAVE_GTK2 */
 }
@@ -1666,4 +1758,23 @@
 
 /**
+   \brief creates the Optionlabel save-string
+   \returns the String to save.
+*/
+char* OptionLabel::save(void)
+{
+  return cValue;
+}
+
+/**
+   \brief loads an Option from of its loadString
+   \param loadString the string from which to load the data from
+*/
+void OptionLabel::load(char* loadString)
+{
+  PRINTF(3)( "Loading %s: setting to %s\n", this->title, loadString); 
+  this->setValue(loadString);
+}
+
+/**
    \brief Creates a new default Label with no Text.
    You migth consider adding Label::setTitle with this.
Index: /orxonox/branches/updater/src/gui/orxonox_gui_gtk.h
===================================================================
--- /orxonox/branches/updater/src/gui/orxonox_gui_gtk.h	(revision 3463)
+++ /orxonox/branches/updater/src/gui/orxonox_gui_gtk.h	(revision 3464)
@@ -230,4 +230,7 @@
   void saveability(void);
   void saveability(bool isSaveable);
+  virtual char* save(void);
+  virtual void load(char* loadString);
+
   bool isSaveable(void);
   void setFlagName(char* flagname, int defaultvalue);
@@ -304,5 +307,17 @@
   GtkWidget* item;                      //!< One Item From a Menu.
 #endif /* HAVE_GTK2 */
-  va_list itemlist;                     //!< The list to readin multiple Options.
+
+  //! A Struct to handle information about the different Items of the Menu.
+  struct Item
+  {
+    int itemNumber;             //!< The n-th item of the List
+#ifdef HAVE_GTK2
+    GtkWidget* item;            //!< The GTK-widget of the Item
+#endif /* HAVE_GTK2 */
+    char* label;                //!< The label of the Item
+    Item* next;                 //!< Pointer to the next Item
+  };
+  
+  Item* firstItem;
   
  public:
@@ -311,4 +326,7 @@
   void init(void);
   void destroy(void);
+
+  virtual char* save(void);
+  virtual void load(char* loadString);
   
   void setTitle(char* title);
@@ -332,4 +350,8 @@
   void setValue(char* newValue);
   void setTitle(char* title);
+
+  virtual char* save(void);
+  virtual void load(char* loadString);
+
   void redraw(void);
   void changeOption(void);
