Index: branches/world_entities/src/util/Makefile.am
===================================================================
--- branches/world_entities/src/util/Makefile.am	(revision 5527)
+++ branches/world_entities/src/util/Makefile.am	(revision 5558)
@@ -5,4 +5,5 @@
 
 libORXutils_a_SOURCES = fast_factory.cc \
+                        loading/factory.cc \
 			garbage_collector.cc \
 			state.cc \
@@ -12,7 +13,7 @@
 			animation/animation_player.cc \
 			loading/resource_manager.cc \
-			loading/factory.cc \
 			loading/game_loader.cc \
 			loading/load_param.cc \
+			loading/load_param_description.cc \
 			track/pilot_node.cc \
 			track/track_manager.cc \
@@ -31,4 +32,5 @@
 			loading/game_loader.h \
 			loading/load_param.h \
+			loading/load_param_description.h \
 			track/pilot_node.h \
 			track/track_manager.h \
Index: branches/world_entities/src/util/Makefile.in
===================================================================
--- branches/world_entities/src/util/Makefile.in	(revision 5527)
+++ branches/world_entities/src/util/Makefile.in	(revision 5558)
@@ -54,10 +54,10 @@
 libORXutils_a_AR = $(AR) $(ARFLAGS)
 libORXutils_a_LIBADD =
-am_libORXutils_a_OBJECTS = fast_factory.$(OBJEXT) \
+am_libORXutils_a_OBJECTS = fast_factory.$(OBJEXT) factory.$(OBJEXT) \
 	garbage_collector.$(OBJEXT) state.$(OBJEXT) \
 	user_control.$(OBJEXT) animation3d.$(OBJEXT) \
 	animation.$(OBJEXT) animation_player.$(OBJEXT) \
-	resource_manager.$(OBJEXT) factory.$(OBJEXT) \
-	game_loader.$(OBJEXT) load_param.$(OBJEXT) \
+	resource_manager.$(OBJEXT) game_loader.$(OBJEXT) \
+	load_param.$(OBJEXT) load_param_description.$(OBJEXT) \
 	pilot_node.$(OBJEXT) track_manager.$(OBJEXT) \
 	track_node.$(OBJEXT)
@@ -190,4 +190,5 @@
 noinst_LIBRARIES = libORXutils.a
 libORXutils_a_SOURCES = fast_factory.cc \
+                        loading/factory.cc \
 			garbage_collector.cc \
 			state.cc \
@@ -197,7 +198,7 @@
 			animation/animation_player.cc \
 			loading/resource_manager.cc \
-			loading/factory.cc \
 			loading/game_loader.cc \
 			loading/load_param.cc \
+			loading/load_param_description.cc \
 			track/pilot_node.cc \
 			track/track_manager.cc \
@@ -216,4 +217,5 @@
 			loading/game_loader.h \
 			loading/load_param.h \
+			loading/load_param_description.h \
 			track/pilot_node.h \
 			track/track_manager.h \
@@ -233,7 +235,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/util/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/util/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/util/Makefile
+	  $(AUTOMAKE) --foreign  src/util/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@@ -275,4 +277,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/garbage_collector.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_param.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_param_description.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pilot_node.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resource_manager.Po@am__quote@
@@ -296,4 +299,18 @@
 @am__fastdepCXX_FALSE@	$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
 
