Index: /orxonox/trunk/Makefile.in
===================================================================
--- /orxonox/trunk/Makefile.in	(revision 2017)
+++ /orxonox/trunk/Makefile.in	(revision 2018)
@@ -69,4 +69,5 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
Index: /orxonox/trunk/configure
===================================================================
--- /orxonox/trunk/configure	(revision 2017)
+++ /orxonox/trunk/configure	(revision 2018)
@@ -312,5 +312,5 @@
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot MSBITFIELDS CXX CXXFLAGS LDFLAGS CPPFLAGS ac_ct_CXX EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CC CFLAGS ac_ct_CC CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CPP EGREP LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
@@ -1726,4 +1726,20 @@
 
 
+echo "$as_me:$LINENO: checking for mingw" >&5
+echo $ECHO_N "checking for mingw... $ECHO_C" >&6
+case `uname` in
+  *MINGW*)
+    mingw=yes
+    MSBITFIELDS="-mms-bitfields"
+    ;;
+  *)
+    mingw=no
+    ;;
+esac
+echo "$as_me:$LINENO: result: $mingw" >&5
+echo "${ECHO_T}$mingw" >&6
+
+
+
 # Checks for programs.
 ac_ext=cc
@@ -4953,4 +4969,7 @@
 
 fi
+
+
+LIBS="$LIBS `pkg-config --libs  gtk+-2.0`"
 
 
@@ -6438,4 +6457,5 @@
 s,@SET_MAKE@,$SET_MAKE,;t t
 s,@am__leading_dot@,$am__leading_dot,;t t
+s,@MSBITFIELDS@,$MSBITFIELDS,;t t
 s,@CXX@,$CXX,;t t
 s,@CXXFLAGS@,$CXXFLAGS,;t t
Index: /orxonox/trunk/configure.ac
===================================================================
--- /orxonox/trunk/configure.ac	(revision 2017)
+++ /orxonox/trunk/configure.ac	(revision 2018)
@@ -7,4 +7,18 @@
 AC_CONFIG_SRCDIR([.])
 AC_CONFIG_HEADER([config.h])
+
+AC_MSG_CHECKING([for mingw])
+case `uname` in
+  *MINGW*)
+    mingw=yes
+    MSBITFIELDS="-mms-bitfields"
+    ;;
+  *)
+    mingw=no
+    ;;
+esac
+AC_MSG_RESULT([$mingw])
+AC_SUBST(MSBITFIELDS)
+
 
 # Checks for programs.
@@ -92,4 +106,7 @@
 AC_CHECK_LIB([m], [main])
 
+LIBS="$LIBS `pkg-config --libs  gtk+-2.0`"
+
+
 # Checks for header files.
 AC_HEADER_STDC
Index: /orxonox/trunk/console/Makefile.in
===================================================================
--- /orxonox/trunk/console/Makefile.in	(revision 2017)
+++ /orxonox/trunk/console/Makefile.in	(revision 2018)
@@ -69,4 +69,5 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
Index: /orxonox/trunk/gui/Makefile.am
===================================================================
--- /orxonox/trunk/gui/Makefile.am	(revision 2017)
+++ /orxonox/trunk/gui/Makefile.am	(revision 2018)
@@ -1,7 +1,12 @@
-AM_CFLAGS=`pkg-config --cflags gtk+-2.0`
-AM_LDFLAGS=`pkg-config --libs  gtk+-2.0`
+AM_CXXFLAGS=`pkg-config --cflags gtk+-2.0` $(MSBITFIELDS)
+#AM_LDFLAGS=`pkg-config --libs  gtk+-2.0`
 
 bin_PROGRAMS=gui
-gui_SOURCES=orxonox_gui.c orxonox_gui_audio.c orxonox_gui_exec.c orxonox_gui_file.c orxonox_gui_video.c
+gui_SOURCES=orxonox_gui.cc orxonox_gui.h \
+	orxonox_gui_video.cc orxonox_gui_video.h \
+	orxonox_gui_audio.cc orxonox_gui_audio.h \
+	orxonox_gui_exec.cc orxonox_gui_exec.h \
+	orxonox_gui_flags.cc orxonox_gui_flags.h
+#orxonox_gui_file.cc 
 
 #  uncomment the following if bencoder requires the math library
@@ -13,4 +18,5 @@
 #  following and add `chk' to the EXTRA_DIST list
 #TESTS=chk
+EXTRA_DIST = rc
 
 #  build and install the .info pages
Index: /orxonox/trunk/gui/Makefile.in
===================================================================
--- /orxonox/trunk/gui/Makefile.in	(revision 2017)
+++ /orxonox/trunk/gui/Makefile.in	(revision 2018)
@@ -69,4 +69,5 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
@@ -110,9 +111,25 @@
 sysconfdir = @sysconfdir@
 target_alias = @target_alias@
-AM_CFLAGS = `pkg-config --cflags gtk+-2.0`
-AM_LDFLAGS = `pkg-config --libs  gtk+-2.0`
-
+AM_CXXFLAGS = `pkg-config --cflags gtk+-2.0` $(MSBITFIELDS)
+
+#AM_LDFLAGS=`pkg-config --libs  gtk+-2.0`
 bin_PROGRAMS = gui
-gui_SOURCES = orxonox_gui.c orxonox_gui_audio.c orxonox_gui_exec.c orxonox_gui_file.c orxonox_gui_video.c
+gui_SOURCES = orxonox_gui.cc orxonox_gui.h \
+	orxonox_gui_video.cc orxonox_gui_video.h \
+	orxonox_gui_audio.cc orxonox_gui_audio.h \
+	orxonox_gui_exec.cc orxonox_gui_exec.h \
+	orxonox_gui_flags.cc orxonox_gui_flags.h
+
+#orxonox_gui_file.cc 
+
+#  uncomment the following if bencoder requires the math library
+#gui_LDADD=-lm
+
+#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
+
+#  if you write a self-test script named `chk', uncomment the
+#  following and add `chk' to the EXTRA_DIST list
+#TESTS=chk
+EXTRA_DIST = rc
 subdir = gui
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -123,7 +140,7 @@
 PROGRAMS = $(bin_PROGRAMS)
 
-am_gui_OBJECTS = orxonox_gui.$(OBJEXT) orxonox_gui_audio.$(OBJEXT) \
-	orxonox_gui_exec.$(OBJEXT) orxonox_gui_file.$(OBJEXT) \
-	orxonox_gui_video.$(OBJEXT)
+am_gui_OBJECTS = orxonox_gui.$(OBJEXT) orxonox_gui_video.$(OBJEXT) \
+	orxonox_gui_audio.$(OBJEXT) orxonox_gui_exec.$(OBJEXT) \
+	orxonox_gui_flags.$(OBJEXT)
 gui_OBJECTS = $(am_gui_OBJECTS)
 gui_LDADD = $(LDADD)
@@ -137,6 +154,11 @@
 @AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_audio.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_exec.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_file.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_flags.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/orxonox_gui_video.Po
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+	-o $@
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -150,5 +172,5 @@
 
 .SUFFIXES:
