Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui.cc
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui.cc	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui.cc	(revision 4046)
@@ -26,4 +26,5 @@
 #include <unistd.h>
 
+#include "orxonox_gui_gtk.h"
 #include "orxonox_gui.h"
 #include "orxonox_gui_video.h"
@@ -35,12 +36,12 @@
 #include "orxonox_gui_update.h"
 
-  Window* orxonoxGUI = NULL;
-  OrxonoxGuiVideo* video = NULL;
-  OrxonoxGuiAudio* audio = NULL;
-  OrxonoxGuiExec* exec = NULL;
-  OrxonoxGuiFlags* flags = NULL;
-  OrxonoxGuiBanner* banner = NULL;
-  OrxonoxGuiKeys* keys = NULL;
-  OrxonoxGuiUpdate* update = NULL;
+// GUI-modules
+OrxonoxGuiFlags* flags = NULL;
+OrxonoxGuiVideo* video = NULL;
+OrxonoxGuiAudio* audio = NULL;
+OrxonoxGuiExec* exec = NULL;
+OrxonoxGuiBanner* banner = NULL;
+OrxonoxGuiKeys* keys = NULL;
+OrxonoxGuiUpdate* update = NULL;
 
 /* ORXONOXGUI */
@@ -51,50 +52,54 @@
 OrxonoxGui::OrxonoxGui(int argc, char *argv[])
 {
+  Window* orxonoxGUI = NULL;
+
   initGUI(argc, argv);
 
   orxonoxGUI = new Window( "grafical orxonox loader, "PACKAGE_VERSION);
-  
-  Box* windowBox = new Box ('h');
+  {
+    Box* windowBox = new Box ('h');
+    {
+      banner = new OrxonoxGuiBanner();
+      windowBox->fill (banner->getWidget());
+      
+      Box* optionBoxL = new Box('v');
+      {
+	Box* avBox = new Box('h');
+	
+	video = new OrxonoxGuiVideo();
+	avBox->fill(video->getWidget());
+	audio = new OrxonoxGuiAudio();
+	avBox->fill(audio->getWidget());
+      
+	optionBoxL->fill(avBox);
 
-  banner = new OrxonoxGuiBanner();
-  windowBox->fill (banner->getWidget());
-  
-  Box* optionBoxL = new Box('v');
-  Box* optionBoxR = new Box('v');
-  
-  Box* avBox = new Box('h');
-
-  video = new OrxonoxGuiVideo();
-  avBox->fill(video->getWidget());
-  audio = new OrxonoxGuiAudio();
-  avBox->fill(audio->getWidget());
-      
-  optionBoxL->fill(avBox);
-
-  keys = new OrxonoxGuiKeys();
-  optionBoxL->fill(keys->getWidget());
-  windowBox->fill(optionBoxL);
-
-  exec = new OrxonoxGuiExec();
-  optionBoxR->fill(exec->getWidget());
-
-  flags = new OrxonoxGuiFlags();
-
-  optionBoxR->fill(flags->getWidget());
-
-  update = new OrxonoxGuiUpdate();
-  optionBoxR->fill(update->getWidget());
-  windowBox->fill(optionBoxR);
-  
-  orxonoxGUI->fill(windowBox);
-
+	keys = new OrxonoxGuiKeys();
+	optionBoxL->fill(keys->getWidget());
+	windowBox->fill(optionBoxL);
+      }
+      Box* optionBoxR = new Box('v');
+      {
+	exec = new OrxonoxGuiExec();
+	optionBoxR->fill(exec->getWidget());
+	
+	flags = new OrxonoxGuiFlags();
+	
+	optionBoxR->fill(flags->getWidget());
+	
+	update = new OrxonoxGuiUpdate();
+	optionBoxR->fill(update->getWidget());
+      }
+      windowBox->fill(optionBoxR);
+    }
+    orxonoxGUI->fill(windowBox);
+  }
   // Reading Values from File
-  exec->setConfFile("~/.orxonox/orxonox.conf");
-  exec->readFromFile(orxonoxGUI);
+  exec->setConfFile(ORXONOX_GUI_DEFAULT_CONFIG_FILE);
+  exec->readFromFile(Window::mainWindow);
   // Merging changes to the Options from appended flags.
   for (int optCount = 1; optCount < argc; optCount++)
     orxonoxGUI->walkThrough(Widget::flagCheck, argv[optCount], 0);
 
-  flags->setTextFromFlags(orxonoxGUI);
+  flags->setTextFromFlags(Window::mainWindow);
   orxonoxGUI->showall();
 
@@ -103,5 +108,5 @@
   // case update //
 #ifdef HAVE_CURL
-  if (static_cast<Option*>(orxonoxGUI->findWidgetByName("auto update", 0))->value == 1)
+  if (static_cast<Option*>(Window::mainWindow->findWidgetByName("auto update", 0))->value == 1)
     {
       update->checkForUpdates();
@@ -110,5 +115,6 @@
 
   // case start-with-gui.
-  if (!access(exec->getConfigFile(), F_OK) && static_cast<Option*>(orxonoxGUI->findWidgetByName("Always Show this Menu", 0))->value == 0)
+  if (!access(exec->getConfigFile(), F_OK) && 
+      static_cast<Option*>(orxonoxGUI->findWidgetByName("Always Show this Menu", 0))->value == 0)
     OrxonoxGuiExec::startOrxonox(NULL, exec);
   else
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui.h
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui.h	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui.h	(revision 4046)
@@ -16,7 +16,9 @@
 using namespace std;
 
-#include "orxonox_gui_gtk.h"
+#include <stdlib.h>
 
-#include <stdlib.h>
+#define ORXONOX_GUI_DEFAULT_CONFIG_FILE "~/.orxonox/orxonox.conf"
+
+class OrxonoxGuiElement;
 
 //! Class that creates the OrxonoxGui
@@ -26,5 +28,4 @@
   OrxonoxGui(int argc, char *argv[]);
   ~OrxonoxGui(void);
-
 };
 
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_audio.cc
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_audio.cc	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_audio.cc	(revision 4046)
@@ -31,27 +31,36 @@
 OrxonoxGuiAudio::OrxonoxGuiAudio(void)
 {
-  this->audioFrame = new Frame("Audio-Options:");
-  this->audioBox = new Box('v');
-  this->audioFrame->setGroupName("audio");
-  
-  this->enableSound = new CheckButton("Disable Sound");
-  this->enableSound->setFlagName ("no-sound", 0);
-  this->enableSound->saveability();
-  this->audioBox->fill(this->enableSound);
-  Label* musicVolumeLabel = new Label("Music Volume");
-  this->audioBox->fill(musicVolumeLabel);
-  this->musicVolume = new Slider("Music Volume", 0, 100);
-  this->musicVolume->setFlagName("music-volume", "m", 80);
-  this->musicVolume->saveability();
-  this->audioBox->fill (this->musicVolume);
-  Label* effectsVolumeLabel = new Label ("Effects Volume");
-  this->audioBox->fill (effectsVolumeLabel);
-  this->effectsVolume = new Slider ("Effects Volume", 0, 100);
-  this->effectsVolume->setFlagName ("effects-volume", "e", 80);
-  this->effectsVolume->saveability();
-  this->audioBox->fill (this->effectsVolume);
+  Frame* audioFrame;        //!< The Frame that holds the audio Options.
+  Box* audioBox;            //!< The Box that holds the audio Options.
+  CheckButton* enableSound; //!< A Ckeckbutton for enabling Sound.
+  Slider* musicVolume;      //!< A Slider for music volume.
+  Slider* effectsVolume;    //!< A Slider for effects volume.
 
-  this->audioFrame->fill(this->audioBox);
-  this->setMainWidget(this->audioFrame);
+  audioFrame = new Frame("Audio-Options:");
+  audioFrame->setGroupName("audio");
+  {
+    audioBox = new Box('v');
+    {
+      
+      enableSound = new CheckButton("Disable Sound");
+      enableSound->setFlagName ("no-sound", 0);
+      enableSound->saveability();
+      audioBox->fill(enableSound);
+      Label* musicVolumeLabel = new Label("Music Volume");
+      audioBox->fill(musicVolumeLabel);
+      musicVolume = new Slider("Music Volume", 0, 100);
+      musicVolume->setFlagName("music-volume", "m", 80);
+      musicVolume->saveability();
+      audioBox->fill (musicVolume);
+      Label* effectsVolumeLabel = new Label ("Effects Volume");
+      audioBox->fill (effectsVolumeLabel);
+      effectsVolume = new Slider ("Effects Volume", 0, 100);
+      effectsVolume->setFlagName ("effects-volume", "e", 80);
+      effectsVolume->saveability();
+      audioBox->fill (effectsVolume);
+    }
+    audioFrame->fill(audioBox);
+  }
+  setMainWidget(audioFrame);
 }
 
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_audio.h
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_audio.h	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_audio.h	(revision 4046)
@@ -7,5 +7,4 @@
 #define _ORXONOX_GUI_AUDIO_H
 
-#include "orxonox_gui.h"
 #include "orxonox_gui_element.h"
 
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_banner.cc
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_banner.cc	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_banner.cc	(revision 4046)
@@ -33,38 +33,56 @@
 OrxonoxGuiBanner::OrxonoxGuiBanner(void)
 {
+  // the banner Frame
+  Frame* bannerFrame;       //!< The frame that holds the Banner.
+  Box* bannerBox;           //!< The box that holds the Banner.
+  EventBox* bannerEventBox; //!< an Image needs an EventBox to catch klicks.
+  Label* bannerLabel;       //!< The Label of the Banner.
+
+  // the logo Window
+  Window* logoWindow;       //!< The Window that holds the Orxonox-CrewLogo.
+  EventBox* logoEventBox;   //!< The EventBox that holds the Orxonox-CrewLogo. it has to be an eventbox, because Images can not receive clicks.
+  Box* logoBox;             //!< The Box that holds the Orxonox-CrewLogo
+  Image* logoImage;         //!< The Orxonox-CrewLogo-Image
+  Label* logoLabel;         //!< The Label for the Orxonox-CrewLogo
+  Label* orxIsLabel;        //!< Some text about us.
+
+
   // Banner Itself //
-  this->bannerEventBox = new EventBox("BannerEventBox");
-  this->bannerImage = new Image(banner_xpm);
-  this->bannerEventBox->fill(this->bannerImage);
+  bannerEventBox = new EventBox("BannerEventBox");
+  {
+    Image* bannerImage;       //!< The Image for the Banner.
 
+    bannerImage = new Image(banner_xpm);
+    bannerEventBox->fill(bannerImage);
+  }
   // Banner Window //
-  this->logoWindow = new Window("Logo");
+  logoWindow = new Window("Logo");
+  {
 
 #ifdef HAVE_GTK2
-  this->bannerEventBox->connectSignal("button_press_event", this->logoWindow, Window::windowOpen);
+    bannerEventBox->connectSignal("button_press_event", logoWindow, Window::windowOpen);
 
-  this->logoWindow->connectSignal("destroy", this->logoWindow, Window::windowClose);
-  this->logoWindow->connectSignal("delete_event", this->logoWindow, Window::windowClose);
+    logoWindow->connectSignal("destroy", logoWindow, Window::windowClose);
+    logoWindow->connectSignal("delete_event", logoWindow, Window::windowClose);
 #endif /* HAVE_GTK2 */
-  this->logoEventBox = new EventBox();
-  this->logoBox = new Box('v');
-  this->logoLabel = new Label("orxonox, version: " PACKAGE_VERSION);
-  this->logoBox->fill(this->logoLabel);
-  this->logoImage = new Image(logo_xpm);
-  this->logoBox->fill(this->logoImage);
+    logoEventBox = new EventBox();
+    logoBox = new Box('v');
+    logoLabel = new Label("orxonox, version: " PACKAGE_VERSION);
+    logoBox->fill(logoLabel);
+    logoImage = new Image(logo_xpm);
+    logoBox->fill(logoImage);
 
-  //! \todo add the names of all the guys working on orxonox
-  this->orxIsLabel = new Label("orxonox is:\nPatrick Boenzli - main Developer\nBenjamin Grauer - right Hand\n....");
-  this->logoBox->fill(this->orxIsLabel);
-  this->logoEventBox->fill(this->logoBox);
+    //! \todo add the names of all the guys working on orxonox
+    orxIsLabel = new Label("orxonox is:\nPatrick Boenzli - main Developer\nBenjamin Grauer - right Hand\n....");
+    logoBox->fill(orxIsLabel);
+    logoEventBox->fill(logoBox);
 #ifdef HAVE_GTK2
-  this->logoEventBox->connectSignal("button_press_event", this->logoWindow, Window::windowClose);
+    logoEventBox->connectSignal("button_press_event", logoWindow, Window::windowClose);
 #endif /* HAVE_GTK2 */
-
-  this->logoWindow->fill(this->logoEventBox);
+    logoWindow->fill(logoEventBox);
+  }
+  Window::addWindow(logoWindow);
   
-  Window::addWindow(this->logoWindow);
-
-  this->setMainWidget(bannerEventBox);
+  setMainWidget(bannerEventBox);
 }
 
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_banner.h
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_banner.h	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_banner.h	(revision 4046)
@@ -14,20 +14,4 @@
 class OrxonoxGuiBanner : public OrxonoxGuiElement
 {
- private:
-  // the banner Frame
-  Frame* bannerFrame;       //!< The frame that holds the Banner.
-  Box* bannerBox;           //!< The box that holds the Banner.
-  EventBox* bannerEventBox; //!< an Image needs an EventBox to catch klicks.
-  Image* bannerImage;       //!< The Image for the Banner.
-  Label* bannerLabel;       //!< The Label of the Banner.
-
-  // the logo Window
-  Window* logoWindow;       //!< The Window that holds the Orxonox-CrewLogo.
-  EventBox* logoEventBox;   //!< The EventBox that holds the Orxonox-CrewLogo. it has to be an eventbox, because Images can not receive clicks.
-  Box* logoBox;             //!< The Box that holds the Orxonox-CrewLogo
-  Image* logoImage;         //!< The Orxonox-CrewLogo-Image
-  Label* logoLabel;         //!< The Label for the Orxonox-CrewLogo
-  Label* orxIsLabel;        //!< Some text about us.
-
  public:
   OrxonoxGuiBanner(void);
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_element.cc
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_element.cc	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_element.cc	(revision 4046)
@@ -40,4 +40,7 @@
 }
 
+/**
+   \brief Every GuiElement should set this, or it could result in a SegFault.
+*/
 void OrxonoxGuiElement::setMainWidget(Widget* widget)
 {
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_element.h
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_element.h	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_element.h	(revision 4046)
@@ -10,9 +10,5 @@
 #include "orxonox_gui_gtk.h"
 
-// FORWARD DEFINITION
-
-
-
-//! A class for ...
+//! A SuperClass for all the Different GuiElements
 class OrxonoxGuiElement {
 
@@ -21,4 +17,5 @@
   virtual ~OrxonoxGuiElement();
   
+  /** \returns the main Widget of this GuiElement. */
   Widget* getWidget(void) {return this->mainWidget;}
  protected:
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_gtk.cc
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_gtk.cc	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_gtk.cc	(revision 4046)
@@ -32,8 +32,7 @@
 using namespace std;
 
-// temporarily.
 #include "orxonox_gui_flags.h"
-extern Window* orxonoxGUI;
 extern OrxonoxGuiFlags* flags;
+
 char* guiExecutable;
 char* progExecutable;
@@ -145,5 +144,7 @@
 //////////////////////////////
 
+////////////
 /* WIDGET */
+////////////
 /**
    \brief constructs a Widget
@@ -153,5 +154,4 @@
   next = NULL;
   this->title = NULL;
-  return;
 }
 
@@ -162,12 +162,10 @@
 Widget::~Widget(void)
 {
-    if (this->title)
+  if (this->title)
     {
       delete []this->title;
     }
-    
-    PRINTF(5)("deleting the Widget part.\n");
-    
-  PRINTF(5)("deleting recursively\n");
+  
+  PRINTF(5)("deleting the Widget part.\n");
 
   // deleting next item if existent
@@ -178,5 +176,5 @@
   //!  \todo not hiding widget, deleting.
   //  this->hide();
-  //  delete this->widget;
+  // gtk_destroy_widget(this->widget);
 }
 
@@ -317,5 +315,7 @@
       int* count =(int*)data;
       *count = *count +1;
-      PRINT(0)(" %d:%s is %s\n", *count, static_cast<Option*>(widget)->title, static_cast<Option*>(widget)->save());
+      PRINT(0)(" %d:%s is %s\n", *count,
+	       static_cast<Option*>(widget)->title,
+	       static_cast<Option*>(widget)->save());
     }
 }
@@ -421,5 +421,5 @@
       bool found = false;
       // check if long flag matches
-      if ((option->flagName && strlen(name)>2 &&
+      if ((option->flagName && strlen(name) > 2 &&
 	   !strncmp(name+2, option->flagName, strlen(option->flagName)) &&
 	   (name[strlen(option->flagName)+2] == '\0' || name[strlen(option->flagName)+2] == '=') ))
@@ -518,8 +518,7 @@
 #endif /* HAVE_GTK2 */
 
-//void deleteWidget(Widget* lastWidget)
-
-
+/////////////
 /* PACKERS */
+/////////////
 /**
    \brief Constructs a Packer
@@ -537,12 +536,10 @@
 { 
   PRINTF(5)("deleting the Packer part.\n");
-  
   if (this->groupName)
     delete []this->groupName;
-
+  
   //deleting recursively.
   if (this->down)
     delete this->down;
-  this->down = NULL;
 }
 
@@ -551,5 +548,5 @@
    \param name The name of the group.
 */
-void Packer::setGroupName(char* name)
+void Packer::setGroupName(const char* name)
 {
   if (this->groupName)
@@ -559,15 +556,7 @@
 }
 
-/**
-   \brief Retrieves the group name under which all the lower widgets of this will be saved.
-   \returns name The name of the group.
-*/
-char* Packer::getGroupName(void)
-{
-  return this->groupName;
-}
-
+////////////////
 /* CONTAINERS */
-
+////////////////
 /**
    \brief Initializes a Container.
@@ -594,5 +583,5 @@
    It does this by filling up the down pointer only if down points to NULL.
 */
-void Container::fill(Widget *lowerWidget)
+void Container::fill(Widget* lowerWidget)
 {
   if (this->down == NULL)
@@ -601,45 +590,31 @@
       gtk_container_add(GTK_CONTAINER(this->widget), lowerWidget->widget);
 #endif /* HAVE_GTK2 */
+
       this->down = lowerWidget;
     }
   else
-    PRINTF(1)("!!error!! You try to put more than one Widget into a Container. \nNot including this item.\nThis is only possible with Boxes.\n");
-}
-
-// gtk_container_set_border_width(GTK_CONTAINER(widget), 5);
-
+    PRINTF(1)("You tried to put more than one Widget into a Container. \nNot including this item.\nThis is only possible with Boxes.\n");
+}
+
+/**
+   \param borderwidth sets the Width of the border
+*/
+void Container::setBorderWidth(int borderwidth)
+{
+  this->borderwidth = borderwidth;
+
+#ifdef HAVE_GTK2
+  gtk_container_set_border_width(GTK_CONTAINER(widget), borderwidth);
+#endif /* HAVE_GTK2 */
+}
+
+////////////
 /* WINDOW */
-
-Window* Window::mainWindow = NULL;
-
-/**
-   \brief Adds a new Window Windows to the List of Windows.
-   \param windowToAdd The Windows that should be added to the List
-   \todo this instead of windowToAdd(possibly)
-*/
-void Window::addWindow(Window* windowToAdd)
-{
-  if (!mainWindow)
-    {
-      mainWindow = windowToAdd;
-      return;
-    }
-
-  Widget* tmpWindow = mainWindow;
-  while(tmpWindow->next)
-    tmpWindow = tmpWindow->next;
-  tmpWindow->next = windowToAdd;
-  
-  return;
-}
-      
-
-/**
-   \brief Creating a new Window without a Name
-*/
-Window::Window(void)
-{
-  this->init();
-}
+////////////
+
+/**
+   \brief The main Window of Th Gui
+*/
+Window* Window::mainWindow = NULL;      
 
 /**
@@ -647,31 +622,11 @@
    \param windowName the name the window should get.
 */
-
-Window::Window(char* windowName)
-{
-  this->init();
-  this->setTitle(windowName);
-}
-
-/**
-   \brief Destructs a Window.
-*/
-Window::~Window(void)
-{
-  if (this->title)
-    PRINTF(5)("deleting the Window: %s\n", this->title);
-  else 
-    PRINTF(5)("deleting the Window.\n");
-  //  this->hide();
-}
-
-/**
-   \brief initializes a new Window
-*/
-void Window::init(void)
+Window::Window(const char* windowName)
 {
   if (!mainWindow)
-    mainWindow = this;
-  
+    {
+      mainWindow = this;
+      this->isOpen = true;
+    }
   isOpen = false;
 
@@ -684,4 +639,38 @@
   gtk_container_set_border_width(GTK_CONTAINER(widget), 3);
 #endif /* HAVE_GTK2 */
+
+  if (windowName)
+    this->setTitle(windowName);
+}
+
+/**
+   \brief Destructs a Window.
+*/
+Window::~Window(void)
+{
+  PRINTF(5)("deleting the Window: %s\n", this->title);
+}
+
+/**
+   \brief Adds a new Window Windows to the List of Windows.
+   \param windowToAdd The Windows that should be added to the List
+   \todo this instead of windowToAdd(possibly)
+*/
+void Window::addWindow(Window* windowToAdd)
+{
+  if (!mainWindow)
+    {
+      mainWindow = windowToAdd;
+      windowToAdd->isOpen = true;
+    }
+  else
+    {
+      Widget* tmpWindow = mainWindow;
+      while(tmpWindow->next)
+	tmpWindow = tmpWindow->next;
+      tmpWindow->next = windowToAdd;
+      windowToAdd->isOpen = false;
+    }
+  return;
 }
 
@@ -691,19 +680,10 @@
 void Window::showall(void)
 {
+#ifdef HAVE_GTK2
   if (!this->isOpen)
-    {
-      //      printf("showall\n");
-#ifdef HAVE_GTK2
-      gtk_widget_show_all(this->widget);
-#endif /* HAVE_GTK2 */ 
-     this->isOpen = true;
-    }
+    gtk_widget_show_all(this->widget);
   else
-    {
-      //      printf("showone\n");
-#ifdef HAVE_GTK2
-      gtk_widget_show(this->widget);
-#endif /* HAVE_GTK2 */
-    }
+    gtk_widget_show(this->widget);
+#endif /* HAVE_GTK2 */
 }
 
@@ -753,5 +733,4 @@
 }
 