+factory.o: loading/factory.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT factory.o -MD -MP -MF "$(DEPDIR)/factory.Tpo" -c -o factory.o `test -f 'loading/factory.cc' || echo '$(srcdir)/'`loading/factory.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/factory.Tpo" "$(DEPDIR)/factory.Po"; else rm -f "$(DEPDIR)/factory.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loading/factory.cc' object='factory.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o factory.o `test -f 'loading/factory.cc' || echo '$(srcdir)/'`loading/factory.cc
+
+factory.obj: loading/factory.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT factory.obj -MD -MP -MF "$(DEPDIR)/factory.Tpo" -c -o factory.obj `if test -f 'loading/factory.cc'; then $(CYGPATH_W) 'loading/factory.cc'; else $(CYGPATH_W) '$(srcdir)/loading/factory.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/factory.Tpo" "$(DEPDIR)/factory.Po"; else rm -f "$(DEPDIR)/factory.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loading/factory.cc' object='factory.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o factory.obj `if test -f 'loading/factory.cc'; then $(CYGPATH_W) 'loading/factory.cc'; else $(CYGPATH_W) '$(srcdir)/loading/factory.cc'; fi`
+
 animation3d.o: animation/animation3d.cc
 @am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT animation3d.o -MD -MP -MF "$(DEPDIR)/animation3d.Tpo" -c -o animation3d.o `test -f 'animation/animation3d.cc' || echo '$(srcdir)/'`animation/animation3d.cc; \
@@ -352,18 +369,4 @@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o resource_manager.obj `if test -f 'loading/resource_manager.cc'; then $(CYGPATH_W) 'loading/resource_manager.cc'; else $(CYGPATH_W) '$(srcdir)/loading/resource_manager.cc'; fi`
 
-factory.o: loading/factory.cc
-@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT factory.o -MD -MP -MF "$(DEPDIR)/factory.Tpo" -c -o factory.o `test -f 'loading/factory.cc' || echo '$(srcdir)/'`loading/factory.cc; \
-@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/factory.Tpo" "$(DEPDIR)/factory.Po"; else rm -f "$(DEPDIR)/factory.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loading/factory.cc' object='factory.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o factory.o `test -f 'loading/factory.cc' || echo '$(srcdir)/'`loading/factory.cc
-
-factory.obj: loading/factory.cc
-@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT factory.obj -MD -MP -MF "$(DEPDIR)/factory.Tpo" -c -o factory.obj `if test -f 'loading/factory.cc'; then $(CYGPATH_W) 'loading/factory.cc'; else $(CYGPATH_W) '$(srcdir)/loading/factory.cc'; fi`; \
-@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/factory.Tpo" "$(DEPDIR)/factory.Po"; else rm -f "$(DEPDIR)/factory.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loading/factory.cc' object='factory.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o factory.obj `if test -f 'loading/factory.cc'; then $(CYGPATH_W) 'loading/factory.cc'; else $(CYGPATH_W) '$(srcdir)/loading/factory.cc'; fi`
-
 game_loader.o: loading/game_loader.cc
 @am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT game_loader.o -MD -MP -MF "$(DEPDIR)/game_loader.Tpo" -c -o game_loader.o `test -f 'loading/game_loader.cc' || echo '$(srcdir)/'`loading/game_loader.cc; \
@@ -393,4 +396,18 @@
 @AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o load_param.obj `if test -f 'loading/load_param.cc'; then $(CYGPATH_W) 'loading/load_param.cc'; else $(CYGPATH_W) '$(srcdir)/loading/load_param.cc'; fi`
+
+load_param_description.o: loading/load_param_description.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT load_param_description.o -MD -MP -MF "$(DEPDIR)/load_param_description.Tpo" -c -o load_param_description.o `test -f 'loading/load_param_description.cc' || echo '$(srcdir)/'`loading/load_param_description.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/load_param_description.Tpo" "$(DEPDIR)/load_param_description.Po"; else rm -f "$(DEPDIR)/load_param_description.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loading/load_param_description.cc' object='load_param_description.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o load_param_description.o `test -f 'loading/load_param_description.cc' || echo '$(srcdir)/'`loading/load_param_description.cc
+
+load_param_description.obj: loading/load_param_description.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT load_param_description.obj -MD -MP -MF "$(DEPDIR)/load_param_description.Tpo" -c -o load_param_description.obj `if test -f 'loading/load_param_description.cc'; then $(CYGPATH_W) 'loading/load_param_description.cc'; else $(CYGPATH_W) '$(srcdir)/loading/load_param_description.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/load_param_description.Tpo" "$(DEPDIR)/load_param_description.Po"; else rm -f "$(DEPDIR)/load_param_description.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='loading/load_param_description.cc' object='load_param_description.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@	$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o load_param_description.obj `if test -f 'loading/load_param_description.cc'; then $(CYGPATH_W) 'loading/load_param_description.cc'; else $(CYGPATH_W) '$(srcdir)/loading/load_param_description.cc'; fi`
 
 pilot_node.o: track/pilot_node.cc
Index: branches/world_entities/src/util/loading/game_loader.cc
===================================================================
--- branches/world_entities/src/util/loading/game_loader.cc	(revision 5527)
+++ branches/world_entities/src/util/loading/game_loader.cc	(revision 5558)
@@ -89,4 +89,5 @@
   this->eventHandler = EventHandler::getInstance();
   this->eventHandler->subscribe(this, ES_GAME, KeyMapper::PEV_PAUSE);
+  this->eventHandler->subscribe(this, ES_ALL, EV_MAIN_QUIT);          //< External Quit Event
   this->eventHandler->subscribe(this, ES_ALL, KeyMapper::PEV_QUIT);
   this->eventHandler->subscribe(this, ES_GAME, KeyMapper::PEV_NEXT_WORLD);
@@ -274,35 +275,37 @@
  *  handle keyboard commands
  * @param event the event to handle