-.SUFFIXES: .c .o .obj
+.SUFFIXES: .cc .o .obj
 $(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 	cd $(top_srcdir) && \
@@ -182,5 +204,5 @@
 gui$(EXEEXT): $(gui_OBJECTS) $(gui_DEPENDENCIES) 
 	@rm -f gui$(EXEEXT)
-	$(LINK) $(gui_LDFLAGS) $(gui_OBJECTS) $(gui_LDADD) $(LIBS)
+	$(CXXLINK) $(gui_LDFLAGS) $(gui_OBJECTS) $(gui_LDADD) $(LIBS)
 
 mostlyclean-compile:
@@ -193,28 +215,28 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_audio.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_exec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_file.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_flags.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/orxonox_gui_video.Po@am__quote@
 
-.c.o:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
-
-.c.obj:
-@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
-@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
-@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
-@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
-@am__fastdepCC_TRUE@	fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+.cc.o:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCXX_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCXX_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCXX_TRUE@	fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@	if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+@am__fastdepCXX_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+@am__fastdepCXX_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+@am__fastdepCXX_TRUE@	fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 uninstall-info-am:
 
@@ -393,13 +415,4 @@
 
 
-#  uncomment the following if bencoder requires the math library
-#gui_LDADD=-lm
-
-#EXTRA_DIST=orxonox.lsm.in orxonox.spec.in orxonox.texinfo
-
-#  if you write a self-test script named `chk', uncomment the
-#  following and add `chk' to the EXTRA_DIST list
-#TESTS=chk
-
 #  build and install the .info pages
 #info_TEXINFOS = orxonox.texinfo
Index: xonox/trunk/gui/orxonox_gui.c
===================================================================
--- /orxonox/trunk/gui/orxonox_gui.c	(revision 2017)
+++ 	(revision )
@@ -1,66 +1,0 @@
-#include "orxonox_gui.h"
-#include "orxonox_gui_video.h"
-#include "orxonox_gui_audio.h"
-int verbose = 1;
-
-int main( int argc, char *argv[] )
-  {
-    GtkWidget *window;
-    GtkWidget *vbox_main;
-    GtkWidget *hbox_video_audio;
-    GtkWidget *hbox_view_exec;
-    struct settings *orxonox_settings;
-
-    int option_count = 7; /* important: look that this is greater than options in 'struct settings' */
-
-    /* Initialize all settings */
-    
-    orxonox_settings = malloc (option_count*sizeof (int));
-
-    orxonox_gui_file_default (orxonox_settings);
-    orxonox_gui_file_load ("~/.orxonox.conf", orxonox_settings);
-
-
-    gtk_init (&argc, &argv);
-    /* Main Window */
-    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE);
-    gtk_window_set_title ( GTK_WINDOW (window), "orxonox");
-    g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL);
-    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (orxonox_gui_quit), orxonox_settings);
-    gtk_container_set_border_width (GTK_CONTAINER (window), 5);
-    
-    /*  VBOX - MAIN */
-    vbox_main = gtk_vbox_new (FALSE, 0);
-    {
-      hbox_video_audio = gtk_hbox_new (FALSE, 0);
-      
-      {
-	gtk_box_pack_start(GTK_BOX(hbox_video_audio), orxonox_gui_video_frame(orxonox_settings), TRUE, TRUE, 0);	
-	
-	gtk_box_pack_start(GTK_BOX(hbox_video_audio), orxonox_gui_audio_frame(orxonox_settings), TRUE, TRUE, 0);	
-      }
-      gtk_box_pack_start (GTK_BOX (vbox_main), hbox_video_audio, TRUE, TRUE, 0);
-      
-      {
-	hbox_view_exec = gtk_hbox_new ( FALSE,0);
-	/*
-	{
-	  info ( hbox_view_exec );
-	}
-	*/
-	{
-	  gtk_box_pack_start(GTK_BOX(hbox_view_exec), orxonox_gui_exec_frame(orxonox_settings), TRUE, TRUE, 0);	
-
-	}
-	gtk_box_pack_start (GTK_BOX (vbox_main), hbox_view_exec, TRUE, TRUE, 0);
-      } 
-    }
-    gtk_container_add (GTK_CONTAINER (window), vbox_main);
-    
-    gtk_widget_show_all  (window);
-
-    gtk_main ();
-    
-    return(0);
-  }
Index: /orxonox/trunk/gui/orxonox_gui.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui.cc	(revision 2018)
+++ /orxonox/trunk/gui/orxonox_gui.cc	(revision 2018)
@@ -0,0 +1,500 @@
+#include <iostream.h>
+
+#include "orxonox_gui.h"
+#include "orxonox_gui_video.h"
+#include "orxonox_gui_audio.h"
+#include "orxonox_gui_exec.h"
+#include "orxonox_gui_flags.h"
+
+  Window* orxonoxGUI;
+  OrxonoxGuiVideo* video;
+  OrxonoxGuiAudio* audio;
+  OrxonoxGuiExec* exec;
+  OrxonoxGuiFlags* flags;  
+
+int main( int argc, char *argv[] )
+{
+  OrxonoxGui* orxonoxgui = new OrxonoxGui(argc, argv);
+  return 0;
+}
+
+/* ORXONOXGUI */
+
+OrxonoxGui::OrxonoxGui (int argc, char *argv[])
+{
+  /**
+   * Initializes the Gui
+   */
+  gtk_init (&argc, &argv);
+  gtk_rc_parse( "rc" );
+  
+  orxonoxGUI = new Window("Graphical Orxonox Launcher");
+  orxonoxGUI->connectSignal ("destroy", orxonoxGUI->orxonox_gui_quit);
+  orxonoxGUI->connectSignal ("delete_event", orxonoxGUI->orxonox_gui_quit);
+  
+  Box* windowBox = new Box ('v');
+  
+  Box* avBox = new Box ('h');
+
+  video = new OrxonoxGuiVideo ();
+  avBox->fill (video->getFrame ());
+  audio = new OrxonoxGuiAudio ();
+  avBox->fill (audio->getFrame ());
+      
+  windowBox->fill (avBox);
+    
+  exec = new OrxonoxGuiExec (orxonoxGUI);
+  windowBox->fill (exec->getFrame ());
+
+  flags = new OrxonoxGuiFlags (orxonoxGUI);
+  windowBox->fill (flags->getFrame ());
+  
+  orxonoxGUI->fill (windowBox);
+  flags->setTextFromFlags (orxonoxGUI);
+
+  exec->setFilename ("~/.orxonox.conf");
+  exec->readFromFile (orxonoxGUI);
+  orxonoxGUI->listOptions();
+
+  orxonoxGUI->showall ();
+
+  
+  gtk_main();
+}
+
+/* WIDGET */
+
+void Widget::connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *))
+{
+  /** 
+   * Connect any signal to any given Sub-widget
+   */
+  g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), NULL);
+}
+
+void Widget::connectSignal (char* event, gint (*signal)( GtkWidget*, Widget *))
+{
+  /**
+   * Connect a signal with additionally passing the whole Object
+   */
+  g_signal_connect (G_OBJECT (this->widget), event, G_CALLBACK (signal), this);
+}
+
+void Widget::show()
+{
+  /**
+   * Function to Show any Widget
+   */
+  gtk_widget_show (widget);
+}
+
+void Widget::listOptions ()
+{
+  /** 
+   * This is For listing all the Options witch are located beneath this Widget.
+   */
+  if (this->is_option >= 1)
+    cout << static_cast<Option*>(this)->option_name <<" is : " << static_cast<Option*>(this)->value <<endl;
+
+  switch (this->is_option)
+    {
+    case -1:
+      static_cast<Container*>(this)->down->listOptions ();
+      break;
+    case -2:
+      static_cast<Box*>(this)->down->listOptions ();
+      break;
+    } 
+
+  if (this->next != NULL)
+    this->next->listOptions ();
+}
+
+void Widget::setOptions ()
+{
+  /** 
+   * This is For listing all the Options witch are located beneath this Widget.
+   */
+  if (this->is_option >= 1)
+    static_cast<Option*>(this)->redraw();// <<" is : " << static_cast<Option*>(this)->value <<endl;
+
+  switch (this->is_option)
+    {
+    case -1:
+      static_cast<Container*>(this)->down->setOptions ();
+      break;
+    case -2:
+      static_cast<Box*>(this)->down->setOptions ();
+      break;
+    } 
+
+  if (this->next != NULL)
+    this->next->setOptions ();
+}
+
+/* CONTAINERS*/
+
+void Container::fill (Widget *lowerWidget)
+{
+  /**
+   * fill any given Container with a lowerwidet
+   */
+  if (this->down == NULL)
+    {
+      gtk_container_add (GTK_CONTAINER (this->widget), lowerWidget->widget);
+      this->down = lowerWidget;
+    }
+  else
+    cout << "!!error!! You try to put more than one Widget into a container.\nnot including this item."<<endl;
+}
+
+// gtk_container_set_border_width (GTK_CONTAINER (widget), 5);
+
+/* WINDOW */
+
+Window::Window (void)
+{
+  /**
+   * Creating a Window
+   */
+  is_option = -1;
+  next = NULL;
+  down = NULL;
+  widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_policy (GTK_WINDOW(widget), TRUE, TRUE, TRUE);
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+}
+
+Window::Window (char* windowName)
+{
+  /**
+   * Creating a Window with passing a name
+   */
+  is_option = -1;
+  next = NULL;
+  down = NULL;
+  widget = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+  gtk_window_set_policy (GTK_WINDOW (widget), TRUE, TRUE, TRUE);
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+  //  gtk_window_set_decorated (GTK_WINDOW (widget), FALSE);
+  this->setTitle (windowName);
+}
+
+Window::~Window ()
+{
+  /**
+   * Destoying a Window (not implemented)
+   */
+}
+
+void Window::showall ()
+{
+  /**
+   * Shows all Widgets that are included within this Widget
+   */
+  gtk_widget_show_all  (widget);
+}
+
+void Window::setTitle (char* title)
+{
+  /**
+   * Set The Window title to title
+   */
+  gtk_window_set_title (GTK_WINDOW (widget), title);
+}
+
+
+gint Window::orxonox_gui_quit (GtkWidget *widget, GdkEvent *event, gpointer data)
+{
+  /**
+   * Quits the orxonox_GUI
+   */
+  if (exec->shouldsave())
+    exec->writeToFile (orxonoxGUI);
+
+  gtk_main_quit();
+  return FALSE;
+}
+
+
+/* FRAME */
+
+Frame::Frame (void)
+{
+  /** 
+   * Creates a new Frame without a name
+   */
+  is_option = -1;
+  next = NULL;
+  down = NULL;
+  widget = gtk_frame_new ("");
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+}
+Frame::Frame (char* title)
+{
+  /**
+   * Creates a new Frame with name title
+   */
+  is_option = -1;
+  next = NULL;
+  down = NULL;
+  widget = gtk_frame_new (title);
+  gtk_container_set_border_width (GTK_CONTAINER (widget), 3);
+}
+Frame::~Frame ()
+{
+  /**
+   * Destroys given Frame (not implemented yet)
+   */
+}
+
+void Frame::setTitle (char* title)
+{
+  /**
+   * Sets the Frames name to title
+   */
+  gtk_frame_set_label (GTK_FRAME (widget), title);
+}
+
+
+
+/* BOX */
+
+Box::Box (void)
+{
+  /**
+   * Creates a new horizontal Box
+   */
+  is_option = -2;
+  next = NULL;
+  down = NULL;
+  widget = gtk_hbox_new(FALSE, 0);
+}
+Box::Box (char boxtype)
+{
+  /**
+   * Creates a new Box if boxtype is 'v' it will be vertically, if 'h' it will be horizontally
+   */
+  is_option = -2;
+  next = NULL;
+  down = NULL;
+  if (boxtype == 'v')
+    {
+      widget = gtk_vbox_new (FALSE, 0);
+    }
+  else
+    {
+      widget = gtk_hbox_new (FALSE, 0);
+    }
+}
+
+Box::~Box ()
+{
+  /**
+   * Destroys given Frame (not implemented yet)
+   */
+}
+
+void Box::fill (Widget *lowerWidget)
+{
+  /**
+   * Fill a Box with its lowerwidgets
+   */
+  gtk_box_pack_start (GTK_BOX (this->widget), lowerWidget->widget, TRUE, TRUE, 0);
+  if (this->down == NULL)
+    this->down = lowerWidget;
+  else
+    {
+      Widget* tmp;
+      tmp = this->down;
+      while (tmp->next != NULL)
+	{
+	  tmp = tmp->next;
+	}
+      tmp->next = lowerWidget;
+    }
+}
+
+
+/* OPTION */
+
+void Option::setFlagName (char* flagname, int defaultvalue)
+{
+  flag_name = flagname;
+  default_value = defaultvalue;
+  cout << "Set Flagname of " << option_name << " to " << flagname << endl;
+}
+
+void Option::setFlagName (char* flagname, char* flagnameshort,  int defaultvalue)
+{
+  /**
+   * \brief Sets the Flagname of an Option. If it is set different then "" this Option will be saved to the Configurationfile
+   */
+  flag_name = flagname;
+  flag_name_short = flagnameshort;
+  default_value = defaultvalue;
+  cout << "Set Flagname of " << option_name << " to " << flagname << endl;
+}
+
+
+/* BUTTON */
+Button::Button(char* buttonname)
+{
+  /**
+   * Creates a new Button with name buttonname
+   */
+  is_option = 0;
+  value = 0;
+  next = NULL;
+  option_name = buttonname;
+  flag_name = "";
+  flag_name_short = "";
+  default_value = 0;
+  widget = gtk_button_new_with_label (buttonname);
+}
+
+void Button::redraw ()
+{
+}
+
+/* CHECKBUTTON */
+CheckButton::CheckButton (char* buttonname)
+{
+  /**
+   * Creates a new CheckButton with name buttonname
+   */
+  is_option = 1;
+  value = 0;
+  next = NULL;
+  option_name = buttonname;
+  flag_name = "";
+  flag_name_short = "";
+  default_value = 0;
+  widget = gtk_check_button_new_with_label (buttonname);
+
+  this->connectSignal ("clicked", this->OptionChange);
+}
+
+gint CheckButton::OptionChange (GtkWidget *widget, Widget* checkbutton)
+{
+  /** 
+   * Writes value, if changed on the checkbutton, to the object.
+   */
+  static_cast<CheckButton*>(checkbutton)->value = (int)gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON ((CheckButton*)checkbutton->widget));
+  flags->setTextFromFlags(orxonoxGUI);
+  cout << static_cast<CheckButton*>(checkbutton)->option_name << " set to: " << static_cast<CheckButton*>(checkbutton)->value << endl;
+}
+
+void CheckButton::redraw ()
+{
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), value);
+}
+
+/* SLIDER */
+Slider::Slider (char* slidername, int start, int end)
+{
+  /**
+   * Creates a new Slider with name slidername a beginning value of start and an end value of end.
+   */
+  is_option = 2;
+  value = 0;
+  next = NULL;
+  option_name = slidername;
+  flag_name = "";
+  flag_name_short = "";
+  default_value = 0;
+  widget = gtk_hscale_new_with_range (start, end, 5);
+  value = start;
+
+  this->connectSignal ("value_changed", this->OptionChange);
+}
+
+gint Slider::OptionChange (GtkWidget *widget, Widget* slider)
+{
+  /** 
+   * Writes value, if changed on the slider, to the object.
+   */
+  static_cast<Slider*>(slider)->value = (int)gtk_range_get_value (GTK_RANGE ((Slider*)slider->widget));
+  flags->setTextFromFlags(orxonoxGUI);
+  cout << static_cast<Slider*>(slider)->option_name << " set to: "<< static_cast<Slider*>(slider)->value << endl;
+}
+
+void Slider::redraw ()
+{
+  gtk_range_set_value (GTK_RANGE (widget), value);
+}
+
+Menu::Menu (char* menuname, ...)
+{
+  /** 
+   * Creates an Menu-Item-list out of multiple input. Consider, that the last input argument has to be "lastItem" for this to work.
+   */
+  is_option = 2;
+  value = 0;
+  next = NULL;
+  option_name = menuname;
+  flag_name = "";
+  flag_name_short = "";
+  default_value = 0;
+  char *tmp;
+  va_list itemlist;
+  widget = gtk_option_menu_new ();
+  GtkWidget* menu = gtk_menu_new ();
+  GtkWidget* item;
+
+  va_start (itemlist, menuname);
+  while (strcmp (tmp = va_arg (itemlist, char*), "lastItem"))
+    {
+      item = gtk_menu_item_new_with_label (tmp);
+      gtk_menu_shell_append(GTK_MENU_SHELL (menu), item);
+    }
+  va_end(itemlist);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (widget), menu);
+  this->connectSignal ("changed", this->OptionChange);
+}
+
+gint Menu::OptionChange (GtkWidget *widget, Widget* menu)
+{
+  /** 
+   * Writes value, if changed on the Menu, to the object.
+   */
+  static_cast<Menu*>(menu)->value = (int)gtk_option_menu_get_history (GTK_OPTION_MENU (menu->widget));
+  flags->setTextFromFlags(orxonoxGUI);
+  cout << static_cast<Menu*>(menu)->option_name << " changed to : " << static_cast<Menu*>(menu)->value << endl;
+}
+
+void Menu::redraw ()
+{
+  gtk_option_menu_set_history (GTK_OPTION_MENU (widget), value);
+}
+
+Label:: Label ()
+{
+  is_option = 0;
+  next = NULL;
+  widget = gtk_label_new ("");
+  gtk_widget_set_usize (widget, 260, 60);
+  gtk_label_set_line_wrap (GTK_LABEL(widget), TRUE);
+}
+
+Label:: Label (char* text)
+{
+  is_option = 0;
+  next = NULL;
+  widget = gtk_label_new (text);
+  gtk_label_set_line_wrap (GTK_LABEL(widget), TRUE);
+}
+
+Label::~Label ()
+{}
+  
+void Label::setText (char * text)
+{
+  gtk_label_set_text (GTK_LABEL (this->widget), text);
+}
+
+char* Label::getText ()
+{
+  return ((char*)gtk_label_get_text (GTK_LABEL (this->widget)));
+}
Index: /orxonox/trunk/gui/orxonox_gui.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui.h	(revision 2017)
+++ /orxonox/trunk/gui/orxonox_gui.h	(revision 2018)
@@ -1,25 +1,160 @@
-
 #ifndef _ORXONOX_GUI_H
 #define _ORXONOX_GUI_H
 
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <gtk/gtk.h>
-#include "orxonox_gui_exec.h"
+#include <gtk/gtkmain.h>
+#include <gtk/gtkwindow.h>
+#include <gtk/gtkframe.h>
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtkbutton.h>
+#include <gtk/gtkcheckbutton.h>
+#include <gtk/gtkhscale.h>
+#include <gtk/gtkoptionmenu.h>
+#include <gtk/gtkmenu.h>
+#include <gtk/gtkmenuitem.h>
+#include <gtk/gtklabel.h>
 
