Index: branches/world_entities/src/lib/Makefile.am
===================================================================
--- branches/world_entities/src/lib/Makefile.am	(revision 5527)
+++ branches/world_entities/src/lib/Makefile.am	(revision 5558)
@@ -39,4 +39,5 @@
                         util/color.cc \
                         util/helper_functions.cc \
+                        util/multi_type.cc \
                         math/vector.cc \
                         math/curve.cc
@@ -55,4 +56,5 @@
                         util/color.h \
                         util/helper_functions.h \
+                        util/multi_type.h \
                         math/vector.h \
                         math/curve.h
Index: branches/world_entities/src/lib/Makefile.in
===================================================================
--- branches/world_entities/src/lib/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/Makefile.in	(revision 5558)
@@ -57,5 +57,6 @@
 	base_object.$(OBJEXT) class_list.$(OBJEXT) \
 	ini_parser.$(OBJEXT) substring.$(OBJEXT) color.$(OBJEXT) \
-	helper_functions.$(OBJEXT) vector.$(OBJEXT) curve.$(OBJEXT)
+	helper_functions.$(OBJEXT) multi_type.$(OBJEXT) \
+	vector.$(OBJEXT) curve.$(OBJEXT)
 libORXlibs_a_OBJECTS = $(am_libORXlibs_a_OBJECTS)
 DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
@@ -227,4 +228,5 @@
                         util/color.cc \
                         util/helper_functions.cc \
+                        util/multi_type.cc \
                         math/vector.cc \
                         math/curve.cc
@@ -243,4 +245,5 @@
                         util/color.h \
                         util/helper_functions.h \
+                        util/multi_type.h \
                         math/vector.h \
                         math/curve.h
@@ -270,7 +273,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@@ -310,4 +313,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helper_functions.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ini_parser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multi_type.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/null_parent.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/p_node.Po@am__quote@
@@ -440,4 +444,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 helper_functions.obj `if test -f 'util/helper_functions.cc'; then $(CYGPATH_W) 'util/helper_functions.cc'; else $(CYGPATH_W) '$(srcdir)/util/helper_functions.cc'; fi`
+
+multi_type.o: util/multi_type.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multi_type.o -MD -MP -MF "$(DEPDIR)/multi_type.Tpo" -c -o multi_type.o `test -f 'util/multi_type.cc' || echo '$(srcdir)/'`util/multi_type.cc; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/multi_type.Tpo" "$(DEPDIR)/multi_type.Po"; else rm -f "$(DEPDIR)/multi_type.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/multi_type.cc' object='multi_type.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 multi_type.o `test -f 'util/multi_type.cc' || echo '$(srcdir)/'`util/multi_type.cc
+
+multi_type.obj: util/multi_type.cc
+@am__fastdepCXX_TRUE@	if $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT multi_type.obj -MD -MP -MF "$(DEPDIR)/multi_type.Tpo" -c -o multi_type.obj `if test -f 'util/multi_type.cc'; then $(CYGPATH_W) 'util/multi_type.cc'; else $(CYGPATH_W) '$(srcdir)/util/multi_type.cc'; fi`; \
+@am__fastdepCXX_TRUE@	then mv -f "$(DEPDIR)/multi_type.Tpo" "$(DEPDIR)/multi_type.Po"; else rm -f "$(DEPDIR)/multi_type.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@	source='util/multi_type.cc' object='multi_type.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 multi_type.obj `if test -f 'util/multi_type.cc'; then $(CYGPATH_W) 'util/multi_type.cc'; else $(CYGPATH_W) '$(srcdir)/util/multi_type.cc'; fi`
 
 vector.o: math/vector.cc
Index: branches/world_entities/src/lib/collision_detection/Makefile.in
===================================================================
--- branches/world_entities/src/lib/collision_detection/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/collision_detection/Makefile.in	(revision 5558)
@@ -220,7 +220,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/collision_detection/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/collision_detection/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/collision_detection/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/collision_detection/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/event/Makefile.in
===================================================================
--- branches/world_entities/src/lib/event/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/event/Makefile.in	(revision 5558)
@@ -210,7 +210,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/event/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/event/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/event/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/event/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/event/event_def.h
===================================================================
--- branches/world_entities/src/lib/event/event_def.h	(revision 5527)
+++ branches/world_entities/src/lib/event/event_def.h	(revision 5558)
@@ -31,4 +31,6 @@
   EV_VIDEO_RESIZE,
 
+  EV_MAIN_QUIT,
+
   EV_UNKNOWN,
 
Index: branches/world_entities/src/lib/event/event_handler.cc
===================================================================
--- branches/world_entities/src/lib/event/event_handler.cc	(revision 5527)
+++ branches/world_entities/src/lib/event/event_handler.cc	(revision 5558)
@@ -308,4 +308,7 @@
           ev.resize = event.resize;
           ev.type = EV_VIDEO_RESIZE;