-*/
+ */
 void GameLoader::process(const Event& event)
 {
   if( event.type == KeyMapper::PEV_NEXT_WORLD)
-    {
-      if( likely(event.bPressed))
-        {
-          this->nextLevel();
-        }
-    }
+  {
+    if( likely(event.bPressed))
+    {
+      this->nextLevel();
+    }
+  }
   else if( event.type == KeyMapper::PEV_PREVIOUS_WORLD)
-    {
-      if( likely(event.bPressed))
-        {
-          this->previousLevel();
-        }
-    }
+  {
+    if( likely(event.bPressed))
+    {
+      this->previousLevel();
+    }
+  }
   else if( event.type == KeyMapper::PEV_PAUSE)
-    {
-      if( likely(event.bPressed))
-        {
-          if(this->isPaused)
-            this->resume();
-          else
-            this->pause();
-        }
-    }
+  {
+    if( likely(event.bPressed))
+    {
+      if(this->isPaused)
+        this->resume();
+      else
+        this->pause();
+    }
+  }
   else if( event.type == KeyMapper::PEV_QUIT)
-    {
-      if( event.bPressed) this->stop();
-    }
+  {
+    if( event.bPressed) this->stop();
+  }
+  else if (event.type == EV_MAIN_QUIT)
+    this->stop();
 }
 
Index: branches/world_entities/src/util/loading/load_param.cc
===================================================================
--- branches/world_entities/src/util/loading/load_param.cc	(revision 5527)
+++ branches/world_entities/src/util/loading/load_param.cc	(revision 5558)
@@ -17,7 +17,7 @@
 
 #include "load_param.h"
+#include "load_param_description.h"
 
 #include "list.h"
-#include "base_object.h"
 
 #include <stdarg.h>
@@ -31,5 +31,5 @@
  * @param ...: the parameter information (1. Parameter, 2. Default Value for the Parameter, ...)
 */
