Index: /orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc
===================================================================
--- /orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc	(revision 3288)
+++ /orxonox/branches/updater/src/gui/orxonox_gui_gtk.cc	(revision 3289)
@@ -64,6 +64,12 @@
   gtk_main();
   gdk_threads_leave();
-}
-#endif /* HAVE_GTK2 */
+  delete Window::mainWindow;
+}
+#endif /* HAVE_GTK2 */
+
+
+//////////////////////////////
+/// DEFINING WIDGET-CLASES ///
+//////////////////////////////
 
 /* WIDGET */
@@ -75,17 +81,5 @@
 Widget::~Widget()
 {
-  //  cout << "hiding: " <<this->label <<"\n";
-  this->hide();
-  //  cout << "check if Packer: "<<this->label <<"\n";
-  if (this->isOption < 0)
-    {
-      //  cout << "get Down "<<this->label <<"\n";
-      static_cast<Packer*>(this)->down->~Widget();
-    }
-  //  cout << "next != NULL?: " <<this->label <<"\n";
-  if (this->next != NULL)
-    this->next->~Widget();
-  cout << "delete Widget: " <<this->label <<"\n";
-  //  delete widget;
+  this->destroy();
 }
 
@@ -102,4 +96,27 @@
 
 /**
+   \brief Destroys a Widget 
+*/
+void Widget::destroy(void)
+{
+  if (label)
+    {
+      delete []label;
+    }
+  
+  PRINTF(4)("deleting the Widget part.\n");
+
+  PRINTF(4)("deleting recursively\n");
+
+  // deleting next item if existent
+  if (this->next)
+    delete this->next;
+  this->next = NULL;
+
+  //!  \todo not hiding widget, deleting.
+  //  this->hide();
+}
+
+/**
    \brief makes the widget visible.
 */
@@ -132,43 +149,4 @@
 #endif /* HAVE_GTK2 */
 }
-
-#ifdef HAVE_GTK2
-/** 
-    \brief Connect any signal to any given Sub-widget
-*/
-gulong Widget::connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *))
-{
-  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), NULL);
-}
-
-/**
-   \brief Connect a signal with additionally passing the whole Object
-*/
-gulong Widget::connectSignal (char* event, gint (*signal)( GtkWidget*, Widget *))
-{
-  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), this);
-}
-
-/**
-   \brief Connect a signal with additionally passing a whole external Object
-*/
-gulong Widget::connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEvent*, void *))
-{
-  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
-}
-
-/**
-   \brief Connect a signal with additionally passing a whole external Object
-*/
-gulong Widget::connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEventKey*, void *))
-{
-  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
-}
-
-void Widget::disconnectSignal (gulong signalID)
-{
-  g_signal_handler_disconnect (G_OBJECT (this->widget), signalID);
-}
-#endif /* HAVE_GTK2 */
 
 /**
@@ -213,4 +191,40 @@
 
 #ifdef HAVE_GTK2
+/** 
+    \brief Connect any signal to any given Sub-widget
+*/
+gulong Widget::connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), NULL);
+}
+
+/**
+   \brief Connect a signal with additionally passing the whole Object
+*/
+gulong Widget::connectSignal (char* event, gint (*signal)( GtkWidget*, Widget *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), this);
+}
+
+/**
+   \brief Connect a signal with additionally passing a whole external Object
+*/
+gulong Widget::connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEvent*, void *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
+}
+
+/**
+   \brief Connect a signal with additionally passing a whole external Object
+*/
+gulong Widget::connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEventKey*, void *))
+{
+  return g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), extObj);
+}
+
+void Widget::disconnectSignal (gulong signalID)
+{
+  g_signal_handler_disconnect (G_OBJECT (this->widget), signalID);
+}
 
 /**
@@ -246,4 +260,22 @@
 
 /**
+   \brief Destroys a Packer.
+*/
+void Packer::destroy(void)
+{ 
+  PRINTF(4)("deleting the Packer part.\n");
+  
+  if (groupName)
+    delete []groupName;
+
+  //deleting recursively.
+  if (this->down)
+    delete this->down;
+  this->down = NULL;
+
+  static_cast<Widget*>(this)->destroy();
+}
+
+/**
    \brief Sets the group name under which all the lower widgets of this will be saved.
    \param name The name of the group.
@@ -283,4 +315,14 @@
 
 /**
+   \brief Destroys a Container.
+*/
+void Container::destroy(void)
+{ 
+  PRINTF(4)("deleting the Container part.\n");
+
+  static_cast<Packer*>(this)->destroy();
+}
+
+/**
    \briefFills a Container with lowerWidget.
    \param lowerWidget the Widget that should be filled into the Container.
@@ -298,5 +340,5 @@
     }
   else
-    cout << "!!error!! You try to put more than one Widget into a Container. \nNot including this item.\nThis is only possible with Boxes.\n"<<endl;
+    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");
 }
 
@@ -329,5 +371,4 @@
       
 
-
 /**
    \brief Creating a new Window without a Name
@@ -342,8 +383,17 @@
    \param windowName the name the window should get.
 */