+          break;
+        case SDL_QUIT:
+          ev.type = EV_MAIN_QUIT;
           break;
         default:
Index: branches/world_entities/src/lib/graphics/Makefile.in
===================================================================
--- branches/world_entities/src/lib/graphics/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/graphics/Makefile.in	(revision 5558)
@@ -227,7 +227,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/graphics/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/graphics/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/graphics/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/graphics/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/graphics/importer/Makefile.in
===================================================================
--- branches/world_entities/src/lib/graphics/importer/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/graphics/importer/Makefile.in	(revision 5558)
@@ -214,7 +214,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/graphics/importer/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/graphics/importer/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/graphics/importer/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/graphics/importer/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/graphics/spatial_separation/Makefile.in
===================================================================
--- branches/world_entities/src/lib/graphics/spatial_separation/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/graphics/spatial_separation/Makefile.in	(revision 5558)
@@ -204,7 +204,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/graphics/spatial_separation/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/graphics/spatial_separation/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/graphics/spatial_separation/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/graphics/spatial_separation/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/gui/Makefile.in
===================================================================
--- branches/world_entities/src/lib/gui/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/gui/Makefile.in	(revision 5558)
@@ -183,7 +183,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/gui/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/gui/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/gui/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/gui/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/gui/gl_gui/Makefile.in
===================================================================
--- branches/world_entities/src/lib/gui/gl_gui/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/gui/gl_gui/Makefile.in	(revision 5558)
@@ -230,7 +230,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/gui/gl_gui/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/gui/gl_gui/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/gui/gl_gui/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/gui/gl_gui/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/gui/gtk_gui/Makefile.in
===================================================================
--- branches/world_entities/src/lib/gui/gtk_gui/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/gui/gtk_gui/Makefile.in	(revision 5558)
@@ -232,7 +232,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/gui/gtk_gui/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/gui/gtk_gui/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/gui/gtk_gui/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/gui/gtk_gui/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/particles/Makefile.in
===================================================================
--- branches/world_entities/src/lib/particles/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/particles/Makefile.in	(revision 5558)
@@ -207,7 +207,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/particles/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/particles/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/particles/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/particles/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/physics/Makefile.in
===================================================================
--- branches/world_entities/src/lib/physics/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/physics/Makefile.in	(revision 5558)
@@ -215,7 +215,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/physics/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/physics/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/physics/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/physics/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/shell/Makefile.in
===================================================================
--- branches/world_entities/src/lib/shell/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/shell/Makefile.in	(revision 5558)
@@ -209,7 +209,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/shell/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/shell/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/shell/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/shell/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/shell/shell_command.cc
===================================================================
--- branches/world_entities/src/lib/shell/shell_command.cc	(revision 5527)
+++ branches/world_entities/src/lib/shell/shell_command.cc	(revision 5558)
@@ -259,4 +259,16 @@
 tList<ShellCommandAlias>* ShellCommandClass::aliasList = NULL;
 
+
+
+
+
+
+
+
+
+
+////////////////////////
+// SHELL COMMAND BASE //
+////////////////////////
 /**
  * constructs and registers a new Command
@@ -264,5 +276,4 @@
  * @param className the name of the class to apply this command to
  * @param paramCount the count of parameters this command takes
- * @return self
  */
 ShellCommandBase::ShellCommandBase(const char* commandName, const char* className, unsigned int paramCount, ...)
@@ -282,49 +293,21 @@
   this->paramCount = paramCount;
   this->parameters = new unsigned int[paramCount];
+  this->defaultValue = new MultiType[paramCount];
 
   va_list parameterList;
   va_start(parameterList, paramCount);
 
+  // What Parameters we have got
   for (unsigned int i = 0; i < paramCount; i++)
