Index: code/trunk/src/util/CMakeLists.txt
===================================================================
--- code/trunk/src/util/CMakeLists.txt	(revision 3089)
+++ code/trunk/src/util/CMakeLists.txt	(revision 3196)
@@ -18,25 +18,5 @@
  #
 
-SET_SOURCE_FILES(UTIL_FILES
-  CRC32.h
-  Clipboard.h
-  Convert.h
-  Debug.h
-  Exception.h
-  ExprParser.h
-  Math.h
-  MathConvert.h
-  MultiType.h
-  MultiTypeValue.h
-  OrxEnum.h
-  OutputBuffer.h
-  OutputHandler.h
-  SignalHandler.h
-  Sleep.h
-  String.h
-  SubString.h
-  UtilPrereqs.h
-  mbool.h
-  
+SET_SOURCE_FILES(UTIL_SRC_FILES
   Clipboard.cc
   CRC32.cc
@@ -52,20 +32,4 @@
   SubString.cc
 )
-#GET_ALL_HEADER_FILES(UTIL_HDR_FILES)
-#SET(UTIL_FILES ${UTIL_SRC_FILES} ${UTIL_HDR_FILES})
-GENERATE_SOURCE_GROUPS(${UTIL_FILES})
-# Also add OrxonoxConfig to have it least somewhere in the IDE
-LIST(APPEND UTIL_FILES
-  ${CMAKE_BINARY_DIR}/src/OrxonoxConfig.h
-  ${CMAKE_SOURCE_DIR}/src/OrxonoxConfig.h.in
-  ${CMAKE_BINARY_DIR}/src/SpecialConfig.h
-  ${CMAKE_SOURCE_DIR}/src/SpecialConfig.h.in
-)
-SOURCE_GROUP("" FILES
-  ${CMAKE_BINARY_DIR}/src/OrxonoxConfig.h
-  ${CMAKE_SOURCE_DIR}/src/OrxonoxConfig.h.in
-  ${CMAKE_BINARY_DIR}/src/SpecialConfig.h
-  ${CMAKE_SOURCE_DIR}/src/SpecialConfig.h.in
-)
 
 IF(GCC_NO_SYSTEM_HEADER_SUPPORT)
@@ -74,7 +38,11 @@
 ENDIF()
 
-ADD_LIBRARY(util SHARED ${UTIL_FILES})
-SET_TARGET_PROPERTIES(util PROPERTIES DEFINE_SYMBOL "UTIL_SHARED_BUILD")
-TARGET_LINK_LIBRARIES(util ${OGRE_LIBRARY})
-
-ORXONOX_INSTALL(util)
+ORXONOX_ADD_LIBRARY(util
+  FIND_HEADER_FILES
+  DEFINE_SYMBOL
+    "UTIL_SHARED_BUILD"
+  LINK_LIBRARIES
+    ${OGRE_LIBRARY}
+  SOURCE_FILES
+    ${UTIL_SRC_FILES}
+)
Index: code/trunk/src/util/CRC32.h
===================================================================
--- code/trunk/src/util/CRC32.h	(revision 3089)
+++ code/trunk/src/util/CRC32.h	(revision 3196)
@@ -31,5 +31,4 @@
 
 #include "UtilPrereqs.h"
-#include <iostream>
 
 namespace orxonox
Index: code/trunk/src/util/Clipboard.cc
===================================================================
--- code/trunk/src/util/Clipboard.cc	(revision 3089)
+++ code/trunk/src/util/Clipboard.cc	(revision 3196)
@@ -112,5 +112,5 @@
 namespace orxonox
 {
-    std::string clipboard = ""; //!< Keeps the text of our internal clipboard
+    static std::string clipboard = ""; //!< Keeps the text of our internal clipboard
 
     /**
Index: code/trunk/src/util/Clipboard.h
===================================================================
--- code/trunk/src/util/Clipboard.h	(revision 3089)
+++ code/trunk/src/util/Clipboard.h	(revision 3196)
@@ -43,5 +43,4 @@
 
 #include "UtilPrereqs.h"
-
 #include <string>
 
Index: code/trunk/src/util/Convert.h
===================================================================
--- code/trunk/src/util/Convert.h	(revision 3089)
+++ code/trunk/src/util/Convert.h	(revision 3196)
@@ -40,6 +40,4 @@
 #include <string>
 #include <sstream>
-#include <istream>
-#include <ostream>
 #include <typeinfo>
 
@@ -123,5 +121,5 @@
 namespace orxonox
 {
-    namespace
+    namespace detail
     {
         //! Little template that maps integers to entire types (Alexandrescu 2001)
@@ -139,5 +137,5 @@
     struct ConverterFallback
     {
-        static bool convert(ToType* output, const FromType& input)
+        FORCEINLINE static bool convert(ToType* output, const FromType& input)
         {
             COUT(2) << "Could not convert value of type " << typeid(FromType).name()
@@ -151,5 +149,5 @@
     struct ConverterFallback<FromType*, ToType*>
     {
-        static bool convert(ToType** output, FromType* const input)
+        FORCEINLINE static bool convert(ToType** output, FromType* const input)
         {
             ToType* temp = dynamic_cast<ToType*>(input);
@@ -174,5 +172,5 @@
 struct ConverterStringStream
 {
-    static bool convert(ToType* output, const FromType& input)
+    FORCEINLINE static bool convert(ToType* output, const FromType& input)
     {
         return orxonox::ConverterFallback<FromType, ToType>::convert(output, input);
@@ -188,5 +186,5 @@
 {
     template <class FromType>
-    inline bool operator <<(std::ostream& outstream,  const FromType& input)
+    FORCEINLINE bool operator <<(std::ostream& outstream,  const FromType& input)
     {
         std::string temp;
@@ -205,5 +203,5 @@
 struct ConverterStringStream<FromType, std::string>
 {
-    static bool convert(std::string* output, const FromType& input)
+    FORCEINLINE static bool convert(std::string* output, const FromType& input)
     {
         using namespace fallbackTemplates;
@@ -228,5 +226,5 @@
 {
     template <class ToType>
-    inline bool operator >>(std::istream& instream, ToType& output)
+    FORCEINLINE bool operator >>(std::istream& instream, ToType& output)
     {
         return orxonox::ConverterFallback<std::string, ToType>
@@ -239,5 +237,5 @@
 struct ConverterStringStream<std::string, ToType>
 {
-    static bool convert(ToType* output, const std::string& input)
+    FORCEINLINE static bool convert(ToType* output, const std::string& input)
     {
         using namespace fallbackTemplates;
@@ -262,5 +260,5 @@
     // implicit cast not possible, try stringstream conversion next
     template <class FromType, class ToType>
-    inline bool convertImplicitely(ToType* output, const FromType& input, orxonox::Int2Type<false>)
+    FORCEINLINE bool convertImplicitely(ToType* output, const FromType& input, detail::Int2Type<false>)
     {
         return ConverterStringStream<FromType, ToType>::convert(output, input);
@@ -269,5 +267,5 @@
     // We can cast implicitely
     template <class FromType, class ToType>
-    inline bool convertImplicitely(ToType* output, const FromType& input, orxonox::Int2Type<true>)
+    FORCEINLINE bool convertImplicitely(ToType* output, const FromType& input, detail::Int2Type<true>)
     {
         (*output) = static_cast<ToType>(input);
@@ -284,10 +282,10 @@
     struct ConverterExplicit
     {
-        static bool convert(ToType* output, const FromType& input)
+        FORCEINLINE static bool convert(ToType* output, const FromType& input)
         {
             // Try implict cast and probe first. If a simple cast is not possible, it will not compile
             // We therefore have to out source it into another template function
             const bool probe = ImplicitConversion<FromType, ToType>::exists;
-            return convertImplicitely(output, input, orxonox::Int2Type<probe>());
+            return convertImplicitely(output, input, detail::Int2Type<probe>());
         }
     };
@@ -306,14 +304,7 @@
     */
     template <class FromType, class ToType>
-    inline bool convertValue(ToType* output, const FromType& input)
+    FORCEINLINE bool convertValue(ToType* output, const FromType& input)
     {
         return ConverterExplicit<FromType, ToType>::convert(output, input);
-    }
-
-    // For compatibility reasons. The same, but with capital ConvertValue
-    template<class FromType, class ToType>
-    inline bool ConvertValue(ToType* output, const FromType& input)
-    {
-        return convertValue(output, input);
     }
 
@@ -331,5 +322,5 @@
     */
     template<class FromType, class ToType>
-    inline bool convertValue(ToType* output, const FromType& input, const ToType& fallback)
+    FORCEINLINE bool convertValue(ToType* output, const FromType& input, const ToType& fallback)
     {
         if (convertValue(output, input))
@@ -342,14 +333,7 @@
     }
 
-    // for compatibility reason. (capital 'c' in ConvertValue)
-    template<class FromType, class ToType>
-    inline bool ConvertValue(ToType* output, const FromType& input, const ToType& fallback)
-    {
-        return convertValue(output, input, fallback);
-    }
-
     // Directly returns the converted value, even if the conversion was not successful.
     template<class FromType, class ToType>
-    inline ToType getConvertedValue(const FromType& input)
+    FORCEINLINE ToType getConvertedValue(const FromType& input)
     {
         ToType output;
@@ -360,5 +344,5 @@
     // Directly returns the converted value, but uses the fallback on failure.
     template<class FromType, class ToType>
-    inline ToType getConvertedValue(const FromType& input, const ToType& fallback)
+    FORCEINLINE ToType getConvertedValue(const FromType& input, const ToType& fallback)
     {
         ToType output;
@@ -370,5 +354,5 @@
     // That means you can call it exactly like static_cast<ToType>(fromTypeValue).
     template<class ToType, class FromType>
-    inline ToType omni_cast(const FromType& input)
+    FORCEINLINE ToType multi_cast(const FromType& input)
     {
         ToType output;
@@ -379,14 +363,14 @@
     // convert to string Shortcut
     template <class FromType>
-    inline std::string convertToString(FromType value)
-    {
-      return getConvertedValue<FromType, std::string>(value);
+    FORCEINLINE std::string convertToString(FromType value)
+    {
+        return getConvertedValue<FromType, std::string>(value);
     }
 
     // convert from string Shortcut
     template <class ToType>
-    inline ToType convertFromString(std::string str)
-    {
-      return getConvertedValue<std::string, ToType>(str);
+    FORCEINLINE ToType convertFromString(std::string str)
+    {
+        return getConvertedValue<std::string, ToType>(str);
     }
 
@@ -399,5 +383,5 @@
     struct ConverterExplicit<const char*, ToType>
     {
-        static bool convert(ToType* output, const char* input)
+        FORCEINLINE static bool convert(ToType* output, const char* input)
         {
             return convertValue<std::string, ToType>(output, input);
@@ -409,5 +393,5 @@
     struct ConverterExplicit<char, std::string>
     {
-        static bool convert(std::string* output, const char input)
+        FORCEINLINE static bool convert(std::string* output, const char input)
         {
             *output = std::string(1, input);
@@ -418,5 +402,5 @@
     struct ConverterExplicit<unsigned char, std::string>
     {
-        static bool convert(std::string* output, const unsigned char input)
+        FORCEINLINE static bool convert(std::string* output, const unsigned char input)
         {
             *output = std::string(1, input);
@@ -427,5 +411,5 @@
     struct ConverterExplicit<std::string, char>
     {
-        static bool convert(char* output, const std::string input)
+        FORCEINLINE static bool convert(char* output, const std::string input)
         {
             if (input != "")
@@ -439,5 +423,5 @@
     struct ConverterExplicit<std::string, unsigned char>
     {
-        static bool convert(unsigned char* output, const std::string input)
+        FORCEINLINE static bool convert(unsigned char* output, const std::string input)
         {
             if (input != "")
@@ -454,5 +438,5 @@
     struct ConverterExplicit<bool, std::string>
     {
-        static bool convert(std::string* output, const bool& input)
+        FORCEINLINE static bool convert(std::string* output, const bool& input)
         {
             if (input)
Index: code/trunk/src/util/Debug.h
===================================================================
--- code/trunk/src/util/Debug.h	(revision 3089)
+++ code/trunk/src/util/Debug.h	(revision 3196)
@@ -63,6 +63,4 @@
 #include "UtilPrereqs.h"
 
-#include <stdio.h>
-
 #include "OutputHandler.h"
 
@@ -73,5 +71,5 @@
         @return The soft debug level
     */
-    static inline int getSoftDebugLevel()
+    inline int getSoftDebugLevel()
     {
         return OutputHandler::getSoftDebugLevel();
Index: code/trunk/src/util/Exception.cc
===================================================================
--- code/trunk/src/util/Exception.cc	(revision 3089)
+++ code/trunk/src/util/Exception.cc	(revision 3196)
@@ -37,5 +37,5 @@
 namespace orxonox
 {
-    Exception::Exception(const std::string& description, int lineNumber,
+    Exception::Exception(const std::string& description, unsigned int lineNumber,
                          const char* filename, const char* functionName)
         : description_(description)
@@ -52,4 +52,10 @@
     { }
 
+    /**
+    @remarks
+        The composed full description gets stored to fullDescription_. But for compliance
+        with std::exception, this method has to be const. Hence fullDescription_ is declared
+        as mutable.
+    */
     const std::string& Exception::getFullDescription() const
     {
Index: code/trunk/src/util/Exception.h
===================================================================
--- code/trunk/src/util/Exception.h	(revision 3089)
+++ code/trunk/src/util/Exception.h	(revision 3196)
@@ -30,5 +30,5 @@
 @file
 @brief
-    Declaration of the Exception class.
+    Declaration of facilities to handle exceptions.
 */
 
@@ -38,52 +38,73 @@
 #include "UtilPrereqs.h"
 
+#include <exception>
+#include <sstream>
 #include <string>
-#include <exception>
-#include <cassert>
 #include "Debug.h"
 
 namespace orxonox
 {
+    /**
+    @brief
+        Base class for all exceptions (derived from std::exception).
+    @details
+        This class provides support for information about the file, the line
+        and the function the error occured.
+    */
     class _UtilExport Exception : public std::exception
     {
     public:
-
-        Exception(const std::string& description, int lineNumber,
+        /**
+        @brief
+            Creates the exception but doesn't yet compose the full descrption (because of the virtual functions)
+        @param description
+            Exception description as string. This message is supposed to help developers!
+        */
+        Exception(const std::string& description, unsigned int lineNumber,
                   const char* filename, const char* functionName);
+        //! Simplified constructor with just a description. If you need more, use the other one.
         Exception(const std::string& description);
 
-        /// Needed for  compatibility with std::exception (from Ogre::Exception)
+        //! Needed for compatibility with std::exception
         virtual ~Exception() throw() { }
 
+        //! Returns a full description with type, line, file and function
         virtual const std::string& getFullDescription() const;
+        //! Returns the string name of the exception type
         virtual std::string        getTypeName()        const = 0;
+        //! Returns the short developer written exception
         virtual const std::string& getDescription()     const { return this->description_; }
-        virtual const int          getLineNumber()      const { return this->lineNumber_; }
+        //! Returns the line number on which the exception occurred.
+        virtual const unsigned int getLineNumber()      const { return this->lineNumber_; }
+        //! Returns the function in which the exception occurred.
         virtual const std::string& getFunctionName()    const { return this->functionName_; }
+        //! Returns the filename in which the exception occurred.
+        virtual const std::string& getFilename()        const { return this->filename_; }
 
-        /// Override std::exception::what (from Ogre::Exception)
+        //! Returns a full description of the error.
         const char* what() const throw() { return getFullDescription().c_str(); }
 
     protected:
-        std::string description_;
-        int lineNumber_;
-        std::string functionName_;
-        std::string filename_;
+        std::string description_;             //!< User typed text about why the exception occurred
+        unsigned int lineNumber_;             //!< Line on which the exception occurred
+        std::string functionName_;            //!< Function (including namespace and class) where the exception occurred
+        std::string filename_;                //!< File where the exception occurred
         // mutable because "what()" is a const method
-        mutable std::string fullDescription_;
+        mutable std::string fullDescription_; //!< Full description with line, file and function
     };
 
-
+//! Creates a new type of exception that inherits from tracker::Exception
 #define CREATE_ORXONOX_EXCEPTION(ExceptionName)                                     \
     class ExceptionName##Exception : public Exception                               \
     {                                                                               \
     public:                                                                         \
-        ExceptionName##Exception(const std::string& description, int lineNumber,    \
-                  const char* filename, const char* functionName)                   \
-                  : Exception(description, lineNumber, filename, functionName)      \
+        ExceptionName##Exception(const std::string& description,                    \
+                unsigned int lineNumber, const char* filename,                      \
+                const char* functionName)                                           \
+            : Exception(description, lineNumber, filename, functionName)            \
         { }                                                                         \
                                                                                     \
         ExceptionName##Exception(const std::string& description)                    \
-                  : Exception(description)                                          \
+            : Exception(description)                                                \
         { }                                                                         \
                                                                                     \
@@ -91,8 +112,9 @@
                                                                                     \
         std::string getTypeName() const { return #ExceptionName; }                  \
-    };
+    }
 
     // Creates all possible exception types.
     // If you want to add a new type, simply copy and adjust a new line here.
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
     CREATE_ORXONOX_EXCEPTION(General);
     CREATE_ORXONOX_EXCEPTION(FileNotFound);
@@ -106,12 +128,14 @@
     CREATE_ORXONOX_EXCEPTION(NoGraphics);
     CREATE_ORXONOX_EXCEPTION(AbortLoading);
-}
+#endif
 
     /**
     @brief
-        Helper function that creates an exception, displays the message, but doesn't throw it.
+        Helper function that forwards an exception and displays the message.
+    @details
+        This is necessary because only when using 'throw' the objects storage is managed.
     */
     template <class T>
-    inline const T& InternalHandleException(const T& exception)
+    inline const T& exceptionThrowerHelper(const T& exception)
     {
         // let the catcher decide whether to display the message below level 4
@@ -120,15 +144,16 @@
     }
 
-#define ThrowException(type, description) \
-    throw InternalHandleException(type##Exception(description, __LINE__, __FILE__, __FUNCTIONNAME__))
+/**
+@brief
+    Throws an exception and logs a message beforehand.
+@param type
+    Type of the exception as literal (General, Initialisation, etc.)
+@param description
+    Exception description as string
+*/
+#define ThrowException(type, description, ...) \
+    throw orxonox::exceptionThrowerHelper(type##Exception(static_cast<std::ostringstream&>(std::ostringstream().flush() << description).str(), __LINE__, __FILE__, __FUNCTIONNAME__))
 
-    // define an assert macro that can display a message
-#ifndef NDEBUG
-#define OrxAssert(Assertion, ErrorMessage) \
-    Assertion ? ((void)0) : (void)(orxonox::OutputHandler::getOutStream().setOutputLevel(ORX_ERROR) << ErrorMessage << std::endl); \
-    assert(Assertion)
-#else
-#define OrxAssert(condition, errorMessage)  ((void)0)
-#endif
+} /* namespace orxonox */
 
 #endif /* _Exception_H__ */
Index: code/trunk/src/util/ExprParser.cc
===================================================================
--- code/trunk/src/util/ExprParser.cc	(revision 3089)
+++ code/trunk/src/util/ExprParser.cc	(revision 3196)
@@ -35,5 +35,5 @@
 #include <cmath>
 #include <cstring>
-#include <stdlib.h>
+#include <cstdlib>
 
 // macros for easier if, else statements
@@ -247,9 +247,9 @@
             return 0;
         }
-        else if (*reading_stream > 47 && *reading_stream < 59 || *reading_stream == 46)
+        else if ((*reading_stream > 47 && *reading_stream < 59) || *reading_stream == 46)
         {  // number
             value = strtod(reading_stream, const_cast<char**>(&reading_stream));
         }
-        else if (*reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)
+        else if ((*reading_stream > 64 && *reading_stream < 91) || (*reading_stream > 96 && *reading_stream < 123) || *reading_stream == 46)
         {  // variable or function
             char* word = new char[256];
@@ -384,5 +384,5 @@
         char* word = str;
         int counter = 0;
-        while (*reading_stream > 47 && *reading_stream < 58 || *reading_stream > 64 && *reading_stream < 91 || *reading_stream > 96 && *reading_stream < 123 || *reading_stream == 46)
+        while ((*reading_stream > 47 && *reading_stream < 58) || (*reading_stream > 64 && *reading_stream < 91) || (*reading_stream > 96 && *reading_stream < 123) || *reading_stream == 46)
         {
             *word++ = *reading_stream++;
Index: code/trunk/src/util/ExprParser.h
===================================================================
--- code/trunk/src/util/ExprParser.h	(revision 3089)
+++ code/trunk/src/util/ExprParser.h	(revision 3196)
@@ -72,7 +72,7 @@
 
         ExprParser(const std::string& str);
-        std::string& getRemains() { return  this->remains_; }
-        double       getResult()  { return  this->result_; }
-        bool         getSuccess() { return !this->failed_; }
+        const std::string& getRemains() { return  this->remains_; }
+        double             getResult()  { return  this->result_; }
+        bool               getSuccess() { return !this->failed_; }
 
     private:
Index: code/trunk/src/util/Math.cc
===================================================================
--- code/trunk/src/util/Math.cc	(revision 3089)
+++ code/trunk/src/util/Math.cc	(revision 3196)
@@ -35,8 +35,8 @@
 
 #include <OgrePlane.h>
+
 #include "MathConvert.h"
 #include "SubString.h"
-
-// Do not remove this include to avoid linker errors.
+// Do not remove this include, it avoids linker errors.
 #include "mbool.h"
 
@@ -238,7 +238,7 @@
         if (tokens.size() >= 2)
         {
-            if (!ConvertValue(&(output->x), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[1]))
+            if (!convertValue(&(output->x), tokens[0]))
+                return false;
+            if (!convertValue(&(output->y), tokens[1]))
                 return false;
 
@@ -261,9 +261,9 @@
         if (tokens.size() >= 3)
         {
-            if (!ConvertValue(&(output->x), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->z), tokens[2]))
+            if (!convertValue(&(output->x), tokens[0]))
+                return false;
+            if (!convertValue(&(output->y), tokens[1]))
+                return false;
+            if (!convertValue(&(output->z), tokens[2]))
                 return false;
 
@@ -286,11 +286,11 @@
         if (tokens.size() >= 4)
         {
-            if (!ConvertValue(&(output->x), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->z), tokens[2]))
-                return false;
-            if (!ConvertValue(&(output->w), tokens[3]))
+            if (!convertValue(&(output->x), tokens[0]))
+                return false;
+            if (!convertValue(&(output->y), tokens[1]))
+                return false;
+            if (!convertValue(&(output->z), tokens[2]))
+                return false;
+            if (!convertValue(&(output->w), tokens[3]))
                 return false;
 
@@ -309,11 +309,11 @@
         if (tokens.size() >= 4)
         {
-            if (!ConvertValue(&(output->w), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->x), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->y), tokens[2]))
-                return false;
-            if (!ConvertValue(&(output->z), tokens[3]))
+            if (!convertValue(&(output->w), tokens[0]))
+                return false;
+            if (!convertValue(&(output->x), tokens[1]))
+                return false;
+            if (!convertValue(&(output->y), tokens[2]))
+                return false;
+            if (!convertValue(&(output->z), tokens[3]))
                 return false;
 
@@ -332,13 +332,13 @@
         if (tokens.size() >= 3)
         {
-            if (!ConvertValue(&(output->r), tokens[0]))
-                return false;
-            if (!ConvertValue(&(output->g), tokens[1]))
-                return false;
-            if (!ConvertValue(&(output->b), tokens[2]))
+            if (!convertValue(&(output->r), tokens[0]))
+                return false;
+            if (!convertValue(&(output->g), tokens[1]))
+                return false;
+            if (!convertValue(&(output->b), tokens[2]))
                 return false;
             if (tokens.size() >= 4)
             {
-                if (!ConvertValue(&(output->a), tokens[3]))
+                if (!convertValue(&(output->a), tokens[3]))
                     return false;
             }
Index: code/trunk/src/util/Math.h
===================================================================
--- code/trunk/src/util/Math.h	(revision 3089)
+++ code/trunk/src/util/Math.h	(revision 3196)
@@ -37,8 +37,6 @@
 #include "UtilPrereqs.h"
 
-#include <ostream>
 #include <string>
 #include <cmath>
-#include <boost/static_assert.hpp>
 
 #include <OgreMath.h>
@@ -46,6 +44,4 @@
 #include <OgreVector3.h>
 #include <OgreVector4.h>
-#include <OgreMatrix3.h>
-#include <OgreMatrix4.h>
 #include <OgreQuaternion.h>
 #include <OgreColourValue.h>
@@ -58,32 +54,4 @@
 namespace orxonox
 {
-    using Ogre::Radian;
-    using Ogre::Degree;
-    using Ogre::Vector2;
-    using Ogre::Vector3;
-    using Ogre::Vector4;
-    using Ogre::Matrix3;
-    using Ogre::Matrix4;
-    using Ogre::Quaternion;
-    using Ogre::ColourValue;
-
-    // Also define our own transform space enum
-    namespace TransformSpace
-    {
-        /**
-        @brief
-            Enumeration denoting the spaces which a transform can be relative to.
-        */
-        enum Enum
-        {
-            //! Transform is relative to the local space
-            Local,
-            //! Transform is relative to the space of the parent node
-            Parent,
-            //! Transform is relative to world space
-            World
-        };
-    }
-
     _UtilExport std::ostream& operator<<(std::ostream& out, const orxonox::Radian& radian);
     _UtilExport std::istream& operator>>(std::istream& in, orxonox::Radian& radian);
@@ -217,4 +185,17 @@
     template <> inline orxonox::Quaternion  zeroise<orxonox::Quaternion>()  { return orxonox::Quaternion (0, 0, 0, 0); }
 
+    //! Provides zero value symbols that can be returned as reference
+    template <typename T>
+    struct NilValue
+    {
+        inline operator const T&() const
+        {
+            return value;
+        }
+        static T value;
+    };
+    template <typename T>
+    T NilValue<T>::value = zeroise<T>();
+
     /**
         @brief Interpolates between two values for a time between 0 and 1.
@@ -225,5 +206,5 @@
     */
     template <typename T>
-    T interpolate(float time, const T& start, const T& end)
+    inline T interpolate(float time, const T& start, const T& end)
     {
         return time * (end - start) + start;
@@ -238,5 +219,5 @@
     */
     template <typename T>
-    T interpolateSmooth(float time, const T& start, const T& end)
+    inline T interpolateSmooth(float time, const T& start, const T& end)
     {
         return (-2 * (end - start) * cube(time)) + (3 * (end - start) * square(time)) + start;
@@ -248,5 +229,5 @@
     inline float rnd()
     {
-        return rand() / (RAND_MAX + 1.0);
+        return rand() / (RAND_MAX + 1.0f);
     }
 
@@ -275,5 +256,5 @@
     inline float rndsgn()
     {
-        return ((rand() & 0x2) - 1); // rand() & 0x2 is either 2 or 0
+        return static_cast<float>((rand() & 0x2) - 1); // rand() & 0x2 is either 2 or 0
     }
 
@@ -283,8 +264,8 @@
     {
     public:
-      IntVector2() : x(0), y(0) { }
-      IntVector2(int _x, int _y) : x(_x), y(_y) { }
-      int x;
-      int y;
+        IntVector2() : x(0), y(0) { }
+        IntVector2(int _x, int _y) : x(_x), y(_y) { }
+        int x;
+        int y;
     };
 
@@ -292,9 +273,9 @@
     {
     public:
-      IntVector3() : x(0), y(0), z(0) { }
-      IntVector3(int _x, int _y, int _z) : x(_x), y(_y), z(_z) { }
-      int x;
-      int y;
-      int z;
+        IntVector3() : x(0), y(0), z(0) { }
+        IntVector3(int _x, int _y, int _z) : x(_x), y(_y), z(_z) { }
+        int x;
+        int y;
+        int z;
     };
 }
Index: code/trunk/src/util/MathConvert.h
===================================================================
--- code/trunk/src/util/MathConvert.h	(revision 3089)
+++ code/trunk/src/util/MathConvert.h	(revision 3196)
@@ -50,5 +50,5 @@
     struct ConverterExplicit<orxonox::Vector2, std::string>
     {
-        static bool convert(std::string* output, const orxonox::Vector2& input)
+        FORCEINLINE static bool convert(std::string* output, const orxonox::Vector2& input)
         {
             std::ostringstream ostream;
@@ -66,5 +66,5 @@
     struct ConverterExplicit<orxonox::Vector3, std::string>
     {
-        static bool convert(std::string* output, const orxonox::Vector3& input)
+        FORCEINLINE static bool convert(std::string* output, const orxonox::Vector3& input)
         {
             std::ostringstream ostream;
@@ -82,5 +82,5 @@
     struct ConverterExplicit<orxonox::Vector4, std::string>
     {
-        static bool convert(std::string* output, const orxonox::Vector4& input)
+        FORCEINLINE static bool convert(std::string* output, const orxonox::Vector4& input)
         {
             std::ostringstream ostream;
@@ -98,5 +98,5 @@
     struct ConverterExplicit<orxonox::Quaternion, std::string>
     {
-        static bool convert(std::string* output, const orxonox::Quaternion& input)
+        FORCEINLINE static bool convert(std::string* output, const orxonox::Quaternion& input)
         {
             std::ostringstream ostream;
@@ -114,5 +114,5 @@
     struct ConverterExplicit<orxonox::ColourValue, std::string>
     {
-        static bool convert(std::string* output, const orxonox::ColourValue& input)
+        FORCEINLINE static bool convert(std::string* output, const orxonox::ColourValue& input)
         {
             std::ostringstream ostream;
@@ -156,5 +156,5 @@
     struct ConverterFallback<orxonox::Radian, ToType>
     {
-        static bool convert(ToType* output, const orxonox::Radian& input)
+        FORCEINLINE static bool convert(ToType* output, const orxonox::Radian& input)
         {
             return convertValue<Ogre::Real, ToType>(output, input.valueRadians());
@@ -166,5 +166,5 @@
     struct ConverterFallback<orxonox::Degree, ToType>
     {
-        static bool convert(ToType* output, const orxonox::Degree& input)
+        FORCEINLINE static bool convert(ToType* output, const orxonox::Degree& input)
         {
             return convertValue<Ogre::Real, ToType>(output, input.valueDegrees());
@@ -176,5 +176,5 @@
     struct ConverterFallback<FromType, orxonox::Radian>
     {
-        static bool convert(orxonox::Radian* output, const FromType& input)
+        FORCEINLINE static bool convert(orxonox::Radian* output, const FromType& input)
         {
             float temp;
@@ -193,5 +193,5 @@
     struct ConverterFallback<FromType, orxonox::Degree>
     {
-        static bool convert(orxonox::Degree* output, const FromType& input)
+        FORCEINLINE static bool convert(orxonox::Degree* output, const FromType& input)
         {
             float temp;
Index: code/trunk/src/util/MultiType.cc
===================================================================
--- code/trunk/src/util/MultiType.cc	(revision 3089)
+++ code/trunk/src/util/MultiType.cc	(revision 3196)
@@ -159,27 +159,27 @@
     }
 
-    MultiType::operator char()                 const { return (this->value_) ? ((this->value_->type_ == MT_char       ) ? ((MT_Value<char>                *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator unsigned char()        const { return (this->value_) ? ((this->value_->type_ == MT_uchar      ) ? ((MT_Value<unsigned char>       *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator short()                const { return (this->value_) ? ((this->value_->type_ == MT_short      ) ? ((MT_Value<short>               *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator unsigned short()       const { return (this->value_) ? ((this->value_->type_ == MT_ushort     ) ? ((MT_Value<unsigned short>      *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator int()                  const { return (this->value_) ? ((this->value_->type_ == MT_int        ) ? ((MT_Value<int>                 *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator unsigned int()         const { return (this->value_) ? ((this->value_->type_ == MT_uint       ) ? ((MT_Value<unsigned int>        *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator long()                 const { return (this->value_) ? ((this->value_->type_ == MT_long       ) ? ((MT_Value<long>                *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator unsigned long()        const { return (this->value_) ? ((this->value_->type_ == MT_ulong      ) ? ((MT_Value<unsigned long>       *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator long long()            const { return (this->value_) ? ((this->value_->type_ == MT_longlong   ) ? ((MT_Value<long long>           *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator unsigned long long()   const { return (this->value_) ? ((this->value_->type_ == MT_ulonglong  ) ? ((MT_Value<unsigned long long>  *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator float()                const { return (this->value_) ? ((this->value_->type_ == MT_float      ) ? ((MT_Value<float>               *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator double()               const { return (this->value_) ? ((this->value_->type_ == MT_double     ) ? ((MT_Value<double>              *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator long double()          const { return (this->value_) ? ((this->value_->type_ == MT_longdouble ) ? ((MT_Value<long double>         *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator bool()                 const { return (this->value_) ? ((this->value_->type_ == MT_bool       ) ? ((MT_Value<bool>                *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator void*()                const { return (this->value_) ? ((this->value_->type_ == MT_void       ) ? ((MT_Value<void*>               *)this->value_)->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator std::string()          const { return (this->value_) ? ((this->value_->type_ == MT_string     ) ? ((MT_Value<std::string>         *)this->value_)->value_ : (*this->value_)) : zeroise<std::string>();          } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::Vector2()     const { return (this->value_) ? ((this->value_->type_ == MT_vector2    ) ? ((MT_Value<orxonox::Vector2>    *)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::Vector2>();     } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::Vector3()     const { return (this->value_) ? ((this->value_->type_ == MT_vector3    ) ? ((MT_Value<orxonox::Vector3>    *)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::Vector3>();     } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::Vector4()     const { return (this->value_) ? ((this->value_->type_ == MT_vector4    ) ? ((MT_Value<orxonox::Vector4>    *)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::Vector4>();     } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::ColourValue() const { return (this->value_) ? ((this->value_->type_ == MT_colourvalue) ? ((MT_Value<orxonox::ColourValue>*)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::ColourValue>(); } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::Quaternion()  const { return (this->value_) ? ((this->value_->type_ == MT_quaternion ) ? ((MT_Value<orxonox::Quaternion> *)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::Quaternion>();  } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::Radian()      const { return (this->value_) ? ((this->value_->type_ == MT_radian     ) ? ((MT_Value<orxonox::Radian>     *)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::Radian>();      } /** @brief Returns the current value, converted to the requested type. */
-    MultiType::operator orxonox::Degree()      const { return (this->value_) ? ((this->value_->type_ == MT_degree     ) ? ((MT_Value<orxonox::Degree>     *)this->value_)->value_ : (*this->value_)) : zeroise<orxonox::Degree>();      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator char()                 const { return (this->value_) ? ((this->value_->type_ == MT_char       ) ? (static_cast<MT_Value<char>                *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator unsigned char()        const { return (this->value_) ? ((this->value_->type_ == MT_uchar      ) ? (static_cast<MT_Value<unsigned char>       *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator short()                const { return (this->value_) ? ((this->value_->type_ == MT_short      ) ? (static_cast<MT_Value<short>               *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator unsigned short()       const { return (this->value_) ? ((this->value_->type_ == MT_ushort     ) ? (static_cast<MT_Value<unsigned short>      *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator int()                  const { return (this->value_) ? ((this->value_->type_ == MT_int        ) ? (static_cast<MT_Value<int>                 *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator unsigned int()         const { return (this->value_) ? ((this->value_->type_ == MT_uint       ) ? (static_cast<MT_Value<unsigned int>        *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator long()                 const { return (this->value_) ? ((this->value_->type_ == MT_long       ) ? (static_cast<MT_Value<long>                *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator unsigned long()        const { return (this->value_) ? ((this->value_->type_ == MT_ulong      ) ? (static_cast<MT_Value<unsigned long>       *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator long long()            const { return (this->value_) ? ((this->value_->type_ == MT_longlong   ) ? (static_cast<MT_Value<long long>           *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator unsigned long long()   const { return (this->value_) ? ((this->value_->type_ == MT_ulonglong  ) ? (static_cast<MT_Value<unsigned long long>  *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator float()                const { return (this->value_) ? ((this->value_->type_ == MT_float      ) ? (static_cast<MT_Value<float>               *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator double()               const { return (this->value_) ? ((this->value_->type_ == MT_double     ) ? (static_cast<MT_Value<double>              *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator long double()          const { return (this->value_) ? ((this->value_->type_ == MT_longdouble ) ? (static_cast<MT_Value<long double>         *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator bool()                 const { return (this->value_) ? ((this->value_->type_ == MT_bool       ) ? (static_cast<MT_Value<bool>                *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator void*()                const { return (this->value_) ? ((this->value_->type_ == MT_void       ) ? (static_cast<MT_Value<void*>               *>(this->value_))->value_ : (*this->value_)) : 0;                      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator std::string()          const { return (this->value_) ? ((this->value_->type_ == MT_string     ) ? (static_cast<MT_Value<std::string>         *>(this->value_))->value_ : (*this->value_)) : NilValue<std::string>();          } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::Vector2()     const { return (this->value_) ? ((this->value_->type_ == MT_vector2    ) ? (static_cast<MT_Value<orxonox::Vector2>    *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector2>();     } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::Vector3()     const { return (this->value_) ? ((this->value_->type_ == MT_vector3    ) ? (static_cast<MT_Value<orxonox::Vector3>    *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector3>();     } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::Vector4()     const { return (this->value_) ? ((this->value_->type_ == MT_vector4    ) ? (static_cast<MT_Value<orxonox::Vector4>    *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Vector4>();     } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::ColourValue() const { return (this->value_) ? ((this->value_->type_ == MT_colourvalue) ? (static_cast<MT_Value<orxonox::ColourValue>*>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::ColourValue>(); } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::Quaternion()  const { return (this->value_) ? ((this->value_->type_ == MT_quaternion ) ? (static_cast<MT_Value<orxonox::Quaternion> *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Quaternion>();  } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::Radian()      const { return (this->value_) ? ((this->value_->type_ == MT_radian     ) ? (static_cast<MT_Value<orxonox::Radian>     *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Radian>();      } /** @brief Returns the current value, converted to the requested type. */
+    MultiType::operator orxonox::Degree()      const { return (this->value_) ? ((this->value_->type_ == MT_degree     ) ? (static_cast<MT_Value<orxonox::Degree>     *>(this->value_))->value_ : (*this->value_)) : NilValue<orxonox::Degree>();      } /** @brief Returns the current value, converted to the requested type. */
 
     template <> void MultiType::createNewValueContainer(const char& value)                 { this->value_ = new MT_Value<char>                (value, MT_char       ); } /** @brief Creates a new value container for the given type. */
Index: code/trunk/src/util/MultiType.h
===================================================================
--- code/trunk/src/util/MultiType.h	(revision 3089)
+++ code/trunk/src/util/MultiType.h	(revision 3196)
@@ -69,7 +69,11 @@
 #include "UtilPrereqs.h"
 
-#include <boost/static_assert.hpp>
-
-#include "Math.h"
+#include <cassert>
+#include <string>
+#include <OgreVector2.h>
+#include <OgreVector3.h>
+#include <OgreVector4.h>
+#include <OgreQuaternion.h>
+#include <OgreColourValue.h>
 
 namespace orxonox
@@ -441,5 +445,5 @@
             template <typename T> inline void changeValueContainer(const T& value) { if (this->value_) { delete this->value_; } this->createNewValueContainer<T>(value); }
             /** @brief Creates a new value container (works only with specialized types). */
-            template <typename T>        void createNewValueContainer(const T& value) { BOOST_STATIC_ASSERT(sizeof(T) == 0); return false; }
+            template <typename T>        void createNewValueContainer(const T& value) { /* STATIC ASSERT */ *****value; return false; }
 
             MT_ValueBase* value_; //!< A pointer to the value container
Index: code/trunk/src/util/MultiTypeValue.h
===================================================================
--- code/trunk/src/util/MultiTypeValue.h	(revision 3089)
+++ code/trunk/src/util/MultiTypeValue.h	(revision 3196)
@@ -38,8 +38,9 @@
 
 #include "UtilPrereqs.h"
+
+#include <cassert>
 #include "MathConvert.h"
 #include "MultiType.h"
 #include "Serialise.h"
-#include <cassert>
 
 namespace orxonox
@@ -75,51 +76,51 @@
         }
 
-        inline bool getValue(char*                 value) const { return ConvertValue<T, char                >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(unsigned char*        value) const { return ConvertValue<T, unsigned char       >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(short*                value) const { return ConvertValue<T, short               >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(unsigned short*       value) const { return ConvertValue<T, unsigned short      >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(int*                  value) const { return ConvertValue<T, int                 >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(unsigned int*         value) const { return ConvertValue<T, unsigned int        >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(long*                 value) const { return ConvertValue<T, long                >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(unsigned long*        value) const { return ConvertValue<T, unsigned long       >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(long long*            value) const { return ConvertValue<T, long long           >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(unsigned long long*   value) const { return ConvertValue<T, unsigned long long  >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(float*                value) const { return ConvertValue<T, float               >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(double*               value) const { return ConvertValue<T, double              >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(long double*          value) const { return ConvertValue<T, long double         >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(bool*                 value) const { return ConvertValue<T, bool                >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(void**                value) const { return ConvertValue<T, void*               >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(std::string*          value) const { return ConvertValue<T, std::string         >(value, value_, zeroise<std::string>         ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::Vector2*     value) const { return ConvertValue<T, orxonox::Vector2    >(value, value_, zeroise<orxonox::Vector2>    ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::Vector3*     value) const { return ConvertValue<T, orxonox::Vector3    >(value, value_, zeroise<orxonox::Vector3>    ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::Vector4*     value) const { return ConvertValue<T, orxonox::Vector4    >(value, value_, zeroise<orxonox::Vector4>    ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::ColourValue* value) const { return ConvertValue<T, orxonox::ColourValue>(value, value_, zeroise<orxonox::ColourValue>()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::Quaternion*  value) const { return ConvertValue<T, orxonox::Quaternion >(value, value_, zeroise<orxonox::Quaternion> ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::Radian*      value) const { return ConvertValue<T, orxonox::Radian     >(value, value_, zeroise<orxonox::Radian>     ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-        inline bool getValue(orxonox::Degree*      value) const { return ConvertValue<T, orxonox::Degree     >(value, value_, zeroise<orxonox::Degree>     ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
-
-        inline bool setValue(const char& value)                 { return !(bHasDefaultValue_ = !ConvertValue<char                , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const unsigned char& value)        { return !(bHasDefaultValue_ = !ConvertValue<unsigned char       , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const short& value)                { return !(bHasDefaultValue_ = !ConvertValue<short               , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const unsigned short& value)       { return !(bHasDefaultValue_ = !ConvertValue<unsigned short      , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const int& value)                  { return !(bHasDefaultValue_ = !ConvertValue<int                 , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const unsigned int& value)         { return !(bHasDefaultValue_ = !ConvertValue<unsigned int        , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const long& value)                 { return !(bHasDefaultValue_ = !ConvertValue<long                , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const unsigned long& value)        { return !(bHasDefaultValue_ = !ConvertValue<unsigned long       , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const long long& value)            { return !(bHasDefaultValue_ = !ConvertValue<long long           , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const unsigned long long& value)   { return !(bHasDefaultValue_ = !ConvertValue<unsigned long long  , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const float& value)                { return !(bHasDefaultValue_ = !ConvertValue<float               , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const double& value)               { return !(bHasDefaultValue_ = !ConvertValue<double              , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const long double& value)          { return !(bHasDefaultValue_ = !ConvertValue<long double         , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const bool& value)                 { return !(bHasDefaultValue_ = !ConvertValue<bool                , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(      void* const& value)          { return !(bHasDefaultValue_ = !ConvertValue<void*               , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const std::string& value)          { return !(bHasDefaultValue_ = !ConvertValue<std::string         , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::Vector2& value)     { return !(bHasDefaultValue_ = !ConvertValue<orxonox::Vector2    , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::Vector3& value)     { return !(bHasDefaultValue_ = !ConvertValue<orxonox::Vector3    , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::Vector4& value)     { return !(bHasDefaultValue_ = !ConvertValue<orxonox::Vector4    , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::ColourValue& value) { return !(bHasDefaultValue_ = !ConvertValue<orxonox::ColourValue, T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::Quaternion& value)  { return !(bHasDefaultValue_ = !ConvertValue<orxonox::Quaternion , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::Radian& value)      { return !(bHasDefaultValue_ = !ConvertValue<orxonox::Radian     , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
-        inline bool setValue(const orxonox::Degree& value)      { return !(bHasDefaultValue_ = !ConvertValue<orxonox::Degree     , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool getValue(char*                 value) const { return convertValue<T, char                >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(unsigned char*        value) const { return convertValue<T, unsigned char       >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(short*                value) const { return convertValue<T, short               >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(unsigned short*       value) const { return convertValue<T, unsigned short      >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(int*                  value) const { return convertValue<T, int                 >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(unsigned int*         value) const { return convertValue<T, unsigned int        >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(long*                 value) const { return convertValue<T, long                >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(unsigned long*        value) const { return convertValue<T, unsigned long       >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(long long*            value) const { return convertValue<T, long long           >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(unsigned long long*   value) const { return convertValue<T, unsigned long long  >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(float*                value) const { return convertValue<T, float               >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(double*               value) const { return convertValue<T, double              >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(long double*          value) const { return convertValue<T, long double         >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(bool*                 value) const { return convertValue<T, bool                >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(void**                value) const { return convertValue<T, void*               >(value, value_, 0); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(std::string*          value) const { return convertValue<T, std::string         >(value, value_, zeroise<std::string>         ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::Vector2*     value) const { return convertValue<T, orxonox::Vector2    >(value, value_, zeroise<orxonox::Vector2>    ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::Vector3*     value) const { return convertValue<T, orxonox::Vector3    >(value, value_, zeroise<orxonox::Vector3>    ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::Vector4*     value) const { return convertValue<T, orxonox::Vector4    >(value, value_, zeroise<orxonox::Vector4>    ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::ColourValue* value) const { return convertValue<T, orxonox::ColourValue>(value, value_, zeroise<orxonox::ColourValue>()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::Quaternion*  value) const { return convertValue<T, orxonox::Quaternion >(value, value_, zeroise<orxonox::Quaternion> ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::Radian*      value) const { return convertValue<T, orxonox::Radian     >(value, value_, zeroise<orxonox::Radian>     ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+        inline bool getValue(orxonox::Degree*      value) const { return convertValue<T, orxonox::Degree     >(value, value_, zeroise<orxonox::Degree>     ()); } /** @brief Assigns the value to the given pointer. The value gets converted if the types don't match. */
+
+        inline bool setValue(const char& value)                 { return !(bHasDefaultValue_ = !convertValue<char                , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const unsigned char& value)        { return !(bHasDefaultValue_ = !convertValue<unsigned char       , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const short& value)                { return !(bHasDefaultValue_ = !convertValue<short               , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const unsigned short& value)       { return !(bHasDefaultValue_ = !convertValue<unsigned short      , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const int& value)                  { return !(bHasDefaultValue_ = !convertValue<int                 , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const unsigned int& value)         { return !(bHasDefaultValue_ = !convertValue<unsigned int        , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const long& value)                 { return !(bHasDefaultValue_ = !convertValue<long                , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const unsigned long& value)        { return !(bHasDefaultValue_ = !convertValue<unsigned long       , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const long long& value)            { return !(bHasDefaultValue_ = !convertValue<long long           , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const unsigned long long& value)   { return !(bHasDefaultValue_ = !convertValue<unsigned long long  , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const float& value)                { return !(bHasDefaultValue_ = !convertValue<float               , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const double& value)               { return !(bHasDefaultValue_ = !convertValue<double              , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const long double& value)          { return !(bHasDefaultValue_ = !convertValue<long double         , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const bool& value)                 { return !(bHasDefaultValue_ = !convertValue<bool                , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(      void* const& value)          { return !(bHasDefaultValue_ = !convertValue<void*               , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const std::string& value)          { return !(bHasDefaultValue_ = !convertValue<std::string         , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::Vector2& value)     { return !(bHasDefaultValue_ = !convertValue<orxonox::Vector2    , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::Vector3& value)     { return !(bHasDefaultValue_ = !convertValue<orxonox::Vector3    , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::Vector4& value)     { return !(bHasDefaultValue_ = !convertValue<orxonox::Vector4    , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::ColourValue& value) { return !(bHasDefaultValue_ = !convertValue<orxonox::ColourValue, T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::Quaternion& value)  { return !(bHasDefaultValue_ = !convertValue<orxonox::Quaternion , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::Radian& value)      { return !(bHasDefaultValue_ = !convertValue<orxonox::Radian     , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
+        inline bool setValue(const orxonox::Degree& value)      { return !(bHasDefaultValue_ = !convertValue<orxonox::Degree     , T>(&value_, value, zeroise<T>())); } /** @brief Assigns the value by converting it to T. */
 
         inline operator char()                 const { return getConvertedValue<T, char>                (this->value_, 0); }     /** @brief Returns the current value, converted to the requested type. */
@@ -194,5 +195,6 @@
         saveAndIncrease( this->value_.z, mem );
         saveAndIncrease( this->value_.w, mem );
-    }template <> inline uint8_t MT_Value<Ogre::Quaternion>::getSize() const
+    }
+    template <> inline uint8_t MT_Value<Ogre::Quaternion>::getSize() const
     {
         return 4*returnSize(this->value_.x);
Index: code/trunk/src/util/OgreForwardRefs.h
===================================================================
--- code/trunk/src/util/OgreForwardRefs.h	(revision 3196)
+++ code/trunk/src/util/OgreForwardRefs.h	(revision 3196)
@@ -0,0 +1,227 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   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
+ *   of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#ifndef _OgreForwardRefs_H__
+#define _OgreForwardRefs_H__
+
+#include "UtilPrereqs.h"
+
+namespace Ogre
+{
+    class Angle;
+    class Animation;
+    class AnimationState;
+    class AnimationStateSet;
+    class AnimationTrack;
+    class Archive;
+    class ArchiveFactory;
+    class ArchiveManager;
+    class AutoParamDataSource;
+    class AxisAlignedBox;
+    class AxisAlignedBoxSceneQuery;
+    class Billboard;
+    class BillboardChain;
+    class BillboardSet;
+    class Bone;
+    class Camera;
+    class Codec;
+    class ColourValue;
+    class ConfigDialog;
+    template <typename T> class Controller;
+    template <typename T> class ControllerFunction;
+    class ControllerManager;
+    template <typename T> class ControllerValue;
+    class Degree;
+    class DynLib;
+    class DynLibManager;
+    class EdgeData;
+    class EdgeListBuilder;
+    class Entity;
+    class ErrorDialog;
+    class ExternalTextureSourceManager;
+    class Factory;
+    class Font;
+    class FontPtr;
+    class FontManager;
+    struct FrameEvent;
+    class FrameListener;
+    class Frustum;
+    class GpuProgram;
+    class GpuProgramPtr;
+    class GpuProgramManager;
+	class GpuProgramUsage;
+    class HardwareIndexBuffer;
+    class HardwareOcclusionQuery;
+    class HardwareVertexBuffer;
+	class HardwarePixelBuffer;
+    class HardwarePixelBufferSharedPtr;
+	class HighLevelGpuProgram;
+    class HighLevelGpuProgramPtr;
+	class HighLevelGpuProgramManager;
+	class HighLevelGpuProgramFactory;
+    class IndexData;
+    class IntersectionSceneQuery;
+    class IntersectionSceneQueryListener;
+    class Image;
+    class KeyFrame;
+    class Light;
+    class Log;
+    class LogManager;
+	class ManualResourceLoader;
+	class ManualObject;
+    class Material;
+    class MaterialPtr;
+    class MaterialManager;
+    class MaterialScriptCompiler;
+    class Math;
+    class Matrix3;
+    class Matrix4;
+    class MemoryManager;
+    class Mesh;
+    class MeshPtr;
+    class MeshSerializer;
+    class MeshSerializerImpl;
+    class MeshManager;
+    class MovableObject;
+    class MovablePlane;
+    class Node;
+	class NodeAnimationTrack;
+	class NodeKeyFrame;
+	class NumericAnimationTrack;
+	class NumericKeyFrame;
+    class Overlay;
+    class OverlayContainer;
+    class OverlayElement;
+    class OverlayElementFactory;
+    class OverlayManager;
+    class Particle;
+    class ParticleAffector;
+    class ParticleAffectorFactory;
+    class ParticleEmitter;
+    class ParticleEmitterFactory;
+    class ParticleSystem;
+    class ParticleSystemManager;
+    class ParticleSystemRenderer;
+    class ParticleSystemRendererFactory;
+    class ParticleVisualData;
+    class Pass;
+    class PatchMesh;
+    class PixelBox;
+    class Plane;
+    class PlaneBoundedVolume;
+	class Plugin;
+    class Pose;
+    class ProgressiveMesh;
+    class Profile;
+	class Profiler;
+    class Quaternion;
+	class Radian;
+    class Ray;
+    class RaySceneQuery;
+    class RaySceneQueryListener;
+    class Renderable;
+    class RenderPriorityGroup;
+    class RenderQueue;
+    class RenderQueueGroup;
+	class RenderQueueInvocation;
+	class RenderQueueInvocationSequence;
+    class RenderQueueListener;
+    class RenderSystem;
+    class RenderSystemCapabilities;
+    class RenderTarget;
+    class RenderTargetListener;
+    class RenderTexture;
+	class MultiRenderTarget;
+    class RenderWindow;
+    class RenderOperation;
+    class Resource;
+	class ResourceBackgroundQueue;
+	class ResourceGroupManager;
+    class ResourceManager;
+    class RibbonTrail;
+	class Root;
+    class SceneManager;
+    class SceneManagerEnumerator;
+    class SceneNode;
+    class SceneQuery;
+    class SceneQueryListener;
+	class ScriptLoader;
+    class Serializer;
+    class ShadowCaster;
+    class ShadowRenderable;
+	class ShadowTextureManager;
+    class SimpleRenderable;
+    class SimpleSpline;
+    class Skeleton;
+    class SkeletonPtr;
+    class SkeletonInstance;
+    class SkeletonManager;
+    class Sphere;
+    class SphereSceneQuery;
+	class StaticGeometry;
+    class StringConverter;
+    class StringInterface;
+    class SubEntity;
+    class SubMesh;
+	class TagPoint;
+    class Technique;
+	class TempBlendedBufferInfo;
+	class ExternalTextureSource;
+    class TextureUnitState;
+    class Texture;
+    class TexturePtr;
+	class TextureFont;
+    class TextureManager;
+    class TransformKeyFrame;
+	class Timer;
+    class UserDefinedObject;
+    class Vector2;
+    class Vector3;
+    class Vector4;
+    class Viewport;
+	class VertexAnimationTrack;
+    class VertexBufferBinding;
+    class VertexData;
+    class VertexDeclaration;
+	class VertexMorphKeyFrame;
+    class WireBoundingBox;
+    class Compositor;
+    class CompositorManager;
+    class CompositorChain;
+    class CompositorInstance;
+    class CompositionTechnique;
+    class CompositionPass;
+    class CompositionTargetPass;
+
+    // Originally not in OgrePrerequisites.h
+    class BorderPanelOverlayElement;
+    class PanelOverlayElement;
+    class TextAreaOverlayElement;
+}
+
+#endif /* _OgreForwardRefs_H__ */
Index: code/trunk/src/util/OrxAssert.h
===================================================================
--- code/trunk/src/util/OrxAssert.h	(revision 3196)
+++ code/trunk/src/util/OrxAssert.h	(revision 3196)
@@ -0,0 +1,52 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   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
+ *   of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+@file
+@brief
+    Declaration of custom assertion facilities
+*/
+
+#ifndef _OrxAssert_H__
+#define _OrxAssert_H__
+
+#include "UtilPrereqs.h"
+
+#include <cassert>
+#include "OutputHandler.h"
+
+// define an assert macro that can display a message
+#ifndef NDEBUG
+#define OrxAssert(Assertion, ErrorMessage) \
+    Assertion ? ((void)0) : (void)(orxonox::OutputHandler::getOutStream().setOutputLevel(1) << ErrorMessage << std::endl); \
+    assert(Assertion)
+#else
+#define OrxAssert(condition, errorMessage)  ((void)0)
+#endif
+
+#endif /* _OrxAssert_H__ */
Index: code/trunk/src/util/OutputBuffer.cc
===================================================================
--- code/trunk/src/util/OutputBuffer.cc	(revision 3089)
+++ code/trunk/src/util/OutputBuffer.cc	(revision 3196)
@@ -44,5 +44,5 @@
     void OutputBuffer::registerListener(OutputBufferListener* listener)
     {
-        this->listeners_.insert(this->listeners_.end(), listener);
+        this->listeners_.push_back(listener);
     }
 
@@ -53,8 +53,8 @@
     void OutputBuffer::unregisterListener(OutputBufferListener* listener)
     {
-        for (std::list<OutputBufferListener*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); )
+        for (std::vector<OutputBufferListener*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); )
         {
             if ((*it) == listener)
-                this->listeners_.erase(it++);
+                it = this->listeners_.erase(it);
             else
                 ++it;
@@ -127,5 +127,5 @@
     void OutputBuffer::callListeners()
     {
-        for (std::list<OutputBufferListener*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
+        for (std::vector<OutputBufferListener*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
             (*it)->outputChanged();
     }
Index: code/trunk/src/util/OutputBuffer.h
===================================================================
--- code/trunk/src/util/OutputBuffer.h	(revision 3089)
+++ code/trunk/src/util/OutputBuffer.h	(revision 3196)
@@ -43,9 +43,8 @@
 #define _OutputBuffer_H__
 
-#include <list>
+#include "UtilPrereqs.h"
+
+#include <vector>
 #include <sstream>
-#include <iostream>
-
-#include "UtilPrereqs.h"
 
 namespace orxonox
@@ -167,6 +166,6 @@
             void callListeners();
 
-            std::stringstream stream_;                   //!< The stringstream that stores the assigned text
-            std::list<OutputBufferListener*> listeners_; //!< A list of all listeners
+            std::stringstream stream_;                     //!< The stringstream that stores the assigned text
+            std::vector<OutputBufferListener*> listeners_; //!< A list of all listeners
     };
 }
Index: code/trunk/src/util/OutputHandler.h
===================================================================
--- code/trunk/src/util/OutputHandler.h	(revision 3089)
+++ code/trunk/src/util/OutputHandler.h	(revision 3196)
@@ -63,21 +63,21 @@
 
             /** @brief Puts some text on the outstream. @param text The text */
-            static inline std::string log(const std::string& text)
+            static inline const std::string& log(const std::string& text)
                 { OutputHandler::getOutStream().setOutputLevel(0); OutputHandler::getOutStream().output(text + "\n"); return text; }
 
             /** @brief Puts an error on the outstream. @param text The text */
-            static inline std::string error(const std::string& text)
+            static inline const std::string& error(const std::string& text)
                 { OutputHandler::getOutStream().setOutputLevel(1); OutputHandler::getOutStream().output(text + "\n"); return text; }
 
             /** @brief Puts a warning on the outstream. @param text The text */
-            static inline std::string warning(const std::string& text)
+            static inline const std::string& warning(const std::string& text)
                 { OutputHandler::getOutStream().setOutputLevel(2); OutputHandler::getOutStream().output(text + "\n"); return text; }
 
             /** @brief Puts an info on the outstream. @param text The text */
-            static inline std::string info(const std::string& text)
+            static inline const std::string& info(const std::string& text)
                 { OutputHandler::getOutStream().setOutputLevel(3); OutputHandler::getOutStream().output(text + "\n"); return text; }
 
             /** @brief Puts some debug output on the outstream. @param text The text */
-            static inline std::string debug(const std::string& text)
+            static inline const std::string& debug(const std::string& text)
                 { OutputHandler::getOutStream().setOutputLevel(4); OutputHandler::getOutStream().output(text + "\n"); return text; }
 
Index: code/trunk/src/util/SignalHandler.cc
===================================================================
--- code/trunk/src/util/SignalHandler.cc	(revision 3089)
+++ code/trunk/src/util/SignalHandler.cc	(revision 3196)
@@ -33,9 +33,9 @@
 
 #include "SignalHandler.h"
-#include "Debug.h"
 
 #include <iostream>
 #include <cstdlib>
 #include <cstring>
+#include "Debug.h"
 
 namespace orxonox
@@ -209,10 +209,10 @@
       {
         if (
-          charsFound == 0 && byte == '(' ||
-          charsFound == 1 && byte == 'g' ||
-          charsFound == 2 && byte == 'd' ||
-          charsFound == 3 && byte == 'b' ||
-          charsFound == 4 && byte == ')' ||
-          charsFound == 5 && byte == ' '
+          (charsFound == 0 && byte == '(') ||
+          (charsFound == 1 && byte == 'g') ||
+          (charsFound == 2 && byte == 'd') ||
+          (charsFound == 3 && byte == 'b') ||
+          (charsFound == 4 && byte == ')') ||
+          (charsFound == 5 && byte == ' ')
             )
               charsFound++;
@@ -246,10 +246,10 @@
 
         if (
-          charsFound == 0 && byte == '(' ||
-          charsFound == 1 && byte == 'g' ||
-          charsFound == 2 && byte == 'd' ||
-          charsFound == 3 && byte == 'b' ||
-          charsFound == 4 && byte == ')' ||
-          charsFound == 5 && byte == ' '
+          (charsFound == 0 && byte == '(') ||
+          (charsFound == 1 && byte == 'g') ||
+          (charsFound == 2 && byte == 'd') ||
+          (charsFound == 3 && byte == 'b') ||
+          (charsFound == 4 && byte == ')') ||
+          (charsFound == 5 && byte == ' ')
             )
               charsFound++;
Index: code/trunk/src/util/Sleep.cc
===================================================================
--- code/trunk/src/util/Sleep.cc	(revision 3089)
+++ code/trunk/src/util/Sleep.cc	(revision 3196)
@@ -28,6 +28,7 @@
 
 /**
-    @file
-    @brief Implementation of three sleep functions.
+@file
+@brief
+    Implementation of three sleep functions. Avoids including windows.h
 */
 
@@ -43,5 +44,5 @@
     {
         if (microseconds < 1000)
-            COUT(2) << "Warning: Windows can not sleep less than 1ms, ignoring" << std::endl;
+            COUT(2) << "Warning: Windows cannot sleep less than 1ms, ignoring" << std::endl;
         Sleep(microseconds / 1000);
     }
Index: code/trunk/src/util/Sleep.h
===================================================================
--- code/trunk/src/util/Sleep.h	(revision 3089)
+++ code/trunk/src/util/Sleep.h	(revision 3196)
@@ -28,7 +28,7 @@
 
 /**
- @file
- @brief
-    Functions for using sleep() and usleep() on windows.
+@file
+@brief
+    Functions declarations to make the current thread sleep.
  */
 
@@ -40,6 +40,9 @@
 namespace orxonox
 {
+    //! Makes the thread sleep for a few @a microseconds
     _UtilExport void usleep(unsigned long microseconds);
+    //! Makes the thread sleep for a few @a milliseconds
     _UtilExport void msleep(unsigned long milliseconds);
+    //! Makes the thread sleep for a few @a seconds
     _UtilExport void sleep (unsigned long seconds);
 }
Index: code/trunk/src/util/String.cc
===================================================================
--- code/trunk/src/util/String.cc	(revision 3089)
+++ code/trunk/src/util/String.cc	(revision 3196)
@@ -35,6 +35,4 @@
 
 #include <cctype>
-#include <iostream>
-
 #include "Convert.h"
 #include "Math.h"
Index: code/trunk/src/util/String.h
===================================================================
--- code/trunk/src/util/String.h	(revision 3089)
+++ code/trunk/src/util/String.h	(revision 3196)
@@ -36,7 +36,5 @@
 
 #include "UtilPrereqs.h"
-
 #include <string>
-#include <sstream>
 
 namespace orxonox
Index: code/trunk/src/util/SubString.cc
===================================================================
--- code/trunk/src/util/SubString.cc	(revision 3089)
+++ code/trunk/src/util/SubString.cc	(revision 3196)
@@ -39,5 +39,5 @@
 
 #include "SubString.h"
-#include <stdio.h>
+#include <cstdio>
 
 namespace orxonox
Index: code/trunk/src/util/UTFStringConversions.h
===================================================================
--- code/trunk/src/util/UTFStringConversions.h	(revision 3196)
+++ code/trunk/src/util/UTFStringConversions.h	(revision 3196)
@@ -0,0 +1,61 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   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
+ *   of the License, 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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *      Fabian 'x3n' Landau
+ *      Reto Grieder
+ *   Co-authors:
+ *      ...
+ */
+
+/**
+@file
+@brief
+    std::sring to Ogre::UTFString conversion functions
+*/
+
+#ifndef _UTFStringConversions_H__
+#define _UTFStringConversions_H__
+
+#include "UtilPrereqs.h"
+#include <OgreUTFString.h>
+
+namespace orxonox
+{
+    template <>
+    struct ConverterExplicit<std::string, Ogre::UTFString>
+    {
+        //! Converts an std::string into an Ogre::UTFString
+        inline static bool convert(Ogre::UTFString* output, const std::string& input)
+        {
+            Ogre::UTFString::code_point cp;
+            for (unsigned int i = 0; i < input.size(); ++i)
+            {
+              cp = input[i];
+              cp &= 0xFF;
+              output->append(1, cp);
+            }
+            return true;
+        }
+    };
+}
+
+#endif /* _UTFStringConversions_H__ */
Index: code/trunk/src/util/UtilPrereqs.h
===================================================================
--- code/trunk/src/util/UtilPrereqs.h	(revision 3089)
+++ code/trunk/src/util/UtilPrereqs.h	(revision 3196)
@@ -60,6 +60,29 @@
 // Forward declarations
 //-----------------------------------------------------------------------
+namespace Ogre
+{
+    class Radian;
+    class Degree;
+    class Vector2;
+    class Vector3;
+    class Vector4;
+    class Matrix3;
+    class Matrix4;
+    class Quaternion;
+    class ColourValue;
+}
+
 namespace orxonox
 {
+    using Ogre::Radian;
+    using Ogre::Degree;
+    using Ogre::Vector2;
+    using Ogre::Vector3;
+    using Ogre::Vector4;
+    using Ogre::Matrix3;
+    using Ogre::Matrix4;
+    using Ogre::Quaternion;
+    using Ogre::ColourValue;
+
     class Exception;
     class ExprParser;
Index: code/trunk/src/util/mbool.h
===================================================================
--- code/trunk/src/util/mbool.h	(revision 3089)
+++ code/trunk/src/util/mbool.h	(revision 3196)
@@ -36,5 +36,4 @@
     struct _UtilExport mbool
     {
-//        friend Synchronisable::registerVariable<>()
         public:
             inline mbool(bool value = false)