-struct settings
+class OrxonoxGui
 {
-  int video_fullscreen;
-  int video_wireframe;
+ public:
+  OrxonoxGui (int argc, char *argv[]);
+  ~OrxonoxGui ();
+
+};
+
+class Widget
+{
+ public:
+  Widget* next;
+  GtkWidget* widget;
+  int is_option;
+
+  //virtual void create ();
+  //  void addWidget ();
+  void connectSignal (char* event, gint (*signal)(GtkWidget*, GdkEvent*, void *));
+  void connectSignal (char* event, gint (*signal)(GtkWidget*, Widget *));
+  void show ();
+  void listOptions ();
+  void setOptions ();
+
+};
+
+
+
+class Container : public Widget
+{
+ private:
+  int borderwidth;
+  int policy;
+  char* label;
   
-  int audio_enable_sound;
-  int audio_music_volume;
-  int audio_effects_volume;
+ public:
+  Widget* down;
+  void setBorderWidth (int borderwidth);
+  virtual void setTitle (char* title) = 0;
+  void fill (Widget *lowerWidget);
+};
+
+class Window : public Container
+{
+ public:
+  Window (char* windowName);
+  Window (void);
+  ~Window ();
   
-  int exec_save_settings;
-  int exec_show_menu;
+  void setTitle (char* title);
+  void showall ();
+  static gint orxonox_gui_quit (GtkWidget *widget, GdkEvent *event, gpointer data);
 };