+
 Window::Window (char* windowName)
 {
   this->init();
   this->setTitle (windowName);
+}
+
+/**
+   \brief Destructs a Window.
+*/
+Window::~Window(void)
+{
+  this->destroy();
 }
 
@@ -368,4 +418,18 @@
   gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a Window.
+*/
+void Window::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Window: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Window.\n");
+
+  static_cast<Container*>(this)->destroy();
+  
 }
 
@@ -499,4 +563,12 @@
 }
 
+/**
+   \brief destrcucts a Frame
+*/
+Frame::~Frame()
+{
+  this->destroy();
+}
+
 /** 
     \brief Initializes a new Frame with default settings
@@ -510,4 +582,17 @@
   gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a Frame.
+*/
+void Frame::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Frame: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Frame.\n");
+
+   static_cast<Container*>(this)->destroy();
 }
 
@@ -532,5 +617,5 @@
    \brief Creates a new EventBox with default settings.
 */
-EventBox::EventBox ()
+EventBox::EventBox (void)
 {
   this->init();
@@ -548,4 +633,13 @@
 
 /**
+   \destructs an EventBox.
+*/
+EventBox::~EventBox(void)
+{
+  this->destroy();
+
+}
+
+/**
    \brief Initializes a new EventBox
 */
@@ -560,4 +654,17 @@
   gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys an EventBox.
+*/
+void EventBox::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the EventBox: %s\n", label);
+  else 
+    PRINTF(3)("deleting the EventBox.\n");
+
+  static_cast<Container*>(this)->destroy();
 }
 
@@ -591,4 +698,12 @@
 {
   this->init(boxtype);
+}
+
+/**
+   \destructs a Box.
+*/
+Box::~Box(void)
+{
+  this->destroy();
 }
 
@@ -612,4 +727,17 @@
     }
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a Box.
+*/
+void Box::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Box: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Box.\n");
+
+  static_cast<Packer*>(this)->destroy();
 }
 
@@ -641,5 +769,5 @@
 /**
    \brief Sets the Title of a Box.
-   \title the new Title to set.
+   \param title the new Title to set.
 */
 void Box::setTitle(char* title)
@@ -668,4 +796,18 @@
 
   return;
+}
+
+/**
+   \brief Destroys an Option.
+*/
+void Option::destroy(void)
+{ 
+  PRINTF(4)("deleting the Option Part.\n");
+  if (flagName)
+    delete []flagName;
+  if (flagNameShort)
+    delete []flagNameShort;
+
+  static_cast<Widget*>(this)->destroy();
 }
 
@@ -746,4 +888,12 @@
 
 /**
+   \destructs a Button.
+*/
+Button::~Button(void)
+{
+  this->destroy();
+}
+
+/**
    \brief Initializes a new Button
 */
@@ -757,4 +907,17 @@
   widget = gtk_button_new_with_label ("");
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a Button.
+*/
+void Button::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Label: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Label.\n");
+
+  static_cast<Option*>(this)->destroy();
 }
 
@@ -799,4 +962,12 @@
 
 /**
+   \destructs a CheckButton.
+*/
+CheckButton::~CheckButton(void)
+{
+  this->destroy();
+}
+
+/**
    \brief Initialize a new CheckButton with default settings
 */
@@ -810,4 +981,17 @@
   widget = gtk_check_button_new_with_label ("");
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a CheckButton.
+*/
+void CheckButton::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the CheckButton: %s\n", label);
+  else 
+    PRINTF(3)("deleting the CheckButton.\n");
+
+  static_cast<Option*>(this)->destroy();
 }
 