-#ifdef HAVE_GTK2
 /**
    \brief opens up a window(not topmost Window).
@@ -761,8 +740,12 @@
    \param window the Window that should be opened
 */
-gint Window::windowOpen(GtkWidget *widget, GdkEvent* event, void* window)
+#ifdef HAVE_GTK2
+gint Window::windowOpen(GtkWidget* widget, GdkEvent* event, void* window)
 {
   static_cast<Window*>(window)->open();
 }
+#else /* HAVE_GTK2 */
+int Window::windowOpen(void* widget, void* event, void* window){}
+#endif /* HAVE_GTK2 */
 
 /**
@@ -773,43 +756,20 @@
    \param window the Window that should be closed
 */
-gint Window::windowClose(GtkWidget *widget, GdkEvent* event, void* window)
+#ifdef HAVE_GTK2
+gint Window::windowClose(GtkWidget* widget, GdkEvent* event, void* window)
 {
   static_cast<Window*>(window)->close();
 }
-
-#endif /* HAVE_GTK2 */
-
-
+#else /* HAVE_GTK2 */
+int Window::windowClose(void* widget, void* event, void* window){}
+#endif /* HAVE_GTK2 */
+
+///////////
 /* FRAME */
-
-/** 
-    \brief Creates a new Frame without a name
-*/
-Frame::Frame(void)
-{
-  this->init();
-}
-
+///////////
 /**
    \brief Creates a new Frame with name title
 */