-  {
     this->parameters[i] = va_arg(parameterList, int);
-
-    switch (this->parameters[i])
-    {
-      case ParameterBool:
-        this->defaultBools[i] = va_arg(parameterList, int);
-        break;
-      case ParameterChar:
-        this->defaultStrings[i] = new char[2];
-        sprintf(this->defaultStrings[0], "%c",  va_arg(parameterList, int));
-        break;
-      case ParameterString:
-        this->defaultStrings[i] = va_arg(parameterList, char*);
-        break;
-      case ParameterInt:
-        this->defaultInts[i] = va_arg(parameterList, int);
-        break;
-      case ParameterUInt:
-        this->defaultInts[i] = va_arg(parameterList, unsigned int);
-        break;
-      case ParameterFloat:
-        this->defaultFloats[i] = va_arg(parameterList, double);
-        break;
-      case ParameterLong:
-        this->defaultInts[i] = va_arg(parameterList, long);
-        break;
-      default:
-        break;
-    }
-  }
 }
 
 /**
  * deconstructs a ShellCommand
- * @return
  */
 ShellCommandBase::~ShellCommandBase()
 {
   delete[] this->parameters;
+  delete[] this->defaultValue;
   if (this->alias != NULL && ShellCommandClass::aliasList != NULL)
   {
@@ -417,5 +400,4 @@
  * @return true on success, false otherwise.
  */
-#include  "stdlibincl.h"
 bool ShellCommandBase::execute(const char* executionString)
 {
@@ -598,27 +580,28 @@
   for (unsigned int i = 0; i < count; i++)
   {
+
+
     switch (this->parameters[i])
     {
       case ParameterBool:
-        this->defaultBools[i] = va_arg(defaultList, int);
+        this->defaultValue[i].setInt(va_arg(defaultList, int));
         break;
       case ParameterChar:
-        this->defaultStrings[i] = new char[2];
-        sprintf(this->defaultStrings[0], "%c",  va_arg(defaultList, int));
+        this->defaultValue[i].setChar((char)va_arg(defaultList, int));
         break;
       case ParameterString:
-        this->defaultStrings[i] = va_arg(defaultList, char*);
+        this->defaultValue[i].setString(va_arg(defaultList, char*));
         break;
       case ParameterInt:
-        this->defaultInts[i] = va_arg(defaultList, int);
+        this->defaultValue[i].setInt(va_arg(defaultList, int));
         break;
       case ParameterUInt:
-        this->defaultInts[i] = va_arg(defaultList, unsigned int);
+        this->defaultValue[i].setInt((int)va_arg(defaultList, unsigned int));
         break;
       case ParameterFloat:
-        this->defaultFloats[i] = va_arg(defaultList, double);
+        this->defaultValue[i].setFloat(va_arg(defaultList, double));
         break;
       case ParameterLong:
-        this->defaultInts[i] = va_arg(defaultList, long);
+        this->defaultValue[i].setInt((int) va_arg(defaultList, long));
         break;
       default:
@@ -626,5 +609,4 @@
     }
   }
-
   return this;
 }
Index: branches/world_entities/src/lib/shell/shell_command.h
===================================================================
--- branches/world_entities/src/lib/shell/shell_command.h	(revision 5527)
+++ branches/world_entities/src/lib/shell/shell_command.h	(revision 5558)
@@ -10,4 +10,5 @@
 
 #include "helper_functions.h"
+#include "multi_type.h"
 #include "substring.h"
 #include "functor_list.h"
@@ -133,9 +134,5 @@
     unsigned int                     paramCount;                           //!< the count of parameters.
     unsigned int*                    parameters;                           //!< Parameters the function of this Command takes.
-    char*                            defaultStrings[FUNCTOR_MAX_ARGUMENTS];//!< A list of default Strings stored.
-    int                              defaultInts[FUNCTOR_MAX_ARGUMENTS];   //!< A list of default Ints stored.
-    float                            defaultFloats[FUNCTOR_MAX_ARGUMENTS]; //!< A list of default Floats stored.
-    bool                             defaultBools[FUNCTOR_MAX_ARGUMENTS];  //!< A list of default Bools stored.
-
+    MultiType*                       defaultValue;                         //!< Default Values.
 
   private:
@@ -153,15 +150,15 @@
 /////////////////////////////////
 //! where to chek for default BOOL values
-#define   l_BOOL_DEFGRAB(i)         this->defaultBools[i]
+#define   l_BOOL_DEFGRAB(i)         this->defaultValue[i].getBool()
 //! where to chek for default INT values
-#define   l_INT_DEFGRAB(i)          this->defaultInts[i]
+#define   l_INT_DEFGRAB(i)          this->defaultValue[i].getInt()
 //! where to chek for default UINT values
-#define   l_UINT_DEFGRAB(i)         (unsigned int)this->defaultInts[i]
+#define   l_UINT_DEFGRAB(i)         (unsigned int)this->defaultValue[i].getInt()
 //! where to chek for default LONG values
-#define   l_LONG_DEFGRAB(i)         (long)this->defaultInts[i]
+#define   l_LONG_DEFGRAB(i)         (long)this->defaultValue[i].getInt()
 //! where to chek for default FLOAT values
-#define   l_FLOAT_DEFGRAB(i)        this->defaultFloats[i]
+#define   l_FLOAT_DEFGRAB(i)        this->defaultValue[i].getFloat()
 //! where to chek for default STRING values
-#define   l_STRING_DEFGRAB(i)       this->defaultStrings[i]
+#define   l_STRING_DEFGRAB(i)       this->defaultValue[i].getString()
 
 //////////////////////////
@@ -183,46 +180,70 @@
 //! registers a command with 1 parameter
 #define ShellCommandRegister1(t1) \
-  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE), t1##_TYPE d1 = t1##_DEFAULT) \
+  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE)) \
   { \
     if (isRegistered(commandName, className, 1, t1##_PARAM)== true) \
       return NULL; \
-    return new SHELLCOMMAND<T>(commandName, className, function, d1); \
+    return new SHELLCOMMAND<T>(commandName, className, function); \
   }
 
 //! registers a command with 2 parameters
 #define ShellCommandRegister2(t1,t2) \
-  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE), t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT) \
+  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE)) \
   { \
     if (isRegistered(commandName, className, 2, t1##_PARAM, t2##_PARAM)== true) \
       return NULL; \
-    return new SHELLCOMMAND<T>(commandName, className, function, d1, d2); \
+    return new SHELLCOMMAND<T>(commandName, className, function); \
   }
 
 //! registers a command with 3 parameters
 #define ShellCommandRegister3(t1,t2,t3) \
-  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE), t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT, t3##_TYPE d3 = t3##_DEFAULT) \
+  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE)) \
   { \
     if (isRegistered(commandName, className, 3, t1##_PARAM, t2##_PARAM, t3##_PARAM)== true) \
       return NULL; \
-    return new SHELLCOMMAND<T>(commandName, className, function, d1, d2, d3); \
+    return new SHELLCOMMAND<T>(commandName, className, function); \
   }
 
 //! registers a command with 4 parameters
 #define ShellCommandRegister4(t1,t2,t3,t4) \
-  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE), t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT, t3##_TYPE d3 = t3##_DEFAULT, t4##_TYPE d4 = t4##_DEFAULT) \
+  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE)) \
   { \
     if (isRegistered(commandName, className, 4, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM)== true) \
       return NULL; \
-    return new SHELLCOMMAND<T>(commandName, className, function, d1, d2, d3, d4); \
+    return new SHELLCOMMAND<T>(commandName, className, function); \
   }
 
 //! registers a command with 5 parameters
 #define ShellCommandRegister5(t1,t2,t3,t4,t5) \