@@ -878,4 +1062,12 @@
 
 /**
+   \destructs a Slider.
+*/
+Slider::~Slider(void)
+{
+  this->destroy();
+}
+
+/**
    \brief Initializes a Slider with start and end Values
    params: see Slider::Slider (char* slidername, int start, int end)
@@ -890,4 +1082,18 @@
  widget = gtk_hscale_new_with_range (start, end, 5);
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a Slider.
+*/
+void Slider::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Slider: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Slider.\n");
+
+  static_cast<Option*>(this)->destroy();
+
 }
 
@@ -911,4 +1117,15 @@
 {
   this->value = value;
+}
+
+/**
+   \brief Redraws the widget
+   Example: see void CheckButton::redraw ()
+*/
+void Slider::redraw ()
+{
+#ifdef HAVE_GTK2
+  gtk_range_set_value (GTK_RANGE (widget), value);
+#endif /* HAVE_GTK2 */
 }
 
@@ -927,14 +1144,4 @@
 #endif /* HAVE_GTK2 */
 
-/**
-   \brief Redraws the widget
-   Example: see void CheckButton::redraw ()
-*/
-void Slider::redraw ()
-{
-#ifdef HAVE_GTK2
-  gtk_range_set_value (GTK_RANGE (widget), value);
-#endif /* HAVE_GTK2 */
-}
 
 /* MENU */
@@ -969,4 +1176,12 @@
 
 /**
+   \destructs a Menu.
+*/
+Menu::~Menu(void)
+{
+  this->destroy();
+}
+
+/**
    \brief Initializes a new Menu with no items
 */
@@ -983,4 +1198,19 @@
 
 }
+
+/**
+   \brief Destroys a Menu.
+*/
+void Menu::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Menu: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Menu.\n");
+  //! \todo destroy menu
+  
+  static_cast<Option*>(this)->destroy();
+}
+
 
 /**
@@ -1005,4 +1235,15 @@
   item = gtk_menu_item_new_with_label (itemName);
   gtk_menu_shell_append(GTK_MENU_SHELL (menu), item);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Redraws the widget
+   Example: see void CheckButton::redraw ()
+*/
+void Menu::redraw ()
+{
+#ifdef HAVE_GTK2
+ gtk_option_menu_set_history (GTK_OPTION_MENU (widget), value);
 #endif /* HAVE_GTK2 */
 }
@@ -1022,14 +1263,5 @@
 #endif /* HAVE_GTK2 */
 
-/**
-   \brief Redraws the widget
-   Example: see void CheckButton::redraw ()
-*/
-void Menu::redraw ()
-{
-#ifdef HAVE_GTK2
- gtk_option_menu_set_history (GTK_OPTION_MENU (widget), value);
-#endif /* HAVE_GTK2 */
-}
+/* OPTION LABEL */
 
 /**
@@ -1046,4 +1278,12 @@
 
 /**
+   \destructs an OptionLabel.
+*/
+OptionLabel::~OptionLabel(void)
+{
+  this->destroy();
+}
+
+/**
    \brief Initializes an OptionLabel
 */
@@ -1058,4 +1298,20 @@
 #endif /* HAVE_GTK2 */
 }
+
+/**
+   \brief Destroys a OptionLabel.
+*/
+void OptionLabel::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the OptionLabel: %s\n", label);
+  else 
+    PRINTF(3)("deleting the OptionLabel.\n");
+  if (cValue)
+    delete []cValue;
+
+  static_cast<Option*>(this)->destroy();
+}
+
 
 /**
@@ -1117,4 +1373,12 @@
 
 /**
+   \destructs a Label.
+*/
+Label::~Label(void)
+{
+  this->destroy();
+}
+
+/**
    \brief initializes a new Label
 */
@@ -1129,4 +1393,17 @@
   gtk_label_set_line_wrap (GTK_LABEL(widget), TRUE);
 #endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief Destroys a Label.
+*/
+void Label::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Label: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Label.\n");
+
+  static_cast<Widget*>(this)->destroy();
 }
 
@@ -1178,4 +1455,5 @@
 ProgressBar::~ProgressBar ()
 {
+  this->destroy();
 }
 
@@ -1197,4 +1475,17 @@
 
 /**
+   \brief Destroys a ProgressBar.
+*/
+void ProgressBar::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the ProgressBar: %s\n", label);
+  else 
+    PRINTF(3)("deleting the ProgressBar.\n");
+
+  static_cast<Widget*>(this)->destroy();
+}
+
+/**
    \brief Sets a ned Title to the ProgressBar.
    \param title The now title of the ProgressBar.
@@ -1259,4 +1550,12 @@
 }
 
+/**
+   \destructs an Image.
+*/
+Image::~Image(void)
+{
+  this->destroy();
+}
+
 /** 
     \brief Initializes a new Image
@@ -1267,4 +1566,17 @@
 
   static_cast<Widget*>(this)->init();
+}
+
+/**
+   \brief Destroys a Image.
+*/
+void Image::destroy(void)
+{ 
+  if (label)
+    PRINTF(3)("deleting the Image: %s\n", label);
+  else 
+    PRINTF(3)("deleting the Image.\n");
+
+  static_cast<Widget*>(this)->destroy();
 }
 