-Frame::Frame(char* title)
-{
-  this->init();
-  this->setTitle(title);
-}
-
-/**
-   \brief destrcucts a Frame
-*/
-Frame::~Frame(void)
-{
-  PRINTF(5)("deleting the Frame: %s\n", this->title);
-}
-
-/** 
-    \brief Initializes a new Frame with default settings
-*/
-void Frame::init(void)
+Frame::Frame(char* frameName)
 {
 #ifdef HAVE_GTK2
@@ -817,4 +777,14 @@
   gtk_container_set_border_width(GTK_CONTAINER(this->widget), 3);
 #endif /* HAVE_GTK2 */
+  if (title)
+    this->setTitle(frameName);
+}
+
+/**
+   \brief destrcucts a Frame
+*/
+Frame::~Frame(void)
+{
+  PRINTF(5)("deleting the Frame: %s\n", this->title);
 }
 
@@ -834,36 +804,12 @@
 }
 
-// EVENTBOX //
-
-/**
-   \brief Creates a new EventBox with default settings.
-*/
-EventBox::EventBox(void)
-{
-  this->init();
-}
-
+//////////////
+/* EVENTBOX */
+//////////////
 /**
    \brief Creates a new EventBox with name title
-   \param title title the Eventbox should get(only data-structure-internal)
-*/
-EventBox::EventBox(char* title)
-{
-  this->init();
-  this->setTitle(title);
-}
-
-/**
-   \brief destructs an EventBox.
-*/
-EventBox::~EventBox(void)
-{
-  PRINTF(5)("deleting the EventBox: %s\n", this->title);
-}
-
-/**
-   \brief Initializes a new EventBox
-*/
-void EventBox::init(void)
+   \param eventBoxName title the Eventbox should get(only data-structure-internal)
+*/
+EventBox::EventBox(const char* eventBoxName)
 {
   this->isOption = -1;
@@ -873,16 +819,20 @@
   gtk_container_set_border_width(GTK_CONTAINER(this->widget), 3);
 #endif /* HAVE_GTK2 */
-}
-
+
+  if (eventBoxName)
+    this->setTitle(eventBoxName);
+}
+
+/**
+   \brief destructs an EventBox.
+*/
+EventBox::~EventBox(void)
+{
+  PRINTF(5)("deleting the EventBox: %s\n", this->title);
+}
+
+/////////
 /* BOX */