-BaseLoadParam::BaseLoadParam(const TiXmlElement* root, BaseObject* object, const char* paramName,
+LoadParamBase::LoadParamBase(const TiXmlElement* root, BaseObject* object, const char* paramName,
                              int paramCount, bool multi, const void* pointerToParam, ...)
 {
@@ -39,5 +39,5 @@
   this->pointerToParam = pointerToParam;
 
-  if (paramCount == 0 || this->pointerToParam)
+  if (paramCount == 0 || this->pointerToParam != NULL)
     this->loadString = "none";
   else
@@ -110,5 +110,5 @@
  * @returns a pointer to itself.
 */
-BaseLoadParam* BaseLoadParam::describe(const char* descriptionText)
+LoadParamBase* LoadParamBase::describe(const char* descriptionText)
 {
   if (LoadClassDescription::parametersDescription && this->paramDesc && !this->paramDesc->getDescription())
@@ -117,287 +117,4 @@
     }
   return this;
-}
-
-/**
- * @param paramName the name of the parameter to load
-*/
-LoadParamDescription::LoadParamDescription(const char* paramName)
-{
-  this->types = NULL;
-  this->description = NULL;
-  this->defaultValues = NULL;
-  this->paramName = new char[strlen(paramName)+1];
-  strcpy(this->paramName, paramName);
-}
-
-/**
- *  removes all the alocated memory
-*/
-LoadParamDescription::~LoadParamDescription()
-{
-  if (this->defaultValues != NULL)
-  {
-    for(int i = 0; i < this->paramCount; i++)
-    {
-      delete[] this->defaultValues[i];
-    }
-  }
-
-  delete[] this->types;
-  delete[] this->defaultValues;
-  delete[] this->paramName;
-  delete[] this->description;
-}
-
-/**
- * @param descriptionText The text to set as a description for this Parameter
-*/
-void LoadParamDescription::setDescription(const char* descriptionText)
-{
-  this->description = new char[strlen(descriptionText)+1];
-  strcpy(this->description, descriptionText);
-}
-
-/**
- *  prints out this parameter, its input method and the description (if availiable)
-*/
-void LoadParamDescription::print() const
-{
-  PRINT(3)(" <%s>", this->paramName);
-  for (int i = 0; i < this->paramCount; i++)
-    {
-      if (i > 0)
-        PRINT(3)(",");
-      switch (this->types[i])
-      {
-        default:
-          PRINTF(3)("none");
-          break;
-        case ParameterBool:
-          PRINT(3)("bool");
-          break;
-        case ParameterChar:
-          PRINT(3)("char");
-          break;
-        case ParameterString:
-          PRINT(3)("string");
-          break;
-        case ParameterInt:
-          PRINT(3)("int");
-          break;
-        case ParameterUInt:
-          PRINT(3)("Uint");
-          break;
-        case ParameterFloat:
-          PRINT(3)("float");
-          break;
-        case ParameterLong:
-          PRINT(3)("long");
-          break;
-        case ParameterXML:
-          PRINT(3)("XML");
-          break;
-      }
-    }
-  PRINT(3)("</%s>", this->paramName);
-  if (this->description)
-    PRINT(3)(" -- %s", this->description);
-  // default values
-  if (this->paramCount > 0)
-  {
-    PRINT(3)(" (Default: ");
-    for (int i = 0; i < this->paramCount; i++)
-    {
-      if (i > 0)
-        PRINT(3)(", ");
-      if (this->types[i] & ParameterString)
-      { // leave brackets !!
-        PRINT(3)("\"%s\"", this->defaultValues[i]);
-      }
-      else
-      {
-        PRINT(3)("%s", this->defaultValues[i]);
-      }
-    }
-    PRINT(3)(")");
-  }
-  PRINT(3)("\n");
-}
-
-/**
- *  A list, that holds all the classes that are loadable (classes not objects!!)
-*/
-tList<LoadClassDescription>* LoadClassDescription::classList = NULL;
-
-/**
- *  if the description of Parameters should be executed
-*/
-bool LoadClassDescription::parametersDescription = true;
-
-/**
- * @param className the name of the class to be loadable
-*/
-LoadClassDescription::LoadClassDescription(const char* className)
-{
-  this->className = new char[strlen(className)+1];
-  strcpy(this->className, className);
-
-  if (LoadClassDescription::classList == NULL)
-    LoadClassDescription::classList = new tList<LoadClassDescription>;
-
-  LoadClassDescription::classList->add(this);
-
-  this->paramList = new tList<LoadParamDescription>;
-}
-
-/**
- *  deletes a classDescription (deletes all the parameterDescriptions as well
-*/
-LoadClassDescription::~LoadClassDescription()
-{
-  tIterator<LoadParamDescription>* iterator = this->paramList->getIterator();
-  LoadParamDescription* enumParamDesc = iterator->firstElement();
-  while (enumParamDesc)
-    {
-      delete enumParamDesc;
-      enumParamDesc = iterator->nextElement();
-    }
-  delete iterator;
-  delete this->paramList;
-
-  delete[] this->className;
-}
-
-void LoadClassDescription::deleteAllDescriptions()
-{
-  if (LoadClassDescription::classList != NULL)
-  {
-    tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
-    LoadClassDescription* delElem = iterator->firstElement();
-    while (delElem != NULL)
-    {
-      delete delElem;
-      delElem = iterator->nextElement();
-    }
-    delete iterator;
-    delete LoadClassDescription::classList;
-  }
-  LoadClassDescription::classList = NULL;
-}
-
-
-/**
- *  adds a class to the list of loadable classes
- * @param className The name of the class to add
-
-   this function searches for the className string, and if found just returns the appropriate Class.
-   Otherwise it returns a new classDescription
-*/
-LoadClassDescription* LoadClassDescription::addClass(const char* className)
-{
-  if (LoadClassDescription::classList != NULL)
-  {
-    tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
-   LoadClassDescription* enumClassDesc = iterator->firstElement();
-   while (enumClassDesc)
-     {
-       if (!strcmp(enumClassDesc->className, className))
-         {
-           delete iterator;
-           return enumClassDesc;
-         }
-       enumClassDesc = iterator->nextElement();
-     }
-   delete iterator;
-  }
-  return new LoadClassDescription(className);
-}
-
-/**
- *  does the same as addClass(const char* className), but with params
- * @param paramName the name of the parameter to add.
-*/
-LoadParamDescription* LoadClassDescription::addParam(const char* paramName)
-{
-  tIterator<LoadParamDescription>* iterator = this->paramList->getIterator();
-  LoadParamDescription* enumParamDesc = iterator->firstElement();
-  while (enumParamDesc)
-    {
-      if (!strcmp(enumParamDesc->paramName, paramName))
-        {
-          delete iterator;
-          //return enumParamDesc;
-          return NULL;
-        }
-      enumParamDesc = iterator->nextElement();
-    }
-  delete iterator;
-
-  LoadParamDescription* newParam = new LoadParamDescription(paramName);
-
-  this->paramList->add(newParam);
-  return newParam;
-}
-
-/**
- *  prints out all loadable Classes, and their parameters
- * @param fileName prints the output to a File
- * @todo implement it
-*/
-void LoadClassDescription::printAll(const char* fileName)
-{
-  PRINT(3)("===============================================================\n");
-  PRINT(3)(" Listing all the Loadable Options (loaded since Game started).\n\n");
-  if (LoadClassDescription::classList != NULL)
-  {
-    tIterator<LoadClassDescription>* classIT = LoadClassDescription::classList->getIterator();
-    LoadClassDescription* enumClassDesc = classIT->firstElement();
-    while (enumClassDesc)
-     {
-       PRINT(3)("<%s>\n", enumClassDesc->className);
-       tIterator<LoadParamDescription>* paramIT = enumClassDesc->paramList->getIterator();
-       LoadParamDescription* enumParamDesc = paramIT->firstElement();
-       while (enumParamDesc)
-         {
-           enumParamDesc->print();
-           enumParamDesc = paramIT->nextElement();
-         }
-       delete paramIT;
-
-       PRINT(3)("</%s>\n\n", enumClassDesc->className);
-       enumClassDesc = classIT->nextElement();
-     }
-    delete classIT;
-  }
-  else
-    PRINT(3)("no Classes defined so far\n");
-  PRINT(3)("===============================================================\n");
-}
-
-/**
- * searches for classes, which beginn with classNameBegin
- * @param classNameBegin the beginning string of a Class
- * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards,
- * !! The strings MUST NOT be deleted !!
- */
-tList<const char>* LoadClassDescription::searchClassWithShort(const char* classNameBegin)
-{
-  unsigned int searchLength = strlen(classNameBegin);
-  tList<const char>* retVal = new tList<const char>;
-
-  tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
-  LoadClassDescription* enumClassDesc = iterator->firstElement();
-  while (enumClassDesc)
-  {
-    if (strlen(enumClassDesc->className)>searchLength+1 &&
-        !strncasecmp(enumClassDesc->className, classNameBegin, searchLength))
-    {
-      retVal->add(enumClassDesc->className);
-    }
-    enumClassDesc = iterator->nextElement();
-  }
-  delete iterator;
-
-  return retVal;
 }
 
Index: branches/world_entities/src/util/loading/load_param.h
===================================================================
--- branches/world_entities/src/util/loading/load_param.h	(revision 5527)
+++ branches/world_entities/src/util/loading/load_param.h	(revision 5558)
@@ -23,64 +23,18 @@
 
 #include "functor_list.h"
-#include "base_object.h"
+
+#include "debug.h"
 
 #include "factory.h"
-#include "debug.h"
 #include "substring.h"
 #include "tinyxml.h"
+
 #include "helper_functions.h"
 
 // Forward Declaration //
 template<class T> class tList;
-
-/************************
-*** DESCRIPTION STUFF ***
-************************/
-//! A class that handles the description of loadable parameters
-class LoadParamDescription
-{
-  friend class BaseLoadParam;
-  friend class LoadClassDescription;
- public:
-  LoadParamDescription(const char* paramName);
-  ~LoadParamDescription();
-
-  void setDescription(const char* descriptionText);
-  /** @returns the descriptionString */
-  const char* getDescription() { return this->description; };
-
-  void print() const;
- private:
-  char*         paramName;             //!< The name of the parameter.
-  int           paramCount;            //!< The count of parameters.
-  int*          types;                 //!< What kind of parameters does this function take ??
-  char*         description;           //!< A longer description about this function.
-  char**        defaultValues;         //!< The 'Default Values'.
-};
-
-//! A class for descriptions of a loadable module
-class LoadClassDescription
-{
-  friend class BaseLoadParam;
- public:
-  LoadClassDescription(const char* className);
-  ~LoadClassDescription();
-
-  static LoadClassDescription* addClass(const char* className);
-  LoadParamDescription* addParam(const char* paramName);
-
-  static void deleteAllDescriptions();
-
-  static void printAll(const char* fileName = NULL);
-  static tList<const char>* searchClassWithShort(const char* classNameBegin);
-//  static const LoadParamDescription* getClass(const char* className);
-
- private:
-  static bool                          parametersDescription;  //!< if parameter-description should be enabled.
-  static tList<LoadClassDescription>*  classList;              //!< a list, that holds all the loadable classes. (after one instance has been loaded)
-  char*                                className;              //!< name of the class
-  tList<LoadParamDescription>*         paramList;              //!< List of parameters this class knows.
-};
-
+class LoadClassDescription;
+class LoadParamDescription;
+class MultiType;
 
 /**************************
@@ -88,11 +42,12 @@
 **************************/
 //! abstract Base class for a Loadable parameter
-class BaseLoadParam : public BaseObject
+class LoadParamBase : public BaseObject
 {
  public:
-  BaseLoadParam* describe(const char* descriptionText);
+  LoadParamBase* describe(const char* descriptionText);
+  LoadParamBase* defaultValues(unsigned int count, ...);
 
  protected:
-  BaseLoadParam(const TiXmlElement* root, BaseObject* object, const char* paramName, int paramCount, bool multi, const void* pointerToParam, ...);
+  LoadParamBase(const TiXmlElement* root, BaseObject* object, const char* paramName, int paramCount, bool multi, const void* pointerToParam, ...);
 
  protected:
@@ -101,4 +56,6 @@
   const char*              loadString;           //!< The string loaded by this LoadParam
   const void*              pointerToParam;       //!< A Pointer to a Parameter.
+
+  MultiType*               defaultValue;
 };
 
@@ -140,5 +97,5 @@
 #define LoadParam0() \
 LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(), bool multi = false) \
