Index: /orxonox/branches/md2_loader/src/Makefile.am
===================================================================
--- /orxonox/branches/md2_loader/src/Makefile.am	(revision 4138)
+++ /orxonox/branches/md2_loader/src/Makefile.am	(revision 4139)
@@ -22,4 +22,5 @@
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/util/animation
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/util/common
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/subprojects
 
 
@@ -90,5 +91,6 @@
 		 lib/xmlparser/tinystr.cc \
 		 lib/xmlparser/tinyxmlerror.cc \
-		 lib/xmlparser/tinyxmlparser.cc 
+		 lib/xmlparser/tinyxmlparser.cc \
+		 subprojects/benchmark.cc
 
 noinst_HEADERS = orxonox.h \
@@ -134,4 +136,5 @@
 		 defs/error.h \
 		 defs/debug.h \
+		 defs/globals.h \
 		 lib/coord/p_node.h \
 		 lib/coord/null_parent.h \
@@ -170,5 +173,6 @@
 	         lib/gui/gui/gui_banner.h \
 	         lib/gui/gui/gui_keys.h \
-	         lib/gui/gui/gui_update.h
+	         lib/gui/gui/gui_update.h \
+		 subprojects/benchmark.h
 
 libORXgui_a_CPPFLAGS=$(GTK2_CFLAGS) $(GTHREAD_CFLAGS) $(CURL_CFLAGS) $(MSBITFIELDS)
Index: /orxonox/branches/md2_loader/src/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/Makefile.in	(revision 4139)
@@ -91,5 +91,5 @@
 	vector.$(OBJEXT) curve.$(OBJEXT) glmenu_imagescreen.$(OBJEXT) \
 	tinyxml.$(OBJEXT) tinystr.$(OBJEXT) tinyxmlerror.$(OBJEXT) \