-
-/**
-   \brief Creates a new horizontal Box
-*/
-Box::Box(void)
-{
-  this->init('h');
-}
-
+/////////
 /**
    \brief Creates a new Box of type boxtype
@@ -890,21 +840,4 @@
 */
 Box::Box(char boxtype)
-{
-  this->init(boxtype);
-}
-
-/**
-   \brief destructs a Box.
-*/
-Box::~Box(void)
-{
-  PRINTF(5)("deleting the Box: %s\n", this->title);
-}
-
-/**
-   \brief Initializes a new Box with type boxtype
-   \param boxtype see Box(char boxtype)
-*/
-void Box::init(char boxtype)
 {
   this->isOption = -2;
@@ -918,4 +851,12 @@
 }
 
+/**
+   \brief destructs a Box.
+*/
+Box::~Box(void)
+{
+  PRINTF(5)("deleting the Box: %s\n", this->title);
+}
+
 /** 
     \brief Fills a box with a given Widget.
@@ -936,13 +877,12 @@
       tmp = this->down;
       while(tmp->next != NULL)
-	{
-	  tmp = tmp->next;
-	}
+	tmp = tmp->next;
       tmp->next = lowerWidget;
     }
 }
 
+////////////
 /* OPTION */
-
+////////////
 /**
    \brief Initializes a new Option.
@@ -954,4 +894,8 @@
   this->flagName = NULL;
   this->flagNameShort = NULL;
+  
+  this->shortDescription = NULL;
+  this->longDescription = NULL;
+
   this->saveable = false;
   this->defaultValue = 0;
@@ -968,4 +912,8 @@
   if (this->flagNameShort)
     delete []this->flagNameShort;
+  if (this->shortDescription)
+    delete []this->shortDescription;
+  if (this->longDescription)
+    delete []this->longDescription;
 }
 
@@ -976,5 +924,5 @@
    \param defaultvalue the default Value for this Option(see definition of defaultvalue
 */