Index: /orxonox/branches/updater/src/gui/orxonox_gui_gtk.h
===================================================================
--- /orxonox/branches/updater/src/gui/orxonox_gui_gtk.h	(revision 3288)
+++ /orxonox/branches/updater/src/gui/orxonox_gui_gtk.h	(revision 3289)
@@ -44,18 +44,20 @@
 
  public:
-  ~Widget ();
-
-  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 */
-  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
-  /**
-     \briefdefines isOption states
-  */
-  enum option { containerType = -2, boxType = -1, nothingType = 0, boolType = 1, intType = 2}; 
-  char* label; //!< The name of the Widget. Some do display it, Options need it to save;
-#ifdef HAVE_GTK2
+  virtual ~Widget ();
+  void init(void);
+  void destroy(void);
+
+  void show ();
+  void hide ();
+  void setSize(int width, int height);
+  virtual void setTitle(char* title) = 0;  //!< An abstract Function, that sets the title of Widgets.
+
+  void walkThrough (void (*function)(Widget*));
+  static void listOptions (Widget* widget);
+  static void setOptions (Widget* widget);
+  
+#ifdef HAVE_GTK2
+  // Connection - Functions
+
   gulong connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void* ));
   gulong connectSignal (char* event, gint (*signal)(GtkWidget*, Widget* ));
@@ -63,17 +65,18 @@
   gulong connectSignal (char* event, void* extObj, gint (*signal)(GtkWidget*, GdkEventKey*, void* ));
   void disconnectSignal (gulong signalID);
-#endif /* HAVE_GTK2 */
-  void show ();
-  void hide ();
-  void setSize(int width, int height);
-  virtual void setTitle(char* title) = 0;
-
-  void walkThrough (void (*function)(Widget*));
-  static void listOptions (Widget* widget);
-  static void setOptions (Widget* widget);
-  
-#ifdef HAVE_GTK2
+
+  // Signals
   static gint doNothingSignal (GtkWidget* widget, GdkEvent* 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 */
+  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* label;                      //!< The name of the Widget. Some do display it, Options need it to save;
 };
 
@@ -86,8 +89,10 @@
 
   void init(void);
+  void destroy(void);
+
   void setGroupName (char* name);
   char* getGroupName (void);
 
-  virtual void fill (Widget* lowerWidget) = 0;
+  virtual void fill (Widget* lowerWidget) = 0; //!< An abstract function, that fills Packers.
 };
 
@@ -106,4 +111,6 @@
  public:
   void init(void);
+  void destroy(void);
+
   //  void setBorderWidth (int borderwidth);
   //  virtual void setTitle (char* title) = 0;