-  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE), t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT, t3##_TYPE d3 = t3##_DEFAULT, t4##_TYPE d4 = t4##_DEFAULT, t5##_TYPE d5 = t5##_DEFAULT) \
+  static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE)) \
   { \
     if (isRegistered(commandName, className, 5, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM, t5##_PARAM)== true) \
       return NULL; \
-    return new ShellCommand<T>(commandName, className, function, d1, d2, d3, d4, d5); \
-  }
+    return new ShellCommand<T>(commandName, className, function); \
+  }
+
+///////////////////////
+// FUNCTION POINTERS //
+///////////////////////
+#define ShellCommandFunctionPoiter0() \
+  void SHELLCOMMANDINCLASS(*functionPointer_0)();
+
+#define ShellCommandFunctionPoiter1(t1) \
+  void SHELLCOMMANDINCLASS(*functionPointer_1_##t1)(t1##_TYPE);
+
+#define ShellCommandFunctionPoiter2(t1, t2) \
+  void SHELLCOMMANDINCLASS(*functionPointer_2_##t1##_##t2)(t1##_TYPE, t2##_TYPE);
+
+
+#define ShellCommandFunctionPoiter3(t1, t2, t3) \
+  void SHELLCOMMANDINCLASS(*functionPointer_3_##t1##_##t2##_##t3)(t1##_TYPE, t2##_TYPE, t3##_TYPE);
+
+#define ShellCommandFunctionPoiter4(t1, t2, t3, t4) \
+  void SHELLCOMMANDINCLASS(*functionPointer_4_##t1##_##t2##_##t3##_##t4)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE);
+
+
+#define ShellCommandFunctionPoiter5(t1, t2, t3, t4, t5) \
+  void SHELLCOMMANDINCLASS(*functionPointer_5_##t1##_##t2##_##t3##_##t4##_##t5)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE); \
+
 
 //////////////////
@@ -231,60 +252,54 @@
 //! creates a command that takes no parameters
 #define ShellCommandConstructor0() \
-  void SHELLCOMMANDINCLASS(*functionPointer_0)(); \
   SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)()) \
   : ShellCommandBase(commandName, className, 0) \
   { \
     this->functorType = SHELLCOMMANDTYPE; \
-    this->functionPointer_0 = function; \
+    this->fp.functionPointer_0 = function; \
   }
 
 //! creates a command that takes one parameter
 #define ShellCommandConstructor1(t1) \
-  void SHELLCOMMANDINCLASS(*functionPointer_1_##t1)(t1##_TYPE); \
-  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE), t1##_TYPE d1) \
-  : ShellCommandBase(commandName, className, 1, t1##_PARAM, d1) \
-  { \
-    this->functorType = SHELLCOMMANDTYPE; \
-    this->functionPointer_1_##t1 = function; \
+  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE)) \
+  : ShellCommandBase(commandName, className, 1, t1##_PARAM) \
+  { \
+    this->functorType = SHELLCOMMANDTYPE; \
+    this->fp.functionPointer_1_##t1 = function; \
   }
 
 //! creates a command that takes two parameters
 #define ShellCommandConstructor2(t1,t2) \
-  void SHELLCOMMANDINCLASS(*functionPointer_2_##t1##_##t2)(t1##_TYPE, t2##_TYPE); \
-  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE), t1##_TYPE d1, t2##_TYPE d2) \
-  : ShellCommandBase(commandName, className, 2, t1##_PARAM, d1, t2##_PARAM, d2) \
-  { \
-    this->functorType = SHELLCOMMANDTYPE; \
-    this->functionPointer_2_##t1##_##t2 = function; \
+  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE)) \
+  : ShellCommandBase(commandName, className, 2, t1##_PARAM, t2##_PARAM) \
+  { \
+    this->functorType = SHELLCOMMANDTYPE; \
+    this->fp.functionPointer_2_##t1##_##t2 = function; \
   }
 
 //! creates a command that takes three parameter
 #define ShellCommandConstructor3(t1,t2,t3) \
-  void SHELLCOMMANDINCLASS(*functionPointer_3_##t1##_##t2##_##t3)(t1##_TYPE, t2##_TYPE, t3##_TYPE); \
-  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE), t1##_TYPE d1, t2##_TYPE d2, t3##_TYPE d3) \
-  : ShellCommandBase(commandName, className, 3, t1##_PARAM, d1, t2##_PARAM, d2, t3##_PARAM, d3) \
-  { \
-    this->functorType = SHELLCOMMANDTYPE; \
-    this->functionPointer_3_##t1##_##t2##_##t3 = function; \
+  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE)) \
+  : ShellCommandBase(commandName, className, 3, t1##_PARAM, t2##_PARAM, t3##_PARAM) \
+  { \
+    this->functorType = SHELLCOMMANDTYPE; \
+    this->fp.functionPointer_3_##t1##_##t2##_##t3 = function; \
   }
 
 //! creates a command that takes four parameter
 #define ShellCommandConstructor4(t1,t2,t3,t4) \
-  void SHELLCOMMANDINCLASS(*functionPointer_4_##t1##_##t2##_##t3##_##t4)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE); \
-  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE), t1##_TYPE d1, t2##_TYPE d2, t3##_TYPE d3, t4##_TYPE d4) \
-  : ShellCommandBase(commandName, className, 4, t1##_PARAM, d1, t2##_PARAM, d2, t3##_PARAM, d3, t4##_PARAM, d4) \
-  { \
-    this->functorType = SHELLCOMMANDTYPE; \
-    this->functionPointer_4_##t1##_##t2##_##t3##_##t4 = function; \
+  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE)) \
+  : ShellCommandBase(commandName, className, 4, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM) \
+  { \
+    this->functorType = SHELLCOMMANDTYPE; \
+    this->fp.functionPointer_4_##t1##_##t2##_##t3##_##t4 = function; \
   }
 
 //! creates a command that takes five parameter
 #define ShellCommandConstructor5(t1,t2,t3,t4,t5) \
-  void SHELLCOMMANDINCLASS(*functionPointer_5_##t1##_##t2##_##t3##_##t4##_##t5)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE); \
-  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE), t1##_TYPE d1, t2##_TYPE d2, t3##_TYPE d3, t4##_TYPE d4, t5##_TYPE d5) \
-  : ShellCommandBase(commandName, className, 5, t1##_PARAM, d1, t2##_PARAM, d2, t3##_PARAM, d3, t4##_PARAM, d4, t5##_PARAM, d5) \
-  { \
-    this->functorType = SHELLCOMMANDTYPE; \
-    this->functionPointer_5_##t1##_##t2##_##t3##_##t4##_##t5 = function; \
+  SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE)) \
+  : ShellCommandBase(commandName, className, 5, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM, t5##_PARAM) \
+  { \
+    this->functorType = SHELLCOMMANDTYPE; \
+    this->fp.functionPointer_5_##t1##_##t2##_##t3##_##t4##_##t5 = function; \
   }
 
@@ -337,5 +352,5 @@
 #undef SHELLCOMMANDEXECUTER
 #endif
-#define SHELLCOMMANDEXECUTER(nameExt)      (dynamic_cast<T*>(object)->*functionPointer##nameExt)
+#define SHELLCOMMANDEXECUTER(nameExt)      (dynamic_cast<T*>(object)->*(fp.functionPointer##nameExt))
 #ifdef SHELLCOMMANDINCLASS
 #undef SHELLCOMMANDINCLASS
@@ -353,4 +368,11 @@
 
   private:
+//! FUNCTOR_LIST is the List of FunctionPointers
+    union FunctionPointers {
+#define FUNCTOR_LIST(x) ShellCommandFunctionPoiter ## x
+#include "functor_list.h"
+#undef FUNCTOR_LIST
+    } fp;
+
 //! FUNCTOR_LIST is the List of CommandConstructors
 #define FUNCTOR_LIST(x) ShellCommandConstructor ## x
@@ -382,5 +404,5 @@
 #undef SHELLCOMMANDEXECUTER
 #endif
-#define SHELLCOMMANDEXECUTER(nameExt)     functionPointer##nameExt
+#define SHELLCOMMANDEXECUTER(nameExt)     fp.functionPointer##nameExt
 #ifdef SHELLCOMMANDINCLASS
 #undef SHELLCOMMANDINCLASS
@@ -398,4 +420,11 @@
 
   private:
+//! FUNCTOR_LIST is the List of FunctionPointers
+    union FunctionPointers {
+#define FUNCTOR_LIST(x) ShellCommandFunctionPoiter ## x
+#include "functor_list.h"
+#undef FUNCTOR_LIST
+    } fp;
+
 //! FUNCTOR_LIST is the List of CommandConstructors
 #define FUNCTOR_LIST(x) ShellCommandConstructor ## x
Index: branches/world_entities/src/lib/sound/Makefile.in
===================================================================
--- branches/world_entities/src/lib/sound/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/sound/Makefile.in	(revision 5558)
@@ -207,7 +207,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/sound/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/sound/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/sound/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/sound/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/tinyxml/Makefile.in
===================================================================
--- branches/world_entities/src/lib/tinyxml/Makefile.in	(revision 5527)
+++ branches/world_entities/src/lib/tinyxml/Makefile.in	(revision 5558)
@@ -203,7 +203,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/lib/tinyxml/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/lib/tinyxml/Makefile'; \
 	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu  src/lib/tinyxml/Makefile
+	  $(AUTOMAKE) --foreign  src/lib/tinyxml/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: branches/world_entities/src/lib/util/multi_type.cc
===================================================================
--- branches/world_entities/src/lib/util/multi_type.cc	(revision 5558)
+++ branches/world_entities/src/lib/util/multi_type.cc	(revision 5558)
@@ -0,0 +1,375 @@
+/*
+   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: ...
+   co-programmer: ...
+*/
+
+//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_
+
+#include "multi_type.h"
+#include "stdincl.h"
+// #include <stddef.h>
+// #include <stdlib.h>
+// #include <string.h>
+// #include <stdio.h>
+
+using namespace std;
+
+/**
+ * creates a multiType without any stored value at all.
+ */
+MultiType::MultiType()
+{
+  this->init();
+}
+/**
+ * creates a multiType out of a boolean
+ * @param value the Value of this MulitType
+ */
+MultiType::MultiType(bool value)
+{
+  this->init();
+  this->setBool(value);
+}
+
+/**
+ * creates a multiType out of an integer
+ * @param value the Value of this MulitType
+ */
+MultiType::MultiType(int value)
+{
+  this->init();
+  this->setInt(value);
+}
+
+/**
+ * creates a multiType out of a float (double)
+ * @param value the Value of this MulitType
+ */
+MultiType::MultiType(double value)
+{
+  this->init();
+  this->setFloat(value);
+}
+
+/**
+ * creates a multiType out of a char
+ * @param value the Value of this MulitType
+ */
+MultiType::MultiType(char value)
+{
+  this->init();
+  this->setChar(value);
+}
+
+/**
+ * creates a multiType out of a String
+ * @param value the Value of this MulitType
+ */
+MultiType::MultiType(const char* value)
+{
+  this->init();
+  this->setString(value);
+}
+
+/**
+ * standard deconstructor
+*/
+MultiType::~MultiType ()
+{
+  if (this->storedString != NULL)
+    delete[] this->storedString;
+}
+
+/**
+ * copy Constructor
+ * @param mt: the entity to copy
+ * @returns a Copy of itself. (strings inside are copied as well)
+ */
+MultiType MultiType::operator= (const MultiType& mt)
+{
+  this->type = mt.type;
+  this->value = mt.value;
+
+  if (mt.type == MT_STRING)
+  {
+    this->storedString = new char[strlen (mt.storedString)+1];
+    strcpy(this->storedString, mt.storedString);
+    this->value.String = this->storedString;
+  }
+}
+
+/**
+ * initializes the MultiType
+ */
+void MultiType::init()
+{
+  this->type = MT_NULL;
+  this->storedString = NULL;
+}
+
+
+
+void MultiType::setType(MT_Type)
+{
+
+}
+
+/**
+ * sets a new Value to the MultiType
+ * @param value the new Value as a bool
+ */
+void MultiType::setBool(bool value)
+{
+  this->type = MT_BOOL;
+  this->value.Bool = value;
+}
+
+/**
+ * sets a new Value to the MultiType
+ * @param value the new Value as an int
+ */
+void MultiType::setInt(int value)
+{
+  this->type = MT_INT;
+  this->value.Int = value;
+}
+
+/**
+ * sets a new Value to the MultiType
+ * @param value the new Value as a float
+ */
+void MultiType::setFloat(float value)
+{
+  this->type = MT_FLOAT;
+  this->value.Float = value;
+
+}
+
+/**
+ * sets a new Value to the MultiType
+ * @param value the new Value as a char
+ */
+void MultiType::setChar(char value)
+{
+  this->type = MT_CHAR;
+  this->value.Char = value;
+}
+
+/**
+ * sets a new Value to the MultiType
+ * @param value the new Value as a String
+ */
+void MultiType::setString(const char* value)
+{
+  this->type = MT_STRING;
+
+  if (this->storedString != NULL)
+    delete[] this->storedString;
+
+  if (value == NULL)
+  {
+    this->storedString = new char[1];
+    this->storedString[0] = '\0';
+    this->value.String = this->storedString;
+    return;
+  }
+  else
+  {
+    this->storedString = new char[strlen(value)+1];
+    strcpy(storedString, value);
+    this->value.String = this->storedString;
+  }
+}
+
+
+
+
+
+/**
+ * @returns the Value of this MultiType as a int
+ */
+bool MultiType::getBool() const
+{
+  // default case:
+  if (this->type & MT_BOOL)
+    return this->value.Bool;
+  // Special Cases:
+  else if (this->type & MT_INT) return (this->value.Int == 0)? false : true;
+  else if (this->type & MT_FLOAT) return (this->value.Float == 0.0f)? false : true;
+  else if (this->type & MT_CHAR) return (this->value.Char == '\0')? false : true;
+  else if (this->type & MT_STRING) return (!strncmp(this->value.String, "true", 4) || !strncmp(this->value.String, "TRUE", 4) || !strncmp(this->value.String, "1", 1))? true : false; //! @TODO make this better.
+
+  return false;
+}
+
+/**
+ * @returns the Value of this MultiType as a int
+ */
+int MultiType::getInt() const
+{
+  // default case:
+  if (this->type & MT_INT)
+    return this->value.Int;
+  if (this->type & MT_BOOL) return (this->value.Bool)? 1 : 0;
+  else if (this->type & MT_FLOAT) return (int) this->value.Float;
+  else if (this->type & MT_CHAR) return (int) this->value.Char;
+  else if (this->type & MT_STRING) {
+    char* endPtr = NULL;
+    int result = strtol(this->value.String, &endPtr, 10);
+    if ( endPtr >= this->value.String && endPtr < this->value.String + strlen(this->value.String))
+      return 0;
+    else
+      return result;
+  }
+
+  return 0;
+}
+
+/**
+ * @returns the Value of this MultiType as a float
+ */
+float MultiType::getFloat() const
+{
+ // default case:
+  if (this->type & MT_FLOAT)
+    return this->value.Float;
+  if (this->type & MT_BOOL) return (this->value.Bool == true)? 1.0f : 0.0f;
+  else if (this->type & MT_INT) return (float) this->value.Int;
+  else if (this->type & MT_CHAR) return (float) this->value.Char;
+  else if (this->type & MT_STRING) {
+    char* endPtr = NULL;
+    double result = strtod(this->value.String, &endPtr);
+    if ( endPtr >= this->value.String && endPtr < this->value.String + strlen(this->value.String))
+      return 0.0f;
+    else
+      return result;
+  }
+
+  return 0.0f;
+}
+
+
+/**
+ * @returns the Value of this MultiType as a char
+ */
+char MultiType::getChar() const
+{
+ // default case:
+  if (this->type & MT_INT)
+    return this->value.Int;
+  if (this->type & MT_BOOL) return (this->value.Bool)? 'y' : 'n';
+  else if (this->type & MT_INT) return (int) this->value.Int;
+  else if (this->type & MT_FLOAT) return (char) this->value.Float;
+  else if (this->type & MT_STRING) return *this->value.String;
+
+  return '\0';
+}
+
+/**
+ * @returns the Value of this MultiType as a String
+ */
+const char* MultiType::getString()
+{
+ // default case:
+  if (this->type & MT_STRING)
+    return this->value.String;
+  else
+  {
+    if (this->type & MT_BOOL) return (this->value.Bool)? "true" : "false";
+    else if (this->type & MT_CHAR) &this->value.Char;
+
+    char tmpString[128];
+    if (this->storedString != NULL)
+    {
+      delete[] this->storedString;
+      this->storedString = NULL;
+    }
+
+    if (this->type & MT_INT)
+    {
+      sprintf(tmpString, "%d", this->value.Int);
+      this->storedString = new char[strlen (tmpString)+1];
+      strcpy (this->storedString, tmpString);
+      return this->storedString;
+    }
+    if (this->type & MT_FLOAT)
+    {
+      sprintf(tmpString, "%f", this->value.Float);
+      this->storedString = new char[strlen (tmpString)+1];
+      strcpy (this->storedString, tmpString);
+      return this->storedString;
+    }
+  }
+
+  return "";
+}
+
+/**
+ * prints out some nice debug output
+ */
+void MultiType::debug()
+{
+  printf("MultiType of Type: %s is: BOOL: %d, INT: %d, FLOAT: %f, CHAR: %c, STRING %s\n",
+         MultiType::MultiTypeToString(this->type),
+         this->getBool(),
+         this->getInt(),
+         this->getFloat(),
+         this->getChar(),
+         this->getString()
+  );
+
+
+}
+
+/**
+ * converts a MT_Type into a String
+ * @param type: the MT_Type
+ * @returns: the Type as a constant String (do not delete)
+ */
+const char* MultiType::MultiTypeToString(MT_Type type)
+{
+  switch (type)
+  {
+   default:
+    return "NONE";
+   case MT_BOOL:
+    return "bool";
+   case MT_INT:
+    return "int";
+   case MT_FLOAT:
+    return "float";
+   case MT_CHAR:
+    return "char";
+   case MT_STRING:
+    return "string";
+  }
+}
+
+/**
+ * converts a String into a MT_Type
+ * @param type: the Type as a String
+ * @returns: the Type as MT_Type
+ */
+MT_Type MultiType::StringToMultiType(const char* type)
+{
+  if (!strncmp(type, "bool", 4))
+    return MT_BOOL;
+  if (!strncmp(type, "int", 3))
+    return MT_INT;
+  if (!strncmp(type, "float", 5))
+    return MT_FLOAT;
+  if (!strncmp(type, "char", 4))
+    return MT_CHAR;
+  if (!strncmp(type, "string", 6))
+    return MT_STRING;
+}
Index: branches/world_entities/src/lib/util/multi_type.h
===================================================================
--- branches/world_entities/src/lib/util/multi_type.h	(revision 5558)
+++ branches/world_entities/src/lib/util/multi_type.h	(revision 5558)
@@ -0,0 +1,92 @@
+/*!
+ * @file multi_type.h
+ * @brief Definition of ...
+ */
+
+#ifndef _MULTI_TYPE_H
+#define _MULTI_TYPE_H
+
+// FORWARD DECLARATION
+
+//! An enumerator defining Types, that can be stored inside a MultiType.
+typedef enum
+{
+  MT_NULL            = 0,                  //!< No Value at all.
+  MT_BOOL            = 1,                  //!< A bool Value.
+  MT_INT             = 2,                  //!< An int Value.
+  MT_FLOAT           = 4,                  //!< A float Value.
+  MT_CHAR            = 8,                  //!< A single char.
+  MT_STRING          = 16,                 //!< An entire String.
+
+} MT_Type;
+
+
+
+//! A class that encapsulates multiple differen types.
+/**
+ * Only one Value can be Stored inside this Class, but it can have any type: @see MT_Type.
+ */
+class MultiType {
+
+  public:
+    MultiType();
+    MultiType(bool value);
+    MultiType(int value);
+    MultiType(double value);
+    MultiType(char value);
+    MultiType(const char* value);
+    virtual ~MultiType();
+
+    MultiType operator= (const MultiType& mt);
+
+    void setType(MT_Type);
+
+    void setBool(bool value);
+    void setInt(int value);
+    void setFloat(float value);
+    void setChar(char value);
+    void setString(const char* value);
+
+    inline void setValue(bool value) { this->setBool(value); };
+    inline void setValue(int value) { this->setInt(value); };
+    inline void setValue(float value) { this->setFloat(value); };
+    inline void setValue(char value) { this->setChar(value); };
+    inline void setValue(const char* value) { this->setString(value); };
+
+    /** @returns the Type of the Value stored in this MultiType */
+    inline MT_Type getType() const { return this->type; };
+
+
+    /* RETRIEVING FUNCTIONS */
+    bool getBool() const;
+    int getInt() const;
+    float getFloat() const;
+    char getChar() const;
+    const char* getString();
+
+
+    void debug();
+
+    static const char* MultiTypeToString(MT_Type type);
+    static MT_Type StringToMultiType(const char* type);
+
+  private:
+    void init();
+
+
+  private:
+    MT_Type             type;
+    union MultiTypeValue
+    {
+      bool              Bool;
+      int               Int;
+      float             Float;
+      char              Char;
+      char*             String;
+
+    }                   value;
+
+    char*               storedString;
+};
+
+#endif /* _MULTI_TYPE_H */