-	tinyxmlparser.$(OBJEXT)
+	tinyxmlparser.$(OBJEXT) benchmark.$(OBJEXT)
 orxonox_OBJECTS = $(am_orxonox_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -100,5 +100,6 @@
 @AMDEP_TRUE@	./$(DEPDIR)/animation_player.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/array.Po ./$(DEPDIR)/base_entity.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/base_object.Po ./$(DEPDIR)/camera.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/base_object.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/benchmark.Po ./$(DEPDIR)/camera.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/campaign.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/character_attributes.Po \
@@ -222,4 +223,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
@@ -273,5 +275,5 @@
 target_vendor = @target_vendor@
 MAINSRCDIR = .
-AM_CXXFLAGS = -I$(MAINSRCDIR) -I$(MAINSRCDIR)/world_entities -I$(MAINSRCDIR)/story_entities -I$(MAINSRCDIR)/lib -I$(MAINSRCDIR)/lib/coord -I$(MAINSRCDIR)/lib/data -I$(MAINSRCDIR)/lib/graphics -I$(MAINSRCDIR)/lib/graphics/importer -I$(MAINSRCDIR)/lib/graphics/particles -I$(MAINSRCDIR)/lib/gui -I$(MAINSRCDIR)/lib/gui/gui -I$(MAINSRCDIR)/lib/lang -I$(MAINSRCDIR)/lib/util -I$(MAINSRCDIR)/lib/math -I$(MAINSRCDIR)/defs -I$(MAINSRCDIR)/font -I$(MAINSRCDIR)/network -I$(MAINSRCDIR)/glmenu -I$(MAINSRCDIR)/ai -I$(MAINSRCDIR)/util -I$(MAINSRCDIR)/util/animation -I$(MAINSRCDIR)/util/common
+AM_CXXFLAGS = -I$(MAINSRCDIR) -I$(MAINSRCDIR)/world_entities -I$(MAINSRCDIR)/story_entities -I$(MAINSRCDIR)/lib -I$(MAINSRCDIR)/lib/coord -I$(MAINSRCDIR)/lib/data -I$(MAINSRCDIR)/lib/graphics -I$(MAINSRCDIR)/lib/graphics/importer -I$(MAINSRCDIR)/lib/graphics/particles -I$(MAINSRCDIR)/lib/gui -I$(MAINSRCDIR)/lib/gui/gui -I$(MAINSRCDIR)/lib/lang -I$(MAINSRCDIR)/lib/util -I$(MAINSRCDIR)/lib/math -I$(MAINSRCDIR)/defs -I$(MAINSRCDIR)/font -I$(MAINSRCDIR)/network -I$(MAINSRCDIR)/glmenu -I$(MAINSRCDIR)/ai -I$(MAINSRCDIR)/util -I$(MAINSRCDIR)/util/animation -I$(MAINSRCDIR)/util/common -I$(MAINSRCDIR)/subprojects
 noinst_LIBRARIES = libORXgui.a
 orxonox_DEPENDENCIES = libORXgui.a
@@ -334,5 +336,6 @@
 		 lib/xmlparser/tinystr.cc \
 		 lib/xmlparser/tinyxmlerror.cc \
-		 lib/xmlparser/tinyxmlparser.cc 
+		 lib/xmlparser/tinyxmlparser.cc \
+		 subprojects/benchmark.cc
 
 noinst_HEADERS = orxonox.h \
@@ -378,4 +381,5 @@
 		 defs/error.h \
 		 defs/debug.h \
+		 defs/globals.h \
 		 lib/coord/p_node.h \
 		 lib/coord/null_parent.h \
@@ -414,5 +418,6 @@
 	         lib/gui/gui/gui_banner.h \
 	         lib/gui/gui/gui_keys.h \
-	         lib/gui/gui/gui_update.h
+	         lib/gui/gui/gui_update.h \
+		 subprojects/benchmark.h
 
 libORXgui_a_CPPFLAGS = $(GTK2_CFLAGS) $(GTHREAD_CFLAGS) $(CURL_CFLAGS) $(MSBITFIELDS)
@@ -522,4 +527,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_entity.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_object.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/benchmark.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camera.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/campaign.Po@am__quote@
@@ -1559,4 +1565,20 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tinyxmlparser.obj `if test -f 'lib/xmlparser/tinyxmlparser.cc'; then $(CYGPATH_W) 'lib/xmlparser/tinyxmlparser.cc'; else $(CYGPATH_W) '$(srcdir)/lib/xmlparser/tinyxmlparser.cc'; fi`
+
+benchmark.o: subprojects/benchmark.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT benchmark.o -MD -MP -MF "$(DEPDIR)/benchmark.Tpo" -c -o benchmark.o `test -f 'subprojects/benchmark.cc' || echo '$(srcdir)/'`subprojects/benchmark.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/benchmark.Tpo" "$(DEPDIR)/benchmark.Po"; else rm -f "$(DEPDIR)/benchmark.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='subprojects/benchmark.cc' object='benchmark.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/benchmark.Po' tmpdepfile='$(DEPDIR)/benchmark.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o benchmark.o `test -f 'subprojects/benchmark.cc' || echo '$(srcdir)/'`subprojects/benchmark.cc
+
+benchmark.obj: subprojects/benchmark.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT benchmark.obj -MD -MP -MF "$(DEPDIR)/benchmark.Tpo" -c -o benchmark.obj `if test -f 'subprojects/benchmark.cc'; then $(CYGPATH_W) 'subprojects/benchmark.cc'; else $(CYGPATH_W) '$(srcdir)/subprojects/benchmark.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/benchmark.Tpo" "$(DEPDIR)/benchmark.Po"; else rm -f "$(DEPDIR)/benchmark.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='subprojects/benchmark.cc' object='benchmark.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/benchmark.Po' tmpdepfile='$(DEPDIR)/benchmark.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o benchmark.obj `if test -f 'subprojects/benchmark.cc'; then $(CYGPATH_W) 'subprojects/benchmark.cc'; else $(CYGPATH_W) '$(srcdir)/subprojects/benchmark.cc'; fi`
 uninstall-info-am:
 
@@ -1682,5 +1704,5 @@
 
 distdir: $(DISTFILES)
-	$(mkdir_p) $(distdir)/ai $(distdir)/defs $(distdir)/glmenu $(distdir)/lib/coord $(distdir)/lib/data $(distdir)/lib/graphics $(distdir)/lib/graphics/importer $(distdir)/lib/graphics/particles $(distdir)/lib/gui/gui $(distdir)/lib/lang $(distdir)/lib/math $(distdir)/lib/util $(distdir)/network $(distdir)/proto $(distdir)/story_entities $(distdir)/util $(distdir)/util/animation $(distdir)/util/common $(distdir)/world_entities
+	$(mkdir_p) $(distdir)/ai $(distdir)/defs $(distdir)/glmenu $(distdir)/lib/coord $(distdir)/lib/data $(distdir)/lib/graphics $(distdir)/lib/graphics/importer $(distdir)/lib/graphics/particles $(distdir)/lib/gui/gui $(distdir)/lib/lang $(distdir)/lib/math $(distdir)/lib/util $(distdir)/network $(distdir)/proto $(distdir)/story_entities $(distdir)/subprojects $(distdir)/util $(distdir)/util/animation $(distdir)/util/common $(distdir)/world_entities
 	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
Index: /orxonox/branches/md2_loader/src/command_node.cc
===================================================================
--- /orxonox/branches/md2_loader/src/command_node.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/command_node.cc	(revision 4139)
@@ -57,5 +57,5 @@
   this->bEnabled = true;
   this->world = NULL;
-  this->loadBindings (filename);
+  this->loadBindings(filename);
 }
 
@@ -111,11 +111,9 @@
    \param filename: The path and name of the file to load the bindings from
 */
-void CommandNode::loadBindings (char* filename)
+void CommandNode::loadBindings (char* filename = DEFAULT_KEYBIND_FILE)
 {
   FILE* stream;
   
   PRINTF(4)("Loading key bindings from %s\n", filename);
-  
-  if( filename == NULL) filename = DEFAULT_KEYBIND_FILE;
   
   // remove old bindings if present
@@ -128,7 +126,7 @@
   // create parser
   IniParser parser (filename);
-  if( parser.getSection ("Bindings") == -1)
-    {
-      PRINTF(1)("Could not find key bindings in %s\n", filename);
+  if( parser.getSection (CONFIG_SECTION_PLAYER "1") == -1)
+    {
+      PRINTF(1)("Could not find key bindings " CONFIG_SECTION_PLAYER"1 in %s\n", filename);
       return;
     }
@@ -144,14 +142,14 @@
   while( parser.nextVar (namebuf, valuebuf) != -1)
     {
-      index = nameToIndex (namebuf);
+      index = nameToIndex (valuebuf);
       switch( index[0])
 	{
 	case 0:
-	  PRINTF(4)("Key binding %d(%s) set to %s\n", index[1], SDLKToKeyname( index[1]), valuebuf);
-	  strcpy (aliases->keys[index[1]], valuebuf);
+	  PRINTF(4)("Key binding %d(%s) set to %s\n", index[1], SDLKToKeyname( index[1]), namebuf);
+	  strcpy (aliases->keys[index[1]], namebuf);
 	  break;
 	case 1:
-	  PRINTF(4)("Button binding %d(%s) set to %s\n", index[1], SDLBToButtonname( index[1]), valuebuf);
-	  strcpy (aliases->buttons[index[1]], valuebuf);
+	  PRINTF(4)("Button binding %d(%s) set to %s\n", index[1], SDLBToButtonname( index[1]), namebuf);
+	  strcpy (aliases->buttons[index[1]], namebuf);
 	  break;
 	default:
@@ -161,4 +159,33 @@
       memset (valuebuf, 0, 256);
     }
+
+
+  // PARSE MISC SECTION
+  if( parser.getSection (CONFIG_SECTION_MISC_KEYS) == -1)
+    {
+      PRINTF(1)("Could not find key bindings in %s\n", filename);
+      return;
+    }
+
+  while( parser.nextVar (namebuf, valuebuf) != -1)
+    {
+      index = nameToIndex (valuebuf);
+      switch( index[0])
+	{
+	case 0:
+	  PRINTF(4)("Key binding %d(%s) set to %s\n", index[1], SDLKToKeyname( index[1]), namebuf);
+	  strcpy (aliases->keys[index[1]], namebuf);
+	  break;
+	case 1:
+	  PRINTF(4)("Button binding %d(%s) set to %s\n", index[1], SDLBToButtonname( index[1]), namebuf);
+	  strcpy (aliases->buttons[index[1]], namebuf);
+	  break;
+	default:
+	  break;
+	}
+      memset (namebuf, 0, 256);
+      memset (valuebuf, 0, 256);
+    }
+
 }
 
Index: /orxonox/branches/md2_loader/src/command_node.h
===================================================================
--- /orxonox/branches/md2_loader/src/command_node.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/command_node.h	(revision 4139)
@@ -18,5 +18,5 @@
 #define N_STD_KEYS SDLK_LAST
 #define N_BUTTONS 6
-#define DEFAULT_KEYBIND_FILE "default.ini"
+#define DEFAULT_KEYBIND_FILE "~/.orxonox/orxonox.conf"
 
 //! Key aliasing structure
Index: /orxonox/branches/md2_loader/src/defs/debug.h
===================================================================
--- /orxonox/branches/md2_loader/src/defs/debug.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/defs/debug.h	(revision 4139)
@@ -59,7 +59,7 @@
 #define DEBUG_MODULE_PNODE              0
 #define DEBUG_MODULE_WORLD_ENTITY       0
-#define DEBUG_MODULE_COMMAND_NODE       0
+#define DEBUG_MODULE_COMMAND_NODE       4
 #define DEBUG_MODULE_GRAPHICS           0
-#define DEBUG_MODULE_LOAD               0
+#define DEBUG_MODULE_LOAD               2
 
 #define DEBUG_MODULE_IMPORTER           2
Index: /orxonox/branches/md2_loader/src/defs/globals.h
===================================================================
--- /orxonox/branches/md2_loader/src/defs/globals.h	(revision 4139)
+++ /orxonox/branches/md2_loader/src/defs/globals.h	(revision 4139)
@@ -0,0 +1,75 @@
+/*!
+  \file globals.h
+  \brief This file defines some default values.
+  
+  no Class is defined here.
+*/
+
+#ifndef _GLOBALS_H
+#define _GLOBALS_H
+
+#define ORXONOX_STAFF "Patrick Boenzli - Captain\n" \
+                      "Benjamin Grauer - First Officer\n" \
+		      "Christian Meyer - Engeneer\n" \
+		      "Nico Bernold - Physics\n" \
+		      "David Gruetter - The ProtoType\n" \
+		      "many more\n" 
+
+#define DEFAULT_CONFIG_FILE "~/.orxonox/orxonox.conf"
+#define DEFAULT_DATA_DIR "/usr/share/orxonox/data/"
+#define DEFAULT_DATA_DIR_CHECKFILE "data.oxd"
+
+// Defines all the Sections of the Config (in Gui and ORxonox)
+//! Name of Section Misc in the config-File
+#define CONFIG_SECTION_MISC "misc"
+#define CONFIG_SECTION_MISC_KEYS "miscKeys"
+#define CONFIG_SECTION_PLAYER "player"
+#define CONFIG_SECTION_VIDEO "video"
+#define CONFIG_SECTION_VIDEO_ADVANCED "video_advanced"
+#define CONFIG_SECTION_AUDIO "audio"
+#define CONFIG_SECTION_EXEC "exec"
+#define CONFIG_SECTION_DATA "data"
+
+/*
+  TAGS for all the Configuration Options
+  Consider they may __not__ have any WhiteSpaces inside
+*/
+#define CONFIG_NAME_DATADIR "DataDir"
+#define CONFIG_NAME_AUTO_UPDATE "Auto-Update"
+#define CONFIG_NAME_FULLSCREEN "Fullscreen-mode"
+#define CONFIG_NAME_RESOLUTION "Resolution"
+#define CONFIG_NAME_WIREFRAME "WireFrame-mode"
+#define CONFIG_NAME_SHADOWS "Shadows"
+#define CONFIG_NAME_FOG "Fog"
+#define CONFIG_NAME_REFLECTIONS "Reflections"
+#define CONFIG_NAME_TEXTURES "TEXTURES"
+#define CONFIG_NAME_TEXTURE_DETAIL "Texture-Detail"
+#define CONFIG_NAME_MODEL_DETAIL "Model-Detail"
+#define CONFIG_NAME_ANTI_ALIASING "Anti-Aliasing"
+#define CONFIG_NAME_FILTER_METHOD "Filtering-Method"
+#define CONFIG_NAME_DISABLE_AUDIO "Disable-Audio"
+#define CONFIG_NAME_MUSIC_VOLUME "Music-Volume"
+#define CONFIG_NAME_EFFECTS_VOLUME "Effects-Volume"
+#define CONFIG_NAME_SAVE_SETTINGS "Save-Settings"
+#define CONFIG_NAME_VERBOSE_MODE "Verbose-Mode"
+#define CONFIG_NAME_ALWAYS_SHOW_GUI "Always-Show-The-Gui"
+#define CONFIG_NAME_PLAYER_UP "Up"
+#define CONFIG_NAME_PLAYER_DOWN "Down"
+#define CONFIG_NAME_PLAYER_LEFT "Left"
+#define CONFIG_NAME_PLAYER_RIGHT "Right"
+#define CONFIG_NAME_PLAYER_FIRE "Fire"
+#define CONFIG_NAME_PLAYER_NEXT_WEAPON "Next"
+#define CONFIG_NAME_PLAYER_PREV_WEAPON "Prev"
+#define CONFIG_NAME_QUIT "Quit"
+#define CONFIG_NAME_PAUSE "Pause"
+#define CONFIG_NAME_NEXT_WORLD "Next-World"
+#define CONFIG_NAME_PREV_WORLD "Prev-World"
+#define CONFIG_NAME_VIEW0 "view0"
+#define CONFIG_NAME_VIEW1 "view1"
+#define CONFIG_NAME_VIEW2 "view2"
+#define CONFIG_NAME_VIEW3 "view3"
+#define CONFIG_NAME_VIEW4 "view4"
+#define CONFIG_NAME_VIEW5 "view5"
+
+
+#endif /* _GLOBALS_H */
Index: /orxonox/branches/md2_loader/src/defs/stdincl.h
===================================================================
--- /orxonox/branches/md2_loader/src/defs/stdincl.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/defs/stdincl.h	(revision 4139)
@@ -25,4 +25,5 @@
 #include "error.h"
 #include "debug.h"
+#include "globals.h"
 
 #include "compiler.h"
Index: /orxonox/branches/md2_loader/src/factory.h
===================================================================
--- /orxonox/branches/md2_loader/src/factory.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/factory.h	(revision 4139)
@@ -57,5 +57,5 @@
 tFactory<T>::tFactory(const char* name) : Factory(name)
 {
-  printf("fileName: %s\n", name);
+  PRINTF(5)("fileName: %s\n", name);
 }
   
@@ -80,7 +80,4 @@
 const char* grabParameter( TiXmlElement* root, const char* name);
 
-
-
-
 #endif /* _FACTORY_H */
 
Index: /orxonox/branches/md2_loader/src/game_loader.cc
===================================================================
--- /orxonox/branches/md2_loader/src/game_loader.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/game_loader.cc	(revision 4139)
@@ -25,4 +25,5 @@
 #include "command_node.h"
 #include "vector.h"
+#include "resource_manager.h"
 #include "factory.h"
 
@@ -76,6 +77,16 @@
 {
   ErrorMessage errorCode;
-  
-  this->currentCampaign = this->fileToCampaign(name);
+  char* campaignName;
+  if (ResourceManager::isFile(name))
+    {
+      this->currentCampaign = this->fileToCampaign(name);
+    }
+  else
+    {
+      campaignName = new char[strlen(ResourceManager::getInstance()->getDataDir())+strlen(name)];
+      sprintf(campaignName, "%s%s", ResourceManager::getInstance()->getDataDir(), name);
+      this->currentCampaign = this->fileToCampaign(campaignName);
+      delete campaignName;
+    }
 }
 
@@ -162,5 +173,5 @@
    this will interprete the map/campaign files and recursivly load a tree of worlds/campaigns
 */
-Campaign* GameLoader::fileToCampaign(char *name)
+Campaign* GameLoader::fileToCampaign(const char *name)
 {
   /* do not entirely load the campaign. just the current world
@@ -171,5 +182,5 @@
   if( name == NULL)
     {
-      PRINTF0("No filename specified for loading");
+      PRINTF(2)("No filename specified for loading");
       return NULL;
     }
@@ -180,5 +191,5 @@
     {
       // report an error
-      PRINTF0("Error loading XML File: %s @ %d:%d\n", XMLDoc->ErrorDesc(), XMLDoc->ErrorRow(), XMLDoc->ErrorCol());
+      PRINTF(1)("Could not load XML File %s: %s @ %d:%d\n", name, XMLDoc->ErrorDesc(), XMLDoc->ErrorRow(), XMLDoc->ErrorCol());
       delete XMLDoc;
       return NULL;
@@ -192,5 +203,5 @@
     {
       // report an error
-      PRINTF(0)("Specified XML File is not an orxonox campaign file (Campaign element missing)\n");
+      PRINTF(2)("Specified XML File is not an orxonox campaign file (Campaign element missing)\n");
       delete XMLDoc;
       return NULL;
@@ -214,5 +225,5 @@
 bool GameLoader::worldCommand (Command* cmd)
 {
-  if( !strcmp( cmd->cmd, "up_world"))
+  if( !strcmp( cmd->cmd, CONFIG_NAME_NEXT_WORLD))
     {
       if( !cmd->bUp) 
@@ -222,5 +233,5 @@
       return true;
     }
-  else if( !strcmp( cmd->cmd, "down_world"))
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_PREV_WORLD))
     {
       if( !cmd->bUp)
@@ -230,5 +241,5 @@
       return true;
     }
-  else if( !strcmp( cmd->cmd, "pause"))
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_PAUSE))
     {
       if( !cmd->bUp)
@@ -241,5 +252,5 @@
       return true;
     }
-  else if( !strcmp( cmd->cmd, "quit"))
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_QUIT))
     {
       if( !cmd->bUp) this->stop();
@@ -279,5 +290,5 @@
 	assert( factory != NULL);
 	
-	PRINTF0("Registered factory for '%s'\n", factory->getFactoryName());
+	PRINTF(4)("Registered factory for '%s'\n", factory->getFactoryName());
 	
 	if( first == NULL) first = factory;
@@ -291,23 +302,25 @@
 BaseObject* GameLoader::fabricate( TiXmlElement* element)
 {
-	assert( element != NULL);
-	
-	if( first == NULL)
-	{
-		PRINTF0("GameLoader does not know any factories, fabricate() failed\n");
-		return NULL;
-	}
-	
-	if( element->Value() != NULL)
-	{
-		PRINTF0("Attempting fabrication of a '%s'\n", element->Value());
-		BaseObject* b = first->fabricate( element);
-		if( b == NULL) PRINTF0("Failed to fabricate a '%s'\n", element->Value());
-		else PRINTF0("Successfully fabricated a '%s'\n", element->Value());
-		return b;
-	}
-	
-	PRINTF0("Fabricate failed, TiXmlElement did not contain a value\n");
-	
-	return NULL;
-}
+  assert( element != NULL);
+	
+  if( first == NULL)
+    {
+      PRINTF(1)("GameLoader does not know any factories, fabricate() failed\n");
+      return NULL;
+    }
+	
+  if( element->Value() != NULL)
+    {
+      PRINTF(4)("Attempting fabrication of a '%s'\n", element->Value());
+      BaseObject* b = first->fabricate( element);
+      if( b == NULL) 
+	PRINTF(2)("Failed to fabricate a '%s'\n", element->Value());
+      else 
+	PRINTF(4)("Successfully fabricated a '%s'\n", element->Value());
+      return b;
+    }
+	
+  PRINTF(2)("Fabricate failed, TiXmlElement did not contain a value\n");
+	
+  return NULL;
+}
Index: /orxonox/branches/md2_loader/src/game_loader.h
===================================================================
--- /orxonox/branches/md2_loader/src/game_loader.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/game_loader.h	(revision 4139)
@@ -64,5 +64,5 @@
   Campaign* currentCampaign; //!> the current campaign playing
   
-  Campaign* fileToCampaign(char* name);
+  Campaign* fileToCampaign(const char* name);
 
   Factory* first;
Index: /orxonox/branches/md2_loader/src/glmenu/glmenu_imagescreen.cc
===================================================================
--- /orxonox/branches/md2_loader/src/glmenu/glmenu_imagescreen.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/glmenu/glmenu_imagescreen.cc	(revision 4139)
@@ -20,28 +20,73 @@
 
 #include "stdincl.h"
+#include "graphics_engine.h"
 #include "material.h"
 
+CREATE_FACTORY(GLMenuImageScreen);
+
+
 using namespace std;
-
-GLMenuImageScreen* GLMenuImageScreen::singletonRef = 0;
-
-GLMenuImageScreen* GLMenuImageScreen::getInstance()
-{
-  if(!singletonRef)
-    singletonRef = new GLMenuImageScreen ();
-  return singletonRef;
-}
-
 /**
    \brief standard constructor
-
-   \todo this constructor is not jet implemented - do it
 */
 GLMenuImageScreen::GLMenuImageScreen () 
 {
-   this->setClassName ("GLMenuImageScreen");
    this->init();
 }
 
+/**
+   \param root The Element to load the GLMenu from
+*/
+GLMenuImageScreen::GLMenuImageScreen (TiXmlElement* root)
+{
+  this->init();
+  this->load(root);
+
+}
+
+/**
+   \brief Loads a GLMenu from an inputElement
+   \param root The Element to load the GLMenu from
+
+   Tags are:
+   \li BackgroundImage STRING: the background Image
+   \li BarImage: STRING: the Image on the Bar
+   \li BackgroundPS: FLOAT FLOAT FLOAT FLOAT: posX posY scaleX scaleY
+   \li BarPS: FLOAT FLOAT FLOAT FLOAT: posX posY scaleX scaleY
+   \li ElementCount: INT: how many elements will be loaded
+*/
+void GLMenuImageScreen::load(TiXmlElement* root)
+{
+  const char* string;
+
+  // Model Loading	
+  string = grabParameter( root, "BackgroundImage");
+  if( string != NULL)
+    this->setBackgroundImage(string);
+
+  string = grabParameter(root, "BackgroundPS");
+  if (string != NULL)
+    {
+      float f1, f2, f3, f4;
+      sscanf (string, "%f %f %f %f", &f1, &f2, &f3, &f4);
+      this->setPosition(f1,f2);
+      this->setScale(f3,f4);
+    }
+
+  string = grabParameter( root, "BarImage");
+  if (string != NULL)
+    this->setBarImage(string);
+  string = grabParameter(root, "BarPS");
+  if (string != NULL)
+    {
+      float f1, f2, f3, f4;
+      sscanf (string, "%f %f %f %f", &f1, &f2, &f3, &f4);
+      this->setBarPosScale(f1,f2,f3,f4);
+    }
+
+  string = grabParameter( root, "ElementCount");
+  if (string != NULL)
+    this->setMaximum(atoi(string));
+}
 
 /**
@@ -51,6 +96,6 @@
 GLMenuImageScreen::~GLMenuImageScreen() 
 {
-  if (this->backMat)
-    delete this->backMat;
+  delete this->backMat;
+  delete this->barMat;
 }
 
@@ -60,153 +105,16 @@
 void GLMenuImageScreen::init ()
 {
-  /*
-  int w = 680;
-  int h = 480;
-
-  glViewport(0,0,w,h);
-  
-  glMatrixMode(GL_PROJECTION);
-  glLoadIdentity(); 
-  gluPerspective(45.0f,(GLfloat)w/(GLfloat)h, .5f ,150.0f);
-  glMatrixMode(GL_MODELVIEW); 
-
-  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
-  glLoadIdentity();
-  gluLookAt(0, 0, 6,     0, 0, 0,     0, 1, 0);
-
-  // Bind the texture stored at the zero index of g_Texture[]
-  //glBindTexture(GL_TEXTURE_2D, g_Texture[0]);
-  */
-
-  
+  this->setClassName ("GLMenuImageScreen");
+
   // Select Our VU Meter Background Texture
   this->backMat = new Material("load_screen");
-  this->backMat->setDiffuseMap("pictures/load_screen.jpg");
+  this->barMat = new Material("bar");
   this->maxValue = 10;
   this->currentValue = 0;
-
+  this->setPosition(0,0);
+  this->setScale(1,1);
+  this->setBarPosScale( .6, .75, .3, .1);
   // End of Background image code.
 }
-
-
-/**
-   \brief function to innit screen with all attributes set
-   \param name of the background-image file
-   \param height of the ImageScreen
-   \param width of the Image Screen
-   \param x offset from (0, 0)
-   \param y offset from (0, 0)
-
-   GLMenu uses its own coordinating system: upper left corner is (0, 0). x-axis is down=height, 
-   right axis is right direction (=width)
-*/
-void GLMenuImageScreen::init (char* backImageName, float height, float width, 
-			      float offsetX, float offsetY)
-{}
-
-
-/**
-   \brief draws the ImageScreen to the screenbuffer
-*/
-void GLMenuImageScreen::draw ()
-{
-
-  glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
-
-  PRINTF(4)("GLMenuImagEscreen::draw() - drawing step %i/%i\n", 
-	 this->currentValue, this->maxValue);
-
-  /* screen size */
-  int screenWidth = 640;
-  int screenHeight = 480;
-  
-  /* set image size */
-  int imageWidth = 640;
-  int imageHeight = 480;
-  
-  /* start pos of image */
-  int offsetX = (screenWidth - imageWidth)/2;
-  int offsetY = (screenHeight - imageHeight)/2;
-  
-  /* loadbar pos */
-  int barX = 390;
-  int barY = 50;
-  int barWidth = 230;
-  int barHeight = 30;
-  
-  float val = ((float)this->currentValue/(float)this->maxValue) * barWidth;
-  if( val > (float)barWidth)
-    val = (float)barWidth;
-
-  glMatrixMode(GL_PROJECTION);
-  glPushMatrix();
-  glLoadIdentity();
-  /* set up an ortho screen */
-  glOrtho(0, screenWidth, 0, screenHeight, -1, 1); 
-  glMatrixMode(GL_MODELVIEW);
-  glLoadIdentity();
-  glPushMatrix();
-
-  glEnable(GL_BLEND);
-  glPushAttrib(GL_LIGHTING_BIT | GL_TRANSFORM_BIT);
-  glDisable(GL_LIGHTING);
-
-  /* draw the progress bar */
-  glBegin(GL_QUADS);
-  glColor3f(0.96, 0.84, 0.34);
-  glVertex2i(barX, barY);
-  glVertex2i(barX + (int)val, barY);
-  glVertex2i(barX + (int)val, barY + barHeight);
-  glVertex2i(barX, barY + barHeight);
-  glColor3f(1.0, 1.0, 1.0);
-  glEnd();
-
-  glBegin(GL_QUADS);
-  glColor3f(0.0, 0.0, 0.0);
-  glVertex2i(barX, barY);
-  glVertex2i(barX + barWidth, barY);
-  glVertex2i(barX + barWidth, barY + barHeight);
-  glVertex2i(barX, barY + barHeight);
-  glColor3f(1.0, 1.0, 1.0);
-  glEnd();
-
-  /* draw black border */
-  glBegin(GL_QUADS);
-  glColor3f(0.0, 0.0, 0.0);
-  glVertex2i(barX-1, barY-1);
-  glVertex2i(barX + barWidth +1, barY-1);
-  glVertex2i(barX + barWidth+1, barY + barHeight+1);
-  glVertex2i(barX - 1, barY + barHeight +1);
-  glColor3f(1.0, 1.0, 1.0);
-  glEnd();
-
-  /* draw white border */
-  glBegin(GL_QUADS);
-  glColor3f(1.0, 1.0, 1.0);
-  glVertex2i(barX-2, barY-2);
-  glVertex2i(barX + barWidth +2, barY-2);
-  glVertex2i(barX + barWidth+2, barY + barHeight+2);
-  glVertex2i(barX - 2, barY + barHeight +2);
-  glColor3f(1.0, 1.0, 1.0);
-  glEnd();
-
-  backMat->select();
-  glBegin(GL_QUADS);
-  glTexCoord2i(0, 0); glVertex2i(offsetX, offsetY);
-  glTexCoord2i(1, 0); glVertex2i(offsetX + imageWidth, offsetY);
-  glTexCoord2i(1, 1); glVertex2i(offsetX + imageWidth, offsetY + imageHeight);
-  glTexCoord2i(0, 1); glVertex2i(offsetX, offsetY + imageHeight);
-  glEnd();
-  glDisable(GL_TEXTURE_2D);
-
-  glDisable(GL_BLEND);
-  glPopMatrix();
-  glMatrixMode(GL_PROJECTION);
-  glPopMatrix();
-  glPopAttrib();
-
-  SDL_GL_SwapBuffers();              
-}
- 
 
 /** 
@@ -214,24 +122,55 @@
     \param file name of the backgroun-image
  */
-void GLMenuImageScreen::setBackImageName (char* backImageName)
-{}
+void GLMenuImageScreen::setBackgroundImage (const char* backImageName)
+{
+  this->backMat->setDiffuseMap(backImageName);
+}
 
 
 /**
    \brief sets position of the ImageScreen
-   \param x offset from (0, 0)
-   \param y offset from (0, 0)
+   \param x offset from the top left corner in percent(0-1) of the screensize
+   \param y offset from the top left corner in percent(0-1) of the screensize
 */
 void GLMenuImageScreen::setPosition(float offsetX, float offsetY)
-{}
+{
+  this->offsetX = offsetX;
+  this->offsetY = offsetY;
+}
 
 
 /*
   \brief sets size of the ImageScreen
-  \param height of the ImageScreen
-  \param width of the Image Screen
-*/
-void GLMenuImageScreen::setSize(float height, float width)
-{}
+  \param scaleX the scaleing of the image into the x-direction (in percent (0-1))
+  \param scaleY the scaleing of the image into the y-direction (in percent (0-1))
+*/
+void GLMenuImageScreen::setScale(float scaleX, float scaleY)
+{
+  this->scaleX = scaleX;
+  this->scaleY = scaleY;
+}
+
+/**
+   \param barImage An image for the Bar
+*/
+void GLMenuImageScreen::setBarImage(const char* barImage)
+{
+  this->barMat->setDiffuseMap(barImage);
+}
+
+/**
+   \brief sets the Position and the Size of the bar
+   \param barX The Position in the x-direction in percent of the screen (0-1)
+   \param barY The Position in the y-direction in percent of the screen (0-1)
+   \param barW The Size in the x-direction in percent of the screen (0-1)
+   \param barH The Size in the y-direction in percent of the screen (0-1)
+*/
+void GLMenuImageScreen::setBarPosScale(float barX, float barY, float barW, float barH)
+{
+  this->barX = barX;
+  this->barY = barY;
+  this->barW = barW;
+  this->barH = barH;
+}
 
 
@@ -285,2 +224,95 @@
   this->draw();
 }
+
+
+
+/**
+   \brief draws the ImageScreen to the screenbuffer
+*/
+void GLMenuImageScreen::draw ()
+{
+  glClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+
+  PRINTF(4)("GLMenuImagEscreen::draw() - drawing step %i/%i\n", 
+	    this->currentValue, this->maxValue);
+
+  /* screen size */
+  int screenWidth = GraphicsEngine::getInstance()->getResolutionX();
+  int screenHeight = GraphicsEngine::getInstance()->getResolutionY();
+  
+  int imageWidth = (int)(screenWidth * this->scaleX);
+  int imageHeight = (int)(screenHeight * this->scaleY);
+
+  int offsetX = (int)(this->offsetX * screenWidth);
+  int offsetY = (int)(this->offsetY * screenHeight);
+
+  /* loadbar pos */
+  int barX = (int)(this->barX *screenWidth);
+  int barY = (int)(this->barY *screenHeight);
+  int barW = (int)(this->barW *screenWidth);
+  int barH = (int)(this->barH *screenHeight);
+  
+  float val = (float)this->currentValue/(float)this->maxValue;
+		  
+  if( val > barW)
+    val = barW;
+
+  GraphicsEngine::enter2DMode();
+
+  /* draw the BackGround */
+  backMat->select();
+  glBegin(GL_TRIANGLE_STRIP);
+  glTexCoord2i(0, 0); glVertex2i(offsetX, offsetY + imageHeight);
+  glTexCoord2i(1, 0); glVertex2i(offsetX +imageWidth, offsetY + imageHeight);
+  glTexCoord2i(0, 1); glVertex2i(offsetX, offsetY);
+  glTexCoord2i(1, 1); glVertex2i(offsetX + imageWidth, offsetY);
+  glEnd();
+  
+  glDisable(GL_TEXTURE_2D);
+  /* draw white border */
+  glBegin(GL_LINE_LOOP);
+  glColor3f(1.0, 1.0, 1.0);
+  glVertex2i(barX - 2, barY - 2);
+  glVertex2i(barX + barW + 2, barY - 2);
+  glVertex2i(barX + barW + 2, barY + barH + 2);
+  glVertex2i(barX - 2, barY + barH + 2);
+  glColor3f(1.0, 1.0, 1.0);
+  glEnd();
+  
+  /* draw the progress bar */
+  barMat->select();
+  glBegin(GL_TRIANGLE_STRIP);
+  glTexCoord2f(0, 0); glVertex2i(barX, barY + barH);
+  glTexCoord2f(val, 0); glVertex2i(barX + (int)(val * this->barW * (float)screenWidth), barY + barH);
+  glTexCoord2f(0, 1); glVertex2i(barX, barY);
+  glTexCoord2f(val, 1); glVertex2i(barX + (int)(val * this->barW * (float)screenWidth), barY);
+  glEnd();
+
+  /*
+    glBegin(GL_QUADS);
+    glColor3f(0.0, 0.0, 0.0);
+    glVertex2i(barX, barY);
+    glVertex2i(barX + barWidth, barY);
+    glVertex2i(barX + barWidth, barY + barHeight);
+    glVertex2i(barX, barY + barHeight);
+    glColor3f(1.0, 1.0, 1.0);
+    glEnd();
+    
+    /* draw black border 
+    glBegin(GL_QUADS);
+    glColor3f(0.0, 0.0, 0.0);
+    glVertex2i(barX-1, barY-1);
+    glVertex2i(barX + barWidth +1, barY-1);
+    glVertex2i(barX + barWidth+1, barY + barHeight+1);
+    glVertex2i(barX - 1, barY + barHeight +1);
+    glColor3f(1.0, 1.0, 1.0);
+    glEnd();
+    
+  */
+
+  GraphicsEngine::leave2DMode();
+
+  SDL_GL_SwapBuffers();              
+}
+ 
+
Index: /orxonox/branches/md2_loader/src/glmenu/glmenu_imagescreen.h
===================================================================
--- /orxonox/branches/md2_loader/src/glmenu/glmenu_imagescreen.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/glmenu/glmenu_imagescreen.h	(revision 4139)
@@ -11,27 +11,25 @@
 
 class Material;
+class TiXmlElement;
 
 class GLMenuImageScreen : public BaseObject {
 
- private:
+ public:
   GLMenuImageScreen ();
-
- public:
+  GLMenuImageScreen (TiXmlElement* root);
+  void load(TiXmlElement* root);
   virtual ~GLMenuImageScreen ();
-  
-  static GLMenuImageScreen* getInstance();
-
-  static GLMenuImageScreen* singletonRef;
 
   void init ();
-  void init (char* backImageName, float height, float width, 
-	     float offsetX, float offsetY);
 
   void draw ();
   
-  void setBackImageName (char* backImageName);
-  void setPosition (float offsetX, float offsetY);
-  void setSize (float height, float width);
-  
+  void setBackgroundImage(const char* backImageName);
+  void setPosition(float offsetX, float offsetY);
+  void setScale (float scaleX, float scaleY);
+
+  void setBarImage(const char* barImage);
+  void setBarPosScale(float barX, float barY, float barW, float barH);
+
   void setMaximum (int maxValue);
   int getMaximum ();
@@ -42,7 +40,9 @@
  private:
   char* backImageName;       //!< the name of the file of the background image
-  float height, width;       //!< hight and width of the image
+  float scaleX, scaleY;      //!< hight and width of the image
   float offsetX, offsetY;    //!< offset of the image from left and up
   Material* backMat;         //!< Background Material.
+  float barX, barY, barW, barH; //!< Position and Scale of the bar.
+  Material* barMat;          //!< A Material for the Loading-Bar
 
   /* progress bar values */
Index: /orxonox/branches/md2_loader/src/lib/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/lib/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/Makefile.in	(revision 4139)
@@ -113,4 +113,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/lib/graphics/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/Makefile.in	(revision 4139)
@@ -113,4 +113,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/lib/graphics/graphics_engine.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/graphics_engine.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/graphics_engine.cc	(revision 4139)
@@ -17,4 +17,5 @@
 
 #include "graphics_engine.h"
+#include "resource_manager.h"
 
 #include "debug.h"
@@ -34,4 +35,7 @@
   this->maxFPS = 0;
   this->setClassName ("GraphicsEngine");
+
+  this->fullscreen = false;
+
   this->initVideo();
 
@@ -105,6 +109,8 @@
   
   // TO DO: Create a cool icon and use it here
-  SDL_WM_SetIcon(SDL_LoadBMP("../data/pictures/orxonox-icon32x32.bmp"), NULL);  
-
+  char* loadPic = new char[strlen(ResourceManager::getInstance()->getDataDir())+ 100];
+  sprintf(loadPic, "%s%s", ResourceManager::getInstance()->getDataDir(),  "pictures/orxonox-icon32x32.bmp");
+  SDL_WM_SetIcon(SDL_LoadBMP(loadPic), NULL);  
+  delete loadPic;
   // Enable default GL stuff
   glEnable(GL_DEPTH_TEST);
@@ -141,10 +147,15 @@
 int GraphicsEngine::setResolution(int width, int height, int bpp)
 {
+  Uint32 fullscreenFlag;
   this->resolutionX = width;
   this->resolutionY = height;
   this->bitsPerPixel = bpp;
+  if (this->fullscreen)
+    fullscreenFlag = SDL_FULLSCREEN;
+  else
+    fullscreenFlag = 0;
   
   printf ("ok\n");
-  if((this->screen = SDL_SetVideoMode(this->resolutionX, this->resolutionY, this->bitsPerPixel, this->videoFlags)) == NULL)
+  if((this->screen = SDL_SetVideoMode(this->resolutionX, this->resolutionY, this->bitsPerPixel, this->videoFlags | fullscreenFlag)) == NULL)
     {
       PRINTF(1)("Could not SDL_SetVideoMode(%d, %d, %d, %d): %s\n", this->resolutionX, this->resolutionY, this->bitsPerPixel, this->videoFlags, SDL_GetError());
@@ -152,5 +163,10 @@
       //    return -1;
     }
-
+}
+
+void GraphicsEngine::setFullscreen(bool fullscreen)
+{
+  this->fullscreen = fullscreen;
+  this->setResolution(this->resolutionX, this->resolutionY, this->bitsPerPixel);
 }
 
@@ -258,5 +274,5 @@
   /* Check if our resolution is restricted */
   if(this->videoModes == (SDL_Rect **)-1){
-    PRINTF(1)("All resolutions available.\n");
+    PRINTF(2)("All resolutions available.\n");
   }
   else{
@@ -264,5 +280,5 @@
     PRINT(0)("Available Resoulution Modes are\n");
     for(int i = 0; this->videoModes[i]; ++i)
-      PRINT(0)(" |  %d x %d\n", this->videoModes[i]->w, this->videoModes[i]->h);
+      PRINT(4)(" |  %d x %d\n", this->videoModes[i]->w, this->videoModes[i]->h);
   }
 }
Index: /orxonox/branches/md2_loader/src/lib/graphics/graphics_engine.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/graphics_engine.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/graphics_engine.h	(revision 4139)
@@ -26,4 +26,5 @@
   int setGLattribs(void);
   int setResolution(int width, int height, int bpp);
+  void setFullscreen(bool fullscreen = false);
   /** \returns the x resolution */
   inline int getResolutionX(void) {return this->resolutionX;}
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/Makefile.in	(revision 4139)
@@ -42,5 +42,5 @@
 subdir = src/lib/graphics/importer
 DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \
-	$(srcdir)/Makefile.in TODO
+	$(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 am__aclocal_m4_deps = $(top_srcdir)/configure.ac
@@ -144,4 +144,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/array.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/array.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/array.cc	(revision 4139)
@@ -112,24 +112,7 @@
   
 /**
-   \brief Gives back the array !! MUST be executed AFTER finalize.
-   \returns The created array.
-*/
-GLfloat* Array::getArray ()
-{
-  return this->array;
-}
-
-/**
-   \returns The Count of entries in the Array
-*/
-int Array::getCount()
-{
-  return this->entryCount;
-}
-
-/**
    \brief Simple debug info about the Array
 */
-void Array::debug ()
+void Array::debug (void) const
 {
   PRINT(0)("entryCount=%i, address=%p\n", this->entryCount, this->array);
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/array.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/array.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/array.h	(revision 4139)
@@ -23,7 +23,9 @@
   void addEntry(GLfloat entry0, GLfloat entry1, GLfloat entry2);
   
-  GLfloat* getArray ();
-  int getCount();
-  void debug(void);
+  /** \returns The array */
+  inline const GLfloat* getArray () const {return this->array;}
+  /**   \returns The Count of entries in the Array*/
+  inline int getCount(void)const {return this->entryCount;}
+  void debug(void) const ;
  private:
   //! One entry of the Array
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/framework.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/framework.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/framework.cc	(revision 4139)
@@ -79,5 +79,5 @@
     obj = new OBJModel(argv[1]);
   else 
-    obj = new PrimitiveModel(SPHERE);
+    obj = new PrimitiveModel(CYLINDER);
 
   M = Vector(wHandler.screen->w/2, wHandler.screen->h/2, 0); 
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/material.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/material.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/material.cc	(revision 4139)
@@ -45,12 +45,7 @@
   this->setTransparency(1.0);
 
-
   this->diffuseTexture = NULL;
   this->ambientTexture = NULL;
   this->specularTexture = NULL;
-
-  this->diffuseTextureSet = false;
-  this->ambientTextureSet = false;
-  this->specularTextureSet = false;
 
   this->setName(mtlName);
@@ -107,5 +102,5 @@
     glShadeModel(GL_SMOOTH);
 
-  if (this->diffuseTextureSet)
+  if (this->diffuseTexture)
     {
       glEnable(GL_TEXTURE_2D);
@@ -300,10 +295,8 @@
 {
   PRINTF(4)("setting Diffuse Map %s\n", dMap);
-  //    diffuseTexture = new Texture();
-  //    this->diffuseTextureSet = diffuseTexture->loadImage(dMap);
 
   //! \todo check if RESOURCE MANAGER is availiable
   //! \todo Textures from .mtl-file need special care.
-  this->diffuseTextureSet = this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE);
+  this->diffuseTexture = (Texture*)ResourceManager::getInstance()->load(dMap, IMAGE);
 }
 
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/material.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/material.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/material.h	(revision 4139)
@@ -67,9 +67,4 @@
   Texture* ambientTexture; //!< The ambient texture of the Material.
   Texture* specularTexture;//!< The specular texture of the Material.
-  
-  bool diffuseTextureSet; //!< Chekcs if the diffuse texture is Set.
-  bool ambientTextureSet; //!< Chekcs if the ambient texture is Set.
-  bool specularTextureSet;//!< Chekcs if the specular texture is Set.
-
 };
 #endif
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/model.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/model.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/model.cc	(revision 4139)
@@ -36,4 +36,8 @@
 ModelFaceElement::ModelFaceElement()
 {
+  this->vertexNumber = -1;
+  this->normalNumber = -1;
+  this->texCoordNumber = -1;    
+
   this->next = NULL;
 }
@@ -140,4 +144,7 @@
   this->currentGroup = this->firstGroup = new ModelGroup;
   this->groupCount = 0;
+  this->vertexCount = 0;
+  this->normalCount = 0;
+  this->texCoordCount = 0;
   
   this->scaleFactor = 1;
@@ -355,5 +362,4 @@
 Material* Model::addMaterial(const char* materialName)
 {
-  
   Material* newMat = new Material();
   newMat->setName(materialName);
@@ -424,4 +430,5 @@
   PRINTF(5)("reading in a vertex: %f %f %f\n", &subbuffer1, &subbuffer2, &subbuffer3);
   this->vertices->addEntry(subbuffer1*scaleFactor, subbuffer2*scaleFactor, subbuffer3*scaleFactor);
+  this->vertexCount++;
   return true;
 }
@@ -438,4 +445,5 @@
   PRINTF(5)("reading in a vertex: %f %f %f\n", x, y, z);
   this->vertices->addEntry(x*scaleFactor, y*scaleFactor, z*scaleFactor);
+  this->vertexCount++;
   return true;
 }
@@ -455,4 +463,5 @@
   PRINTF(5)("found vertex-Normal %f, %f, %f\n", &subbuffer1,&subbuffer2,&subbuffer3);
   this->normals->addEntry(subbuffer1, subbuffer2, subbuffer3);
+  this->normalCount++;
   return true;
 }
@@ -470,4 +479,6 @@
   PRINTF(5)("found vertex-Normal %f, %f, %f\n", x, y, z);
   this->normals->addEntry(x, y, z);
+  this->normalCount++;
+  return true;
 }
 
@@ -487,4 +498,5 @@
   this->vTexture->addEntry(subbuffer1);
   this->vTexture->addEntry(subbuffer2);
+  this->texCoordCount++;
   return true;
 }
@@ -502,4 +514,6 @@
   this->vTexture->addEntry(u);
   this->vTexture->addEntry(v);
+  this->texCoordCount++;
+  return true;
 }
 
@@ -509,4 +523,6 @@
 
    If a face line is found this function will add it to the glList.
+
+   String is different from the argument addFace, in this that the first Vertex/Normal/Texcoord is 1 instead of 0
 */
 bool Model::addFace (const char* faceString)
@@ -546,14 +562,8 @@
       if (vertex)
 	tmpElem->vertexNumber = atoi(vertex)-1;
-      else
-	tmpElem->vertexNumber = -1;
       if (texture)
 	tmpElem->texCoordNumber = atoi(texture)-1;
-      else
-	tmpElem->texCoordNumber = -1;
       if (normal)
 	tmpElem->normalNumber = atoi(normal)-1;
-      else
-	tmpElem->normalNumber = -1;
 
       faceString += tmpLen;
@@ -569,5 +579,5 @@
    \brief adds a new Face
    \param faceElemCount the number of Vertices to add to the Face.
-   \param type 0: vertex only, 1: vertex and normal, 2: vertex and Texture, 3 vertex, normal and texture
+   \param type The information Passed with each Vertex
 */
 bool Model::addFace(int faceElemCount, VERTEX_FORMAT type, ...)
@@ -583,12 +593,12 @@
   for (int i = 0; i < faceElemCount; i++)
     {
-      if (this->currentGroup->currentFace->vertexCount>0)
+      if (this->currentGroup->currentFace->vertexCount > 0)
 	tmpElem = tmpElem->next = new ModelFaceElement;
 
-      tmpElem->vertexNumber = va_arg (itemlist, int) -1;
+      tmpElem->vertexNumber = va_arg (itemlist, int);
       if (type & TEXCOORD)
-	tmpElem->texCoordNumber = va_arg (itemlist, int) -1;
+	tmpElem->texCoordNumber = va_arg (itemlist, int);
       if (type & NORMAL)
- 	tmpElem->normalNumber = va_arg(itemlist, int) -1;
+ 	tmpElem->normalNumber = va_arg(itemlist, int);
       this->currentGroup->currentFace->vertexCount++;
     }
@@ -693,10 +703,10 @@
     }
 
-  for (int i=0; i<vertices->getCount()/3;i++)
+  for (int i=0; i < vertices->getCount()/3;i++)
     {
       normArray[i].normalize();
       PRINTF(5)("Found Normale number %d: (%f; %f, %f).\n", i, normArray[i].x, normArray[i].y, normArray[i].z);
       
-      this->normals->addEntry(normArray[i].x, normArray[i].y, normArray[i].z);
+      this->addVertexNormal(normArray[i].x, normArray[i].y, normArray[i].z);
 
     }
@@ -834,9 +844,28 @@
 
   if (elem->texCoordNumber != -1)
-    glTexCoord2fv(this->vTexture->getArray() + elem->texCoordNumber * 2);
+    {
+      if (likely(elem->texCoordNumber < this->texCoordCount))
+	glTexCoord2fv(this->vTexture->getArray() + elem->texCoordNumber * 2);
+      else
+	PRINTF(2)("TextureCoordinate %d is not in the List (max: %d)\nThe Model might be incomplete\n",
+		  elem->texCoordNumber, this->texCoordCount);
+    }
   if (elem->normalNumber != -1)
-    glNormal3fv(this->normals->getArray() + elem->normalNumber * 3);
+    {
+    if (likely(elem->normalNumber < this->normalCount))
+      glNormal3fv(this->normals->getArray() + elem->normalNumber * 3);
+    else
+	PRINTF(2)("Normal %d is not in the List (max: %d)\nThe Model might be incomplete",
+		  elem->normalNumber, this->normalCount);      
+    }
   if (elem->vertexNumber != -1)
-    glVertex3fv(this->vertices->getArray() + elem->vertexNumber * 3);
+    {
+      if (likely(elem->vertexNumber < this->vertexCount))
+	  glVertex3fv(this->vertices->getArray() + elem->vertexNumber * 3);
+      else
+	PRINTF(2)("Vertex %d is not in the List (max: %d)\nThe Model might be incomplete",
+		  elem->vertexNumber, this->vertexCount);      
+    }	
+
 }
 
@@ -897,19 +926,10 @@
   this->addVertexNormal (-1.0, 0.0, 0.0);
 
-  /* normaleLess-testingMode
-  this->addFace ("1 2 4 3");
-  this->addFace ("3 4 6 5");
-  this->addFace ("5 6 8 7");
-  this->addFace ("7 8 2 1");
-  this->addFace ("2 8 6 4");
-  this->addFace ("7 1 3 5");
-  */
-
-  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 1,1,1, 2,2,2, 4,4,3, 3,3,4);
-  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 3,3,5, 4,4,6, 6,6,7, 5,5,8);
-  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 5,5,9, 6,6,10, 8,8,11, 7,7,12);
-  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 7,7,13, 8,8,14, 2,10,15, 1,9,16);
-  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 2,2,17, 8,11,18, 6,12,19, 4,4,20);
-  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 7,13,21, 1,1,22, 3,3,23, 5,14,24);
-
-}
+  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 0,0,0, 1,1,1, 3,3,2, 2,2,3);
+  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 2,2,4, 3,3,5, 5,5,6, 4,4,7);
+  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 4,4,8, 5,5,9, 7,7,10, 6,6,11);
+  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 6,6,12, 7,7,13, 1,9,14, 0,8,15);
+  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 1,1,16, 7,10,17, 5,11,18, 3,3,19);
+  this->addFace (4, VERTEX_TEXCOORD_NORMAL, 6,12,20, 0,0,21, 2,2,22, 4,13,23);
+
+}
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/model.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/model.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/model.h	(revision 4139)
@@ -100,6 +100,8 @@
   bool finalized;             //!< Sets the Object to be finalized.
 
+  int vertexCount;            //!< A modelwide Counter for vertices.
+  int normalCount;            //!< A modelwide Counter for the normals.
+  int texCoordCount;          //!< A modelwide Counter for the texCoord.
   Array* vertices;            //!< The Array that handles the Vertices.
-  int verticesCount;          //!< A global Counter for vertices.
   Array* normals;             //!< The Array that handles the Normals.
   Array* vTexture;            //!< The Array that handles the VertexTextureCoordinates.
@@ -159,4 +161,11 @@
   bool setMaterial(Material* mtl);
   void finalize(void);
+
+  /** \returns The number of Vertices of the Model */
+  inline int getVertexCount(void) const {return this->vertexCount;}
+  /** \returns The number of Normals of the Model */
+  inline int getNormalCount(void) const {return this->normalCount;}
+  /** \returns The number of Texture Coordinates of the Model*/
+  inline int getTexCoordCount(void) const {return this->texCoordCount;}
 };
 
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/objModel.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/objModel.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/objModel.cc	(revision 4139)
@@ -34,5 +34,6 @@
 OBJModel::OBJModel(const char* fileName, float scaling) : Model(fileName)
 {
-  this->initializeOBJ();
+  this->objPath = "./";
+
   this->scaleFactor = scaling;
 
@@ -52,18 +53,4 @@
   if (this->objPath)
     delete []this->objPath;
-  if (this->objFileName)
-    delete []this->objFileName;
-  if (this->mtlFileName)
-    delete []this->mtlFileName;
-}
-
-/**
-   \brief Initializes an obj-model
-*/
-void OBJModel::initializeOBJ(void)
-{
-  this->objPath = NULL;
-  this->objFileName = NULL;
-  this->mtlFileName = NULL;
 }
 
@@ -71,39 +58,24 @@
    \brief Imports a obj file and handles the the relative location
    \param fileName The file to import
+
+   Splits the FileName from the DirectoryName
 */
 bool OBJModel::importFile (const char* fileName)
 {
   PRINTF(4)("preparing to read in file: %s\n", fileName);
-
-
-#ifdef __WIN32__
-  // win32 path reading
-  char pathSplitter= '\\';
-#else /* __WIN32__ */
-  // unix path reading
-  char pathSplitter='/';
-#endif /* __WIN32__ */
-  char* tmpName;
-  strcpy(tmpName, fileName);
-  if (tmpName[0] == pathSplitter)
-    tmpName++;
-  char* name = tmpName;
-  while (( tmpName = strchr (tmpName+1, pathSplitter)))
-    {
-      name = tmpName+1;
-    }
-  this->objPath = new char[name-fileName+1];
-  strncpy(this->objPath, fileName, name-fileName);
-  this->objPath[name-fileName] = '\0';
-  if (strlen(objPath)> 0)
-    PRINTF(5)("Resolved file %s to folder: %s.\n", name, objPath);
-  else
-    PRINTF(5)("Resolved file %s.\n", name);
-  
-  this->setName(name);
-
-  this->objFileName = new char[strlen(name)+1];
-  strcpy (this->objFileName, name);
-  this->readFromObjFile ();
+  // splitting the 
+  char* split = NULL;
+
+  if (!(split = strrchr(fileName, '/')))
+    split = strrchr(fileName, '\\'); // windows Case
+  if (split)
+    {
+      int len = split - fileName+1;
+      this->objPath = new char[len +2];
+      strncpy(this->objPath, fileName, len);
+      this->objPath[len] = '\0';
+      PRINTF(1)("Resolved file %s to Path %s.\n", fileName, this->objPath);
+    }
+  this->readFromObjFile (fileName);
   return true;
 }
@@ -113,16 +85,10 @@
    This function does read the file, parses it for the occurence of things like vertices, faces and so on, and executes the specific tasks
 */
-bool OBJModel::readFromObjFile (void)
-{
-  char* fileName = new char [strlen(objPath)+strlen(objFileName)+1];
-  if (this->objFileName != NULL && !strcmp(this->objFileName, ""))
-    return false;
-  strcpy(fileName, this->objPath);
-  strcat(fileName, this->objFileName);
-
+bool OBJModel::readFromObjFile(const char* fileName)
+{
   FILE* stream;
   if( (stream = fopen (fileName, "r")) == NULL)
     {
-      printf("IniParser could not open %s\n", fileName);
+      printf("Object File Could not be Opened %s\n", fileName);
       return false;
     }
@@ -179,5 +145,4 @@
     }
   fclose (stream);
-  delete []fileName;
   return true;
 }
@@ -194,14 +159,12 @@
 bool OBJModel::readMtlLib (const char* mtlFile)
 {
-  this->mtlFileName = new char [strlen(mtlFile)+1];
-  strcpy(this->mtlFileName, mtlFile);
-  char* fileName = new char [strlen(this->objPath) + strlen(this->mtlFileName)+1];
-  sprintf(fileName, "%s%s", this->objPath, this->mtlFileName);
-  
+  char* fileName = new char [strlen(this->objPath) + strlen(mtlFile)+1];
+  sprintf(fileName, "%s%s", this->objPath, mtlFile);
 
   FILE* stream;
   if( (stream = fopen (fileName, "r")) == NULL)
     {
-      printf("IniParser could not open %s\n", fileName);
+      PRINTF(2)("MaterialLibrary could not be opened %s\n", fileName);
+      delete []fileName;
       return false;
     }
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/objModel.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/objModel.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/objModel.h	(revision 4139)
@@ -15,15 +15,12 @@
   OBJModel(const char* fileName, float scaling = 1.0);
   virtual ~OBJModel();
-  void initializeOBJ(void);
 
  private:
   // Variables
   char* objPath;        //!< The Path where the obj and mtl-file are located.
-  char* objFileName;    //!< The Name of the obj-file.
-  char* mtlFileName;    //!< The Name of the mtl-file (parsed out of the obj-file)
 
   ///// readin /////
   bool importFile (const char* fileName);
-  bool readFromObjFile (void);
+  bool readFromObjFile (const char* fileName);
   bool readMtlLib (const char* matFile);
 };
Index: /orxonox/branches/md2_loader/src/lib/graphics/importer/primitive_model.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/importer/primitive_model.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/importer/primitive_model.cc	(revision 4139)
@@ -71,5 +71,4 @@
 void PrimitiveModel::sphereModel(float size, unsigned int detail)
 {
-  int vertexCount = 0;
   if (detail <= 0) 
     detail = 1;
@@ -89,9 +88,10 @@
 			  size * sin(vi) * cos(vj));
 	  this->addVertexTexture(i / (df *2.0), (j-1.0)/(df)+.5);
-	  vertexCount++;
 	}
     }
   this->addVertex(0, -size, 0);
+  this->addVertexTexture(0,0);
   this->addVertex(0, size, 0);
+  this->addVertexTexture(0 ,1);
 
   // defining the binding Faces.
@@ -102,26 +102,26 @@
 	{
 	  
-	  v1 = i*detail + j;
-	  v4 = i*detail + (j+1);
+	  v1 = i*detail + j-1;
+	  v4 = i*detail + j;
 	  
 	  if (i == detail*2 -1)
 	    {
-	      v2 = j;
-	      v3 = j+1;
+	      v2 = j-1;
+	      v3 = j;
 	    }
 	  else
 	    {
-	      v2 = (i+1)*detail + j;
-	      v3 = (i+1)*detail + (j+1);
-	    }
-	  
+	      v2 = (i+1)*detail + j-1;
+	      v3 = (i+1)*detail + j;
+	    }
+
 	  if (j == 0)
 	    {
-	      v1 = vertexCount+1;
+	      v1 = this->getVertexCount()-2;
 	      this->addFace(3, VERTEX_TEXCOORD, v1, v1, v3, v3, v4, v4);
 	    }
 	  else if (j == detail)
 	    {
-	      v3 = vertexCount+2;
+	      v3 = this->getVertexCount()-1;
 	      this->addFace(3, VERTEX_TEXCOORD, v1, v1, v2, v2, v3, v3);
 	    }
@@ -157,17 +157,17 @@
     {
       int p1, p2, p3, p4;
-      p1 = 2*i+1;
-      p2 = 2*i+2;
-      p3 = 2*i+4;
-      p4 = 2*i+3;
+      p1 = 2*i;
+      p2 = 2*i+1;
+      p3 = 2*i+3;
+      p4 = 2*i+2;
       // something is wrong here
       this->addFace(4, VERTEX_ONLY, p1, p2, p3, p4);
-      this->addFace(3, VERTEX_ONLY, p4, p1, 2*detail+1);
-      this->addFace(3, VERTEX_ONLY, p2, p3, 2*detail+2);
+      this->addFace(3, VERTEX_ONLY, p4, p1, 2*detail);
+      this->addFace(3, VERTEX_ONLY, p2, p3, 2*detail+1);
     }
   // caps
-  this->addFace(4, VERTEX_ONLY, 2*detail-1, 2*detail, 2, 1);
-  this->addFace(3, VERTEX_ONLY, 1, 2*detail-1, 2*detail+1);
-  this->addFace(3, VERTEX_ONLY, 2*detail, 2, 2*detail+2);
+  this->addFace(4, VERTEX_ONLY, 2*detail-2, 2*detail-1, 1, 0);
+  this->addFace(3, VERTEX_ONLY, 0, 2*detail-2, 2*detail);
+  this->addFace(3, VERTEX_ONLY, 2*detail-1, 1, 2*detail+1);
 }
 
@@ -198,11 +198,11 @@
     {
       unsigned int v1, v2;
-      v1 = i+3;
+      v1 = i+2;
       if (i == detail -1)
-	v2 = 3;
+	v2 = 2;
       else
-	v2 = i+4;
-      this->addFace(3, VERTEX_ONLY, 1, v1, v2);
-      this->addFace(3, VERTEX_ONLY, 2, v1, v2); 
+	v2 = i+3;
+      this->addFace(3, VERTEX_ONLY, 0, v1, v2);
+      this->addFace(3, VERTEX_ONLY, 1, v1, v2); 
     }
 }
@@ -228,5 +228,5 @@
   unsigned int v1, v2, v3, v4;
   for (int i = 0; i < detail-1; i++)
-    for (int j = 1; j < detail; j++)
+    for (int j = 0; j < detail-1; j++)
       {
 	v1 = i*detail + j;
Index: /orxonox/branches/md2_loader/src/lib/graphics/particles/particle_system.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/particles/particle_system.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/particles/particle_system.cc	(revision 4139)
@@ -40,4 +40,5 @@
    this->particleType = type;
    this->particles = NULL;
+   this->deadList = NULL;
    this->setConserve(.8);
    this->setLifeSpan(.1);
@@ -57,4 +58,20 @@
   // delete what has to be deleted here
    ParticleEngine::getInstance()->removeSystem(this);
+
+   // deleting all the living Particles
+   while (this->particles)
+     {
+       Particle* tmpDelPart = this->particles;
+       this->particles = this->particles->next;
+       delete tmpDelPart;
+     }
+
+   // deleting all the dead particles
+   while (this->deadList)
+     {
+       Particle* tmpDelPart = this->deadList;
+       this->deadList = this->deadList->next;
+       delete tmpDelPart;
+     }
 }
 
@@ -199,5 +216,6 @@
 	    {
 	      prevPart->next = tickPart->next;
-	      delete tickPart;
+	      tickPart->next = this->deadList;
+	      this->deadList = tickPart;
 	      tickPart = prevPart->next;
 	    }
@@ -206,5 +224,6 @@
 	      prevPart = NULL;
 	      this->particles = tickPart->next;
-	      delete tickPart;
+	      tickPart->next = this->deadList;
+	      this->deadList = tickPart;
 	      tickPart = this->particles;
 	    }
@@ -266,5 +285,11 @@
       if (unlikely(particles == NULL))
 	{
-	  this->particles = new Particle;
+	  if (likely(deadList != NULL))
+	    {
+	      this->particles = this->deadList;
+	      deadList = deadList->next;
+	    }
+	  else
+	    this->particles = new Particle;
 	  this->particles->next = NULL;
 	}
@@ -272,5 +297,12 @@
       else
 	{
-	  Particle* tmpPart = new Particle;
+	  Particle* tmpPart;
+	  if (likely(deadList != NULL))
+	    {
+	      tmpPart = this->deadList;
+	      deadList = deadList->next;
+	    }
+	  else
+	    tmpPart = new Particle;
 	  tmpPart->next = this->particles;
 	  this->particles = tmpPart;
@@ -300,3 +332,11 @@
   PRINT(0)("  ParticleSystem %s\n", this->name);
   PRINT(0)("  ParticleCount: %d, maximumCount: %d :: filled %d%%\n", this->count, this->maxCount, 100*this->count/this->maxCount);
-}
+  if (deadList)
+    {
+      PRINT(0)("  - ParticleDeadList is used: ");
+      int i = 1;
+      Particle* tmpPart = this->deadList;
+      while (tmpPart = tmpPart->next) ++i;
+      PRINT(0)("count: %d\n", i);
+    }
+}
Index: /orxonox/branches/md2_loader/src/lib/graphics/particles/particle_system.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/graphics/particles/particle_system.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/graphics/particles/particle_system.h	(revision 4139)
@@ -92,4 +92,5 @@
   Material* material;        //!< A Material for all the Particles.
   Particle* particles;       //!< A list of particles of this System.
+  Particle* deadList;        //!< A list of dead Particles in the System.
 
   GLuint* glID;              //!< A List of different gl-List-ID's
Index: /orxonox/branches/md2_loader/src/lib/gui/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/Makefile.in	(revision 4139)
@@ -113,4 +113,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/lib/gui/console/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/console/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/console/Makefile.in	(revision 4139)
@@ -132,4 +132,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/Makefile.am
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/Makefile.am	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/Makefile.am	(revision 4139)
@@ -7,9 +7,7 @@
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/coord
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/data
-AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/gaphics
-AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/graphics/font
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/graphics
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/graphics/importer
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/gui
-AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/gui/gui
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/lang
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/lib/util
@@ -20,4 +18,7 @@
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/glmenu
 AM_CXXFLAGS+=-I$(MAINSRCDIR)/ai
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/util
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/util/animation
+AM_CXXFLAGS+=-I$(MAINSRCDIR)/util/common
 
 #AM_LDFLAGS=$(GTK2_LIBS)   $(GTHREAD_LIBS)
@@ -35,5 +36,18 @@
 	    gui_banner.cc \
 	    gui_keys.cc \
-	    gui_update.cc
+	    gui_update.cc \
+		  $(MAINSRCDIR)/lib/graphics/graphics_engine.cc \
+		  $(MAINSRCDIR)/lib/lang/base_object.cc \
+		  $(MAINSRCDIR)/lib/math/vector.cc \
+		  $(MAINSRCDIR)/util/resource_manager.cc \
+		  $(MAINSRCDIR)/lib/graphics/text_engine.cc \
+		  $(MAINSRCDIR)/lib/coord/p_node.cc \
+		  $(MAINSRCDIR)/lib/coord/null_parent.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/array.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/model.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/objModel.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/material.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/texture.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc 
 
 noinst_HEADERS=gui.h \
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/Makefile.in	(revision 4139)
@@ -56,5 +56,10 @@
 	gui_element.$(OBJEXT) gui_video.$(OBJEXT) gui_audio.$(OBJEXT) \
 	gui_exec.$(OBJEXT) gui_flags.$(OBJEXT) gui_banner.$(OBJEXT) \
-	gui_keys.$(OBJEXT) gui_update.$(OBJEXT)
+	gui_keys.$(OBJEXT) gui_update.$(OBJEXT) \
+	graphics_engine.$(OBJEXT) base_object.$(OBJEXT) \
+	vector.$(OBJEXT) resource_manager.$(OBJEXT) \
+	text_engine.$(OBJEXT) p_node.$(OBJEXT) null_parent.$(OBJEXT) \
+	array.$(OBJEXT) model.$(OBJEXT) objModel.$(OBJEXT) \
+	material.$(OBJEXT) texture.$(OBJEXT) primitive_model.$(OBJEXT)
 gui_OBJECTS = $(am_gui_OBJECTS)
 gui_LDADD = $(LDADD)
@@ -62,10 +67,19 @@
 depcomp = $(SHELL) $(top_srcdir)/depcomp
 am__depfiles_maybe = depfiles
-@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/gui.Po ./$(DEPDIR)/gui_audio.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/gui_banner.Po \
+@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/array.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/base_object.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/graphics_engine.Po ./$(DEPDIR)/gui.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/gui_audio.Po ./$(DEPDIR)/gui_banner.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/gui_element.Po ./$(DEPDIR)/gui_exec.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/gui_flags.Po ./$(DEPDIR)/gui_gtk.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/gui_keys.Po ./$(DEPDIR)/gui_main.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/gui_update.Po ./$(DEPDIR)/gui_video.Po
+@AMDEP_TRUE@	./$(DEPDIR)/gui_update.Po ./$(DEPDIR)/gui_video.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/material.Po ./$(DEPDIR)/model.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/null_parent.Po ./$(DEPDIR)/objModel.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/p_node.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/primitive_model.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/resource_manager.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/text_engine.Po ./$(DEPDIR)/texture.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/vector.Po
 CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
@@ -136,4 +150,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
@@ -187,5 +202,5 @@
 target_vendor = @target_vendor@
 MAINSRCDIR = ../../..
-AM_CXXFLAGS = $(GTK2_CFLAGS) $(GTHREAD_CFLAGS) $(CURL_CFLAGS) $(MSBITFIELDS) -I$(MAINSRCDIR) -I$(MAINSRCDIR)/world_entities -I$(MAINSRCDIR)/story_entities -I$(MAINSRCDIR)/lib -I$(MAINSRCDIR)/lib/coord -I$(MAINSRCDIR)/lib/data -I$(MAINSRCDIR)/lib/gaphics -I$(MAINSRCDIR)/lib/graphics/font -I$(MAINSRCDIR)/lib/graphics/importer -I$(MAINSRCDIR)/lib/gui -I$(MAINSRCDIR)/lib/gui/gui -I$(MAINSRCDIR)/lib/lang -I$(MAINSRCDIR)/lib/util -I$(MAINSRCDIR)/lib/math -I$(MAINSRCDIR)/defs -I$(MAINSRCDIR)/font -I$(MAINSRCDIR)/network -I$(MAINSRCDIR)/glmenu -I$(MAINSRCDIR)/ai
+AM_CXXFLAGS = $(GTK2_CFLAGS) $(GTHREAD_CFLAGS) $(CURL_CFLAGS) $(MSBITFIELDS) -I$(MAINSRCDIR) -I$(MAINSRCDIR)/world_entities -I$(MAINSRCDIR)/story_entities -I$(MAINSRCDIR)/lib -I$(MAINSRCDIR)/lib/coord -I$(MAINSRCDIR)/lib/data -I$(MAINSRCDIR)/lib/graphics -I$(MAINSRCDIR)/lib/graphics/importer -I$(MAINSRCDIR)/lib/gui -I$(MAINSRCDIR)/lib/lang -I$(MAINSRCDIR)/lib/util -I$(MAINSRCDIR)/lib/math -I$(MAINSRCDIR)/defs -I$(MAINSRCDIR)/font -I$(MAINSRCDIR)/network -I$(MAINSRCDIR)/glmenu -I$(MAINSRCDIR)/ai -I$(MAINSRCDIR)/util -I$(MAINSRCDIR)/util/animation -I$(MAINSRCDIR)/util/common
 
 #AM_LDFLAGS=$(GTK2_LIBS)   $(GTHREAD_LIBS)
@@ -201,5 +216,18 @@
 	    gui_banner.cc \
 	    gui_keys.cc \
-	    gui_update.cc
+	    gui_update.cc \
+		  $(MAINSRCDIR)/lib/graphics/graphics_engine.cc \
+		  $(MAINSRCDIR)/lib/lang/base_object.cc \
+		  $(MAINSRCDIR)/lib/math/vector.cc \
+		  $(MAINSRCDIR)/util/resource_manager.cc \
+		  $(MAINSRCDIR)/lib/graphics/text_engine.cc \
+		  $(MAINSRCDIR)/lib/coord/p_node.cc \
+		  $(MAINSRCDIR)/lib/coord/null_parent.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/array.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/model.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/objModel.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/material.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/texture.cc \
+		  $(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc 
 
 noinst_HEADERS = gui.h \
@@ -290,4 +318,7 @@
 	-rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/array.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base_object.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphics_engine.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_audio.Po@am__quote@
@@ -301,4 +332,14 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_update.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gui_video.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/material.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/model.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/null_parent.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/objModel.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_node.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primitive_model.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resource_manager.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/text_engine.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texture.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Po@am__quote@
 
 .cc.o:
@@ -317,4 +358,212 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+graphics_engine.o: $(MAINSRCDIR)/lib/graphics/graphics_engine.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT graphics_engine.o -MD -MP -MF "$(DEPDIR)/graphics_engine.Tpo" -c -o graphics_engine.o `test -f '$(MAINSRCDIR)/lib/graphics/graphics_engine.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/graphics_engine.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/graphics_engine.Tpo" "$(DEPDIR)/graphics_engine.Po"; else rm -f "$(DEPDIR)/graphics_engine.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/graphics_engine.cc' object='graphics_engine.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/graphics_engine.Po' tmpdepfile='$(DEPDIR)/graphics_engine.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o graphics_engine.o `test -f '$(MAINSRCDIR)/lib/graphics/graphics_engine.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/graphics_engine.cc
+
+graphics_engine.obj: $(MAINSRCDIR)/lib/graphics/graphics_engine.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT graphics_engine.obj -MD -MP -MF "$(DEPDIR)/graphics_engine.Tpo" -c -o graphics_engine.obj `if test -f '$(MAINSRCDIR)/lib/graphics/graphics_engine.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/graphics_engine.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/graphics_engine.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/graphics_engine.Tpo" "$(DEPDIR)/graphics_engine.Po"; else rm -f "$(DEPDIR)/graphics_engine.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/graphics_engine.cc' object='graphics_engine.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/graphics_engine.Po' tmpdepfile='$(DEPDIR)/graphics_engine.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o graphics_engine.obj `if test -f '$(MAINSRCDIR)/lib/graphics/graphics_engine.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/graphics_engine.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/graphics_engine.cc'; fi`
+
+base_object.o: $(MAINSRCDIR)/lib/lang/base_object.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT base_object.o -MD -MP -MF "$(DEPDIR)/base_object.Tpo" -c -o base_object.o `test -f '$(MAINSRCDIR)/lib/lang/base_object.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/lang/base_object.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/base_object.Tpo" "$(DEPDIR)/base_object.Po"; else rm -f "$(DEPDIR)/base_object.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/lang/base_object.cc' object='base_object.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/base_object.Po' tmpdepfile='$(DEPDIR)/base_object.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o base_object.o `test -f '$(MAINSRCDIR)/lib/lang/base_object.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/lang/base_object.cc
+
+base_object.obj: $(MAINSRCDIR)/lib/lang/base_object.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT base_object.obj -MD -MP -MF "$(DEPDIR)/base_object.Tpo" -c -o base_object.obj `if test -f '$(MAINSRCDIR)/lib/lang/base_object.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/lang/base_object.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/lang/base_object.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/base_object.Tpo" "$(DEPDIR)/base_object.Po"; else rm -f "$(DEPDIR)/base_object.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/lang/base_object.cc' object='base_object.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/base_object.Po' tmpdepfile='$(DEPDIR)/base_object.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o base_object.obj `if test -f '$(MAINSRCDIR)/lib/lang/base_object.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/lang/base_object.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/lang/base_object.cc'; fi`
+
+vector.o: $(MAINSRCDIR)/lib/math/vector.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vector.o -MD -MP -MF "$(DEPDIR)/vector.Tpo" -c -o vector.o `test -f '$(MAINSRCDIR)/lib/math/vector.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/math/vector.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/vector.Tpo" "$(DEPDIR)/vector.Po"; else rm -f "$(DEPDIR)/vector.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/math/vector.cc' object='vector.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/vector.Po' tmpdepfile='$(DEPDIR)/vector.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vector.o `test -f '$(MAINSRCDIR)/lib/math/vector.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/math/vector.cc
+
+vector.obj: $(MAINSRCDIR)/lib/math/vector.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT vector.obj -MD -MP -MF "$(DEPDIR)/vector.Tpo" -c -o vector.obj `if test -f '$(MAINSRCDIR)/lib/math/vector.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/math/vector.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/math/vector.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/vector.Tpo" "$(DEPDIR)/vector.Po"; else rm -f "$(DEPDIR)/vector.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/math/vector.cc' object='vector.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/vector.Po' tmpdepfile='$(DEPDIR)/vector.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o vector.obj `if test -f '$(MAINSRCDIR)/lib/math/vector.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/math/vector.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/math/vector.cc'; fi`
+
+resource_manager.o: $(MAINSRCDIR)/util/resource_manager.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT resource_manager.o -MD -MP -MF "$(DEPDIR)/resource_manager.Tpo" -c -o resource_manager.o `test -f '$(MAINSRCDIR)/util/resource_manager.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/util/resource_manager.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/resource_manager.Tpo" "$(DEPDIR)/resource_manager.Po"; else rm -f "$(DEPDIR)/resource_manager.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/util/resource_manager.cc' object='resource_manager.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/resource_manager.Po' tmpdepfile='$(DEPDIR)/resource_manager.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o resource_manager.o `test -f '$(MAINSRCDIR)/util/resource_manager.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/util/resource_manager.cc
+
+resource_manager.obj: $(MAINSRCDIR)/util/resource_manager.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT resource_manager.obj -MD -MP -MF "$(DEPDIR)/resource_manager.Tpo" -c -o resource_manager.obj `if test -f '$(MAINSRCDIR)/util/resource_manager.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/util/resource_manager.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/util/resource_manager.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/resource_manager.Tpo" "$(DEPDIR)/resource_manager.Po"; else rm -f "$(DEPDIR)/resource_manager.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/util/resource_manager.cc' object='resource_manager.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/resource_manager.Po' tmpdepfile='$(DEPDIR)/resource_manager.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o resource_manager.obj `if test -f '$(MAINSRCDIR)/util/resource_manager.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/util/resource_manager.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/util/resource_manager.cc'; fi`
+
+text_engine.o: $(MAINSRCDIR)/lib/graphics/text_engine.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT text_engine.o -MD -MP -MF "$(DEPDIR)/text_engine.Tpo" -c -o text_engine.o `test -f '$(MAINSRCDIR)/lib/graphics/text_engine.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/text_engine.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/text_engine.Tpo" "$(DEPDIR)/text_engine.Po"; else rm -f "$(DEPDIR)/text_engine.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/text_engine.cc' object='text_engine.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/text_engine.Po' tmpdepfile='$(DEPDIR)/text_engine.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o text_engine.o `test -f '$(MAINSRCDIR)/lib/graphics/text_engine.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/text_engine.cc
+
+text_engine.obj: $(MAINSRCDIR)/lib/graphics/text_engine.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT text_engine.obj -MD -MP -MF "$(DEPDIR)/text_engine.Tpo" -c -o text_engine.obj `if test -f '$(MAINSRCDIR)/lib/graphics/text_engine.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/text_engine.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/text_engine.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/text_engine.Tpo" "$(DEPDIR)/text_engine.Po"; else rm -f "$(DEPDIR)/text_engine.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/text_engine.cc' object='text_engine.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/text_engine.Po' tmpdepfile='$(DEPDIR)/text_engine.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o text_engine.obj `if test -f '$(MAINSRCDIR)/lib/graphics/text_engine.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/text_engine.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/text_engine.cc'; fi`
+
+p_node.o: $(MAINSRCDIR)/lib/coord/p_node.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT p_node.o -MD -MP -MF "$(DEPDIR)/p_node.Tpo" -c -o p_node.o `test -f '$(MAINSRCDIR)/lib/coord/p_node.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/coord/p_node.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/p_node.Tpo" "$(DEPDIR)/p_node.Po"; else rm -f "$(DEPDIR)/p_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/coord/p_node.cc' object='p_node.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/p_node.Po' tmpdepfile='$(DEPDIR)/p_node.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o p_node.o `test -f '$(MAINSRCDIR)/lib/coord/p_node.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/coord/p_node.cc
+
+p_node.obj: $(MAINSRCDIR)/lib/coord/p_node.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT p_node.obj -MD -MP -MF "$(DEPDIR)/p_node.Tpo" -c -o p_node.obj `if test -f '$(MAINSRCDIR)/lib/coord/p_node.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/coord/p_node.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/coord/p_node.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/p_node.Tpo" "$(DEPDIR)/p_node.Po"; else rm -f "$(DEPDIR)/p_node.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/coord/p_node.cc' object='p_node.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/p_node.Po' tmpdepfile='$(DEPDIR)/p_node.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o p_node.obj `if test -f '$(MAINSRCDIR)/lib/coord/p_node.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/coord/p_node.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/coord/p_node.cc'; fi`
+
+null_parent.o: $(MAINSRCDIR)/lib/coord/null_parent.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT null_parent.o -MD -MP -MF "$(DEPDIR)/null_parent.Tpo" -c -o null_parent.o `test -f '$(MAINSRCDIR)/lib/coord/null_parent.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/coord/null_parent.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/null_parent.Tpo" "$(DEPDIR)/null_parent.Po"; else rm -f "$(DEPDIR)/null_parent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/coord/null_parent.cc' object='null_parent.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/null_parent.Po' tmpdepfile='$(DEPDIR)/null_parent.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o null_parent.o `test -f '$(MAINSRCDIR)/lib/coord/null_parent.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/coord/null_parent.cc
+
+null_parent.obj: $(MAINSRCDIR)/lib/coord/null_parent.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT null_parent.obj -MD -MP -MF "$(DEPDIR)/null_parent.Tpo" -c -o null_parent.obj `if test -f '$(MAINSRCDIR)/lib/coord/null_parent.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/coord/null_parent.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/coord/null_parent.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/null_parent.Tpo" "$(DEPDIR)/null_parent.Po"; else rm -f "$(DEPDIR)/null_parent.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/coord/null_parent.cc' object='null_parent.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/null_parent.Po' tmpdepfile='$(DEPDIR)/null_parent.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o null_parent.obj `if test -f '$(MAINSRCDIR)/lib/coord/null_parent.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/coord/null_parent.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/coord/null_parent.cc'; fi`
+
+array.o: $(MAINSRCDIR)/lib/graphics/importer/array.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT array.o -MD -MP -MF "$(DEPDIR)/array.Tpo" -c -o array.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/array.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/array.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/array.Tpo" "$(DEPDIR)/array.Po"; else rm -f "$(DEPDIR)/array.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/array.cc' object='array.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/array.Po' tmpdepfile='$(DEPDIR)/array.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o array.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/array.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/array.cc
+
+array.obj: $(MAINSRCDIR)/lib/graphics/importer/array.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT array.obj -MD -MP -MF "$(DEPDIR)/array.Tpo" -c -o array.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/array.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/array.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/array.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/array.Tpo" "$(DEPDIR)/array.Po"; else rm -f "$(DEPDIR)/array.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/array.cc' object='array.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/array.Po' tmpdepfile='$(DEPDIR)/array.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o array.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/array.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/array.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/array.cc'; fi`
+
+model.o: $(MAINSRCDIR)/lib/graphics/importer/model.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT model.o -MD -MP -MF "$(DEPDIR)/model.Tpo" -c -o model.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/model.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/model.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/model.Tpo" "$(DEPDIR)/model.Po"; else rm -f "$(DEPDIR)/model.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/model.cc' object='model.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/model.Po' tmpdepfile='$(DEPDIR)/model.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o model.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/model.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/model.cc
+
+model.obj: $(MAINSRCDIR)/lib/graphics/importer/model.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT model.obj -MD -MP -MF "$(DEPDIR)/model.Tpo" -c -o model.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/model.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/model.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/model.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/model.Tpo" "$(DEPDIR)/model.Po"; else rm -f "$(DEPDIR)/model.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/model.cc' object='model.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/model.Po' tmpdepfile='$(DEPDIR)/model.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o model.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/model.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/model.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/model.cc'; fi`
+
+objModel.o: $(MAINSRCDIR)/lib/graphics/importer/objModel.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT objModel.o -MD -MP -MF "$(DEPDIR)/objModel.Tpo" -c -o objModel.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/objModel.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/objModel.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/objModel.Tpo" "$(DEPDIR)/objModel.Po"; else rm -f "$(DEPDIR)/objModel.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/objModel.cc' object='objModel.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/objModel.Po' tmpdepfile='$(DEPDIR)/objModel.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o objModel.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/objModel.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/objModel.cc
+
+objModel.obj: $(MAINSRCDIR)/lib/graphics/importer/objModel.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT objModel.obj -MD -MP -MF "$(DEPDIR)/objModel.Tpo" -c -o objModel.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/objModel.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/objModel.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/objModel.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/objModel.Tpo" "$(DEPDIR)/objModel.Po"; else rm -f "$(DEPDIR)/objModel.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/objModel.cc' object='objModel.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/objModel.Po' tmpdepfile='$(DEPDIR)/objModel.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o objModel.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/objModel.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/objModel.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/objModel.cc'; fi`
+
+material.o: $(MAINSRCDIR)/lib/graphics/importer/material.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT material.o -MD -MP -MF "$(DEPDIR)/material.Tpo" -c -o material.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/material.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/material.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/material.Tpo" "$(DEPDIR)/material.Po"; else rm -f "$(DEPDIR)/material.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/material.cc' object='material.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/material.Po' tmpdepfile='$(DEPDIR)/material.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o material.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/material.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/material.cc
+
+material.obj: $(MAINSRCDIR)/lib/graphics/importer/material.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT material.obj -MD -MP -MF "$(DEPDIR)/material.Tpo" -c -o material.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/material.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/material.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/material.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/material.Tpo" "$(DEPDIR)/material.Po"; else rm -f "$(DEPDIR)/material.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/material.cc' object='material.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/material.Po' tmpdepfile='$(DEPDIR)/material.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o material.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/material.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/material.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/material.cc'; fi`
+
+texture.o: $(MAINSRCDIR)/lib/graphics/importer/texture.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT texture.o -MD -MP -MF "$(DEPDIR)/texture.Tpo" -c -o texture.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/texture.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/texture.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/texture.Tpo" "$(DEPDIR)/texture.Po"; else rm -f "$(DEPDIR)/texture.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/texture.cc' object='texture.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/texture.Po' tmpdepfile='$(DEPDIR)/texture.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o texture.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/texture.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/texture.cc
+
+texture.obj: $(MAINSRCDIR)/lib/graphics/importer/texture.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT texture.obj -MD -MP -MF "$(DEPDIR)/texture.Tpo" -c -o texture.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/texture.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/texture.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/texture.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/texture.Tpo" "$(DEPDIR)/texture.Po"; else rm -f "$(DEPDIR)/texture.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/texture.cc' object='texture.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/texture.Po' tmpdepfile='$(DEPDIR)/texture.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o texture.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/texture.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/texture.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/texture.cc'; fi`
+
+primitive_model.o: $(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive_model.o -MD -MP -MF "$(DEPDIR)/primitive_model.Tpo" -c -o primitive_model.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/primitive_model.Tpo" "$(DEPDIR)/primitive_model.Po"; else rm -f "$(DEPDIR)/primitive_model.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc' object='primitive_model.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/primitive_model.Po' tmpdepfile='$(DEPDIR)/primitive_model.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive_model.o `test -f '$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc' || echo '$(srcdir)/'`$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc
+
+primitive_model.obj: $(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT primitive_model.obj -MD -MP -MF "$(DEPDIR)/primitive_model.Tpo" -c -o primitive_model.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/primitive_model.Tpo" "$(DEPDIR)/primitive_model.Po"; else rm -f "$(DEPDIR)/primitive_model.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc' object='primitive_model.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	depfile='$(DEPDIR)/primitive_model.Po' tmpdepfile='$(DEPDIR)/primitive_model.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	$(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o primitive_model.obj `if test -f '$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc'; then $(CYGPATH_W) '$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc'; else $(CYGPATH_W) '$(srcdir)/$(MAINSRCDIR)/lib/graphics/importer/primitive_model.cc'; fi`
 uninstall-info-am:
 
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui.cc	(revision 4139)
@@ -53,5 +53,6 @@
 {
   Window* orxonoxGUI = NULL;
-
+  executable = NULL;
+  
   initGUI(argc, argv);
 
@@ -94,4 +95,6 @@
     orxonoxGUI->fill(windowBox);
   }
+
+
   // Reading Values from File
   exec->setConfDir(GUI_DEFAULT_CONF_DIR);
@@ -111,11 +114,18 @@
   // case update //
 #ifdef HAVE_CURL
-  if (static_cast<Option*>(Window::mainWindow->findWidgetByName("auto update", 0))->value == 1)
+  if (static_cast<Option*>(Window::mainWindow->findWidgetByName(CONFIG_NAME_AUTO_UPDATE, 0))->value == 1)
     {
       update->checkForUpdates();
     }
 #endif /* HAVE_CURL */
+}
 
+/**
+   \brief starts the OrxonoxGUI
+*/
+void Gui::startGui(void)
+{
   mainloopGUI();
+  
 #ifndef HAVE_GTK2
   GuiExec::startOrxonox(NULL, exec);
@@ -123,4 +133,12 @@
 }
 
+void Gui::printHelp()
+{
+  Window::mainWindow->walkThrough(Widget::printHelp, 1);
+}
+
+/**
+   \brief a bool that knows if orxonox should be started
+*/
 bool Gui::startOrxonox = false;
 
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui.h	(revision 4139)
@@ -26,4 +26,7 @@
   ~Gui(void);
 
+  void startGui(void);
+  void printHelp(void);
+
   static bool startOrxonox;
 };
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_audio.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_audio.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_audio.cc	(revision 4139)
@@ -36,5 +36,5 @@
 
   audioFrame = new Frame("Audio-Options:");
-  audioFrame->setGroupName("audio");
+  audioFrame->setGroupName(CONFIG_SECTION_AUDIO);
   {
     Box* audioBox;            //!< The Box that holds the audio Options.
@@ -45,18 +45,22 @@
       Slider* effectsVolume;    //!< A Slider for effects volume.
       
-      enableSound = new CheckButton("Disable Sound");
+      enableSound = new CheckButton(CONFIG_NAME_DISABLE_AUDIO);
       enableSound->setFlagName ("no-sound", 0);
+      enableSound->setDescription("Disables Sound", "Check this to disable Sound in Orxonox");
+      enableSound->setDefaultValue(0);
       enableSound->saveability();
       audioBox->fill(enableSound);
-      Label* musicVolumeLabel = new Label("Music Volume");
+      Label* musicVolumeLabel = new Label(CONFIG_NAME_MUSIC_VOLUME);
       audioBox->fill(musicVolumeLabel);
       musicVolume = new Slider("Music Volume", 0, 100);
       musicVolume->setFlagName("music-volume", "m", 80);
+      musicVolume->setDescription("Sets the volume of the ingame music");
       musicVolume->saveability();
       audioBox->fill (musicVolume);
-      Label* effectsVolumeLabel = new Label ("Effects Volume");
+      Label* effectsVolumeLabel = new Label (CONFIG_NAME_EFFECTS_VOLUME);
       audioBox->fill (effectsVolumeLabel);
       effectsVolume = new Slider ("Effects Volume", 0, 100);
       effectsVolume->setFlagName ("effects-volume", "e", 80);
+      effectsVolume->setDescription("Sets the volune of the ingame SoundEffects");
       effectsVolume->saveability();
       audioBox->fill (effectsVolume);
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_banner.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_banner.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_banner.cc	(revision 4139)
@@ -76,5 +76,5 @@
 
     //! \todo add the names of all the guys working on orxonox
-    orxIsLabel = new Label(PACKAGE_NAME " is:\nPatrick Boenzli - main Developer\nBenjamin Grauer - right Hand\n....");
+    orxIsLabel = new Label("           " PACKAGE_NAME " is:\n" ORXONOX_STAFF);
     logoBox->fill(orxIsLabel);
     logoEventBox->fill(logoBox);
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_exec.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_exec.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_exec.cc	(revision 4139)
@@ -53,5 +53,5 @@
 
     execBox = new Box('v');
-    execFrame->setGroupName("misc");
+    execFrame->setGroupName(CONFIG_SECTION_MISC);
     {
       Button* start;               //!< The start Button of orxonox.
@@ -65,16 +65,56 @@
 #endif /* HAVE_GTK2 */
       execBox->fill(start);
-      this->saveSettings = new CheckButton("Save Settings");
+      this->saveSettings = new CheckButton(CONFIG_NAME_SAVE_SETTINGS);
       this->saveSettings->value = 1;
       this->saveSettings->saveability();
       execBox->fill(this->saveSettings);
-      verboseMode = new Menu("verbose mode", "nothing", "error", "warning", "info", "lastItem");
+
+#ifdef DEBUG
+      verboseMode = new Menu(CONFIG_NAME_VERBOSE_MODE, "nothing",
+#if DEBUG >=1
+			     "error",
+#endif
+#if DEBUG >=2
+			     "warning",
+#endif
+#if DEBUG >=3
+			     "info",
+#endif
+#if DEBUG >=4
+			     "debug",
+#endif
+#if DEBUG >=5
+			     "heavydebug",
+#endif
+			     "lastItem");
       verboseMode->setFlagName("verbose", "v", 2);
+      verboseMode->setDescription("Sets the Output Mode", "This Enables Outbug messages\n"
+				  "0: nothing will be displayed, but stuff one cannot do without (eg.GUI)\n"
+#if DEBUG >=1
+				  "1: error: outputs all the above and errors"
+#endif
+#if DEBUG >=2
+				  "2: warning: outputs all the above plus warnings"
+#endif
+#if DEBUG >=3
+				  "3: info: outputs all the above plus Information"
+#endif
+#if DEBUG >=4
+				  "4: debug: displays all the above plus debug information"
+#endif
+#if DEBUG >=5
+				  "5: heavydebug: displays all the above plus heavy debug information: WARNING: the game will run very slow with this."
+#endif
+				  );
       verboseMode->saveability();
       execBox->fill(verboseMode);
-      alwaysShow = new CheckButton("Always Show this Menu");
+#endif
+
+      alwaysShow = new CheckButton(CONFIG_NAME_ALWAYS_SHOW_GUI);
       alwaysShow->setFlagName("gui", "g", 0);
+      alwaysShow->setDescription("shows the gui when starting orxonox");
       alwaysShow->saveability();
       execBox->fill(alwaysShow);
+
       quit = new Button("Quit");
 #ifdef HAVE_GTK2
@@ -111,5 +151,5 @@
   this->confDir = ResourceManager::homeDirCheck(confDir);
 
-  PRINTF(3)("Config Directory is: %s.\n", this->confDir);
+  PRINTF(5)("Config Directory is: %s.\n", this->confDir);
   //! \todo F** Windows-support
 #ifndef __WIN32__
@@ -132,5 +172,5 @@
   this->confFile = new char[strlen(this->confDir)+strlen(fileName)+2];
   sprintf(this->confFile, "%s/%s", this->confDir, fileName);
-  PRINTF(3)("ConfigurationFile is %s.\n", this->confFile);
+  PRINTF(5)("ConfigurationFile is %s.\n", this->confFile);
 }
 
@@ -174,7 +214,7 @@
 {
   int counter = 0;
-  while(counter < depth &&((widget->isOption>0
+  while(counter < depth &&((widget->optionType > GUI_NOTHING
 			      &&(static_cast<Option*>(widget)->isSaveable()))
-			     ||(widget->isOption<0
+			     ||(widget->optionType < GUI_NOTHING
 				&& static_cast<Packer*>(widget)->getGroupName())))
     {
@@ -184,5 +224,5 @@
   
   // check if it is a Packer, and if it is, check if it has a name and if there is something in it.
-  if(widget->isOption <0)
+  if(widget->optionType < GUI_NOTHING)
     {
       if(static_cast<Packer*>(widget)->getGroupName())
@@ -197,7 +237,6 @@
 	}
     } 
-  //  if(widget->isOption == 0)
-  //    printf("%s\n",widget->title);
-  if(widget->isOption >= 1)
+
+  if(widget->optionType > GUI_NOTHING)
     if (static_cast<Option*>(widget)->isSaveable())
       {
@@ -277,5 +316,5 @@
     {
       PRINT(5)("Located Option %s.\n", widget->title);
-      if(widget->isOption >= 1)
+      if(widget->optionType > GUI_NOTHING)
 	static_cast<Option*>(widget)->load(info->variableValue);
     }
@@ -302,5 +341,5 @@
     }
 
-  if(widget->isOption < 0)
+  if(widget->optionType < GUI_NOTHING)
     {
       if(static_cast<Packer*>(widget)->getGroupName() &&
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_flags.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_flags.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_flags.cc	(revision 4139)
@@ -38,4 +38,5 @@
   this->flagsBox->fill(flagsLabel);
   this->shortFlags = new CheckButton("shortFlags");
+  this->shortFlags->setDefaultValue(0);
   this->flagsBox->fill(shortFlags);
 
@@ -76,5 +77,5 @@
 {
   FlagInfo* info =(FlagInfo*)flagInfo;
-  if(widget->isOption >= 1)
+  if(widget->optionType > GUI_NOTHING)
     if (static_cast<Option*>(widget)->value != static_cast<Option*>(widget)->defaultValue )
       {
@@ -90,5 +91,5 @@
 	  }
 
-	if(static_cast<Option*>(widget)->isOption == 2)
+	if(static_cast<Option*>(widget)->optionType > GUI_BOOL)
 	  {
 	    info->flagsLabel->appendText("=");
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_gtk.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_gtk.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_gtk.cc	(revision 4139)
@@ -222,5 +222,5 @@
     return this;
 
-  if (this->isOption < 0 && static_cast<Packer*>(this)->down)
+  if (this->optionType < GUI_NOTHING && static_cast<Packer*>(this)->down)
     {
       Widget* tmp = static_cast<Packer*>(this)->down->findWidgetByName(name, depth+1);
@@ -243,5 +243,5 @@
 {
   function(this);
-  if (this->isOption < 0)
+  if (this->optionType < GUI_NOTHING)
     {
       static_cast<Packer*>(this)->down->walkThrough(function, depth+1);
@@ -261,5 +261,5 @@
 {
   function(this, data);
-  if (this->isOption < 0)
+  if (this->optionType < GUI_NOTHING)
     {
       static_cast<Packer*>(this)->down->walkThrough(function, data, depth+1);
@@ -275,7 +275,7 @@
 void Widget::listOptionsAndGroups(Widget* widget)
 {
-  if (widget->isOption < 0 && static_cast<Packer*>(widget)->groupName)
+  if (widget->optionType < GUI_NOTHING && static_cast<Packer*>(widget)->groupName)
     PRINT(0)("[%s]\n", static_cast<Packer*>(widget)->groupName);
-  if (widget->isOption >= 1)
+  if (widget->optionType > GUI_NOTHING)
     {
       Widget::listOptions(widget);
@@ -289,5 +289,5 @@
 void Widget::listOptions(Widget* widget)
 {
-  if(widget->isOption >= 1)
+  if(widget->optionType > GUI_NOTHING)
     PRINT(0)("  %s is %s\n", static_cast<Option*>(widget)->title, static_cast<Option*>(widget)->save());
 }
@@ -301,5 +301,5 @@
 {
   
-  if (widget->isOption >= 1)
+  if (widget->optionType > GUI_NOTHING)
     {
       int* count =(int*)data;
@@ -308,4 +308,44 @@
 	       static_cast<Option*>(widget)->title,
 	       static_cast<Option*>(widget)->save());
+    }
+}
+
+/** 
+    \brief This is for listing the options of "widget"
+    \param widget specifies the widget that should be listed
+    \param data A Counter, that always knows how many Options have been found yet.
+*/
+void Widget::printHelp(Widget* widget)
+{
+  int helpLen=0;
+
+  if (widget->optionType > GUI_NOTHING)
+    {
+      Option* option = (Option*)widget;
+      if (option->flagName || option->flagNameShort)
+	{
+	  PRINT(0)("  ");
+	  if (option->flagNameShort)
+	    {
+	      PRINT(0)("-%s", option->flagNameShort);
+	      helpLen += strlen(option->flagNameShort)+1;
+	    }
+	  if (option->flagName)
+	    {
+	      if (helpLen > 0)
+		{
+		  PRINT(0)("|");
+		  helpLen++;
+		}
+	      PRINT(0)("--%s:", option->flagName);
+	      helpLen += strlen(option->flagName)+2;
+	    }
+	  while ((helpLen ++) < 29)
+	    PRINT(0)(" ");
+	  if (option->shortDescription)
+	    PRINT(0)("%s\n", option->shortDescription);
+	  else
+	    PRINT(0)("\n");
+	}
     }
 }
@@ -320,5 +360,5 @@
 Widget* Widget::findOptionByNumber(int* number, unsigned int depth)
 {
-  if (isOption > 0)
+  if (optionType > GUI_NOTHING)
     {
       --*number;
@@ -328,5 +368,5 @@
 	}
     }
-  if (this->isOption < 0 && static_cast<Packer*>(this)->down)
+  if (this->optionType < GUI_NOTHING && static_cast<Packer*>(this)->down)
     {
       Widget* tmp = static_cast<Packer*>(this)->down->findOptionByNumber(number, depth+1);
@@ -346,5 +386,5 @@
 void Widget::listGroups(Widget* widget)
 {
-  if (widget->isOption < 0 && static_cast<Packer*>(widget)->groupName)
+  if (widget->optionType < GUI_NOTHING && static_cast<Packer*>(widget)->groupName)
     PRINT(0)("[%s]\n", static_cast<Packer*>(widget)->groupName);
 }
@@ -358,5 +398,5 @@
 {
   int* count = (int*)data;
-  if (widget->isOption < 0 && static_cast<Packer*>(widget)->groupName)
+  if (widget->optionType < GUI_NOTHING && static_cast<Packer*>(widget)->groupName)
     PRINT(0)("%d: [%s]\n", ++*count, static_cast<Packer*>(widget)->groupName);
 }
@@ -369,5 +409,5 @@
 Widget* Widget::findGroupByNumber(int* number, unsigned int depth)
 {
-  if (isOption < 0 && static_cast<Packer*>(this)->groupName)
+  if (optionType < GUI_NOTHING && static_cast<Packer*>(this)->groupName)
     {
       --*number;
@@ -377,5 +417,5 @@
 	}
     }
-  if (this->isOption < 0 && static_cast<Packer*>(this)->down)
+  if (this->optionType < GUI_NOTHING && static_cast<Packer*>(this)->down)
     {
       Widget* tmp = static_cast<Packer*>(this)->down->findGroupByNumber(number, depth+1);
@@ -395,5 +435,5 @@
 void Widget::setOptions(Widget* widget)
 {
-  if (widget->isOption >= 1)
+  if (widget->optionType > GUI_NOTHING)
     static_cast<Option*>(widget)->redraw();
 }
@@ -406,5 +446,5 @@
 void Widget::redrawOptions(Widget* widget)
 {
-  if (widget->isOption >= 1)
+  if (widget->optionType > GUI_NOTHING)
     static_cast<Option*>(widget)->redraw();
 }
@@ -415,5 +455,5 @@
 void Widget::flagCheck(Widget* widget, void* flagName)
 {
-  if (widget->isOption>=1)
+  if (widget->optionType > GUI_NOTHING)
     {      
       Option* option =(Option*)widget;
@@ -567,5 +607,5 @@
 Container::Container(void)
 {
-  this->isOption = -1;
+  this->optionType = GUI_CONTAINER;
 }
 
@@ -595,5 +635,5 @@
     }
   else
-    PRINTF(1)("You tried to put more than one Widget into a Container. \nNot including this item.\nThis is only possible with Boxes.\n");
+    PRINTF(2)("You tried to put more than one Widget into a Container. \nNot including this item.\nThis is only possible with Boxes.\n");
 }
 
@@ -772,5 +812,5 @@
    \brief Creates a new Frame with name title
 */
-Frame::Frame(char* frameName)
+Frame::Frame(const char* frameName)
 {
 #ifdef HAVE_GTK2
@@ -778,5 +818,5 @@
   gtk_container_set_border_width(GTK_CONTAINER(this->widget), 3);
 #endif /* HAVE_GTK2 */
-  if (title)
+  if (frameName)
     this->setTitle(frameName);
 }
@@ -801,5 +841,5 @@
   strcpy(this->title, title);
 #ifdef HAVE_GTK2
-  gtk_frame_set_label(GTK_FRAME(widget), title);
+  gtk_frame_set_label(GTK_FRAME(widget), this->title);
 #endif /* HAVE_GTK2 */
 }
@@ -814,6 +854,4 @@
 EventBox::EventBox(const char* eventBoxName)
 {
-  this->isOption = -1;
-
 #ifdef HAVE_GTK2
   this->widget = gtk_event_box_new();
@@ -842,5 +880,5 @@
 Box::Box(char boxtype)
 {
-  this->isOption = -2;
+  this->optionType = GUI_BOX;
 
 #ifdef HAVE_GTK2
@@ -1053,7 +1091,7 @@
    \param buttonName sets the Name of the Button
 */
-Button::Button(char* buttonName)
-{
-  isOption = 0;
+Button::Button(const char* buttonName)
+{
+  this->optionType = GUI_NOTHING;
 
 #ifdef HAVE_GTK2
@@ -1115,5 +1153,5 @@
 CheckButton::CheckButton(const char* buttonName)
 {
-  this->isOption = 1;
+  this->optionType = GUI_BOOL;
 
 #ifdef HAVE_GTK2
@@ -1179,6 +1217,7 @@
   if ((this->value = atoi(tmpChar))=!0)
     this->value = 1;
-#endif /* HAVE_GTK2 */
+
   PRINT(0)("%s set to: %d\n", this->title, this->value);
+#endif /* HAVE_GTK2 */
 }
 
@@ -1205,5 +1244,5 @@
 Slider::Slider(const char* slidername, int start, int end)
 {
-  this->isOption = 2;
+  this->optionType = GUI_INT;
 
   this->start = start;
@@ -1264,6 +1303,7 @@
   if (this->value <= this->start)
     this->value = this->start;
-#endif /* HAVE_GTK2 */
+
   PRINT(0)("%s set to: %d\n",this->title, this->value);
+#endif /* HAVE_GTK2 */
 }
 
@@ -1329,5 +1369,5 @@
 void Menu::init(void)
 {
-  this->isOption = 2;
+  this->optionType = GUI_INT;
   this->firstItem = NULL;
 
@@ -1372,7 +1412,7 @@
     {
       this->value = 0;
-      PRINTF(2)("Sorry, but %s has not been found in the Itemlist of %s\n", loadString, this->title);
-    }
-  PRINTF(4)( "Loading %s: setting to %d\n", this->title, this->value); 
+      PRINTF(2)("%s has not been found in the Itemlist of %s\n", loadString, this->title);
+    }
+  PRINTF(5)( "Loading %s: setting to %d\n", this->title, this->value); 
   this->redraw();
 }
@@ -1431,5 +1471,5 @@
 
 #endif /* HAVE_GTK2 */
-  PRINT(4)("%s set to: %d\n", this->title, this->value);
+  PRINT(5)("%s set to: %d\n", this->title, this->value);
 }
 
@@ -1443,5 +1483,5 @@
 OptionLabel::OptionLabel(const char* label, const char* value)
 {
-  this->isOption = 5;
+  this->optionType = GUI_CHAR_ARRAY;
   cValue = NULL;
 
@@ -1474,7 +1514,6 @@
   this->cValue = new char [strlen(newValue)+1];
   strcpy(this->cValue, newValue);
-#ifdef HAVE_GTK2
-  gtk_label_set_text(GTK_LABEL(this->widget), this->cValue);
-#endif /* HAVE_GTK2 */
+
+  this->redraw();
 }
 
@@ -1485,5 +1524,5 @@
 {
 #ifdef HAVE_GTK2
-  gtk_label_set_text(GTK_LABEL(widget), title);
+  gtk_label_set_text(GTK_LABEL(widget), cValue);
 #endif /* HAVE_GTK2 */
 }
@@ -1495,5 +1534,5 @@
 {
 #ifdef HAVE_GTK2
-  this->cValue =(char*)gtk_label_get_text(GTK_LABEL(this->widget));
+  this->cValue = (char*)gtk_label_get_text(GTK_LABEL(this->widget));
 #else /* HAVE_GTK2 */
   PRINT(0)("\nPlease give me a new input for %s: ", this->title);
@@ -1521,5 +1560,5 @@
 void OptionLabel::load(char* loadString)
 {
-  PRINTF(4)("Loading %s: setting to %s\n", this->title, loadString); 
+  PRINTF(5)("Loading %s: setting to %s\n", this->title, loadString); 
   this->setValue(loadString);
 }
@@ -1534,5 +1573,5 @@
 Label:: Label(const char* text)
 {
-  this->isOption = 0;
+  this->optionType = GUI_NOTHING;
   
 #ifdef HAVE_GTK2
@@ -1630,5 +1669,5 @@
 ProgressBar::ProgressBar(const char* label)
 {
-  this->isOption = 0;
+  this->optionType = GUI_NOTHING;
   this->progress = 0.0;
   this->totalSize = 0.0;
@@ -1671,5 +1710,5 @@
 #ifdef HAVE_GTK2
   gtk_progress_set_value(GTK_PROGRESS(widget), this->progress*100.0/this->totalSize);
-  PRINTF(4)("Progress: %f%%\n", this->progress*100.0/this->totalSize);
+  PRINTF(5)("Progress: %f%%\n", this->progress*100.0/this->totalSize);
 #else /* HVE_GTK2 */
   PRINT(0)("Progress: %f%%\n", this->progress*100.0/this->totalSize);
@@ -1729,5 +1768,5 @@
 void Image::init(const char* name)
 {
-  isOption = 0;
+  optionType = GUI_NOTHING;
 
   if (this->title)
@@ -1736,2 +1775,167 @@
   strcpy(this->title, name);
 }
+
+
+/////////////////
+/* FILE DIALOG */
+/////////////////
+/**
+   \brief Creates a new FileDialog
+   \param fileDialogName a Name for the Dialog
+*/
+FileDialog::FileDialog(const char* fileDialogName)
+{
+  this->optionType = GUI_NOTHING;
+  this->isOpen = false;
+  this->changeOption = NULL;
+  this->openUpButton = NULL;
+  this->okObject = NULL;
+  this->okFunc = NULL;
+
+#ifdef HAVE_GTK2
+  this->widget = gtk_file_selection_new(fileDialogName);
+
+  gtk_file_selection_set_select_multiple(GTK_FILE_SELECTION (this->widget), FALSE);
+
+  g_signal_connect(GTK_FILE_SELECTION (this->widget)->cancel_button,
+                     "button_release_event",
+                     G_CALLBACK (FileDialog::dialogClose),
+                     this);
+  g_signal_connect(GTK_FILE_SELECTION (this->widget),
+                     "delete_event",
+                     G_CALLBACK (FileDialog::dialogClose),
+                     this);
+  g_signal_connect(GTK_FILE_SELECTION (this->widget)->ok_button,
+                     "button_release_event",
+                     G_CALLBACK (FileDialog::dialogOK),
+                     this);
+#endif /* HAVE_GTK2 */
+  if (fileDialogName)
+    this->setTitle(fileDialogName);
+}
+
+/**
+   \brief destructs a FileDialog
+*/
+FileDialog::~FileDialog(void)
+{
+  PRINTF(5)("deleting FileDialog %s\n", this->title);
+}
+
+void FileDialog::setChangeOption(OptionLabel* changeOption)
+{
+  this->changeOption = changeOption;
+}
+
+void FileDialog::setOKFunc(void* okObject, bool(*function)(const char* , void*))
+{
+  this->okObject = okObject;
+  this->okFunc = function;
+}
+
+
+void FileDialog::setOpenUpButton(Button* openUpButton)
+{
+  this->openUpButton = openUpButton;
+
+  openUpButton->connectSignal("button_release_event", this, FileDialog::dialogOpen);
+}
+
+
+void FileDialog::setDefaultFileName(const char* defaultFileName)
+{
+#ifdef HAVE_GTK2
+  gtk_file_selection_set_filename (GTK_FILE_SELECTION(this->widget), defaultFileName);
+#endif /* HAVE_GTK2 */
+}
+
+void FileDialog::setMask(const char* mask)
+{
+#ifdef HAVE_GTK2
+  gtk_file_selection_complete(GTK_FILE_SELECTION(this->widget), mask);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief disables the File Operator Buttons
+*/
+void FileDialog::disableFileOpts(void)
+{
+#ifdef HAVE_GTK2
+  gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(this->widget));
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \brief The ok-button has been pressed
+*/
+void FileDialog::okEvent(void)
+{
+  if (this->okFunc)
+    {
+#ifdef HAVE_GTK2
+      if(this->okFunc((const char*)gtk_file_selection_get_filename(GTK_FILE_SELECTION(this->widget)), this->okObject))
+	 this->close();
+#endif /* HAVE_GTK2 */
+    }
+  else if (this->changeOption)
+    {
+#ifdef HAVE_GTK2
+      changeOption->setValue(gtk_file_selection_get_filename(GTK_FILE_SELECTION(this->widget)));
+#endif /* HAVE_GTK2 */
+      this->close();
+    }
+  else
+    this->close();
+}
+
+/**
+   \biref opens up the FileDialog-Window
+*/
+void FileDialog::open(void)
+{
+  isOpen = true;
+#ifdef HAVE_GTK2
+  gtk_widget_show_all(this->widget);
+  gtk_grab_add(this->widget);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \closes the FileDialog-Window
+*/
+void FileDialog::close(void)
+{
+  this->isOpen = false;
+#ifdef HAVE_GTK2
+  gtk_grab_remove(this->widget);
+  gtk_widget_hide(this->widget);
+#endif /* HAVE_GTK2 */
+}
+
+#ifdef HAVE_GTK2
+gint FileDialog::dialogOK(GtkWidget* widget, GdkEvent* event, void* dialog)
+{
+  static_cast<FileDialog*>(dialog)->okEvent();
+}
+#else /* HAVE_GTK2 */
+int FileDialog::dialogOK(void* widget, void* event, void* dialog){}
+#endif /* HAVE_GTK2 */
+
+#ifdef HAVE_GTK2
+gint FileDialog::dialogOpen(GtkWidget* widget, GdkEvent* event, void* dialog)
+{
+  static_cast<FileDialog*>(dialog)->open();
+}
+#else /* HAVE_GTK2 */
+int FileDialog::dialogOpen(void* widget, void* event, void* dialog){}
+#endif /* HAVE_GTK2 */
+
+#ifdef HAVE_GTK2
+gint FileDialog::dialogClose(GtkWidget* widget, GdkEvent* event, void* dialog)
+{
+  static_cast<FileDialog*>(dialog)->close();
+}
+#else /* HAVE_GTK2 */
+int FileDialog::dialogClose(void* widget, void* event, void* dialog){}
+#endif /* HAVE_GTK2 */
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_gtk.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_gtk.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_gtk.h	(revision 4139)
@@ -11,4 +11,5 @@
 
 #include "debug.h"
+#include "globals.h"
 
 #ifdef HAVE_GTK2
@@ -28,9 +29,10 @@
 #include <gtk/gtkeventbox.h>
 #include <gtk/gtkprogressbar.h>
+#include <gtk/gtkfilesel.h>
 #endif /* HAVE_GTK2 */
 
 // enumerator for different GuiOption-Types
-enum GUI_OPTION {GUI_CONTAINER = -2,
-		 GUI_BOX = -1,
+enum GUI_OPTION {GUI_BOX = -2,
+		 GUI_CONTAINER = -1,
 		 GUI_NOTHING = 0,
 		 GUI_BOOL = 1,
@@ -63,14 +65,15 @@
   void walkThrough(void(*function)(Widget*), unsigned int depth);
   void walkThrough(void(*function)(Widget*, void*), void* data, unsigned int depth);
-  static void listOptionsAndGroups(Widget* widget);
-  static void listOptions(Widget* widget);
-  static void listOptions(Widget* widget, void* data);
-  Widget* findOptionByNumber(int* number, unsigned int depth);
-  static void listGroups(Widget* widget);
-  static void listGroups(Widget* widget, void* data);
-  Widget* findGroupByNumber(int* number, unsigned int depth);
-  static void setOptions(Widget* widget);
-  static void redrawOptions(Widget* widget);
-  static void flagCheck(Widget* widget, void* flagName);
+   static void listOptionsAndGroups(Widget* widget);
+   static void listOptions(Widget* widget);
+   static void listOptions(Widget* widget, void* data);
+   Widget* findOptionByNumber(int* number, unsigned int depth);
+   static void listGroups(Widget* widget);
+   static void listGroups(Widget* widget, void* data);
+   static void printHelp(Widget* widget);
+   Widget* findGroupByNumber(int* number, unsigned int depth);
+   static void setOptions(Widget* widget);
+   static void redrawOptions(Widget* widget);
+   static void flagCheck(Widget* widget, void* flagName);
   
 #ifdef HAVE_GTK2
@@ -103,6 +106,5 @@
 #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
-  
+  GUI_OPTION optionType;            //!< The Type of the Widget.
   char* title;                      //!< The name of the Widget. Some do display it, Options need it to save;
 };
@@ -141,4 +143,5 @@
   Container(void);
   virtual ~Container(void);
+
   void setBorderWidth(int borderwidth);
   void fill(Widget* lowerWidget);
@@ -184,5 +187,5 @@
 {
  public:
-  Frame(char* frameName = NULL);
+  Frame(const char* frameName = NULL);
   virtual ~Frame(void);
 
@@ -262,5 +265,5 @@
 {
  public:
-  Button(char* buttonName = NULL);
+  Button(const char* buttonName = NULL);
   virtual ~Button(void);
 
@@ -358,4 +361,19 @@
 };
 
+//! A EntryField is a TextEntry field, for putting some text into.
+class EntryField : public Option
+{
+ public:
+  EntryField(const char* name = NULL);
+  virtual ~EntryField(void);
+  
+  void setValue(const char* newValue);
+  virtual char* save(void);
+  virtual void load(char* loadString);
+  
+  virtual void redraw(void);
+  virtual void changeOption(void);
+};
+
 //! A label is a Widget, that displays a text
 class Label : public Widget
@@ -405,5 +423,39 @@
 };
 
-//gint orxonox_gui_quit(GtkWidget* widget, GdkEvent* event, gpointer data);
+//! A FileDialog is a window with wich one can select a File
+class FileDialog : public Widget
+{
+ private:
+  OptionLabel* changeOption;
+  Button* openUpButton;
+  bool isOpen;
+  bool (*okFunc)(const char* , void*);
+  void* okObject;
+
+ public:
+  FileDialog(const char* fileDialogName);
+  virtual ~FileDialog(void);
+
+  void setChangeOption(OptionLabel* changeOption);
+  void setOKFunc(void* okObject, bool(*function)(const char* , void*));
+  void setOpenUpButton(Button* openUpButton);
+  void setDefaultFileName(const char* defaultFileName);
+  void setMask(const char* mask);
+  void disableFileOpts(void);
+
+  void okEvent();
+  void open();
+  void close();
+
+#ifdef HAVE_GTK2
+  static gint dialogOK(GtkWidget* widget, GdkEvent* event, void* dialog);
+  static gint dialogOpen(GtkWidget* widget, GdkEvent* event, void* dialog);
+  static gint dialogClose(GtkWidget* widget, GdkEvent* event, void* dialog);
+#else /* HAVE_GTK2 */
+  static int dialogOK(void* widget, void* event, void* dialog);
+  static int dialogOpen(void* widget, void* event, void* dialog);
+  static int dialogClose(void* widget, void* event, void* dialog);
+#endif /* HAVE_GTK2 */
+};
 
 #endif /* _GUI_GTK_H */
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_keys.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_keys.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_keys.cc	(revision 4139)
@@ -33,14 +33,44 @@
 GuiKeys::GuiKeys(void)
 {
-  this->keysFrame = new Frame("Keyboard-Options:");
-  //  keysFrame->setGroupName("Keyboard");
-  this->keysBox = new Box('h');
-  this->player1 = new Player("player1");
-  this->player2 = new Player("player2");
-
-  this->keysBox->fill(this->player1->getOpenButton());
-  this->keysBox->fill(this->player2->getOpenButton());
-
-  this->keysFrame->fill(this->keysBox);
+  Frame* keysFrame;      //!< The Frame that holds the keyOptions.
+
+  keysFrame = new Frame("Keyboard-Options:");
+  {
+    Box* keysBox0;          //!< The Frame that holds the keyOptions.
+    
+    //  keysFrame->setGroupName("Keyboard");
+    keysBox0 = new Box('v');
+    {
+      Box* keysBox1;
+      MiscKeys* misc;            //!< The Misc Keys
+
+      keysBox1 = new Box('h');
+      {
+	PlayerKeys* player1;       //!< The first Player's keys.
+	PlayerKeys* player2;       //!< The seconds Player's keys.
+	
+	player1 = new PlayerKeys(CONFIG_SECTION_PLAYER "1");
+	player2 = new PlayerKeys(CONFIG_SECTION_PLAYER "2");
+	
+	keysBox1->fill(player1->getOpenButton());
+	keysBox1->fill(player2->getOpenButton());
+      }
+      keysBox0->fill(keysBox1);
+
+      misc = new MiscKeys();
+      keysBox0->fill(misc->getOpenButton());
+    }
+    keysFrame->fill(keysBox0);
+  }
+  
+  // setting up the Input Windows that receives keystrokes.
+  this->inputWindow = new Window("inputWindow");
+  this->inputButton = new Button("test");
+#ifdef HAVE_GTK2
+  this->inputWindow->connectSignal("destroy",  Widget::doNothingSignal);
+  this->inputWindow->connectSignal("delete_event", Widget::doNothingSignal);
+#endif /* HAVE_GTK2 */
+  this->inputWindow->fill(inputButton);
+  
   this->setMainWidget(keysFrame);
 }
@@ -54,54 +84,139 @@
 }
 
+
+Window* GuiKeys::inputWindow = NULL;
+Button* GuiKeys::inputButton = NULL;
+long GuiKeys::keySignal = 0;
+
+////////////
 /* PLAYER */
-
+////////////
 /**
    \brief Creates new inputs for a player
    \param player the name of the Player
 */
-Player::Player(char* player)
-{
-  char* windowName = new char[strlen(player)+25];
-  strcpy(windowName, "Keyboard settings of ");
+PlayerKeys::PlayerKeys(char* player)
+{
+  Window* pKeyWindow;     //!< The Window for a new Key-setting.
+
+  char* windowName = new char[strlen(player)+12];
+  strcpy(windowName, "KeySets: ");
   strcat(windowName, player);
-  this->pKeyWindow = new Window(windowName);
-  this->pKeyFrame = new Frame(windowName);
-   this->pKeysBox = new Box('v');
-   this->pKeysBox->setGroupName(player);
-    this->pKeysBox->fill(addKey(UP, "up"));
-    this->pKeysBox->fill(addKey(DOWN, "down"));
-    this->pKeysBox->fill(addKey(LEFT, "left"));
-    this->pKeysBox->fill(addKey(RIGHT, "right"));
-    this->pKeysBox->fill(addKey(SHOOT, "shoot"));
-    delete windowName;
-    closeButton = new Button("close");
-#ifdef HAVE_GTK2
-    this->closeButton->connectSignal("button_press_event", this->pKeyWindow, Window::windowClose);
-#endif /* HAVE_GTK2 */
-
-    this->pKeysBox->fill(this->closeButton);
-    this->pKeyFrame->fill(this->pKeysBox);
-   this->pKeyWindow->fill(this->pKeyFrame);
-   Window::addWindow(this->pKeyWindow);
-#ifdef HAVE_GTK2
-   this->pKeyWindow->connectSignal("destroy", this->pKeyWindow, Window::windowClose);
-   this->pKeyWindow->connectSignal("delete_event", this->pKeyWindow, Window::windowClose);
-#endif /* HAVE_GTK2 */
-
+  pKeyWindow = new Window(windowName);
+  {
+    Frame* pKeyFrame;       //!< The Frame for a new Key-setting.
+
+    pKeyFrame = new Frame(windowName);
+    {
+      Box* pKeysBox;          //!< The Box that holds the Key-settings.
+      pKeysBox = new Box('v');
+      {
+	Button* closeButton;    //!< The CloseButton for this key-settings.
+
+	pKeysBox->setGroupName(player);
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_UP, "UP"));
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_DOWN, "DOWN"));
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_LEFT, "LEFT"));
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_RIGHT, "RIGHT"));
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_FIRE, "SPACE"));
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_NEXT_WEAPON, "m"));
+	pKeysBox->fill(addKey(CONFIG_NAME_PLAYER_PREV_WEAPON, "n"));
+	closeButton = new Button("close");
+#ifdef HAVE_GTK2
+	closeButton->connectSignal("button_press_event", pKeyWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+
+	pKeysBox->fill(closeButton);
+      }
+      pKeyFrame->fill(pKeysBox);
+    }
+    pKeyWindow->fill(pKeyFrame);
+  }
+  delete windowName;
+  Window::addWindow(pKeyWindow);
+#ifdef HAVE_GTK2
+  pKeyWindow->connectSignal("destroy", pKeyWindow, Window::windowClose);
+  pKeyWindow->connectSignal("delete_event", pKeyWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+  
   this->openButton = new Button(player);
 #ifdef HAVE_GTK2
-  this->openButton->connectSignal("button_press_event", this->pKeyWindow, Window::windowOpen);
-#endif /* HAVE_GTK2 */
-
-  this->inputWindow = new Window("inputWindow");
-
-  this->inputButton = new Button("test");
-  this->inputWindow->fill(inputButton);
-#ifdef HAVE_GTK2
-  this->inputWindow->connectSignal("destroy",  Widget::doNothingSignal);
-  this->inputWindow->connectSignal("delete_event", Widget::doNothingSignal);
-#endif /* HAVE_GTK2 */
-
-}
+  this->openButton->connectSignal("button_press_event", pKeyWindow, Window::windowOpen);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \returns the OpenButton of a Player
+*/
+Button* PlayerKeys::getOpenButton(void)
+{
+  return this->openButton;
+}
+
+//////////////////
+/* MISC_OPTIONS */
+//////////////////
+/**
+   \brief Creates new inputs for a misc
+   \param player the name of the Misc
+*/
+MiscKeys::MiscKeys()
+{
+  Window* keyWindow;     //!< The Window for a new Key-setting.
+
+  keyWindow = new Window("misc Keys");
+  {
+    Frame* keyFrame;       //!< The Frame for a new Key-setting.
+
+    keyFrame = new Frame("misc Keys:");
+    {
+      Box* keysBox;          //!< The Box that holds the Key-settings.
+      keysBox = new Box('v');
+      {
+	Button* closeButton;    //!< The CloseButton for this key-settings.
+
+	keysBox->setGroupName(CONFIG_SECTION_MISC_KEYS);
+	keysBox->fill(addKey(CONFIG_NAME_QUIT , "ESCAPE"));
+	keysBox->fill(addKey(CONFIG_NAME_PAUSE, "PAUSE"));
+	keysBox->fill(addKey(CONFIG_NAME_NEXT_WORLD, "x"));
+	keysBox->fill(addKey(CONFIG_NAME_PREV_WORLD, "z"));
+	keysBox->fill(addKey(CONFIG_NAME_VIEW0, "1"));
+	keysBox->fill(addKey(CONFIG_NAME_VIEW1, "2"));
+	keysBox->fill(addKey(CONFIG_NAME_VIEW2, "3"));
+	keysBox->fill(addKey(CONFIG_NAME_VIEW3, "4"));
+	keysBox->fill(addKey(CONFIG_NAME_VIEW4, "5"));
+	keysBox->fill(addKey(CONFIG_NAME_VIEW5, "6"));
+
+	closeButton = new Button("close");
+#ifdef HAVE_GTK2
+	closeButton->connectSignal("button_press_event", keyWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+
+	keysBox->fill(closeButton);
+      }
+      keyFrame->fill(keysBox);
+    }
+    keyWindow->fill(keyFrame);
+  }
+  Window::addWindow(keyWindow);
+#ifdef HAVE_GTK2
+  keyWindow->connectSignal("destroy", keyWindow, Window::windowClose);
+  keyWindow->connectSignal("delete_event", keyWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+  
+  this->openButton = new Button("misc");
+#ifdef HAVE_GTK2
+  this->openButton->connectSignal("button_press_event", keyWindow, Window::windowOpen);
+#endif /* HAVE_GTK2 */
+}
+
+/**
+   \returns the OpenButton of a Misc
+*/
+Button* MiscKeys::getOpenButton(void)
+{
+  return this->openButton;
+}
+
 
 /**
@@ -111,48 +226,31 @@
    \returns A widget that has the Key-Box
 */
-Widget* Player::addKey(KEYS key, char* name)
-{
-  this->inputKey[key] = new InputKey;
-  this->inputKey[key]->pKeyBox = new Box();
-  this->inputKey[key]->pKeyButton = new Button(name);
-  this->inputKey[key]->pKeyOLabel = new OptionLabel(name, name);
-  this->inputKey[key]->pKeyOLabel->saveability();
-
-#ifdef HAVE_GTK2
-  //inputKey[key]->pKeyButton->connectSignal("key_press_event", inputKey[key]->pKeyButton, key_cb);
-  this->inputKey[key]->pKeyButton->connectSignal("button_press_event", this->inputKey[key], inputWindowEvent);
-#endif /* HAVE_GTK2 */
-  this->inputKey[key]->pKeyBox->fill(this->inputKey[key]->pKeyButton);
-  this->inputKey[key]->pKeyBox->fill(this->inputKey[key]->pKeyOLabel);
-  return this->inputKey[key]->pKeyBox;
-}
-
-/**
-   \returns the OpenButton of a Player
-*/
-Button* Player::getOpenButton(void)
-{
-  return this->openButton;
-}
-
-/**
-   \brief sets a new Key(only output)
-   \param key the new Key.
-*/
-void Player::setkey(KEYS key)
-{
-  PRINT(4)("setting up Key: %d\n", key);
-}
-
-Window* Player::inputWindow = NULL;
-Button* Player::inputButton = NULL;
-long Player::keySignal = 0;
-
-#ifdef HAVE_GTK2
-gint Player::inputWindowEvent(GtkWidget* w, GdkEventKey* event, void* inputKey)
-{
-  inputButton->setTitle("press a Key");
-  keySignal = inputButton->connectSignal("key_press_event", inputKey, key_cb);
-  inputWindow->open();
+Widget* addKey(const char* name, const char* defaultVal)
+{
+  InputKey* inputKey = new InputKey;
+  inputKey->keyBox = new Box();
+  inputKey->keyButton = new Button(name);
+  if (defaultVal)
+    inputKey->keyOLabel = new OptionLabel(name, defaultVal);
+  else
+    inputKey->keyOLabel = new OptionLabel(name, name);
+  inputKey->keyOLabel->saveability();
+
+#ifdef HAVE_GTK2
+  //inputKey->keyButton->connectSignal("key_press_event", inputKey->keyButton, key_cb);
+  inputKey->keyButton->connectSignal("button_press_event", inputKey, inputWindowEvent);
+#endif /* HAVE_GTK2 */
+  inputKey->keyBox->fill(inputKey->keyButton);
+  inputKey->keyBox->fill(inputKey->keyOLabel);
+  return inputKey->keyBox;
+}
+
+
+#ifdef HAVE_GTK2
+gint inputWindowEvent(GtkWidget* w, GdkEventKey* event, void* inputKey)
+{
+  GuiKeys::inputButton->setTitle("press a Key");
+  GuiKeys::keySignal = GuiKeys::inputButton->connectSignal("key_press_event", inputKey, key_cb);
+  GuiKeys::inputWindow->open();
 }
   
@@ -164,93 +262,164 @@
    \returns Nothing
 */
-gint Player::key_cb(GtkWidget* w, GdkEventKey* event, void* inputKey)
+gint key_cb(GtkWidget* w, GdkEventKey* event, void* inputKey)
 {
   InputKey* inputkey =(InputKey*) inputKey;
-  char title [20];
-
-  switch(event->keyval) 
+  char title [50];
+
+  switch(event->keyval)
     {
     case GDK_Up:
-      strcpy(title, "up");
+      strcpy(title, "UP");
       break;
     case GDK_Down:
-      strcpy(title, "down");
+      strcpy(title, "DOWN");
       break;
     case GDK_Left:
-      strcpy(title, "left");
+      strcpy(title, "LEFT");
       break;
     case GDK_Right:
-      strcpy(title, "right");
+      strcpy(title, "RIGHT");
       break;
       
     case GDK_space:
-      strcpy(title, "space");
-      break;
-      
-    case 65293:
-      strcpy(title, "enter");
+      strcpy(title, "SPACE");
+      break;
+      
+    case GDK_Return:
+      strcpy(title, "RETURN");
       break;
       
       // Special Keys //
+    case GDK_BackSpace:
+      strcpy(title, "BACKSPACE");
+      break;
+    case GDK_Scroll_Lock:
+      strcpy(title, "SCROLLOCK");
+      break;
+    case GDK_minus:
+      strcpy(title, "MINUS");
+      break;
+    case GDK_plus:
+      strcpy(title, "PLUS");
+      break;
+    case GDK_slash:
+      strcpy(title, "SLASH");
+      break;
+    case GDK_period:
+      strcpy(title, "PERIOD");
+      break;
+    case GDK_comma:
+      strcpy(title, "COMMA");
+      break;
+    case GDK_colon:
+      strcpy(title, "COLON");
+      break;
+    case GDK_semicolon:
+      strcpy(title, "SEMICOLON");
+      break;
+    case GDK_less:
+      strcpy(title, "LESS");
+      break;
+    case GDK_equal:
+      strcpy(title, "EQUALS");
+      break;
+    case GDK_greater:
+      strcpy(title, "GREATER");
+      break;
+    case GDK_question:
+      strcpy(title, "QUESTION");
+      break;
+    case GDK_at:
+      strcpy(title, "AT");
+      break;
+    case GDK_bracketleft:
+      strcpy(title, "LEFTBRACKET");
+      break;
+    case GDK_bracketright:
+      strcpy(title, "RIGHTBRACKET");
+      break;
+    case GDK_backslash:
+      strcpy(title, "BACKSLASH");
+      break;
+    case GDK_underscore:
+      strcpy(title, "UNDERSCORE");
+      break;
+    case GDK_quoteleft:
+      strcpy(title, "BACKQUOTE");
+      break;
+
+    case GDK_Page_Up:
+      strcpy(title, "PAGEUP");
+      break;
+    case GDK_Page_Down:
+      strcpy(title, "PAGEDOWN");
+      break;
+    case GDK_Home:
+      strcpy(title, "HOME");
+      break;
+    case GDK_Insert:
+      strcpy(title, "INSERT");
+      break;
+      
     case GDK_Escape:
-      strcpy(title, "esc");
+      strcpy(title, "ESCAPE");
       break;
     case GDK_Tab:
-      strcpy(title, "tab");
+      strcpy(title, "TAB");
       break;
     case GDK_Shift_L:
-      strcpy(title, "l_shift");
+      strcpy(title, "LSHIFT");
       break;
     case GDK_Shift_R:
-      strcpy(title, "r_shift");
+      strcpy(title, "R_SHIFT");
       break;
     case GDK_Control_L:
-      strcpy(title, "l_ctrl");
+      strcpy(title, "LCTRL");
       break;
     case GDK_Control_R:
-      strcpy(title, "r_ctrl");
+      strcpy(title, "RCTRL");
       break;
     case GDK_Alt_L:
-      strcpy(title, "l_alt");
+      strcpy(title, "LALT");
       break;
     case GDK_Alt_R:
-      strcpy(title, "r_alt");
+      strcpy(title, "RALT");
       break;
       // FXX KEYS //
     case GDK_F1:
-      strcpy(title, "f1");
+      strcpy(title, "F1");
       break;
     case GDK_F2:
-      strcpy(title, "f2");
+      strcpy(title, "F2");
       break;
     case GDK_F3:
-      strcpy(title, "f3");
+      strcpy(title, "F3");
       break;
     case GDK_F4:
-      strcpy(title, "f4");
+      strcpy(title, "F4");
       break;
     case GDK_F5:
-      strcpy(title, "f5");
+      strcpy(title, "F5");
       break;
     case GDK_F6:
-      strcpy(title, "f6");
+      strcpy(title, "F6");
       break;
     case GDK_F7:
-      strcpy(title, "f7");
+      strcpy(title, "F7");
       break;
     case GDK_F8:
-      strcpy(title, "f8");
+      strcpy(title, "F8");
       break;
     case GDK_F9:
-      strcpy(title, "f9");
+      strcpy(title, "F9");
       break;
     case GDK_F10:
-      strcpy(title, "f10");
+      strcpy(title, "F10");
       break;
     case GDK_F11:
-      strcpy(title, "f11");
+      strcpy(title, "F11");
       break;
     case GDK_F12:
-      strcpy(title, "f12");
+      strcpy(title, "F12");
       break;
       
@@ -264,7 +433,7 @@
     }
 
-  inputkey->pKeyOLabel->setValue(title);
-  inputButton->disconnectSignal(keySignal);
-  inputWindow->close();
-}
-#endif /* HAVE_GTK2 */
+  inputkey->keyOLabel->setValue(title);
+  GuiKeys::inputButton->disconnectSignal(GuiKeys::keySignal);
+  GuiKeys::inputWindow->close();
+}
+#endif /* HAVE_GTK2 */
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_keys.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_keys.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_keys.h	(revision 4139)
@@ -15,66 +15,52 @@
 #endif /* HAVE_GTK2 */
 
-/**
-   \brief defines the Possible Player Keys
-*/
-enum KEYS {UP, DOWN, LEFT, RIGHT, SHOOT};
+//! One KeyOption has one InputKey
+struct InputKey
+{
+  Box* keyBox;           //!< One Box that holds the Keys
+  Button* keyButton;     //!< The Button for changing the Key.
+  OptionLabel* keyOLabel;//!< The Label for displaying the Key-setting.
+};
 
-class Player;
 //! Class that creates the Keys-Options.
 class GuiKeys : public GuiElement
 {
- private:
-  Frame* keysFrame;      //!< The Frame that holds the keyOptions.
-  Box* keysBox;          //!< The Frame that holds the keyOptions.
-  Player* player1;       //!< The first Player's keys.
-  Player* player2;       //!< The seconds Player's keys.
-  Button* misc;          //!< Other keyboeard options come here. \todo include some like pause, quit and so on.
-
  public:
   GuiKeys(void);
   ~GuiKeys(void);
-};
-
-//! Class to hold infos about a Player
-/**
-   \todo split into subclass and superclass ButtonConfigurator
-*/
-class Player
-{
- private:
-  Window* pKeyWindow;     //!< The Window for a new Key-setting.
-  Frame* pKeyFrame;       //!< The Frame for a new Key-setting.
-  Button* openButton;     //!< The OpenButton for this key-settings.
-  Button* closeButton;    //!< The CloseButton for this key-settings.
-  Box* pKeysBox;          //!< The Box that holds the Key-settings.
-  
-  //! One KeyOption has one InputKey
-  struct InputKey
-  {
-    Box* pKeyBox;           //!< One Box that holds the Keys
-    Button* pKeyButton;     //!< The Button for changing the Key.
-    OptionLabel* pKeyOLabel;//!< The Label for displaying the Key-setting.
-  };
-
-  InputKey* inputKey[10];     //!< Buttons-array. \todo make it dynamic.
 
   static Window* inputWindow; //!< A Window that gets keyboard clicks. Static, because only one needed.
   static Button* inputButton; //!< A Button that gets keyboard clicks. Static, because only one needed.
   static long keySignal;      //!< A keySignal that handles keyboard clicks. Static, because only one needed.
+};
+
+//! Class to hold infos about a Player
+class PlayerKeys
+{
+ private:
+  Button* openButton;     //!< The OpenButton for this key-settings.
+
  public:
-  Player(char* player);
-
-  Widget* addKey(KEYS key, char* name);
+  PlayerKeys(char* player);
 
   Button* getOpenButton(void);
-
-#ifdef HAVE_GTK2
-  static gint inputWindowEvent(GtkWidget* w, GdkEventKey* event, void* widget);
-  static gint key_cb(GtkWidget* w, GdkEventKey* event, void* inputKey);
-#endif /* HAVE_GTK2 */
-  void setkey(KEYS key);
-  
 };
 
+class MiscKeys
+{
+ private:
+  Button* openButton;     //!< The OpenButton for this key-settings.
+
+ public:
+  MiscKeys();
+
+  Button* getOpenButton(void);  
+};
+
+Widget* addKey(const char* name, const char* defaultValue = NULL);
+#ifdef HAVE_GTK2
+gint inputWindowEvent(GtkWidget* w, GdkEventKey* event, void* widget);
+gint key_cb(GtkWidget* w, GdkEventKey* event, void* inputKey);
+#endif /* HAVE_GTK2 */
 
 
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_update.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_update.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_update.cc	(revision 4139)
@@ -37,4 +37,9 @@
 GuiUpdate::GuiUpdate(void)
 {
+  FileDialog* dataDirDialog;   //!< A FileDialog for the selection of the DataRepos
+  Button* dataDirButton;       //!< A Button for the selection of the DataRepos
+  OptionLabel* dataDirLabel;   //!< A Label fot the selection of the DataRepos
+  
+
   this->tmpDir = NULL;
   this->homeDir = NULL;
@@ -45,13 +50,34 @@
 
   this->updateFrame = new Frame("Update-Options:");
-  this->updateFrame->setGroupName("update");
+  this->updateFrame->setGroupName(CONFIG_SECTION_DATA);
   this->updateBox = new Box('v');
+
+  dataDirButton = new Button(CONFIG_NAME_DATADIR);
+  dataDirLabel = new OptionLabel(CONFIG_NAME_DATADIR, "unknown");
+  dataDirLabel->setFlagName("data-dir", "d", 0);
+  dataDirLabel->setDescription("Sets the location of the orxonox' Data-Directory");
+  dataDirLabel->saveability();
+  dataDirDialog = new FileDialog("data-Repos-location");
+  dataDirDialog->setDefaultFileName("data");
+  dataDirDialog->setMask(DATA_IDENTIFIER);
+  this->checkDataDir("../data/" DATA_IDENTIFIER, dataDirLabel);
+  dataDirDialog->disableFileOpts();
+  dataDirDialog->setOpenUpButton(dataDirButton);
+  //dataDirDialog->setChangeOption(dataDirLabel);
+  dataDirDialog->setOKFunc(dataDirLabel, GuiUpdate::checkDataDir);
+  updateBox->fill(dataDirButton);
+  updateBox->fill(dataDirLabel);
+
 #ifdef HAVE_CURL
 
   // the Button for autoUpdating
-  this->autoUpdate = new CheckButton("auto update");
+  this->autoUpdate = new CheckButton(CONFIG_NAME_AUTO_UPDATE);
   this->updateBox->fill(this->autoUpdate);
   this->autoUpdate->setFlagName("update", "u", 0);
+  this->autoUpdate->setDescription("Updates orxonox", "When this option is selected orxonox automatically searches for updates, and if found installs them");
   this->autoUpdate->saveability();
+
+  
+
 
   this->updateSourceWindowCreate();
@@ -62,9 +88,11 @@
 
 #else /* HAVE_CURL */
-  Label* noCurlLabel = new Label("since you do not have cURL,\nthis option is not availible");
+  Label* noCurlLabel = new Label("since you do not have cURL-support,\nupdate options are not availible");
   this->updateBox->fill(noCurlLabel);  
 #endif /* HAVE_CURL */
   this->updateFrame->fill(this->updateBox);
   this->setMainWidget(this->updateFrame);
+
+
 }
 
@@ -76,4 +104,24 @@
 
 }
+
+/**
+   \brief checks if the Folder containing selected File is data.oxd, and if so sets it.
+   \param 
+*/
+bool GuiUpdate::checkDataDir(const char* fileName, void* object)
+{
+  if (!strcmp(fileName+(strlen(fileName)-strlen(DATA_IDENTIFIER)), DATA_IDENTIFIER))
+    {
+      char* tmpName = new char[strlen(fileName)-strlen(DATA_IDENTIFIER)+1];
+      strncpy(tmpName, fileName, strlen(fileName)-strlen(DATA_IDENTIFIER));
+      tmpName[strlen(fileName)-strlen(DATA_IDENTIFIER)] = '\0'; 
+      static_cast<OptionLabel*>(object)->setValue(tmpName);
+      delete tmpName;
+      return true;
+    }
+  else
+    return false;
+}
+
 
 /** 
@@ -82,9 +130,9 @@
 bool GuiUpdate::getSystemInfo(void)
 {
-  PRINTF(3)("Grabbing system information\n");
+  PRINTF(5)("Grabbing system information\n");
   this->tmpDir = getenv("TMPDIR");
   if(!tmpDir)
     this->tmpDir = "/tmp";
-  PRINTF(4)("Temporary directory is: %s\n", this->tmpDir);
+  PRINTF(5)("Temporary directory is: %s\n", this->tmpDir);
 
 #ifdef __WIN32__
@@ -93,14 +141,15 @@
   this->homeDir = getenv("HOME");
 #endif
-  PRINTF(4)("Home directory is %s\n", homeDir);
-
-  this->installDataDir = "/usr/share/games/orxonox";
-  PRINTF(4)("Installation of orxonox-data will go to this directory: %s\n", this->installDataDir);
+  PRINTF(5)("Home directory is %s\n", homeDir);
+
+
+  this->installDataDir = DEFAULT_DATA_DIR;
+  PRINTF(5)("Installation of orxonox-data will go to this directory: %s\n", this->installDataDir);
 
   this->installSourceDir = "/usr/games/bin";
-  PRINTF(4)("Installation of orxonox-source will go to this directory: %s\n", this->installSourceDir);
+  PRINTF(5)("Installation of orxonox-source will go to this directory: %s\n", this->installSourceDir);
 
   this->userName = getenv("USER");
-  PRINTF(4)("Logged in username is: %s\n", this->userName);
+  PRINTF(5)("Logged in username is: %s\n", this->userName);
 }
 
@@ -108,5 +157,5 @@
 bool* GuiUpdate::checkForUpdates(void)
 {
-  PRINTF(3)("checking for new version of orxonox\n");
+  PRINTF(4)("checking for new version of orxonox\n");
   FileInfo updateFileInfo;
   updateFileInfo.fileName = "update_info";
@@ -218,5 +267,5 @@
   dataInfo->webRoot  = "http://www.orxonox.ethz.ch/files/";
   dataInfo->localRoot = "./";
-  PRINTF(3)("Preparing to download file %s.\n", dataInfo->fileName);
+  PRINTF(4)("Preparing to download file %s.\n", dataInfo->fileName);
   downloadWithStyle(dataInfo);
 }
@@ -284,9 +333,9 @@
 CURL* GuiUpdate::curlHandle = NULL;
 
-/**
-   \brief A bool parameter that shows if we are downloading.
-*/
+//! A bool parameter that shows if we are downloading.
 bool GuiUpdate::isDownloading = false;
 
+//! A parameter to see, if downloading has been canceled
+bool GuiUpdate::downloadCanceled = false;
 
 /**
@@ -303,5 +352,5 @@
       return false;
     }
-  PRINTF(3)("Downloading.\n");
+  PRINTF(4)("Downloading.\n");
   FileInfo* info =(FileInfo*)fileInfo;
   CURLcode res;
@@ -351,5 +400,5 @@
       return false;
     }
-  PRINTF(3)("Downloading.\n");
+  PRINTF(4)("Downloading.\n");
   FileInfo* info =(FileInfo*)fileInfo;
   CURLcode res;
@@ -419,5 +468,5 @@
     curl_easy_cleanup(curlHandle);
  
-  PRINTF(3)("Closing the downloaded file.\n");
+  PRINTF(4)("Closing the downloaded file.\n");
   fclose(info->fileHandle);
 
@@ -445,5 +494,5 @@
 gint GuiUpdate::cancelDownload(GtkWidget* w, GdkEventKey* event, void* bar)
 {
-  PRINTF(4)("Cannot cancle the Downloading process until after this File\n");
+  PRINTF(3)("Cannot cancle the Downloading process until after this File\n");
 }
 #endif /* HAVE_GTK2 */
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_update.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_update.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_update.h	(revision 4139)
@@ -10,4 +10,7 @@
 #include "gui_element.h"
 #include "gui_gtk.h"
+
+
+#define DATA_IDENTIFIER "data.oxd"
 
 #include <stdio.h>
@@ -59,4 +62,6 @@
   static gint updateSourceFunc(GtkWidget* w, GdkEventKey* event, void* info);
 #endif /* HAVE_GTK2 */
+
+  static bool checkDataDir(const char* fileName, void* object);
 
 #ifdef HAVE_CURL
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_video.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_video.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_video.cc	(revision 4139)
@@ -27,4 +27,5 @@
 #include "gui_video.h"
 
+#include "gui_gtk.h"
 #include "glincl.h"
 #include <stdlib.h>
@@ -35,27 +36,39 @@
 GuiVideo::GuiVideo(void)
 {
-  this->videoFrame = new Frame("Video-Options:");
-  this->videoBox = new Box('v');
-  this->videoFrame->setGroupName("video");
-  
-  this->fullscreen = new CheckButton("Fullscreen-mode");
-  this->fullscreen->setFlagName("windowed", "q", 1);
-  this->fullscreen->saveability();
-  this->videoBox->fill(this->fullscreen);
-  this->resolution = new Menu("Resolution");
-  this->getResolutions(this->resolution);
-  this->resolution->saveability();
-  this->resolution->setFlagName("resolution", "r", 0);
-  this->videoBox->fill(this->resolution);
-  this->wireframe = new CheckButton("WireFrame-mode");
-  this->wireframe->setFlagName("wireframe", "w", 0);
-  this->wireframe->saveability();
-  this->videoBox->fill(this->wireframe);
-
-  this->advancedWindowCreate();
-  this->videoBox->fill(this->advancedWindowGetButton());
-
-  this->videoFrame->fill(videoBox);
-  this->setMainWidget(this->videoFrame);
+  Frame* videoFrame;        //!< The Frame that holds the video options.
+
+  videoFrame = new Frame("Video-Options:");
+  videoFrame->setGroupName("video");
+  {
+    Box* videoBox;            //!< The Box that holds the video options.
+
+    videoBox = new Box('v');
+    {
+      CheckButton* fullscreen;  //!< CheckButton for fullscreen-mode
+      Menu* resolution;         //!< Menu for the resolution
+      CheckButton* wireframe;   //!< CheckButton for wireframe Mode.
+
+      fullscreen = new CheckButton(CONFIG_NAME_FULLSCREEN);
+      fullscreen->setFlagName("windowed", "q", 1);
+      fullscreen->setDescription("Starts orxonox in windowed mode");
+      fullscreen->saveability();
+      videoBox->fill(fullscreen);
+      resolution = new Menu(CONFIG_NAME_RESOLUTION);
+      getResolutions(resolution);
+      resolution->saveability();
+      resolution->setFlagName("resolution", "r", 0);
+      resolution->setDescription("Sets the resolution of orxonox");
+      videoBox->fill(resolution);
+      wireframe = new CheckButton(CONFIG_NAME_WIREFRAME);
+      wireframe->setFlagName("wireframe", "w", 0);
+      wireframe->setDescription("Starts orxonox in wireframe mode");
+      wireframe->saveability();
+      videoBox->fill(wireframe);
+
+      videoBox->fill(advancedWindowCreate());
+    }
+    videoFrame->fill(videoBox);
+  }
+  setMainWidget(videoFrame);
 }
 
@@ -71,80 +84,99 @@
    \brief Creates a window, and all it contains for the Source-update.
 */
-void GuiVideo::advancedWindowCreate(void)
-{
+Widget* GuiVideo::advancedWindowCreate(void)
+{
+  // advanced-Performance-Options
+  Window* advancedWindow;   //!< A Window to display advanced options.
+  Button* advancedButton;   //!< A Button to open the Advanced Video Performance Window.
   // the button, that opens this Window.
-  this->advancedButton = new Button("advanced");
+  advancedButton = new Button("advanced");
 
   // the Window itself
-  this->advancedWindow = new Window("Advanced Video Options");
-  this->advancedWindow->setGroupName("advancedVideoOptions");
-
-  this->advancedBox = new Box('v');
-
-  // Advanced Performance Options
-  this->shadows = new CheckButton("Shadows");
-  this->shadows->saveability();
-  this->advancedBox->fill(this->shadows);
-
-  this->fog = new CheckButton("Fog");
-  this->fog->saveability();
-  this->advancedBox->fill(this->fog);
-
-  this->reflections = new CheckButton("Reflections");
-  this->reflections->saveability();
-  this->advancedBox->fill(this->reflections);
-
-  this->textures = new CheckButton("Textures");
-  this->textures->saveability();
-  this->advancedBox->fill(this->textures);
-
-  this->textureDetail = new Menu("Texture Detail", "low", "medium", "high", "lastItem");
-  this->textureDetail->setDefaultValue(1);
-  this->textureDetail->saveability();
-  this->advancedBox->fill(this->textureDetail);
-
-  this->modelDetailLabel = new Label("Model Detail");
-  this->advancedBox->fill(this->modelDetailLabel);
-  this->modelDetail = new Menu("Model Detail", "low", "high", "lastItem");
-  this->modelDetail->setDefaultValue(1);
-  this->modelDetail->saveability();
-  this->advancedBox->fill(this->modelDetail);
-
-  this->antiAliasingLabel = new Label("Anti-Aliasing-depth:");
-  this->advancedBox->fill(this->antiAliasingLabel);
-  this->antiAliasing = new Menu("Anti Aliasing", "0", "1", "2", "4", "8",  "lastItem");
-  this->antiAliasing->setDefaultValue(2);
-  this->antiAliasing->saveability();
-  this->advancedBox->fill(this->antiAliasing);
-
-  this->filterMethodLabel = new Label("Filtering Method:");
-  this->advancedBox->fill(this->filterMethodLabel);
-  this->filterMethod = new Menu("Filtering Method", "none", "linear", "bilinear", "trilinear", "anisortopic", "lastItem");
-  this->filterMethod->setDefaultValue(1);
-  this->filterMethod->saveability();
-  this->advancedBox->fill(this->filterMethod);
-  
-  this->closeButton = new Button("close");
-  this->advancedBox->fill(this->closeButton);
-
-  this->advancedWindow->fill(advancedBox);
-#ifdef HAVE_GTK2 
-  this->advancedButton->connectSignal("button_press_event", this->advancedWindow, Window::windowOpen);
-  this->closeButton->connectSignal("button_press_event", this->advancedWindow, Window::windowClose);
-  this->advancedWindow->connectSignal("destroy", this->advancedWindow, Window::windowClose);
-  this->advancedWindow->connectSignal("delete_event", this->advancedWindow, Window::windowClose);
+  advancedWindow = new Window("Advanced Video Options");
+  advancedWindow->setGroupName(CONFIG_SECTION_VIDEO_ADVANCED);
+  {
+    Box* advancedBox;         //!< A Box to pack the options into.
+
+    advancedBox = new Box('v');
+    {
+      CheckButton* shadows;     //!< CheckButton for shadows
+      CheckButton* fog;         //!< CheckButton for fog.
+      CheckButton* reflections; //!< CheckButton for reflections
+      CheckButton* textures;    //!< CheckButton for textures
+      Menu* textureDetail;      //!< Menu for the Texture-Detail.
+      Label* modelDetailLabel;  //!< Label for model-detail.
+      Menu* modelDetail;        //!< model-detail.
+      Label* antiAliasingLabel; //!< Label for the anti-aliasing mode.
+      Menu* antiAliasing;       //!< Menu for the Antialiasing-mode.
+      Label* filterMethodLabel; //!< Label for filtering-Method.
+      Menu* filterMethod;       //!< Menu for filtering Method.
+      Button* closeButton;      //!< A Button to close the Advanced-settingsWindow.
+
+      // Advanced Performance Options
+      shadows = new CheckButton(CONFIG_NAME_SHADOWS);
+      shadows->saveability();
+      advancedBox->fill(shadows);
+      
+      fog = new CheckButton(CONFIG_NAME_FOG);
+      fog->saveability();
+      advancedBox->fill(fog);
+      
+      reflections = new CheckButton(CONFIG_NAME_REFLECTIONS);
+      reflections->saveability();
+      advancedBox->fill(reflections);
+      
+      textures = new CheckButton(CONFIG_NAME_TEXTURES);
+      textures->saveability();
+      advancedBox->fill(textures);
+      
+      textureDetail = new Menu(CONFIG_NAME_TEXTURE_DETAIL, "low", "medium", "high", "lastItem");
+      textureDetail->setDefaultValue(1);
+      textureDetail->saveability();
+      advancedBox->fill(textureDetail);
+      
+      modelDetailLabel = new Label(CONFIG_NAME_MODEL_DETAIL);
+      advancedBox->fill(modelDetailLabel);
+      modelDetail = new Menu(CONFIG_NAME_MODEL_DETAIL, "low", "high", "lastItem");
+      modelDetail->setDefaultValue(1);
+      modelDetail->saveability();
+      advancedBox->fill(modelDetail);
+      
+      antiAliasingLabel = new Label("Anti-Aliasing-depth:");
+      advancedBox->fill(antiAliasingLabel);
+      antiAliasing = new Menu(CONFIG_NAME_ANTI_ALIASING, "0", "1", "2", "4", "8",  "lastItem");
+      antiAliasing->setDefaultValue(2);
+      antiAliasing->saveability();
+      advancedBox->fill(antiAliasing);
+      
+      filterMethodLabel = new Label("Filtering Method:");
+      advancedBox->fill(filterMethodLabel);
+      filterMethod = new Menu(CONFIG_NAME_FILTER_METHOD, "none", "linear", "bilinear", "trilinear", "anisortopic", "lastItem");
+      filterMethod->setDefaultValue(1);
+      filterMethod->saveability();
+      advancedBox->fill(filterMethod);
+  
+      closeButton = new Button("close");
+#ifdef HAVE_GTK2
+      closeButton->connectSignal("button_press_event", advancedWindow, Window::windowClose);
 #endif /* HAVE_GTK2 */
-   Window::addWindow(this->advancedWindow);
-
-}
-
-/**
-   \returns A Pointer to the Button of the UpdaterSourceWindow
-*/
-Button* GuiVideo::advancedWindowGetButton(void)
-{
-  return this->advancedButton;
-}
-
+
+      advancedBox->fill(closeButton);
+    }
+    advancedWindow->fill(advancedBox);
+  }
+#ifdef HAVE_GTK2
+  advancedButton->connectSignal("button_press_event", advancedWindow, Window::windowOpen);
+  advancedWindow->connectSignal("destroy", advancedWindow, Window::windowClose);
+  advancedWindow->connectSignal("delete_event", advancedWindow, Window::windowClose);
+#endif /* HAVE_GTK2 */
+  Window::addWindow(advancedWindow);
+
+  return advancedButton;
+}
+
+/**
+   \brief sets all resolutions to the menu
+   \param menu the Menu to set The resolutions to.
+*/
 void GuiVideo::getResolutions(Menu* menu)
 {
@@ -170,10 +202,10 @@
   else{
     /* Print valid modes */
-    PRINT(4)("Available Modes\n");
+    PRINT(5)("Available Modes\n");
     for(i = 0; modes[i] ;++i)
       {
 	if (x != modes[i]->w || y != modes[i]->h)
 	  { 
-	    PRINT(4)("  %d x %d\n", modes[i]->w, modes[i]->h);
+	    PRINTF(5)("  %d x %d\n", modes[i]->w, modes[i]->h);
 	    sprintf(tmpChar, "%dx%d", modes[i]->w, modes[i]->h);
 	    menu->addItem(tmpChar);
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/gui_video.h
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/gui_video.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/gui_video.h	(revision 4139)
@@ -8,5 +8,8 @@
 #include "gui.h"
 #include "gui_element.h"
-#include "gui_gtk.h"
+
+// FORWARD DECLARATIONS
+class Widget;
+class Menu;
 
 //! Class that creates the Video-Options.
@@ -14,33 +17,5 @@
 {
  private:
-  Frame* videoFrame;        //!< The Frame that holds the video options.
-  Box* videoBox;            //!< The Box that holds the video options.
-  CheckButton* fullscreen;  //!< CheckButton for fullscreen-mode
-  Menu* resolution;         //!< Menu for the resolution
-  CheckButton* wireframe;   //!< CheckButton for wireframe Mode.
-
-  // advanced-Performance-Options
-  Window* advancedWindow;   //!< A Window to display advanced options.
-  Button* advancedButton;   //!< A Button to open the Advanced Video Performance Window.
-  Box* advancedBox;         //!< A Box to pack the options into.
-  CheckButton* shadows;     //!< CheckButton for shadows
-  CheckButton* fog;         //!< CheckButton for fog.
-  CheckButton* reflections; //!< CheckButton for reflections
-  CheckButton* textures;    //!< CheckButton for textures
-  Menu* textureDetail;      //!< Menu for the Texture-Detail.
-  
-  Label* modelDetailLabel;  //!< Label for model-detail.
-  Menu* modelDetail;        //!< model-detail.
-  
-  Label* antiAliasingLabel; //!< Label for the anti-aliasing mode.
-  Menu* antiAliasing;       //!< Menu for the Antialiasing-mode.
-
-  Label* filterMethodLabel; //!< Label for filtering-Method.
-  Menu* filterMethod;       //!< Menu for filtering Method.
-
-  Button* closeButton;      //!< A Button to close the Advanced-settingsWindow.
-
-  Button* advancedWindowGetButton(void);
-  void advancedWindowCreate(void);
+  //  Button* advancedWindowGetButton(void);
   
  public:
@@ -48,7 +23,7 @@
   ~GuiVideo(void);
 
+ private:
   void getResolutions(Menu* menu);
-  
-
+  Widget* advancedWindowCreate(void);
 };
 #endif /* _GUI_VIDEO_H */
Index: /orxonox/branches/md2_loader/src/lib/gui/gui/rc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/gui/gui/rc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/gui/gui/rc	(revision 4139)
@@ -1,4 +1,65 @@
+/*
+ * 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.
+ * bg - Sets the background color of a widget.
+ * bg_pixmap - Sets the background of a widget to a tiled pixmap.
+ * base - Sets the base of Widgets
+ * font - Sets the font to be used with the given widget.
+*/
+
+
+
 static const gchar* rc_string =
-(	
+(
+"style'orxonox'"
+"{"
+"fg[NORMAL]      = { 0.0, 1.0, 0.0 }"
+"fg[PRELIGHT]    = { 0.0, 1.0, 0.0 }"
+"fg[ACTIVE]      = { 0.0, 1.0, 0.0 }"
+"fg[INSENSITIVE] = { 0.0, 0.8, 0.0 }"
+"fg[SELECTED]    = { 0.0, 1.0, 0.0 }"
+
+"bg[NORMAL]      = { 0.0, 0.0, 0.0 }"
+"bg[PRELIGHT]    = { 0.0, 1.0, 0.0 }"
+"bg[ACTIVE]      = { 0.0, 0.3, 0.0 }"
+"bg[INSENSITIVE] = { 0.0, 0.1, 0.0 }"
+"bg[SELECTED]    = { 0.0, 0.1, 0.0 }"
+
+"base[NORMAL]      = { 0.0, 1.0, 0.0 }"
+"base[PRELIGHT]    = { 0.0, 1.0, 0.0 }"
+"base[ACTIVE]      = { 0.0, 1.0, 0.0 }"
+"base[INSENSITIVE] = { 0.0, 1.0, 0.0 }"
+"base[SELECTED]    = { 0.0, 1.0, 0.0 }"
+
+"font              = '-adobe-helvetica-medium-r-normal--*-100-*-*-*-*-*-*'"
+"}"
+
 "style'window'"
 "{"			
@@ -7,4 +68,9 @@
 "base[NORMAL] = { 0, 0, 0 }"
 "base[INSENSITIVE] = { 0, 0, 0 }"
+"}"
+
+"style'frame'"
+"{"
+"bg[NORMAL]  = { 0.0, 0.4, 0.0 }"
 "}"
 
@@ -26,6 +92,6 @@
 "bg[NORMAL] = { 0, 0, 0 }"
 "fg[NORMAL] = { 0, 1.0, 0 }"
-"bg[INSENSITIVE] = { 1.0, 0, 1.0 }"
-"fg[INSENSITIVE] = { 1.0, 0, 1.0 }"
+"bg[INSENSITIVE] = { 0.0, 0.2, 0.0 }"
+"fg[INSENSITIVE] = { 0.0, 0.8, 0.0 }"
 "base[NORMAL] = { 0, 1.0, 0 }"
 "base[PRELIGHT] = { 0, 1.0, 0 }"
@@ -55,8 +121,7 @@
 "}"
 
+"widget'Gtk*'			style'orxonox'"
+"widget'*Gtk*Frame*'              style'frame'"
 "widget'GtkWindow'		style'window'"
-"widget'GtkFrame'		style'window'"
-"widget'Gtk*EventBox'		style'window'"
-"widget'GtkDialog'		style'window'"
 "widget'GtkFileSelection'	style'window'"
 "widget'*Gtk*Scale'		style'scale'"
Index: /orxonox/branches/md2_loader/src/lib/util/ini_parser.cc
===================================================================
--- /orxonox/branches/md2_loader/src/lib/util/ini_parser.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/lib/util/ini_parser.cc	(revision 4139)
@@ -16,10 +16,11 @@
 
 #include "ini_parser.h"
+#include "resource_manager.h"
 
 using namespace std;
 
 /**
-	\brief constructs an IniParser using a file
-	\param filename: the path and name of the file to parse
+   \brief constructs an IniParser using a file
+   \param filename: the path and name of the file to parse
 */
 IniParser::IniParser (const char* filename)
@@ -27,9 +28,9 @@
   stream = NULL;
   bInSection = false;
-  openFile(filename);
+  this->openFile(filename);
 }
 
 /**
-	\brief removes the IniParser from memory
+   \brief removes the IniParser from memory
 */
 IniParser::~IniParser ()
@@ -45,12 +46,15 @@
 int IniParser::openFile(const char* filename)
 {
+  char* tmpName = ResourceManager::homeDirCheck(filename);
   if( filename == NULL) return -1;
   if( stream != NULL)	fclose (stream);
-  if( (stream = fopen (filename, "r")) == NULL)
+  if( (stream = fopen (tmpName, "r")) == NULL)
     {
-      printf("IniParser could not open %s\n", filename);
+      PRINTF(1)("IniParser could not open %s\n", filename);
+      delete tmpName;
       return -1;
     }
   bInSection = false;
+  delete tmpName;
   return 0;
 }
@@ -123,11 +127,16 @@
 	  return -1;
 	}
-      if( (ptr = strchr( linebuffer, '=')) != NULL)
+      sscanf(linebuffer, "%s = %s", name, value);
+      return 0;
+      /*
+	if( (ptr = strchr( tmpBuffer, '=')) != NULL)
 	{
-	  if( ptr == linebuffer) continue;
-	  strcpy (value, &ptr[1]);
-	  strncpy (name, linebuffer, strlen (linebuffer) - strlen (value) - 1);
-	  return 0;
+	if( ptr == linebuffer) continue;
+	strcpy (value, &ptr[1]);
+	strncpy (name, linebuffer, strlen (linebuffer) - strlen (value) - 1);
+	printf ("%s, %s\n", value, name);
+	return 0;
 	}
+      */
     }
   return -1;	
Index: /orxonox/branches/md2_loader/src/orxonox.cc
===================================================================
--- /orxonox/branches/md2_loader/src/orxonox.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/orxonox.cc	(revision 4139)
@@ -32,4 +32,5 @@
 #include "data_tank.h"
 #include "command_node.h"
+#include "ini_parser.h"
 #include "game_loader.h"
 #include "graphics_engine.h"
@@ -37,4 +38,5 @@
 #include "text_engine.h"
 #include "factory.h"
+#include "benchmark.h"
 
 #include <string.h>
@@ -46,4 +48,6 @@
 /**
    \brief create a new Orxonox
+
+   In this funcitons only global values are set. The game will not be started here.
 */
 Orxonox::Orxonox ()
@@ -54,4 +58,7 @@
   this->resources = NULL;
   this->localinput = NULL;
+
+  this->argc = 0;
+  this->argv = NULL;
 }
 
@@ -93,5 +100,5 @@
 void Orxonox::getConfigFile (int argc, char** argv)
 {
-  strcpy (configfilename, "orxonox.conf");
+  strcpy (configfilename, "~/.orxonox/orxonox.conf");
 }
 
@@ -101,4 +108,6 @@
 int Orxonox::init (int argc, char** argv)
 {
+  this->argc = argc;
+  this->argv = argv;
   // parse command line
   // config file
@@ -107,4 +116,7 @@
   SDL_Init (SDL_INIT_TIMER);
   // initialize everything
+  printf("> Initializing resources\n");
+  if( initResources () == -1) return -1;
+
   if( initVideo() == -1) return -1;
   if( initSound() == -1) return -1;
@@ -113,6 +125,4 @@
   printf("> Initializing networking\n");
   if( initNetworking () == -1) return -1;
-  printf("> Initializing resources\n");
-  if( initResources () == -1) return -1;
   //printf("> Initializing world\n");
   //if( init_world () == -1) return -1; PB: world will be initialized when started
@@ -129,5 +139,5 @@
   
   GraphicsEngine::getInstance();
-  
+    
   return 0;
 }
@@ -152,5 +162,5 @@
 {
   // create localinput
-  localinput = new CommandNode( configfilename);
+  localinput = new CommandNode(configfilename);
   
   return 0;
@@ -173,15 +183,50 @@
 int Orxonox::initResources() 
 {
-  //  printf("Not yet implemented\n");
   PRINT(3)("initializing ResourceManager\n");
   resourceManager = ResourceManager::getInstance();
-  if (!resourceManager->setDataDir("../data/"))
-    {
-      PRINTF(1)("Data Could not be located\n");
+
+  // create parser
+  IniParser parser (DEFAULT_CONFIG_FILE);
+  if( parser.getSection (CONFIG_SECTION_DATA) == -1)
+    {
+      PRINTF(1)("Could not find Section %s in %s\n", CONFIG_SECTION_DATA, DEFAULT_CONFIG_FILE);
+      return -1;
+    }
+  char namebuf[256];
+  char valuebuf[256];
+  memset (namebuf, 0, 256);
+  memset (valuebuf, 0, 256);
+  
+  while( parser.nextVar (namebuf, valuebuf) != -1)
+    {
+      if (!strcmp(namebuf, CONFIG_NAME_DATADIR))
+	{
+	  //  printf("Not yet implemented\n");
+	  if (!resourceManager->setDataDir(valuebuf))
+	    {
+	      PRINTF(1)("Data Could not be located\n");
+	      exit(-1);
+	    }
+	}
+      
+      memset (namebuf, 0, 256);
+      memset (valuebuf, 0, 256);
+    }
+  
+  if (!resourceManager->checkDataDir(DEFAULT_DATA_DIR_CHECKFILE))
+    {
+      PRINTF(1)("The DataDirectory %s could not be verified\nPlease Change in File %s Section %s Entry %s to a suitable value\n",
+		resourceManager->getDataDir(),
+		DEFAULT_CONFIG_FILE,
+		CONFIG_SECTION_DATA,
+		CONFIG_NAME_DATADIR);
       exit(-1);
     }
+
 
   PRINT(3)("initializing TextEngine\n");
   TextEngine::getInstance();
+
+  return 0;
 }
 
@@ -213,5 +258,5 @@
   
   this->gameLoader = GameLoader::getInstance();
-  this->gameLoader->loadCampaign("../data/worlds/DefaultCampaign.oxc");
+  this->gameLoader->loadCampaign("worlds/DefaultCampaign.oxc");
   //  this->gameLoader->loadDebugCampaign(DEBUG_CAMPAIGN_0);
   this->gameLoader->init();
@@ -301,17 +346,6 @@
 */
 int main(int argc, char** argv) 
-{  
-  
-  /* reading arguments 
-     
-     currently supported arguments are:
-     <no args>                   ::    just starts orxonox
-     --benchmark                 ::    start the benchmark without starting orxonox
-     
-     this is a preselection: it matches to one of the start* functions, the
-     finetuning is made in those functions.
-  */
-
-  printf("++INFO++++++++++++++++++++++++++++++++++++++++++++++++\n");
+{ 
+
   printf("+ This version of orxonox is for testing purposes    +\n");
   printf("+ In order to run it, you will need some files for   +\n");
@@ -326,8 +360,8 @@
   for(i = 1; i < argc; ++i)
     {
-      if(! strcmp( "--help", argv[i])) return startHelp();
-      else if(! strcmp( "--benchmark", argv[i])) return startBenchmarks();
-      else if(! strcmp( "--gui", argv[i]) || !strcmp("-g", argv[i])) showGui = true;
-      else PRINTF(2)("Orxonox does not understand the arguments %s\n", argv[i]);
+      if(! strcmp( "--help", argv[i]) || !strcmp("-h", argv[i])) return startHelp(argc, argv);
+      else if(!strcmp( "--benchmark", argv[i]) || !strcmp("-b", argv[i])) return startBenchmarks();
+      else if(!strcmp( "--gui", argv[i]) || !strcmp("-g", argv[i])) showGui = true;
+      //      else PRINTF(2)("Orxonox does not understand the arguments %s\n", argv[i]);
     }
 
@@ -337,12 +371,16 @@
 
 
-int startHelp()
+int startHelp(int argc, char** argv)
 {
   PRINT(0)("orxonox: starts the orxonox game - rules\n");
-  PRINT(0)("usage: orxonox [arg]\n\n");
+  PRINT(0)("usage: orxonox [arg [arg...]]\n\n");
   PRINT(0)("valid options:\n");
-  PRINT(0)(" --benchmark\tstarts the orxonox benchmark\n");
-  PRINT(0)(" --help \tshows this menu\n");
-  PRINT(0)(" --gui/-g \tDisplays the Gui on startup\n");
+  {
+    Gui* gui = new Gui(argc, argv);
+    gui->printHelp();
+    delete gui;
+  }
+  PRINT(0)(" -b|--benchmark:\t\tstarts the orxonox benchmark\n");
+  PRINT(0)(" -h|--help:\t\t\tshows this help\n");
 }
 
@@ -357,7 +395,9 @@
       if (ResourceManager::isFile("~/.orxonox/orxonox.lock"))
 	ResourceManager::deleteFile("~/.orxonox/orxonox.lock");
-      //      char* guiExec = new char[strlen(argv[0])+20];
-      //      sprintf(guiExec,"%sGui --gui", argv[0]);
+      
+      // starting the GUI
       Gui* gui = new Gui(argc, argv);
+      gui->startGui();
+
       if (! gui->startOrxonox)
 	return 0;
@@ -384,446 +424,2 @@
   
 }
-
-#if defined __linux__ 
-
-#include "list.h"
-#include "world_entity.h"
-#include "vector.h"
-#include "player.h"
-#include "base_object.h"
-
-#include <asm/msr.h>
-#include <linux/timex.h>
-
-
-#define LIST_MAX 1000
-#define VECTOR_MAX 1000000
-#define ITERATIONS 10000
-
-
-int startBenchmarks()
-{
-
-  printf("===========================================================\n");
-  printf("=                      BENCHMARKS                         =\n");
-  printf("===========================================================\n");
-  printf(" the author is not paying any attention to cacheing effects\n");
-  printf(" of the CPU.\n\n");
-  printf("[title]\t\t\t\t\t     [cycles]\t[loops]\n\n");
-  //  printf("------------------------------------------------------------\n\n");
-
-  // first measure the time overhead:
-  unsigned long ini, end, dt, tmp;
-  rdtscl(ini); rdtscl(end);
-  dt = end - ini;
-
-  int type = -1; 
-  /* type   -1 == all 
-     type    0 == framework
-     type    1 == vector
-     type    2 == quaternion
-     type    3 == lists
-  */
-  if(type == 0 || type == -1)
-    {
-      /* framework test*/
-      
-      printf("Generating Objects:\t\t\t\t\t%i\n", ITERATIONS);
-      /* ************WorldEntity class test************** */
-      WorldEntity* w = NULL;
-      int i = 0;
-      unsigned long mittel = 0;
-      
-      for(i = 0; i < ITERATIONS; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  WorldEntity* w = new WorldEntity();
-	  
-	  rdtscl(end);
-	  delete w;
-	  mittel += (end - ini - dt);
-	}
-      float mi = mittel / (float)ITERATIONS;
-      printf(" Generate a WorldEntity object:\t\t%11.2f\n", mi);
-      
-      /*
-	mittel = 0;
-	for(i = 0; i < ITERATIONS; ++i)
-	{
-	rdtscl(ini);
-	
-	WorldEntity* w = new Primitive(P_SPHERE);
-	
-	rdtscl(end);
-	delete w;
-	mittel += (end - ini - dt);
-	}
-	mi = mittel / (float)ITERATIONS;
-	printf(" Generate a Primitive  object:\t\t%11.2f\n", mi);
-      */
-
-      mittel = 0;
-      for(i = 0; i < ITERATIONS; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  Vector* v = new Vector();
-	  
-	  rdtscl(end);
-	  delete v;
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)ITERATIONS;
-      printf(" Generate a Vector object:\t\t%11.2f\n", mi);
-
-
-     mittel = 0;
-      for(i = 0; i < ITERATIONS; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  Quaternion* q = new Quaternion();
-	  
-	  rdtscl(end);
-	  delete q;
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)ITERATIONS;
-      printf(" Generate a Quaternion object:\t\t%11.2f\n", mi);
-
-
-
-
-      printf("\nCalling function inline &| virtual, \t\t\t%i\n", ITERATIONS);
-      mittel = 0;
-      w = new WorldEntity();
-      for(i = 0; i < ITERATIONS; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  w->tick(0.0f);
-
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	  }
-      //delete w;
-      mi = mittel / (float)ITERATIONS;
-      printf(" Virt funct tick() of WE: \t\t%11.2f\n", mi);
-
-
-      mittel = 0;
-      WorldEntity wo;
-      for(i = 0; i < ITERATIONS; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  wo.tick(0.0f);
-	   
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	  }
-      //delete w;
-      mi = mittel / (float)ITERATIONS;
-      printf(" Inl virt funct tick() of WE v2: \t%11.2f\n", mi);
-
-      
-      mittel = 0;
-      BaseObject* bo = new BaseObject();
-      for(i = 0; i < ITERATIONS; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  bo->isFinalized();
-	   
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	  }
-      //delete w;
-      mi = mittel / (float)ITERATIONS;
-      printf(" Inl funct BaseObject::isFinazlized(): \t%11.2f\n", mi);
-
-      
-      tList<WorldEntity>* list = new tList<WorldEntity>();
-
-      
-      /* ************Primitvie class test************** */
-      list = new tList<WorldEntity>();
- 
-      
-      /*
-	mittel = 0;
-	w = new Primitive(P_SPHERE);
-	for(i = 0; i < ITERATIONS; ++i)
-	{
-	rdtscl(ini);
-	
-	w->tick(0.0f);
-	
-	rdtscl(end);
-	mittel += (end - ini - dt);
-	}
-	mi = mittel / (float)ITERATIONS;
-	printf(" Call function tick() of Prim:\t\t%11.2f\n", mi);
-      */
-      
-    }
-  
-  if(type == 1 || type == -1)
-    {
-      printf("\nDoing some simple vector operations: \t\t\t%i\n", VECTOR_MAX);
-      /* vector test */
-      Vector* a = new Vector(1.3, 5.3, 4.1);
-      Vector* b = new Vector(0.4, 2.5, 6.2);
-      Vector* c = new Vector();
-      
-      unsigned long mittel, ini, end;
-      float mi;
-      int i = 0;
-      // addition
-      mittel = 0;
-      for(i = 0; i < VECTOR_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  *c = *a + *b;
-	   
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)VECTOR_MAX;
-      printf(" Addition of two vectors:\t\t%11.2f\n", mi);
-      
-      // multiplikation
-
-      mittel = 0;
-      for(i = 0; i < VECTOR_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  *c = a->cross( *b);
-	   
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)VECTOR_MAX;
-      printf(" CrossMult of two vectors:\t\t%11.2f\n", mi);
-
-    }
-  if( type == 2 || type == -1)
-    {
-      /* quaternion test */
-      printf("\nDoing some simple quaternion operations: \t\t%i\n", VECTOR_MAX);
-      /* vector test */
-      Quaternion* a = new Quaternion();
-      Quaternion* b = new Quaternion();
-      Quaternion* c = new Quaternion();
-      
-      unsigned long mittel, ini, end;
-      float mi;
-      int i = 0;
-      // quaternion generieren mit spez konstruktor
-      mittel = 0;
-      Vector* qa = new Vector(4.6, 9.3, 0.4);
-      Vector* qb = new Vector(3.5, 6.1, 4.3);
-      for(i = 0; i < VECTOR_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  Quaternion* qu = new Quaternion(*qa, *qb);
-	  
-	  rdtscl(end);
-	  delete qu;
-	  mittel += (end - ini - dt);
-	}
-      delete a;
-      delete b;
-      mi = mittel / (float)VECTOR_MAX;
-      printf(" Gen. quatern. betw. two vectors:\t%11.2f\n", mi);
-      
-      
-      // multiplication
-      mittel = 0;
-      for(i = 0; i < VECTOR_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  *c = *a * *b;
-	  
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)VECTOR_MAX;
-      printf(" Multiplying two quat.(=rot): a * b\t%11.2f\n", mi);
-      
-      
-      
-      // rotating a vector by a quaternion
-      mittel = 0;
-      for(i = 0; i < VECTOR_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  *qa = a->apply(*qb);
-	  
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)VECTOR_MAX;
-      printf(" Rot a vec by a quat: q->apply(v)\t%11.2f\n", mi);
-      
-      
-      
-      // generate rotation matrix
-      mittel = 0;
-      float matrix[4][4];
-      for(i = 0; i < VECTOR_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  a->matrix(matrix);
-	  
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)VECTOR_MAX;
-      printf(" Generate rot matrix: q->matrix(m)\t%11.2f\n", mi);
-    }
-  if( type == 3 || type == -1)
-    {
-      /* list tests*/
-      printf("\nList operations tests: \t\t\t\t\t%i\n", LIST_MAX);
-      tList<char>* list = new tList<char>();
-      char* name;
-      
-      printf(" Adding[1..10] elements to list, found:\n");
-      list->add("1");
-      list->add("2");
-      list->add("3");
-      list->add("4");
-      list->add("5");
-      list->add("6");
-      list->add("7");
-      list->add("8");
-      list->add("9");
-      list->add("10");
-      
-      /*give list out */
-      tIterator<char>* iterator = list->getIterator();
-      name = iterator->nextElement();
-      printf("  List Elements: \t\t");
-      while( name != NULL)
-	{
-	  printf("%s,", name);
-	  name = iterator->nextElement();
-	}
-      delete iterator;
-      printf("\n");
-      
-      
-      /*removing some elements from the list*/
-      printf(" Removing elements [2,3,6,8,10], adding [11] now found:\n");
-      list->remove("2");
-      list->remove("3");
-      list->remove("6");
-      list->remove("8");
-      list->remove("10");
-      list->add("11");
-      /*give list out */
-      iterator = list->getIterator();
-      name = iterator->nextElement();
-      printf("  List Elements: \t\t");
-      while( name != NULL)
-	{
-	  printf("%s,", name);
-	  name = iterator->nextElement();
-	}
-      delete iterator;
-      printf("\n");
-      
-      delete list;
-      printf("\nChecking list performance:\t\t\t\t%i\n", LIST_MAX);
-      
-      tList<int>* plist = new tList<int>();
-      unsigned long mittel, ini, end;
-      float mi;
-      int i = 0;
-      mittel = 0;
-      for(i = 0; i < LIST_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  plist->add(&i);
-	  
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)LIST_MAX;
-      printf(" Adding reference to list:\t\t%11.2f\n", mi);
-      
-      mittel = 0;
-      for(i = 0; i < LIST_MAX; ++i)
-	{
-	  rdtscl(ini);
-	  
-	  plist->remove(&i);
-	  
-	  rdtscl(end);
-	  mittel += (end - ini - dt);
-	}
-      mi = mittel / (float)LIST_MAX;
-      printf(" Removing 1st reference from list:\t%11.2f\n", mi);
-      
-
-      printf("\nList operations tests: \t\t\t\t\t%i\n", LIST_MAX);
-      list = new tList<char>();
-      printf(" Adding[1..10] elements to list, found:\n");
-      list->add("1");
-      list->add("2");
-      list->add("3");
-      list->add("4");
-      list->add("5");
-      list->add("6");
-      list->add("7");
-      list->add("8");
-      list->add("9");
-      list->add("10");
-      
-      /*give list out */
-      iterator = list->getIterator();
-      name = iterator->nextElement();
-      printf("  List Elements: \t\t");
-      while( name != NULL)
-	{
-	  printf("%s,", name);
-	  name = iterator->nextElement();
-	}
-      delete iterator;
-      printf("\n");
-      
-      
-      int c = 0;
-      printf(" Going trough list with nextElement(el) func: ");
-      name = list->firstElement();
-      while(c < 20)
-	{
-	  printf("%s,", name);
-	  name = list->nextElement(name);
-	  c++;
-	}
-      printf("\n");
-      
-
-      
-    }
-  
-}
-
-#else
-
-int startBenchmarks()
-{
-  PRINTF(1)("Benchmark is not implemented in this system\n");
-}
-
-#endif
Index: xonox/branches/md2_loader/src/orxonox.conf
===================================================================
--- /orxonox/branches/md2_loader/src/orxonox.conf	(revision 4138)
+++ 	(revision )
@@ -1,20 +1,0 @@
-[Bindings]
-UP=up
-DOWN=down
-LEFT=left
-RIGHT=right
-SPACE=fire
-m=mode
-ESCAPE=quit
-p=pause
-q=quit
-BUTTON_LEFT=fire
-BUTTON_RIGHT=altfire
-x=up_world
-z=down_world
-1=view0
-2=view1
-3=view2
-4=view3
-5=view4
-6=view5
Index: /orxonox/branches/md2_loader/src/orxonox.h
===================================================================
--- /orxonox/branches/md2_loader/src/orxonox.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/orxonox.h	(revision 4139)
@@ -39,14 +39,10 @@
   Uint32 lastframe;           //!< Time of the last Frame
   
+  unsigned int argc;          //!< Count of Arguments of orxonox
+  char** argv;                //!< Values of th Arguments of orxonox.
+  
   void getConfigFile (int argc, char** argv);
   
-  // main loop functions
-  //  void synchronize ();
-  //void handle_input ();
-  //void time_slice ();
-  //void collision ();
-  //void display ();
-  
-  	// subsystem initialization
+  // subsystem initialization
   int initVideo ();
   int initSound ();
@@ -75,7 +71,6 @@
 };
 
-int startHelp(void);
+int startHelp(int argc, char** argv);
 int startOrxonox(int argc, char** argv);
-int startBenchmarks(void);
 
 #endif /* _ORXONOX_H */
Index: /orxonox/branches/md2_loader/src/story_entities/campaign.cc
===================================================================
--- /orxonox/branches/md2_loader/src/story_entities/campaign.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/story_entities/campaign.cc	(revision 4139)
@@ -41,5 +41,5 @@
   int id;
   
-  PRINTF0("Loading Campaign...\n");
+  PRINTF(3)("Loading Campaign...\n");
   
   assert( root != NULL);
@@ -53,5 +53,5 @@
   if( string == NULL || sscanf(string, "%d", &id) != 1)
     {
-      PRINTF0("Campaign is missing a proper 'identifier'\n");
+      PRINTF(2)("Campaign is missing a proper 'identifier'\n");
       this->setStoryID( -1);
     }
@@ -62,5 +62,5 @@
   if( element == NULL)
     {
-      PRINTF0("Campaign is missing a proper 'WorldList'\n");
+      PRINTF(2)("Campaign is missing a proper 'WorldList'\n");
     }
   else
Index: /orxonox/branches/md2_loader/src/story_entities/world.cc
===================================================================
--- /orxonox/branches/md2_loader/src/story_entities/world.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/story_entities/world.cc	(revision 4139)
@@ -124,5 +124,5 @@
 {
   this->constuctorInit("", -1);
-
+  this->path = NULL;
   const char *string;
   char *name;
@@ -172,4 +172,5 @@
 World::World (char* name)
 {
+  this->path = NULL;
   this->constuctorInit(name, -1);
   //NullParent* np = NullParent::getInstance();
@@ -182,4 +183,5 @@
 World::World (int worldID)
 {
+  this->path = NULL;
   this->constuctorInit(NULL, worldID);
 }
@@ -198,10 +200,6 @@
   cn->reset();
 
-  //ResourceManager::getInstance()->debug();
   ResourceManager::getInstance()->unloadAllByPriority(RP_LEVEL);
-  //ResourceManager::getInstance()->debug();
-
   delete WorldInterface::getInstance();
-
   delete this->nullParent;
   delete this->entities;
@@ -209,11 +207,6 @@
   delete this->trackManager;
   TextEngine::getInstance()->flush();
-
-  //AnimationPlayer::getInstance()->debug();
   delete AnimationPlayer::getInstance(); // this should be at the end of the unloading sequence.
-  //delete garbagecollecor
-  //delete animator
-
-
+  ResourceManager::getInstance()->unloadAllByPriority(RP_LEVEL);
 }
 
@@ -271,11 +264,11 @@
 ErrorMessage World::load()
 {	
-  PRINTF0("> Loading world: '%s'\n", getPath());
-  
+  PRINTF(3)("> Loading world: '%s'\n", getPath());
+  TiXmlElement* element;
   GameLoader* loader = GameLoader::getInstance();
   
   if( getPath() == NULL)
     {
-      PRINTF0("World has no path specified for loading");
+      PRINTF(1)("World has no path specified for loading");
       return (ErrorMessage){213,"Path not specified","World::load()"};
     }
@@ -283,10 +276,8 @@
   TiXmlDocument* XMLDoc = new TiXmlDocument( path);
   // load the campaign document
-  if( !XMLDoc->LoadFile())
-    //this->glmis->step();
-  
+  if( !XMLDoc->LoadFile())  
   {
     // report an error
-    PRINTF0("Error loading XML File: %s @ %d:%d\n", XMLDoc->ErrorDesc(), XMLDoc->ErrorRow(), XMLDoc->ErrorCol());
+    PRINTF(1)("loading XML File: %s @ %d:%d\n", XMLDoc->ErrorDesc(), XMLDoc->ErrorRow(), XMLDoc->ErrorCol());
     delete XMLDoc;
     return (ErrorMessage){213,"XML File parsing error","World::load()"};
@@ -300,5 +291,5 @@
     {
       // report an error
-      PRINTF0("Specified XML File is not an orxonox world data file (WorldDataFile element missing)\n");
+      PRINTF(1)("Specified XML File is not an orxonox world data file (WorldDataFile element missing)\n");
       delete XMLDoc;
       return (ErrorMessage){213,"Path not a WorldDataFile","World::load()"};
@@ -311,5 +302,5 @@
   if( string == NULL)
     {
-      PRINTF0("World is missing a proper 'name'\n");
+      PRINTF(2)("World is missing a proper 'name'\n");
       string = "Unknown";
       temp = new char[strlen(string + 2)];
@@ -323,12 +314,28 @@
       this->worldName = temp;
     }
-  
-  
+  ////////////////
+  // LOADSCREEN //
+  ////////////////
+  element = root->FirstChildElement("LoadScreen");
+  if (element == NULL)
+    {
+      PRINTF(2)("no LoadScreen specified, loading default\n");
+
+      glmis->setBackgroundImage("pictures/load_screen.jpg");
+      this->glmis->setMaximum(8);
+      this->glmis->draw();
+    }
+  else
+    {
+      this->glmis->load(element);
+      this->glmis->draw();
+    }
+  this->glmis->draw();
   // find WorldEntities
-  TiXmlElement* element = root->FirstChildElement( "WorldEntities");
+  element = root->FirstChildElement("WorldEntities");
   
   if( element == NULL)
     {
-      PRINTF0("World is missing 'WorldEntities'\n");
+      PRINTF(1)("World is missing 'WorldEntities'\n");
     }
   else
@@ -336,5 +343,5 @@
       element = element->FirstChildElement();
       // load Players/Objects/Whatever
-      PRINTF0("Loading WorldEntities\n");
+      PRINTF(4)("Loading WorldEntities\n");
       while( element != NULL)
 	{
@@ -346,6 +353,7 @@
 	  if( element->Value() != NULL && !strcmp( element->Value(), "SkyBox")) sky = (SkyBox*) created;
 	  element = element->NextSiblingElement();
+	  glmis->step(); //! \todo temporary
 	}
-      PRINTF0("Done loading WorldEntities\n");
+      PRINTF(4)("Done loading WorldEntities\n");
     }
   
@@ -458,4 +466,5 @@
   tn->addChild(this->localCamera);
   localCamera->lookAt(tn);
+  localCamera->setMode(PNODE_MOVEMENT);
   this->localPlayer->setMode(PNODE_ALL);
   Vector* cameraOffset = new Vector (0, 5, -10);
@@ -472,5 +481,5 @@
   glEndList();
 
-  terrain = new Terrain("../data/worlds/newGround.obj");
+  terrain = new Terrain("worlds/newGround.obj");
   terrain->setRelCoor(Vector(0,-10,0));
   this->spawn(terrain);
@@ -604,5 +613,5 @@
 
 	// Create SkySphere
-	sky = new Skysphere("../data/pictures/sky-replace.jpg");
+	sky = new Skysphere("pictures/sky-replace.jpg");
 	this->localPlayer->addChild(this->sky);
 	this->spawn(this->sky);
@@ -649,5 +658,5 @@
 
 	// Create SkySphere
-	this->sky = new Skysphere("../data/pictures/sky-replace.jpg");
+	this->sky = new Skysphere("pictures/sky-replace.jpg");
 	this->sky->setName("SkySphere");
 	this->spawn(this->sky);
@@ -838,8 +847,8 @@
   
   //GLMenuImageScreen* 
-  this->glmis = GLMenuImageScreen::getInstance();
+  this->glmis = new GLMenuImageScreen();
   this->glmis->init();
   this->glmis->setMaximum(8);
-  this->glmis->draw();
+  //  this->glmis->draw();
  
   PRINTF(3)("World::displayLoadScreen - end\n"); 
@@ -855,6 +864,6 @@
   PRINTF(3)("World::releaseLoadScreen - start\n"); 
   this->glmis->setValue(this->glmis->getMaximum());
-  //SDL_Delay(500);
   PRINTF(3)("World::releaseLoadScreen - end\n"); 
+  delete this->glmis;
 }
 
@@ -1242,10 +1251,10 @@
 bool World::command(Command* cmd)
 {
-  if( !strcmp( cmd->cmd, "view0")) this->localCamera->setViewMode(VIEW_NORMAL);
-  else if( !strcmp( cmd->cmd, "view1")) this->localCamera->setViewMode(VIEW_BEHIND);
-  else if( !strcmp( cmd->cmd, "view2")) this->localCamera->setViewMode(VIEW_FRONT);
-  else if( !strcmp( cmd->cmd, "view3")) this->localCamera->setViewMode(VIEW_LEFT);
-  else if( !strcmp( cmd->cmd, "view4")) this->localCamera->setViewMode(VIEW_RIGHT);
-  else if( !strcmp( cmd->cmd, "view5")) this->localCamera->setViewMode(VIEW_TOP);
+  if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW0)) this->localCamera->setViewMode(VIEW_NORMAL);
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW1)) this->localCamera->setViewMode(VIEW_BEHIND);
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW2)) this->localCamera->setViewMode(VIEW_FRONT);
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW3)) this->localCamera->setViewMode(VIEW_LEFT);
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW4)) this->localCamera->setViewMode(VIEW_RIGHT);
+  else if( !strcmp( cmd->cmd, CONFIG_NAME_VIEW5)) this->localCamera->setViewMode(VIEW_TOP);
 
   return false;
@@ -1254,6 +1263,16 @@
 void World::setPath( const char* name)
 {
-  this->path = new char[strlen(name)+1];
-  strcpy(this->path, name);
+  if (this->path)
+    delete this->path;
+  if (ResourceManager::isFile(name))
+  {
+    this->path = new char[strlen(name)+1];
+    strcpy(this->path, name);
+  }
+  else
+    {
+      this->path = new char[strlen(ResourceManager::getInstance()->getDataDir()) + strlen(name) +1];
+      sprintf(this->path, "%s%s", ResourceManager::getInstance()->getDataDir(), name);
+    }
 }
 
Index: /orxonox/branches/md2_loader/src/subprojects/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/subprojects/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/subprojects/Makefile.in	(revision 4139)
@@ -113,4 +113,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/subprojects/benchmark.cc
===================================================================
--- /orxonox/branches/md2_loader/src/subprojects/benchmark.cc	(revision 4139)
+++ /orxonox/branches/md2_loader/src/subprojects/benchmark.cc	(revision 4139)
@@ -0,0 +1,470 @@
+/* 
+   orxonox - the future of 3D-vertical-scrollers
+
+   Copyright (C) 2004 orx
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2, or (at your option)
+   any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software Foundation,
+   Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  
+
+
+   ### File Specific:
+   main-programmer: Patrick Boenzli
+   co-programmer: ...
+
+*/
+
+
+#if defined __linux__ 
+
+#include "list.h"
+#include "world_entity.h"
+#include "vector.h"
+#include "player.h"
+#include "base_object.h"
+
+#include <asm/msr.h>
+#include <linux/timex.h>
+
+
+#define LIST_MAX 1000
+#define VECTOR_MAX 1000000
+#define ITERATIONS 10000
+
+
+int startBenchmarks()
+{
+
+  printf("===========================================================\n");
+  printf("=                      BENCHMARKS                         =\n");
+  printf("===========================================================\n");
+  printf(" the author is not paying any attention to cacheing effects\n");
+  printf(" of the CPU.\n\n");
+  printf("[title]\t\t\t\t\t     [cycles]\t[loops]\n\n");
+  //  printf("------------------------------------------------------------\n\n");
+
+  // first measure the time overhead:
+  unsigned long ini, end, dt, tmp;
+  rdtscl(ini); rdtscl(end);
+  dt = end - ini;
+
+  int type = -1; 
+  /* type   -1 == all 
+     type    0 == framework
+     type    1 == vector
+     type    2 == quaternion
+     type    3 == lists
+  */
+  if(type == 0 || type == -1)
+    {
+      /* framework test*/
+      
+      printf("Generating Objects:\t\t\t\t\t%i\n", ITERATIONS);
+      /* ************WorldEntity class test************** */
+      WorldEntity* w = NULL;
+      int i = 0;
+      unsigned long mittel = 0;
+      
+      for(i = 0; i < ITERATIONS; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  WorldEntity* w = new WorldEntity();
+	  
+	  rdtscl(end);
+	  delete w;
+	  mittel += (end - ini - dt);
+	}
+      float mi = mittel / (float)ITERATIONS;
+      printf(" Generate a WorldEntity object:\t\t%11.2f\n", mi);
+      
+      /*
+	mittel = 0;
+	for(i = 0; i < ITERATIONS; ++i)
+	{
+	rdtscl(ini);
+	
+	WorldEntity* w = new Primitive(P_SPHERE);
+	
+	rdtscl(end);
+	delete w;
+	mittel += (end - ini - dt);
+	}
+	mi = mittel / (float)ITERATIONS;
+	printf(" Generate a Primitive  object:\t\t%11.2f\n", mi);
+      */
+
+      mittel = 0;
+      for(i = 0; i < ITERATIONS; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  Vector* v = new Vector();
+	  
+	  rdtscl(end);
+	  delete v;
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)ITERATIONS;
+      printf(" Generate a Vector object:\t\t%11.2f\n", mi);
+
+
+     mittel = 0;
+      for(i = 0; i < ITERATIONS; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  Quaternion* q = new Quaternion();
+	  
+	  rdtscl(end);
+	  delete q;
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)ITERATIONS;
+      printf(" Generate a Quaternion object:\t\t%11.2f\n", mi);
+
+
+
+
+      printf("\nCalling function inline &| virtual, \t\t\t%i\n", ITERATIONS);
+      mittel = 0;
+      w = new WorldEntity();
+      for(i = 0; i < ITERATIONS; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  w->tick(0.0f);
+
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	  }
+      //delete w;
+      mi = mittel / (float)ITERATIONS;
+      printf(" Virt funct tick() of WE: \t\t%11.2f\n", mi);
+
+
+      mittel = 0;
+      WorldEntity wo;
+      for(i = 0; i < ITERATIONS; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  wo.tick(0.0f);
+	   
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	  }
+      //delete w;
+      mi = mittel / (float)ITERATIONS;
+      printf(" Inl virt funct tick() of WE v2: \t%11.2f\n", mi);
+
+      
+      mittel = 0;
+      BaseObject* bo = new BaseObject();
+      for(i = 0; i < ITERATIONS; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  bo->isFinalized();
+	   
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	  }
+      //delete w;
+      mi = mittel / (float)ITERATIONS;
+      printf(" Inl funct BaseObject::isFinazlized(): \t%11.2f\n", mi);
+
+      
+      tList<WorldEntity>* list = new tList<WorldEntity>();
+
+      
+      /* ************Primitvie class test************** */
+      list = new tList<WorldEntity>();
+ 
+      
+      /*
+	mittel = 0;
+	w = new Primitive(P_SPHERE);
+	for(i = 0; i < ITERATIONS; ++i)
+	{
+	rdtscl(ini);
+	
+	w->tick(0.0f);
+	
+	rdtscl(end);
+	mittel += (end - ini - dt);
+	}
+	mi = mittel / (float)ITERATIONS;
+	printf(" Call function tick() of Prim:\t\t%11.2f\n", mi);
+      */
+      
+    }
+  
+  if(type == 1 || type == -1)
+    {
+      printf("\nDoing some simple vector operations: \t\t\t%i\n", VECTOR_MAX);
+      /* vector test */
+      Vector* a = new Vector(1.3, 5.3, 4.1);
+      Vector* b = new Vector(0.4, 2.5, 6.2);
+      Vector* c = new Vector();
+      
+      unsigned long mittel, ini, end;
+      float mi;
+      int i = 0;
+      // addition
+      mittel = 0;
+      for(i = 0; i < VECTOR_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  *c = *a + *b;
+	   
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)VECTOR_MAX;
+      printf(" Addition of two vectors:\t\t%11.2f\n", mi);
+      
+      // multiplikation
+
+      mittel = 0;
+      for(i = 0; i < VECTOR_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  *c = a->cross( *b);
+	   
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)VECTOR_MAX;
+      printf(" CrossMult of two vectors:\t\t%11.2f\n", mi);
+
+    }
+  if( type == 2 || type == -1)
+    {
+      /* quaternion test */
+      printf("\nDoing some simple quaternion operations: \t\t%i\n", VECTOR_MAX);
+      /* vector test */
+      Quaternion* a = new Quaternion();
+      Quaternion* b = new Quaternion();
+      Quaternion* c = new Quaternion();
+      
+      unsigned long mittel, ini, end;
+      float mi;
+      int i = 0;
+      // quaternion generieren mit spez konstruktor
+      mittel = 0;
+      Vector* qa = new Vector(4.6, 9.3, 0.4);
+      Vector* qb = new Vector(3.5, 6.1, 4.3);
+      for(i = 0; i < VECTOR_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  Quaternion* qu = new Quaternion(*qa, *qb);
+	  
+	  rdtscl(end);
+	  delete qu;
+	  mittel += (end - ini - dt);
+	}
+      delete a;
+      delete b;
+      mi = mittel / (float)VECTOR_MAX;
+      printf(" Gen. quatern. betw. two vectors:\t%11.2f\n", mi);
+      
+      
+      // multiplication
+      mittel = 0;
+      for(i = 0; i < VECTOR_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  *c = *a * *b;
+	  
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)VECTOR_MAX;
+      printf(" Multiplying two quat.(=rot): a * b\t%11.2f\n", mi);
+      
+      
+      
+      // rotating a vector by a quaternion
+      mittel = 0;
+      for(i = 0; i < VECTOR_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  *qa = a->apply(*qb);
+	  
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)VECTOR_MAX;
+      printf(" Rot a vec by a quat: q->apply(v)\t%11.2f\n", mi);
+      
+      
+      
+      // generate rotation matrix
+      mittel = 0;
+      float matrix[4][4];
+      for(i = 0; i < VECTOR_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  a->matrix(matrix);
+	  
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)VECTOR_MAX;
+      printf(" Generate rot matrix: q->matrix(m)\t%11.2f\n", mi);
+    }
+  if( type == 3 || type == -1)
+    {
+      /* list tests*/
+      printf("\nList operations tests: \t\t\t\t\t%i\n", LIST_MAX);
+      tList<char>* list = new tList<char>();
+      char* name;
+      
+      printf(" Adding[1..10] elements to list, found:\n");
+      list->add("1");
+      list->add("2");
+      list->add("3");
+      list->add("4");
+      list->add("5");
+      list->add("6");
+      list->add("7");
+      list->add("8");
+      list->add("9");
+      list->add("10");
+      
+      /*give list out */
+      tIterator<char>* iterator = list->getIterator();
+      name = iterator->nextElement();
+      printf("  List Elements: \t\t");
+      while( name != NULL)
+	{
+	  printf("%s,", name);
+	  name = iterator->nextElement();
+	}
+      delete iterator;
+      printf("\n");
+      
+      
+      /*removing some elements from the list*/
+      printf(" Removing elements [2,3,6,8,10], adding [11] now found:\n");
+      list->remove("2");
+      list->remove("3");
+      list->remove("6");
+      list->remove("8");
+      list->remove("10");
+      list->add("11");
+      /*give list out */
+      iterator = list->getIterator();
+      name = iterator->nextElement();
+      printf("  List Elements: \t\t");
+      while( name != NULL)
+	{
+	  printf("%s,", name);
+	  name = iterator->nextElement();
+	}
+      delete iterator;
+      printf("\n");
+      
+      delete list;
+      printf("\nChecking list performance:\t\t\t\t%i\n", LIST_MAX);
+      
+      tList<int>* plist = new tList<int>();
+      unsigned long mittel, ini, end;
+      float mi;
+      int i = 0;
+      mittel = 0;
+      for(i = 0; i < LIST_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  plist->add(&i);
+	  
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)LIST_MAX;
+      printf(" Adding reference to list:\t\t%11.2f\n", mi);
+      
+      mittel = 0;
+      for(i = 0; i < LIST_MAX; ++i)
+	{
+	  rdtscl(ini);
+	  
+	  plist->remove(&i);
+	  
+	  rdtscl(end);
+	  mittel += (end - ini - dt);
+	}
+      mi = mittel / (float)LIST_MAX;
+      printf(" Removing 1st reference from list:\t%11.2f\n", mi);
+      
+
+      printf("\nList operations tests: \t\t\t\t\t%i\n", LIST_MAX);
+      list = new tList<char>();
+      printf(" Adding[1..10] elements to list, found:\n");
+      list->add("1");
+      list->add("2");
+      list->add("3");
+      list->add("4");
+      list->add("5");
+      list->add("6");
+      list->add("7");
+      list->add("8");
+      list->add("9");
+      list->add("10");
+      
+      /*give list out */
+      iterator = list->getIterator();
+      name = iterator->nextElement();
+      printf("  List Elements: \t\t");
+      while( name != NULL)
+	{
+	  printf("%s,", name);
+	  name = iterator->nextElement();
+	}
+      delete iterator;
+      printf("\n");
+      
+      
+      int c = 0;
+      printf(" Going trough list with nextElement(el) func: ");
+      name = list->firstElement();
+      while(c < 20)
+	{
+	  printf("%s,", name);
+	  name = list->nextElement(name);
+	  c++;
+	}
+      printf("\n");
+      
+
+      
+    }
+  
+}
+
+#else
+
+int startBenchmarks()
+{
+  PRINTF(1)("Benchmark is not implemented in this system\n");
+}
+
+#endif
Index: /orxonox/branches/md2_loader/src/subprojects/benchmark.h
===================================================================
--- /orxonox/branches/md2_loader/src/subprojects/benchmark.h	(revision 4139)
+++ /orxonox/branches/md2_loader/src/subprojects/benchmark.h	(revision 4139)
@@ -0,0 +1,13 @@
+/*! 
+    \file benchmark.h
+    \brief benchmark functions
+*/ 
+
+
+#ifndef _BENCHMARK_H
+#define _BENCHMARK_H
+
+int startBenchmarks(void);
+
+
+#endif /* _BENCHMARK_H */
Index: /orxonox/branches/md2_loader/src/subprojects/testmain/Makefile.in
===================================================================
--- /orxonox/branches/md2_loader/src/subprojects/testmain/Makefile.in	(revision 4138)
+++ /orxonox/branches/md2_loader/src/subprojects/testmain/Makefile.in	(revision 4139)
@@ -128,4 +128,5 @@
 PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
 RANLIB = @RANLIB@
 SET_MAKE = @SET_MAKE@
Index: /orxonox/branches/md2_loader/src/util/object_manager.h
===================================================================
--- /orxonox/branches/md2_loader/src/util/object_manager.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/util/object_manager.h	(revision 4139)
@@ -16,4 +16,10 @@
 #include "base_object.h"
 
+#define OM_
+
+class WorldEntity;
+
+
+template<class T> class tList; 
 
 //! the object manager itself
@@ -24,7 +30,13 @@
   virtual ~ObjectManager(void);
 
+  void preLoad();
+
  private:
   ObjectManager(void);
   static ObjectManager* singletonRef;
+
+  tList<WorldEntity>* projectileBuffer;            //!< a list of projectiles that is generated at the beginning to make orx faster
+
+
 };
 
Index: /orxonox/branches/md2_loader/src/util/resource_manager.cc
===================================================================
--- /orxonox/branches/md2_loader/src/util/resource_manager.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/util/resource_manager.cc	(revision 4139)
@@ -100,4 +100,24 @@
       return false;
     }
+}
+
+/**
+   \brief checks for the DataDirectory, by looking if 
+   \param fileInside is inisde??
+*/
+bool ResourceManager::checkDataDir(const char* fileInside)
+{
+  bool retVal;
+  if (!isDir(this->dataDir))
+    {
+      PRINTF(1)("%s is not a directory\n", this->dataDir);
+      return false;
+    }
+  
+  char* testFile = new char[strlen(this->dataDir)+strlen(fileInside)+1];
+  sprintf(testFile, "%s%s", this->dataDir, fileInside);
+  retVal = isFile(testFile);
+  delete testFile;
+  return retVal;
 }
 
@@ -183,5 +203,5 @@
   // searching if the resource was loaded before.
   Resource* tmpResource = this->locateResourceByInfo(fileName, type, param1, param2,param3);
-  if (tmpResource) // if the resource was not loaded before.
+  if (tmpResource) // if the resource was loaded before.
     {
       PRINTF(4)("not loading cached resource %s\n", tmpResource->name);
@@ -202,7 +222,6 @@
 
       // creating the full name. (directoryName + FileName)
-      char* fullName = new char[strlen(dataDir)+strlen(fileName)+1];
-      sprintf(fullName, "%s%s", this->dataDir, fileName);
-      
+      char* fullName = new char[strlen(this->getDataDir())+strlen(fileName)+1];
+      sprintf(fullName, "%s%s", this->getDataDir(), fileName);
       // Checking for the type of resource \see ResourceType
       switch(type)
@@ -214,5 +233,5 @@
 	    tmpResource->modelSize = 1.0;
 
-	  if(isFile(fullName))
+	  if(ResourceManager::isFile(fullName))
 	    tmpResource->pointer = new OBJModel(fullName, tmpResource->modelSize);
 	  else
Index: /orxonox/branches/md2_loader/src/util/resource_manager.h
===================================================================
--- /orxonox/branches/md2_loader/src/util/resource_manager.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/util/resource_manager.h	(revision 4139)
@@ -65,4 +65,7 @@
 
   bool setDataDir(const char* dataDir);
+  /** \returns the Name of the data directory */
+  inline const char*  getDataDir(void) {return this->dataDir;}
+  bool checkDataDir(const char* fileInside);
   bool addImageDir(char* imageDir);
   void* load(const char* fileName, ResourcePriority prio = RP_NO,
Index: /orxonox/branches/md2_loader/src/world_entities/environment.cc
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/environment.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/environment.cc	(revision 4139)
@@ -30,5 +30,4 @@
 {
   this->model = (Model*) ResourceManager::getInstance()->load("cube", RP_LEVEL);
-  //  this->model = new OBJModel("../data/models/fighter.obj");
 }
 
Index: /orxonox/branches/md2_loader/src/world_entities/player.cc
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/player.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/player.cc	(revision 4139)
@@ -82,37 +82,4 @@
 Player::Player(TiXmlElement* root) : WorldEntity(root)
 {
-  /*
-    char* temp;
-    const char* string;
-    string = grabParameter( root, "name");
-    if( string == NULL)
-    {
-    PRINTF0("Player is missing a proper 'name'\n");
-    string = "Unknown";
-    temp = new char[strlen(string + 2)];
-    strcpy( temp, string);
-    this->setName( temp);
-    }
-    else
-    {
-    temp = new char[strlen(string + 2)];
-    strcpy( temp, string);
-    this->setName( temp);
-    }
-    
-    this->model = NULL;
-    string = grabParameter( root, "model");
-    if( string != NULL)
-    this->model = (Model*)ResourceManager::getInstance()->load(string, OBJ, RP_CAMPAIGN);
-    else
-    {
-    PRINTF0("Player is missing a proper 'model'\n");
-    this->model = (Model*)ResourceManager::getInstance()->load("models/reaplow.obj", OBJ, RP_CAMPAIGN);
-    }
-    if( this->model == NULL)
-    {
-    PRINTF0("Player model '%s' could not be loaded\n", string);
-    }
-  */
   this->weapons = new tList<Weapon>();
   this->activeWeapon = NULL;
@@ -294,9 +261,9 @@
 {
   PRINTF(3)("recieved command [%s]\n", cmd->cmd);
-  if( !strcmp( cmd->cmd, "up")) this->bUp = !cmd->bUp;
-  if( !strcmp( cmd->cmd, "down")) this->bDown = !cmd->bUp;
-  if( !strcmp( cmd->cmd, "left")) this->bLeft = !cmd->bUp;
-  if( !strcmp( cmd->cmd, "right")) this->bRight = !cmd->bUp;
-  if( !strcmp( cmd->cmd, "fire")) this->bFire = !cmd->bUp;
-  if( !strcmp( cmd->cmd, "mode")) if(cmd->bUp) this->bWeaponChange = !this->bWeaponChange;
-}
+  if( !strcmp( cmd->cmd, CONFIG_NAME_PLAYER_UP)) this->bUp = !cmd->bUp;
+  if( !strcmp( cmd->cmd, CONFIG_NAME_PLAYER_DOWN)) this->bDown = !cmd->bUp;
+  if( !strcmp( cmd->cmd, CONFIG_NAME_PLAYER_LEFT)) this->bLeft = !cmd->bUp;
+  if( !strcmp( cmd->cmd, CONFIG_NAME_PLAYER_RIGHT)) this->bRight = !cmd->bUp;
+  if( !strcmp( cmd->cmd, CONFIG_NAME_PLAYER_FIRE)) this->bFire = !cmd->bUp;
+  if( !strcmp( cmd->cmd, CONFIG_NAME_PLAYER_NEXT_WEAPON)) if(cmd->bUp) this->bWeaponChange = !this->bWeaponChange;
+}
Index: /orxonox/branches/md2_loader/src/world_entities/skybox.cc
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/skybox.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/skybox.cc	(revision 4139)
@@ -66,5 +66,5 @@
       PRINTF(0)("SkyBox is missing a proper 'MaterialSet'\n");
     }
-  if( this->model == NULL)
+  if( this->skyModel == NULL)
     {
       PRINTF(0)("SkyBox model '%s' could not be loaded\n", string);
@@ -76,6 +76,7 @@
 {
   this->setClassName("SkyBox");
+  this->skyModel = NULL;
   this->material = new Material*[6];
-  for (int i = 0; i <6; i++) 
+  for (int i = 0; i < 6; i++) 
     {
       this->material[i] = new Material();
@@ -100,5 +101,5 @@
 SkyBox::~SkyBox()
 {
-  PRINTF(5)("Deleting the SkyBox\n");
+  PRINTF(5)("Deleting SkyBox\n");
   for (int i = 0; i < 6; i++)
     delete this->material[i];
@@ -179,5 +180,5 @@
   glTranslatef(r.x, r.y, r.z);
 
-  this->model->draw();
+  this->skyModel->draw();
 
   glPopMatrix();
@@ -192,42 +193,42 @@
 void SkyBox::rebuild()
 {
-  if (this->model)
-    delete model;
-  model = new Model();
-
-  model->addVertex (-0.5*size, -0.5*size, 0.5*size);  
-  model->addVertex (0.5*size, -0.5*size, 0.5*size);
-  model->addVertex (-0.5*size, 0.5*size, 0.5*size);
-  model->addVertex (0.5*size, 0.5*size, 0.5*size);
-  model->addVertex (-0.5*size, 0.5*size, -0.5*size);
-  model->addVertex (0.5*size, 0.5*size, -0.5*size);
-  model->addVertex (-0.5*size, -0.5*size, -0.5*size);
-  model->addVertex (0.5*size, -0.5*size, -0.5*size);
-
-  model->addVertexTexture (0.0, 0.0);
-  model->addVertexTexture (1.0, 0.0);
-  model->addVertexTexture (1.0, 1.0);
-  model->addVertexTexture (0.0, 1.0);
-
-  model->addVertexNormal (0.0, 0.0, 1.0);
-  model->addVertexNormal (0.0, 1.0, 0.0);
-  model->addVertexNormal (0.0, 0.0, -1.0);
-  model->addVertexNormal (0.0, -1.0, 0.0);
-  model->addVertexNormal (1.0, 0.0, 0.0);
-  model->addVertexNormal (-1.0, 0.0, 0.0);
-
-  model->setMaterial(material[0]);
-  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 3,2,4, 4,3,4, 6,4,4, 5,1,4); // top
-  model->setMaterial(material[1]);
-  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 7,4,2, 8,1,2, 2,2,2, 1,3,2); // bottom
-  model->setMaterial(material[2]);
-  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 1,1,3, 2,2,3, 4,3,3, 3,4,3); // left
-  model->setMaterial(material[3]);
-  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 5,3,1, 6,4,1, 8,1,1, 7,2,1); // right
-  model->setMaterial(material[4]);
-  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 2,1,6, 8,2,6, 6,3,6, 4,4,6); // front
-  model->setMaterial(material[5]);
-  model->addFace (4, VERTEX_TEXCOORD_NORMAL, 7,1,5, 1,2,5, 3,3,5, 5,4,5); // back
+  if (this->skyModel)
+    delete skyModel;
+  skyModel = new Model();
+
+  this->skyModel->addVertex (-0.5*size, -0.5*size, 0.5*size);  
+  this->skyModel->addVertex (0.5*size, -0.5*size, 0.5*size);
+  this->skyModel->addVertex (-0.5*size, 0.5*size, 0.5*size);
+  this->skyModel->addVertex (0.5*size, 0.5*size, 0.5*size);
+  this->skyModel->addVertex (-0.5*size, 0.5*size, -0.5*size);
+  this->skyModel->addVertex (0.5*size, 0.5*size, -0.5*size);
+  this->skyModel->addVertex (-0.5*size, -0.5*size, -0.5*size);
+  this->skyModel->addVertex (0.5*size, -0.5*size, -0.5*size);
+
+  this->skyModel->addVertexTexture (0.0, 0.0);
+  this->skyModel->addVertexTexture (1.0, 0.0);
+  this->skyModel->addVertexTexture (1.0, 1.0);
+  this->skyModel->addVertexTexture (0.0, 1.0);
+
+  this->skyModel->addVertexNormal (0.0, 0.0, 1.0);
+  this->skyModel->addVertexNormal (0.0, 1.0, 0.0);
+  this->skyModel->addVertexNormal (0.0, 0.0, -1.0);
+  this->skyModel->addVertexNormal (0.0, -1.0, 0.0);
+  this->skyModel->addVertexNormal (1.0, 0.0, 0.0);
+  this->skyModel->addVertexNormal (-1.0, 0.0, 0.0);
+
+  this->skyModel->setMaterial(material[0]);
+  this->skyModel->addFace (4, VERTEX_TEXCOORD_NORMAL, 2,1,3, 3,2,3, 5,3,3, 4,0,3); // top
+  this->skyModel->setMaterial(material[1]);
+  this->skyModel->addFace (4, VERTEX_TEXCOORD_NORMAL, 6,3,1, 7,0,1, 1,1,1, 0,2,1); // bottom
+  this->skyModel->setMaterial(material[2]);
+  this->skyModel->addFace (4, VERTEX_TEXCOORD_NORMAL, 0,0,2, 1,1,2, 3,2,2, 2,3,2); // left
+  this->skyModel->setMaterial(material[3]);
+  this->skyModel->addFace (4, VERTEX_TEXCOORD_NORMAL, 4,2,0, 5,3,0, 7,0,0, 6,1,0); // right
+  this->skyModel->setMaterial(material[4]);
+  this->skyModel->addFace (4, VERTEX_TEXCOORD_NORMAL, 1,0,5, 7,1,5, 5,2,5, 3,3,6); // front
+  this->skyModel->setMaterial(material[5]);
+  this->skyModel->addFace (4, VERTEX_TEXCOORD_NORMAL, 6,0,4, 0,1,4, 2,2,4, 4,3,4); // back
   
-  model->finalize();
-}
+  this->skyModel->finalize();
+}
Index: /orxonox/branches/md2_loader/src/world_entities/skybox.h
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/skybox.h	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/skybox.h	(revision 4139)
@@ -39,4 +39,5 @@
   void rebuild();
 
+  Model* skyModel;        //!< A Model for the Sky. This must not be the same as the Model from WorldEntity, because it is not alocated through the ResourceManager.
   Material **material;    //!< Materials for the SkyBox. sorted by number (0-5) top, bottom, left, right, front, back
   float size;             //!< Size of the SkyBox. This should match the frustum maximum range.
Index: /orxonox/branches/md2_loader/src/world_entities/skysphere.cc
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/skysphere.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/skysphere.cc	(revision 4139)
@@ -44,5 +44,5 @@
 {
   if (fileName == NULL)
-    this->initialize("../data/pictures/sky-replace.jpg");
+    this->initialize("pictures/sky-replace.jpg");
   else
     this->initialize(fileName);
Index: /orxonox/branches/md2_loader/src/world_entities/terrain.cc
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/terrain.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/terrain.cc	(revision 4139)
@@ -77,7 +77,7 @@
 void Terrain::init(void)
 {
-   this->setClassName ("Terrain");
-
-   this->objectList = 0;
+  this->setClassName ("Terrain");
+  
+  this->objectList = 0;
 }
 
@@ -98,9 +98,8 @@
   glMultMatrixf((float*)matrix);
 
-  if (objectList)
-    glCallList(objectList);
-  else if (model)
-    model->draw();
-  //  this->model->draw();
+  if (this->objectList)
+    glCallList(this->objectList);
+  else if (this->model)
+    this->model->draw();
   glPopMatrix();
 }
Index: /orxonox/branches/md2_loader/src/world_entities/world_entity.cc
===================================================================
--- /orxonox/branches/md2_loader/src/world_entities/world_entity.cc	(revision 4138)
+++ /orxonox/branches/md2_loader/src/world_entities/world_entity.cc	(revision 4139)
@@ -30,11 +30,4 @@
 /**
    \brief standard constructor
-   
-   Every derived contructor HAS to call the previous one supplying the isFree parameter. This is necessary to distunguish
-   between free and bound entities. The difference between them is simply the fact that the movement of a free entity is
-   not bound to the track of a world. Use this to implement projectile or effect classes that do not have to travel along the track.
-   To specify an entity to be free or bound set the default parameter in the declaration of the constructor.
-   Theoretically you should never have to call the constructor of an Entity directly, for it is called by the spawn() function of the World
-   class. So if you want to create a new entity at any time, call World::spawn(). It will handle everything that is necessary.
 */
 WorldEntity::WorldEntity ()
@@ -46,4 +39,7 @@
 }
 
+/**
+   \brief Loads the WordEntity-specific Part of any derived Class
+*/
 WorldEntity::WorldEntity(TiXmlElement* root)
 {
@@ -54,5 +50,5 @@
   if( string == NULL)
     {
-      PRINTF(0)("WorldEntity is missing a proper 'name'\n");
+      PRINTF(2)("WorldEntity is missing a proper 'name'\n");
       string = "Unknown";
       temp = new char[strlen(string + 2)];
@@ -73,12 +69,11 @@
   else
     {
-      PRINTF(0)("WorldEntity is missing a proper 'model'\n");
+      PRINTF(2)("WorldEntity is missing a proper 'model'\n");
       this->model = NULL;
     }
   if( this->model == NULL)
     {
-      PRINTF(0)("WorldEntity model '%s' could not be loaded\n", string);
-    }
-
+      PRINTF(2)("WorldEntity model '%s' could not be loaded\n", string);
+    }
   this->bDraw = true;
 }