-extern verbose;
+
+class Frame :public Container
+{
+ public:
+  Frame (char* frameName);
+  Frame (void);
+  ~Frame ();
+  
+  void setTitle (char* title);
+};
+
+class Box : public Widget
+{
+ public:
+  Box (void);
+  Box (char boxtype);
+  ~Box (void);
+
+  Widget* down;
+  void fill (Widget* lowerWidget);
+
+};
+
+class Option : public Widget
+{
+ public:
+  //virtual gint OptionChange (GtkWidget *widget, GdkEvent *event, gpointer data);
+  
+  int value;
+  char* option_name;
+  char* flag_name;
+  char* flag_name_short;
+  int default_value;
+
+  void setFlagName (char* flagname, int defaultvalue);
+  void setFlagName (char* flagname, char* flagnameshort, int defaultvalue);
+  virtual void redraw () = 0;
+};
+
+class Button : public Option 
+{
+ public:
+  Button (char* buttonname);
+  ~Button (void);
+  
+  void redraw();
+};
+
+class CheckButton : public Option
+{
+ public:
+  CheckButton (char* buttonname);
+  ~CheckButton (void);
+  static gint OptionChange (GtkWidget* widget, Widget* checkbutton);
+  void redraw ();
+};
+
+class Slider : public Option
+{
+ public:
+  Slider (char* slidername,int start, int end);
+  ~Slider ();
+  static gint OptionChange (GtkWidget* widget, Widget* slider);
+  void redraw();
+};
+
+class Menu : public Option
+{
+ public:
+  Menu (char* menuname, ...);
+  ~Menu ();
+
+  static gint OptionChange (GtkWidget* widget, Widget* menu);
+  void redraw();
+};
+
+class Label : public Widget
+{
+ public:
+  Label ();
+  Label (char* text);
+  ~Label ();
+  
+  void setText (char * text);
+  char* getText ();
+};
+
+//gint orxonox_gui_quit (GtkWidget *widget, GdkEvent *event, gpointer data);
 
 #endif /* _ORXONOX_GUI_H */
Index: xonox/trunk/gui/orxonox_gui_audio.c
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_audio.c	(revision 2017)
+++ 	(revision )
@@ -1,63 +1,0 @@
-#include "orxonox_gui.h"
-
-void audio_check_button_change(GtkWidget *widget, int* data)
-{
-  *data = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget)); 
-  orxonox_flags_update ();
-  if (verbose >=1)
-    printf ("%s changed to %i.\n", gtk_button_get_label(GTK_BUTTON(widget)), *data);
-  return;
-}
-
-void audio_slider_change(GtkWidget *widget, int* data)
-{
-  *data = gtk_range_get_value ( GTK_RANGE (widget));
-  orxonox_flags_update ();
-  if (verbose >=1)
-    printf ("Changed slider to %i.\n", *data);
-  return;
-}
-
-GtkWidget *orxonox_gui_audio_frame (struct settings *orxonox_settings)
-{
-  GtkWidget *frame;
-  GtkWidget *enable_sound_button;
-  GtkWidget *label;
-  GtkWidget *music_volume_slider;
-  GtkWidget *effects_volume_slider;
-
-  frame = gtk_frame_new ( "Audio-Options:");
-  gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
-  {
-    GtkWidget *orxonox_gui_audio_vbox;
-    orxonox_gui_audio_vbox = gtk_vbox_new (FALSE, 0);
-    {
-
-	enable_sound_button = gtk_check_button_new_with_label ("Enable Sound");
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (enable_sound_button), orxonox_settings->audio_enable_sound);
-	g_signal_connect(GTK_TOGGLE_BUTTON(enable_sound_button), "clicked", G_CALLBACK(audio_check_button_change), &(orxonox_settings->audio_enable_sound));
-
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_audio_vbox), enable_sound_button, TRUE, TRUE, 0);
-
-	label=gtk_label_new ("Music Volume");
-	gtk_box_pack_start (GTK_BOX(orxonox_gui_audio_vbox), label, TRUE, TRUE, 0);
-	music_volume_slider = gtk_hscale_new_with_range (0,100,5);
-	gtk_range_set_value ( GTK_RANGE (music_volume_slider), orxonox_settings->audio_music_volume);
-	gtk_range_set_update_policy ( GTK_RANGE (music_volume_slider), GTK_UPDATE_DISCONTINUOUS);
-	g_signal_connect (GTK_RANGE (music_volume_slider), "value_changed", G_CALLBACK (audio_slider_change), &(orxonox_settings->audio_music_volume) );
-	gtk_box_pack_start ( GTK_BOX (orxonox_gui_audio_vbox), music_volume_slider, TRUE, TRUE, 0);
-
-	label=gtk_label_new ("Effects Volume");
-	gtk_box_pack_start (GTK_BOX(orxonox_gui_audio_vbox), label, TRUE, TRUE, 0);
-	effects_volume_slider = gtk_hscale_new_with_range (0,100,5);
-	gtk_range_set_value ( GTK_RANGE (effects_volume_slider), orxonox_settings->audio_effects_volume);
-	gtk_range_set_update_policy ( GTK_RANGE (effects_volume_slider), GTK_UPDATE_DISCONTINUOUS);
-	g_signal_connect (GTK_RANGE (effects_volume_slider), "value_changed", G_CALLBACK (audio_slider_change), &(orxonox_settings->audio_effects_volume) );
-	gtk_box_pack_start ( GTK_BOX (orxonox_gui_audio_vbox), effects_volume_slider, TRUE, TRUE, 0);
-
-    }
-    gtk_container_add(GTK_CONTAINER(frame), orxonox_gui_audio_vbox);
-  }
-  return frame;
-}
-
Index: /orxonox/trunk/gui/orxonox_gui_audio.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_audio.cc	(revision 2018)
+++ /orxonox/trunk/gui/orxonox_gui_audio.cc	(revision 2018)
@@ -0,0 +1,28 @@
+#include "orxonox_gui_audio.h"
+
+OrxonoxGuiAudio::OrxonoxGuiAudio ()
+{
+  audioFrame = new Frame ("Audio-Options:");
+  audioBox = new Box ('v');
+  
+  enableSound = new CheckButton ("Disable Sound");
+  enableSound->setFlagName ("no-sound", 0);
+  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);
+  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);
+  audioBox->fill (effectsVolume);
+
+  audioFrame->fill (audioBox);
+}
+
+Frame* OrxonoxGuiAudio::getFrame ()
+{
+  return audioFrame;
+}
Index: /orxonox/trunk/gui/orxonox_gui_audio.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_audio.h	(revision 2017)
+++ /orxonox/trunk/gui/orxonox_gui_audio.h	(revision 2018)
@@ -2,7 +2,19 @@
 #define _ORXONOX_GUI_AUDIO_H
 