-void Option::setFlagName(char* flagname, int defaultvalue)
+void Option::setFlagName(const char* flagname, int defaultvalue)
 {
   if (this->flagName)
@@ -982,5 +930,12 @@
   this->flagName = new char [strlen(flagname)+1];
   strcpy(this->flagName, flagname);
+
   this->defaultValue = defaultvalue;
+
+  if (this->flagNameShort)
+    {
+      delete this->flagNameShort;
+      this->flagNameShort = NULL;
+    }
 
   //  cout << "Set Flagname of " << this->title << " to " << flagname << endl;
@@ -993,5 +948,5 @@
     \param flagnameshort a short flagname to be displayed in the output
 */
-void Option::setFlagName(char* flagname, char* flagnameshort,  int defaultvalue)
+void Option::setFlagName(const char* flagname, const char* flagnameshort,  int defaultvalue)
 {
   if (this->flagName)
@@ -1008,10 +963,22 @@
 }
 
-/**
-   \brief Sets the saveable-state of the option to true.
-*/
-void Option::saveability(void)
-{
-  this->saveable = true;
+void Option::setDescription(const char* shortDescription, const char* longDescription)
+{
+  // setting up the short description
+  if (this->shortDescription)
+    delete []this->shortDescription;
+  this->shortDescription = new char [strlen(shortDescription)+1];
+  strcpy(this->shortDescription, shortDescription);
+
+  //setting up the long description
+  if (this->longDescription)
+    delete []this->longDescription;
+  if (longDescription)
+    {
+      this->longDescription = new char [strlen(longDescription)+1];
+      strcpy(this->longDescription, longDescription);
+    }
+  else
+    this->longDescription = NULL;
 }
 
@@ -1027,5 +994,5 @@
 /**
    \brief saves an Option
-   \returns the String that should be saved.
+   \returns the String that should be saved. (this string __should__ be deleted)
 
    this is a default Option save
@@ -1033,5 +1000,5 @@
 char* Option::save(void)
 {
-  char* value = new char [10];
+  char* value = new char [30];
   sprintf (value, "%d", this->value);
   return value;
@@ -1070,15 +1037,21 @@
 #endif /* HAVE_GTK2 */
 
-
+////////////
 /* BUTTON */
-
+////////////
 /**
    \brief Creates a new Button with a buttonname
-   \param buttonname sets the Name of the Button
-*/
-Button::Button(char* buttonname)
-{
-  this->init();
-  this->setTitle(buttonname);
+   \param buttonName sets the Name of the Button
+*/
+Button::Button(char* buttonName)
+{
+  isOption = 0;
+
+#ifdef HAVE_GTK2
+  widget = gtk_button_new_with_label("");
+#endif /* HAVE_GTK2 */
+
+  if (buttonName)
+    this->setTitle(buttonName);
 }
 
@@ -1089,16 +1062,4 @@
 {
   PRINTF(5)("deleting the Label: %s\n", this->title);
-}
-
-/**
-   \brief Initializes a new Button
-*/
-void Button::init(void)
-{
-  isOption = 0;
-
-#ifdef HAVE_GTK2
-  widget = gtk_button_new_with_label("");
-#endif /* HAVE_GTK2 */
 }
 
@@ -1120,5 +1081,5 @@
 /**
    \brief redraws the Button
-   not implemented yet
+   \todo not implemented yet
 */
 void Button::redraw(void)
@@ -1136,14 +1097,21 @@
 }
 
+/////////////////
 /* CHECKBUTTON */
-
+/////////////////
 /**
    \brief Creates a new CheckButton with an ame 
-   \param buttonname The name the CheckButton should display.
-*/
-CheckButton::CheckButton(char* buttonname)
-{
-  this->init();
-  this->setTitle(buttonname);
+   \param buttonName The name the CheckButton should display.
+*/
+CheckButton::CheckButton(const char* buttonName)
+{
+  this->isOption = 1;
+
+#ifdef HAVE_GTK2
+  this->widget = gtk_check_button_new_with_label("");
+#endif /* HAVE_GTK2 */
+
+  if (buttonName)
+    this->setTitle(buttonName);
 
 #ifdef HAVE_GTK2
@@ -1164,16 +1132,4 @@
 
 /**
-   \brief Initialize a new CheckButton with default settings
-*/
-void CheckButton::init(void)
-{
-  this->isOption = 1;
-
-#ifdef HAVE_GTK2
-  this->widget = gtk_check_button_new_with_label("");
-#endif /* HAVE_GTK2 */
-}
-
-/**
    \brief Sets a new Title to a CheckButton
    \param title The new Name the CheckButton should display.
@@ -1190,4 +1146,7 @@
 }
 
+/**
+   \returns the Active state of the checkButton
+*/
 bool CheckButton::isActive(void)
 {
@@ -1215,5 +1174,4 @@
 }
 
-
 /**
    \brief Redraws the CheckButton(if option has changed).
@@ -1227,6 +1185,7 @@
 }
 
+////////////
 /* SLIDER */
-
+////////////
 /**
    \brief Creates a new Slider
@@ -1235,7 +1194,14 @@
    \param end The maximal Value of the slider.
 */
-Slider::Slider(char* slidername, int start, int end)
-{
-  this->init(start, end);
+Slider::Slider(const char* slidername, int start, int end)
+{
+  this->isOption = 2;
+
+  this->start = start;
+  this->end = end;
+#ifdef HAVE_GTK2
+ widget = gtk_hscale_new_with_range(this->start, this->end, 5);
+#endif /* HAVE_GTK2 */
+
   this->setValue(start);
   this->setTitle(slidername);
@@ -1254,19 +1220,4 @@
 
 /**
-   \brief Initializes a Slider with start and end Values
-   params: see Slider::Slider(char* slidername, int start, int end)
-*/
-void Slider::init(int start, int end)
-{
-  this->isOption = 2;
-
-  this->start = start;
-  this->end = end;
-#ifdef HAVE_GTK2
- widget = gtk_hscale_new_with_range(this->start, this->end, 5);
-#endif /* HAVE_GTK2 */
-}
-
-/**
    \brief Setting a new value to the Slider.
    Maybe you also require a Slider::redraw() for this to display
@@ -1284,5 +1235,5 @@
 {
 #ifdef HAVE_GTK2
-  gtk_range_set_value(GTK_RANGE(this->widget), value);
+  gtk_range_set_value(GTK_RANGE(this->widget), this->value);
 #endif /* HAVE_GTK2 */
 }
@@ -1308,6 +1259,7 @@
 }
 
+//////////
 /* MENU */
-
+//////////
 /**
    \brief constructs a new Menu, without adding any items to it.
@@ -1355,5 +1307,5 @@
       /*
 	#ifdef HAVE_GTK2
-	free(this->currItem->item);
+	gtk_widget_destroy(this->currItem->item);
 	#endif /* HAVE_GTK2 */
       MenuItem* tmpItem = this->currItem;
@@ -1480,7 +1432,13 @@
    \param value The Value of the OptionLabel(what will be displayed).
 */
-OptionLabel::OptionLabel(char* label, char* value)
-{
-  this->init();
+OptionLabel::OptionLabel(const char* label, const char* value)
+{
+  this->isOption = 5;
+  cValue = NULL;
+
+#ifdef HAVE_GTK2
+  this->widget = gtk_label_new("");
+#endif /* HAVE_GTK2 */
+
   this->setTitle(label);
   this->setValue(value);
@@ -1498,21 +1456,8 @@
 
 /**
-   \brief Initializes an OptionLabel
-*/
-void OptionLabel::init(void)
-{
-  this->isOption = 5;
-  cValue = NULL;
-
-#ifdef HAVE_GTK2
-  this->widget = gtk_label_new("");
-#endif /* HAVE_GTK2 */
-}
-
-/**
    \brief Updates the value of an OptionLabel
    \param newValue The new Name that should be displayed.
 */
-void OptionLabel::setValue(char* newValue)
+void OptionLabel::setValue(const char* newValue)
 {
   if (this->cValue)
@@ -1567,46 +1512,34 @@
 void OptionLabel::load(char* loadString)
 {
-  PRINTF(4)( "Loading %s: setting to %s\n", this->title, loadString); 
+  PRINTF(4)("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.
-*/
-Label::Label(void)
-{
-  this->init();
-}
-
+///////////
+/* LABEL */
+///////////
 /**
    \brief Creates a new Label with a Text.
    \param text The text to be displayed.
 */
-Label:: Label(char* text)
-{
-  this->init();
-  this->setTitle(text);
-}
-
-/**
-   \brief destructs a Label.
-*/
-Label::~Label(void)
-{
-  PRINTF(5)("deleting the Label: %s\n", this->title);
-}
-
-/**
-   \brief initializes a new Label
-*/
-void Label::init(void)
+Label:: Label(const char* text)
 {
   this->isOption = 0;
-
+  
 #ifdef HAVE_GTK2
   this->widget = gtk_label_new("");
   gtk_label_set_line_wrap(GTK_LABEL(this->widget), TRUE);
 #endif /* HAVE_GTK2 */
+  
+  if (text)
+    this->setTitle(text);
+}
+
+/**
+   \brief destructs a Label.
+*/
+Label::~Label(void)
+{
+  PRINTF(5)("deleting the Label: %s\n", this->title);
 }
 
@@ -1615,5 +1548,5 @@
    \param text The text to be inserted into the Label.
 */
-void Label::setTitle(char* text)
+void Label::setTitle(const char* text)
 {
   if (this->title)
@@ -1674,39 +1607,17 @@
    \return The Text the Label holds.
 */
-char* Label::getText(void)
+const char* Label::getText(void)
 {
   return this->title;
 }
 
-/**
-   \brief Creates a new ProgressBar.
-*/
-ProgressBar::ProgressBar(void)
-{
-  this->init();
-}
-
+//////////////////
+/* PROGRESS-BAR */
+//////////////////
 /**
    \brief Creates a new ProgressBar.
    \param label The name you want to get the ProgressBar.
 */
-ProgressBar::ProgressBar(char* label)
-{
-  this->init();
-  this->setTitle(label);
-}
-
-/**
-   \brief destructs a ProgressBar
-*/
-ProgressBar::~ProgressBar(void)
-{
-  PRINTF(5)("deleting the ProgressBar: %s\n", this->title);
-}
-
-/**
-   \brief Initializes a ProgressBar
-*/
-void ProgressBar::init(void)
+ProgressBar::ProgressBar(const char* label)
 {
   this->isOption = 0;
@@ -1718,4 +1629,15 @@
   this->widget = gtk_progress_bar_new_with_adjustment(this->adjustment);
 #endif /* HAVE_GTK2 */
+
+  if (label)
+    this->setTitle(label);
+}
+
+/**
+   \brief destructs a ProgressBar
+*/
+ProgressBar::~ProgressBar(void)
+{
+  PRINTF(5)("deleting the ProgressBar: %s\n", this->title);
 }
 
@@ -1740,6 +1662,8 @@
 #ifdef HAVE_GTK2
   gtk_progress_set_value(GTK_PROGRESS(widget), this->progress*100.0/this->totalSize);
-#endif /* HAVE_GTK2 */
-  PRINTF(3)("Progress: %f\n", this->progress*100.0/this->totalSize);
+  PRINTF(4)("Progress: %f%%\n", this->progress*100.0/this->totalSize);
+#else /* HVE_GTK2 */
+  PRINT(0)("Progress: %f%%\n", this->progress*100.0/this->totalSize);
+#endif /* HAVE_GTK2 */
 }
 
@@ -1752,6 +1676,7 @@
 }
 
+///////////
 /* IMAGE */
-
+///////////
 /**
    \brief Creates a new Image
@@ -1801,4 +1726,3 @@
   this->title = new char[strlen(name)+1];
   strcpy(this->title, name);
-
-}
+}
Index: /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_gtk.h
===================================================================
--- /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_gtk.h	(revision 4045)
+++ /orxonox/branches/guiMerge/src/lib/gui/gui/orxonox_gui_gtk.h	(revision 4046)
@@ -30,4 +30,14 @@
 #endif /* HAVE_GTK2 */
 
+// enumerator for different GuiOption-Types
+enum GUI_OPTION {GUI_CONTAINER = -2,
+		 GUI_BOX = -1,
+		 GUI_NOTHING = 0,
+		 GUI_BOOL = 1,
+		 GUI_INT = 2,
+		 GUI_FLOAT = 3,
+		 GUI_CHAR = 4,
+		 GUI_CHAR_ARRAY = 5};
+
 extern char* guiExecutable;
 extern char* progExecutable;
@@ -48,4 +58,5 @@
   void hide(void);
   void setSize(int width, int height);
+
   virtual void setTitle(const char* title);  //!< An abstract Function, that sets the title of Widgets.
 
@@ -65,5 +76,4 @@
 #ifdef HAVE_GTK2
   // Connection - Functions
-
   gulong connectSignal(char* event, gint(*signal)(GtkWidget*, GdkEvent*, void* ));
   gulong connectSignal(char* event, gint(*signal)(GtkWidget*, Widget* ));
@@ -72,17 +82,27 @@
   gulong connectSignal(char* event, void* extObj, gint(*signal)(GtkWidget*, GdkEventKey*, void* ));
   void disconnectSignal(gulong signalID);
-
   // Signals
   static gint doNothingSignal(GtkWidget* widget, GdkEvent* event, void* nothing);
-#endif /* HAVE_GTK2 */
+#else /* HAVE_GTK2 */
+  // Connection - Functions
+  unsigned long connectSignal(char* event, int(*signal)(void*, void*, void* )){};
+  unsigned long connectSignal(char* event, int(*signal)(void*, Widget* )){};
+  unsigned long connectSignal(char* event, void* extObj, int(*signal)(void*, void*, void* )){};
+  unsigned long connectSignal(char* event, void* extObj, int(*signal)(void*, void* )){};
+  void disconnectSignal(unsigned long signalID);
+  // Signals
+  static int doNothingSignal(void* widget, void* event, void* nothing);
+#endif /* HAVE_GTK2 */
+
 
   Widget* next;                     //!< next always points to the next Widget in the list. Every Widget has a next one, or has NULL as next
 #ifdef HAVE_GTK2
   GtkWidget* widget;                //!< widget is the gtk_widget that the specific Object Contains.
-#endif /* HAVE_GTK2 */
+#else /* HAVE_GTK2 */
+  void* widget;
+#endif /* HAVE_GTK2 */
+
   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
-
-  //! defines isOption states
-  enum option { containerType = -2, boxType = -1, nothingType = 0, boolType = 1, intType = 2}; 
+  
   char* title;                      //!< The name of the Widget. Some do display it, Options need it to save;
 };
@@ -95,9 +115,11 @@
   virtual ~Packer(void);
 
-  Widget* down; //!< this points to the Widget below this.
-  char* groupName; //!< For each Packer you can specify a Groupname under which the lowerWidgets will be saved.
-
-  void setGroupName(char* name);
-  char* getGroupName(void);
+  Widget* down;                      //!< this points to the Widget below this.
+  char* groupName;                   //!< For each Packer you can specify a Groupname under which the lowerWidgets will be saved.
+
+  void setGroupName(const char* name);
+  /** \returns the GroupName if existent NULL otherwise */
+  inline const char* getGroupName(void) const {return this->groupName;}
+
 
   virtual void fill(Widget* lowerWidget) = 0; //!< An abstract function, that fills Packers.
@@ -119,5 +141,5 @@
   Container(void);
   virtual ~Container(void);
-  //  void setBorderWidth(int borderwidth);
+  void setBorderWidth(int borderwidth);
   void fill(Widget* lowerWidget);
 };
@@ -136,10 +158,8 @@
   static void addWindow(Window* windowToAdd);
 
-  Window(void);
-  Window(char* windowName);
+  Window(const char* windowName = NULL);
   virtual ~Window(void);
-  void init(void);
-  
-  void setTitle(const char* title);
+  
+  virtual void setTitle(const char* title);
   void showall(void);
   void open(void);
@@ -150,4 +170,7 @@
   static gint windowOpen(GtkWidget* widget, GdkEvent* event, void* window);
   static gint windowClose(GtkWidget* widget, GdkEvent* event, void* window);
+#else /* HAVE_GTK2 */
+  int Window::windowOpen(void* widget, void* event, void* window);
+  int Window::windowClose(void* widget, void* event, void* window);
 #endif /* HAVE_GTK2 */
 };
@@ -161,10 +184,8 @@
 {
  public:
-  Frame(void);
-  Frame(char* frameName);
+  Frame(char* frameName = NULL);
   virtual ~Frame(void);
-  void init(void);
-
-  void setTitle(const char* title);
+
+  virtual void setTitle(const char* title);
 };
 
@@ -176,8 +197,6 @@
 {
  public:
-  EventBox(void);
-  EventBox(char* eventBoxName);
+  EventBox(const char* eventBoxName = NULL);
   virtual ~EventBox(void);
-  void init(void);
 };
 
@@ -191,10 +210,8 @@
 {
  public:
-  Box(void);
-  Box(char boxtype);
+  Box(char boxtype = 'h');
   virtual ~Box(void);
-  void init(char boxtype);
-  
-  void fill(Widget* lowerWidget);
+  
+  virtual void fill(Widget* lowerWidget);
 };
 
@@ -206,25 +223,28 @@
 {
  protected:
-  bool saveable;  //!< Options can be Saved.
+  bool saveable;              //!< Options can be Saved.
   
  public:
   Option(void);
   virtual ~Option(void);
-  void init(void);
-
-  int value; //!< every option has a value either true or false(0,1) or something else like 25 for 25% of the volume
-  char* flagName; //!< options have a flag name that will be appendet if you start the Program from the GUI.
-  char* flagNameShort; //!< like flag_name but shorter
-  int defaultValue; //!< A default value is good, for hiding a option if it is not needed.(hidden if value == default_value)
-
-  void saveability(void);
-  void saveability(bool isSaveable);
+
+  int value;                  //!< every option has a value either true or false(0,1) or something else like 25 for 25% of the volume
+  char* flagName;             //!< options have a flag name that will be appendet if you start the Program from the GUI.
+  char* flagNameShort;        //!< like flag_name but shorter
+  int defaultValue;           //!< A default value is good, for hiding a option if it is not needed.(hidden if value == default_value)
+
+  char* shortDescription;      //!< A Text that describes this option in short
+  char* longDescription;      //!< A Longer Text describing this option in a full way
+
+  void saveability(bool isSaveable = true);
   virtual char* save(void);
   virtual void load(char* loadString);
 
   bool isSaveable(void);
-  void setFlagName(char* flagname, int defaultvalue);
-  void setFlagName(char* flagname, char* flagnameshort, int defaultvalue);
-  virtual void redraw(void) = 0; //!< A Option must be able to redraw itself.
+  void setFlagName(const char* flagname, int defaultvalue);
+  void setFlagName(const char* flagname, const char* flagnameshort, int defaultvalue);
+  void setDescription(const char* shortDescription, const char* longDescription = NULL);
+
+  virtual void redraw(void) = 0;       //!< A Option must be able to redraw itself.
   virtual void changeOption(void) = 0; //!< What to do, if an Option is Changed. eacht option decides for itself.
 #ifdef HAVE_GTK2
@@ -241,11 +261,10 @@
 {
  public:
-  Button(char* buttonname);
+  Button(char* buttonName = NULL);
   virtual ~Button(void);
-  void init(void);
-
-  void setTitle(const char* title);
-  void redraw(void);
-  void changeOption(void);
+
+  virtual void setTitle(const char* title);
+  virtual void redraw(void);
+  virtual void changeOption(void);
 };
 
@@ -256,12 +275,12 @@
 {
  public:
-  CheckButton(char* buttonname);
+  CheckButton(const char* buttonName = NULL);
   virtual ~CheckButton(void);
-  void init(void);
-
-  void setTitle(const char* title);
-  bool isActive(void);           //!< a Bool value to see, if this CheckButton is active.
-  void redraw(void);
-  void changeOption(void);
+
+  bool isActive(void);
+
+  virtual void setTitle(const char* title);
+  virtual void redraw(void);
+  virtual void changeOption(void);
 };
 
@@ -276,11 +295,10 @@
   int end;                              //!< The end of the Slider-range.
  public:
-  Slider(char* slidername, int start, int end);
+  Slider(const char* slidername, int start, int end);
   virtual ~Slider(void);
-  void init(int start, int end);
 
   void setValue(int value);
-  void redraw(void);
-  void changeOption(void);
+  virtual void redraw(void);
+  virtual void changeOption(void);
 };
 
@@ -301,4 +319,5 @@
     GtkWidget* item;                    //!< One Item From a Menu.
 #endif /* HAVE_GTK2 */
+
     MenuItem* next;                     //!< Pointer to the next MenuItem.
   };
@@ -316,6 +335,6 @@
   
   void addItem(char* itemName);
-  void redraw(void);
-  void changeOption(void);
+  virtual void redraw(void);
+  virtual void changeOption(void);
 };
 
@@ -323,21 +342,17 @@
 class OptionLabel : public Option
 {
- private:
-
- public:
-  OptionLabel(char* label, char* value);
+ public:
+  OptionLabel(const char* label, const char* value);
   virtual ~OptionLabel(void);
-  void init(void);
-  
-  void setValue(char* newValue);
+  
+  void setValue(const char* newValue);
 
   virtual char* save(void);
   virtual void load(char* loadString);
 
-  void redraw(void);
-  void changeOption(void);
+  virtual void redraw(void);
+  virtual void changeOption(void);
 
   char* cValue;                          //!< The Value the Label will have. \todo make private
-
 };
 
@@ -346,14 +361,12 @@
 {
  public:
-  Label(void);
-  Label(char* text);
+  Label(const char* text = NULL);
   virtual ~Label(void);
-  void init(void);
-  
-  void setTitle(char* text);
+  
+  virtual void setTitle(const char* text);
   void ereaseText(void);
   void appendText(char* textToAppend);
   void appendInt(int intToAppend);
-  char* getText(void);
+  const char* getText(void);
 };
 
@@ -362,8 +375,6 @@
 {
  public:
-  ProgressBar(void);
-  ProgressBar(char* label);
+  ProgressBar(const char* label = NULL);
   virtual ~ProgressBar(void);
-  void init(void);
 
   void setProgress(double progress);
