Index: orxonox/branches/updater/src/gui/orxonox_gui.cc
===================================================================
--- orxonox/branches/updater/src/gui/orxonox_gui.cc	(revision 3291)
+++ orxonox/branches/updater/src/gui/orxonox_gui.cc	(revision 3292)
@@ -102,6 +102,4 @@
   exec->readFromFile (orxonoxGUI);
 
-  //  orxonoxGUI->walkThrough(orxonoxGUI->listOptions);
-
   orxonoxGUI->showall ();
 
@@ -110,9 +108,9 @@
   mainloopGTK();
 #else /* HAVE_GTK2 */
-  cout << " Listing all the Orxonox Options: \n";
-  cout << "  #############################\n";
-  orxonoxGUI->walkThrough(orxonoxGUI->listOptions);
+  PRINTF(0)(" Listing all the Orxonox Options: \n");
+  PRINTF(0)("  #############################\n");
+  orxonoxGUI->walkThrough(orxonoxGUI->listOptions, 0);
 
-  cout << "\nDo you want me to save the the above values now? [Yn] ";
+  PRINTF(0)("\nDo you want me to save the the above values now? [Yn] ");
   char c = getchar();
   if ((c == 'y' || c == 'Y' || c== 10) && exec->shouldsave())
Index: orxonox/branches/updater/src/gui/orxonox_gui_exec.cc
===================================================================
--- orxonox/branches/updater/src/gui/orxonox_gui_exec.cc	(revision 3291)
+++ orxonox/branches/updater/src/gui/orxonox_gui_exec.cc	(revision 3292)
@@ -184,4 +184,5 @@
 {
   CONFIG_FILE = fopen (configFile, "r");
+  VarInfo varInfo;
   if (CONFIG_FILE)
     {
@@ -211,11 +212,12 @@
 	      
 	      fscanf (CONFIG_FILE, "%s", Buffer);
-	      Value = Buffer;
-	      readFileText (groupWidget, Variable, Value, 0);
+	      varInfo.variableName = Variable;
+	      varInfo.variableValue = Buffer;
+	      groupWidget->walkThrough(readFileText, &varInfo, 0);
 	      sprintf (Variable, "");
 	    }
 	  sprintf (Variable, "%s", Buffer);
 	}
-      widget->walkThrough(widget->setOptions);
+      widget->walkThrough(widget->setOptions, 0);
     }
 }
@@ -227,23 +229,18 @@
    \param depth the depth of the local Widget
 */
-void OrxonoxGuiExec::readFileText (Widget* widget, char* variableName, char* variableValue, int depth)
-{
+void OrxonoxGuiExec::readFileText (Widget* widget, void* varInfo)
+{
+  VarInfo* info = (VarInfo*)varInfo;
+
   if (widget->isOption >= 1 && widget->isOption <= 3)
     {
-      if (!strcmp (static_cast<Option*>(widget)->title, variableName))
-	static_cast<Option*>(widget)->value = atoi(variableValue);
+      if (!strcmp (static_cast<Option*>(widget)->title, info->variableName))
+	static_cast<Option*>(widget)->value = atoi(info->variableValue);
     }
   else if (widget->isOption == 5)
     {
-       if (!strcmp (static_cast<Option*>(widget)->title, variableName))
-	static_cast<OptionLabel*>(widget)->setValue(variableValue);
-    }
-  if (widget->isOption < 0)
-    {
-      readFileText (static_cast<Packer*>(widget)->down, variableName, variableValue, depth+1);
-    } 
-
-  if (widget->next != NULL && depth !=0)
-    readFileText (widget->next, variableName, variableValue, depth);
+       if (!strcmp (static_cast<Option*>(widget)->title, info->variableName))
+	static_cast<OptionLabel*>(widget)->setValue(info->variableValue);
+    }
 }
 
Index: orxonox/branches/updater/src/gui/orxonox_gui_exec.h
===================================================================
--- orxonox/branches/updater/src/gui/orxonox_gui_exec.h	(revision 3291)
+++ orxonox/branches/updater/src/gui/orxonox_gui_exec.h	(revision 3292)
@@ -24,4 +24,11 @@
   char* configFile;            //!< The name of the .orxonox.conf(ig)-file.
   FILE* CONFIG_FILE;           //!< Filehandler for reading and writing.