+#include "orxonox_gui.h"
 
-void audio_check_button_change(GtkWidget *widget, int* data);
-GtkWidget *orxonox_gui_audio_frame (struct settings *orxonox_settings);
-
+class OrxonoxGuiAudio
+{
+ private:
+  Frame* audioFrame;
+  Box* audioBox;
+  CheckButton* enableSound;
+  Slider* musicVolume;
+  Slider* effectsVolume;
+ public:
+  OrxonoxGuiAudio ();
+  ~OrxonoxGuiAudio ();
+  
+  Frame* getFrame ();
+};
 #endif /* _ORXONOX_GUI_AUDIO_H */
Index: xonox/trunk/gui/orxonox_gui_exec.c
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_exec.c	(revision 2017)
+++ 	(revision )
@@ -1,151 +1,0 @@
-#include "orxonox_gui_exec.h"
-GtkWidget *exec_flags_label;
-struct settings *exec_orxonox_settings;
-
-gint orxonox_gui_quit ( GtkWidget *widget, GdkEvent *event, gpointer data)
-{
-  if (exec_orxonox_settings->exec_save_settings)
-    orxonox_gui_file_save("~/.orxonox.conf", exec_orxonox_settings);
-  gtk_main_quit();
-  return FALSE;
-}
-
-
-void exec_check_button_change(GtkWidget *widget, int* data)
-{
-  *data = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON (widget)); 
-  orxonox_flags_update ();
-  if (verbose >=1)
-    printf ("%s changed to %i.\n", gtk_button_get_label(GTK_BUTTON(widget)), *data);
-  return;
-}
-
-void exec_verbose_mode_change(GtkWidget *widget, gpointer data)
-{
-  verbose = GPOINTER_TO_INT(data);
-  orxonox_flags_update ();
-  if (verbose >= 1)
-    printf ("Verbose-mode changed to %i.\n", verbose);
-  return;
-}
-
-
-GtkWidget *orxonox_gui_exec_frame (struct settings *orxonox_settings)
-{
-  GtkWidget *frame;
-  GtkWidget *save_settings_button;
-  GtkWidget *show_menu_button;
-  GtkWidget *start_button;
-  GtkWidget *quit_button;
-  GtkWidget *flags_frame;
-  GtkWidget *setting_box;
-  GtkWidget *verbose_button;
-
-
-  frame = gtk_frame_new ( "Execute-Tags:");
-  gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
-  {
-    GtkWidget *orxonox_gui_exec_vbox;
-    orxonox_gui_exec_vbox = gtk_vbox_new (FALSE, 5);
-    {
-
-	start_button = gtk_button_new_with_label ("Start");
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_exec_vbox), start_button, TRUE, TRUE, 5);
-	setting_box = gtk_hbox_new(FALSE, 5);
-	{
-	  save_settings_button = gtk_check_button_new_with_label ("Save Settings");
-	  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (save_settings_button), orxonox_settings->exec_save_settings);
-	  g_signal_connect(GTK_TOGGLE_BUTTON(save_settings_button), "clicked", G_CALLBACK(exec_check_button_change), &(orxonox_settings->exec_save_settings));
-	  gtk_box_pack_start(GTK_BOX (setting_box), save_settings_button, TRUE, TRUE, 0);
-	  
-	  {
-	    GtkWidget *opt;
-	    GtkWidget *menu;
-	    GtkWidget *item;
-
-	    opt = gtk_option_menu_new ();
-	    menu = gtk_menu_new ();
-
-	    item = gtk_menu_item_new_with_label ("no verbose");     
-	    g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (exec_verbose_mode_change), GINT_TO_POINTER(0));
-	    gtk_menu_shell_append(GTK_MENU_SHELL (menu), item);
-
-	    item = gtk_menu_item_new_with_label ("verbose");
-	    g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (exec_verbose_mode_change), GINT_TO_POINTER(1));
-	    gtk_menu_shell_append(GTK_MENU_SHELL (menu), item);
-
-	    item = gtk_menu_item_new_with_label ("debug");
-	    g_signal_connect (G_OBJECT (item), "activate", G_CALLBACK (exec_verbose_mode_change), GINT_TO_POINTER(2));
-	    gtk_menu_shell_append(GTK_MENU_SHELL (menu), item);
-
-	    gtk_option_menu_set_menu (GTK_OPTION_MENU (opt), menu);
-	    gtk_option_menu_set_history (GTK_OPTION_MENU (opt), verbose);
-	    gtk_box_pack_start (GTK_BOX (setting_box), opt, TRUE, TRUE, 0);
-
-	  }
-	}
-	gtk_box_pack_start(GTK_BOX(orxonox_gui_exec_vbox), setting_box, TRUE, TRUE, 0);
-	show_menu_button = gtk_check_button_new_with_label ("Always show this Menu");
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show_menu_button), orxonox_settings->exec_show_menu);
-	g_signal_connect(GTK_TOGGLE_BUTTON(show_menu_button), "clicked", G_CALLBACK(exec_check_button_change), &(orxonox_settings->exec_show_menu));
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_exec_vbox), show_menu_button, TRUE, TRUE, 0);
-	
-	quit_button = gtk_button_new_with_label ("quit");
-	g_signal_connect(GTK_BUTTON(quit_button), "clicked", G_CALLBACK(orxonox_gui_quit), NULL);
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_exec_vbox), quit_button, FALSE, FALSE, 5);
-
-
-	flags_frame = gtk_frame_new("Orxonox's starting Flags");
-	{
-	  exec_flags_label = gtk_label_new("test");
-	  exec_orxonox_settings = orxonox_settings;
-	  gtk_widget_set_usize(exec_flags_label, 250,40);
-	  gtk_label_set_line_wrap (GTK_LABEL(exec_flags_label), TRUE);
-	  orxonox_flags_update();
-	  gtk_container_add (GTK_CONTAINER(flags_frame), exec_flags_label);
-
-	}
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_exec_vbox), flags_frame, FALSE, FALSE, 5);
-    }
-    gtk_container_add(GTK_CONTAINER(frame), orxonox_gui_exec_vbox);
-  }
-
-  return frame;
-
-}
-
-
-char * orxonox_flags_text (struct settings *orxonox_settings, char *exec_flags_text)
-{
-  char temp [50];
-  bzero(exec_flags_text, 1);
-  strcat(exec_flags_text, "orxonox ");
-
-  if(!orxonox_settings->video_fullscreen)
-    strcat(exec_flags_text, "--windowed ");
-  if(orxonox_settings->video_wireframe)
-    strcat(exec_flags_text, "--wireframe ");
-  
-  if(!orxonox_settings->audio_enable_sound)
-    strcat(exec_flags_text, "--disable_audio ");
-  if(orxonox_settings->audio_music_volume != 80)
-    {
-      strcat(exec_flags_text, "--music_volume=");
-      sprintf(temp, "%i ", (int) orxonox_settings->audio_music_volume);
-      strcat(exec_flags_text, temp);
-    }
-  if(orxonox_settings->audio_effects_volume != 80)
-    {
-      strcat(exec_flags_text, "--effects_volume= ");
-      sprintf(temp, "%i ", (int) orxonox_settings->audio_effects_volume);
-      strcat(exec_flags_text, temp);
-    }
-  return (exec_flags_text);
-}
-
-void orxonox_flags_update (void)
-{
-  char exec_flags_text[1024];
-  gtk_label_set_text (GTK_LABEL(exec_flags_label), orxonox_flags_text (exec_orxonox_settings, exec_flags_text));
-  return;
-}
Index: /orxonox/trunk/gui/orxonox_gui_exec.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_exec.cc	(revision 2018)
+++ /orxonox/trunk/gui/orxonox_gui_exec.cc	(revision 2018)
@@ -0,0 +1,146 @@
+#include "orxonox_gui_exec.h"
+#include <iostream>
+#include <string>
+
+OrxonoxGuiExec::OrxonoxGuiExec (Window* orxonoxGUI)
+{
+  configFile = (char*)malloc (512*sizeof (char));
+
+  execFrame = new Frame ("Execute-Tags:");
+  execBox = new Box ('v');
+  
+  start = new Button ("Start");
+  execBox->fill (start);
+  saveSettings = new CheckButton ("Save Settings");
+  saveSettings->value = 1;
+  execBox->fill (saveSettings);
+  verboseMode = new Menu ("verbose mode", "no output", "verbose", "debug", "lastItem");
+  verboseMode->setFlagName ("verbose", "v", 0);
+  execBox->fill (verboseMode);
+  alwaysShow = new CheckButton ("Always Show this Menu");
+  alwaysShow->setFlagName ("gui", "g", 0);
+  execBox->fill (alwaysShow);
+  quit = new Button ("Quit");
+  quit->connectSignal ("clicked", orxonoxGUI->orxonox_gui_quit);
+  execBox->fill (quit);
+
+  execFrame->fill (execBox);
+}
+
+Frame* OrxonoxGuiExec::getFrame ()
+{
+  return execFrame;
+}
+
+/* FILE HANDLING */
+
+void OrxonoxGuiExec::setFilename (char* filename)
+{
+  char* buffer = (char*) malloc (512*sizeof(buffer));
+  sprintf (buffer, "%s", filename);
+  if (!strncmp (buffer, "~/", 2))
+  {
+#ifdef __WIN32__
+    sprintf (configFile, "%s/%s", getenv ("USERPROFILE"), buffer+2);
+#else
+    sprintf (configFile, "%s/%s", getenv ("HOME"), buffer+2);
+#endif
+  }
+  else if (buffer)
+    sprintf(configFile, "%s", buffer);
+  delete buffer;
+}
+
+int OrxonoxGuiExec::shouldsave ()
+{
+  return ( static_cast<Option*>(saveSettings)->value);
+}
+
+void OrxonoxGuiExec::writeToFile (Widget* widget)
+{
+  CONFIG_FILE = fopen (configFile, "w");
+  if (CONFIG_FILE)
+    writeFileText (widget);
+  fclose (CONFIG_FILE);
+}
+
+void OrxonoxGuiExec::writeFileText (Widget* widget)
+{
+  if (widget->is_option >= 1)
+    if  (strcmp (static_cast<Option*>(widget)->flag_name, "") || strcmp (static_cast<Option*>(widget)->flag_name_short, ""))
+      {
+	char Buffer[256];
+	char* space2under;
+	sprintf (Buffer, "%s", static_cast<Option*>(widget)->option_name);
+	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);
+	  }
+	fprintf (CONFIG_FILE, "%s = %i\n", Buffer, static_cast<Option*>(widget)->value);
+      }
+  switch (widget->is_option)
+    {
+    case -1:
+      writeFileText (static_cast<Container*>(widget)->down);
+      break;
+    case -2:
+      writeFileText (static_cast<Box*>(widget)->down);
+      break;
+    } 
+  
+  if (widget->next != NULL)
+    writeFileText (widget->next);
+}
+
+void OrxonoxGuiExec::readFromFile (Widget* widget)
+{
+  CONFIG_FILE = fopen (configFile, "r");
+  if (CONFIG_FILE)
+    {
+      char Buffer[256] = "";
+      char Variable[256]= "";
+      int Value;
+      while (fscanf (CONFIG_FILE, "%s", Buffer) != EOF)
+	{
+	  if (!strcmp (Buffer, "="))
+	    {
+	      char* under2space;
+	      while (under2space = strchr(Variable, '_'))
+		{
+		  sprintf (under2space, " %s", under2space+1);
+		}
+	      
+	      fscanf (CONFIG_FILE, "%s", Buffer);
+	      Value = atoi(Buffer);
+	      readFileText (widget, Variable, Value);
+	      sprintf (Variable, "");
+	    }
+	  sprintf (Variable, "%s", Buffer);
+	}
+      widget->setOptions();
+    }
+}
+
+void OrxonoxGuiExec::readFileText (Widget* widget, char* variableName, int variableValue)
+{
+  if (widget->is_option >= 1)
+    if (!strcmp (static_cast<Option*>(widget)->option_name, variableName))
+	static_cast<Option*>(widget)->value = variableValue;
+
+  switch (widget->is_option)
+    {
+    case -1:
+      readFileText (static_cast<Container*>(widget)->down, variableName, variableValue);
+      break;
+    case -2:
+      readFileText (static_cast<Box*>(widget)->down, variableName, variableValue);
+      break;
+    } 
+
+  if (widget->next != NULL)
+    readFileText (widget->next, variableName, variableValue);
+
+
+}
Index: /orxonox/trunk/gui/orxonox_gui_exec.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_exec.h	(revision 2017)
+++ /orxonox/trunk/gui/orxonox_gui_exec.h	(revision 2018)
@@ -1,12 +1,34 @@
 #ifndef _ORXONOX_GUI_EXEC_H
 #define _ORXONOX_GUI_EXEC_H