-  : BaseLoadParam(root, pt2Object, paramName, 0, multi, NULL, "") \
+  : LoadParamBase(root, pt2Object, paramName, 0, multi, NULL) \
 { \
   if (loadString != NULL && root != NULL) \
@@ -156,5 +113,5 @@
  LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE), \
            bool multi = false, type1##_TYPE default1 = type1##_DEFAULT) \
-  : BaseLoadParam(root, pt2Object, paramName, 1, multi, NULL, type1##_PARAM, default1) \
+  : LoadParamBase(root, pt2Object, paramName, 1, multi, NULL, type1##_PARAM, default1) \
 { \
       if (loadString != NULL && root != NULL) \
@@ -175,5 +132,5 @@
  LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE, type2##_TYPE), \
            bool multi = false,  type1##_TYPE default1 = type1##_DEFAULT,  type2##_TYPE default2 = type2##_DEFAULT) \
-  : BaseLoadParam(root, pt2Object, paramName, 2, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2) \
+  : LoadParamBase(root, pt2Object, paramName, 2, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2) \
 { \
       if (loadString != NULL && root != NULL) \
@@ -201,5 +158,5 @@
  LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE, type2##_TYPE, type3##_TYPE), \
            bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT, type3##_TYPE default3 = type3##_DEFAULT)\
-  : BaseLoadParam(root, pt2Object, paramName, 3, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3) \
+  : LoadParamBase(root, pt2Object, paramName, 3, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3) \
 { \
       if (loadString != NULL && root != NULL) \
@@ -229,5 +186,5 @@
            bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT, type3##_TYPE default3 = type3##_DEFAULT, \
            type4##_TYPE default4 = type4##_DEFAULT) \
-  : BaseLoadParam(root, pt2Object, paramName, 4, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3, \
+  : LoadParamBase(root, pt2Object, paramName, 4, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3, \
                   type4##_PARAM, default4) \
 { \
@@ -260,5 +217,5 @@
            bool multi = false, type1##_TYPE default1 = type1##_DEFAULT, type2##_TYPE default2 = type2##_DEFAULT, type3##_TYPE default3 = type3##_DEFAULT, \
            type4##_TYPE default4 = type4##_DEFAULT, type5##_TYPE default5 = type5##_DEFAULT ) \
-  : BaseLoadParam(root, pt2Object, paramName, 5, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3, \
+  : LoadParamBase(root, pt2Object, paramName, 5, multi, NULL, type1##_PARAM, default1, type2##_PARAM, default2, type3##_PARAM, default3, \
                   type4##_PARAM, default4, type5##_PARAM, default5) \
 { \
@@ -283,5 +240,5 @@
 #define LoadParamPT(type1) \
  LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(type1##_TYPE), type1##_TYPE pointerToParam, bool multi = false) \
-  : BaseLoadParam(root, pt2Object, paramName, 1, multi, pointerToParam, type1##_PARAM) \
+  : LoadParamBase(root, pt2Object, paramName, 1, multi, pointerToParam, type1##_PARAM) \
 { \
       if (pointerToParam != NULL && root != NULL) \
@@ -292,5 +249,5 @@
 
 //! derived template class, so all the Classes can load something.
-template<class T> class LoadParam : public BaseLoadParam
+template<class T> class LoadParam : public LoadParamBase
 {
   public:
@@ -305,5 +262,5 @@
   // loads a Ti-XML-element
   LoadParam(const TiXmlElement* root, const char* paramName, T* pt2Object, void(T::*function)(const TiXmlElement*), bool multi = false)
-  : BaseLoadParam(root, pt2Object, paramName, 1, multi, NULL, "XML")
+  : LoadParamBase(root, pt2Object, paramName, 1, multi, NULL, "XML")
   {
     if (root != NULL)
Index: branches/world_entities/src/util/loading/load_param_description.cc
===================================================================
--- branches/world_entities/src/util/loading/load_param_description.cc	(revision 5558)
+++ branches/world_entities/src/util/loading/load_param_description.cc	(revision 5558)
@@ -0,0 +1,304 @@
+/*
+   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.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+#include "load_param_description.h"
+
+#include "list.h"
+#include <stdarg.h>
+#include "stdlibincl.h"
+#include "functor_list.h"
+
+/**
+ * @param paramName the name of the parameter to load
+ */
+LoadParamDescription::LoadParamDescription(const char* paramName)
+{
+  this->types = NULL;
+  this->description = NULL;
+  this->defaultValues = NULL;
+  this->paramName = new char[strlen(paramName)+1];
+  strcpy(this->paramName, paramName);
+}
+
+/**
+ *  removes all the alocated memory
+ */
+LoadParamDescription::~LoadParamDescription()
+{
+  if (this->defaultValues != NULL)
+  {
+    for(int i = 0; i < this->paramCount; i++)
+    {
+      delete[] this->defaultValues[i];
+    }
+  }
+
+  delete[] this->types;
+  delete[] this->defaultValues;
+  delete[] this->paramName;
+  delete[] this->description;
+}
+
+/**
+ * @param descriptionText The text to set as a description for this Parameter
+ */
+void LoadParamDescription::setDescription(const char* descriptionText)
+{
+  this->description = new char[strlen(descriptionText)+1];
+  strcpy(this->description, descriptionText);
+}
+
+/**
+ *  prints out this parameter, its input method and the description (if availiable)
+ */
+void LoadParamDescription::print() const
+{
+  PRINT(3)(" <%s>", this->paramName);
+  for (int i = 0; i < this->paramCount; i++)
+  {
+    if (i > 0)
+      PRINT(3)(",");
+    switch (this->types[i])
+    {
+      default:
+        PRINTF(3)("none");
+        break;
+      case ParameterBool:
+        PRINT(3)("bool");
+        break;
+      case ParameterChar:
+        PRINT(3)("char");
+        break;
+      case ParameterString:
+        PRINT(3)("string");
+        break;
+      case ParameterInt:
+        PRINT(3)("int");
+        break;
+      case ParameterUInt:
+        PRINT(3)("Uint");
+        break;
+      case ParameterFloat:
+        PRINT(3)("float");
+        break;
+      case ParameterLong:
+        PRINT(3)("long");
+        break;
+      case ParameterXML:
+        PRINT(3)("XML");
+        break;
+    }
+  }
+  PRINT(3)("</%s>", this->paramName);
+  if (this->description)
+    PRINT(3)(" -- %s", this->description);
+  // default values
+  if (this->paramCount > 0)
+  {
+    PRINT(3)(" (Default: ");
+    for (int i = 0; i < this->paramCount; i++)
+    {
+      if (i > 0)
+        PRINT(3)(", ");
+      if (this->types[i] & ParameterString)
+      { // leave brackets !!
+        PRINT(3)("\"%s\"", this->defaultValues[i]);
+      }
+      else
+      {
+        PRINT(3)("%s", this->defaultValues[i]);
+      }
+    }
+    PRINT(3)(")");
+  }
+  PRINT(3)("\n");
+}
+
+/**
+ *  A list, that holds all the classes that are loadable (classes not objects!!)
+ */
+tList<LoadClassDescription>* LoadClassDescription::classList = NULL;
+
+/**
+ *  if the description of Parameters should be executed
+ */
+bool LoadClassDescription::parametersDescription = false;
+
+/**
+ * @param className the name of the class to be loadable
+ */
+LoadClassDescription::LoadClassDescription(const char* className)
+{
+  this->className = new char[strlen(className)+1];
+  strcpy(this->className, className);
+
+  if (LoadClassDescription::classList == NULL)
+    LoadClassDescription::classList = new tList<LoadClassDescription>;
+
+  LoadClassDescription::classList->add(this);
+
+  this->paramList = new tList<LoadParamDescription>;
+}
+
+/**
+ *  deletes a classDescription (deletes all the parameterDescriptions as well
+ */
+LoadClassDescription::~LoadClassDescription()
+{
+  tIterator<LoadParamDescription>* iterator = this->paramList->getIterator();
+  LoadParamDescription* enumParamDesc = iterator->firstElement();
+  while (enumParamDesc)
+  {
+    delete enumParamDesc;
+    enumParamDesc = iterator->nextElement();
+  }
+  delete iterator;
+  delete this->paramList;
+
+  delete[] this->className;
+}
+
+void LoadClassDescription::deleteAllDescriptions()
+{
+  if (LoadClassDescription::classList != NULL)
+  {
+    tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
+    LoadClassDescription* delElem = iterator->firstElement();
+    while (delElem != NULL)
+    {
+      delete delElem;
+      delElem = iterator->nextElement();
+    }
+    delete iterator;
+    delete LoadClassDescription::classList;
+  }
+  LoadClassDescription::classList = NULL;
+}
+
+
+/**
+ *  adds a class to the list of loadable classes
+ * @param className The name of the class to add
+
+   this function searches for the className string, and if found just returns the appropriate Class.
+   Otherwise it returns a new classDescription
+ */
+LoadClassDescription* LoadClassDescription::addClass(const char* className)
+{
+  if (LoadClassDescription::classList != NULL)
+  {
+    tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
+    LoadClassDescription* enumClassDesc = iterator->firstElement();
+    while (enumClassDesc)
+    {
+      if (!strcmp(enumClassDesc->className, className))
+      {
+        delete iterator;
+        return enumClassDesc;
+      }
+      enumClassDesc = iterator->nextElement();
+    }
+    delete iterator;
+  }
+  return new LoadClassDescription(className);
+}
+
+/**
+ *  does the same as addClass(const char* className), but with params
+ * @param paramName the name of the parameter to add.
+ */
+LoadParamDescription* LoadClassDescription::addParam(const char* paramName)
+{
+  tIterator<LoadParamDescription>* iterator = this->paramList->getIterator();
+  LoadParamDescription* enumParamDesc = iterator->firstElement();
+  while (enumParamDesc)
+  {
+    if (!strcmp(enumParamDesc->paramName, paramName))
+    {
+      delete iterator;
+          //return enumParamDesc;
+      return NULL;
+    }
+    enumParamDesc = iterator->nextElement();
+  }
+  delete iterator;
+
+  LoadParamDescription* newParam = new LoadParamDescription(paramName);
+
+  this->paramList->add(newParam);
+  return newParam;
+}
+
+/**
+ *  prints out all loadable Classes, and their parameters
+ * @param fileName prints the output to a File
+ * @todo implement it
+ */
+void LoadClassDescription::printAll(const char* fileName)
+{
+  PRINT(3)("===============================================================\n");
+  PRINT(3)(" Listing all the Loadable Options (loaded since Game started).\n\n");
+  if (LoadClassDescription::classList != NULL)
+  {
+    tIterator<LoadClassDescription>* classIT = LoadClassDescription::classList->getIterator();
+    LoadClassDescription* enumClassDesc = classIT->firstElement();
+    while (enumClassDesc)
+    {
+      PRINT(3)("<%s>\n", enumClassDesc->className);
+      tIterator<LoadParamDescription>* paramIT = enumClassDesc->paramList->getIterator();
+      LoadParamDescription* enumParamDesc = paramIT->firstElement();
+      while (enumParamDesc)
+      {
+        enumParamDesc->print();
+        enumParamDesc = paramIT->nextElement();
+      }
+      delete paramIT;
+
+      PRINT(3)("</%s>\n\n", enumClassDesc->className);
+      enumClassDesc = classIT->nextElement();
+    }
+    delete classIT;
+  }
+  else
+    PRINT(3)("no Classes defined so far\n");
+  PRINT(3)("===============================================================\n");
+}
+
+/**
+ * searches for classes, which beginn with classNameBegin
+ * @param classNameBegin the beginning string of a Class
+ * @return a NEW char-array with ClassNames. The LIST should be deleted afterwards,
+ * !! The strings MUST NOT be deleted !!
+ */
+tList<const char>* LoadClassDescription::searchClassWithShort(const char* classNameBegin)
+{
+  unsigned int searchLength = strlen(classNameBegin);
+  tList<const char>* retVal = new tList<const char>;
+
+  tIterator<LoadClassDescription>* iterator = LoadClassDescription::classList->getIterator();
+  LoadClassDescription* enumClassDesc = iterator->firstElement();
+  while (enumClassDesc)
+  {
+    if (strlen(enumClassDesc->className)>searchLength+1 &&
+        !strncasecmp(enumClassDesc->className, classNameBegin, searchLength))
+    {
+      retVal->add(enumClassDesc->className);
+    }
+    enumClassDesc = iterator->nextElement();
+  }
+  delete iterator;
+
+  return retVal;
+}
Index: branches/world_entities/src/util/loading/load_param_description.h
===================================================================
--- branches/world_entities/src/util/loading/load_param_description.h	(revision 5558)
+++ branches/world_entities/src/util/loading/load_param_description.h	(revision 5558)
@@ -0,0 +1,80 @@
+/*
+   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.
+
+   ### File Specific:
+   main-programmer: Benjamin Grauer
+   co-programmer: ...
+*/
+
+/*!
+ * @file load_param.h
+ * A Class and macro-functions, that makes our lives easy to load-in parameters
+ */
+
+#ifndef _LOAD_PARAM_DESCRIPTION_H
+#define _LOAD_PARAM_DESCRIPTION_H
+
+#include "base_object.h"
+
+// Forward Declaration //
+template<class T> class tList;
+class MultiType;
+
+/************************
+*** DESCRIPTION STUFF ***
+************************/
+//! A class that handles the description of loadable parameters
+class LoadParamDescription
+{
+  friend class LoadParamBase;
+  friend class LoadClassDescription;
+ public:
+  LoadParamDescription(const char* paramName);
+  ~LoadParamDescription();
+
+  void setDescription(const char* descriptionText);
+  /** @returns the descriptionString */
+  const char* getDescription() { return this->description; };
+
+  void print() const;
+ private:
+  char*         paramName;             //!< The name of the parameter.
+  int           paramCount;            //!< The count of parameters.
+  int*          types;                 //!< What kind of parameters does this function take ??
+  char*         description;           //!< A longer description about this function.
+  char**        defaultValues;         //!< The 'Default Values'. @TODO MAKE THIS A MULTITYPE
+};
+
+//! A class for descriptions of a loadable module
+class LoadClassDescription
+{
+  friend class LoadParamBase;
+ public:
+  LoadClassDescription(const char* className);
+  ~LoadClassDescription();
+
+  static LoadClassDescription* addClass(const char* className);
+  LoadParamDescription* addParam(const char* paramName);
+
+  static void deleteAllDescriptions();
+
+  static void printAll(const char* fileName = NULL);
+  static tList<const char>* searchClassWithShort(const char* classNameBegin);
+//  static const LoadParamDescription* getClass(const char* className);
+
+ private:
+  static bool                          parametersDescription;  //!< if parameter-description should be enabled.
+  static tList<LoadClassDescription>*  classList;              //!< a list, that stores all the loadable classes. (after one instance has been loaded)
+  char*                                className;              //!< name of the class
+
+  tList<LoadParamDescription>*         paramList;              //!< List of parameters this class knows.
+};
+
+#endif /* _LOAD_PARAM_DESCRIPTION_H */