@@ -119,12 +126,14 @@
 {
  private:
-  bool isOpen;                //!< A bool Variable that checks if a Window is already open.
- public:
-  static Window* mainWindow;  //!< Pointer to the First Window that was opened. By default this should be the GUI's main-Window.
+  bool isOpen;                      //!< A bool Variable that checks if a Window is already open.
+ public:
+  static Window* mainWindow;        //!< Pointer to the First Window that was opened. By default this should be the GUI's main-Window.
   static void addWindow(Window* windowToAdd);
 
   Window(void);
   Window(char* windowName);
+  ~Window(void);
   void init();
+  void destroy(void);
   
   void setTitle(char* title);
@@ -134,4 +143,5 @@
 
 #ifdef HAVE_GTK2
+  // Signals
   static gint windowOpen(GtkWidget* widget, GdkEvent* event, void* window);
   static gint windowClose(GtkWidget* widget, GdkEvent* event, void* window);
@@ -148,7 +158,9 @@
 {
  public:
+  Frame(void);
   Frame (char* frameName);
-  Frame (void);
-  void init(void);
+  ~Frame(void);
+  void init(void);
+  void destroy(void);
   
   void setTitle(char* title);
@@ -162,7 +174,9 @@
 {
  public:
+  EventBox (void);
   EventBox (char* eventBoxName);
-  EventBox (void);
-  void init(void);
+  ~EventBox(void);
+  void init(void);
+  void destroy(void);
   
   void setTitle(char* title);
@@ -180,5 +194,7 @@
   Box (void);
   Box (char boxtype);
+  ~Box(void);
   void init(char boxtype);
+  void destroy(void);
   
   void fill (Widget* lowerWidget);
@@ -199,4 +215,5 @@
   //virtual gint OptionChange (GtkWidget* widget, GdkEvent* event, gpointer data);
   void init(void);
+  void destroy(void);
 
   int value; //!< every option has a value either true or false (0,1) or something else like 25 for 25% of the volume
@@ -221,8 +238,9 @@
  public:
   Button (char* buttonname);
-  void init(void);
-
-  void setTitle(char* title);
-  
+  ~Button(void);
+  void init(void);
+  void destroy(void);
+
+  void setTitle(char* title);
   void redraw();
 };
@@ -235,13 +253,16 @@
  public:
   CheckButton (char* buttonname);
-#ifdef HAVE_GTK2
-  static gint OptionChange (GtkWidget* widget, Widget* checkbutton);
-#endif /* HAVE_GTK2 */
-  
-  void init(void);
-  void setTitle(char* title);
-
+  ~CheckButton(void);
+  void init(void);
+  void destroy(void);
+
+  void setTitle(char* title);
   bool isActive();           //!< a Bool value to see, if this CheckButton is active.
   void redraw ();
+
+#ifdef HAVE_GTK2
+  // Signals
+  static gint OptionChange (GtkWidget* widget, Widget* checkbutton);
+#endif /* HAVE_GTK2 */
 };
 
@@ -253,14 +274,17 @@
 {
  public:
-  Slider (char* slidername,int start, int end);
+  Slider(char* slidername,int start, int end);
+  ~Slider(void);
   void init(int start, int end);
+  void destroy(void);
 
   void setTitle(char* title);
   void setValue(int value);
-
-#ifdef HAVE_GTK2
+  void redraw();
+
+#ifdef HAVE_GTK2
+  // Signals
   static gint OptionChange (GtkWidget* widget, Widget* slider);
 #endif /* HAVE_GTK2 */
-  void redraw();
 };
 
@@ -270,15 +294,16 @@
  private:
 #ifdef HAVE_GTK2
-  GtkWidget* menu;     //!< The menu That will hold the Options.
-  GtkWidget* item;     //!< One Item From a Menu.
-#endif /* HAVE_GTK2 */
-  va_list itemlist;    //!< The list to readin multiple Options.
+  GtkWidget* menu;                      //!< The menu That will hold the Options.
+  GtkWidget* item;                      //!< One Item From a Menu.
+#endif /* HAVE_GTK2 */
+  va_list itemlist;                     //!< The list to readin multiple Options.
   
  public:
   Menu (char* menuname, ...);
-  void init(void);
-
-  void setTitle(char* title);
-
+  ~Menu(void);
+  void init(void);
+  void destroy(void);
+  
+  void setTitle(char* title);
   void addItem(char* itemName);
 #ifdef HAVE_GTK2
@@ -291,13 +316,19 @@
 class OptionLabel : public Option
 {
+ private:
+
  public:
   OptionLabel(char* label, char* value);
-  void init(void);
-  
-  char* cValue;   //!< The Value the Label will have.
+  ~OptionLabel(void);
+  void init(void);
+  void destroy(void);
+  
   
   void setValue(char* newValue);
   void setTitle(char* title);
   void redraw();
+
+  char* cValue;                          //!< The Value the Label will have. \todo make private
+
 };
 
@@ -306,7 +337,9 @@
 {
  public:
-  Label ();
+  Label (void);
   Label (char* text);
-  void init(void);
+  ~Label(void);
+  void init(void);
+  void destroy(void);
   
   void setTitle(char* text);
@@ -320,9 +353,9 @@
   ProgressBar (void);
   ProgressBar (char* label);
-  ~ProgressBar ();
-  void init (void);
-
-  void setTitle(char* title);
-
+  ~ProgressBar (void);
+  void init(void);
+  void destroy(void);
+
+  void setTitle(char* title);
   void setProgress (double progress);
   void setTotalSize (double totalSize);
@@ -346,5 +379,7 @@
  public:
   Image (char* imgaename);
-  void init(void);
+  ~Image(void);
+  void init(void);
+  void destroy(void);
 
   void setTitle(char* title);