+
 #include "orxonox_gui.h"
+#include <stdio.h>
+using namespace std;
 
-gint orxonox_gui_quit ( GtkWidget *widget, GdkEvent *event, gpointer data);
+class OrxonoxGuiExec
+{
+ private:
+  Frame* execFrame;
+  Box* execBox;
+  Button* start;
+  CheckButton* saveSettings;
+  Menu* verboseMode;
+  CheckButton* alwaysShow;
+  Button* quit;
+  char* configFile;
+  FILE* CONFIG_FILE;
+ public:
+  OrxonoxGuiExec (Window* orxonoxGUI);
+  ~OrxonoxGuiExec ();
+  
+  Frame* getFrame ();
+  
+  void setFilename (char* filename);
+  int shouldsave ();
+  void writeToFile (Widget* widget);
+  void writeFileText (Widget* widget);
+  void readFromFile (Widget* widget);
+  void readFileText (Widget* widget, char* variableName, int variableValue);
 
-void exec_check_button_change(GtkWidget *widget, int* data);
-GtkWidget *orxonox_gui_exec_frame (struct settings *orxonox_settings);
-char * orxonox_flags_text (struct settings *orxonox_settings, char *exec_flags_text);
-void orxonox_flags_update (void);
-
+};
 #endif /* _ORXONOX_GUI_EXEC_H */