+  
+  //! A struct that holds informations about variables.
+  struct VarInfo
+  {
+    char* variableName;        //!< The Name of this variable;
+    char* variableValue;       //!< The Value this variable gets.
+  };
 
  public:
@@ -36,5 +43,5 @@
   void writeFileText (Widget* widget, int depth);
   void readFromFile (Widget* widget);
-  void readFileText (Widget* widget, char* variableName, char* variableValue, int depth);
+  static void readFileText (Widget* widget, void* varInfo);
   Widget* locateGroup(Widget* widget, char* groupName, int depth);
 
Index: orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc
===================================================================
--- orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc	(revision 3291)
+++ orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc	(revision 3292)
@@ -155,14 +155,30 @@
    \param function must be of type void and takes a Widget* as an Input. 
 */
-void Widget::walkThrough (void (*function)(Widget*))
+void Widget::walkThrough (void (*function)(Widget*), unsigned int depth)
 {
   function(this);
   if (this->isOption < 0)
     {
-      static_cast<Packer*>(this)->down->walkThrough (function);
+      static_cast<Packer*>(this)->down->walkThrough (function, depth+1);
     } 
 
-  if (this->next != NULL)
-    this->next->walkThrough(function);
+  if (this->next && depth != 0)
+    this->next->walkThrough(function, depth);
+}
+
+/**
+   \brief Moves through all the Widgets downwards from this and executes the function on them.
+   \param function must be of type void and takes a Widget* as an Input.
+   \param data Additional Data you want to pass to the function.
+*/
+void Widget::walkThrough (void (*function)(Widget*, void*), void* data, unsigned int depth)
+{
+  function(this, data);
+  if (this->isOption < 0)
+    {
+      static_cast<Packer*>(this)->down->walkThrough(function, data, depth+1);
+    }
+  if (this->next && depth != 0)
+    this->next->walkThrough(function, data, depth);
 }
 
@@ -188,5 +204,5 @@
 {
   if (widget->isOption >= 1)
-    static_cast<Option*>(widget)->redraw();// <<" is : " << static_cast<Option*>(this)->value <<endl;
+    static_cast<Option*>(widget)->redraw();
 }
 
@@ -635,5 +651,5 @@
 
 /**
-   \destructs an EventBox.
+   \brief destructs an EventBox.
 */
 EventBox::~EventBox(void)
@@ -703,5 +719,5 @@
 
 /**
-   \destructs a Box.
+   \brief destructs a Box.
 */
 Box::~Box(void)
@@ -890,5 +906,5 @@
 
 /**
-   \destructs a Button.
+   \brief destructs a Button.
 */
 Button::~Button(void)
@@ -964,5 +980,5 @@
 
 /**
-   \destructs a CheckButton.
+   \brief destructs a CheckButton.
 */
 CheckButton::~CheckButton(void)
@@ -1064,5 +1080,5 @@
 
 /**
-   \destructs a Slider.
+   \brief destructs a Slider.
 */
 Slider::~Slider(void)
@@ -1178,5 +1194,5 @@
 
 /**
-   \destructs a Menu.
+   \brief destructs a Menu.
 */
 Menu::~Menu(void)
@@ -1280,5 +1296,5 @@
 
 /**
-   \destructs an OptionLabel.
+   \brief destructs an OptionLabel.
 */
 OptionLabel::~OptionLabel(void)
@@ -1375,5 +1391,5 @@
 
 /**
-   \destructs a Label.
+   \brief destructs a Label.
 */
 Label::~Label(void)
@@ -1553,5 +1569,5 @@
 
 /**
-   \destructs an Image.
+   \brief destructs an Image.
 */
 Image::~Image(void)
Index: orxonox/branches/updater/src/gui/orxonox_gui_gtk.h
===================================================================
--- orxonox/branches/updater/src/gui/orxonox_gui_gtk.h	(revision 3291)
+++ orxonox/branches/updater/src/gui/orxonox_gui_gtk.h	(revision 3292)
@@ -53,5 +53,6 @@
   virtual void setTitle(char* title) = 0;  //!< An abstract Function, that sets the title of Widgets.
 
-  void walkThrough (void (*function)(Widget*));
+  void walkThrough (void (*function)(Widget*), unsigned int depth);
+  void walkThrough (void (*function)(Widget*, void*), void* data, unsigned int depth);
   static void listOptions (Widget* widget);
   static void setOptions (Widget* widget);
