Index: code/trunk/src/libraries/util/Convert.h
===================================================================
--- code/trunk/src/libraries/util/Convert.h	(revision 11097)
+++ code/trunk/src/libraries/util/Convert.h	(revision 11098)
@@ -128,8 +128,8 @@
 #include <sstream>
 #include <typeinfo>
+#include <type_traits>
 #include <loki/TypeManip.h>
 
 #include "Output.h"
-#include "ImplicitConversion.h"
 
 // disable warnings about possible loss of data
@@ -308,5 +308,5 @@
     struct ConverterExplicit
     {
-        enum { probe = ImplicitConversion<FromType, ToType>::exists };
+        static constexpr bool probe = std::is_convertible<FromType, ToType>::value;
         ORX_FORCEINLINE static bool convert(ToType* output, const FromType& input)
         {
Index: code/trunk/src/libraries/util/ImplicitConversion.h
===================================================================
--- code/trunk/src/libraries/util/ImplicitConversion.h	(revision 11097)
+++ 	(revision )
@@ -1,94 +1,0 @@
-/*
- *   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
-    @ingroup Util
-    @brief Declaration of various helper templates.
-*/
-
-#ifndef _TemplateUtils_H__
-#define _TemplateUtils_H__
-
-#include "UtilPrereqs.h"
-
-namespace orxonox
-{
-    ///////////////////////////////////////////////////
-    // Static detection of implicit type conversions //
-    ///////////////////////////////////////////////////
-
-// disable warnings about possible loss of data
-#ifdef ORXONOX_COMPILER_MSVC
-#  pragma warning(push)
-#  pragma warning(disable:4244)
-#endif
-// GCC generates warnings when implicitely casting from float to int for instance.
-#ifdef ORXONOX_COMPILER_GCC
-#  pragma GCC system_header
-#endif
-
-    /**
-    @brief
-        Detects whether you can implicitely cast FromType to ToType.
-
-        Usage: ImplicitConversion<FromType, ToType>::exists
-        This gives you a compile time constant boolean in the form of an enum value.
-    @note
-        The idea to use the sizeof() operator on return values to determine function existence
-        is described in 'Modern C++ design' by Alexandrescu (2001).
-    */
-    template <class FromType, class ToType>
-    class ImplicitConversion
-    {
-    private:
-        // static class, no instances allowed:
-        ImplicitConversion() = delete;
-        ImplicitConversion(const ImplicitConversion&) = delete;
-        ImplicitConversion& operator=(const ImplicitConversion&) = delete;
-        ~ImplicitConversion() = delete;
-
-        // Gets chosen only if there is an implicit conversion from FromType to ToType.
-        static char test(ToType);
-        // Accepts any argument. Why do we not use a template? The reason is that with templates,
-        // the function above is only taken iff it is an exact type match. But since we want to
-        // check for implicit conversion, we have to use the ellipsis.
-        static long long test(...);
-        static FromType object; // helper object to handle private c'tor and d'tor
-    public:
-        // test(object) only has 'long long' return type iff the compiler doesn't choose test(...)
-        enum { exists = (sizeof(test(object)) == sizeof(char)) };
-    };
-
-#ifdef ORXONOX_COMPILER_MSVC
-#  pragma warning(pop)
-#endif
-
-}
-
-#endif /* _TemplateUtils_H__ */
Index: code/trunk/src/libraries/util/MultiType.h
===================================================================
--- code/trunk/src/libraries/util/MultiType.h	(revision 11097)
+++ code/trunk/src/libraries/util/MultiType.h	(revision 11098)
@@ -100,4 +100,5 @@
 #include <cassert>
 #include <string>
+#include <utility>
 #include <OgreVector2.h>
 #include <OgreVector3.h>
@@ -310,4 +311,6 @@
             /// Copyconstructor: Assigns value and type of the other MultiType.
             inline MultiType(const MultiType& other) : value_(nullptr) { this->set(other); }
+            /// Moveconstructor: Moves the value and its type from the other MultiType
+            inline MultiType(MultiType&& other)      : value_(nullptr) { std::swap(this->value_, other.value_); };
 
             /// Destructor: Deletes the MT_Value.
@@ -320,4 +323,6 @@
             /// Assigns the value of the other MultiType and converts it to the current type of the MultiType.
             inline                       MultiType& operator=(const MultiType& other) { this->set(other); return (*this); }
+            /// Moves the value and the type of the other MultiType to this one.
+            inline                       MultiType& operator=(MultiType&& other)      { std::swap(this->value_, other.value_); return (*this); }
 
             /// Assigns the given value and converts it to the current type.
Index: code/trunk/src/libraries/util/Sleep.cc
===================================================================
--- code/trunk/src/libraries/util/Sleep.cc	(revision 11097)
+++ code/trunk/src/libraries/util/Sleep.cc	(revision 11098)
@@ -30,17 +30,11 @@
 @file
 @brief
-    Implementation of three sleep functions. Avoids including windows.h
+    Implementation of three sleep functions.
 */
 
 #include "Sleep.h"
-#include "Output.h"
 
-#ifdef ORXONOX_PLATFORM_WINDOWS
-#ifndef WIN32_LEAN_AND_MEAN
-#  define WIN32_LEAN_AND_MEAN
-#endif
-#include <windows.h>
-#undef min
-#undef max
+#include <chrono>
+#include <thread>
 
 namespace orxonox
@@ -48,38 +42,15 @@
     void usleep(unsigned long microseconds)
     {
-        //if (microseconds < 1000)
-        //    orxout(internal_warning) << "Windows cannot sleep less than 1ms, ignoring" << endl;
-        Sleep(microseconds / 1000);
+        std::this_thread::sleep_for(std::chrono::microseconds(microseconds));
     }
 
     void msleep(unsigned long milliseconds)
     {
-        Sleep(milliseconds);
+        std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
     }
 
     void sleep(unsigned long seconds)
     {
-        Sleep(seconds * 1000);
+        std::this_thread::sleep_for(std::chrono::seconds(seconds));
     }
 }
-
-#else /* Linux/Apple */
-#include <unistd.h>
-
-namespace orxonox
-{
-    void usleep(unsigned long usec)
-    {
-        ::usleep(usec);
-    }
-    void msleep(unsigned long msec)
-    {
-        ::usleep(msec * 1000);
-    }
-    void sleep(unsigned long sec)
-    {
-        ::usleep(sec * 1000000);
-    }
-}
-
-#endif
Index: code/trunk/src/libraries/util/SubString.h
===================================================================
--- code/trunk/src/libraries/util/SubString.h	(revision 11097)
+++ code/trunk/src/libraries/util/SubString.h	(revision 11098)
@@ -115,4 +115,8 @@
     public:
         SubString();
+        /// Copy constructor
+        SubString(const SubString& other) = default;
+        /// Move constructor
+        SubString(SubString&& other) = default;
         SubString(const std::string& line,
                   const std::string& delimiters = SubString::WhiteSpaces,
@@ -133,4 +137,6 @@
         // operate on the SubString
         SubString& operator=(const SubString& other);
+        /// Move assignment
+        SubString& operator=(SubString&& other) = default;
         bool operator==(const SubString& other) const;
         bool compare(const SubString& other, size_t length = std::string::npos) const;