Index: xonox/trunk/gui/orxonox_gui_file.c
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_file.c	(revision 2017)
+++ 	(revision )
@@ -1,139 +1,0 @@
-#include <sys/stat.h>
-#include "orxonox_gui_file.h"
-
-
-void orxonox_gui_file_default (struct settings *orxonox_settings)
-{
-  if (verbose >= 1)
-    printf("Setting orxonox to it's default settings.\n");
-
-  orxonox_settings->video_fullscreen = 1;
-  orxonox_settings->video_wireframe = 0;
-  
-  orxonox_settings->audio_enable_sound = 1;
-  orxonox_settings->audio_music_volume = 80;
-  orxonox_settings->audio_effects_volume = 80;
-  
-  orxonox_settings->exec_save_settings = 1;
-  orxonox_settings->exec_show_menu = 0;
-
-  return;
-}
-
-void orxonox_gui_file_save (char *config_file, struct settings *orxonox_settings)
-{
-  FILE *IOFILE;
-  char local_config_file[1000];
-
-  sprintf(local_config_file,"%s", config_file);
-  if (!strncmp (local_config_file,"~/", 2))
-  {
-    char buffer[100];
-    char *homedir = getenv("HOME");
-    sprintf(buffer, local_config_file);
-    sprintf (local_config_file,"%s/%s", homedir,buffer+2);
-  }
-
-  IOFILE = fopen( local_config_file, "w");
-  if (IOFILE)
-    {
-      if (verbose >= 1)
-	printf ("Saving settings to '%s'\n", local_config_file);
-      
-      fprintf (IOFILE, "%s\n", "Configuration file of orxonox (do not edit if ou do not know what you are doing)");
-      fprintf (IOFILE, "orxonox_settings->video_fullscreen = %i\n", orxonox_settings->video_fullscreen);
-      fprintf (IOFILE, "orxonox_settings->video_wireframe = %i\n", orxonox_settings->video_wireframe);
-      
-      fprintf (IOFILE, "orxonox_settings->audio_enable_sound = %i\n", orxonox_settings->audio_enable_sound);
-      fprintf (IOFILE, "orxonox_settings->audio_music_volume = %i\n", orxonox_settings->audio_music_volume);
-      fprintf (IOFILE, "orxonox_settings->audio_effects_volume = %i\n", orxonox_settings->audio_effects_volume);
-      
-      fprintf (IOFILE, "orxonox_settings->exec_save_settings = %i\n", orxonox_settings->exec_save_settings);
-      fprintf (IOFILE, "orxonox_settings->exec_show_menu = %i\n", orxonox_settings->exec_show_menu);
-      
-      fprintf (IOFILE, "orxonox_settings->verbose = %i\n", verbose);
-      
-      fclose( IOFILE );
-      return;
-    }
-  else
-    {
-      if (verbose >= 1)
-	printf ("Settingsfile '%s' does not exist.\n", local_config_file);
-    }
-}
-
-void orxonox_gui_file_load (char *config_file, struct settings *orxonox_settings)
-{
-  FILE *IOFILE;
-  char variable[100];
-  char equals[5];
-  char value[100];
-  char buffer[100];
-  char local_config_file[1000];
-  
-  sprintf(local_config_file,"%s", config_file);
-  if (!strncmp (config_file, "~/", 2))
-    {
-      char *homedir = getenv("HOME");
-      sprintf(buffer, local_config_file);
-      sprintf (local_config_file,"%s/%s", homedir, buffer+2);
-    }
-  
-
-  IOFILE = fopen(local_config_file, "r");
-  if (IOFILE)
-    {
-      if (verbose >= 1)
-	printf ("Loading settings from '%s'\n", local_config_file);
-      
-      fscanf (IOFILE, "Configuration file of orxonox (do not edit if ou do not know what you are doing)");
-      while (fscanf (IOFILE,"%s %s %s", variable, equals, value) != EOF)
-	{
-	  if ( !strcmp (variable, "orxonox_settings->video_fullscreen"))
-	    {
-	      orxonox_settings->video_fullscreen = atoi (value);
-	    }
-	  else if ( !strcmp (variable, "orxonox_settings->video_wireframe"))
-	    {
-	      orxonox_settings->video_wireframe = atoi (value);
-	    }
-	  
-	  else if ( !strcmp (variable, "orxonox_settings->audio_enable_sound"))
-	    {
-	      orxonox_settings->audio_enable_sound = atoi (value);
-	    }
-	  else if ( !strcmp (variable, "orxonox_settings->audio_music_volume"))
-	    {
-	      orxonox_settings->audio_music_volume = atoi (value);
-	    }
-	  else if ( !strcmp (variable, "orxonox_settings->audio_effects_volume"))
-	    {
-	      orxonox_settings->audio_effects_volume = atoi (value);
-	    }
-	  
-	  else if ( !strcmp (variable, "orxonox_settings->exec_save_settings"))
-	    {
-	      orxonox_settings->exec_save_settings = atoi (value);
-	    }
-	  else if ( !strcmp (variable, "orxonox_settings->exec_show_menu"))
-	    {
-	      orxonox_settings->exec_show_menu = atoi (value);
-	    }
-	  
-	  else if ( !strcmp (variable, "orxonox_settings->verbose"))
-	    {
-	      verbose = atoi (value);
-	    }
-	  
-	}
-      fclose( IOFILE );      
-      return;
-    }
-
-  else
-    {
-      if (verbose >= 1)
-	printf ("File '%s' does not exist. Can not load orxonox-states.\n", local_config_file);
-    }
-}
Index: /orxonox/trunk/gui/orxonox_gui_flags.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_flags.cc	(revision 2018)
+++ /orxonox/trunk/gui/orxonox_gui_flags.cc	(revision 2018)
@@ -0,0 +1,67 @@
+#include "orxonox_gui_flags.h"
+#include <iostream.h>
+
+
+OrxonoxGuiFlags::OrxonoxGuiFlags (Widget* widget)
+{
+  flagText = (char*) malloc (1024);
+
+  flagsFrame = new Frame ("Orxonox-Startup-Flags:");
+  flagsBox = new Box ('v');
+
+  flagsLabel = new Label ();
+  flagsBox->fill (flagsLabel);
+  shortFlags = new CheckButton ("shortFlags");
+  flagsBox->fill (shortFlags);
+
+  flagsFrame->fill (flagsBox);
+}
+
+Frame* OrxonoxGuiFlags::getFrame ()
+{
+  return flagsFrame;
+}
+
+void OrxonoxGuiFlags::setTextFromFlags (Widget* widget)
+{
+  sprintf (flagText, "");
+  strcat (flagText, "orxonox");
+  FlagsText (widget);
+  flagsLabel->setText (flagText);
+}
+
+void OrxonoxGuiFlags::FlagsText(Widget* widget)
+{
+  if (widget->is_option >= 1)
+    if  (static_cast<Option*>(widget)->value != static_cast<Option*>(widget)->default_value && (strcmp (static_cast<Option*>(widget)->flag_name, "") || strcmp (static_cast<Option*>(widget)->flag_name_short, "")))
+      {
+	if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(shortFlags->widget)))
+	  {
+	    strcat (flagText, " -");
+	    strcat (flagText, static_cast<Option*>(widget)->flag_name_short);
+	  }
+	else
+	  {
+	    strcat (flagText, " --");
+	    strcat (flagText, static_cast<Option*>(widget)->flag_name);
+	  }
+	if (static_cast<Option*>(widget)->is_option == 2)
+	  {
+	    sprintf (flagText, "%s=%i", flagText, static_cast<Option*>(widget)->value);
+	  }
+      }
+  switch (widget->is_option)
+    {
+    case -1:
+      FlagsText (static_cast<Container*>(widget)->down);
+      break;
+    case -2:
+      FlagsText (static_cast<Box*>(widget)->down);
+      break;
+    } 
+  
+  if (widget->next != NULL)
+    FlagsText (widget->next);
+}
+
+
Index: /orxonox/trunk/gui/orxonox_gui_flags.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_flags.h	(revision 2018)
+++ /orxonox/trunk/gui/orxonox_gui_flags.h	(revision 2018)
@@ -0,0 +1,24 @@
+#ifndef _ORXONOX_GUI_FLAGS_H
+#define _ORXONOX_GUI_FLAGS_H
+
+#include "orxonox_gui.h"
+
+class OrxonoxGuiFlags
+{
+ private:
+  Frame* flagsFrame;
+  Box* flagsBox;
+  CheckButton* shortFlags;
+  Label* flagsLabel;
+  char* flagText;
+
+ public:
+  OrxonoxGuiFlags (Widget* widget);
+  ~OrxonoxGuiFlags ();
+
+  void setTextFromFlags (Widget* widget);
+  void OrxonoxGuiFlags::FlagsText(Widget* widget);
+  
+  Frame* getFrame ();
+};
+#endif /* _ORXONOX_GUI_FLAGS_H */
Index: xonox/trunk/gui/orxonox_gui_video.c
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_video.c	(revision 2017)
+++ 	(revision )
@@ -1,42 +1,0 @@
-#include "orxonox_gui_video.h"
-
-void video_option_change(GtkWidget *widget, int* data)
-{
-  *data = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); 
-  orxonox_flags_update ();
-  if (verbose >=1)
-    printf ("%s changed to %i.\n", gtk_button_get_label(GTK_BUTTON(widget)), *data);
-}
-
-/* Drawing The VIDEO_FRAME */
-GtkWidget *orxonox_gui_video_frame (struct settings *orxonox_settings)
-{
-  GtkWidget *frame;
-  GtkWidget *fullscreen_button;
-  GtkWidget *wireframe_button;
-  
-  frame = gtk_frame_new ( "Video-Options:");
-  gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
-
-  {
-    GtkWidget *orxonox_gui_video_vbox;
-    orxonox_gui_video_vbox = gtk_vbox_new (FALSE, 0);
-    {
-	fullscreen_button = gtk_check_button_new_with_label ("Fullscreen-mode");
-	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (fullscreen_button), orxonox_settings->video_fullscreen);
-	g_signal_connect(GTK_TOGGLE_BUTTON(fullscreen_button), "clicked", G_CALLBACK(video_option_change), &(orxonox_settings->video_fullscreen));
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_video_vbox), fullscreen_button, TRUE, TRUE, 0);
-
-	wireframe_button = gtk_check_button_new_with_label ("Wireframe-mode");
-	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (wireframe_button), orxonox_settings->video_wireframe);
-	g_signal_connect(GTK_TOGGLE_BUTTON(wireframe_button), "clicked", G_CALLBACK(video_option_change), &(orxonox_settings->video_wireframe));
-	gtk_box_pack_start(GTK_BOX (orxonox_gui_video_vbox), wireframe_button, TRUE, TRUE, 0);
-	
-    }
-    gtk_container_add(GTK_CONTAINER(frame), orxonox_gui_video_vbox);
-  }
-
-  return frame;
-
-}
-
Index: /orxonox/trunk/gui/orxonox_gui_video.cc
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_video.cc	(revision 2018)
+++ /orxonox/trunk/gui/orxonox_gui_video.cc	(revision 2018)
@@ -0,0 +1,23 @@
+#include "orxonox_gui_video.h"
+
+
+
+OrxonoxGuiVideo::OrxonoxGuiVideo ()
+{
+  videoFrame = new Frame ("Video-Options:");
+  videoBox = new Box ('v');
+  
+  fullscreen = new CheckButton ("Fullscreen-mode");
+  fullscreen->setFlagName ("windowed", "q", 1);
+  videoBox->fill (fullscreen);
+  wireframe = new CheckButton ("WireFrame-mode");
+  wireframe->setFlagName ("wireframe", "w", 0);
+  videoBox->fill (wireframe);
+
+  videoFrame->fill (videoBox);
+}
+
+Frame* OrxonoxGuiVideo::getFrame ()
+{
+  return videoFrame;
+}
Index: /orxonox/trunk/gui/orxonox_gui_video.h
===================================================================
--- /orxonox/trunk/gui/orxonox_gui_video.h	(revision 2017)
+++ /orxonox/trunk/gui/orxonox_gui_video.h	(revision 2018)
@@ -4,6 +4,16 @@
 #include "orxonox_gui.h"
 
