Index: /orxonox/trunk/gui/orxonox_gui.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui.cc	(revision 3160)
+++ /orxonox/trunk/gui/orxonox_gui.cc	(revision 3161)
@@ -26,10 +26,11 @@
    curl interface to Download cool stuff
 
-   make Windows grab Focus if it is open and release it when closed (only child-windows)
    chain all the windows when starting the GUI (DANGER: performance!!)
 
-   widgets save themselve
+   widgets save themselves
    good way to step through all the Widgets
    ... many more ...
+   label -> protected : getlabel function
+
 */
 
Index: /orxonox/trunk/gui/orxonox_gui_exec.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_exec.cc	(revision 3160)
+++ /orxonox/trunk/gui/orxonox_gui_exec.cc	(revision 3161)
@@ -128,5 +128,5 @@
 			      && (static_cast<Option*>(widget)->saveable) )
 			     || (widget->isOption<0
-				 && strcmp (static_cast<Packer*>(widget)->getGroupName(), ""))))
+				 && static_cast<Packer*>(widget)->getGroupName())))
     {
       fprintf (CONFIG_FILE, "  ", depth);
@@ -137,5 +137,5 @@
   if (widget->isOption <0)
     {
-      if (strcmp (static_cast<Packer*>(widget)->getGroupName(), ""))
+      if (static_cast<Packer*>(widget)->getGroupName())
 	{
 	  fprintf (CONFIG_FILE, "[%s]\n", static_cast<Packer*>(widget)->getGroupName());
@@ -155,12 +155,15 @@
 	char Buffer[256];
 	char* space2under;
-	sprintf (Buffer, "%s", static_cast<Option*>(widget)->label);
+	strcpy (Buffer, static_cast<Option*>(widget)->label);
 	if (strchr (Buffer, '_'))
 	  cout << "Warning Optionname" << Buffer << " is not Valid for Saving, because it includes an underscore" << endl;
 	while (space2under = strchr(Buffer, ' '))
 	  {
-	    sprintf (space2under, "_%s", space2under+1);
+	    space2under[0] = '_';
 	  }
-	fprintf (CONFIG_FILE, "%s = %i\n", Buffer, static_cast<Option*>(widget)->value);
+	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);
       }
 
@@ -184,4 +187,5 @@
       while (fscanf (CONFIG_FILE, "%s", Buffer) != EOF)
 	{
+	  // group-search //
 	  if (!strncmp (Buffer, "[", 1))
 	    {
@@ -192,4 +196,5 @@
 		}
 	    }
+	  // option-setting //
 	  if (!strcmp (Buffer, "="))
 	    {
@@ -248,5 +253,5 @@
   if (widget->isOption < 0)
     {
-      if (!strcmp(groupName, static_cast<Packer*>(widget)->getGroupName()))
+      if (static_cast<Packer*>(widget)->getGroupName() && !strcmp(groupName, static_cast<Packer*>(widget)->getGroupName()))
 	{
 	  return widget;
Index: /orxonox/trunk/gui/orxonox_gui_gtk.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_gtk.cc	(revision 3160)
+++ /orxonox/trunk/gui/orxonox_gui_gtk.cc	(revision 3161)
@@ -188,5 +188,5 @@
 {
   down = NULL;
-  this->setGroupName ("");
+  groupName = NULL;
 
 
@@ -201,5 +201,8 @@
 void Packer::setGroupName (char* name)
 {
-  groupName = name;
+  if (groupName)
+    delete groupName;
+  groupName = new char [strlen(name)+1];
+  strcpy(groupName, name);
 }
 
@@ -398,5 +401,5 @@
 {
   if (exec->shouldsave())
-    exec->writeToFile (orxonoxGUI);
+    exec->writeToFile (Window::mainWindow);
 
   gtk_main_quit();
@@ -902,21 +905,34 @@
 }
 
-OptionLabel::OptionLabel(char* text)
+OptionLabel::OptionLabel(char* label, char* value)
 {
   init();
-  setTitle(text);
+  setTitle(label);
+  setValue(value);
 }
 
 void OptionLabel::init(void)
 {
-  isOption = 4;
-
   static_cast<Option*>(this)->init();
+  isOption = 5;
+  cValue = NULL;
 
   widget = gtk_label_new ("");
 }
+void OptionLabel::setValue(char* newValue)
+{
+  if (cValue)
+    delete cValue;
+  cValue = new char [strlen(newValue)+1];
+  strcpy(cValue, newValue);
+  gtk_label_set_text (GTK_LABEL (widget), cValue);
+}
 
 void OptionLabel::setTitle(char* title)
 {
+  if (label)
+    delete label;
+  label = new char [strlen(title)+1];
+  strcpy(label, title);
   gtk_label_set_text (GTK_LABEL (widget), title);
 }
Index: /orxonox/trunk/gui/orxonox_gui_gtk.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_gtk.h	(revision 3160)
+++ /orxonox/trunk/gui/orxonox_gui_gtk.h	(revision 3161)
@@ -32,5 +32,5 @@
   GtkWidget* widget; //!< widget is the gtk_widget that the specific Object Contains.
   void init(void);
-  int isOption; //!< with this Paramenter one can set the option-type: -2:Container, -1: Box, 0: not an Option, 1: Bool-option, 2: int-option, 3:float option, 4:char option, 5: char* option
+  int isOption; //!< with this Paramenter one can set the option-type: -2:Container, -1: Box, 0: not an Option, 1: Bool-option, 2: int-option, 3: float option, 4:char option, 5: char* option
   /**
      \briefdefines isOption states
@@ -262,7 +262,10 @@
 {
  public:
-  OptionLabel(char* text);
-  void init(void);
-
+  OptionLabel(char* label, char* value);
+  void init(void);
+  
+  char* cValue;
+  
+  void setValue(char* newValue);
   void setTitle(char* title);
   void redraw();
Index: /orxonox/trunk/gui/orxonox_gui_keys.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_keys.cc	(revision 3160)
+++ /orxonox/trunk/gui/orxonox_gui_keys.cc	(revision 3161)
@@ -61,4 +61,5 @@
   pKeyFrame = new Frame ("keys");
    pKeysBox = new Box('v');
+   pKeysBox->setGroupName ("player1");
     pKeysBox->fill(addKey(UP, "up"));
     pKeysBox->fill(addKey(DOWN, "down"));
@@ -73,5 +74,5 @@
     pKeyFrame->fill(pKeysBox);
    pKeyWindow->fill(pKeyFrame);
-   //  Window::addWindow(pKeyWindow);
+   Window::addWindow(pKeyWindow);
    pKeyWindow->connectSignal("destroy", pKeyWindow, Window::windowClose);
    pKeyWindow->connectSignal("delete_event", pKeyWindow, Window::windowClose);
@@ -94,5 +95,5 @@
   inputKey[key]->pKeyBox = new Box();
   inputKey[key]->pKeyButton = new Button(name);
-  inputKey[key]->pKeyOLabel = new OptionLabel (name);
+  inputKey[key]->pKeyOLabel = new OptionLabel (name, name);
   inputKey[key]->pKeyOLabel->saveable = true;
   
@@ -256,5 +257,5 @@
     }
 
-  inputkey->pKeyOLabel->setTitle (title);
+  inputkey->pKeyOLabel->setValue (title);
   inputButton->disconnectSignal(keySignal);
   inputWindow->close();