-void video_option_change(GtkWidget *widget, int * data);
-GtkWidget *orxonox_gui_video_frame (struct settings *orxonox_settings);
-
+class OrxonoxGuiVideo
+{
+ private:
+  Frame* videoFrame;
+  Box* videoBox;
+  CheckButton* fullscreen;
+  CheckButton* wireframe;
+ public:
+  OrxonoxGuiVideo ();
+  ~OrxonoxGuiVideo ();
+  
+  Frame* getFrame ();
+};
 #endif /* _ORXONOX_GUI_VIDEO_H */
Index: /orxonox/trunk/gui/rc
===================================================================
--- /orxonox/trunk/gui/rc	(revision 2018)
+++ /orxonox/trunk/gui/rc	(revision 2018)
@@ -0,0 +1,132 @@
+# pixmap_path "<dir 1>:<dir 2>:<dir 3>:..."
+#
+pixmap_path "/usr/include/X11R6/pixmaps:/home/imain/pixmaps"
+#
+# style <name> [= <name>]
+# {
+#   <option>
+# }
+#
+# widget <widget_set> style <style_name>
+# widget_class <widget_class_set> style <style_name>
+
+# Here is a list of all the possible states.  Note that some do not apply to
+# certain widgets.
+#
+# NORMAL - The normal state of a widget, without the mouse over top of
+# it, and not being pressed, etc.
+#
+# PRELIGHT - When the mouse is over top of the widget, colors defined
+# using this state will be in effect.
+#
+# ACTIVE - When the widget is pressed or clicked it will be active, and
+# the attributes assigned by this tag will be in effect.
+#
+# INSENSITIVE - When a widget is set insensitive, and cannot be
+# activated, it will take these attributes.
+#
+# SELECTED - When an object is selected, it takes these attributes.
+#
+# Given these states, we can set the attributes of the widgets in each of
+# these states using the following directives.
+#
+# fg - Sets the foreground color of a widget.
+# fg - Sets the background color of a widget.
+# bg_pixmap - Sets the background of a widget to a tiled pixmap.
+# font - Sets the font to be used with the given widget.
+#
+
+# This sets a style called "button".  The name is not really important, as
+# it is assigned to the actual widgets at the bottom of the file.
+
+style "window"
+{
+  #This sets the padding around the window to the pixmap specified.
+  #bg_pixmap[<STATE>] = "<pixmap filename>"
+  #bg_pixmap[NORMAL] = "warning.xpm"
+  bg[NORMAL] = { 0, 0, 0 }
+  fg[NORMAL] = { 1.0, 0, 0 }
+}
+
+style "scale"
+{
+  #Sets the foreground color (font color) to red when in the "NORMAL"
+  #state.
+  
+  fg[NORMAL] = { 1.0, 0, 0 }
+  bg[NORMAL] = { 1.0, 0, 0 }
+  bg[PRELIGHT] = { 1.0, 0, 0 }
+  
+  #Sets the background pixmap of this widget to that of its parent.
+  bg_pixmap[NORMAL] = "<parent>"
+}
+
+style "button"
+{
+  # This shows all the possible states for a button.  The only one that
+  # doesn't apply is the SELECTED state.
+  
+  fg[PRELIGHT] = { 0, 0, 0 }
+  bg[PRELIGHT] = { 1.0, 0, 0 }
+  bg[ACTIVE] = { 1.0, 0, 0 }
+  fg[ACTIVE] = { 0, 1.0, 0 }
+  bg[NORMAL] = { 0, 0, 0 }
+  fg[NORMAL] = { 1.0, 0, 0 }
+  bg[INSENSITIVE] = { 1.0, 1.0, 1.0 }
+  fg[INSENSITIVE] = { 1.0, 0, 1.0 }
+}
+
+# In this example, we inherit the attributes of the "button" style and then
+# override the font and background color when prelit to create a new
+# "main_button" style.
+
+style "main_button" = "button"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*"
+  bg[PRELIGHT] = { 0.75, 0, 0 }
+}
+
+style "toggle_button" = "button"
+{
+  fg[NORMAL] = { 1.0, 0, 0 }
+  fg[ACTIVE] = { 1.0, 0, 0 }
+  text[NORMAL] = { 0, 0, 0}
+  # This sets the background pixmap of the toggle_button to that of its
+  # parent widget (as defined in the application).
+  #bg_pixmap[NORMAL] = "<parent>"
+}
+
+style "text"
+{
+  #bg_pixmap[NORMAL] = "marble.xpm"
+  fg[NORMAL] = { 1.0, 0, 0 }
+}
+
+style "ruler"
+{
+  font = "-adobe-helvetica-medium-r-normal--*-20-*-*-*-*-*-*"
+}
+
+# pixmap_path "~/.pixmaps"
+
+# These set the widget types to use the styles defined above.
+# The widget types are listed in the class hierarchy, but could probably be
+# just listed in this document for the users reference.
+
+widget_class "GtkWindow" style "window"
+widget_class "GtkFrame" style "window"
+widget_class "GtkDialog" style "window"
+widget_class "GtkFileSelection" style "window"
+widget_class "*Gtk*Scale" style "scale"
+widget_class "*GtkCheckButton*" style "toggle_button"
+widget_class "*Gtk*Menu*" style "toggle_button"
+widget_class "*GtkRadioButton*" style "toggle_button"
+widget_class "*GtkButton*" style "button"
+widget_class "*Ruler" style "ruler"
+widget_class "*GtkText" style "text"
+widget_class "*GtkLabel" style "text"
+
+
+# This sets all the buttons that are children of the "main window" to
+# the main_button style.  These must be documented to be taken advantage of.
+widget "main window.*GtkButton*" style "main_button"
Index: /orxonox/trunk/src/Makefile.in
===================================================================
--- /orxonox/trunk/src/Makefile.in	(revision 2017)
+++ /orxonox/trunk/src/Makefile.in	(revision 2018)
@@ -69,4 +69,5 @@
 LTLIBOBJS = @LTLIBOBJS@
 MAKEINFO = @MAKEINFO@
+MSBITFIELDS = @MSBITFIELDS@
 OBJEXT = @OBJEXT@
 PACKAGE = @PACKAGE@
