Index: code/trunk/src/OrxonoxConfig.h.in
===================================================================
--- code/trunk/src/OrxonoxConfig.h.in	(revision 11056)
+++ code/trunk/src/OrxonoxConfig.h.in	(revision 11071)
@@ -207,33 +207,4 @@
 #endif
 
-// Forward declare the everywhere used std::string
-namespace std
-{
-    template<class _Elem> struct char_traits;
-    template<class _Ty>   class  allocator;
-    template<class _Elem, class _Traits, class _Ax> class basic_string;
-    typedef basic_string<char, char_traits<char>, allocator<char> > string;
-}
-
-// Import general purpose smart pointers
-namespace boost
-{
-    template<class T> class scoped_ptr;
-    template<class T> class shared_ptr;
-    template<class T> class weak_ptr;
-    template<class T> class intrusive_ptr;
-    template<class T> class shared_array;
-    template<class T> class scoped_array;
-}
-namespace orxonox
-{
-    using boost::scoped_ptr;
-    using boost::shared_ptr;
-    using boost::weak_ptr;
-    using boost::intrusive_ptr;
-    using boost::shared_array;
-    using boost::scoped_array;
-}
-
 // Define Boost Filesystem version
 #include <boost/version.hpp>
Index: code/trunk/src/external/cpptcl/cpptcl.cc
===================================================================
--- code/trunk/src/external/cpptcl/cpptcl.cc	(revision 11056)
+++ code/trunk/src/external/cpptcl/cpptcl.cc	(revision 11071)
@@ -17,7 +17,4 @@
 using namespace Tcl::details;
 using namespace std;
-// boost::shared_ptr conflicts with the new std::shared_ptr
-//using namespace boost;
-
 
 result::result(Tcl_Interp *interp) : interp_(interp) {}
@@ -168,5 +165,5 @@
 
 // map of polymorphic callbacks
-typedef map<string, boost::shared_ptr<callback_base> > callback_interp_map;
+typedef map<string, std::shared_ptr<callback_base> > callback_interp_map;
 typedef map<Tcl_Interp *, callback_interp_map> callback_map;
 
@@ -181,5 +178,5 @@
 
 // map of object handlers
-typedef map<string, boost::shared_ptr<class_handler_base> > class_interp_map;
+typedef map<string, std::shared_ptr<class_handler_base> > class_interp_map;
 typedef map<Tcl_Interp *, class_interp_map> class_handlers_map;
 
@@ -492,5 +489,5 @@
 
 void class_handler_base::register_method(string const &name,
-     boost::shared_ptr<object_cmd_base> ocb, policies const &p)
+     std::shared_ptr<object_cmd_base> ocb, policies const &p)
 {
      methods_[name] = ocb;
@@ -991,5 +988,5 @@
 
 void interpreter::add_function(string const &name,
-     boost::shared_ptr<callback_base> cb, policies const &p)
+     std::shared_ptr<callback_base> cb, policies const &p)
 {
      Tcl_CreateObjCommand(interp_, name.c_str(),
@@ -1001,5 +998,5 @@
 
 void interpreter::add_class(string const &name,
-     boost::shared_ptr<class_handler_base> chb)
+     std::shared_ptr<class_handler_base> chb)
 {
      class_handlers[interp_][name] = chb;
@@ -1007,5 +1004,5 @@
 
 void interpreter::add_constructor(string const &name,
-     boost::shared_ptr<class_handler_base> chb, boost::shared_ptr<callback_base> cb,
+     std::shared_ptr<class_handler_base> chb, std::shared_ptr<callback_base> cb,
      policies const &p)
 {
Index: code/trunk/src/external/cpptcl/cpptcl.h
===================================================================
--- code/trunk/src/external/cpptcl/cpptcl.h	(revision 11056)
+++ code/trunk/src/external/cpptcl/cpptcl.h	(revision 11071)
@@ -17,10 +17,10 @@
 #include <map>
 #include <vector>
-#include <boost/shared_ptr.hpp>
-#include <boost/bind.hpp>
-
+#include <memory>
+#include <functional>
 
 namespace Tcl
 {
+namespace arg = std::placeholders;
 
 // exception class used for reporting all Tcl errors
@@ -141,5 +141,5 @@
 
      void register_method(std::string const &name,
-          boost::shared_ptr<object_cmd_base> ocb, policies const &p);
+          std::shared_ptr<object_cmd_base> ocb, policies const &p);
 
      policies & get_policies(std::string const &name);
@@ -148,5 +148,5 @@
      typedef std::map<
           std::string,
-          boost::shared_ptr<object_cmd_base>
+          std::shared_ptr<object_cmd_base>
           > method_map_type;
 
@@ -214,5 +214,5 @@
 {
 public:
-     class_definer(boost::shared_ptr<class_handler<C> > ch) : ch_(ch) {}
+     class_definer(std::shared_ptr<class_handler<C> > ch) : ch_(ch) {}
 
      template <typename R>
@@ -221,5 +221,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method0<C, R>(f)), p);
           return *this;
@@ -231,5 +231,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method0<C, R>(f)), p);
           return *this;
@@ -241,5 +241,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method1<C, R, T1>(f)), p);
           return *this;
@@ -251,5 +251,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method1<C, R, T1>(f)), p);
           return *this;
@@ -261,5 +261,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method2<C, R, T1, T2>(f)), p);
           return *this;
@@ -271,5 +271,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method2<C, R, T1, T2>(f)), p);
           return *this;
@@ -281,5 +281,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method3<C, R, T1, T2, T3>(f)), p);
           return *this;
@@ -291,5 +291,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method3<C, R, T1, T2, T3>(f)), p);
           return *this;
@@ -301,5 +301,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method4<C, R, T1, T2, T3, T4>(f)), p);
           return *this;
@@ -312,5 +312,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method4<C, R, T1, T2, T3, T4>(f)), p);
           return *this;
@@ -323,5 +323,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method5<C, R, T1, T2, T3, T4, T5>(f)), p);
           return *this;
@@ -334,5 +334,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method5<C, R, T1, T2, T3, T4, T5>(f)), p);
           return *this;
@@ -345,5 +345,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method6<C, R, T1, T2, T3, T4, T5, T6>(f)),
                p);
@@ -358,5 +358,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method6<C, R, T1, T2, T3, T4, T5, T6>(f)),
                p);
@@ -371,5 +371,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method7<C, R,
                     T1, T2, T3, T4, T5, T6, T7>(f)), p);
@@ -384,5 +384,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method7<C, R,
                     T1, T2, T3, T4, T5, T6, T7>(f)), p);
@@ -397,5 +397,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method8<C, R,
                     T1, T2, T3, T4, T5, T6, T7, T8>(f)), p);
@@ -410,5 +410,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method8<C, R,
                     T1, T2, T3, T4, T5, T6, T7, T8>(f)), p);
@@ -423,5 +423,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method9<C, R,
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(f)), p);
@@ -436,5 +436,5 @@
      {
           ch_->register_method(name,
-               boost::shared_ptr<details::object_cmd_base>(
+               std::shared_ptr<details::object_cmd_base>(
                     new details::method9<C, R,
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(f)), p);
@@ -443,5 +443,5 @@
 
 private:
-     boost::shared_ptr<class_handler<C> > ch_;
+     std::shared_ptr<class_handler<C> > ch_;
 };
 
@@ -482,5 +482,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback0<R>(f)), p);
      }
@@ -491,5 +491,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback1<R, T1>(f)), p);
      }
@@ -500,5 +500,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback2<R, T1, T2>(f)), p);
      }
@@ -509,5 +509,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback3<R, T1, T2, T3>(f)), p);
      }
@@ -518,5 +518,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback4<R, T1, T2, T3, T4>(f)), p);
      }
@@ -528,5 +528,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback5<R, T1, T2, T3, T4, T5>(f)), p);
      }
@@ -538,5 +538,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback6<R, T1, T2, T3, T4, T5, T6>(f)), p);
      }
@@ -548,5 +548,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback7<R,
                     T1, T2, T3, T4, T5, T6, T7>(f)), p);
@@ -559,5 +559,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback8<R,
                     T1, T2, T3, T4, T5, T6, T7, T8>(f)), p);
@@ -572,5 +572,5 @@
      {
           add_function(name,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback9<R,
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(f)), p);
@@ -583,5 +583,5 @@
      details::class_definer<C> class_(std::string const &name)
      {
-          boost::shared_ptr<details::class_handler<C> > ch(
+          std::shared_ptr<details::class_handler<C> > ch(
                new details::class_handler<C>());
 
@@ -589,5 +589,5 @@
 
           add_constructor(name, ch,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new details::callback0<C*>(&details::construct<
                          C, void, void, void, void, void, void, void,
@@ -608,5 +608,5 @@
                callback_type;
 
-          boost::shared_ptr<details::class_handler<C> > ch(
+          std::shared_ptr<details::class_handler<C> > ch(
                new details::class_handler<C>());
 
@@ -614,5 +614,5 @@
 
           add_constructor(name, ch,
-               boost::shared_ptr<details::callback_base>(
+               std::shared_ptr<details::callback_base>(
                     new callback_type(&details::construct<
                          C, T1, T2, T3, T4, T5, T6, T7, T8, T9>::doit)), p);
@@ -625,5 +625,5 @@
           std::string const &name, details::no_init_type const &)
      {
-          boost::shared_ptr<details::class_handler<C> > ch(
+          std::shared_ptr<details::class_handler<C> > ch(
                new details::class_handler<C>());
 
@@ -660,13 +660,13 @@
 
      void add_function(std::string const &name,
-          boost::shared_ptr<details::callback_base> cb,
+          std::shared_ptr<details::callback_base> cb,
           policies const &p = policies());
 
      void add_class(std::string const &name,
-          boost::shared_ptr<details::class_handler_base> chb);
+          std::shared_ptr<details::class_handler_base> chb);
 
      void add_constructor(std::string const &name,
-          boost::shared_ptr<details::class_handler_base> chb,
-          boost::shared_ptr<details::callback_base> cb,
+          std::shared_ptr<details::class_handler_base> chb,
+          std::shared_ptr<details::callback_base> cb,
           policies const &p = policies());
 
Index: code/trunk/src/external/cpptcl/details/methods.h
===================================================================
--- code/trunk/src/external/cpptcl/details/methods.h	(revision 11056)
+++ code/trunk/src/external/cpptcl/details/methods.h	(revision 11071)
@@ -27,9 +27,9 @@
           if (cmem_)
           {
-               dispatch<R>::do_dispatch(interp, boost::bind(cf_, p));
-          }
-          else
-          {
-               dispatch<R>::do_dispatch(interp, boost::bind(f_, p));
+               dispatch<R>::do_dispatch(interp, std::bind(cf_, p));
+          }
+          else
+          {
+               dispatch<R>::do_dispatch(interp, std::bind(f_, p));
           }
      }
@@ -60,5 +60,5 @@
           {
                dispatch<R>::template do_dispatch<T1>(
-                    interp, boost::bind(cf_, p, _1),
+                    interp, std::bind(cf_, p, arg::_1),
                     tcl_cast<T1>::from(interp, objv[2]));
           }
@@ -66,5 +66,5 @@
           {
                dispatch<R>::template do_dispatch<T1>(
-                    interp, boost::bind(f_, p, _1),
+                    interp, std::bind(f_, p, arg::_1),
                     tcl_cast<T1>::from(interp, objv[2]));
           }
@@ -96,5 +96,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2>(
-                    interp, boost::bind(cf_, p, _1, _2),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]));
@@ -103,5 +103,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2>(
-                    interp, boost::bind(f_, p, _1, _2),
+                    interp, std::bind(f_, p, arg::_1, arg::_2),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]));
@@ -134,5 +134,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3>(
-                    interp, boost::bind(cf_, p, _1, _2, _3),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -142,5 +142,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3>(
-                    interp, boost::bind(f_, p, _1, _2, _3),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -175,5 +175,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -184,5 +184,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -218,5 +218,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4, _5),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -228,5 +228,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4, _5),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -263,5 +263,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4, _5, _6),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -274,5 +274,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4, _5, _6),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -310,5 +310,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6, T7>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4, _5, _6, _7),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -322,5 +322,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6, T7>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4, _5, _6, _7),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -360,6 +360,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8>(
-                    interp, boost::bind(cf_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8),
+                    interp, std::bind(cf_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -375,6 +375,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8>(
-                    interp, boost::bind(f_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8),
+                    interp, std::bind(f_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -416,6 +416,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(
-                    interp, boost::bind(cf_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8, _9),
+                    interp, std::bind(cf_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8, arg::_9),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -432,6 +432,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(
-                    interp, boost::bind(f_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8, _9),
+                    interp, std::bind(f_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8, arg::_9),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
Index: code/trunk/src/external/cpptcl/details/methods_v.h
===================================================================
--- code/trunk/src/external/cpptcl/details/methods_v.h	(revision 11056)
+++ code/trunk/src/external/cpptcl/details/methods_v.h	(revision 11071)
@@ -33,5 +33,5 @@
           {
                dispatch<R>::template do_dispatch<T1>(
-                    interp, boost::bind(cf_, p, _1),
+                    interp, std::bind(cf_, p, arg::_1),
                     t1);
           }
@@ -39,5 +39,5 @@
           {
                dispatch<R>::template do_dispatch<T1>(
-                    interp, boost::bind(f_, p, _1),
+                    interp, std::bind(f_, p, arg::_1),
                     t1);
           }
@@ -72,5 +72,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2>(
-                    interp, boost::bind(cf_, p, _1, _2),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2),
                     tcl_cast<T1>::from(interp, objv[2]),
                     t2);
@@ -79,5 +79,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2>(
-                    interp, boost::bind(f_, p, _1, _2),
+                    interp, std::bind(f_, p, arg::_1, arg::_2),
                     tcl_cast<T1>::from(interp, objv[2]),
                     t2);
@@ -113,5 +113,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3>(
-                    interp, boost::bind(cf_, p, _1, _2, _3),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -121,5 +121,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3>(
-                    interp, boost::bind(f_, p, _1, _2, _3),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -156,5 +156,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -165,5 +165,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -202,5 +202,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4, _5),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -212,5 +212,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4, _5),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -251,5 +251,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4, _5, _6),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -262,5 +262,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4, _5, _6),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -302,5 +302,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6, T7>(
-                    interp, boost::bind(cf_, p, _1, _2, _3, _4, _5, _6, _7),
+                    interp, std::bind(cf_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -314,5 +314,5 @@
           {
                dispatch<R>::template do_dispatch<T1, T2, T3, T4, T5, T6, T7>(
-                    interp, boost::bind(f_, p, _1, _2, _3, _4, _5, _6, _7),
+                    interp, std::bind(f_, p, arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -356,6 +356,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8>(
-                    interp, boost::bind(cf_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8),
+                    interp, std::bind(cf_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -371,6 +371,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8>(
-                    interp, boost::bind(f_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8),
+                    interp, std::bind(f_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -415,6 +415,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(
-                    interp, boost::bind(cf_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8, _9),
+                    interp, std::bind(cf_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8, arg::_9),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
@@ -431,6 +431,6 @@
                dispatch<R>::template do_dispatch<
                     T1, T2, T3, T4, T5, T6, T7, T8, T9>(
-                    interp, boost::bind(f_, p,
-                         _1, _2, _3, _4, _5, _6, _7, _8, _9),
+                    interp, std::bind(f_, p,
+                         arg::_1, arg::_2, arg::_3, arg::_4, arg::_5, arg::_6, arg::_7, arg::_8, arg::_9),
                     tcl_cast<T1>::from(interp, objv[2]),
                     tcl_cast<T2>::from(interp, objv[3]),
Index: code/trunk/src/external/ois/linux/LinuxJoyStickEvents.cpp
===================================================================
--- code/trunk/src/external/ois/linux/LinuxJoyStickEvents.cpp	(revision 11056)
+++ code/trunk/src/external/ois/linux/LinuxJoyStickEvents.cpp	(revision 11071)
@@ -34,5 +34,5 @@
 #include <cassert>	
 #include <linux/input.h>
-
+#include <unistd.h>
 
 #include <sstream>
Index: code/trunk/src/external/tinyxml/ticpp.cpp
===================================================================
--- code/trunk/src/external/tinyxml/ticpp.cpp	(revision 11056)
+++ code/trunk/src/external/tinyxml/ticpp.cpp	(revision 11071)
@@ -717,5 +717,5 @@
 }
 
-std::auto_ptr< Node > Node::Clone() const
+std::unique_ptr< Node > Node::Clone() const
 {
 	TiXmlNode* node = GetTiXmlPointer()->Clone();
@@ -724,5 +724,5 @@
 		TICPPTHROW( "Node could not be cloned" );
 	}
-	std::auto_ptr< Node > temp( NodeFactory( node, false, false ) );
+	std::unique_ptr< Node > temp( NodeFactory( node, false, false ) );
 
 	// Take ownership of the memory from TiXml
Index: code/trunk/src/external/tinyxml/ticpp.h
===================================================================
--- code/trunk/src/external/tinyxml/ticpp.h	(revision 11056)
+++ code/trunk/src/external/tinyxml/ticpp.h	(revision 11071)
@@ -966,5 +966,5 @@
 		Create an exact duplicate of this node and return it.
 
-		@note Using auto_ptr to manage the memory declared on the heap by TiXmlNode::Clone.
+		@note Using unique_ptr to manage the memory declared on the heap by TiXmlNode::Clone.
 		@code
 		// Now using clone
@@ -972,5 +972,5 @@
 		ticpp::Node* sectionToClone;
 		sectionToClone = doc.FirstChild( "settings" );
-		std::auto_ptr< ticpp::Node > clonedNode = sectionToClone->Clone();
+		std::unique_ptr< ticpp::Node > clonedNode = sectionToClone->Clone();
 		// Now you can use the clone.
 		ticpp::Node* node2 = clonedNode->FirstChildElement()->FirstChild();
@@ -980,5 +980,5 @@
 		@return Pointer the duplicate node.
 		*/
-		std::auto_ptr< Node > Clone() const;
+		std::unique_ptr< Node > Clone() const;
 
 		/**
Index: code/trunk/src/external/tolua/lua/package.lua
===================================================================
--- code/trunk/src/external/tolua/lua/package.lua	(revision 11056)
+++ code/trunk/src/external/tolua/lua/package.lua	(revision 11071)
@@ -82,4 +82,5 @@
     self.code = gsub(self.code,"%s*@%s*","@") -- eliminate spaces beside @
     self.code = gsub(self.code,"%s?inline(%s)","%1") -- eliminate 'inline' keyword
+    self.code = gsub(self.code,"%)%s?override;",");") -- eliminate 'override' keyword... at least most of the times
     --self.code = gsub(self.code,"%s?extern(%s)","%1") -- eliminate 'extern' keyword
     --self.code = gsub(self.code,"%s?virtual(%s)","%1") -- eliminate 'virtual' keyword
Index: code/trunk/src/libraries/core/ApplicationPaths.cc
===================================================================
--- code/trunk/src/libraries/core/ApplicationPaths.cc	(revision 11056)
+++ code/trunk/src/libraries/core/ApplicationPaths.cc	(revision 11071)
@@ -68,5 +68,5 @@
 
     //! Static pointer to the singleton
-    ApplicationPaths* ApplicationPaths::singletonPtr_s  = 0;
+    ApplicationPaths* ApplicationPaths::singletonPtr_s  = nullptr;
 
     ApplicationPaths::ApplicationPaths()
@@ -84,5 +84,5 @@
         // get executable module
         TCHAR buffer[1024];
-        if (GetModuleFileName(NULL, buffer, 1024) == 0)
+        if (GetModuleFileName(nullptr, buffer, 1024) == 0)
             ThrowException(General, "Could not retrieve executable path.");
 
Index: code/trunk/src/libraries/core/ApplicationPaths.h
===================================================================
--- code/trunk/src/libraries/core/ApplicationPaths.h	(revision 11056)
+++ code/trunk/src/libraries/core/ApplicationPaths.h	(revision 11071)
@@ -104,5 +104,7 @@
 
         private:
-            ApplicationPaths(const ApplicationPaths&); //!< Don't use (undefined symbol)
+            // non-copyable:
+            ApplicationPaths(const ApplicationPaths&) = delete;
+            ApplicationPaths& operator=(const ApplicationPaths&) = delete;
 
             std::vector<std::string> getModuleOrPluginPaths(boost::filesystem::path& directory, const std::string& extension);
Index: code/trunk/src/libraries/core/BaseObject.cc
===================================================================
--- code/trunk/src/libraries/core/BaseObject.cc	(revision 11056)
+++ code/trunk/src/libraries/core/BaseObject.cc	(revision 11071)
@@ -65,7 +65,7 @@
         this->bRegisteredEventStates_ = false;
 
-        this->lastLoadedXMLElement_ = 0;
-
-        this->mainStateFunctor_ = 0;
+        this->lastLoadedXMLElement_ = nullptr;
+
+        this->mainStateFunctor_ = nullptr;
 
         if (context)
@@ -86,5 +86,5 @@
         else
         {
-            this->file_ = 0;
+            this->file_ = nullptr;
             this->sceneID_ = OBJECTID_UNKNOWN;
         }
@@ -132,5 +132,5 @@
         XMLPortObject(BaseObject, BaseObject, "eventlisteners", addEventListener, getEventListener, xmlelement, mode);
 
-        Element* events = 0;
+        Element* events = nullptr;
         if (mode == XMLPort::LoadObject || mode == XMLPort::ExpandObject)
             events = xmlelement.FirstChildElement("events", false);
@@ -163,6 +163,6 @@
         this->setName(name);
 
-        for (ObjectList<XMLNameListener>::iterator it = ObjectList<XMLNameListener>::begin(); it != ObjectList<XMLNameListener>::end(); ++it)
-            it->loadedNewXMLName(this);
+        for (XMLNameListener* listener : ObjectList<XMLNameListener>())
+            listener->loadedNewXMLName(this);
     }
 
@@ -205,5 +205,5 @@
             Template* link;
             assert(!(link = Template::getTemplate(temp->getLink())) || !link->isLink());
-            link = NULL;
+            link = nullptr;
         }
         else
@@ -234,11 +234,11 @@
     {
         unsigned int i = 0;
-        for (std::set<Template*>::const_iterator it = this->templates_.begin(); it != this->templates_.end(); ++it)
+        for (Template* temp : this->templates_)
         {
             if (i == index)
-                return (*it);
+                return temp;
             i++;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -269,14 +269,14 @@
     {
         unsigned int i = 0;
-        for (std::map<BaseObject*, std::string>::const_iterator it = this->eventSources_.begin(); it != this->eventSources_.end(); ++it)
-        {
-            if (it->second != state)
+        for (const auto& mapEntry : this->eventSources_)
+        {
+            if (mapEntry.second != state)
                 continue;
 
             if (i == index)
-                return it->first;
+                return mapEntry.first;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -296,11 +296,11 @@
     {
         unsigned int i = 0;
-        for (std::set<BaseObject*>::const_iterator it = this->eventListenersXML_.begin(); it != this->eventListenersXML_.end(); ++it)
+        for (BaseObject* listener : this->eventListenersXML_)
         {
             if (i == index)
-                return *it;
+                return listener;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -331,5 +331,5 @@
             return (it->second);
         else
-            return 0;
+            return nullptr;
     }
 
@@ -358,8 +358,8 @@
         Event event(activate, originator, name);
 
-        for (std::set<BaseObject*>::iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it)
-        {
-            event.statename_ = (*it)->eventSources_[this];
-            (*it)->processEvent(event);
+        for (BaseObject* listener : this->eventListeners_)
+        {
+            event.statename_ = listener->eventSources_[this];
+            listener->processEvent(event);
         }
     }
@@ -370,6 +370,6 @@
     void BaseObject::fireEvent(Event& event)
     {
-        for (std::set<BaseObject*>::iterator it = this->eventListeners_.begin(); it != this->eventListeners_.end(); ++it)
-            (*it)->processEvent(event);
+        for (BaseObject* listener : this->eventListeners_)
+            listener->processEvent(event);
     }
 
@@ -423,5 +423,5 @@
     void BaseObject::changedMainStateName()
     {
-        this->mainStateFunctor_ = 0;
+        this->mainStateFunctor_ = nullptr;
 
         if (!this->mainStateName_.empty())
@@ -474,8 +474,6 @@
 
             // iterate through all states and get the event sources
-            for (std::list<std::string>::iterator it = eventnames.begin(); it != eventnames.end(); ++it)
-            {
-                const std::string& statename = (*it);
-
+            for (const std::string& statename : eventnames)
+            {
                 // if the event state is already known, continue with the next state
                 orxonox::EventState* eventstate = object->getEventState(statename);
Index: code/trunk/src/libraries/core/BaseObject.h
===================================================================
--- code/trunk/src/libraries/core/BaseObject.h	(revision 11056)
+++ code/trunk/src/libraries/core/BaseObject.h	(revision 11071)
@@ -163,5 +163,5 @@
             inline void setScene(const StrongOrWeakPtr<Scene>& scene, uint32_t sceneID) { this->scene_ = scene; this->sceneID_=sceneID; }
             inline Scene* getScene() const { return this->scene_.get(); }
-            inline virtual uint32_t getSceneID() const { return this->sceneID_; }
+            virtual inline uint32_t getSceneID() const { return this->sceneID_; }
 
             inline void setGametype(const StrongOrWeakPtr<Gametype>& gametype) { this->gametype_ = gametype; }
@@ -218,5 +218,5 @@
             bool                       bInitialized_;          //!< True if the object was initialized (passed the object registration)
             const XMLFile*             file_;                  //!< The XMLFile that loaded this object
-            Element*                   lastLoadedXMLElement_;  //!< Non 0 if the TinyXML attributes have already been copied to our own lowercase map
+            Element*                   lastLoadedXMLElement_;  //!< Non nullptr if the TinyXML attributes have already been copied to our own lowercase map
             std::map<std::string, std::string> xmlAttributes_; //!< Lowercase XML attributes
             std::string                loaderIndentation_;     //!< Indentation of the debug output in the Loader
@@ -265,5 +265,5 @@
             return this->weakPtr_;
         else
-            return NULL;
+            return nullptr;
     }
 
Index: code/trunk/src/libraries/core/ClassTreeMask.cc
===================================================================
--- code/trunk/src/libraries/core/ClassTreeMask.cc	(revision 11056)
+++ code/trunk/src/libraries/core/ClassTreeMask.cc	(revision 11071)
@@ -207,5 +207,5 @@
             return ((*this->nodes_.top().first) == compare);
         else
-            return (compare == 0);
+            return (compare == nullptr);
     }
 
@@ -218,5 +218,5 @@
             return ((*this->nodes_.top().first) != compare);
         else
-            return (compare != 0);
+            return (compare != nullptr);
     }
 
@@ -293,8 +293,8 @@
         {
             // No it's not: Search for classes inheriting from the given class and add the rules for them
-            for (std::set<const Identifier*>::const_iterator it = subclass->getDirectChildren().begin(); it != subclass->getDirectChildren().end(); ++it)
-                if ((*it)->isA(this->root_->getClass()))
-                    if (overwrite || (!this->nodeExists(*it))) // If we don't want to overwrite, only add nodes that don't already exist
-                        this->add(this->root_, *it, bInclude, overwrite);
+            for (const Identifier* directChild : subclass->getDirectChildren())
+                if (directChild->isA(this->root_->getClass()))
+                    if (overwrite || (!this->nodeExists(directChild))) // If we don't want to overwrite, only add nodes that don't already exist
+                        this->add(this->root_, directChild, bInclude, overwrite);
         }
 
@@ -325,10 +325,10 @@
         {
             // Search for an already existing node, containing the subclass we want to add
-            for (std::list<ClassTreeMaskNode*>::iterator it = node->subnodes_.begin(); it != node->subnodes_.end(); ++it)
+            for (ClassTreeMaskNode* subnode : node->subnodes_)
             {
-                if (subclass->isA((*it)->getClass()))
+                if (subclass->isA(subnode->getClass()))
                 {
                     // We've found an existing node -> delegate the work with a recursive function-call and return
-                    this->add(*it, subclass, bInclude, overwrite);
+                    this->add(subnode, subclass, bInclude, overwrite);
                     return;
                 }
@@ -392,6 +392,6 @@
         if (!subclass)
             return;
-        for (std::set<const Identifier*>::const_iterator it = subclass->getDirectChildren().begin(); it != subclass->getDirectChildren().end(); ++it)
-            this->add(*it, this->isIncluded(*it), false, false);
+        for (const Identifier* directChild : subclass->getDirectChildren())
+            this->add(directChild, this->isIncluded(directChild), false, false);
 
         this->add(subclass, bInclude, false, clean);
@@ -435,7 +435,7 @@
 
             // Go through the list of subnodes and look for a node containing the searched subclass and delegate the request by a recursive function-call.
-            for (std::list<ClassTreeMaskNode*>::iterator it = node->subnodes_.begin(); it != node->subnodes_.end(); ++it)
-                if (subclass->isA((*it)->getClass()))
-                    return isIncluded(*it, subclass);
+            for (ClassTreeMaskNode* subnode : node->subnodes_)
+                if (subclass->isA(subnode->getClass()))
+                    return isIncluded(subnode, subclass);
 
             // There is no subnode containing our class -> the rule of the current node takes in effect
@@ -851,5 +851,5 @@
             this->objectIterator_ = Context::getRootContext()->getObjectList(this->subclassIterator_->first)->begin();
         else
-            this->objectIterator_ = ObjectList<BaseObject>::end();
+            this->objectIterator_ = ObjectList<BaseObject>().end();
 
         // Check if the iterator points on a valid object. If not, go to the next object by calling ++
@@ -915,8 +915,8 @@
 
             // Iterate through all subnodes
-            for (std::list<ClassTreeMaskNode*>::iterator it1 = node->subnodes_.begin(); it1 != node->subnodes_.end(); ++it1)
+            for (ClassTreeMaskNode* subnode : node->subnodes_)
             {
                 // Recursive call to this function with the subnode
-                this->create(*it1);
+                this->create(subnode);
 
                 // Only execute the following code if the current node is included, meaning some of the subnodes might be included too
@@ -926,22 +926,22 @@
 
                     // Iterate through all direct children
-                    for (std::set<const Identifier*>::iterator it2 = directChildren.begin(); it2 != directChildren.end(); ++it2)
+                    for (std::set<const Identifier*>::iterator it = directChildren.begin(); it != directChildren.end(); ++it)
                     {
                         // Check if the subnode (it1) is a child of the directChild (it2)
-                        if ((*it1)->getClass()->isA(*it2))
+                        if (subnode->getClass()->isA(*it))
                         {
                             // Yes it is - remove the directChild (it2) from the list, because it will already be handled by a recursive call to the create() function
-                            directChildren.erase(it2);
+                            directChildren.erase(it);
 
                             // Check if the removed directChild was exactly the subnode
-                            if (!(*it1)->getClass()->isExactlyA(*it2))
+                            if (!subnode->getClass()->isExactlyA(*it))
                             {
                                 // No, it wasn't exactly the subnode - therefore there are some classes between
 
                                 // Add the previously removed directChild (it2) to the subclass-list
-                                this->subclasses_.insert(this->subclasses_.end(), std::pair<const Identifier*, bool>(*it2, true));
+                                this->subclasses_.insert(this->subclasses_.end(), std::pair<const Identifier*, bool>(*it, true));
 
                                 // Insert all directChildren of the directChild
-                                directChildren.insert((*it2)->getDirectChildren().begin(), (*it2)->getDirectChildren().end());
+                                directChildren.insert((*it)->getDirectChildren().begin(), (*it)->getDirectChildren().end());
 
                                 // Restart the scan with the expanded set of directChildren
@@ -957,6 +957,6 @@
             // The bool is "false", meaning they have no subnodes and therefore need no further checks
             if (node->isIncluded())
-                for (std::set<const Identifier*>::iterator it = directChildren.begin(); it != directChildren.end(); ++it)
-                    this->subclasses_.insert(this->subclasses_.end(), std::pair<const Identifier*, bool>(*it, false));
+                for (const Identifier* directChild : directChildren)
+                    this->subclasses_.insert(this->subclasses_.end(), std::pair<const Identifier*, bool>(directChild, false));
         }
     }
Index: code/trunk/src/libraries/core/ClassTreeMask.h
===================================================================
--- code/trunk/src/libraries/core/ClassTreeMask.h	(revision 11056)
+++ code/trunk/src/libraries/core/ClassTreeMask.h	(revision 11071)
@@ -152,10 +152,10 @@
             ClassTreeMaskNode* operator*() const;
             ClassTreeMaskNode* operator->() const;
-            operator bool() const;
+            explicit operator bool() const;
             bool operator==(ClassTreeMaskNode* compare) const;
             bool operator!=(ClassTreeMaskNode* compare) const;
 
         private:
-            std::stack<std::pair<std::list<ClassTreeMaskNode*>::iterator, std::list<ClassTreeMaskNode*>::iterator> > nodes_;    ///< A stack to store list-iterators
+            std::stack<std::pair<std::list<ClassTreeMaskNode*>::iterator, std::list<ClassTreeMaskNode*>::iterator>> nodes_;    ///< A stack to store list-iterators
             std::list<ClassTreeMaskNode*> rootlist_;                                                                            ///< A list for internal use (it only stores the root-node)
     };
@@ -211,5 +211,5 @@
             inline const ClassTreeMask& begin() const { return (*this); }
             /// End of the ClassTreeMaskObjectIterator.
-            inline BaseObject*          end()   const { return 0; }
+            inline BaseObject*          end()   const { return nullptr; }
 
             ClassTreeMask& operator=(const ClassTreeMask& other);
@@ -276,5 +276,5 @@
         public:
             /// Default-constructor: Does nothing.
-            inline ClassTreeMaskObjectIterator() {}
+            inline ClassTreeMaskObjectIterator() = default;
             /// Copy-Constructor: Initializes the iterator from another ClassTreeMask.
             inline ClassTreeMaskObjectIterator(const ClassTreeMask& mask) { (*this) = mask; }
@@ -285,9 +285,9 @@
 
             /// Returns true if the ClassTreeMaskObjectIterator points at the given object.
-            inline bool operator==(BaseObject* pointer) const { return (this->objectIterator_ && (*this->objectIterator_) == pointer) || (!this->objectIterator_ && pointer == 0); }
+            inline bool operator==(BaseObject* pointer) const { return (this->objectIterator_ && (*this->objectIterator_) == pointer) || (!this->objectIterator_ && pointer == nullptr); }
             /// Returns true if the ClassTreeMaskObjectIterator doesn't point at the given object.
-            inline bool operator!=(BaseObject* pointer) const { return (this->objectIterator_ && (*this->objectIterator_) != pointer) || (!this->objectIterator_ && pointer != 0); }
+            inline bool operator!=(BaseObject* pointer) const { return (this->objectIterator_ && (*this->objectIterator_) != pointer) || (!this->objectIterator_ && pointer != nullptr); }
             /// Returns true if the ClassTreeMaskObjectIterator hasn't already reached the end.
-            inline operator bool() const { return (this->objectIterator_); }
+            inline explicit operator bool() const { return this->objectIterator_.operator bool(); }
             /// Returns the object the ClassTreeMaskObjectIterator currently points at.
             inline BaseObject* operator*() const { return (*this->objectIterator_); }
@@ -298,7 +298,7 @@
             void create(ClassTreeMaskNode* node);
 
-            std::list<std::pair<const Identifier*, bool> >           subclasses_;       ///< A list of all Identifiers through which objects the iterator should iterate
-            std::list<std::pair<const Identifier*, bool> >::iterator subclassIterator_; ///< The current class of the iterator
-            Iterator<BaseObject>                                     objectIterator_;   ///< The current object of the iterator
+            std::list<std::pair<const Identifier*, bool>>           subclasses_;       ///< A list of all Identifiers through which objects the iterator should iterate
+            std::list<std::pair<const Identifier*, bool>>::iterator subclassIterator_; ///< The current class of the iterator
+            Iterator<BaseObject>                                    objectIterator_;   ///< The current object of the iterator
     };
 }
Index: code/trunk/src/libraries/core/ConfigurablePaths.cc
===================================================================
--- code/trunk/src/libraries/core/ConfigurablePaths.cc	(revision 11056)
+++ code/trunk/src/libraries/core/ConfigurablePaths.cc	(revision 11071)
@@ -54,4 +54,5 @@
 #include "util/Exception.h"
 #include "commandline/CommandLineIncludes.h"
+#include "core/ApplicationPaths.h"
 
 // Differentiate Boost Filesystem v2 and v3
@@ -67,5 +68,5 @@
 
     //! Static pointer to the singleton
-    ConfigurablePaths* ConfigurablePaths::singletonPtr_s  = 0;
+    ConfigurablePaths* ConfigurablePaths::singletonPtr_s  = nullptr;
 
     SetCommandLineArgument(externalDataPath, "").information("Path to the external data files");
@@ -122,5 +123,5 @@
             char* userDataPathPtr(getenv("APPDATA"));
 #endif
-            if (userDataPathPtr == NULL)
+            if (userDataPathPtr == nullptr)
                 ThrowException(General, "Could not retrieve user data path.");
             bf::path userDataPath(userDataPathPtr);
@@ -143,9 +144,9 @@
 
         // Create directories to avoid problems when opening files in non existent folders.
-        std::vector<std::pair<bf::path, std::string> > directories;
-        directories.push_back(std::make_pair(bf::path(configPath_), std::string("config")));
-        directories.push_back(std::make_pair(bf::path(logPath_), std::string("log")));
+        std::vector<std::pair<bf::path, std::string>> directories;
+        directories.emplace_back(bf::path(configPath_), std::string("config"));
+        directories.emplace_back(bf::path(logPath_), std::string("log"));
 
-        for (std::vector<std::pair<bf::path, std::string> >::iterator it = directories.begin();
+        for (std::vector<std::pair<bf::path, std::string>>::iterator it = directories.begin();
             it != directories.end(); ++it)
         {
Index: code/trunk/src/libraries/core/ConfigurablePaths.h
===================================================================
--- code/trunk/src/libraries/core/ConfigurablePaths.h	(revision 11056)
+++ code/trunk/src/libraries/core/ConfigurablePaths.h	(revision 11071)
@@ -93,5 +93,7 @@
 
         private:
-            ConfigurablePaths(const ConfigurablePaths&); //!< Don't use (undefined symbol)
+            // non-copyable:
+            ConfigurablePaths(const ConfigurablePaths&) = delete;
+            ConfigurablePaths& operator=(const ConfigurablePaths&) = delete;
 
             boost::filesystem::path& dataPath_;              //!< Path to the data files folder
Index: code/trunk/src/libraries/core/Core.cc
===================================================================
--- code/trunk/src/libraries/core/Core.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Core.cc	(revision 11071)
@@ -83,5 +83,5 @@
 {
     //! Static pointer to the singleton
-    Core* Core::singletonPtr_s  = 0;
+    Core* Core::singletonPtr_s  = nullptr;
 
     SetCommandLineArgument(settingsFile, "orxonox.ini").information("THE configuration file");
@@ -98,24 +98,24 @@
 
     Core::Core(const std::string& cmdLine)
-        : applicationPaths_(NULL)
-        , configurablePaths_(NULL)
-        , dynLibManager_(NULL)
-        , signalHandler_(NULL)
-        , configFileManager_(NULL)
-        , languageInstance_(NULL)
-        , loaderInstance_(NULL)
-        , ioConsole_(NULL)
-        , tclBind_(NULL)
-        , tclThreadManager_(NULL)
-        , rootScope_(NULL)
-        , graphicsManager_(NULL)
-        , inputManager_(NULL)
-        , guiManager_(NULL)
-        , graphicsScope_(NULL)
+        : applicationPaths_(nullptr)
+        , configurablePaths_(nullptr)
+        , dynLibManager_(nullptr)
+        , signalHandler_(nullptr)
+        , configFileManager_(nullptr)
+        , languageInstance_(nullptr)
+        , loaderInstance_(nullptr)
+        , ioConsole_(nullptr)
+        , tclBind_(nullptr)
+        , tclThreadManager_(nullptr)
+        , rootScope_(nullptr)
+        , graphicsManager_(nullptr)
+        , inputManager_(nullptr)
+        , guiManager_(nullptr)
+        , graphicsScope_(nullptr)
         , bGraphicsLoaded_(false)
-        , staticInitHandler_(NULL)
-        , pluginManager_(NULL)
-        , rootModule_(NULL)
-        , config_(NULL)
+        , staticInitHandler_(nullptr)
+        , pluginManager_(nullptr)
+        , rootModule_(nullptr)
+        , config_(nullptr)
         , destructionHelper_(this)
     {
@@ -179,5 +179,5 @@
 
         // initialize root context
-        Context::setRootContext(new Context(NULL));
+        Context::setRootContext(new Context(nullptr));
 
         // Do this soon after the ConfigFileManager has been created to open up the
@@ -282,7 +282,7 @@
 
         const std::vector<std::string>& modulePaths = ApplicationPaths::getInstance().getModulePaths();
-        for (std::vector<std::string>::const_iterator it = modulePaths.begin(); it != modulePaths.end(); ++it)
-        {
-            ModuleInstance* module = new ModuleInstance(*it);
+        for (const std::string& modulePath : modulePaths)
+        {
+            ModuleInstance* module = new ModuleInstance(modulePath);
             this->loadModule(module);
             this->modules_.push_back(module);
@@ -312,7 +312,6 @@
     void Core::unloadModules()
     {
-        for (std::list<ModuleInstance*>::iterator it = this->modules_.begin(); it != this->modules_.end(); ++it)
-        {
-            ModuleInstance* module = (*it);
+        for (ModuleInstance* module : this->modules_)
+        {
             this->unloadModule(module);
             delete module;
@@ -329,5 +328,5 @@
         module->deleteAllStaticallyInitializedInstances();
         this->dynLibManager_->unload(module->getDynLib());
-        module->setDynLib(NULL);
+        module->setDynLib(nullptr);
     }
 
@@ -464,6 +463,6 @@
     {
         // Update UpdateListeners before general ticking
-        for (ObjectList<UpdateListener>::iterator it = ObjectList<UpdateListener>::begin(); it != ObjectList<UpdateListener>::end(); ++it)
-            it->preUpdate(time);
+        for (UpdateListener* listener : ObjectList<UpdateListener>())
+            listener->preUpdate(time);
         if (this->bGraphicsLoaded_)
         {
@@ -474,5 +473,5 @@
         }
         // Process console events and status line
-        if (this->ioConsole_ != NULL)
+        if (this->ioConsole_ != nullptr)
             this->ioConsole_->preUpdate(time);
         // Process thread commands
@@ -483,6 +482,6 @@
     {
         // Update UpdateListeners just before rendering
-        for (ObjectList<UpdateListener>::iterator it = ObjectList<UpdateListener>::begin(); it != ObjectList<UpdateListener>::end(); ++it)
-            it->postUpdate(time);
+        for (UpdateListener* listener : ObjectList<UpdateListener>())
+            listener->postUpdate(time);
         if (this->bGraphicsLoaded_)
         {
Index: code/trunk/src/libraries/core/Core.h
===================================================================
--- code/trunk/src/libraries/core/Core.h	(revision 11056)
+++ code/trunk/src/libraries/core/Core.h	(revision 11071)
@@ -73,5 +73,5 @@
 
             /// Leave empty and use destroy() instead
-            ~Core() {}
+            ~Core() = default;
             /// Destructor that also executes when the object fails to construct
             void destroy();
@@ -92,5 +92,7 @@
 
         private:
-            Core(const Core&); //!< Don't use (undefined symbol)
+            // non-copyable:
+            Core(const Core&) = delete;
+            Core& operator=(const Core&) = delete;
 
             void setThreadAffinity(int limitToCPU);
Index: code/trunk/src/libraries/core/CoreConfig.cc
===================================================================
--- code/trunk/src/libraries/core/CoreConfig.cc	(revision 11056)
+++ code/trunk/src/libraries/core/CoreConfig.cc	(revision 11071)
@@ -35,4 +35,6 @@
 #include "core/Language.h"
 #include "core/ApplicationPaths.h"
+
+#include <random>
 
 namespace orxonox
@@ -106,7 +108,6 @@
     {
         // Inform listeners
-        ObjectList<DevModeListener>::iterator it = ObjectList<DevModeListener>::begin();
-        for (; it != ObjectList<DevModeListener>::end(); ++it)
-            it->devModeChanged(bDevMode_);
+        for (DevModeListener* listener : ObjectList<DevModeListener>())
+            listener->devModeChanged(bDevMode_);
     }
 
@@ -129,5 +130,8 @@
         if (!bInitialized && this->bInitRandomNumberGenerator_)
         {
-            srand(static_cast<unsigned int>(time(0)));
+            std::random_device rnddev;
+            rndseed(rnddev());
+            //Keep the old seeding around because people will probably still use the old functions
+            srand(rnddev());
             rand();
             bInitialized = true;
@@ -137,10 +141,10 @@
     void CoreConfig::updateLastLevelTimestamp()
     {
-        ModifyConfigValue(lastLevelTimestamp_, set, static_cast<long long>(time(NULL)));
+        ModifyConfigValue(lastLevelTimestamp_, set, static_cast<long long>(time(nullptr)));
     }
 
     void CoreConfig::updateOgreConfigTimestamp()
     {
-        ModifyConfigValue(ogreConfigTimestamp_, set, static_cast<long long>(time(NULL)));
+        ModifyConfigValue(ogreConfigTimestamp_, set, static_cast<long long>(time(nullptr)));
     }
 
Index: code/trunk/src/libraries/core/CoreConfig.h
===================================================================
--- code/trunk/src/libraries/core/CoreConfig.h	(revision 11056)
+++ code/trunk/src/libraries/core/CoreConfig.h	(revision 11071)
@@ -76,5 +76,5 @@
     public:
         DevModeListener();
-        virtual ~DevModeListener() {}
+        virtual ~DevModeListener() = default;
         virtual void devModeChanged(bool value) = 0;
     };
Index: code/trunk/src/libraries/core/CoreIncludes.h
===================================================================
--- code/trunk/src/libraries/core/CoreIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/core/CoreIncludes.h	(revision 11071)
@@ -120,5 +120,5 @@
 */
 #define RegisterAbstractClass(ClassName) \
-    RegisterClassWithFactory(ClassName, static_cast<ClassFactory<ClassName>*>(NULL), false)
+    RegisterClassWithFactory(ClassName, static_cast<ClassFactory<ClassName>*>(nullptr), false)
 
 /**
@@ -221,5 +221,5 @@
         struct InheritsFromClass : public Identifier::InheritsFrom
         {
-            virtual Identifier* getParent() const { return Class(T); }
+            virtual Identifier* getParent() const override { return Class(T); }
         };
 
@@ -231,10 +231,10 @@
             ~StaticallyInitializedIdentifier() { identifier_->destroy(); }
 
-            virtual void load()
+            virtual void load() override
             {
                 IdentifierManager::getInstance().addIdentifier(this->identifier_);
             }
 
-            virtual void unload()
+            virtual void unload() override
             {
                 IdentifierManager::getInstance().removeIdentifier(this->identifier_);
Index: code/trunk/src/libraries/core/CorePrecompiledHeaders.h
===================================================================
--- code/trunk/src/libraries/core/CorePrecompiledHeaders.h	(revision 11056)
+++ code/trunk/src/libraries/core/CorePrecompiledHeaders.h	(revision 11071)
@@ -50,4 +50,5 @@
 #include <sstream>  // 53
 #include <set>      // 50
+#include <memory>
 
 #include "util/Output.h" // 48
@@ -66,5 +67,4 @@
 #include <OgreColourValue.h> // 36
 #include <boost/preprocessor/cat.hpp> // 27
-#include <boost/shared_ptr.hpp> // 21
 
 #ifdef ORXONOX_COMPILER_MSVC
@@ -76,5 +76,4 @@
 #include "util/SubString.h"  // 14
 
-#include <boost/scoped_ptr.hpp> // 13
 #include <stack> // 12
 
Index: code/trunk/src/libraries/core/CorePrereqs.h
===================================================================
--- code/trunk/src/libraries/core/CorePrereqs.h	(revision 11056)
+++ code/trunk/src/libraries/core/CorePrereqs.h	(revision 11071)
@@ -38,4 +38,5 @@
 #include "OrxonoxConfig.h"
 #include <boost/version.hpp>
+#include <string>
 
 //-----------------------------------------------------------------------
@@ -68,5 +69,5 @@
 namespace orxonox
 {
-    static const uint32_t OBJECTID_UNKNOWN = static_cast<uint32_t>(-1);
+    static constexpr uint32_t OBJECTID_UNKNOWN = static_cast<uint32_t>(-1);
 }
 
@@ -82,6 +83,6 @@
 
         //!A list of available scopes for the Scope template.
-        static const Value ROOT = 1;
-        static const Value GRAPHICS = 2;
+        static constexpr Value ROOT = 1;
+        static constexpr Value GRAPHICS = 2;
     }
 
@@ -90,9 +91,9 @@
         typedef int Type;
 
-        static const Type STATIC_INITIALIZATION_HANDLER = 1;
-        static const Type IDENTIFIER = 2;
-        static const Type SCOPED_SINGLETON_WRAPPER = 3;
-        static const Type COMMAND_LINE_ARGUMENT = 4;
-        static const Type CONSOLE_COMMAND = 5;
+        static constexpr Type STATIC_INITIALIZATION_HANDLER = 1;
+        static constexpr Type IDENTIFIER = 2;
+        static constexpr Type SCOPED_SINGLETON_WRAPPER = 3;
+        static constexpr Type COMMAND_LINE_ARGUMENT = 4;
+        static constexpr Type CONSOLE_COMMAND = 5;
     }
 
Index: code/trunk/src/libraries/core/CoreStaticInitializationHandler.cc
===================================================================
--- code/trunk/src/libraries/core/CoreStaticInitializationHandler.cc	(revision 11056)
+++ code/trunk/src/libraries/core/CoreStaticInitializationHandler.cc	(revision 11071)
@@ -99,6 +99,6 @@
         std::set<Identifier*> identifiers;
         const std::set<StaticallyInitializedInstance*>& instances = module->getInstances(StaticInitialization::IDENTIFIER);
-        for (std::set<StaticallyInitializedInstance*>::const_iterator it = instances.begin(); it != instances.end(); ++it)
-            identifiers.insert(&static_cast<StaticallyInitializedIdentifier*>(*it)->getIdentifier());
+        for (StaticallyInitializedInstance* instance : instances)
+            identifiers.insert(&static_cast<StaticallyInitializedIdentifier*>(instance)->getIdentifier());
 
         // destroy objects. some objects may survive this at first because they still have strong pointers pointing at them. this is
@@ -106,16 +106,16 @@
         // that objects within one module may reference each other by strong pointers. but it is not allowed that objects from another
         // module (which is not unloaded) uses strong pointers to point at objects inside the unloaded module. this will lead to a crash.
-        for (std::set<Identifier*>::iterator it = identifiers.begin(); it != identifiers.end(); ++it)
-            (*it)->destroyObjects();
+        for (Identifier* identifier : identifiers)
+            identifier->destroyObjects();
 
         // check if all objects were really destroyed. this is not the case if an object is referenced by a strong pointer from another
         // module (or if two objects inside this module reference each other). this will lead to a crash and must be fixed (e.g. by
         // changing object dependencies; or by changing the logic that allows modules to be unloaded).
-        for (std::set<Identifier*>::iterator it = identifiers.begin(); it != identifiers.end(); ++it)
+        for (Identifier* identifier : identifiers)
         {
-            ObjectListBase* objectList = Context::getRootContext()->getObjectList(*it);
+            ObjectListBase* objectList = Context::getRootContext()->getObjectList(identifier);
             if (objectList->size() > 0)
             {
-                orxout(internal_error) << "There are still " << objectList->size() << " objects of type " << (*it)->getName()
+                orxout(internal_error) << "There are still " << objectList->size() << " objects of type " << identifier->getName()
                     << " after unloading the Identifier. This may lead to a crash" << endl;
             }
@@ -123,12 +123,12 @@
 
         // destroy object-lists in all contexts
-        for (std::set<Identifier*>::iterator it_identifier = identifiers.begin(); it_identifier != identifiers.end(); ++it_identifier)
+        for (Identifier* identifier : identifiers)
         {
             // only do this if the Identifier is not a Context itself; otherwise we delete the list we're iterating over
-            if (!(*it_identifier)->isExactlyA(Class(Context)))
+            if (!identifier->isExactlyA(Class(Context)))
             {
                 // iterate over all contexts
-                for (ObjectList<Context>::iterator it_context = ObjectList<Context>::begin(); it_context != ObjectList<Context>::end(); ++it_context)
-                    it_context->destroyObjectList((*it_identifier));
+                for (Context* context : ObjectList<Context>())
+                    context->destroyObjectList(identifier);
             }
         }
Index: code/trunk/src/libraries/core/CoreStaticInitializationHandler.h
===================================================================
--- code/trunk/src/libraries/core/CoreStaticInitializationHandler.h	(revision 11056)
+++ code/trunk/src/libraries/core/CoreStaticInitializationHandler.h	(revision 11071)
@@ -43,9 +43,9 @@
             CoreStaticInitializationHandler() : bInitInstances_(false) {}
 
-            virtual void setupHandler();
-            virtual void shutdownHandler();
+            virtual void setupHandler() override;
+            virtual void shutdownHandler() override;
 
-            virtual void loadModule(ModuleInstance* module);
-            virtual void unloadModule(ModuleInstance* module);
+            virtual void loadModule(ModuleInstance* module) override;
+            virtual void unloadModule(ModuleInstance* module) override;
 
             inline void setInitInstances(bool bInitInstances)
Index: code/trunk/src/libraries/core/EventIncludes.h
===================================================================
--- code/trunk/src/libraries/core/EventIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/core/EventIncludes.h	(revision 11071)
@@ -86,6 +86,8 @@
 
 #define XMLPortEventStateIntern(name, classname, statename, xmlelement, mode) \
-    static orxonox::ExecutorMemberPtr<classname> xmlsetfunctor##name = orxonox::createExecutor(orxonox::createFunctor(&classname::addEventSource), std::string( #classname ) + "::" + "addEventSource" + '(' + statename + ')').cast<orxonox::ExecutorMember<classname> >(); \
-    static orxonox::ExecutorMemberPtr<classname> xmlgetfunctor##name = orxonox::createExecutor(orxonox::createFunctor(&classname::getEventSource), std::string( #classname ) + "::" + "getEventSource" + '(' + statename + ')').cast<orxonox::ExecutorMember<classname> >(); \
+    static orxonox::ExecutorPtr xmlsetfunctorbase##name = orxonox::createExecutor(orxonox::createFunctor(&classname::addEventSource), std::string( #classname ) + "::" + "addEventSource" + '(' + statename + ')'); \
+    static orxonox::ExecutorPtr xmlgetfunctorbase##name = orxonox::createExecutor(orxonox::createFunctor(&classname::getEventSource), std::string( #classname ) + "::" + "getEventSource" + '(' + statename + ')'); \
+    static orxonox::ExecutorMemberPtr<classname> xmlsetfunctor##name = std::static_pointer_cast<orxonox::ExecutorMember<classname>>(xmlsetfunctorbase##name); \
+    static orxonox::ExecutorMemberPtr<classname> xmlgetfunctor##name = std::static_pointer_cast<orxonox::ExecutorMember<classname>>(xmlgetfunctorbase##name); \
     xmlsetfunctor##name->setDefaultValue(1, statename); \
     xmlgetfunctor##name->setDefaultValue(1, statename); \
Index: code/trunk/src/libraries/core/GUIManager.cc
===================================================================
--- code/trunk/src/libraries/core/GUIManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/GUIManager.cc	(revision 11071)
@@ -32,5 +32,5 @@
 #include <fstream>
 #include <memory>
-#include <boost/bind.hpp>
+#include <functional>
 #include <OgreRenderQueue.h>
 #include <OgreRenderWindow.h>
@@ -119,4 +119,6 @@
 namespace orxonox
 {
+    namespace arg = std::placeholders;
+
     static void key_esc()
         { GUIManager::getInstance().keyESC(); }
@@ -126,5 +128,5 @@
     {
     public:
-        void logEvent(const CEGUI::String& message, CEGUI::LoggingLevel level = CEGUI::Standard)
+        virtual void logEvent(const CEGUI::String& message, CEGUI::LoggingLevel level = CEGUI::Standard) override
         {
             OutputLevel orxonoxLevel = level::debug_output;
@@ -145,5 +147,5 @@
 
         /// Carbon copy from CEGUIDefaultLogger.cpp with a bugfix for Windows
-        void setLogFilename(const CEGUI::String& filename, bool append = false)
+        virtual void setLogFilename(const CEGUI::String& filename, bool append = false) override
         {
             // Close current log file (if any)
@@ -169,5 +171,5 @@
                 d_caching = false;
 
-                std::vector<std::pair<CEGUI::String, CEGUI::LoggingLevel> >::iterator it = d_cache.begin();
+                std::vector<std::pair<CEGUI::String, CEGUI::LoggingLevel>>::iterator it = d_cache.begin();
 
                 while (it != d_cache.end())
@@ -230,5 +232,5 @@
     public:
         /// Callback from Ogre invoked before other stuff in our target queue is rendered
-        void renderQueueStarted(Ogre::uint8 id, const Ogre::String& invocation, bool& skipThisQueue)
+        virtual void renderQueueStarted(Ogre::uint8 id, const Ogre::String& invocation, bool& skipThisQueue) override
         {
             if (id == Ogre::RENDER_QUEUE_OVERLAY && invocation.empty())
@@ -252,5 +254,5 @@
     static CEGUI::MouseButton convertButton(MouseButtonCode::ByEnum button);
 
-    GUIManager* GUIManager::singletonPtr_s = 0;
+    GUIManager* GUIManager::singletonPtr_s = nullptr;
     /*static*/ const std::string GUIManager::defaultScheme_ = "TaharezGreen"; //Alternative: Orxonox (not fully complete yet, see the graphics menu)
 
@@ -265,6 +267,6 @@
             ArgumentCompletionList names;
             const std::vector<std::string> guis = GUIManager::getInstance().getLoadedGUIs();
-            for (size_t i = 0; i < guis.size(); ++i)
-                names.push_back(ArgumentCompletionListElement(guis[i], getLowercase(guis[i])));
+            for (const std::string gui : guis)
+                names.push_back(ArgumentCompletionListElement(gui, getLowercase(gui)));
             return names;
         }
@@ -291,18 +293,18 @@
     */
     GUIManager::GUIManager(const std::pair<int, int>& mousePosition)
-        : guiRenderer_(NULL)
-        , resourceProvider_(NULL)
+        : guiRenderer_(nullptr)
+        , resourceProvider_(nullptr)
 #ifndef ORXONOX_OLD_CEGUI
-        , rqListener_(NULL)
-        , imageCodec_(NULL)
-#endif
-        , luaState_(NULL)
-        , scriptModule_(NULL)
-        , guiSystem_(NULL)
-        , ceguiLogger_(NULL)
-        , rootWindow_(NULL)
-        , hudRootWindow_(NULL)
-        , menuRootWindow_(NULL)
-        , camera_(NULL)
+        , rqListener_(nullptr)
+        , imageCodec_(nullptr)
+#endif
+        , luaState_(nullptr)
+        , scriptModule_(nullptr)
+        , guiSystem_(nullptr)
+        , ceguiLogger_(nullptr)
+        , rootWindow_(nullptr)
+        , hudRootWindow_(nullptr)
+        , menuRootWindow_(nullptr)
+        , camera_(nullptr)
         , destructionHelper_(this)
     {
@@ -353,5 +355,5 @@
 
         // Create our own logger to specify the filepath
-        std::auto_ptr<CEGUILogger> ceguiLogger(new CEGUILogger());
+        std::unique_ptr<CEGUILogger> ceguiLogger(new CEGUILogger());
         ceguiLogger->setLogFilename(ConfigurablePaths::getLogPathString() + "cegui.log");
         ceguiLogger->setLoggingLevel(static_cast<CEGUI::LoggingLevel>(this->outputLevelCeguiLog_));
@@ -360,5 +362,5 @@
         // Create the CEGUI system singleton
 #ifdef ORXONOX_OLD_CEGUI
-        guiSystem_ = new System(guiRenderer_, resourceProvider_, 0, scriptModule_);
+        guiSystem_ = new System(guiRenderer_, resourceProvider_, nullptr, scriptModule_);
         // Add functions that have been renamed in newer versions
         luaState_->doString("CEGUI.SchemeManager.create = CEGUI.SchemeManager.loadScheme");
@@ -366,5 +368,5 @@
         luaState_->doString("CEGUI.ImagesetManager.createFromImageFile= CEGUI.ImagesetManager.createImagesetFromImageFile");
 #else
-        guiSystem_ = &System::create(*guiRenderer_, resourceProvider_, 0, imageCodec_, scriptModule_);
+        guiSystem_ = &System::create(*guiRenderer_, resourceProvider_, nullptr, imageCodec_, scriptModule_);
 #endif
 
@@ -474,5 +476,5 @@
     {
         assert(guiSystem_);
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectTimePulse, _1, time.getDeltaTime()));
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectTimePulse, arg::_1, time.getDeltaTime()));
     }
 
@@ -490,12 +492,12 @@
     {
 #ifdef ORXONOX_OLD_CEGUI
-        if (camera == NULL)
-            this->guiRenderer_->setTargetSceneManager(0);
+        if (camera == nullptr)
+            this->guiRenderer_->setTargetSceneManager(nullptr);
         else
             this->guiRenderer_->setTargetSceneManager(camera->getSceneManager());
 #else
-        if (camera_ != NULL && camera_->getSceneManager() != NULL)
+        if (camera_ != nullptr && camera_->getSceneManager() != nullptr)
             camera_->getSceneManager()->removeRenderQueueListener(rqListener_);
-        if (camera != NULL && camera->getSceneManager() != NULL)
+        if (camera != nullptr && camera->getSceneManager() != nullptr)
             camera->getSceneManager()->addRenderQueueListener(rqListener_);
 #endif
@@ -672,9 +674,9 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectKeyDown, _1, (CEGUI::Key::Scan) evt.getKeyCode())); // TODO: will this cast always work?
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectChar, _1, evt.getText()));
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectKeyDown, _1, evt.getKeyCode()));
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectChar, _1, evt.getText()));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectKeyDown, arg::_1, (CEGUI::Key::Scan) evt.getKeyCode())); // TODO: will this cast always work?
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectChar, arg::_1, evt.getText()));
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectKeyDown, arg::_1, evt.getKeyCode()));
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectChar, arg::_1, evt.getText()));
 #endif
     }
@@ -683,7 +685,7 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectKeyUp, _1, (CEGUI::Key::Scan) evt.getKeyCode())); // TODO: will this cast always work?
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectKeyUp, _1, evt.getKeyCode()));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectKeyUp, arg::_1, (CEGUI::Key::Scan) evt.getKeyCode())); // TODO: will this cast always work?
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectKeyUp, arg::_1, evt.getKeyCode()));
 #endif
     }
@@ -701,7 +703,7 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectMouseButtonDown, _1, convertButton(id)));
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectMouseButtonDown, _1, convertButton(id)));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectMouseButtonDown, arg::_1, convertButton(id)));
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectMouseButtonDown, arg::_1, convertButton(id)));
 #endif
     }
@@ -719,7 +721,7 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectMouseButtonUp, _1, convertButton(id)));
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectMouseButtonUp, _1, convertButton(id)));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectMouseButtonUp, arg::_1, convertButton(id)));
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectMouseButtonUp, arg::_1, convertButton(id)));
 #endif
     }
@@ -728,7 +730,7 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectMousePosition, _1, (float)abs.x, (float)abs.y));
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectMousePosition, _1, (float)abs.x, (float)abs.y));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectMousePosition, arg::_1, (float)abs.x, (float)abs.y));
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectMousePosition, arg::_1, (float)abs.x, (float)abs.y));
 #endif
     }
@@ -737,7 +739,7 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectMouseWheelChange, _1, (float)sgn(rel) * this->numScrollLines_));
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectMouseWheelChange, _1, (float)sgn(rel) * this->numScrollLines_));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectMouseWheelChange, arg::_1, (float)sgn(rel) * this->numScrollLines_));
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectMouseWheelChange, arg::_1, (float)sgn(rel) * this->numScrollLines_));
 #endif
     }
@@ -749,7 +751,7 @@
     {
 #if CEGUI_VERSION >= 0x000800
-        this->protectedCeguiContextCall(boost::bind(&CEGUI::GUIContext::injectMouseLeaves, _1));
-#else
-        this->protectedCeguiSystemCall(boost::bind(&CEGUI::System::injectMouseLeaves, _1));
+        this->protectedCeguiContextCall(std::bind(&CEGUI::GUIContext::injectMouseLeaves, arg::_1));
+#else
+        this->protectedCeguiSystemCall(std::bind(&CEGUI::System::injectMouseLeaves, arg::_1));
 #endif
     }
@@ -798,5 +800,5 @@
         terminate the whole program...
     @note
-        Your life gets easier if you use boost::bind to create the object/function.
+        Your life gets easier if you use std::bind to create the object/function.
     @param function
         Any callable object/function that takes this->guiSystem_ as its only parameter.
@@ -921,5 +923,5 @@
             return;
 
-        CEGUI::Font* font = NULL;
+        CEGUI::Font* font = nullptr;
         CEGUI::XMLAttributes xmlAttributes;
 
@@ -937,5 +939,5 @@
 
         font = CEGUI::FontManager::getSingleton().createFont("FreeType", xmlAttributes);
-        if(font != NULL)
+        if(font != nullptr)
             font->load();
 #else
Index: code/trunk/src/libraries/core/GUIManager.h
===================================================================
--- code/trunk/src/libraries/core/GUIManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/GUIManager.h	(revision 11071)
@@ -40,4 +40,5 @@
 #include <map>
 #include <string>
+#include <memory>
 
 #if CEGUI_VERSION >= 0x000800
@@ -48,6 +49,4 @@
 #   include <CEGUIVersion.h>
 #endif
-
-#include <boost/shared_ptr.hpp>
 
 #include "util/DestructionHelper.h"
@@ -98,5 +97,5 @@
 
         //! Leave empty and use cleanup() instead
-        ~GUIManager() {}
+        ~GUIManager() = default;
         /// Destructor that also executes when object fails to construct
         void destroy();
@@ -137,5 +136,5 @@
         inline void setPlayer(const std::string& guiname, PlayerInfo* player)
             { this->players_[guiname] = player; }
-        inline orxonox::PlayerInfo* getPlayer(const std::string& guiname) const { std::map<std::string, PlayerInfo*>::const_iterator it = this->players_.find(guiname); return (it != this->players_.end()) ? it->second : 0; } // tolua_export
+        inline orxonox::PlayerInfo* getPlayer(const std::string& guiname) const { std::map<std::string, PlayerInfo*>::const_iterator it = this->players_.find(guiname); return (it != this->players_.end()) ? it->second : nullptr; } // tolua_export
 
         // TODO: Temporary hack because the tolua exported CEGUI method does not seem to work
@@ -154,5 +153,7 @@
 
     private:
-        GUIManager(const GUIManager& instance); //!< private and undefined copy c'tor (this is a singleton class)
+        // non-copyable:
+        GUIManager(const GUIManager&) = delete;
+        GUIManager& operator=(const GUIManager&) = delete;
 
         void executeCode(const std::string& str);
@@ -172,17 +173,17 @@
 
         // keyHandler functions
-        void buttonPressed (const KeyEvent& evt);
-        void buttonReleased(const KeyEvent& evt);
+        virtual void buttonPressed (const KeyEvent& evt) override;
+        virtual void buttonReleased(const KeyEvent& evt) override;
 
         // mouseHandler functions
-        void buttonPressed (MouseButtonCode::ByEnum id);
-        void buttonReleased(MouseButtonCode::ByEnum id);
-        void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize);
-        void mouseScrolled (int abs, int rel);
+        virtual void buttonPressed (MouseButtonCode::ByEnum id) override;
+        virtual void buttonReleased(MouseButtonCode::ByEnum id) override;
+        virtual void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override;
+        virtual void mouseScrolled (int abs, int rel) override;
         void mouseLeft     ();
 
         // window event handler
-        virtual void windowResized(unsigned int newWidth, unsigned int newHeight);
-        virtual void windowFocusChanged(bool bFocus);
+        virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
+        virtual void windowFocusChanged(bool bFocus) override;
 
 #ifdef ORXONOX_OLD_CEGUI
@@ -198,5 +199,5 @@
         CEGUI::LuaScriptModule*              scriptModule_;         //!< CEGUI's script module to use Lua
         CEGUI::System*                       guiSystem_;            //!< CEGUI's main system
-        shared_ptr<ResourceInfo>             rootFileInfo_;         //!< Resource information about the root script
+        std::shared_ptr<ResourceInfo>        rootFileInfo_;         //!< Resource information about the root script
         CEGUI::Logger*                       ceguiLogger_;          //!< CEGUI's logger to be able to log CEGUI errors in our log
         int                                  outputLevelCeguiLog_;  //!< CEGUI's log level
Index: code/trunk/src/libraries/core/Game.cc
===================================================================
--- code/trunk/src/libraries/core/Game.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Game.cc	(revision 11071)
@@ -36,5 +36,4 @@
 
 #include <exception>
-#include <boost/weak_ptr.hpp>
 #include <loki/ScopeGuard.h>
 
@@ -66,5 +65,5 @@
 
     std::map<std::string, GameStateInfo> Game::gameStateDeclarations_s;
-    Game* Game::singletonPtr_s = 0;
+    Game* Game::singletonPtr_s = nullptr;
 
     //! Represents one node of the game state tree.
@@ -72,14 +71,14 @@
     {
         std::string name_;
-        weak_ptr<GameStateTreeNode> parent_;
-        std::vector<shared_ptr<GameStateTreeNode> > children_;
+        std::weak_ptr<GameStateTreeNode> parent_;
+        std::vector<std::shared_ptr<GameStateTreeNode>> children_;
     };
 
     Game::Game(const std::string& cmdLine)
-        : gameClock_(NULL)
-        , core_(NULL)
+        : gameClock_(nullptr)
+        , core_(nullptr)
         , bChangingState_(false)
         , bAbort_(false)
-        , config_(NULL)
+        , config_(nullptr)
         , destructionHelper_(this)
     {
@@ -116,13 +115,12 @@
 
         // After the core has been created, we can safely instantiate the GameStates that don't require graphics
-        for (std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.begin();
-            it != gameStateDeclarations_s.end(); ++it)
-        {
-            if (!it->second.bGraphicsMode)
-                constructedStates_[it->second.stateName] = GameStateFactory::fabricate(it->second);
+        for (const auto& mapEntry : gameStateDeclarations_s)
+        {
+            if (!mapEntry.second.bGraphicsMode)
+                constructedStates_[mapEntry.second.stateName] = GameStateFactory::fabricate(mapEntry.second);
         }
 
         // The empty root state is ALWAYS loaded!
-        this->rootStateNode_ = shared_ptr<GameStateTreeNode>(new GameStateTreeNode());
+        this->rootStateNode_ = std::shared_ptr<GameStateTreeNode>(std::make_shared<GameStateTreeNode>());
         this->rootStateNode_->name_ = "emptyRootGameState";
         this->loadedTopStateNode_ = this->rootStateNode_;
@@ -137,5 +135,5 @@
 
         assert(loadedStates_.size() <= 1); // Just empty root GameState
-        // Destroy all GameStates (shared_ptrs take care of actual destruction)
+        // Destroy all GameStates (std::shared_ptrs take care of actual destruction)
         constructedStates_.clear();
 
@@ -235,5 +233,5 @@
         while (this->requestedStateNodes_.size() > 0)
         {
-            shared_ptr<GameStateTreeNode> requestedStateNode = this->requestedStateNodes_.front();
+            std::shared_ptr<GameStateTreeNode> requestedStateNode = this->requestedStateNodes_.front();
             assert(this->loadedTopStateNode_);
             if (!this->loadedTopStateNode_->parent_.expired() && requestedStateNode == this->loadedTopStateNode_->parent_.lock())
@@ -263,6 +261,5 @@
     {
         // Note: The first element is the empty root state, which doesn't need ticking
-        for (GameStateVector::const_iterator it = this->loadedStates_.begin() + 1;
-            it != this->loadedStates_.end(); ++it)
+        for (const std::shared_ptr<GameState>& state : this->loadedStates_)
         {
             try
@@ -270,17 +267,17 @@
                 // Add tick time for most of the states
                 uint64_t timeBeforeTick = 0;
-                if ((*it)->getInfo().bIgnoreTickTime)
+                if (state->getInfo().bIgnoreTickTime)
                     timeBeforeTick = this->gameClock_->getRealMicroseconds();
-                (*it)->update(*this->gameClock_);
-                if ((*it)->getInfo().bIgnoreTickTime)
+                state->update(*this->gameClock_);
+                if (state->getInfo().bIgnoreTickTime)
                     this->subtractTickTime(static_cast<int32_t>(this->gameClock_->getRealMicroseconds() - timeBeforeTick));
             }
             catch (...)
             {
-                orxout(user_error) << "An exception occurred while updating '" << (*it)->getName() << "': " << Exception::handleMessage() << endl;
+                orxout(user_error) << "An exception occurred while updating '" << state->getName() << "': " << Exception::handleMessage() << endl;
                 orxout(user_error) << "This should really never happen!" << endl;
                 orxout(user_error) << "Unloading all GameStates depending on the one that crashed." << endl;
-                shared_ptr<GameStateTreeNode> current = this->loadedTopStateNode_;
-                while (current->name_ != (*it)->getName() && current)
+                std::shared_ptr<GameStateTreeNode> current = this->loadedTopStateNode_;
+                while (current->name_ != state->getName() && current)
                     current = current->parent_.lock();
                 if (current && current->parent_.lock())
@@ -372,5 +369,5 @@
         }
 
-        shared_ptr<GameStateTreeNode> lastRequestedNode;
+        std::shared_ptr<GameStateTreeNode> lastRequestedNode;
         if (this->requestedStateNodes_.empty())
             lastRequestedNode = this->loadedTopStateNode_;
@@ -384,5 +381,5 @@
 
         // Check children first
-        std::vector<shared_ptr<GameStateTreeNode> > requestedNodes;
+        std::vector<std::shared_ptr<GameStateTreeNode>> requestedNodes;
         for (unsigned int i = 0; i < lastRequestedNode->children_.size(); ++i)
         {
@@ -397,6 +394,6 @@
         {
             // Check parent and all its grand parents
-            shared_ptr<GameStateTreeNode> currentNode = lastRequestedNode;
-            while (currentNode != NULL)
+            std::shared_ptr<GameStateTreeNode> currentNode = lastRequestedNode;
+            while (currentNode != nullptr)
             {
                 if (currentNode->name_ == name)
@@ -405,5 +402,5 @@
                 requestedNodes.push_back(currentNode);
             }
-            if (currentNode == NULL)
+            if (currentNode == nullptr)
                 requestedNodes.clear();
         }
@@ -424,5 +421,5 @@
     void Game::popState()
     {
-        shared_ptr<GameStateTreeNode> lastRequestedNode;
+        std::shared_ptr<GameStateTreeNode> lastRequestedNode;
         if (this->requestedStateNodes_.empty())
             lastRequestedNode = this->loadedTopStateNode_;
@@ -435,5 +432,5 @@
     }
 
-    shared_ptr<GameState> Game::getState(const std::string& name)
+    std::shared_ptr<GameState> Game::getState(const std::string& name)
     {
         GameStateMap::const_iterator it = constructedStates_.find(name);
@@ -447,5 +444,5 @@
             else
                 orxout(internal_error) << "Could not find GameState '" << name << "'." << endl;
-            return shared_ptr<GameState>();
+            return std::shared_ptr<GameState>();
         }
     }
@@ -454,5 +451,5 @@
     {
         // Split string into pieces of the form whitespacesText
-        std::vector<std::pair<std::string, int> > stateStrings;
+        std::vector<std::pair<std::string, int>> stateStrings;
         size_t pos = 0;
         size_t startPos = 0;
@@ -465,13 +462,13 @@
             while (pos < str.size() && str[pos] != ' ')
                 ++pos;
-            stateStrings.push_back(std::make_pair(str.substr(startPos, pos - startPos), indentation));
+            stateStrings.emplace_back(str.substr(startPos, pos - startPos), indentation);
         }
         if (stateStrings.empty())
             ThrowException(GameState, "Emtpy GameState hierarchy provided, terminating.");
         // Add element with large identation to detect the last with just an iterator
-        stateStrings.push_back(std::make_pair(std::string(), -1));
+        stateStrings.emplace_back(std::string(), -1);
 
         // Parse elements recursively
-        std::vector<std::pair<std::string, int> >::const_iterator begin = stateStrings.begin();
+        std::vector<std::pair<std::string, int>>::const_iterator begin = stateStrings.begin();
         parseStates(begin, this->rootStateNode_);
     }
@@ -479,8 +476,8 @@
     /*** Internal ***/
 
-    void Game::parseStates(std::vector<std::pair<std::string, int> >::const_iterator& it, shared_ptr<GameStateTreeNode> currentNode)
+    void Game::parseStates(std::vector<std::pair<std::string, int>>::const_iterator& it, std::shared_ptr<GameStateTreeNode> currentNode)
     {
         SubString tokens(it->first, ",");
-        std::vector<std::pair<std::string, int> >::const_iterator startIt = it;
+        std::vector<std::pair<std::string, int>>::const_iterator startIt = it;
 
         for (unsigned int i = 0; i < tokens.size(); ++i)
@@ -491,5 +488,5 @@
             if (tokens[i] == this->rootStateNode_->name_)
                 ThrowException(GameState, "You shouldn't use 'emptyRootGameState' in the hierarchy...");
-            shared_ptr<GameStateTreeNode> node(new GameStateTreeNode());
+            std::shared_ptr<GameStateTreeNode> node(std::make_shared<GameStateTreeNode>());
             node->name_ = tokens[i];
             node->parent_ = currentNode;
@@ -521,13 +518,12 @@
 
             // Construct all the GameStates that require graphics
-            for (std::map<std::string, GameStateInfo>::const_iterator it = gameStateDeclarations_s.begin();
-                it != gameStateDeclarations_s.end(); ++it)
-            {
-                if (it->second.bGraphicsMode)
+            for (const auto& mapEntry : gameStateDeclarations_s)
+            {
+                if (mapEntry.second.bGraphicsMode)
                 {
                     // Game state loading failure is serious --> don't catch
-                    shared_ptr<GameState> gameState = GameStateFactory::fabricate(it->second);
+                    std::shared_ptr<GameState> gameState = GameStateFactory::fabricate(mapEntry.second);
                     if (!constructedStates_.insert(std::make_pair(
-                        it->second.stateName, gameState)).second)
+                        mapEntry.second.stateName, gameState)).second)
                         assert(false); // GameState was already created!
                 }
@@ -582,5 +578,5 @@
             graphicsUnloader.Dismiss();
 
-        shared_ptr<GameState> state = this->getState(name);
+        std::shared_ptr<GameState> state = this->getState(name);
         state->activateInternal();
         if (!this->loadedStates_.empty())
@@ -599,5 +595,5 @@
         try
         {
-            shared_ptr<GameState> state = this->getState(name);
+            std::shared_ptr<GameState> state = this->getState(name);
             state->activity_.topState = false;
             this->loadedStates_.pop_back();
@@ -613,6 +609,6 @@
         // Check if graphics is still required
         bool graphicsRequired = false;
-        for (unsigned i = 0; i < loadedStates_.size(); ++i)
-            graphicsRequired |= loadedStates_[i]->getInfo().bGraphicsMode;
+        for (const std::shared_ptr<GameState>& state : loadedStates_)
+            graphicsRequired |= state->getInfo().bGraphicsMode;
         if (!graphicsRequired)
             this->unloadGraphics(!this->bAbort_); // if abort is false, that means the game is still running while unloading graphics. in this case we load a graphics manager without renderer (to keep all necessary ogre instances alive)
@@ -620,13 +616,13 @@
     }
 
-    /*static*/ std::map<std::string, shared_ptr<Game::GameStateFactory> >& Game::GameStateFactory::getFactories()
-    {
-        static std::map<std::string, shared_ptr<GameStateFactory> > factories;
+    /*static*/ std::map<std::string, std::shared_ptr<Game::GameStateFactory>>& Game::GameStateFactory::getFactories()
+    {
+        static std::map<std::string, std::shared_ptr<GameStateFactory>> factories;
         return factories;
     }
 
-    /*static*/ shared_ptr<GameState> Game::GameStateFactory::fabricate(const GameStateInfo& info)
-    {
-        std::map<std::string, shared_ptr<Game::GameStateFactory> >::const_iterator it = getFactories().find(info.className);
+    /*static*/ std::shared_ptr<GameState> Game::GameStateFactory::fabricate(const GameStateInfo& info)
+    {
+        std::map<std::string, std::shared_ptr<Game::GameStateFactory>>::const_iterator it = getFactories().find(info.className);
         assert(it != getFactories().end());
         return it->second->fabricateInternal(info);
Index: code/trunk/src/libraries/core/Game.h
===================================================================
--- code/trunk/src/libraries/core/Game.h	(revision 11056)
+++ code/trunk/src/libraries/core/Game.h	(revision 11071)
@@ -44,5 +44,5 @@
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #include <boost/preprocessor/cat.hpp>
 
@@ -84,7 +84,7 @@
     { // tolua_export
         friend class Singleton<Game>;
-        typedef std::vector<shared_ptr<GameState> > GameStateVector;
-        typedef std::map<std::string, shared_ptr<GameState> > GameStateMap;
-        typedef shared_ptr<GameStateTreeNode> GameStateTreeNodePtr;
+        typedef std::vector<std::shared_ptr<GameState>> GameStateVector;
+        typedef std::map<std::string, std::shared_ptr<GameState>> GameStateMap;
+        typedef std::shared_ptr<GameStateTreeNode> GameStateTreeNodePtr;
 
     public:
@@ -92,10 +92,10 @@
 
         //! Leave empty and use cleanup() instead
-        ~Game() {}
+        ~Game() = default;
         /// Destructor that also executes when object fails to construct
         void destroy();
 
         void setStateHierarchy(const std::string& str);
-        shared_ptr<GameState> getState(const std::string& name);
+        std::shared_ptr<GameState> getState(const std::string& name);
 
         void run();
@@ -122,12 +122,12 @@
         {
         public:
-            virtual ~GameStateFactory() { }
-            static shared_ptr<GameState> fabricate(const GameStateInfo& info);
+            virtual ~GameStateFactory() = default;
+            static std::shared_ptr<GameState> fabricate(const GameStateInfo& info);
             template <class T>
             static void createFactory(const std::string& className)
                 { getFactories()[className].reset(new TemplateGameStateFactory<T>()); }
 
-            virtual shared_ptr<GameState> fabricateInternal(const GameStateInfo& info) = 0;
-            static std::map<std::string, shared_ptr<GameStateFactory> >& getFactories();
+            virtual std::shared_ptr<GameState> fabricateInternal(const GameStateInfo& info) = 0;
+            static std::map<std::string, std::shared_ptr<GameStateFactory>>& getFactories();
         };
         template <class T>
@@ -135,6 +135,6 @@
         {
         public:
-            shared_ptr<GameState> fabricateInternal(const GameStateInfo& info)
-                { return shared_ptr<GameState>(new T(info)); }
+            virtual std::shared_ptr<GameState> fabricateInternal(const GameStateInfo& info) override
+                { return std::shared_ptr<GameState>(std::make_shared<T>(info)); }
         };
 
@@ -145,10 +145,12 @@
         };
 
-        Game(Game&); // don't mess with singletons
+        // non-copyable:
+        Game(const Game&) = delete;
+        Game& operator=(const Game&) = delete;
 
         void loadGraphics();
         void unloadGraphics(bool loadGraphicsManagerWithoutRenderer = true);
 
-        void parseStates(std::vector<std::pair<std::string, int> >::const_iterator& it, shared_ptr<GameStateTreeNode> currentNode);
+        void parseStates(std::vector<std::pair<std::string, int>>::const_iterator& it, std::shared_ptr<GameStateTreeNode> currentNode);
         bool checkState(const std::string& name) const;
         void loadState(const std::string& name);
Index: code/trunk/src/libraries/core/GameMode.h
===================================================================
--- code/trunk/src/libraries/core/GameMode.h	(revision 11056)
+++ code/trunk/src/libraries/core/GameMode.h	(revision 11071)
@@ -63,7 +63,9 @@
 
         private:
-            GameMode();
-            GameMode(const GameMode& inst);
-            ~GameMode();
+            // static class, no instances allowed:
+            GameMode() = delete;
+            GameMode(const GameMode&) = delete;
+            GameMode& operator=(const GameMode&) = delete;
+            ~GameMode() = delete;
 
             /// Checks if we're in control of the game (either standalone or server).
Index: code/trunk/src/libraries/core/GraphicsManager.cc
===================================================================
--- code/trunk/src/libraries/core/GraphicsManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/GraphicsManager.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include <sstream>
 #include <boost/filesystem.hpp>
-#include <boost/shared_array.hpp>
 
 #include <OgreFrameListener.h>
@@ -83,15 +82,15 @@
     {
     public:
-        void windowResized     (Ogre::RenderWindow* rw)
+        virtual void windowResized     (Ogre::RenderWindow* rw) override
             { orxonox::WindowEventListener::resizeWindow(rw->getWidth(), rw->getHeight()); }
-        void windowFocusChange (Ogre::RenderWindow* rw)
+        virtual void windowFocusChange (Ogre::RenderWindow* rw) override
             { orxonox::WindowEventListener::changeWindowFocus(rw->isActive()); }
-        void windowClosed      (Ogre::RenderWindow* rw)
+        virtual void windowClosed      (Ogre::RenderWindow* rw) override
             { orxonox::Game::getInstance().stop(); }
-        void windowMoved       (Ogre::RenderWindow* rw)
+        virtual void windowMoved       (Ogre::RenderWindow* rw) override
             { orxonox::WindowEventListener::moveWindow(); }
     };
 
-    GraphicsManager* GraphicsManager::singletonPtr_s = 0;
+    GraphicsManager* GraphicsManager::singletonPtr_s = nullptr;
 
     RegisterAbstractClass(GraphicsManager).inheritsFrom<Configurable>();
@@ -99,6 +98,6 @@
     GraphicsManager::GraphicsManager(bool bLoadRenderer)
         : ogreWindowEventListener_(new OgreWindowEventListener())
-        , renderWindow_(0)
-        , viewport_(0)
+        , renderWindow_(nullptr)
+        , viewport_(nullptr)
         , lastFrameStartTime_(0.0f)
         , lastFrameEndTime_(0.0f)
@@ -178,5 +177,5 @@
     void GraphicsManager::upgradeToGraphics()
     {
-        if (renderWindow_ != NULL)
+        if (renderWindow_ != nullptr)
             return;
 
@@ -304,5 +303,5 @@
         //       But in our case we only have one viewport for now anyway, therefore
         //       no ScopeGuards or anything to handle exceptions.
-        this->viewport_ = this->renderWindow_->addViewport(0, 0);
+        this->viewport_ = this->renderWindow_->addViewport(nullptr, 0);
 
         Ogre::TextureManager::getSingleton().setDefaultNumMipmaps(Ogre::MIP_UNLIMITED);
@@ -312,5 +311,5 @@
         HWND hwnd;
         this->renderWindow_->getCustomAttribute("WINDOW", (void*)&hwnd);
-        LONG iconID = (LONG)LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(101));
+        LONG iconID = (LONG)LoadIcon(GetModuleHandle(nullptr), MAKEINTRESOURCE(101));
         SetClassLong(hwnd, GCL_HICON, iconID);
 #endif
@@ -390,6 +389,6 @@
         GUIManager::getInstance().setCamera(camera);
 
-        for (ObjectList<ViewportEventListener>::iterator it = ObjectList<ViewportEventListener>::begin(); it != ObjectList<ViewportEventListener>::end(); ++it)
-            it->cameraChanged(this->viewport_, oldCamera);
+        for (ViewportEventListener* listener : ObjectList<ViewportEventListener>())
+            listener->cameraChanged(this->viewport_, oldCamera);
     }
 
Index: code/trunk/src/libraries/core/GraphicsManager.h
===================================================================
--- code/trunk/src/libraries/core/GraphicsManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/GraphicsManager.h	(revision 11071)
@@ -47,6 +47,7 @@
 #include <cassert>
 #include <string>
+#include <memory>
+
 #include <OgreLog.h>
-#include <boost/shared_ptr.hpp>
 
 #include "util/DestructionHelper.h"
@@ -70,5 +71,5 @@
 
         //! Leave empty and use cleanup() instead
-        ~GraphicsManager() {}
+        ~GraphicsManager() = default;
         /// Destructor that also executes when object fails to construct
         void destroy();
@@ -96,10 +97,12 @@
         void loadDebugOverlay();
         void unloadDebugOverlay();
-        bool rendererLoaded() const { return renderWindow_ != NULL; }
+        bool rendererLoaded() const { return renderWindow_ != nullptr; }
 
         void setCamera(Ogre::Camera* camera);
 
     private:
-        GraphicsManager(GraphicsManager&); // don't mess with singletons
+        // non-copyable:
+        GraphicsManager(const GraphicsManager&) = delete;
+        GraphicsManager& operator=(const GraphicsManager&) = delete;
 
         // OGRE initialisation
@@ -110,7 +113,7 @@
         // event from Ogre::LogListener
 #if OGRE_VERSION >= 0x010800
-        void messageLogged(const std::string& message, Ogre::LogMessageLevel lml, bool maskDebug, const std::string& logName, bool& skipThisMessage);
+        virtual void messageLogged(const std::string& message, Ogre::LogMessageLevel lml, bool maskDebug, const std::string& logName, bool& skipThisMessage) override;
 #else
-        void messageLogged(const std::string& message, Ogre::LogMessageLevel lml, bool maskDebug, const std::string& logName);
+        virtual void messageLogged(const std::string& message, Ogre::LogMessageLevel lml, bool maskDebug, const std::string& logName) override;
 #endif
 
@@ -130,7 +133,7 @@
 
         // XML files for the resources and the debug overlay
-        shared_ptr<XMLFile> resources_;                //!< XML with resource locations
-        shared_ptr<XMLFile> extResources_;             //!< XML with resource locations in the external path (only for dev runs)
-        shared_ptr<XMLFile> debugOverlay_;             //!< XML with various debug overlays
+        std::shared_ptr<XMLFile> resources_;           //!< XML with resource locations
+        std::shared_ptr<XMLFile> extResources_;        //!< XML with resource locations in the external path (only for dev runs)
+        std::shared_ptr<XMLFile> debugOverlay_;        //!< XML with various debug overlays
 
         // config values
Index: code/trunk/src/libraries/core/Language.cc
===================================================================
--- code/trunk/src/libraries/core/Language.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Language.cc	(revision 11071)
@@ -88,5 +88,5 @@
     // ###############################
 
-    Language* Language::singletonPtr_s = 0;
+    Language* Language::singletonPtr_s = nullptr;
 
     /**
@@ -107,6 +107,6 @@
     Language::~Language()
     {
-        for (std::map<std::string, LanguageEntry*>::iterator it = this->languageEntries_.begin(); it != this->languageEntries_.end(); ++it)
-            delete (it->second);
+        for (const auto& mapEntry : this->languageEntries_)
+            delete (mapEntry.second);
     }
 
@@ -319,7 +319,7 @@
 
         // Iterate through the list an write the lines into the file
-        for (std::map<std::string, LanguageEntry*>::const_iterator it = this->languageEntries_.begin(); it != this->languageEntries_.end(); ++it)
-        {
-            file << it->second->getLabel() << '=' << it->second->getDefault() << endl;
+        for (const auto& mapEntry : this->languageEntries_)
+        {
+            file << mapEntry.second->getLabel() << '=' << mapEntry.second->getDefault() << endl;
         }
 
Index: code/trunk/src/libraries/core/Language.h
===================================================================
--- code/trunk/src/libraries/core/Language.h	(revision 11056)
+++ code/trunk/src/libraries/core/Language.h	(revision 11071)
@@ -171,5 +171,7 @@
 
         private:
-            Language(const Language&);
+            // non-copyable:
+            Language(const Language&) = delete;
+            Language& operator=(const Language&) = delete;
 
             void readDefaultLanguageFile();
Index: code/trunk/src/libraries/core/Loader.cc
===================================================================
--- code/trunk/src/libraries/core/Loader.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Loader.cc	(revision 11071)
@@ -31,5 +31,4 @@
 #include <sstream>
 #include <tinyxml/ticpp.h>
-#include <boost/scoped_ptr.hpp>
 #include <boost/filesystem.hpp>
 #include <boost/filesystem/fstream.hpp>
@@ -48,5 +47,5 @@
 namespace orxonox
 {
-    Loader* Loader::singletonPtr_s = 0;
+    Loader* Loader::singletonPtr_s = nullptr;
 
     /**
@@ -73,5 +72,5 @@
         std::string xmlInput;
 
-        shared_ptr<std::vector<std::vector<std::pair<std::string, size_t> > > > lineTrace(new std::vector<std::vector<std::pair<std::string, size_t> > >());
+        std::shared_ptr<std::vector<std::vector<std::pair<std::string, size_t>>>> lineTrace(std::make_shared<std::vector<std::vector<std::pair<std::string, size_t>>>>());
         lineTrace->reserve(1000); //arbitrary number
 
@@ -80,5 +79,5 @@
         {
             // Use the LuaState to replace the XML tags (calls our function)
-            scoped_ptr<LuaState> luaState(new LuaState());
+            const std::unique_ptr<LuaState> luaState(new LuaState());
             luaState->setTraceMap(lineTrace);
             luaState->setIncludeParser(&Loader::replaceLuaTags);
@@ -88,6 +87,6 @@
         else
         {
-            shared_ptr<ResourceInfo> info = Resource::getInfo(file->getFilename());
-            if (info == NULL)
+            std::shared_ptr<ResourceInfo> info = Resource::getInfo(file->getFilename());
+            if (info == nullptr)
             {
                 orxout(user_error, context::loader) << "Could not find XML file '" << file->getFilename() << "'." << endl;
@@ -163,10 +162,10 @@
                     if (line <= lineTrace->size())
                     {
-                        std::vector<std::pair<std::string, size_t> > linesources = lineTrace->at(line - 1);
+                        std::vector<std::pair<std::string, size_t>> linesources = lineTrace->at(line - 1);
                         std::ostringstream message;
                         message << "Possible sources of error:" << endl;
-                        for (std::vector<std::pair<std::string, size_t> >::iterator it = linesources.begin(); it != linesources.end(); ++it)
+                        for (const std::pair<std::string, size_t>& pair : linesources)
                         {
-                            message << it->first << ", Line " << it->second << endl;
+                            message << pair.first << ", Line " << pair.second << endl;
                         }
                         orxout(user_error, context::loader) << message.str() << endl;
@@ -208,5 +207,5 @@
         if (!file)
             return;
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it; )
+        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>().begin(); it; )
         {
             if ((it->getFile() == file) && mask.isIncluded(it->getIdentifier()))
@@ -262,7 +261,7 @@
         {
             bool expectedValue = true;
-            for (std::map<size_t, bool>::iterator it = luaTags.begin(); it != luaTags.end(); ++it)
-            {
-                if (it->second == expectedValue)
+            for (const auto& mapEntry : luaTags)
+            {
+                if (mapEntry.second == expectedValue)
                     expectedValue = !expectedValue;
                 else
Index: code/trunk/src/libraries/core/Loader.h
===================================================================
--- code/trunk/src/libraries/core/Loader.h	(revision 11056)
+++ code/trunk/src/libraries/core/Loader.h	(revision 11071)
@@ -67,5 +67,5 @@
             static bool getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags);
 
-            std::vector<std::pair<const XMLFile*, ClassTreeMask> > files_;
+            std::vector<std::pair<const XMLFile*, ClassTreeMask>> files_;
 
             static Loader* singletonPtr_s;
Index: code/trunk/src/libraries/core/LuaState.cc
===================================================================
--- code/trunk/src/libraries/core/LuaState.cc	(revision 11056)
+++ code/trunk/src/libraries/core/LuaState.cc	(revision 11071)
@@ -48,5 +48,5 @@
     LuaState::LuaState()
         : bIsRunning_(false)
-        , includeParseFunction_(NULL)
+        , includeParseFunction_(nullptr)
     {
         // Create new lua state and configure it
@@ -79,10 +79,10 @@
     }
 
-    shared_ptr<ResourceInfo> LuaState::getFileInfo(const std::string& filename)
+    std::shared_ptr<ResourceInfo> LuaState::getFileInfo(const std::string& filename)
     {
         // Look in the current directory first
-        shared_ptr<ResourceInfo> sourceInfo = Resource::getInfo(sourceFileInfo_->path + filename);
+        std::shared_ptr<ResourceInfo> sourceInfo = Resource::getInfo(sourceFileInfo_->path + filename);
         // Continue search in root directories
-        if (sourceInfo == NULL && !sourceFileInfo_->path.empty())
+        if (sourceInfo == nullptr && !sourceFileInfo_->path.empty())
             sourceInfo = Resource::getInfo(filename);
         return sourceInfo;
@@ -91,6 +91,6 @@
     bool LuaState::includeFile(const std::string& filename)
     {
-        shared_ptr<ResourceInfo> sourceInfo = this->getFileInfo(filename);
-        if (sourceInfo != NULL)
+        std::shared_ptr<ResourceInfo> sourceInfo = this->getFileInfo(filename);
+        if (sourceInfo != nullptr)
             return this->includeString(Resource::open(sourceInfo)->getAsString(), sourceInfo);
         else
@@ -101,14 +101,14 @@
     }
 
-    bool LuaState::includeString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo)
+    bool LuaState::includeString(const std::string& code, const std::shared_ptr<ResourceInfo>& sourceFileInfo)
     {
         // Parse string with provided include parser (otherwise don't preparse at all)
         std::string luaInput;
-        if (includeParseFunction_ != NULL)
+        if (includeParseFunction_ != nullptr)
             luaInput = (*includeParseFunction_)(code);
         else
             luaInput = code;
 
-        if (sourceFileInfo != NULL)
+        if (sourceFileInfo != nullptr)
         {
             // Also fill a map with the actual source code. This is just for the include* commands
@@ -119,8 +119,8 @@
         bool returnValue = this->doString(luaInput, sourceFileInfo);
 
-        if (sourceFileInfo != NULL)
+        if (sourceFileInfo != nullptr)
         {
             // Delete source code entry
-            if (sourceFileInfo != NULL)
+            if (sourceFileInfo != nullptr)
                 this->sourceCodeMap_.erase(sourceFileInfo->filename);
         }
@@ -131,6 +131,6 @@
     bool LuaState::doFile(const std::string& filename)
     {
-        shared_ptr<ResourceInfo> sourceInfo = this->getFileInfo(filename);
-        if (sourceInfo != NULL)
+        std::shared_ptr<ResourceInfo> sourceInfo = this->getFileInfo(filename);
+        if (sourceInfo != nullptr)
             return this->doString(Resource::open(sourceInfo)->getAsString(), sourceInfo);
         else
@@ -141,14 +141,14 @@
     }
 
-    bool LuaState::doString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo)
+    bool LuaState::doString(const std::string& code, const std::shared_ptr<ResourceInfo>& sourceFileInfo)
     {
         // Save the old source file info
-        shared_ptr<ResourceInfo> oldSourceFileInfo = sourceFileInfo_;
+        std::shared_ptr<ResourceInfo> oldSourceFileInfo = sourceFileInfo_;
         // Only override if sourceFileInfo provides useful information
-        if (sourceFileInfo != NULL)
+        if (sourceFileInfo != nullptr)
             sourceFileInfo_ = sourceFileInfo;
 
         std::string chunkname;
-        if (sourceFileInfo != NULL)
+        if (sourceFileInfo != nullptr)
         {
             // Provide lua_load with the filename for debug purposes
@@ -245,5 +245,5 @@
             //Note: due to newlines etc., it's possible that one line consists of parts of
             //      multiple, different files
-            std::vector<std::vector<std::pair<std::string, size_t> > >::reverse_iterator it = lineTrace_->rbegin();
+            std::vector<std::vector<std::pair<std::string, size_t>>>::reverse_iterator it = lineTrace_->rbegin();
             std::pair<std::string, size_t> temppair = std::make_pair(filename, line);
             //Avoid duplicate entries. This could happen if there were lua blocks on the same line
@@ -259,7 +259,7 @@
             {
                 //Add the new line to the trace map
-                lineTrace_->push_back(std::vector<std::pair<std::string, size_t> >());
+                lineTrace_->emplace_back();
                 //Add the source of the line at the end
-                lineTrace_->rbegin()->push_back(std::make_pair(filename, line + i));
+                lineTrace_->rbegin()->emplace_back(filename, line + i);
             }
         }
@@ -285,6 +285,6 @@
     bool LuaState::fileExists(const std::string& filename)
     {
-        shared_ptr<ResourceInfo> info = this->getFileInfo(filename);
-        if (info == NULL)
+        std::shared_ptr<ResourceInfo> info = this->getFileInfo(filename);
+        if (info == nullptr)
             return false;
         else
@@ -300,6 +300,6 @@
         if (it != this->sourceCodeMap_.end())
             return it->second;
-        shared_ptr<ResourceInfo> info = Resource::getInfo(filename);
-        if (info == NULL)
+        std::shared_ptr<ResourceInfo> info = Resource::getInfo(filename);
+        if (info == nullptr)
             return "";
         else
@@ -326,7 +326,7 @@
     /*static*/ bool LuaState::addToluaInterface(int (*function)(lua_State*), const std::string& name)
     {
-        for (ToluaInterfaceMap::const_iterator it = getToluaInterfaces().begin(); it != getToluaInterfaces().end(); ++it)
-        {
-            if (it->first == name || it->second == function)
+        for (const auto& mapEntry : getToluaInterfaces())
+        {
+            if (mapEntry.first == name || mapEntry.second == function)
             {
                 orxout(internal_warning, context::lua) << "Trying to add a Tolua interface with the same name or function." << endl;
@@ -337,6 +337,6 @@
 
         // Open interface in all LuaStates
-        for (std::vector<LuaState*>::const_iterator it = getInstances().begin(); it != getInstances().end(); ++it)
-            (*function)((*it)->luaState_);
+        for (LuaState* state : getInstances())
+            (*function)(state->luaState_);
 
         // Return dummy bool
@@ -354,8 +354,8 @@
 
         // Close interface in all LuaStates
-        for (std::vector<LuaState*>::const_iterator itState = getInstances().begin(); itState != getInstances().end(); ++itState)
-        {
-            lua_pushnil((*itState)->luaState_);
-            lua_setglobal((*itState)->luaState_, it->first.c_str());
+        for (LuaState* state : getInstances())
+        {
+            lua_pushnil(state->luaState_);
+            lua_setglobal(state->luaState_, it->first.c_str());
         }
 
@@ -369,14 +369,14 @@
     /*static*/ void LuaState::openToluaInterfaces(lua_State* state)
     {
-        for (ToluaInterfaceMap::const_iterator it = getToluaInterfaces().begin(); it != getToluaInterfaces().end(); ++it)
-            (*it->second)(state);
+        for (const auto& mapEntry : getToluaInterfaces())
+            (mapEntry.second)(state);
     }
 
     /*static*/ void LuaState::closeToluaInterfaces(lua_State* state)
     {
-        for (ToluaInterfaceMap::const_iterator it = getToluaInterfaces().begin(); it != getToluaInterfaces().end(); ++it)
+        for (const auto& mapEntry : getToluaInterfaces())
         {
             lua_pushnil(state);
-            lua_setglobal(state, it->first.c_str());
+            lua_setglobal(state, mapEntry.first.c_str());
         }
     }
Index: code/trunk/src/libraries/core/LuaState.h
===================================================================
--- code/trunk/src/libraries/core/LuaState.h	(revision 11056)
+++ code/trunk/src/libraries/core/LuaState.h	(revision 11071)
@@ -47,5 +47,5 @@
 #include <string>
 #include <vector>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 #include "util/Output.h"
@@ -79,8 +79,8 @@
 
         bool doFile(const std::string& filename); // tolua_export
-        bool doString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo = shared_ptr<ResourceInfo>());
+        bool doString(const std::string& code, const std::shared_ptr<ResourceInfo>& sourceFileInfo = std::shared_ptr<ResourceInfo>());
 
         bool includeFile(const std::string& filename); // tolua_export
-        bool includeString(const std::string& code, const shared_ptr<ResourceInfo>& sourceFileInfo = shared_ptr<ResourceInfo>());
+        bool includeString(const std::string& code, const std::shared_ptr<ResourceInfo>& sourceFileInfo = std::shared_ptr<ResourceInfo>());
 
         void luaPrint(const std::string& str); // tolua_export
@@ -94,12 +94,12 @@
         void clearOutput() { output_.clear(); } // tolua_export
 
-        void setTraceMap(shared_ptr<std::vector<std::vector<std::pair<std::string, size_t> > > > map)
-            { map->push_back(std::vector<std::pair<std::string, size_t> >()); lineTrace_ = map; }
+        void setTraceMap(std::shared_ptr<std::vector<std::vector<std::pair<std::string, size_t>>>> map)
+            { map->emplace_back(); lineTrace_ = map; }
 
         void setIncludeParser(std::string (*function)(const std::string&)) { includeParseFunction_ = function; }
         lua_State* getInternalLuaState() { return luaState_; }
 
-        void setDefaultResourceInfo(const shared_ptr<ResourceInfo>& sourceFileInfo) { this->sourceFileInfo_ = sourceFileInfo; }
-        const shared_ptr<ResourceInfo>& getDefaultResourceInfo() { return this->sourceFileInfo_; }
+        void setDefaultResourceInfo(const std::shared_ptr<ResourceInfo>& sourceFileInfo) { this->sourceFileInfo_ = sourceFileInfo; }
+        const std::shared_ptr<ResourceInfo>& getDefaultResourceInfo() { return this->sourceFileInfo_; }
 
         LuaFunctor* createLuaFunctor(const std::string& code) { return new LuaFunctor(code, this); } // tolua_export
@@ -115,11 +115,11 @@
 
     private:
-        shared_ptr<ResourceInfo> getFileInfo(const std::string& filename);
-        shared_ptr<std::vector<std::vector<std::pair<std::string, size_t> > > > lineTrace_;
+        std::shared_ptr<ResourceInfo> getFileInfo(const std::string& filename);
+        std::shared_ptr<std::vector<std::vector<std::pair<std::string, size_t>>>> lineTrace_;
         
         std::stringstream output_;
         lua_State* luaState_;
         bool bIsRunning_;
-        shared_ptr<ResourceInfo> sourceFileInfo_;
+        std::shared_ptr<ResourceInfo> sourceFileInfo_;
         std::map<std::string, std::string> sourceCodeMap_;
         std::string (*includeParseFunction_)(const std::string&);
Index: code/trunk/src/libraries/core/Namespace.cc
===================================================================
--- code/trunk/src/libraries/core/Namespace.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Namespace.cc	(revision 11071)
@@ -53,6 +53,6 @@
     {
         if (this->bRoot_)
-            for (std::set<NamespaceNode*>::iterator it = this->representingNamespaces_.begin(); it != this->representingNamespaces_.end(); ++it)
-                delete (*it);
+            for (NamespaceNode* node : this->representingNamespaces_)
+                delete node;
     }
 
@@ -80,7 +80,7 @@
             for (unsigned int i = 0; i < tokens.size(); i++)
             {
-                for (std::set<NamespaceNode*>::iterator it = this->getNamespace()->representingNamespaces_.begin(); it != this->getNamespace()->representingNamespaces_.end(); ++it)
+                for (NamespaceNode* node : this->getNamespace()->representingNamespaces_)
                 {
-                    std::set<NamespaceNode*> temp = (*it)->getNodeRelative(tokens[i]);
+                    std::set<NamespaceNode*> temp = node->getNodeRelative(tokens[i]);
                     this->representingNamespaces_.insert(temp.begin(), temp.end());
                 }
@@ -93,8 +93,8 @@
         if (this->bAutogeneratedFileRootNamespace_)
         {
-            for (std::set<NamespaceNode*>::iterator it = this->representingNamespaces_.begin(); it != this->representingNamespaces_.end(); ++it)
+            for (NamespaceNode* node : this->representingNamespaces_)
             {
-                (*it)->setRoot(true);
-                (*it)->setHidden(true);
+                node->setRoot(true);
+                node->setHidden(true);
             }
         }
@@ -109,14 +109,14 @@
     const BaseObject* Namespace::saveObjects(unsigned int index) const
     {
-        return 0; // todo
+        return nullptr; // todo
     }
 
     bool Namespace::includes(const Namespace* ns) const
     {
-        for (std::set<NamespaceNode*>::const_iterator it1 = this->representingNamespaces_.begin(); it1 != this->representingNamespaces_.end(); ++it1)
+        for (NamespaceNode* node1 : this->representingNamespaces_)
         {
-            for (std::set<NamespaceNode*>::const_iterator it2 = ns->representingNamespaces_.begin(); it2 != ns->representingNamespaces_.end(); ++it2)
+            for (NamespaceNode* node2 : ns->representingNamespaces_)
             {
-                if ((*it1)->includes(*it2))
+                if (node1->includes(node2))
                 {
                     if (this->operator_ == "or")
@@ -149,10 +149,11 @@
 
         int i = 0;
-        for (std::set<NamespaceNode*>::const_iterator it = this->representingNamespaces_.begin(); it != this->representingNamespaces_.end(); i++, ++it)
+        for (NamespaceNode* node : this->representingNamespaces_)
         {
             if (i > 0)
                 output += " / ";
 
-            output += (*it)->toString();
+            output += node->toString();
+            i++;
         }
 
@@ -165,10 +166,11 @@
 
         int i = 0;
-        for (std::set<NamespaceNode*>::const_iterator it = this->representingNamespaces_.begin(); it != this->representingNamespaces_.end(); i++, ++it)
+        for (NamespaceNode* node : this->representingNamespaces_)
         {
             if (i > 0)
                 output += '\n';
 
-            output += (*it)->toString(indentation);
+            output += node->toString(indentation);
+            i++;
         }
 
Index: code/trunk/src/libraries/core/Namespace.h
===================================================================
--- code/trunk/src/libraries/core/Namespace.h	(revision 11056)
+++ code/trunk/src/libraries/core/Namespace.h	(revision 11071)
@@ -50,5 +50,5 @@
             virtual ~Namespace();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void loadObjects(BaseObject* object);
Index: code/trunk/src/libraries/core/NamespaceNode.cc
===================================================================
--- code/trunk/src/libraries/core/NamespaceNode.cc	(revision 11056)
+++ code/trunk/src/libraries/core/NamespaceNode.cc	(revision 11071)
@@ -103,9 +103,9 @@
                 bool bFoundMatchingNamespace = false;
 
-                for (std::map<std::string, NamespaceNode*>::iterator it = this->subnodes_.begin(); it != this->subnodes_.end(); ++it)
+                for (const auto& mapEntry : this->subnodes_)
                 {
-                    if (it->first.find(firstPart) == (it->first.size() - firstPart.size()))
+                    if (mapEntry.first.find(firstPart) == (mapEntry.first.size() - firstPart.size()))
                     {
-                        std::set<NamespaceNode*> temp2 = it->second->getNodeRelative(secondPart);
+                        std::set<NamespaceNode*> temp2 = mapEntry.second->getNodeRelative(secondPart);
                         nodes.insert(temp2.begin(), temp2.end());
                         bFoundMatchingNamespace = true;
@@ -132,6 +132,6 @@
         else
         {
-            for (std::map<std::string, NamespaceNode*>::const_iterator it = this->subnodes_.begin(); it != this->subnodes_.end(); ++it)
-                if (it->second->includes(ns))
+            for (const auto& mapEntry : this->subnodes_)
+                if (mapEntry.second->includes(ns))
                     return true;
         }
@@ -149,10 +149,11 @@
 
             int i = 0;
-            for (std::map<std::string, NamespaceNode*>::const_iterator it = this->subnodes_.begin(); it != this->subnodes_.end(); i++, ++it)
+            for (const auto& mapEntry : this->subnodes_)
             {
                 if (i > 0)
                     output += ", ";
 
-                output += it->second->toString();
+                output += mapEntry.second->toString();
+                i++;
             }
 
@@ -167,6 +168,6 @@
         std::string output = (indentation + this->name_ + '\n');
 
-        for (std::map<std::string, NamespaceNode*>::const_iterator it = this->subnodes_.begin(); it != this->subnodes_.end(); ++it)
-            output += it->second->toString(indentation + "  ");
+        for (const auto& mapEntry : this->subnodes_)
+            output += mapEntry.second->toString(indentation + "  ");
 
         return output;
Index: code/trunk/src/libraries/core/NamespaceNode.h
===================================================================
--- code/trunk/src/libraries/core/NamespaceNode.h	(revision 11056)
+++ code/trunk/src/libraries/core/NamespaceNode.h	(revision 11071)
@@ -46,5 +46,5 @@
     {
         public:
-            NamespaceNode(const std::string& name, NamespaceNode* parent = 0);
+            NamespaceNode(const std::string& name, NamespaceNode* parent = nullptr);
             ~NamespaceNode();
 
Index: code/trunk/src/libraries/core/Resource.cc
===================================================================
--- code/trunk/src/libraries/core/Resource.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Resource.cc	(revision 11071)
@@ -58,7 +58,7 @@
         DataStreamListPtr resources(new Ogre::DataStreamList());
         const Ogre::StringVector& groups = Ogre::ResourceGroupManager::getSingleton().getResourceGroups();
-        for (Ogre::StringVector::const_iterator it = groups.begin(); it != groups.end(); ++it)
+        for (const std::string& group : groups)
         {
-            DataStreamListPtr temp = Ogre::ResourceGroupManager::getSingleton().openResources(pattern, *it);
+            DataStreamListPtr temp = Ogre::ResourceGroupManager::getSingleton().openResources(pattern, group);
             resources->insert(resources->end(), temp->begin(), temp->end());
         }
@@ -79,5 +79,5 @@
     }
 
-    shared_ptr<ResourceInfo> Resource::getInfo(const std::string& name)
+    std::shared_ptr<ResourceInfo> Resource::getInfo(const std::string& name)
     {
         std::string group;
@@ -88,5 +88,5 @@
         catch (const Ogre::Exception&)
         {
-            return shared_ptr<ResourceInfo>();
+            return std::shared_ptr<ResourceInfo>();
         }
         Ogre::FileInfoListPtr infos = Ogre::ResourceGroupManager::getSingleton().findResourceFileInfo(group, name);
@@ -95,5 +95,5 @@
             if (it->filename == name)
             {
-                shared_ptr<ResourceInfo> ptr(new ResourceInfo());
+                std::shared_ptr<ResourceInfo> ptr(std::make_shared<ResourceInfo>());
                 ptr->filename = name;
                 ptr->path = it->path;
@@ -102,7 +102,7 @@
                 ptr->size = it->uncompressedSize;
 #if OGRE_VERSION >= 0x010800
-                if (dynamic_cast<const Ogre::FileSystemArchive*>(it->archive) != NULL)
+                if (dynamic_cast<const Ogre::FileSystemArchive*>(it->archive) != nullptr)
 #else
-                if (dynamic_cast<Ogre::FileSystemArchive*>(it->archive) != NULL)
+                if (dynamic_cast<Ogre::FileSystemArchive*>(it->archive) != nullptr)
 #endif
                 {
@@ -114,5 +114,5 @@
             }
         }
-        return shared_ptr<ResourceInfo>();
+        return std::shared_ptr<ResourceInfo>();
     }
 
@@ -121,7 +121,7 @@
         StringVectorPtr resourceNames(new Ogre::StringVector());
         const Ogre::StringVector& groups = Ogre::ResourceGroupManager::getSingleton().getResourceGroups();
-        for (Ogre::StringVector::const_iterator it = groups.begin(); it != groups.end(); ++it)
+        for (const std::string& group : groups)
         {
-            StringVectorPtr temp = Ogre::ResourceGroupManager::getSingleton().findResourceNames(*it, pattern);
+            StringVectorPtr temp = Ogre::ResourceGroupManager::getSingleton().findResourceNames(group, pattern);
             resourceNames->insert(resourceNames->end(), temp->begin(), temp->end());
         }
Index: code/trunk/src/libraries/core/Resource.h
===================================================================
--- code/trunk/src/libraries/core/Resource.h	(revision 11056)
+++ code/trunk/src/libraries/core/Resource.h	(revision 11071)
@@ -42,5 +42,6 @@
 #include "CorePrereqs.h"
 
-#include <boost/shared_ptr.hpp>
+#include <memory>
+
 #include <OgreDataStream.h>
 #include <OgreStringVector.h>
@@ -93,5 +94,5 @@
 
         //! Similar to open(string, string, bool), but with a fileInfo struct
-        static DataStreamPtr open(shared_ptr<ResourceInfo> fileInfo)
+        static DataStreamPtr open(std::shared_ptr<ResourceInfo> fileInfo)
         {
             return open(fileInfo->filename);
@@ -125,5 +126,5 @@
             Fully qualified name of the file to test for
         */
-        static shared_ptr<ResourceInfo> getInfo(const std::string& name);
+        static std::shared_ptr<ResourceInfo> getInfo(const std::string& name);
 
         /**
@@ -140,7 +141,9 @@
 
     private:
-        Resource();
-        ~Resource();
-        Resource(const Resource& instance);
+        // static class, no instances allowed:
+        Resource() = delete;
+        Resource(const Resource&) = delete;
+        Resource& operator=(const Resource&) = delete;
+        ~Resource() = delete;
     };
 }
Index: code/trunk/src/libraries/core/Template.cc
===================================================================
--- code/trunk/src/libraries/core/Template.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Template.cc	(revision 11071)
@@ -49,5 +49,5 @@
         this->bLoadDefaults_ = true;
         this->bIsReturningXMLElement_ = false;
-        this->baseclassIdentifier_ = 0;
+        this->baseclassIdentifier_ = nullptr;
     }
 
@@ -176,5 +176,5 @@
         {
             orxout(internal_warning, context::templates) << "Template with name " << name << " doesn't exist." << endl;
-            return 0;
+            return nullptr;
         }
     }
Index: code/trunk/src/libraries/core/Template.h
===================================================================
--- code/trunk/src/libraries/core/Template.h	(revision 11056)
+++ code/trunk/src/libraries/core/Template.h	(revision 11071)
@@ -54,6 +54,6 @@
             virtual ~Template();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedName();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedName() override;
 
             inline void setLink(const std::string& link)
Index: code/trunk/src/libraries/core/Thread.cc
===================================================================
--- code/trunk/src/libraries/core/Thread.cc	(revision 11056)
+++ code/trunk/src/libraries/core/Thread.cc	(revision 11071)
@@ -34,6 +34,6 @@
 
 #include <cassert>
+#include <functional>
 #include <boost/thread/thread.hpp>
-#include <boost/bind.hpp>
 #include <boost/thread/mutex.hpp>
 #include <boost/thread/thread_time.hpp>
@@ -48,5 +48,5 @@
 
     Thread::Thread():
-        executor_(0),
+        executor_(nullptr),
         isWorking_(false),
         stopThread_(false)
@@ -55,5 +55,5 @@
         this->isWorkingMutex_ = new boost::mutex;
         this->stopThreadMutex_ = new boost::mutex;
-        this->workerThread_ = new boost::thread( boost::bind(&Thread::threadLoop, this) );
+        this->workerThread_ = new boost::thread( std::bind(&Thread::threadLoop, this) );
     }
 
@@ -102,5 +102,5 @@
                 (*executor)();
                 this->executorMutex_->lock();
-                this->executor_ = 0;
+                this->executor_ = nullptr;
                 this->executorMutex_->unlock();
                 this->isWorkingMutex_->lock();
Index: code/trunk/src/libraries/core/ThreadPool.cc
===================================================================
--- code/trunk/src/libraries/core/ThreadPool.cc	(revision 11056)
+++ code/trunk/src/libraries/core/ThreadPool.cc	(revision 11071)
@@ -83,11 +83,10 @@
     bool ThreadPool::passFunction( const ExecutorPtr& executor, bool addThread )
     {
-        std::vector<Thread*>::iterator it;
-        for ( it=this->threadPool_.begin(); it!=this->threadPool_.end(); ++it )
+        for ( Thread* thread : threadPool_ )
         {
-            if ( ! (*it)->isWorking() )
+            if ( ! thread->isWorking() )
             {
                 // If that fails, then there is some code error
-                OrxVerify( (*it)->evaluateExecutor( executor ), "ERROR: could not evaluate Executor" );
+                OrxVerify( thread->evaluateExecutor( executor ), "ERROR: could not evaluate Executor" );
                 return true;
             }
@@ -105,8 +104,7 @@
     void ThreadPool::synchronise()
     {
-        std::vector<Thread*>::iterator it;
-        for ( it=this->threadPool_.begin(); it!=this->threadPool_.end(); ++it )
+        for ( Thread* thread : this->threadPool_ )
         {
-            (*it)->waitUntilFinished();
+            thread->waitUntilFinished();
         }
     }
Index: code/trunk/src/libraries/core/ThreadWin.cc
===================================================================
--- code/trunk/src/libraries/core/ThreadWin.cc	(revision 11056)
+++ code/trunk/src/libraries/core/ThreadWin.cc	(revision 11071)
@@ -31,6 +31,6 @@
 
 #include <cassert>
+// #include <functional>
 // #include <boost/thread/thread.hpp>
-// #include <boost/bind.hpp>
 // #include <boost/thread/mutex.hpp>
 // #include <boost/thread/thread_time.hpp>
@@ -45,5 +45,5 @@
 
     Thread::Thread():
-        executor_(0),
+        executor_(nullptr),
         isWorking_(false),
         stopThread_(false)
@@ -52,5 +52,5 @@
 //         this->isWorkingMutex_ = new boost::mutex;
 //         this->stopThreadMutex_ = new boost::mutex;
-//         this->workerThread_ = new boost::thread( boost::bind(&Thread::threadLoop, this) );
+//         this->workerThread_ = new boost::thread( std::bind(&Thread::threadLoop, this) );
     }
 
@@ -101,5 +101,5 @@
 //                 (*executor)();
 //                 this->executorMutex_->lock();
-//                 this->executor_ = 0;
+//                 this->executor_ = nullptr;
 //                 this->executorMutex_->unlock();
 //                 this->isWorkingMutex_->lock();
Index: code/trunk/src/libraries/core/ViewportEventListener.h
===================================================================
--- code/trunk/src/libraries/core/ViewportEventListener.h	(revision 11056)
+++ code/trunk/src/libraries/core/ViewportEventListener.h	(revision 11071)
@@ -44,5 +44,5 @@
         protected:
             ViewportEventListener();
-            virtual ~ViewportEventListener() {}
+            virtual ~ViewportEventListener() = default;
     };
 }
Index: code/trunk/src/libraries/core/WindowEventListener.cc
===================================================================
--- code/trunk/src/libraries/core/WindowEventListener.cc	(revision 11056)
+++ code/trunk/src/libraries/core/WindowEventListener.cc	(revision 11071)
@@ -45,6 +45,6 @@
     /*static*/ void WindowEventListener::moveWindow()
     {
-        for (ObjectList<WindowEventListener>::iterator it = ObjectList<WindowEventListener>::begin(); it; ++it)
-            it->windowMoved();
+        for (WindowEventListener* listener : ObjectList<WindowEventListener>())
+            listener->windowMoved();
     }
 
@@ -54,6 +54,6 @@
         windowWidth_s = newWidth;
         windowHeight_s = newHeight;
-        for (ObjectList<WindowEventListener>::iterator it = ObjectList<WindowEventListener>::begin(); it; ++it)
-            it->windowResized(newWidth, newHeight);
+        for (WindowEventListener* listener : ObjectList<WindowEventListener>())
+            listener->windowResized(newWidth, newHeight);
     }
 
@@ -61,6 +61,6 @@
     /*static*/ void WindowEventListener::changeWindowFocus(bool bFocus)
     {
-        for (ObjectList<WindowEventListener>::iterator it = ObjectList<WindowEventListener>::begin(); it; ++it)
-            it->windowFocusChanged(bFocus);
+        for (WindowEventListener* listener : ObjectList<WindowEventListener>())
+            listener->windowFocusChanged(bFocus);
     }
 }
Index: code/trunk/src/libraries/core/WindowEventListener.h
===================================================================
--- code/trunk/src/libraries/core/WindowEventListener.h	(revision 11056)
+++ code/trunk/src/libraries/core/WindowEventListener.h	(revision 11071)
@@ -47,5 +47,5 @@
         protected:
             WindowEventListener();
-            virtual ~WindowEventListener() { }
+            virtual ~WindowEventListener() = default;
 
             //! Returns the current render window width
Index: code/trunk/src/libraries/core/XMLNameListener.h
===================================================================
--- code/trunk/src/libraries/core/XMLNameListener.h	(revision 11056)
+++ code/trunk/src/libraries/core/XMLNameListener.h	(revision 11071)
@@ -44,5 +44,5 @@
         public:
             XMLNameListener();
-            virtual ~XMLNameListener() {}
+            virtual ~XMLNameListener() = default;
 
             virtual void loadedNewXMLName(BaseObject* object) = 0;
Index: code/trunk/src/libraries/core/XMLPort.h
===================================================================
--- code/trunk/src/libraries/core/XMLPort.h	(revision 11056)
+++ code/trunk/src/libraries/core/XMLPort.h	(revision 11071)
@@ -245,5 +245,5 @@
             return my_added_objects[index];
           else
-            return 0;
+            return nullptr;
         }
       @endcode
@@ -324,15 +324,15 @@
     {
     public:
-        enum ParseResult
+        enum class ParseResult
         {
-            PR_not_started,
-            PR_finished,
-            PR_waiting_for_default_values
+            not_started,
+            finished,
+            waiting_for_default_values
         };
 
         public:
             XMLPortParamContainer()
-                { this->parseResult_ = PR_not_started; }
-            virtual ~XMLPortParamContainer() {}
+                { this->parseResult_ = ParseResult::not_started; }
+            virtual ~XMLPortParamContainer() = default;
 
             inline const std::string& getName() const
@@ -378,8 +378,4 @@
             }
 
-            ~XMLPortClassParamContainer()
-            {
-            }
-
             XMLPortParamContainer& port(BaseObject* owner, T* object, Element& xmlelement, XMLPort::Mode mode)
             {
@@ -399,5 +395,5 @@
                             // Iterate through the attributes manually in order to make them case insensitive
                             ticpp::Attribute* attribute = xmlelement.FirstAttribute(false);
-                            while (attribute != 0)
+                            while (attribute != nullptr)
                             {
                                 this->owner_->xmlAttributes_[getLowercase(attribute->Name())] = attribute->Value();
@@ -419,12 +415,12 @@
                             this->loadexecutor_->parse(object, attributeValue, &error, ",");
                             if (!error || (mode  == XMLPort::ExpandObject))
-                                this->parseResult_ = PR_finished;
+                                this->parseResult_ = ParseResult::finished;
                             else
-                                this->parseResult_ = PR_waiting_for_default_values;
+                                this->parseResult_ = ParseResult::waiting_for_default_values;
                         }
                         else if (mode == XMLPort::ExpandObject)
-                            this->parseResult_ = PR_finished;
+                            this->parseResult_ = ParseResult::finished;
                         else
-                            this->parseResult_ = PR_waiting_for_default_values;
+                            this->parseResult_ = ParseResult::waiting_for_default_values;
                     }
                     catch (ticpp::Exception& ex)
@@ -453,5 +449,5 @@
             XMLPortParamContainer& portIfWaitingForDefaultValues(const ParseResult& result, const ParseParams& params)
             {
-                if (result == PR_waiting_for_default_values)
+                if (result == ParseResult::waiting_for_default_values)
                     return this->port(this->owner_, params);
                 else
@@ -459,5 +455,5 @@
             }
 
-            virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType& param)
+            virtual XMLPortParamContainer& defaultValue(unsigned int index, const MultiType& param) override
             {
                 if (!this->loadexecutor_->defaultValueSet(index))
@@ -465,5 +461,5 @@
                 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
             }
-            virtual XMLPortParamContainer& defaultValues(const MultiType& param1)
+            virtual XMLPortParamContainer& defaultValues(const MultiType& param1) override
             {
                 if (!this->loadexecutor_->defaultValueSet(0))
@@ -471,5 +467,5 @@
                 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
             }
-            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2)
+            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2) override
             {
                 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)))
@@ -477,5 +473,5 @@
                 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
             }
-            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3)
+            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3) override
             {
                 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)))
@@ -483,5 +479,5 @@
                 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
             }
-            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4)
+            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4) override
             {
                 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)) || (!this->loadexecutor_->defaultValueSet(3)))
@@ -489,5 +485,5 @@
                 return this->portIfWaitingForDefaultValues(this->parseResult_, this->parseParams_);
             }
-            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5)
+            virtual XMLPortParamContainer& defaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) override
             {
                 if ((!this->loadexecutor_->defaultValueSet(0)) || (!this->loadexecutor_->defaultValueSet(1)) || (!this->loadexecutor_->defaultValueSet(2)) || (!this->loadexecutor_->defaultValueSet(3)) || (!this->loadexecutor_->defaultValueSet(4)))
@@ -511,5 +507,5 @@
             XMLPortObjectContainer()
                 { this->bApplyLoaderMask_ = false; }
-            virtual ~XMLPortObjectContainer() {}
+            virtual ~XMLPortObjectContainer() = default;
 
             XMLPortObjectContainer& port(BaseObject* object, Element& xmlelement, XMLPort::Mode mode);
@@ -552,9 +548,5 @@
             }
 
-            ~XMLPortClassObjectContainer()
-            {
-            }
-
-            void callLoadExecutor(BaseObject* object, BaseObject* newObject)
+            virtual void callLoadExecutor(BaseObject* object, BaseObject* newObject) override
             {
                 T* castObject = orxonox_cast<T*>(object);
Index: code/trunk/src/libraries/core/class/Identifiable.cc
===================================================================
--- code/trunk/src/libraries/core/class/Identifiable.cc	(revision 11056)
+++ code/trunk/src/libraries/core/class/Identifiable.cc	(revision 11071)
@@ -48,5 +48,5 @@
     Identifiable::Identifiable()
     {
-        this->identifier_ = 0;
+        this->identifier_ = nullptr;
         this->objectPointers_.reserve(6); // Optimisation
 
Index: code/trunk/src/libraries/core/class/Identifiable.h
===================================================================
--- code/trunk/src/libraries/core/class/Identifiable.h	(revision 11056)
+++ code/trunk/src/libraries/core/class/Identifiable.h	(revision 11071)
@@ -98,5 +98,5 @@
                 registered in the class hierarchy.
             @return
-                Returns NULL if the no pointer was found.
+                Returns nullptr if the no pointer was found.
             */
             ORX_FORCEINLINE void* getDerivedPointer(unsigned int classID)
@@ -107,5 +107,5 @@
                         return this->objectPointers_[i].second;
                 }
-                return NULL;
+                return nullptr;
             }
 
@@ -121,5 +121,5 @@
 
             /// 'Fast map' that holds this-pointers of all derived types
-            std::vector<std::pair<unsigned int, void*> > objectPointers_;
+            std::vector<std::pair<unsigned int, void*>> objectPointers_;
     };
 }
Index: code/trunk/src/libraries/core/class/Identifier.cc
===================================================================
--- code/trunk/src/libraries/core/class/Identifier.cc	(revision 11056)
+++ code/trunk/src/libraries/core/class/Identifier.cc	(revision 11071)
@@ -79,23 +79,23 @@
             delete this->factory_;
 
-        for (std::list<const InheritsFrom*>::const_iterator it = this->manualDirectParents_.begin(); it != this->manualDirectParents_.end(); ++it)
-            delete (*it);
+        for (const InheritsFrom* manualDirectParent : this->manualDirectParents_)
+            delete manualDirectParent;
 
         // erase this Identifier from all related identifiers
-        for (std::list<const Identifier*>::const_iterator it = this->parents_.begin(); it != this->parents_.end(); ++it)
-            const_cast<Identifier*>(*it)->children_.erase(this);
-        for (std::list<const Identifier*>::const_iterator it = this->directParents_.begin(); it != this->directParents_.end(); ++it)
-            const_cast<Identifier*>(*it)->directChildren_.erase(this);
-        for (std::set<const Identifier*>::const_iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-            const_cast<Identifier*>(*it)->parents_.remove(this);
-        for (std::set<const Identifier*>::const_iterator it = this->directChildren_.begin(); it != this->directChildren_.end(); ++it)
-            const_cast<Identifier*>(*it)->directParents_.remove(this);
-
-        for (std::map<std::string, ConfigValueContainer*>::iterator it = this->configValues_.begin(); it != this->configValues_.end(); ++it)
-            delete (it->second);
-        for (std::map<std::string, XMLPortParamContainer*>::iterator it = this->xmlportParamContainers_.begin(); it != this->xmlportParamContainers_.end(); ++it)
-            delete (it->second);
-        for (std::map<std::string, XMLPortObjectContainer*>::iterator it = this->xmlportObjectContainers_.begin(); it != this->xmlportObjectContainers_.end(); ++it)
-            delete (it->second);
+        for (const Identifier* parent : this->parents_)
+            const_cast<Identifier*>(parent)->children_.erase(this);
+        for (const Identifier* directParent : this->directParents_)
+            const_cast<Identifier*>(directParent)->directChildren_.erase(this);
+        for (const Identifier* child : this->children_)
+            const_cast<Identifier*>(child)->parents_.remove(this);
+        for (const Identifier* directChild : this->directChildren_)
+            const_cast<Identifier*>(directChild)->directParents_.remove(this);
+
+        for (const auto& mapEntry : this->configValues_)
+            delete (mapEntry.second);
+        for (const auto& mapEntry : this->xmlportParamContainers_)
+            delete (mapEntry.second);
+        for (const auto& mapEntry : this->xmlportObjectContainers_)
+            delete (mapEntry.second);
     }
 
@@ -117,5 +117,5 @@
             orxout(user_error) << "Aborting..." << endl;
             abort();
-            return 0;
+            return nullptr;
         }
     }
@@ -157,7 +157,7 @@
         if (this->directParents_.empty())
         {
-            for (std::list<const Identifier*>::const_iterator it = initializationTrace.begin(); it != initializationTrace.end(); ++it)
-                if (*it != this)
-                    this->parents_.push_back(*it);
+            for (const Identifier* identifier : initializationTrace)
+                if (identifier != this)
+                    this->parents_.push_back(identifier);
         }
         else
@@ -184,12 +184,12 @@
 
             // initialize all parents
-            for (std::list<const Identifier*>::const_iterator it = this->parents_.begin(); it != this->parents_.end(); ++it)
-                const_cast<Identifier*>(*it)->finishInitialization(); // initialize parent
+            for (const Identifier* parent : this->parents_)
+                const_cast<Identifier*>(parent)->finishInitialization(); // initialize parent
 
             // parents of parents are no direct parents of this identifier
             this->directParents_ = this->parents_;
-            for (std::list<const Identifier*>::const_iterator it_parent = this->parents_.begin(); it_parent != this->parents_.end(); ++it_parent)
-                for (std::list<const Identifier*>::const_iterator it_parent_parent = const_cast<Identifier*>(*it_parent)->parents_.begin(); it_parent_parent != const_cast<Identifier*>(*it_parent)->parents_.end(); ++it_parent_parent)
-                    this->directParents_.remove(*it_parent_parent);
+            for (const Identifier* parent : this->parents_)
+                for (const Identifier* parent_parent : const_cast<Identifier*>(parent)->parents_)
+                    this->directParents_.remove(parent_parent);
 
             this->verifyIdentifierTrace();
@@ -200,7 +200,7 @@
 
             // initialize all direct parents
-            for (std::list<const InheritsFrom*>::const_iterator it = this->manualDirectParents_.begin(); it != this->manualDirectParents_.end(); ++it)
+            for (const InheritsFrom* manualDirectParent : this->manualDirectParents_)
             {
-                Identifier* directParent = (*it)->getParent();
+                Identifier* directParent = manualDirectParent->getParent();
                 this->directParents_.push_back(directParent);
                 directParent->finishInitialization(); // initialize parent
@@ -208,9 +208,9 @@
 
             // direct parents and their parents are also parents of this identifier (but only add them once)
-            for (std::list<const Identifier*>::const_iterator it_parent = this->directParents_.begin(); it_parent != this->directParents_.end(); ++it_parent)
+            for (const Identifier* parent : this->directParents_)
             {
-                for (std::list<const Identifier*>::const_iterator it_parent_parent = const_cast<Identifier*>(*it_parent)->parents_.begin(); it_parent_parent != const_cast<Identifier*>(*it_parent)->parents_.end(); ++it_parent_parent)
-                    this->addIfNotExists(this->parents_, *it_parent_parent);
-                this->addIfNotExists(this->parents_, *it_parent);
+                for (const Identifier* parent_parent : const_cast<Identifier*>(parent)->parents_)
+                    this->addIfNotExists(this->parents_, parent_parent);
+                this->addIfNotExists(this->parents_, parent);
             }
         }
@@ -224,14 +224,14 @@
 
         // tell all parents that this identifier is a child
-        for (std::list<const Identifier*>::const_iterator it = this->parents_.begin(); it != this->parents_.end(); ++it)
-            const_cast<Identifier*>(*it)->children_.insert(this);
+        for (const Identifier* parent : this->parents_)
+            const_cast<Identifier*>(parent)->children_.insert(this);
 
         // tell all direct parents that this identifier is a direct child
-        for (std::list<const Identifier*>::const_iterator it = this->directParents_.begin(); it != this->directParents_.end(); ++it)
-        {
-            const_cast<Identifier*>(*it)->directChildren_.insert(this);
+        for (const Identifier* directChild : this->directParents_)
+        {
+            const_cast<Identifier*>(directChild)->directChildren_.insert(this);
 
             // Create the super-function dependencies
-            (*it)->createSuperFunctionCaller();
+            directChild->createSuperFunctionCaller();
         }
 
@@ -261,20 +261,20 @@
 
         // if any parent class is virtual, it will be instantiated first, so we need to add them first.
-        for (std::list<const Identifier*>::const_iterator it_parent = this->parents_.begin(); it_parent != this->parents_.end(); ++it_parent)
-        {
-            if ((*it_parent)->isVirtualBase())
+        for (const Identifier* parent : this->parents_)
+        {
+            if (parent->isVirtualBase())
             {
-                for (std::list<const Identifier*>::const_iterator it_parent_parent = const_cast<Identifier*>(*it_parent)->parents_.begin(); it_parent_parent != const_cast<Identifier*>(*it_parent)->parents_.end(); ++it_parent_parent)
-                    this->addIfNotExists(expectedIdentifierTrace, *it_parent_parent);
-                this->addIfNotExists(expectedIdentifierTrace, *it_parent);
+                for (const Identifier* parent_parent : const_cast<Identifier*>(parent)->parents_)
+                    this->addIfNotExists(expectedIdentifierTrace, parent_parent);
+                this->addIfNotExists(expectedIdentifierTrace, parent);
             }
         }
 
         // now all direct parents get created recursively. already added identifiers (e.g. virtual base classes) are not added again.
-        for (std::list<const Identifier*>::const_iterator it_parent = this->directParents_.begin(); it_parent != this->directParents_.end(); ++it_parent)
-        {
-            for (std::list<const Identifier*>::const_iterator it_parent_parent = const_cast<Identifier*>(*it_parent)->parents_.begin(); it_parent_parent != const_cast<Identifier*>(*it_parent)->parents_.end(); ++it_parent_parent)
-                this->addIfNotExists(expectedIdentifierTrace, *it_parent_parent);
-            this->addIfNotExists(expectedIdentifierTrace, *it_parent);
+        for (const Identifier* directParent : this->directParents_)
+        {
+            for (const Identifier* parent_parent : const_cast<Identifier*>(directParent)->parents_)
+                this->addIfNotExists(expectedIdentifierTrace, parent_parent);
+            this->addIfNotExists(expectedIdentifierTrace, directParent);
         }
 
@@ -285,16 +285,16 @@
 
             orxout(internal_warning) << "  Actual trace (after creating a sample instance):" << endl << "    ";
-            for (std::list<const Identifier*>::const_iterator it_parent = this->parents_.begin(); it_parent != this->parents_.end(); ++it_parent)
-                orxout(internal_warning) << " " << (*it_parent)->getName();
+            for (const Identifier* parent : this->parents_)
+                orxout(internal_warning) << " " << parent->getName();
             orxout(internal_warning) << endl;
 
             orxout(internal_warning) << "  Expected trace (according to class hierarchy definitions):" << endl << "    ";
-            for (std::list<const Identifier*>::const_iterator it_parent = expectedIdentifierTrace.begin(); it_parent != expectedIdentifierTrace.end(); ++it_parent)
-                orxout(internal_warning) << " " << (*it_parent)->getName();
+            for (const Identifier* parent : expectedIdentifierTrace)
+                orxout(internal_warning) << " " << parent->getName();
             orxout(internal_warning) << endl;
 
             orxout(internal_warning) << "  Direct parents (according to class hierarchy definitions):" << endl << "    ";
-            for (std::list<const Identifier*>::const_iterator it_parent = this->directParents_.begin(); it_parent != this->directParents_.end(); ++it_parent)
-                orxout(internal_warning) << " " << (*it_parent)->getName();
+            for (const Identifier* directParent : this->directParents_)
+                orxout(internal_warning) << " " << directParent->getName();
             orxout(internal_warning) << endl;
         }
@@ -393,5 +393,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
@@ -407,5 +407,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
@@ -438,5 +438,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
Index: code/trunk/src/libraries/core/class/Identifier.h
===================================================================
--- code/trunk/src/libraries/core/class/Identifier.h	(revision 11056)
+++ code/trunk/src/libraries/core/class/Identifier.h	(revision 11071)
@@ -56,5 +56,5 @@
     object->getIdentifier()->getName();                                         // returns "MyClass"
 
-    Identifiable* other = object->getIdentifier()->fabricate(0);                // fabricates a new instance of MyClass
+    Identifiable* other = object->getIdentifier()->fabricate(nullptr);                // fabricates a new instance of MyClass
 
 
@@ -80,6 +80,4 @@
 #include <typeinfo>
 #include <loki/TypeTraits.h>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_base_of.hpp>
 
 #include "util/Output.h"
@@ -120,6 +118,9 @@
         public:
             Identifier(const std::string& name, Factory* factory, bool bLoadable);
-            Identifier(const Identifier& identifier); // don't copy
             virtual ~Identifier();
+
+            // non-copyable:
+            Identifier(const Identifier&) = delete;
+            Identifier& operator=(const Identifier&) = delete;
 
             /// Returns the name of the class the Identifier belongs to.
@@ -137,5 +138,5 @@
 
             /// Returns true if the Identifier has a Factory.
-            inline bool hasFactory() const { return (this->factory_ != 0); }
+            inline bool hasFactory() const { return (this->factory_ != nullptr); }
 
             Identifiable* fabricate(Context* context);
@@ -203,15 +204,7 @@
             /// Returns the map that stores all XMLPort params.
             inline const std::map<std::string, XMLPortParamContainer*>& getXMLPortParamMap() const { return this->xmlportParamContainers_; }
-            /// Returns a const_iterator to the beginning of the map that stores all XMLPort params.
-            inline std::map<std::string, XMLPortParamContainer*>::const_iterator getXMLPortParamMapBegin() const { return this->xmlportParamContainers_.begin(); }
-            /// Returns a const_iterator to the end of the map that stores all XMLPort params.
-            inline std::map<std::string, XMLPortParamContainer*>::const_iterator getXMLPortParamMapEnd() const { return this->xmlportParamContainers_.end(); }
 
             /// Returns the map that stores all XMLPort objects.
             inline const std::map<std::string, XMLPortObjectContainer*>& getXMLPortObjectMap() const { return this->xmlportObjectContainers_; }
-            /// Returns a const_iterator to the beginning of the map that stores all XMLPort objects.
-            inline std::map<std::string, XMLPortObjectContainer*>::const_iterator getXMLPortObjectMapBegin() const { return this->xmlportObjectContainers_.begin(); }
-            /// Returns a const_iterator to the end of the map that stores all XMLPort objects.
-            inline std::map<std::string, XMLPortObjectContainer*>::const_iterator getXMLPortObjectMapEnd() const { return this->xmlportObjectContainers_.end(); }
 
             void addXMLPortParamContainer(const std::string& paramname, XMLPortParamContainer* container);
@@ -269,5 +262,5 @@
     class ClassIdentifier : public Identifier
     {
-        BOOST_STATIC_ASSERT((boost::is_base_of<Identifiable, T>::value));
+        static_assert(std::is_base_of<Identifiable, T>::value, "ClassIdentifier can only be used with Identifiables");
 
         #ifndef DOXYGEN_SHOULD_SKIP_THIS
@@ -279,5 +272,5 @@
             ClassIdentifier(const std::string& name, Factory* factory, bool bLoadable) : Identifier(name, factory, bLoadable)
             {
-                OrxVerify(ClassIdentifier<T>::classIdentifier_s == NULL, "Assertion failed in ClassIdentifier of type " << typeid(T).name());
+                OrxVerify(ClassIdentifier<T>::classIdentifier_s == nullptr, "Assertion failed in ClassIdentifier of type " << typeid(T).name());
                 ClassIdentifier<T>::classIdentifier_s = this;
 
@@ -291,18 +284,20 @@
             bool initializeObject(T* object);
 
-            virtual void updateConfigValues(bool updateChildren = true) const;
-
-            virtual const std::type_info& getTypeInfo()
+            virtual void updateConfigValues(bool updateChildren = true) const override;
+
+            virtual const std::type_info& getTypeInfo() override
                 { return typeid(T); }
 
-            virtual bool canDynamicCastObjectToIdentifierClass(Identifiable* object) const
-                { return dynamic_cast<T*>(object) != 0; }
-
-            virtual void destroyObjects();
+            virtual bool canDynamicCastObjectToIdentifierClass(Identifiable* object) const override
+                { return dynamic_cast<T*>(object) != nullptr; }
+
+            virtual void destroyObjects() override;
 
             static ClassIdentifier<T>* getIdentifier();
 
         private:
-            ClassIdentifier(const ClassIdentifier<T>& identifier) {}    // don't copy
+            // non-copyable:
+            ClassIdentifier(const ClassIdentifier<T>&) = delete;
+            ClassIdentifier& operator=(const ClassIdentifier<T>&) = delete;
 
             void setConfigValues(T* object, Configurable*) const;
@@ -321,9 +316,9 @@
             void updateConfigValues(bool updateChildren, Identifiable*) const;
 
-            static WeakPtr<ClassIdentifier<T> > classIdentifier_s;
+            static WeakPtr<ClassIdentifier<T>> classIdentifier_s;
     };
 
     template <class T>
-    WeakPtr<ClassIdentifier<T> > ClassIdentifier<T>::classIdentifier_s;
+    WeakPtr<ClassIdentifier<T>> ClassIdentifier<T>::classIdentifier_s;
 
     /**
@@ -334,8 +329,8 @@
     /*static*/ inline ClassIdentifier<T>* ClassIdentifier<T>::getIdentifier()
     {
-        if (ClassIdentifier<T>::classIdentifier_s == NULL)
+        if (ClassIdentifier<T>::classIdentifier_s == nullptr)
             ClassIdentifier<T>::classIdentifier_s = (ClassIdentifier<T>*) IdentifierManager::getInstance().getIdentifierByTypeInfo(typeid(T));
 
-        OrxVerify(ClassIdentifier<T>::classIdentifier_s != NULL, "Did you forget to register the class of type " << typeid(T).name() << "?");
+        OrxVerify(ClassIdentifier<T>::classIdentifier_s != nullptr, "Did you forget to register the class of type " << typeid(T).name() << "?");
         return ClassIdentifier<T>::classIdentifier_s;
     }
@@ -365,5 +360,5 @@
 
             // Add pointer of type T to the map in the Identifiable instance that enables "dynamic_casts"
-            object->objectPointers_.push_back(std::make_pair(this->getClassID(), static_cast<void*>(object)));
+            object->objectPointers_.emplace_back(this->getClassID(), static_cast<void*>(object));
             return false;
         }
@@ -408,5 +403,5 @@
     void ClassIdentifier<T>::destroyObjects()
     {
-        this->destroyObjects((T*)0);
+        this->destroyObjects((T*)nullptr);
     }
 
@@ -417,8 +412,6 @@
     void ClassIdentifier<T>::destroyObjects(Listable*)
     {
-        ObjectListBase* objectList = Context::getRootContext()->getObjectList(this);
-        ObjectListElement<T>* begin = static_cast<ObjectListElement<T>*>(objectList->begin());
-        ObjectListElement<T>* end = static_cast<ObjectListElement<T>*>(objectList->end());
-        for (typename ObjectList<T>::iterator it = begin; it != end; )
+        ObjectList<T> list(Context::getRootContext()->getObjectList(this));
+        for (typename ObjectList<T>::iterator it = list.begin(); it != list.end(); )
             this->destroyObject(*(it++));
     }
@@ -451,5 +444,5 @@
     void ClassIdentifier<T>::updateConfigValues(bool updateChildren) const
     {
-        this->updateConfigValues(updateChildren, static_cast<T*>(NULL));
+        this->updateConfigValues(updateChildren, static_cast<T*>(nullptr));
     }
 
@@ -460,10 +453,10 @@
             return;
 
-        for (ObjectListIterator<T> it = ObjectList<T>::begin(); it; ++it)
-            this->setConfigValues(*it, *it);
+        for (T* object : ObjectList<T>())
+            this->setConfigValues(object, object);
 
         if (updateChildren)
-            for (std::set<const Identifier*>::const_iterator it = this->getChildren().begin(); it != this->getChildren().end(); ++it)
-                (*it)->updateConfigValues(false);
+            for (const Identifier* child : this->getChildren())
+                child->updateConfigValues(false);
     }
 
@@ -483,7 +476,7 @@
         registered in the class hierarchy.
     @return
-        Returns NULL if the cast is not possible
+        Returns nullptr if the cast is not possible
     @note
-        In case of NULL return (and using MSVC), a dynamic_cast might still be possible if
+        In case of nullptr return (and using MSVC), a dynamic_cast might still be possible if
         a class forgot to register its objects.
         Also note that the function is implemented differently for GCC/MSVC.
@@ -494,8 +487,8 @@
 #ifdef ORXONOX_COMPILER_MSVC
         typedef Loki::TypeTraits<typename Loki::TypeTraits<T>::PointeeType>::NonConstType ClassType;
-        if (source != NULL)
+        if (source != nullptr)
             return source->template getDerivedPointer<ClassType>(ClassIdentifier<ClassType>::getIdentifier()->getClassID());
         else
-            return NULL;
+            return nullptr;
 #else
         return dynamic_cast<T>(source);
Index: code/trunk/src/libraries/core/class/IdentifierManager.cc
===================================================================
--- code/trunk/src/libraries/core/class/IdentifierManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/class/IdentifierManager.cc	(revision 11071)
@@ -44,10 +44,10 @@
 namespace orxonox
 {
-    IdentifierManager* IdentifierManager::singletonPtr_s = 0;
+    IdentifierManager* IdentifierManager::singletonPtr_s = nullptr;
 
     IdentifierManager::IdentifierManager()
     {
         this->hierarchyCreatingCounter_s = 0;
-        this->recordTraceForIdentifier_ = NULL;
+        this->recordTraceForIdentifier_ = nullptr;
     }
 
@@ -60,4 +60,5 @@
 
         this->identifiers_.insert(identifier);
+        this->identifierByTypeIndex_[identifier->getTypeInfo()] = identifier;
         this->identifierByString_[identifier->getName()] = identifier;
         this->identifierByLowercaseString_[getLowercase(identifier->getName())] = identifier;
@@ -71,4 +72,5 @@
     {
         this->identifiers_.erase(identifier);
+        this->identifierByTypeIndex_.erase(identifier->getTypeInfo());
         this->identifierByString_.erase(identifier->getName());
         this->identifierByLowercaseString_.erase(getLowercase(identifier->getName()));
@@ -92,8 +94,7 @@
         // iterate over all identifiers, create one instance of each class and initialize the identifiers
         {
-            Context temporaryContext(NULL);
-            for (std::set<Identifier*>::const_iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
+            Context temporaryContext(nullptr);
+            for (Identifier* identifier : this->identifiers_)
             {
-                Identifier* identifier = (*it);
                 if (identifier->isInitialized())
                     continue;
@@ -108,5 +109,5 @@
                     Identifiable* temp = identifier->fabricate(&temporaryContext);
 
-                    this->recordTraceForIdentifier_ = NULL;
+                    this->recordTraceForIdentifier_ = nullptr;
 
                     if (temp->getIdentifier() != identifier)
@@ -127,6 +128,6 @@
 
         // finish the initialization of all identifiers
-        for (std::set<Identifier*>::const_iterator it = initializedIdentifiers.begin(); it != initializedIdentifiers.end(); ++it)
-            (*it)->finishInitialization();
+        for (Identifier* initializedIdentifier : initializedIdentifiers)
+            initializedIdentifier->finishInitialization();
 
         // only check class hierarchy in dev mode because it's an expensive operation and it requires a developer to fix detected problems anyway.
@@ -144,26 +145,26 @@
     {
         // check if there are any uninitialized identifiers remaining
-        for (std::set<Identifier*>::const_iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
-            if (!(*it)->isInitialized())
-                orxout(internal_error) << "Identifier was registered late and is not initialized: " << (*it)->getName() << " / " << (*it)->getTypeInfo().name() << endl;
+        for (Identifier* identifier : this->identifiers_)
+            if (!identifier->isInitialized())
+                orxout(internal_error) << "Identifier was registered late and is not initialized: " << identifier->getName() << " / " << identifier->getTypeInfo().name() << endl;
 
         // for all initialized identifiers, check if a sample instance behaves as expected according to the class hierarchy
-        Context temporaryContext(NULL);
-        for (std::set<Identifier*>::const_iterator it1 = initializedIdentifiers.begin(); it1 != initializedIdentifiers.end(); ++it1)
+        Context temporaryContext(nullptr);
+        for (Identifier* initializedIdentifier : initializedIdentifiers)
         {
-            if (!(*it1)->hasFactory())
+            if (!initializedIdentifier->hasFactory())
                 continue;
 
-            Identifiable* temp = (*it1)->fabricate(&temporaryContext);
-
-            for (std::set<Identifier*>::const_iterator it2 = this->identifiers_.begin(); it2 != this->identifiers_.end(); ++it2)
+            Identifiable* temp = initializedIdentifier->fabricate(&temporaryContext);
+
+            for (Identifier* identifier : this->identifiers_)
             {
-                bool isA_AccordingToRtti = (*it2)->canDynamicCastObjectToIdentifierClass(temp);
-                bool isA_AccordingToClassHierarchy = temp->isA((*it2));
+                bool isA_AccordingToRtti = identifier->canDynamicCastObjectToIdentifierClass(temp);
+                bool isA_AccordingToClassHierarchy = temp->isA(identifier);
 
                 if (isA_AccordingToRtti != isA_AccordingToClassHierarchy)
                 {
-                    orxout(internal_error) << "Class hierarchy does not match RTTI: Class hierarchy claims that " << (*it1)->getName() <<
-                        (isA_AccordingToClassHierarchy ? " is a " : " is not a ") << (*it2)->getName() << " but RTTI says the opposite." << endl;
+                    orxout(internal_error) << "Class hierarchy does not match RTTI: Class hierarchy claims that " << initializedIdentifier->getName() <<
+                        (isA_AccordingToClassHierarchy ? " is a " : " is not a ") << identifier->getName() << " but RTTI says the opposite." << endl;
                 }
             }
@@ -184,6 +185,6 @@
     {
         orxout(internal_status) << "Destroy class-hierarchy" << endl;
-        for (std::set<Identifier*>::const_iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
-            (*it)->reset();
+        for (Identifier* identifier : this->identifiers_)
+            identifier->reset();
     }
 
@@ -221,5 +222,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
@@ -235,5 +236,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
@@ -249,5 +250,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
@@ -259,9 +260,9 @@
     Identifier* IdentifierManager::getIdentifierByTypeInfo(const std::type_info& typeInfo)
     {
-        // TODO: use std::type_index and a map to find identifiers by type_info (only with c++11)
-        for (std::set<Identifier*>::iterator it = this->identifiers_.begin(); it != this->identifiers_.end(); ++it)
-            if ((*it)->getTypeInfo() == typeInfo)
-                return (*it);
-        return 0;
+        auto it = this->identifierByTypeIndex_.find(typeInfo);
+        if (it != this->identifierByTypeIndex_.end())
+            return it->second;
+        else
+            return nullptr;
     }
 
Index: code/trunk/src/libraries/core/class/IdentifierManager.h
===================================================================
--- code/trunk/src/libraries/core/class/IdentifierManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/class/IdentifierManager.h	(revision 11071)
@@ -37,5 +37,7 @@
 #include "core/CorePrereqs.h"
 
+#include <typeindex>
 #include <map>
+#include <unordered_map>
 #include <set>
 #include <list>
@@ -52,5 +54,5 @@
         public:
             IdentifierManager();
-            ~IdentifierManager() {}
+            ~IdentifierManager() = default;
 
             void addIdentifier(Identifier* identifier);
@@ -93,5 +95,7 @@
 
         private:
-            IdentifierManager(const IdentifierManager&); // not implemented
+            // non-copyable:
+            IdentifierManager(const IdentifierManager&) = delete;
+            IdentifierManager& operator=(const IdentifierManager&) = delete;
 
             /// Increases the hierarchyCreatingCounter_s variable, causing all new objects to store their parents.
@@ -102,8 +106,9 @@
                 { hierarchyCreatingCounter_s--; }
 
-            std::set<Identifier*> identifiers_;                              //!< All identifiers. This is only used internally.
-            std::map<std::string, Identifier*> identifierByString_;          //!< Map that stores all Identifiers with their names.
-            std::map<std::string, Identifier*> identifierByLowercaseString_; //!< Map that stores all Identifiers with their names in lowercase.
-            std::map<uint32_t, Identifier*> identifierByNetworkId_;          //!< Returns the map that stores all Identifiers with their network IDs.
+            std::set<Identifier*> identifiers_;                                      //!< All identifiers. This is only used internally.
+            std::unordered_map<std::type_index, Identifier*> identifierByTypeIndex_; //!< Map that stores all Identifiers with their type_index.
+            std::map<std::string, Identifier*> identifierByString_;                  //!< Map that stores all Identifiers with their names.
+            std::map<std::string, Identifier*> identifierByLowercaseString_;         //!< Map that stores all Identifiers with their names in lowercase.
+            std::map<uint32_t, Identifier*> identifierByNetworkId_;                  //!< Returns the map that stores all Identifiers with their network IDs.
 
             int hierarchyCreatingCounter_s;                         //!< Bigger than zero if at least one Identifier stores its parents (its an int instead of a bool to avoid conflicts with multithreading)
@@ -111,5 +116,5 @@
             /// Used while creating the object hierarchy to keep track of the identifiers of a newly created object (and all other objects that get created as
             /// a consequence of this, e.g. nested member objects).
-            std::map<Identifiable*, std::list<const Identifier*> > identifierTraceOfNewObject_;
+            std::map<Identifiable*, std::list<const Identifier*>> identifierTraceOfNewObject_;
             Identifier* recordTraceForIdentifier_; //!< The identifier for which we want to record the trace of identifiers during object creation. If null, no trace is recorded.
 
Index: code/trunk/src/libraries/core/class/SubclassIdentifier.h
===================================================================
--- code/trunk/src/libraries/core/class/SubclassIdentifier.h	(revision 11056)
+++ code/trunk/src/libraries/core/class/SubclassIdentifier.h	(revision 11071)
@@ -127,5 +127,5 @@
                     else
                     {
-                        orxout(internal_error) << "Can't assign NULL identifier" << endl;
+                        orxout(internal_error) << "Can't assign nullptr identifier" << endl;
                     }
                 }
@@ -189,5 +189,5 @@
                     orxout(user_error) << "Aborting..." << endl;
                     abort();
-                    return 0;
+                    return nullptr;
                 }
             }
Index: code/trunk/src/libraries/core/class/Super.h
===================================================================
--- code/trunk/src/libraries/core/class/Super.h	(revision 11056)
+++ code/trunk/src/libraries/core/class/Super.h	(revision 11071)
@@ -94,5 +94,5 @@
             static void superCheck() \
             { \
-                SuperFunctionCondition<functionnumber, T, 0, templatehack2>::apply(static_cast<T*>(0)); \
+                SuperFunctionCondition<functionnumber, T, 0, templatehack2>::apply(static_cast<T*>(nullptr)); \
                 SuperFunctionCondition<functionnumber + 1, T, 0, templatehack2>::superCheck(); \
             } \
@@ -103,20 +103,20 @@
             { \
                 ClassIdentifier<T>* identifier = ClassIdentifier<T>::getIdentifier(); \
-                for (std::set<const Identifier*>::iterator it = identifier->getDirectChildren().begin(); it != identifier->getDirectChildren().end(); ++it) \
+                for (const Identifier* child : identifier->getDirectChildren()) \
                 { \
-                    if (((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ && ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) \
+                    if (((ClassIdentifier<T>*)child)->bSuperFunctionCaller_##functionname##_isFallback_ && ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_) \
                     { \
-                        delete ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_; \
-                        ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = 0; \
-                        ((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ = false; \
+                        delete ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_; \
+                        ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_ = nullptr; \
+                        ((ClassIdentifier<T>*)child)->bSuperFunctionCaller_##functionname##_isFallback_ = false; \
                     } \
                     \
-                    if (!((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_) \
+                    if (!((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_) \
                     { \
-                        orxout(verbose, context::super) << "Added SuperFunctionCaller for " << #functionname << ": " << ClassIdentifier<T>::getIdentifier()->getName() << " <- " << ((ClassIdentifier<T>*)(*it))->getName() << endl; \
-                        ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>; \
+                        orxout(verbose, context::super) << "Added SuperFunctionCaller for " << #functionname << ": " << ClassIdentifier<T>::getIdentifier()->getName() << " <- " << ((ClassIdentifier<T>*)child)->getName() << endl; \
+                        ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>; \
                     } \
-                    else if (((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier() != ClassIdentifier<T>::getIdentifier()) \
-                        orxout(internal_warning, context::super) << "SuperFunctionCaller for " << #functionname << " in " << ((ClassIdentifier<T>*)(*it))->getName() << " calls function of " << ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier()->getName() << " but " << ClassIdentifier<T>::getIdentifier()->getName() << " is also possible (do you use multiple inheritance?)" << endl; \
+                    else if (((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_->getParentIdentifier() != ClassIdentifier<T>::getIdentifier()) \
+                        orxout(internal_warning, context::super) << "SuperFunctionCaller for " << #functionname << " in " << ((ClassIdentifier<T>*)child)->getName() << " calls function of " << ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_->getParentIdentifier()->getName() << " but " << ClassIdentifier<T>::getIdentifier()->getName() << " is also possible (do you use multiple inheritance?)" << endl; \
                 } \
             } \
@@ -154,5 +154,5 @@
                 // This call to the apply-function is the whole check. By calling the function with
                 // a T* pointer, the right function get's called.
-                SuperFunctionCondition<functionnumber, T, 0, templatehack2>::apply(static_cast<T*>(0));
+                SuperFunctionCondition<functionnumber, T, 0, templatehack2>::apply(static_cast<T*>(nullptr));
 
                 // Go go the superCheck for of next super-function (functionnumber + 1)
@@ -171,26 +171,26 @@
 
                 // Iterate through all children
-                for (std::set<const Identifier*>::iterator it = identifier->getDirectChildren().begin(); it != identifier->getDirectChildren().end(); ++it)
+                for (const Identifier* child : identifier->getDirectChildren())
                 {
                     // Check if the caller is a fallback-caller
-                    if (((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ && ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_)
+                    if (((ClassIdentifier<T>*)child)->bSuperFunctionCaller_##functionname##_isFallback_ && ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_)
                     {
                         // Delete the fallback caller an prepare to get a real caller
-                        delete ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_;
-                        ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = 0;
-                        ((ClassIdentifier<T>*)(*it))->bSuperFunctionCaller_##functionname##_isFallback_ = false;
+                        delete ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_;
+                        ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_ = nullptr;
+                        ((ClassIdentifier<T>*)child)->bSuperFunctionCaller_##functionname##_isFallback_ = false;
                     }
 
                     // Check if there's not already a caller
-                    if (!((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_)
+                    if (!((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_)
                     {
                         // Add the SuperFunctionCaller
-                        orxout(verbose, context::super) << "adding functionpointer to " << ((ClassIdentifier<T>*)(*it))->getName() << endl;
-                        ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>;
+                        orxout(verbose, context::super) << "adding functionpointer to " << ((ClassIdentifier<T>*)child)->getName() << endl;
+                        ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_ = new SuperFunctionClassCaller_##functionname <T>;
                     }
 
                     // If there is already a caller, but for another parent, print a warning
-                    else if (((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier() != ClassIdentifier<T>::getIdentifier())
-                        orxout(internal_warning, context::super) << "SuperFunctionCaller for " << #functionname << " in " << ((ClassIdentifier<T>*)(*it))->getName() << " calls function of " << ((ClassIdentifier<T>*)(*it))->superFunctionCaller_##functionname##_->getParentIdentifier()->getName() << " but " << ClassIdentifier<T>::getIdentifier()->getName() << " is also possible (do you use multiple inheritance?)" << endl;
+                    else if (((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_->getParentIdentifier() != ClassIdentifier<T>::getIdentifier())
+                        orxout(internal_warning, context::super) << "SuperFunctionCaller for " << #functionname << " in " << ((ClassIdentifier<T>*)child)->getName() << " calls function of " << ((ClassIdentifier<T>*)child)->superFunctionCaller_##functionname##_->getParentIdentifier()->getName() << " but " << ClassIdentifier<T>::getIdentifier()->getName() << " is also possible (do you use multiple inheritance?)" << endl;
                 }
             }
@@ -584,5 +584,5 @@
         // Creates the super-function-callers by calling the first SuperFunctionCondition check
         // This get's called within the initialization of an Identifier
-        virtual void createSuperFunctionCaller() const
+        virtual void createSuperFunctionCaller() const override
         {
             SuperFunctionCondition<0, T, 0, 0>::superCheck();
Index: code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.cc
===================================================================
--- code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.cc	(revision 11071)
@@ -77,6 +77,6 @@
             bool groupIsVisible(const std::map<std::string, ConsoleCommand*>& group, bool bOnlyShowHidden)
             {
-                for (std::map<std::string, ConsoleCommand*>::const_iterator it_command = group.begin(); it_command != group.end(); ++it_command)
-                    if (it_command->second->isActive() && it_command->second->hasAccess() && (!it_command->second->isHidden())^bOnlyShowHidden)
+                for (const auto& mapEntry : group)
+                    if (mapEntry.second->isActive() && mapEntry.second->hasAccess() && (!mapEntry.second->isHidden())^bOnlyShowHidden)
                         return true;
 
@@ -99,21 +99,21 @@
 
                 // get all the groups that are visible (except the shortcut group "")
-                const std::map<std::string, std::map<std::string, ConsoleCommand*> >& commands = ConsoleCommandManager::getInstance().getCommands();
-                for (std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = commands.begin(); it_group != commands.end(); ++it_group)
-                    if (groupIsVisible(it_group->second, bOnlyShowHidden) && it_group->first != "" && (fragmentLC == "" || getLowercase(it_group->first).find(fragmentLC) == 0))
-                        groupList.push_back(ArgumentCompletionListElement(it_group->first, getLowercase(it_group->first)));
+                const std::map<std::string, std::map<std::string, ConsoleCommand*>>& commands = ConsoleCommandManager::getInstance().getCommands();
+                for (const auto& mapEntry : commands)
+                    if (groupIsVisible(mapEntry.second, bOnlyShowHidden) && mapEntry.first != "" && (fragmentLC == "" || getLowercase(mapEntry.first).find(fragmentLC) == 0))
+                        groupList.emplace_back(mapEntry.first, getLowercase(mapEntry.first));
 
                 // now add all shortcuts (in group "")
-                std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = commands.find("");
+                std::map<std::string, std::map<std::string, ConsoleCommand*>>::const_iterator it_group = commands.find("");
                 if (it_group != commands.end())
                 {
                     // add a line-break if the list isn't empty
                     if (!groupList.empty())
-                        groupList.push_back(ArgumentCompletionListElement("", "", "\n"));
+                        groupList.emplace_back("", "", "\n");
 
                     // add the shortcuts
-                    for (std::map<std::string, ConsoleCommand*>::const_iterator it_command = it_group->second.begin(); it_command != it_group->second.end(); ++it_command)
-                        if (it_command->second->isActive() && it_command->second->hasAccess() && (!it_command->second->isHidden())^bOnlyShowHidden && (fragmentLC == "" || getLowercase(it_command->first).find(fragmentLC) == 0))
-                            groupList.push_back(ArgumentCompletionListElement(it_command->first, getLowercase(it_command->first)));
+                    for (const auto& mapEntry : it_group->second)
+                        if (mapEntry.second->isActive() && mapEntry.second->hasAccess() && (!mapEntry.second->isHidden())^bOnlyShowHidden && (fragmentLC == "" || getLowercase(mapEntry.first).find(fragmentLC) == 0))
+                            groupList.emplace_back(mapEntry.first, getLowercase(mapEntry.first));
                 }
 
@@ -138,5 +138,5 @@
 
                 // find the iterator of the given group
-                std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = ConsoleCommandManager::getInstance().getCommands().begin();
+                std::map<std::string, std::map<std::string, ConsoleCommand*>>::const_iterator it_group = ConsoleCommandManager::getInstance().getCommands().begin();
                 for ( ; it_group != ConsoleCommandManager::getInstance().getCommands().end(); ++it_group)
                     if (getLowercase(it_group->first) == groupLC)
@@ -146,7 +146,7 @@
                 if (it_group != ConsoleCommandManager::getInstance().getCommands().end())
                 {
-                    for (std::map<std::string, ConsoleCommand*>::const_iterator it_command = it_group->second.begin(); it_command != it_group->second.end(); ++it_command)
-                        if (it_command->second->isActive() && it_command->second->hasAccess() && (!it_command->second->isHidden())^bOnlyShowHidden)
-                            commandList.push_back(ArgumentCompletionListElement(it_command->first, getLowercase(it_command->first)));
+                    for (const auto& mapEntry : it_group->second)
+                        if (mapEntry.second->isActive() && mapEntry.second->hasAccess() && (!mapEntry.second->isHidden())^bOnlyShowHidden)
+                            commandList.emplace_back(mapEntry.first, getLowercase(mapEntry.first));
                 }
 
@@ -188,5 +188,5 @@
             {
                 ArgumentCompletionList list;
-                list.push_back(ArgumentCompletionListElement("", "", hint));
+                list.emplace_back("", "", hint);
                 return list;
             }
@@ -212,5 +212,5 @@
             if (tokens.size() == 1)
             {
-                std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = ConsoleCommandManager::getInstance().getCommands().find(tokens[0]);
+                std::map<std::string, std::map<std::string, ConsoleCommand*>>::const_iterator it_group = ConsoleCommandManager::getInstance().getCommands().find(tokens[0]);
                 if (it_group != ConsoleCommandManager::getInstance().getCommands().end())
                     return detail::_subcommands(fragment, tokens[0], true);
@@ -261,7 +261,7 @@
                 {
                     if (boost::filesystem::is_directory(*file))
-                        dirlist.push_back(ArgumentCompletionListElement(file->BF_DICTIONARY_ENTRY_NAME() + '/', getLowercase(file->BF_DICTIONARY_ENTRY_NAME()) + '/', file->BF_LEAF() + '/'));
+                        dirlist.emplace_back(file->BF_DICTIONARY_ENTRY_NAME() + '/', getLowercase(file->BF_DICTIONARY_ENTRY_NAME()) + '/', file->BF_LEAF() + '/');
                     else
-                        filelist.push_back(ArgumentCompletionListElement(file->BF_DICTIONARY_ENTRY_NAME(), getLowercase(file->BF_DICTIONARY_ENTRY_NAME()), file->BF_LEAF()));
+                        filelist.emplace_back(file->BF_DICTIONARY_ENTRY_NAME(), getLowercase(file->BF_DICTIONARY_ENTRY_NAME()), file->BF_LEAF());
                     ++file;
                 }
@@ -281,6 +281,6 @@
 
             const std::set<std::string>& names = SettingsConfigFile::getInstance().getSectionNames();
-            for (std::set<std::string>::const_iterator it = names.begin(); it != names.end(); ++it)
-                sectionList.push_back(ArgumentCompletionListElement(*it, getLowercase(*it)));
+            for (const std::string& name : names)
+                sectionList.emplace_back(name, getLowercase(name));
 
             return sectionList;
@@ -298,5 +298,5 @@
             SettingsConfigFile::ContainerMap::const_iterator upper = settings.getContainerUpperBound(sectionLC);
             for (SettingsConfigFile::ContainerMap::const_iterator it = settings.getContainerLowerBound(sectionLC); it != upper; ++it)
-                entryList.push_back(ArgumentCompletionListElement(it->second.second->getName(), it->second.first));
+                entryList.emplace_back(it->second.second->getName(), it->second.first);
 
             return entryList;
@@ -319,5 +319,5 @@
                 {
                     const std::string& valuestring = it->second.second->toString();
-                    oldValue.push_back(ArgumentCompletionListElement(valuestring, getLowercase(valuestring), "Old value: " + valuestring));
+                    oldValue.emplace_back(valuestring, getLowercase(valuestring), "Old value: " + valuestring);
                 }
             }
@@ -334,6 +334,6 @@
             ArgumentCompletionList threads;
 
-            for (std::list<unsigned int>::const_iterator it = threadnumbers.begin(); it != threadnumbers.end(); ++it)
-                threads.push_back(ArgumentCompletionListElement(multi_cast<std::string>(*it)));
+            for (unsigned int threadnumber : threadnumbers)
+                threads.emplace_back(multi_cast<std::string>(threadnumber));
 
             return threads;
Index: code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.h
===================================================================
--- code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/ArgumentCompletionFunctions.h	(revision 11071)
@@ -86,20 +86,20 @@
         {
             for (int month = 1; month <= 12; ++month)
-                list.push_back(ArgumentCompletionListElement(multi_cast<std::string>(month)));
+                list.emplace_back(multi_cast<std::string>(month));
         }
         else
         {
-            list.push_back(ArgumentCompletionListElement("January",   "january"));
-            list.push_back(ArgumentCompletionListElement("February",  "february"));
-            list.push_back(ArgumentCompletionListElement("March",     "march"));
-            list.push_back(ArgumentCompletionListElement("April",     "april"));
-            list.push_back(ArgumentCompletionListElement("May",       "may"));
-            list.push_back(ArgumentCompletionListElement("June",      "june"));
-            list.push_back(ArgumentCompletionListElement("July",      "july"));
-            list.push_back(ArgumentCompletionListElement("August",    "august"));
-            list.push_back(ArgumentCompletionListElement("September", "september"));
-            list.push_back(ArgumentCompletionListElement("October",   "october"));
-            list.push_back(ArgumentCompletionListElement("November",  "november"));
-            list.push_back(ArgumentCompletionListElement("December",  "december"));
+            list.emplace_back("January",   "january");
+            list.emplace_back("February",  "february");
+            list.emplace_back("March",     "march");
+            list.emplace_back("April",     "april");
+            list.emplace_back("May",       "may");
+            list.emplace_back("June",      "june");
+            list.emplace_back("July",      "july");
+            list.emplace_back("August",    "august");
+            list.emplace_back("September", "september");
+            list.emplace_back("October",   "october");
+            list.emplace_back("November",  "november");
+            list.emplace_back("December",  "december");
         }
 
Index: code/trunk/src/libraries/core/command/CommandEvaluation.cc
===================================================================
--- code/trunk/src/libraries/core/command/CommandEvaluation.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/CommandEvaluation.cc	(revision 11071)
@@ -54,6 +54,6 @@
     void CommandEvaluation::initialize(const std::string& command)
     {
-        this->execCommand_ = 0;
-        this->hintCommand_ = 0;
+        this->execCommand_ = nullptr;
+        this->hintCommand_ = nullptr;
         this->string_ = command;
         this->execArgumentsOffset_ = 0;
@@ -119,5 +119,5 @@
     /**
         @brief Executes the command which was evaluated by this object and returns its return-value.
-        @param error A pointer to an integer (or NULL) which will be used to write error codes to (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
+        @param error A pointer to an integer (or nullptr) which will be used to write error codes to (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
         @return Returns the result of the command (or MultiType::Null if there is no return value)
     */
@@ -306,6 +306,6 @@
                 // the user typed 1-2 arguments, check what he tried to type and print a suitable error
                 std::string groupLC = getLowercase(this->getToken(0));
-                for (std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = ConsoleCommandManager::getInstance().getCommandsLC().begin(); it_group != ConsoleCommandManager::getInstance().getCommandsLC().end(); ++it_group)
-                    if (it_group->first == groupLC)
+                for (const auto& mapEntry : ConsoleCommandManager::getInstance().getCommandsLC())
+                    if (mapEntry.first == groupLC)
                         return std::string("Error: There is no command in group \"") + this->getToken(0) + "\" starting with \"" + this->getToken(1) + "\".";
 
@@ -328,11 +328,11 @@
 
         // iterate through all groups and their commands and calculate the distance to the current command. keep the best.
-        for (std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = ConsoleCommandManager::getInstance().getCommandsLC().begin(); it_group != ConsoleCommandManager::getInstance().getCommandsLC().end(); ++it_group)
-        {
-            if (it_group->first != "")
-            {
-                for (std::map<std::string, ConsoleCommand*>::const_iterator it_name = it_group->second.begin(); it_name != it_group->second.end(); ++it_name)
-                {
-                    std::string command = it_group->first + " " + it_name->first;
+        for (const auto& mapEntryGroup : ConsoleCommandManager::getInstance().getCommandsLC())
+        {
+            if (mapEntryGroup.first != "")
+            {
+                for (const auto& mapEntryName : mapEntryGroup.second)
+                {
+                    std::string command = mapEntryGroup.first + " " + mapEntryName.first;
                     unsigned int distance = getLevenshteinDistance(command, token0_LC + " " + token1_LC);
                     if (distance < nearestDistance)
@@ -346,10 +346,10 @@
 
         // now also iterate through all shortcuts and keep the best if it's better than the one found above.
-        std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = ConsoleCommandManager::getInstance().getCommandsLC().find("");
+        std::map<std::string, std::map<std::string, ConsoleCommand*>>::const_iterator it_group = ConsoleCommandManager::getInstance().getCommandsLC().find("");
         if (it_group !=  ConsoleCommandManager::getInstance().getCommandsLC().end())
         {
-            for (std::map<std::string, ConsoleCommand*>::const_iterator it_name = it_group->second.begin(); it_name != it_group->second.end(); ++it_name)
-            {
-                std::string command = it_name->first;
+            for (const auto& mapEntry : it_group->second)
+            {
+                std::string command = mapEntry.first;
                 unsigned int distance = getLevenshteinDistance(command, token0_LC);
                 if (distance < nearestDistance)
@@ -429,6 +429,6 @@
     {
         size_t count = 0;
-        for (ArgumentCompletionList::const_iterator it = list.begin(); it != list.end(); ++it)
-            if (it->getComparable() != "")
+        for (const ArgumentCompletionListElement& element : list)
+            if (element.getComparable() != "")
                 ++count;
         return count;
@@ -495,13 +495,13 @@
         {
             // only one (non-empty) value in the list - search it and return it
-            for (ArgumentCompletionList::const_iterator it = list.begin(); it != list.end(); ++it)
-            {
-                if (it->getComparable() != "")
+            for (const ArgumentCompletionListElement& element : list)
+            {
+                if (element.getComparable() != "")
                 {
                     // arguments that have a separate string to be displayed need a little more care - just return them without modification. add a space character to the others.
-                    if (it->hasDisplay())
-                        return (it->getString());
+                    if (element.hasDisplay())
+                        return (element.getString());
                     else
-                        return (it->getString() + ' ');
+                        return (element.getString() + ' ');
                 }
             }
@@ -517,8 +517,8 @@
                 char tempComparable = '\0';
                 char temp = '\0';
-                for (ArgumentCompletionList::const_iterator it = list.begin(); it != list.end(); ++it)
-                {
-                    const std::string& argumentComparable = it->getComparable();
-                    const std::string& argument = it->getString();
+                for (const ArgumentCompletionListElement& element : list)
+                {
+                    const std::string& argumentComparable = element.getComparable();
+                    const std::string& argument = element.getString();
 
                     // ignore empty arguments
@@ -560,10 +560,10 @@
     {
         std::string output;
-        for (ArgumentCompletionList::const_iterator it = list.begin(); it != list.end(); ++it)
-        {
-            output += it->getDisplay();
+        for (const ArgumentCompletionListElement& element : list)
+        {
+            output += element.getDisplay();
 
             // add a space character between two elements for all non-empty arguments
-            if (it->getComparable() != "")
+            if (element.getComparable() != "")
                 output += ' ';
         }
Index: code/trunk/src/libraries/core/command/CommandEvaluation.h
===================================================================
--- code/trunk/src/libraries/core/command/CommandEvaluation.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/CommandEvaluation.h	(revision 11071)
@@ -86,5 +86,5 @@
 
             int execute();
-            MultiType query(int* error = 0);
+            MultiType query(int* error = nullptr);
 
             std::string complete();
@@ -97,5 +97,5 @@
             /// Returns true if the command evaluation contains a valid command that can be executed.
             inline bool isValid() const
-                { return (this->execCommand_ != 0); }
+                { return (this->execCommand_ != nullptr); }
 
             /// Returns the console command that was evaluated by this object.
@@ -137,5 +137,5 @@
             static std::string getCommonBegin(const ArgumentCompletionList& list);
 
-            const ConsoleCommand* execCommand_;             ///< The command that will be executed (can be NULL if the command is not valid)
+            const ConsoleCommand* execCommand_;             ///< The command that will be executed (can be nullptr if the command is not valid)
             const ConsoleCommand* hintCommand_;             ///< The command that is used to display hints and argument lists (can be different to execCommand_ in some cases)
             SubString tokens_;                              ///< The single words of the command string, split into tokens
Index: code/trunk/src/libraries/core/command/CommandExecutor.cc
===================================================================
--- code/trunk/src/libraries/core/command/CommandExecutor.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/CommandExecutor.cc	(revision 11071)
@@ -81,5 +81,5 @@
         @brief Executes a command and returns its return-value.
         @param command A string containing the command
-        @param error A pointer to a value (or NULL) where the error-code should be written to (see @ref CommandExecutorErrorCodes "error codes")
+        @param error A pointer to a value (or nullptr) where the error-code should be written to (see @ref CommandExecutorErrorCodes "error codes")
         @param useTcl If true, the command is passed to tcl (see TclBind)
         @return Returns the return-value of the command (if any - MultiType::Null otherwise)
@@ -127,5 +127,5 @@
         @brief Executes a command and returns its return-value as string.
         @param command A string containing the command
-        @param error A pointer to a value (or NULL) where the error-code should be written to (see @ref CommandExecutorErrorCodes "error codes")
+        @param error A pointer to a value (or nullptr) where the error-code should be written to (see @ref CommandExecutorErrorCodes "error codes")
         @param useTcl If true, the command is passed to tcl (see TclBind)
         @return Returns the return-value of the command converted to a string (or "" if there's no return value)
@@ -275,5 +275,5 @@
         {
             // it is valid - copy the executor of this command
-            ExecutorPtr executor = new Executor(*evaluation.getConsoleCommand()->getExecutor().get());
+            ExecutorPtr executor = std::make_shared<Executor>(*evaluation.getConsoleCommand()->getExecutor().get());
 
             // evaluate the arguments and if this returns no error, store them as default values
Index: code/trunk/src/libraries/core/command/CommandExecutor.h
===================================================================
--- code/trunk/src/libraries/core/command/CommandExecutor.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/CommandExecutor.h	(revision 11071)
@@ -113,15 +113,15 @@
             static int execute(const std::string& command, bool useTcl = true, bool printErrors = true); // tolua_export
 
-            static MultiType queryMT(const std::string& command, int* error = 0, bool useTcl = true);
-            static std::string query(const std::string& command, int* error = 0, bool useTcl = true); // tolua_export
+            static MultiType queryMT(const std::string& command, int* error = nullptr, bool useTcl = true);
+            static std::string query(const std::string& command, int* error = NULL, bool useTcl = true); // tolua_export
 
             static CommandEvaluation evaluate(const std::string& command);
 
-            static const int Success = 0;       ///< Error code for "success" (or no error)
-            static const int Inexistent = 1;    ///< Error code if the command doesn't exist
-            static const int Incomplete = 2;    ///< Error code if the command needs more arguments
-            static const int Deactivated = 3;   ///< Error code if the command is not active
-            static const int Denied = 4;        ///< Error code if the command needs a different access level
-            static const int Error = 5;         ///< Error code if the command returned an error
+            static constexpr int Success = 0;       ///< Error code for "success" (or no error)
+            static constexpr int Inexistent = 1;    ///< Error code if the command doesn't exist
+            static constexpr int Incomplete = 2;    ///< Error code if the command needs more arguments
+            static constexpr int Deactivated = 3;   ///< Error code if the command is not active
+            static constexpr int Denied = 4;        ///< Error code if the command needs a different access level
+            static constexpr int Error = 5;         ///< Error code if the command returned an error
 
             static std::string getErrorDescription(int error);
@@ -132,7 +132,10 @@
 
         private:
-            CommandExecutor() {}                            ///< Empty constructor
-            CommandExecutor(const CommandExecutor& other);  ///< Not implemented copy-constructor
-            ~CommandExecutor() {}                           ///< Empty destructor
+            CommandExecutor() = default;                      ///< Empty constructor
+            ~CommandExecutor() = default;                     ///< Empty destructor
+
+            // non-copyable:
+            CommandExecutor(const CommandExecutor&) = delete;
+            CommandExecutor& operator=(const CommandExecutor&) = delete;
 
             static CommandExecutor& getInstance();
Index: code/trunk/src/libraries/core/command/ConsoleCommand.cc
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommand.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/ConsoleCommand.cc	(revision 11071)
@@ -50,6 +50,6 @@
     */
     ConsoleCommand::ConsoleCommand(const std::string& name, const ExecutorPtr& executor, bool bInitialized)
-    {
-        this->init("", name, executor, bInitialized);
+        : ConsoleCommand("", name, executor, bInitialized)
+    {
     }
 
@@ -75,6 +75,6 @@
         this->baseFunctor_ = executor->getFunctor();
 
-        for (size_t i = 0; i < MAX_FUNCTOR_ARGUMENTS; ++i)
-            this->argumentCompleter_[i] = 0;
+        for (ArgumentCompleter*& completer : this->argumentCompleter_)
+            completer = nullptr;
 
         this->keybindMode_ = KeybindMode::OnPress;
@@ -84,5 +84,5 @@
             this->executor_ = executor;
 
-        this->names_.push_back(CommandName(group, name));
+        this->names_.emplace_back(group, name);
     }
 
@@ -99,5 +99,5 @@
     ConsoleCommand& ConsoleCommand::addShortcut()
     {
-        this->names_.push_back(CommandName("", this->baseName_));
+        this->names_.emplace_back("", this->baseName_);
         return *this;
     }
@@ -108,5 +108,5 @@
     ConsoleCommand& ConsoleCommand::addShortcut(const std::string&  name)
     {
-        this->names_.push_back(CommandName("", name));
+        this->names_.emplace_back("", name);
         return *this;
     }
@@ -117,5 +117,5 @@
     ConsoleCommand& ConsoleCommand::addGroup(const std::string& group)
     {
-        this->names_.push_back(CommandName(group, this->baseName_));
+        this->names_.emplace_back(group, this->baseName_);
         return *this;
     }
@@ -126,5 +126,5 @@
     ConsoleCommand& ConsoleCommand::addGroup(const std::string& group, const std::string&  name)
     {
-        this->names_.push_back(CommandName(group, name));
+        this->names_.emplace_back(group, name);
         return *this;
     }
@@ -320,5 +320,5 @@
     {
         if (this->executor_)
-            this->pushFunction(new Executor(*this->executor_.get()));
+            this->pushFunction(std::make_shared<Executor>(*this->executor_.get()));
         else
             orxout(internal_error, context::commands) << "Couldn't push copy of executor in console command \"" << this->baseName_ << "\", no executor set." << endl;
@@ -348,10 +348,10 @@
 
     /**
-        @brief Sets the functor to NULL (which also deactivates the command).
+        @brief Sets the functor to nullptr (which also deactivates the command).
     */
     void ConsoleCommand::resetFunction()
     {
         if (this->executor_)
-            this->executor_->setFunctor(0);
+            this->executor_->setFunctor(nullptr);
         this->objectStack_.clear();
     }
@@ -405,5 +405,5 @@
     void ConsoleCommand::popObject()
     {
-        void* newobject = 0;
+        void* newobject = nullptr;
         if (!this->objectStack_.empty())
         {
@@ -422,5 +422,5 @@
             return this->executor_->getFunctor()->getRawObjectPointer();
         else
-            return 0;
+            return nullptr;
     }
 
@@ -528,5 +528,5 @@
             return this->argumentCompleter_[index];
         else
-            return 0;
+            return nullptr;
     }
 
Index: code/trunk/src/libraries/core/command/ConsoleCommand.h
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommand.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/ConsoleCommand.h	(revision 11071)
@@ -60,21 +60,18 @@
     }
 
-    namespace AccessLevel
+    /**
+        @brief Possible access levels: A command can only be executed if the program is in the state which is requested by the access level.
+    */
+    enum class AccessLevel
     {
-        /**
-            @brief Possible access levels: A command can only be executed if the program is in the state which is requested by the access level.
-        */
-        enum Enum
-        {
-            All,
-            Standalone,
-            Master,
-            Server,
-            Client,
-            Online,
-            Offline,
-            None
-        };
-    }
+        All,
+        Standalone,
+        Master,
+        Server,
+        Client,
+        Online,
+        Offline,
+        None
+    };
 
     /**
@@ -195,5 +192,5 @@
                         { if (this->command_) { this->command_->popFunction(); } return *this; }
 
-                    /// Sets the current function-pointer to NULL, which also deactivates the command.
+                    /// Sets the current function-pointer to nullptr, which also deactivates the command.
                     inline ConsoleCommandManipulator& resetFunction()
                         { if (this->command_) { this->command_->resetFunction(); } return *this; }
@@ -205,5 +202,5 @@
                     inline ConsoleCommandManipulator& pushObject(void* object)
                         { if (this->command_) { this->command_->pushObject(object); } return *this; }
-                    /// Removes the current object from the object-stack and restores the old object (or NULL if there's no object left on the stack).
+                    /// Removes the current object from the object-stack and restores the old object (or nullptr if there's no object left on the stack).
                     inline ConsoleCommandManipulator& popObject()
                         { if (this->command_) { this->command_->popObject(); } return *this; }
@@ -249,5 +246,5 @@
 
                     /// Changes the access level of the command.
-                    inline ConsoleCommandManipulator& accessLevel(AccessLevel::Enum level)
+                    inline ConsoleCommandManipulator& accessLevel(AccessLevel level)
                         { if (this->command_) { this->command_->accessLevel(level); } return *this; }
 
@@ -332,8 +329,8 @@
 
             /// Changes the access level of the command.
-            inline ConsoleCommand& accessLevel(AccessLevel::Enum level)
+            inline ConsoleCommand& accessLevel(AccessLevel level)
                 { this->accessLevel_ = level; return *this; }
             /// Returns the access level of the command.
-            inline AccessLevel::Enum getAccessLevel() const
+            inline AccessLevel getAccessLevel() const
                 { return this->accessLevel_; }
 
@@ -394,5 +391,5 @@
             bool bActive_;                                                  ///< True if the command should be active (it can still be inactive, for example if the function is missing)
             bool bHidden_;                                                  ///< True if the command is hidden (it is still executable, but not visible in the list of available commands)
-            AccessLevel::Enum accessLevel_;                                 ///< The access level (the state of the game in which you can access the command)
+            AccessLevel accessLevel_;                                       ///< The access level (the state of the game in which you can access the command)
             std::string baseName_;                                          ///< The name that was first assigned to the command
             std::vector<CommandName> names_;                                ///< All names and aliases of this command
Index: code/trunk/src/libraries/core/command/ConsoleCommandIncludes.h
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommandIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/ConsoleCommandIncludes.h	(revision 11071)
@@ -316,6 +316,6 @@
             ~StaticallyInitializedConsoleCommand() { delete command_; }
 
-            virtual void load();
-            virtual void unload();
+            virtual void load() override;
+            virtual void unload() override;
 
             inline ConsoleCommand& getCommand()
@@ -331,5 +331,5 @@
         @brief Returns a manipulator for a command with the given name.
 
-        @note If the command doesn't exist, the manipulator contains a NULL pointer to the command,
+        @note If the command doesn't exist, the manipulator contains a nullptr to the command,
         but it can still be used without checks, because all functions of ConsoleCommandManipulator
         check internally if the command exists.
@@ -340,5 +340,5 @@
         @brief Returns a manipulator for a command with the given group and name.
 
-        @note If the command doesn't exist, the manipulator contains a NULL pointer to the command,
+        @note If the command doesn't exist, the manipulator contains a nullptr to the command,
         but it can still be used without checks, because all functions of ConsoleCommandManipulator
         check internally if the command exists.
Index: code/trunk/src/libraries/core/command/ConsoleCommandManager.cc
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommandManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/ConsoleCommandManager.cc	(revision 11071)
@@ -39,5 +39,5 @@
 namespace orxonox
 {
-    ConsoleCommandManager* ConsoleCommandManager::singletonPtr_s = 0;
+    ConsoleCommandManager* ConsoleCommandManager::singletonPtr_s = nullptr;
 
     /**
@@ -50,5 +50,5 @@
     {
         // find the group
-        std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = this->commandMap_.find(group);
+        std::map<std::string, std::map<std::string, ConsoleCommand*>>::const_iterator it_group = this->commandMap_.find(group);
         if (it_group != this->commandMap_.end())
         {
@@ -68,5 +68,5 @@
                 orxout(internal_error, context::commands) << "Couldn't find console command with group \"" << group << "\" and name \"" << name << "\"" << endl;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -83,5 +83,5 @@
 
         // find the group
-        std::map<std::string, std::map<std::string, ConsoleCommand*> >::const_iterator it_group = this->commandMapLC_.find(groupLC);
+        std::map<std::string, std::map<std::string, ConsoleCommand*>>::const_iterator it_group = this->commandMapLC_.find(groupLC);
         if (it_group != this->commandMapLC_.end())
         {
@@ -101,5 +101,5 @@
                 orxout(internal_error, context::commands) << "Couldn't find console command with group \"" << group << "\" and name \"" << name << "\"" << endl;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -125,5 +125,5 @@
 
         // check if a command with this name already exists
-        if (this->getCommand(group, name) != 0)
+        if (this->getCommand(group, name) != nullptr)
         {
             if (group == "")
@@ -146,5 +146,5 @@
     {
         // iterate through all groups
-        for (std::map<std::string, std::map<std::string, ConsoleCommand*> >::iterator it_group = this->commandMap_.begin(); it_group != this->commandMap_.end(); )
+        for (std::map<std::string, std::map<std::string, ConsoleCommand*>>::iterator it_group = this->commandMap_.begin(); it_group != this->commandMap_.end(); )
         {
             // iterate through all commands of each group
@@ -168,5 +168,5 @@
 
         // iterate through all groups
-        for (std::map<std::string, std::map<std::string, ConsoleCommand*> >::iterator it_group = this->commandMapLC_.begin(); it_group != this->commandMapLC_.end(); )
+        for (std::map<std::string, std::map<std::string, ConsoleCommand*>>::iterator it_group = this->commandMapLC_.begin(); it_group != this->commandMapLC_.end(); )
         {
             // iterate through all commands of each group
Index: code/trunk/src/libraries/core/command/ConsoleCommandManager.h
===================================================================
--- code/trunk/src/libraries/core/command/ConsoleCommandManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/ConsoleCommandManager.h	(revision 11071)
@@ -39,4 +39,6 @@
 #include "util/Singleton.h"
 
+#include <map>
+
 namespace orxonox
 {
@@ -54,8 +56,8 @@
 
             /// Returns the map with all groups and commands.
-            inline const std::map<std::string, std::map<std::string, ConsoleCommand*> >& getCommands()
+            inline const std::map<std::string, std::map<std::string, ConsoleCommand*>>& getCommands()
                 { return this->commandMap_; }
             /// Returns the map with all groups and commands in lowercase.
-            inline const std::map<std::string, std::map<std::string, ConsoleCommand*> >& getCommandsLC()
+            inline const std::map<std::string, std::map<std::string, ConsoleCommand*>>& getCommandsLC()
                 { return this->commandMapLC_; }
 
@@ -71,6 +73,6 @@
 
         private:
-            std::map<std::string, std::map<std::string, ConsoleCommand*> > commandMap_;
-            std::map<std::string, std::map<std::string, ConsoleCommand*> > commandMapLC_;
+            std::map<std::string, std::map<std::string, ConsoleCommand*>> commandMap_;
+            std::map<std::string, std::map<std::string, ConsoleCommand*>> commandMapLC_;
 
             static ConsoleCommandManager* singletonPtr_s;
Index: code/trunk/src/libraries/core/command/Executor.cc
===================================================================
--- code/trunk/src/libraries/core/command/Executor.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/Executor.cc	(revision 11071)
@@ -67,14 +67,7 @@
 
     /**
-        @brief Destructor
-    */
-    Executor::~Executor()
-    {
-    }
-
-    /**
         @brief Calls the wrapped function with arguments that are passed in a string.
         @param arguments The arguments that should be passed to the function, separated by @a delimiter
-        @param error A pointer to a variable (or NULL) that is used to store the error code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
+        @param error A pointer to a variable (or nullptr) that is used to store the error code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
         @param delimiter The delimiter that is used to separate the arguments in the string @a arguments
         @param bPrintError If true, errors are printed to the console if the function couldn't be executed with the given arguments
@@ -89,5 +82,5 @@
         @brief Calls the wrapped function with arguments that are passed as tokens in a SubString
         @param arguments The arguments that should be passed to the function
-        @param error A pointer to a variable (or NULL) that is used to store the error code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
+        @param error A pointer to a variable (or nullptr) that is used to store the error code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
         @param delimiter The delimiter that was used to separate the arguments in the SubString @a arguments (used to join the surplus arguments)
         @param bPrintError If true, errors are printed to the console if the function couldn't be executed with the given arguments
@@ -127,5 +120,5 @@
         @param arguments The arguments that should be converted
         @param arg An array of MultiType where the converted arguments will be stored
-        @param error A pointer to a variable (or NULL) that is used to store the error code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
+        @param error A pointer to a variable (or nullptr) that is used to store the error code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
         @param delimiter The delimiter that was used to separate the arguments in the SubString @a arguments (used to join the surplus arguments)
         @return Returns the number of evaluated arguments
Index: code/trunk/src/libraries/core/command/Executor.h
===================================================================
--- code/trunk/src/libraries/core/command/Executor.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/Executor.h	(revision 11071)
@@ -42,6 +42,6 @@
     orxonox::Executor is used to wrap an orxonox::Functor and to store default values for
     its parameters. Usually one uses the function createExecutor() to create a new executor.
-    This function returns an orxonox::ExecutorPtr which is a typedef of @ref orxonox::SharedPtr
-    "SharedPtr<Executor>", used to manage the pointer to the executor.
+    This function returns an orxonox::ExecutorPtr which is a typedef of "std::shared_ptr<Executor>",
+    used to manage the pointer to the executor.
 
     Executors are mostly used to execute callbacks. Because some callback functions need arguments,
@@ -74,6 +74,6 @@
     @endcode
 
-    Because executors that were created with createExecutor() are managed by an orxonox::SharedPtr,
-    they don't need to be deleted after usage.
+    Executors don't need to be deleted after usage normally because they are managed by an
+    std::shared_ptr when they were created with createExecutor().
 */
 
@@ -100,5 +100,5 @@
             Executor(const FunctorPtr& functor, const std::string& name = "");
             Executor(const Executor& other);
-            virtual ~Executor();
+            virtual ~Executor() = default;
 
             /// Calls the wrapped function with 0 arguments. If the function needs more arguments, the executor's default values are used.
@@ -121,8 +121,8 @@
                 { return (*this->functor_)(arg1, arg2, arg3, arg4, arg5); }
 
-            MultiType parse(const std::string& arguments, int* error = 0, const std::string& delimiter = " ", bool bPrintError = false) const;
-            MultiType parse(const SubString& arguments, int* error = 0, const std::string& delimiter = " ", bool bPrintError = false) const;
-
-            int evaluateArguments(const SubString& arguments, MultiType arg[MAX_FUNCTOR_ARGUMENTS], int* error = 0, const std::string& delimiter = " ") const;
+            MultiType parse(const std::string& arguments, int* error = nullptr, const std::string& delimiter = " ", bool bPrintError = false) const;
+            MultiType parse(const SubString& arguments, int* error = nullptr, const std::string& delimiter = " ", bool bPrintError = false) const;
+
+            int evaluateArguments(const SubString& arguments, MultiType arg[MAX_FUNCTOR_ARGUMENTS], int* error = nullptr, const std::string& delimiter = " ") const;
 
             /// Changes the functor.
@@ -147,5 +147,5 @@
                 { return this->functor_->hasReturnvalue(); }
             /// Returns the type of the wrapped function (static or member).
-            inline Functor::Type::Enum getType() const
+            inline Functor::Type getType() const
                 { return this->functor_->getType(); }
             /// Returns the name of the type of a parameter with given index (the first parameter has index 0).
@@ -249,5 +249,5 @@
 
             /// Overloads Executor::parse() with an additional object-pointer.
-            MultiType parse(T* object, const std::string& arguments, int* error = 0, const std::string& delimiter = " ", bool bPrintError = false) const
+            MultiType parse(T* object, const std::string& arguments, int* error = nullptr, const std::string& delimiter = " ", bool bPrintError = false) const
             {
                 T* oldobject = this->functorMember_->getObject();
@@ -267,5 +267,5 @@
     inline ExecutorPtr createExecutor(const FunctorPtr& functor, const std::string& name = "")
     {
-        return new Executor(functor, name);
+        return std::make_shared<Executor>(functor, name);
     }
 
@@ -274,5 +274,5 @@
     inline ExecutorMemberPtr<T> createExecutor(const FunctorMemberPtr<T>& functor, const std::string& name = "")
     {
-        return new ExecutorMember<T>(functor, name);
+        return std::make_shared<ExecutorMember<T>>(functor, name);
     }
 
@@ -280,5 +280,5 @@
     inline ExecutorStaticPtr createExecutor(const FunctorStaticPtr& functor, const std::string& name = "")
     {
-        return new ExecutorStatic(functor, name);
+        return std::make_shared<ExecutorStatic>(functor, name);
     }
 }
Index: code/trunk/src/libraries/core/command/ExecutorPtr.h
===================================================================
--- code/trunk/src/libraries/core/command/ExecutorPtr.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/ExecutorPtr.h	(revision 11071)
@@ -32,7 +32,7 @@
     @brief Typedefs and definitions of ExecutorPtr, ExecutorStaticPtr, and ExecutorMemberPtr
 
-    Instances of orxonox::Executor are usually managed by an orxonox::SharedPtr. This ensures
+    Instances of orxonox::Executor are usually managed by an std::shared_ptr. This ensures
     that Executors will be destroyed after usage. To make things easier, there's a typedef
-    that defines ExecutorPtr as SharedPtr<Executor>.
+    that defines ExecutorPtr as std::shared_ptr<Executor>.
 
     Because there's not only orxonox::Executor, but also orxonox::ExecutorStatic, and
@@ -49,23 +49,12 @@
 
 #include "core/CorePrereqs.h"
-#include "util/SharedPtr.h"
+#include <memory>
 
 namespace orxonox
 {
-    /// ExecutorPtr is just a typedef of SharedPtr
-    typedef SharedPtr<Executor> ExecutorPtr;
-
-    /// ExecutorStaticPtr is just a typedef of SharedChildPtr
-    typedef SharedChildPtr<ExecutorStatic, ExecutorPtr> ExecutorStaticPtr;
-
-    /// It's not possible to use a typedef for ExecutorMemberPtr<T>, so we have to create a child-class instead. It inherits all functions from SharedChildPtr, but needs to (re-)implement some constructors.
+    using ExecutorPtr = std::shared_ptr<Executor>;
+    using ExecutorStaticPtr = std::shared_ptr<ExecutorStatic>;
     template <class T>
-    class ExecutorMemberPtr : public SharedChildPtr<ExecutorMember<T>, ExecutorPtr>
-    {
-        public:
-            inline ExecutorMemberPtr() : SharedChildPtr<ExecutorMember<T>, ExecutorPtr>() {}
-            inline ExecutorMemberPtr(ExecutorMember<T>* pointer) : SharedChildPtr<ExecutorMember<T>, ExecutorPtr>(pointer) {}
-            inline ExecutorMemberPtr(const SharedPtr<ExecutorMember<T> >& other) : SharedChildPtr<ExecutorMember<T>, ExecutorPtr>(other) {}
-    };
+    using ExecutorMemberPtr = std::shared_ptr<ExecutorMember<T>>;
 }
 
Index: code/trunk/src/libraries/core/command/Functor.h
===================================================================
--- code/trunk/src/libraries/core/command/Functor.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/Functor.h	(revision 11071)
@@ -40,7 +40,7 @@
 
     To create a Functor, the helper function createFunctor() is used. It returns an instance
-    of orxonox::FunctorPtr which is simply a typedef of @ref orxonox::SharedPtr "SharedPtr<Functor>".
-    This means you don't have to delete the Functor after using it, because it is managed
-    by the SharedPtr.
+    of orxonox::FunctorPtr which is simply a typedef of "std::shared_ptr<Functor>". This
+    means you don't have to delete the Functor after using it, because it is managed
+    by the std::shared_ptr.
 
     Example:
@@ -176,16 +176,13 @@
     {
         public:
-            struct Type
-            {
-                /// Defines the type of a function (static or member)
-                enum Enum
-                {
-                    Static,
-                    Member
-                };
+            /// Defines the type of a function (static or member)
+            enum class Type
+            {
+                Static,
+                Member
             };
 
         public:
-            virtual ~Functor() {}
+            virtual ~Functor() = default;
 
             /// Calls the function-pointer with up to five arguments. In case of a member-function, the assigned object-pointer is used to call the function. @return Returns the return-value of the function (if any; MultiType::Null otherwise)
@@ -196,5 +193,5 @@
 
             /// Returns the type of the function: static or member.
-            virtual Type::Enum getType() const = 0;
+            virtual Type getType() const = 0;
             /// Returns the number of parameters of the function.
             virtual unsigned int getParamCount() const = 0;
@@ -215,5 +212,5 @@
             virtual void* getRawObjectPointer() const = 0;
 
-            /// Enables or disables the safe mode which causes the functor to change the object pointer to NULL if the object is deleted (only member functors).
+            /// Enables or disables the safe mode which causes the functor to change the object pointer to nullptr if the object is deleted (only member functors).
             virtual void setSafeMode(bool bSafeMode) = 0;
 
@@ -242,12 +239,12 @@
         public:
             /// Constructor: Stores the object-pointer.
-            FunctorMember(O* object = 0) : object_(object), bSafeMode_(false) {}
+            FunctorMember(O* object = nullptr) : object_(object), bSafeMode_(false) {}
             virtual ~FunctorMember() { if (this->bSafeMode_) { this->unregisterObject(this->object_); } }
 
-            /// Calls the function-pointer with up to five arguments and an object. In case of a static-function, the object can be NULL. @return Returns the return-value of the function (if any; MultiType::Null otherwise)
+            /// Calls the function-pointer with up to five arguments and an object. In case of a static-function, the object can be nullptr. @return Returns the return-value of the function (if any; MultiType::Null otherwise)
             virtual MultiType operator()(O* object, const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null) = 0;
 
             // see Functor::operator()()
-            MultiType operator()(const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null)
+            virtual MultiType operator()(const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null) override
             {
                 // call the function if an object was assigned
@@ -262,5 +259,5 @@
 
             // see Functor::getType()
-            inline Functor::Type::Enum getType() const
+            virtual inline Functor::Type getType() const override
                 { return Functor::Type::Member; }
 
@@ -280,12 +277,12 @@
 
             // see Functor::setRawObjectPointer()
-            inline void setRawObjectPointer(void* object)
+            virtual inline void setRawObjectPointer(void* object) override
                 { this->setObject((O*)object); }
             // see Functor::getRawObjectPointer()
-            inline void* getRawObjectPointer() const
+            virtual inline void* getRawObjectPointer() const override
                 { return this->object_; }
 
             // see Functor::setSafeMode()
-            inline void setSafeMode(bool bSafeMode)
+            virtual inline void setSafeMode(bool bSafeMode) override
             {
                 if (bSafeMode == this->bSafeMode_)
@@ -301,17 +298,22 @@
 
         protected:
-            /// Casts the object and registers as destruction listener.
-            inline void registerObject(O* object)
-                { Destroyable* base = dynamic_cast<Destroyable*>(object); if (base) { this->registerAsDestructionListener(base); } }
-            /// Casts the object and unregisters as destruction listener.
-            inline void unregisterObject(O* object)
-                { Destroyable* base = dynamic_cast<Destroyable*>(object); if (base) { this->unregisterAsDestructionListener(base); } }
-
-            /// Will be called by Destroyable::~Destroyable() if the stored object is deleted and the Functor is in safe mode.
-            inline void objectDeleted()
-                { this->object_ = 0; }
-
-            O* object_;     ///< The stored object-pointer, used to execute a member-function (or NULL for static functions)
-            bool bSafeMode_; ///< If true, the functor is in safe mode and registers itself as listener at the object and changes the pointer to NULL if the object is deleted
+            /// Casts the object and registers as destruction listener if the object is a Destroyable.
+            inline void registerObject(Destroyable* object)
+                { this->registerAsDestructionListener(object); }
+
+            inline void registerObject(void* object) {}
+
+            /// Casts the object and unregisters as destruction listener if the object is a Destroyable.
+            inline void unregisterObject(Destroyable* object)
+                { this->unregisterAsDestructionListener(object); }
+
+            inline void unregisterObject(void* object) {}
+
+            /// Will be called by Destroyable::~Destroyable() if the stored object is a Destroyable and deleted and the Functor is in safe mode.
+            virtual inline void objectDeleted() override
+                { this->object_ = nullptr; }
+
+            O* object_;     ///< The stored object-pointer, used to execute a member-function (or nullptr for static functions)
+            bool bSafeMode_; ///< If true, the functor is in safe mode and registers itself as listener at the object and changes the pointer to nullptr if the object is deleted
     };
 
@@ -322,28 +324,28 @@
         public:
             /// Constructor: Stores the object-pointer.
-            FunctorMember(void* object = 0) {}
-
-            /// Calls the function-pointer with up to five arguments and an object. In case of a static-function, the object can be NULL. @return Returns the return-value of the function (if any; MultiType::Null otherwise)
+            FunctorMember(void* object = nullptr) {}
+
+            /// Calls the function-pointer with up to five arguments and an object. In case of a static-function, the object can be nullptr. @return Returns the return-value of the function (if any; MultiType::Null otherwise)
             virtual MultiType operator()(void* object, const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null) = 0;
 
             // see Functor::operator()()
-            MultiType operator()(const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null)
-            {
-                return (*this)((void*)0, param1, param2, param3, param4, param5);
+            virtual MultiType operator()(const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null) override
+            {
+                return (*this)((void*)nullptr, param1, param2, param3, param4, param5);
             }
 
             // see Functor::getType()
-            inline Functor::Type::Enum getType() const
+            virtual inline Functor::Type getType() const override
                 { return Functor::Type::Static; }
 
             // see Functor::setRawObjectPointer()
-            inline void setRawObjectPointer(void*)
+            virtual inline void setRawObjectPointer(void*) override
                 { orxout(internal_warning) << "Can't assign an object pointer to a static functor" << endl; }
             // see Functor::getRawObjectPointer()
-            inline void* getRawObjectPointer() const
-                { return 0; }
+            virtual inline void* getRawObjectPointer() const override
+                { return nullptr; }
 
             // see Functor::setSafeMode()
-            inline void setSafeMode(bool) {}
+            virtual inline void setSafeMode(bool) override {}
     };
 
@@ -352,12 +354,12 @@
 
     /**
-        @brief FunctorPointer is a child class of FunctorMember and expands it with a function-pointer.
-        @param F The type of the function-pointer
-        @param O The type of the function's class (or void if it's a static function)
+        @brief FunctorPointer is a child class of FunctorMember and extends it with a function-pointer (or a function-object).
+        @param F The type of the function-pointer (or the function-object)
+        @param O The type of the function's class (or void if it's a static function or a function-object)
 
         The template FunctorPointer has an additional template parameter that defines the type
-        of the function-pointer. This can be handy if you want to get or set the function-pointer.
-        You can then use a static_cast to cast a Functor to FunctorPointer if you know the type
-        of the function-pointer.
+        of the function-pointer (or the function-object). This can be handy if you want to get
+        or set the function-pointer (or the function-object). You can then use a static_cast
+        to cast a Functor to FunctorPointer if you know the type of the function.
 
         However FunctorPointer is not aware of the types of the different parameters or the
@@ -369,5 +371,5 @@
         public:
             /// Constructor: Initializes the base class and stores the function-pointer.
-            FunctorPointer(F functionPointer, O* object = 0) : FunctorMember<O>(object), functionPointer_(functionPointer) {}
+            FunctorPointer(F functionPointer, O* object = nullptr) : FunctorMember<O>(object), functionPointer_(functionPointer) {}
 
             /// Changes the function-pointer.
@@ -378,8 +380,4 @@
                 { return this->functionPointer_; }
 
-            // see Functor::getFullIdentifier()
-            const std::type_info& getFullIdentifier() const
-                { return typeid(F); }
-
         protected:
             F functionPointer_;     ///< The stored function-pointer
@@ -388,55 +386,19 @@
     namespace detail
     {
-        // Helper class to get the type of the function pointer with the given class, parameters, return-value, and constness
-        template <class R, class O, bool isconst, class P1, class P2, class P3, class P4, class P5> struct FunctionPointer                                            { typedef R (O::*Type)(P1, P2, P3, P4, P5); };
-        template <class R, class O, class P1, class P2, class P3, class P4, class P5>               struct FunctionPointer<R, O, false, P1, P2, P3, P4, P5>           { typedef R (O::*Type)(P1, P2, P3, P4, P5); };
-        template <class R, class O, class P1, class P2, class P3, class P4>                         struct FunctionPointer<R, O, false, P1, P2, P3, P4, void>         { typedef R (O::*Type)(P1, P2, P3, P4); };
-        template <class R, class O, class P1, class P2, class P3>                                   struct FunctionPointer<R, O, false, P1, P2, P3, void, void>       { typedef R (O::*Type)(P1, P2, P3); };
-        template <class R, class O, class P1, class P2>                                             struct FunctionPointer<R, O, false, P1, P2, void, void, void>     { typedef R (O::*Type)(P1, P2); };
-        template <class R, class O, class P1>                                                       struct FunctionPointer<R, O, false, P1, void, void, void, void>   { typedef R (O::*Type)(P1); };
-        template <class R, class O>                                                                 struct FunctionPointer<R, O, false, void, void, void, void, void> { typedef R (O::*Type)(); };
-        template <class R, class O, class P1, class P2, class P3, class P4, class P5> struct FunctionPointer<R, O, true, P1, P2, P3, P4, P5>           { typedef R (O::*Type)(P1, P2, P3, P4, P5) const; };
-        template <class R, class O, class P1, class P2, class P3, class P4>           struct FunctionPointer<R, O, true, P1, P2, P3, P4, void>         { typedef R (O::*Type)(P1, P2, P3, P4) const; };
-        template <class R, class O, class P1, class P2, class P3>                     struct FunctionPointer<R, O, true, P1, P2, P3, void, void>       { typedef R (O::*Type)(P1, P2, P3) const; };
-        template <class R, class O, class P1, class P2>                               struct FunctionPointer<R, O, true, P1, P2, void, void, void>     { typedef R (O::*Type)(P1, P2) const; };
-        template <class R, class O, class P1>                                         struct FunctionPointer<R, O, true, P1, void, void, void, void>   { typedef R (O::*Type)(P1) const; };
-        template <class R, class O>                                                   struct FunctionPointer<R, O, true, void, void, void, void, void> { typedef R (O::*Type)() const; };
-        template <class R, class P1, class P2, class P3, class P4, class P5> struct FunctionPointer<R, void, false, P1, P2, P3, P4, P5>           { typedef R (*Type)(P1, P2, P3, P4, P5); };
-        template <class R, class P1, class P2, class P3, class P4>           struct FunctionPointer<R, void, false, P1, P2, P3, P4, void>         { typedef R (*Type)(P1, P2, P3, P4); };
-        template <class R, class P1, class P2, class P3>                     struct FunctionPointer<R, void, false, P1, P2, P3, void, void>       { typedef R (*Type)(P1, P2, P3); };
-        template <class R, class P1, class P2>                               struct FunctionPointer<R, void, false, P1, P2, void, void, void>     { typedef R (*Type)(P1, P2); };
-        template <class R, class P1>                                         struct FunctionPointer<R, void, false, P1, void, void, void, void>   { typedef R (*Type)(P1); };
-        template <class R>                                                   struct FunctionPointer<R, void, false, void, void, void, void, void> { typedef R (*Type)(); };
-
-        // Helper class, used to call a function-pointer with a given object and parameters and to return its return-value (if available)
-        template <class R, class O, bool isconst, class P1, class P2, class P3, class P4, class P5> struct FunctorCaller                                              { static inline MultiType call(typename detail::FunctionPointer<R, O, isconst, P1, P2, P3, P4, P5>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) { return (object->*functionPointer)(param1, param2, param3, param4, param5); } };
-        template <class R, class O, bool isconst, class P1, class P2, class P3, class P4>           struct FunctorCaller<R, O, isconst, P1, P2, P3, P4, void>         { static inline MultiType call(typename detail::FunctionPointer<R, O, isconst, P1, P2, P3, P4, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType&) { return (object->*functionPointer)(param1, param2, param3, param4); } };
-        template <class R, class O, bool isconst, class P1, class P2, class P3>                     struct FunctorCaller<R, O, isconst, P1, P2, P3, void, void>       { static inline MultiType call(typename detail::FunctionPointer<R, O, isconst, P1, P2, P3, void, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType&, const MultiType&) { return (object->*functionPointer)(param1, param2, param3); } };
-        template <class R, class O, bool isconst, class P1, class P2>                               struct FunctorCaller<R, O, isconst, P1, P2, void, void, void>     { static inline MultiType call(typename detail::FunctionPointer<R, O, isconst, P1, P2, void, void, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType&, const MultiType&, const MultiType&) { return (object->*functionPointer)(param1, param2); } };
-        template <class R, class O, bool isconst, class P1>                                         struct FunctorCaller<R, O, isconst, P1, void, void, void, void>   { static inline MultiType call(typename detail::FunctionPointer<R, O, isconst, P1, void, void, void, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { return (object->*functionPointer)(param1); } };
-        template <class R, class O, bool isconst>                                                   struct FunctorCaller<R, O, isconst, void, void, void, void, void> { static inline MultiType call(typename detail::FunctionPointer<R, O, isconst, void, void, void, void, void>::Type functionPointer, O* object, const MultiType&, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { return (object->*functionPointer)(); } };
-        template <class O, bool isconst, class P1, class P2, class P3, class P4, class P5> struct FunctorCaller<void, O, isconst, P1, P2, P3, P4, P5>           { static inline MultiType call(typename detail::FunctionPointer<void, O, isconst, P1, P2, P3, P4, P5>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) { (object->*functionPointer)(param1, param2, param3, param4, param5); return MultiType::Null; } };
-        template <class O, bool isconst, class P1, class P2, class P3, class P4>           struct FunctorCaller<void, O, isconst, P1, P2, P3, P4, void>         { static inline MultiType call(typename detail::FunctionPointer<void, O, isconst, P1, P2, P3, P4, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType&) { (object->*functionPointer)(param1, param2, param3, param4); return MultiType::Null; } };
-        template <class O, bool isconst, class P1, class P2, class P3>                     struct FunctorCaller<void, O, isconst, P1, P2, P3, void, void>       { static inline MultiType call(typename detail::FunctionPointer<void, O, isconst, P1, P2, P3, void, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType&, const MultiType&) { (object->*functionPointer)(param1, param2, param3); return MultiType::Null; } };
-        template <class O, bool isconst, class P1, class P2>                               struct FunctorCaller<void, O, isconst, P1, P2, void, void, void>     { static inline MultiType call(typename detail::FunctionPointer<void, O, isconst, P1, P2, void, void, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType& param2, const MultiType&, const MultiType&, const MultiType&) { (object->*functionPointer)(param1, param2); return MultiType::Null; } };
-        template <class O, bool isconst, class P1>                                         struct FunctorCaller<void, O, isconst, P1, void, void, void, void>   { static inline MultiType call(typename detail::FunctionPointer<void, O, isconst, P1, void, void, void, void>::Type functionPointer, O* object, const MultiType& param1, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { (object->*functionPointer)(param1); return MultiType::Null; } };
-        template <class O, bool isconst>                                                   struct FunctorCaller<void, O, isconst, void, void, void, void, void> { static inline MultiType call(typename detail::FunctionPointer<void, O, isconst, void, void, void, void, void>::Type functionPointer, O* object, const MultiType&, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { (object->*functionPointer)(); return MultiType::Null; } };
-        template <class R, bool isconst, class P1, class P2, class P3, class P4, class P5> struct FunctorCaller<R, void, isconst, P1, P2, P3, P4, P5>           { static inline MultiType call(typename detail::FunctionPointer<R, void, isconst, P1, P2, P3, P4, P5>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) { return (*functionPointer)(param1, param2, param3, param4, param5); } };
-        template <class R, bool isconst, class P1, class P2, class P3, class P4>           struct FunctorCaller<R, void, isconst, P1, P2, P3, P4, void>         { static inline MultiType call(typename detail::FunctionPointer<R, void, isconst, P1, P2, P3, P4, void>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType&) { return (*functionPointer)(param1, param2, param3, param4); } };
-        template <class R, bool isconst, class P1, class P2, class P3>                     struct FunctorCaller<R, void, isconst, P1, P2, P3, void, void>       { static inline MultiType call(typename detail::FunctionPointer<R, void, isconst, P1, P2, P3, void, void>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType&, const MultiType&) { return (*functionPointer)(param1, param2, param3); } };
-        template <class R, bool isconst, class P1, class P2>                               struct FunctorCaller<R, void, isconst, P1, P2, void, void, void>     { static inline MultiType call(typename detail::FunctionPointer<R, void, isconst, P1, P2, void, void, void>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType&, const MultiType&, const MultiType&) { return (*functionPointer)(param1, param2); } };
-        template <class R, bool isconst, class P1>                                         struct FunctorCaller<R, void, isconst, P1, void, void, void, void>   { static inline MultiType call(typename detail::FunctionPointer<R, void, isconst, P1, void, void, void, void>::Type functionPointer, void*, const MultiType& param1, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { return (*functionPointer)(param1); } };
-        template <class R, bool isconst>                                                   struct FunctorCaller<R, void, isconst, void, void, void, void, void> { static inline MultiType call(typename detail::FunctionPointer<R, void, isconst, void, void, void, void, void>::Type functionPointer, void*, const MultiType&, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { return (*functionPointer)(); } };
-        template <bool isconst, class P1, class P2, class P3, class P4, class P5> struct FunctorCaller<void, void, isconst, P1, P2, P3, P4, P5>           { static inline MultiType call(typename detail::FunctionPointer<void, void, isconst, P1, P2, P3, P4, P5>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5) { (*functionPointer)(param1, param2, param3, param4, param5); return MultiType::Null; } };
-        template <bool isconst, class P1, class P2, class P3, class P4>           struct FunctorCaller<void, void, isconst, P1, P2, P3, P4, void>         { static inline MultiType call(typename detail::FunctionPointer<void, void, isconst, P1, P2, P3, P4, void>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType&) { (*functionPointer)(param1, param2, param3, param4); return MultiType::Null; } };
-        template <bool isconst, class P1, class P2, class P3>                     struct FunctorCaller<void, void, isconst, P1, P2, P3, void, void>       { static inline MultiType call(typename detail::FunctionPointer<void, void, isconst, P1, P2, P3, void, void>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType&, const MultiType&) { (*functionPointer)(param1, param2, param3); return MultiType::Null; } };
-        template <bool isconst, class P1, class P2>                               struct FunctorCaller<void, void, isconst, P1, P2, void, void, void>     { static inline MultiType call(typename detail::FunctionPointer<void, void, isconst, P1, P2, void, void, void>::Type functionPointer, void*, const MultiType& param1, const MultiType& param2, const MultiType&, const MultiType&, const MultiType&) { (*functionPointer)(param1, param2); return MultiType::Null; } };
-        template <bool isconst, class P1>                                         struct FunctorCaller<void, void, isconst, P1, void, void, void, void>   { static inline MultiType call(typename detail::FunctionPointer<void, void, isconst, P1, void, void, void, void>::Type functionPointer, void*, const MultiType& param1, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { (*functionPointer)(param1); return MultiType::Null; } };
-        template <bool isconst>                                                   struct FunctorCaller<void, void, isconst, void, void, void, void, void> { static inline MultiType call(typename detail::FunctionPointer<void, void, isconst, void, void, void, void, void>::Type functionPointer, void*, const MultiType&, const MultiType&, const MultiType&, const MultiType&, const MultiType&) { (*functionPointer)(); return MultiType::Null; } };
-
-        // Helper class, used to identify the header of a function-pointer (independent of its class)
-        template <class R, class P1, class P2, class P3, class P4, class P5>
-        struct FunctorHeaderIdentifier
-        {};
+        // Helper class to get the type of the function-pointer (or the function-object) with the given class, parameters, return-value, and constness
+        template <class F, class R, class O, bool isconst, class... Params> struct FunctionType /* generic type is undefined */;
+        template <         class R, class O,               class... Params> struct FunctionType<void, R, O,    false, Params...> { typedef R (O::*Type)(Params...); };       // spezialization: non-const member function
+        template <         class R, class O,               class... Params> struct FunctionType<void, R, O,    true,  Params...> { typedef R (O::*Type)(Params...) const; }; // spezialization: const member function
+        template <         class R,                        class... Params> struct FunctionType<void, R, void, false, Params...> { typedef R (*Type)(Params...); };          // spezialization: static function
+        template <class F, class R,                        class... Params> struct FunctionType<F,    R, void, false, Params...> { typedef F Type; };                        // spezialization: function object
+
+        // Helper class, used to call a function with a given object and parameters and to return its return-value (if available)
+        template <class F, class R, class O, bool isconst, class... Params> struct FunctorCaller /* generic type is undefined */;
+        template <         class R, class O, bool isconst, class... Params> struct FunctorCaller<void, R,    O,    isconst, Params...> { template <class... UnusedParams> static inline MultiType call(typename detail::FunctionType<void, R,    O,    isconst, Params...>::Type functionPointer, O* object, const Params&... parameters, const UnusedParams&...) { return (object->*functionPointer)(parameters...); } };                  // spezialization: member function with return value
+        template <                  class O, bool isconst, class... Params> struct FunctorCaller<void, void, O,    isconst, Params...> { template <class... UnusedParams> static inline MultiType call(typename detail::FunctionType<void, void, O,    isconst, Params...>::Type functionPointer, O* object, const Params&... parameters, const UnusedParams&...) { (object->*functionPointer)(parameters...); return MultiType::Null; } }; // spezialization: member function without return value
+        template <         class R,                        class... Params> struct FunctorCaller<void, R,    void, false,   Params...> { template <class... UnusedParams> static inline MultiType call(typename detail::FunctionType<void, R,    void, false,   Params...>::Type functionPointer, void*,     const Params&... parameters, const UnusedParams&...) { return (*functionPointer)(parameters...); } };                          // spezialization: static function with return value
+        template <                                         class... Params> struct FunctorCaller<void, void, void, false,   Params...> { template <class... UnusedParams> static inline MultiType call(typename detail::FunctionType<void, void, void, false,   Params...>::Type functionPointer, void*,     const Params&... parameters, const UnusedParams&...) { (*functionPointer)(parameters...); return MultiType::Null; } };         // spezialization: static function without return value
+        template <class F, class R,                        class... Params> struct FunctorCaller<F,    R,    void, false,   Params...> { template <class... UnusedParams> static inline MultiType call(typename detail::FunctionType<F,    R,    void, false,   Params...>::Type functor,         void*,     const Params&... parameters, const UnusedParams&...) { return functor(parameters...); } };                                     // spezialization: function object with return value
+        template <class F,                                 class... Params> struct FunctorCaller<F,    void, void, false,   Params...> { template <class... UnusedParams> static inline MultiType call(typename detail::FunctionType<F,    void, void, false,   Params...>::Type functor,         void*,     const Params&... parameters, const UnusedParams&...) { functor(parameters...); return MultiType::Null; } };                    // spezialization: function object without return value
 
         // Helper class to determine if a function has a returnvalue
@@ -448,23 +410,43 @@
         { enum { result = false }; };
 
-        // Helper class to count the number of parameters
-        template <class P1, class P2, class P3, class P4, class P5>
-        struct FunctorParamCount
-        { enum { result = 5 }; };
-        template <class P1, class P2, class P3, class P4>
-        struct FunctorParamCount<P1, P2, P3, P4, void>
-        { enum { result = 4 }; };
-        template <class P1, class P2, class P3>
-        struct FunctorParamCount<P1, P2, P3, void, void>
-        { enum { result = 3 }; };
-        template <class P1, class P2>
-        struct FunctorParamCount<P1, P2, void, void, void>
-        { enum { result = 2 }; };
-        template <class P1>
-        struct FunctorParamCount<P1, void, void, void, void>
-        { enum { result = 1 }; };
+        // Helper class to determine the N-th parameter of a variadic template (with 0 being the index of the first parameter)
+        template <int n, typename T = void, typename... Other>
+        struct GetNthParamType
+        { typedef typename GetNthParamType<n - 1, Other...>::Type Type; };
+        template <typename T, typename... Other>
+        struct GetNthParamType<0, T, Other...>
+        { typedef T Type; };
+
+        // Helper structs to deduce the first N types of a parameter pack
+        template<class... Types> struct type_list {};
+
+        template <class T1, class... AllTypes>
+        struct make_type_list_helper
+        {
+            template <std::size_t N, class... Types>
+            struct make_type_list_impl : make_type_list_helper<AllTypes...>::template make_type_list_impl<N - 1, Types..., T1> {};
+
+            template <class... Types>
+            struct make_type_list_impl<1u, Types...> : type_list<Types..., T1> {};
+        };
+
+        template <class T1>
+        struct make_type_list_helper<T1>
+        {
+            template <std::size_t N, class... Types>
+            struct make_type_list_impl : type_list<Types..., T1> {};
+        };
+
+        template <std::size_t N, class... Types>
+        struct make_type_list : make_type_list_helper<Types...>::template make_type_list_impl<N> {};
+
+        template <class... Types>
+        struct make_type_list<0u, Types...> : type_list<> {};
+
+        template <std::size_t N>
+        struct make_type_list<N> : type_list<> {};
+
         template <>
-        struct FunctorParamCount<void, void, void, void, void>
-        { enum { result = 0 }; };
+        struct make_type_list<0u> : type_list<> {};
     }
 
@@ -473,12 +455,9 @@
         that need to know the exact types of the parameters, return-value, and class.
 
+        @param F the type of the function-object (or void if a function-pointer is used).
         @param R The type of the return-value of the function
         @param O The class of the function
         @param isconst True if the function is a const member-function
-        @param P1 The type of the first parameter
-        @param P2 The type of the second parameter
-        @param P3 The type of the third parameter
-        @param P4 The type of the fourth parameter
-        @param P5 The type of the fifth parameter
+        @param Params The types of the parameters
 
         This template has many parameters and is usually not used directly. It is created by
@@ -489,44 +468,46 @@
         All template arguments can be void.
     */
-    template <class R, class O, bool isconst, class P1, class P2, class P3, class P4, class P5>
-    class FunctorTemplate : public FunctorPointer<typename detail::FunctionPointer<R, O, isconst, P1, P2, P3, P4, P5>::Type, O>
-    {
+    template <class F, class R, class O, bool isconst, class... Params>
+    class FunctorTemplate : public FunctorPointer<typename detail::FunctionType<F, R, O, isconst, Params...>::Type, O>
+    {
+        static_assert(sizeof...(Params) <= 5, "Only up to 5 parameters are supported");
+
         public:
             /// Constructor: Initializes the base class.
-            FunctorTemplate(typename detail::FunctionPointer<R, O, isconst, P1, P2, P3, P4, P5>::Type functionPointer, O* object = 0) : FunctorPointer<typename detail::FunctionPointer<R, O, isconst, P1, P2, P3, P4, P5>::Type, O>(functionPointer, object) {}
+            FunctorTemplate(typename detail::FunctionType<F, R, O, isconst, Params...>::Type functionPointer, O* object = nullptr) : FunctorPointer<typename detail::FunctionType<F, R, O, isconst, Params...>::Type, O>(functionPointer, object) {}
 
             // see FunctorMember::operator()()
-            MultiType operator()(O* object, const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null)
-            {
-                return detail::FunctorCaller<R, O, isconst, P1, P2, P3, P4, P5>::call(this->functionPointer_, object, param1, param2, param3, param4, param5);
+            virtual MultiType operator()(O* object, const MultiType& param1 = MultiType::Null, const MultiType& param2 = MultiType::Null, const MultiType& param3 = MultiType::Null, const MultiType& param4 = MultiType::Null, const MultiType& param5 = MultiType::Null) override
+            {
+                return detail::FunctorCaller<F, R, O, isconst, Params...>::call(this->functionPointer_, object, param1, param2, param3, param4, param5);
             }
 
             // see Functor::clone()
-            FunctorPtr clone()
-            {
-                return new FunctorTemplate(*this);
+            virtual FunctorPtr clone() override
+            {
+                return std::make_shared<FunctorTemplate>(*this);
             }
 
             // see Functor::evaluateArgument()
-            void evaluateArgument(unsigned int index, MultiType& argument) const
+            virtual void evaluateArgument(unsigned int index, MultiType& argument) const override
             {
                 switch (index)
                 {
-                    case 0: argument.convert<P1>(); break;
-                    case 1: argument.convert<P2>(); break;
-                    case 2: argument.convert<P3>(); break;
-                    case 3: argument.convert<P4>(); break;
-                    case 4: argument.convert<P5>(); break;
+                    case 0: argument.convert<typename detail::GetNthParamType<0, Params...>::Type>(); break;
+                    case 1: argument.convert<typename detail::GetNthParamType<1, Params...>::Type>(); break;
+                    case 2: argument.convert<typename detail::GetNthParamType<2, Params...>::Type>(); break;
+                    case 3: argument.convert<typename detail::GetNthParamType<3, Params...>::Type>(); break;
+                    case 4: argument.convert<typename detail::GetNthParamType<4, Params...>::Type>(); break;
                 }
             }
 
             // see Functor::getParamCount()
-            unsigned int getParamCount() const
-            {
-                return detail::FunctorParamCount<P1, P2, P3, P4, P5>::result;
+            virtual unsigned int getParamCount() const override
+            {
+                return sizeof...(Params);
             }
 
             // see Functor::hasReturnvalue()
-            bool hasReturnvalue() const
+            virtual bool hasReturnvalue() const override
             {
                 return detail::FunctorHasReturnvalue<R>::result;
@@ -534,13 +515,13 @@
 
             // see Functor::getTypenameParam()
-            std::string getTypenameParam(unsigned int index) const
+            virtual std::string getTypenameParam(unsigned int index) const override
             {
                 switch (index)
                 {
-                    case 0:  return typeToString<P1>();
-                    case 1:  return typeToString<P2>();
-                    case 2:  return typeToString<P3>();
-                    case 3:  return typeToString<P4>();
-                    case 4:  return typeToString<P5>();
+                    case 0:  return typeToString<typename detail::GetNthParamType<0, Params...>::Type>();
+                    case 1:  return typeToString<typename detail::GetNthParamType<1, Params...>::Type>();
+                    case 2:  return typeToString<typename detail::GetNthParamType<2, Params...>::Type>();
+                    case 3:  return typeToString<typename detail::GetNthParamType<3, Params...>::Type>();
+                    case 4:  return typeToString<typename detail::GetNthParamType<4, Params...>::Type>();
                     default: return "";
                 }
@@ -548,62 +529,66 @@
 
             // see Functor::getTypenameReturnvalue()
-            std::string getTypenameReturnvalue() const
+            virtual std::string getTypenameReturnvalue() const override
             {
                 return typeToString<R>();
             }
 
+            // see Functor::getFullIdentifier()
+            virtual const std::type_info& getFullIdentifier() const override
+            {
+                return typeid(typename detail::FunctionType<void, R, O, isconst, Params...>::Type);
+            }
+
             // see Functor::getHeaderIdentifier()
-            const std::type_info& getHeaderIdentifier() const
-            {
-                return typeid(detail::FunctorHeaderIdentifier<R, P1, P2, P3, P4, P5>);
+            virtual const std::type_info& getHeaderIdentifier() const override
+            {
+                return typeid(typename detail::FunctionType<void, R, void, false, Params...>::Type);
             }
 
             // see Functor::getHeaderIdentifier(unsigned int)
-            const std::type_info& getHeaderIdentifier(unsigned int params) const
+            virtual const std::type_info& getHeaderIdentifier(unsigned int params) const override
             {
                 switch (params)
                 {
-                    case 0:  return typeid(detail::FunctorHeaderIdentifier<R, void, void, void, void, void>);
-                    case 1:  return typeid(detail::FunctorHeaderIdentifier<R, P1, void, void, void, void>);
-                    case 2:  return typeid(detail::FunctorHeaderIdentifier<R, P1, P2, void, void, void>);
-                    case 3:  return typeid(detail::FunctorHeaderIdentifier<R, P1, P2, P3, void, void>);
-                    case 4:  return typeid(detail::FunctorHeaderIdentifier<R, P1, P2, P3, P4, void>);
-                    default: return typeid(detail::FunctorHeaderIdentifier<R, P1, P2, P3, P4, P5>);
+                    case 0:  return this->getTypelistIdentifier(detail::make_type_list<0, Params...>{});
+                    case 1:  return this->getTypelistIdentifier(detail::make_type_list<1, Params...>{});
+                    case 2:  return this->getTypelistIdentifier(detail::make_type_list<2, Params...>{});
+                    case 3:  return this->getTypelistIdentifier(detail::make_type_list<3, Params...>{});
+                    case 4:  return this->getTypelistIdentifier(detail::make_type_list<4, Params...>{});
+                    default: return this->getTypelistIdentifier(detail::make_type_list<5, Params...>{});
                 }
             }
+
+    private:
+            /// Helper function that deduces a parameter pack of types and returns the corresponding identifier
+            template<class... Types>
+            const std::type_info& getTypelistIdentifier(detail::type_list<Types...>) const
+            {
+                return typeid(typename detail::FunctionType<void, R, void, false, Types...>::Type);
+            }
     };
 
-    template <class R, class O, class OO, class P1, class P2, class P3, class P4, class P5> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4, P5), OO* object) { return new FunctorTemplate<R, O, false, P1, P2, P3, P4, P5>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2, class P3, class P4>           inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4), OO* object)     { return new FunctorTemplate<R, O, false, P1, P2, P3, P4, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2, class P3>                     inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3), OO* object)         { return new FunctorTemplate<R, O, false, P1, P2, P3, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2>                               inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2), OO* object)             { return new FunctorTemplate<R, O, false, P1, P2, void, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1>                                         inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1), OO* object)                 { return new FunctorTemplate<R, O, false, P1, void, void, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO>                                                   inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(), OO* object)                   { return new FunctorTemplate<R, O, false, void, void, void, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2, class P3, class P4, class P5> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4, P5) const, OO* object) { return new FunctorTemplate<R, O, true, P1, P2, P3, P4, P5>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2, class P3, class P4>           inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4) const, OO* object)     { return new FunctorTemplate<R, O, true, P1, P2, P3, P4, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2, class P3>                     inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3) const, OO* object)         { return new FunctorTemplate<R, O, true, P1, P2, P3, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1, class P2>                               inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2) const, OO* object)             { return new FunctorTemplate<R, O, true, P1, P2, void, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO, class P1>                                         inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1) const, OO* object)                 { return new FunctorTemplate<R, O, true, P1, void, void, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-    template <class R, class O, class OO>                                                   inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)() const, OO* object)                   { return new FunctorTemplate<R, O, true, void, void, void, void, void>(functionPointer, object); }   ///< Creates a new FunctorMember with the given function-pointer and an assigned object
-
-    template <class R, class O, class P1, class P2, class P3, class P4, class P5> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4, P5)) { return new FunctorTemplate<R, O, false, P1, P2, P3, P4, P5>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2, class P3, class P4>           inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4))     { return new FunctorTemplate<R, O, false, P1, P2, P3, P4, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2, class P3>                     inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3))         { return new FunctorTemplate<R, O, false, P1, P2, P3, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2>                               inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2))             { return new FunctorTemplate<R, O, false, P1, P2, void, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1>                                         inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1))                 { return new FunctorTemplate<R, O, false, P1, void, void, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O>                                                   inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)())                   { return new FunctorTemplate<R, O, false, void, void, void, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2, class P3, class P4, class P5> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4, P5) const) { return new FunctorTemplate<R, O, true, P1, P2, P3, P4, P5>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2, class P3, class P4>           inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3, P4) const)     { return new FunctorTemplate<R, O, true, P1, P2, P3, P4, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2, class P3>                     inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2, P3) const)         { return new FunctorTemplate<R, O, true, P1, P2, P3, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1, class P2>                               inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1, P2) const)             { return new FunctorTemplate<R, O, true, P1, P2, void, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O, class P1>                                         inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(P1) const)                 { return new FunctorTemplate<R, O, true, P1, void, void, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-    template <class R, class O>                                                   inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)() const)                   { return new FunctorTemplate<R, O, true, void, void, void, void, void>(functionPointer); }   ///< Creates a new FunctorMember with the given function-pointer
-
-    template <class R, class P1, class P2, class P3, class P4, class P5> inline FunctorStaticPtr createFunctor(R (*functionPointer)(P1, P2, P3, P4, P5)) { return new FunctorTemplate<R, void, false, P1, P2, P3, P4, P5>(functionPointer); }   ///< Creates a new Functor with the given function-pointer
-    template <class R, class P1, class P2, class P3, class P4>           inline FunctorStaticPtr createFunctor(R (*functionPointer)(P1, P2, P3, P4))     { return new FunctorTemplate<R, void, false, P1, P2, P3, P4, void>(functionPointer); }   ///< Creates a new Functor with the given function-pointer
-    template <class R, class P1, class P2, class P3>                     inline FunctorStaticPtr createFunctor(R (*functionPointer)(P1, P2, P3))         { return new FunctorTemplate<R, void, false, P1, P2, P3, void, void>(functionPointer); }   ///< Creates a new Functor with the given function-pointer
-    template <class R, class P1, class P2>                               inline FunctorStaticPtr createFunctor(R (*functionPointer)(P1, P2))             { return new FunctorTemplate<R, void, false, P1, P2, void, void, void>(functionPointer); }   ///< Creates a new Functor with the given function-pointer
-    template <class R, class P1>                                         inline FunctorStaticPtr createFunctor(R (*functionPointer)(P1))                 { return new FunctorTemplate<R, void, false, P1, void, void, void, void>(functionPointer); }   ///< Creates a new Functor with the given function-pointer
-    template <class R>                                                   inline FunctorStaticPtr createFunctor(R (*functionPointer)())                   { return new FunctorTemplate<R, void, false, void, void, void, void, void>(functionPointer); }   ///< Creates a new Functor with the given function-pointer
+
+    namespace detail
+    {
+        // Helper functions to deduce types and constness of operator() and return the correct FunctorTemplate
+        template <class F>
+        struct CallableHelper
+        {
+            template <class R, class... Params> static inline FunctorStaticPtr create(const F& functionObject, R(F::*)(Params...))       { return std::make_shared<FunctorTemplate<F, R, void, false, Params...>>(functionObject); }
+            template <class R, class... Params> static inline FunctorStaticPtr create(const F& functionObject, R(F::*)(Params...) const) { return std::make_shared<FunctorTemplate<F, R, void, false, Params...>>(functionObject); } // note: both const and non-const function-objects are treated as static functors with isconst=false.
+        };
+    }
+
+    template <class R, class O, class OO, class... Params> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(Params...),       OO* object) { return std::make_shared<FunctorTemplate<void, R, O, false, Params...>>(functionPointer, object); } ///< Creates a new FunctorMember with the given function-pointer and an assigned object
+    template <class R, class O, class OO, class... Params> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(Params...) const, OO* object) { return std::make_shared<FunctorTemplate<void, R, O, true,  Params...>>(functionPointer, object); } ///< Creates a new FunctorMember with the given function-pointer and an assigned object
+
+    template <class R, class O, class... Params> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(Params...))       { return std::make_shared<FunctorTemplate<void, R, O, false, Params...>>(functionPointer); } ///< Creates a new FunctorMember with the given function-pointer
+    template <class R, class O, class... Params> inline FunctorMemberPtr<O> createFunctor(R (O::*functionPointer)(Params...) const) { return std::make_shared<FunctorTemplate<void, R, O, true,  Params...>>(functionPointer); } ///< Creates a new FunctorMember with the given function-pointer
+
+    template <class R, class... Params> inline FunctorStaticPtr createFunctor(R (*functionPointer)(Params...)) { return std::make_shared<FunctorTemplate<void, R, void, false, Params...>>(functionPointer); } ///< Creates a new FunctorStatic with the given function-pointer
+
+    /** Take care that this functor does not outlive objects that have been captured by reference in a lambda. */
+    template <class F> inline FunctorStaticPtr createFunctor(const F& functionObject) { return detail::CallableHelper<F>::create(functionObject, &F::operator()); } ///< Creates a new Functor with a callable object
 }
 
Index: code/trunk/src/libraries/core/command/FunctorPtr.h
===================================================================
--- code/trunk/src/libraries/core/command/FunctorPtr.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/FunctorPtr.h	(revision 11071)
@@ -32,7 +32,7 @@
     @brief Typedefs and definitions of FunctorPtr, FunctorMemberPtr, FunctorStaticPtr, and FunctorPointerPtr
 
-    Instances of orxonox::Functor are usually managed by an orxonox::SharedPtr. This ensures
+    Instances of orxonox::Functor are usually managed by an std::shared_ptr. This ensures
     that Functors will be destroyed after usage. To make things easier, there's a typedef
-    that defines FunctorPtr as SharedPtr<Functor>.
+    that defines FunctorPtr as std::shared_ptr<Functor>.
 
     Because there's not only orxonox::Functor, but also orxonox::FunctorStatic, and
@@ -51,33 +51,14 @@
 
 #include "core/CorePrereqs.h"
-#include "util/SharedPtr.h"
+#include <memory>
 
 namespace orxonox
 {
-    /// FunctorPtr is just a typedef of SharedPtr
-    typedef SharedPtr<Functor> FunctorPtr;
-
-    /// It's not possible to use a typedef for FunctorMemberPtr<T>, so we have to create a child-class instead. It inherits all functions from SharedChildPtr, but needs to (re-)implement some constructors.
+    using FunctorPtr = std::shared_ptr<Functor>;
     template <class T>
-    class FunctorMemberPtr : public SharedChildPtr<FunctorMember<T>, FunctorPtr>
-    {
-        public:
-            inline FunctorMemberPtr() : SharedChildPtr<FunctorMember<T>, FunctorPtr>() {}
-            inline FunctorMemberPtr(FunctorMember<T>* pointer) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(pointer) {}
-            inline FunctorMemberPtr(const SharedPtr<FunctorMember<T> >& other) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(other) {}
-    };
-
-    /// FunctorStaticPtr is just FunctorMemberPtr with @a T = void
-    typedef FunctorMemberPtr<void> FunctorStaticPtr;
-
-    /// It's not possible to use a typedef for FunctorPointerPtr<T>, so we have to create a child-class instead. It inherits all functions from SharedChildPtr, but needs to (re-)implement some constructors.
+    using FunctorMemberPtr = std::shared_ptr<FunctorMember<T>>;
+    using FunctorStaticPtr = std::shared_ptr<FunctorMember<void>>;
     template <class F, class T>
-    class FunctorPointerPtr : public SharedChildPtr<FunctorPointer<F, T>, FunctorMemberPtr<T> >
-    {
-        public:
-            inline FunctorPointerPtr() : SharedChildPtr<FunctorPointer<F, T>, FunctorMemberPtr<T> >() {}
-            inline FunctorPointerPtr(FunctorPointer<F, T>* pointer) : SharedChildPtr<FunctorPointer<F, T>, FunctorMemberPtr<T> >(pointer) {}
-            inline FunctorPointerPtr(const SharedPtr<FunctorPointer<F, T> >& other) : SharedChildPtr<FunctorPointer<F, T>, FunctorMemberPtr<T> >(other) {}
-    };
+    using FunctorPointerPtr = std::shared_ptr<FunctorPointer<F, T>>;
 }
 
Index: code/trunk/src/libraries/core/command/IOConsolePOSIX.cc
===================================================================
--- code/trunk/src/libraries/core/command/IOConsolePOSIX.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/IOConsolePOSIX.cc	(revision 11071)
@@ -44,15 +44,12 @@
 namespace orxonox
 {
-    IOConsole* IOConsole::singletonPtr_s = NULL;
-
-    namespace EscapeMode
-    {
-        enum Value
-        {
-            None,
-            First,
-            Second
-        };
-    }
+    IOConsole* IOConsole::singletonPtr_s = nullptr;
+
+    enum class EscapeMode
+    {
+        None,
+        First,
+        Second
+    };
 
     IOConsole::IOConsole()
@@ -62,5 +59,5 @@
         , promptString_("orxonox # ")
         , bStatusPrinted_(false)
-        , originalTerminalSettings_(0)
+        , originalTerminalSettings_(nullptr)
     {
         this->setTerminalMode();
@@ -90,5 +87,5 @@
         std::cout.flush();
         if (!this->origCout_.str().empty())
-            this->shell_->addOutput(this->origCout_.str(), Shell::Cout);
+            this->shell_->addOutput(this->origCout_.str(), Shell::LineType::Cout);
         // Erase input and status lines
         this->cout_ << "\033[1G\033[J";
@@ -111,5 +108,5 @@
         unsigned char c;
         std::string escapeSequence;
-        EscapeMode::Value escapeMode = EscapeMode::None;
+        EscapeMode escapeMode = EscapeMode::None;
         while (std::cin.good())
         {
@@ -231,5 +228,5 @@
         if (!this->origCout_.str().empty())
         {
-            this->shell_->addOutput(this->origCout_.str(), Shell::Cout);
+            this->shell_->addOutput(this->origCout_.str(), Shell::LineType::Cout);
             this->origCout_.str("");
         }
@@ -241,25 +238,25 @@
         switch (type)
         {
-            case Shell::Message:
-            case Shell::DebugOutput:     this->cout_ << "\033[0m"; break;
-
-            case Shell::UserError:       this->cout_ << "\033[91m"; break;
-            case Shell::UserWarning:     this->cout_ << "\033[93m"; break;
-            case Shell::UserStatus:      this->cout_ << "\033[92m"; break;
-            case Shell::UserInfo:        this->cout_ << "\033[96m"; break;
-
-            case Shell::InternalError:   this->cout_ << "\033[31m"; break;
-            case Shell::InternalWarning: this->cout_ << "\033[33m"; break;
-            case Shell::InternalStatus:  this->cout_ << "\033[32m"; break;
-            case Shell::InternalInfo:    this->cout_ << "\033[36m"; break;
-
-            case Shell::Verbose:         this->cout_ << "\033[94m"; break;
-            case Shell::VerboseMore:     this->cout_ << "\033[34m"; break;
-            case Shell::VerboseUltra:    this->cout_ << "\033[34m"; break;
-
-            case Shell::Command:         this->cout_ << "\033[95m"; break;
-            case Shell::Hint:            this->cout_ << "\033[35m"; break;
-
-            default:                     this->cout_ << "\033[37m"; break;
+            case Shell::LineType::Message:
+            case Shell::LineType::DebugOutput:     this->cout_ << "\033[0m"; break;
+
+            case Shell::LineType::UserError:       this->cout_ << "\033[91m"; break;
+            case Shell::LineType::UserWarning:     this->cout_ << "\033[93m"; break;
+            case Shell::LineType::UserStatus:      this->cout_ << "\033[92m"; break;
+            case Shell::LineType::UserInfo:        this->cout_ << "\033[96m"; break;
+
+            case Shell::LineType::InternalError:   this->cout_ << "\033[31m"; break;
+            case Shell::LineType::InternalWarning: this->cout_ << "\033[33m"; break;
+            case Shell::LineType::InternalStatus:  this->cout_ << "\033[32m"; break;
+            case Shell::LineType::InternalInfo:    this->cout_ << "\033[36m"; break;
+
+            case Shell::LineType::Verbose:         this->cout_ << "\033[94m"; break;
+            case Shell::LineType::VerboseMore:     this->cout_ << "\033[34m"; break;
+            case Shell::LineType::VerboseUltra:    this->cout_ << "\033[34m"; break;
+
+            case Shell::LineType::Command:         this->cout_ << "\033[95m"; break;
+            case Shell::LineType::Hint:            this->cout_ << "\033[35m"; break;
+
+            default:                               this->cout_ << "\033[37m"; break;
         }
 
@@ -326,5 +323,5 @@
             tcsetattr(0, TCSANOW, IOConsole::singletonPtr_s->originalTerminalSettings_);
             delete IOConsole::singletonPtr_s->originalTerminalSettings_;
-            IOConsole::singletonPtr_s->originalTerminalSettings_ = 0;
+            IOConsole::singletonPtr_s->originalTerminalSettings_ = nullptr;
         }
     }
@@ -353,9 +350,9 @@
         const char* s;
         if (!this->terminalWidth_ && (s = getenv("COLUMNS")))
-            this->terminalWidth_  = strtol(s, NULL, 10);
+            this->terminalWidth_  = strtol(s, nullptr, 10);
         if (!this->terminalWidth_)
             this->terminalWidth_ = 80;
         if (!this->terminalHeight_ && (s = getenv("LINES")))
-            this->terminalHeight_ = strtol(s, NULL, 10);
+            this->terminalHeight_ = strtol(s, nullptr, 10);
         if (!this->terminalHeight_)
             this->terminalHeight_ = 24;
@@ -384,5 +381,5 @@
     void IOConsole::executed()
     {
-        this->shell_->addOutput(this->promptString_ + this->shell_->getInput(), Shell::Command);
+        this->shell_->addOutput(this->promptString_ + this->shell_->getInput(), Shell::LineType::Command);
     }
 
Index: code/trunk/src/libraries/core/command/IOConsolePOSIX.h
===================================================================
--- code/trunk/src/libraries/core/command/IOConsolePOSIX.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/IOConsolePOSIX.h	(revision 11071)
@@ -65,10 +65,10 @@
 
         // Methods from ShellListener
-        void linesChanged();
-        void lineAdded();
-        void inputChanged();
-        void cursorChanged();
-        void executed();
-        void exit();
+        virtual void linesChanged() override;
+        virtual void lineAdded() override;
+        virtual void inputChanged() override;
+        virtual void cursorChanged() override;
+        virtual void executed() override;
+        virtual void exit() override;
 
         bool willPrintStatusLines();
Index: code/trunk/src/libraries/core/command/IOConsoleWindows.cc
===================================================================
--- code/trunk/src/libraries/core/command/IOConsoleWindows.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/IOConsoleWindows.cc	(revision 11071)
@@ -41,5 +41,5 @@
 namespace orxonox
 {
-    IOConsole* IOConsole::singletonPtr_s = NULL;
+    IOConsole* IOConsole::singletonPtr_s = nullptr;
 
     //! Redirects std::cout, creates the corresponding Shell and changes the terminal mode
@@ -97,5 +97,5 @@
         std::cout.flush();
         if (!this->origCout_.str().empty())
-            this->shell_->addOutput(this->origCout_.str(), Shell::Cout);
+            this->shell_->addOutput(this->origCout_.str(), Shell::LineType::Cout);
 
         this->shell_->unregisterListener(this);
@@ -190,5 +190,5 @@
         if (!this->origCout_.str().empty())
         {
-            this->shell_->addOutput(this->origCout_.str(), Shell::Cout);
+            this->shell_->addOutput(this->origCout_.str(), Shell::LineType::Cout);
             this->origCout_.str("");
         }
@@ -202,25 +202,25 @@
         switch (type)
         {
-            case Shell::Message:
-            case Shell::DebugOutput:     colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
-
-            case Shell::UserError:       colour = FOREGROUND_INTENSITY | FOREGROUND_RED | 0                | 0              ; break;
-            case Shell::UserWarning:     colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | 0              ; break;
-            case Shell::UserStatus:      colour = FOREGROUND_INTENSITY | 0              | FOREGROUND_GREEN | 0              ; break;
-            case Shell::UserInfo:        colour = FOREGROUND_INTENSITY | 0              | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
-
-            case Shell::InternalError:   colour = 0                    | FOREGROUND_RED | 0                | 0              ; break;
-            case Shell::InternalWarning: colour = 0                    | FOREGROUND_RED | FOREGROUND_GREEN | 0              ; break;
-            case Shell::InternalStatus:  colour = 0                    | 0              | FOREGROUND_GREEN | 0              ; break;
-            case Shell::InternalInfo:    colour = 0                    | 0              | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
-
-            case Shell::Verbose:         colour = FOREGROUND_INTENSITY | 0              | 0                | FOREGROUND_BLUE; break;
-            case Shell::VerboseMore:     colour = FOREGROUND_INTENSITY | 0              | 0                | FOREGROUND_BLUE; break;
-            case Shell::VerboseUltra:    colour = FOREGROUND_INTENSITY | 0              | 0                | FOREGROUND_BLUE; break;
-
-            case Shell::Command:         colour = FOREGROUND_INTENSITY | FOREGROUND_RED | 0                | FOREGROUND_BLUE; break;
-            case Shell::Hint:            colour = 0                    | FOREGROUND_RED | 0                | FOREGROUND_BLUE; break;
-
-            default:                     colour = 0                    | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
+            case Shell::LineType::Message:
+            case Shell::LineType::DebugOutput:     colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
+
+            case Shell::LineType::UserError:       colour = FOREGROUND_INTENSITY | FOREGROUND_RED | 0                | 0              ; break;
+            case Shell::LineType::UserWarning:     colour = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | 0              ; break;
+            case Shell::LineType::UserStatus:      colour = FOREGROUND_INTENSITY | 0              | FOREGROUND_GREEN | 0              ; break;
+            case Shell::LineType::UserInfo:        colour = FOREGROUND_INTENSITY | 0              | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
+
+            case Shell::LineType::InternalError:   colour = 0                    | FOREGROUND_RED | 0                | 0              ; break;
+            case Shell::LineType::InternalWarning: colour = 0                    | FOREGROUND_RED | FOREGROUND_GREEN | 0              ; break;
+            case Shell::LineType::InternalStatus:  colour = 0                    | 0              | FOREGROUND_GREEN | 0              ; break;
+            case Shell::LineType::InternalInfo:    colour = 0                    | 0              | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
+
+            case Shell::LineType::Verbose:         colour = FOREGROUND_INTENSITY | 0              | 0                | FOREGROUND_BLUE; break;
+            case Shell::LineType::VerboseMore:     colour = FOREGROUND_INTENSITY | 0              | 0                | FOREGROUND_BLUE; break;
+            case Shell::LineType::VerboseUltra:    colour = FOREGROUND_INTENSITY | 0              | 0                | FOREGROUND_BLUE; break;
+
+            case Shell::LineType::Command:         colour = FOREGROUND_INTENSITY | FOREGROUND_RED | 0                | FOREGROUND_BLUE; break;
+            case Shell::LineType::Hint:            colour = 0                    | FOREGROUND_RED | 0                | FOREGROUND_BLUE; break;
+
+            default:                               colour = 0                    | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE; break;
         }
 
@@ -300,5 +300,5 @@
                 this->terminalWidth_ - 1, this->inputLineRow_ + this->inputLineHeight_ + this->statusLines_ - 1);
             this->inputLineRow_ += linesDown;
-            ScrollConsoleScreenBuffer(stdOutHandle_, &oldRect, NULL, makeCOORD(0, this->inputLineRow_), &fillChar);
+            ScrollConsoleScreenBuffer(stdOutHandle_, &oldRect, nullptr, makeCOORD(0, this->inputLineRow_), &fillChar);
             // Move cursor down to the new bottom so the user can see the status lines
             COORD pos = makeCOORD(0, this->inputLineRow_ + this->inputLineHeight_ - 1 + this->statusLines_);
@@ -312,5 +312,5 @@
             // Scroll output up
             SMALL_RECT oldRect = makeSMALL_RECT(0, lines - linesDown, this->terminalWidth_ - 1, this->inputLineRow_ - 1);
-            ScrollConsoleScreenBuffer(stdOutHandle_, &oldRect, NULL, makeCOORD(0, 0), &fillChar);
+            ScrollConsoleScreenBuffer(stdOutHandle_, &oldRect, nullptr, makeCOORD(0, 0), &fillChar);
         }
     }
@@ -331,5 +331,5 @@
     void IOConsole::executed()
     {
-        this->shell_->addOutput(this->promptString_ + this->shell_->getInput(), Shell::Command);
+        this->shell_->addOutput(this->promptString_ + this->shell_->getInput(), Shell::LineType::Command);
     }
 
@@ -360,5 +360,5 @@
             SMALL_RECT oldRect = makeSMALL_RECT(0, statusLineRow, this->terminalWidth_ - 1, statusLineRow + this->statusLines_);
             CHAR_INFO fillChar = {{' '}, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED};
-            ScrollConsoleScreenBuffer(stdOutHandle_, &oldRect, NULL, makeCOORD(0, statusLineRow + newLines), &fillChar);
+            ScrollConsoleScreenBuffer(stdOutHandle_, &oldRect, nullptr, makeCOORD(0, statusLineRow + newLines), &fillChar);
             // Clear potential leftovers
             if (-newLines - this->statusLines_ > 0)
Index: code/trunk/src/libraries/core/command/IOConsoleWindows.h
===================================================================
--- code/trunk/src/libraries/core/command/IOConsoleWindows.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/IOConsoleWindows.h	(revision 11071)
@@ -67,10 +67,10 @@
 
         // Methods from ShellListener
-        void linesChanged();
-        void lineAdded();
-        void inputChanged();
-        void cursorChanged();
-        void executed();
-        void exit();
+        virtual void linesChanged() override;
+        virtual void lineAdded() override;
+        virtual void inputChanged() override;
+        virtual void cursorChanged() override;
+        virtual void executed() override;
+        virtual void exit() override;
 
         void resetTerminalMode();
Index: code/trunk/src/libraries/core/command/IRC.cc
===================================================================
--- code/trunk/src/libraries/core/command/IRC.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/IRC.cc	(revision 11071)
@@ -44,5 +44,5 @@
 namespace orxonox
 {
-    static const unsigned int IRC_TCL_THREADID  = 1421421421;   ///< The ID of the thread in TclThreadManager that is used for the IRC connection
+    static constexpr unsigned int IRC_TCL_THREADID  = 1421421421;   ///< The ID of the thread in TclThreadManager that is used for the IRC connection
 
     SetConsoleCommand("IRC", "say",  &IRC::say);
@@ -66,5 +66,5 @@
     IRC::IRC()
     {
-        this->interpreter_ = 0;
+        this->interpreter_ = nullptr;
     }
 
Index: code/trunk/src/libraries/core/command/IRC.h
===================================================================
--- code/trunk/src/libraries/core/command/IRC.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/IRC.h	(revision 11071)
@@ -65,6 +65,9 @@
 
             IRC();
-            IRC(const IRC& other);              ///< Copy-constructor: Not implemented
-            ~IRC() {}                           ///< Destructor
+            ~IRC() = default;
+
+            // non-copyable:
+            IRC(const IRC&) = delete;
+            IRC& operator=(const IRC&) = delete;
 
             Tcl::interpreter* interpreter_;     ///< The Tcl interpreter that is used for the IRC connection
Index: code/trunk/src/libraries/core/command/Shell.cc
===================================================================
--- code/trunk/src/libraries/core/command/Shell.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/Shell.cc	(revision 11071)
@@ -258,6 +258,6 @@
         vectorize(text, '\n', &lines);
 
-        for (size_t i = 0; i < lines.size(); ++i)
-            this->addLine(lines[i], type);
+        for (const std::string& line : lines)
+            this->addLine(line, type);
     }
 
@@ -268,5 +268,5 @@
     {
         // yes it was - push the new line to the list
-        this->outputLines_.push_front(std::make_pair(line, static_cast<LineType>(type)));
+        this->outputLines_.push_front(std::make_pair(line, type));
 
         // adjust the scroll position if needed
@@ -381,7 +381,7 @@
         const std::string& result = CommandExecutor::query(this->inputBuffer_->get(), &error);
         if (error)
-            this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", " + CommandExecutor::getErrorDescription(error) + ". (Shell)", UserError);
+            this->addOutput("Error: Can't execute \"" + this->inputBuffer_->get() + "\", " + CommandExecutor::getErrorDescription(error) + ". (Shell)", LineType::UserError);
         else if (result != "")
-            this->addOutput(result, Result);
+            this->addOutput(result, LineType::Result);
 
         this->clearInput();
@@ -392,5 +392,5 @@
     {
         this->inputBuffer_->set(CommandExecutor::evaluate(this->inputBuffer_->get()).complete());
-        this->addOutput(CommandExecutor::evaluate(this->inputBuffer_->get()).hint(), Hint);
+        this->addOutput(CommandExecutor::evaluate(this->inputBuffer_->get()).hint(), LineType::Hint);
 
         this->inputChanged();
Index: code/trunk/src/libraries/core/command/Shell.h
===================================================================
--- code/trunk/src/libraries/core/command/Shell.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/Shell.h	(revision 11071)
@@ -61,5 +61,6 @@
 
         public:
-            virtual ~ShellListener() {}
+            ShellListener() = default;
+            virtual ~ShellListener() = default;
 
         private:
@@ -87,5 +88,5 @@
         public:
             /// Defines the type of a line of text in the Shell - some types depend on the output level, others are of internal use.
-            enum LineType
+            enum class LineType
             {
                 DebugOutput     = debug_output,
@@ -128,10 +129,10 @@
             const std::string& getInput() const;
 
-            typedef std::list<std::pair<std::string, LineType> > LineList;
+            typedef std::list<std::pair<std::string, LineType>> LineList;
             LineList::const_iterator getNewestLineIterator() const;
             LineList::const_iterator getEndIterator() const;
 
-            void addOutput(const std::string& text, LineType type = DebugOutput);
-            void addLine(const std::string& line, LineType type = DebugOutput);
+            void addOutput(const std::string& text, LineType type = LineType::DebugOutput);
+            void addLine(const std::string& line, LineType type = LineType::DebugOutput);
             void clearOutput();
 
@@ -148,8 +149,10 @@
 
         private:
-            Shell(const Shell& other);
+            // non-copyable:
+            Shell(const Shell&) = delete;
+            Shell& operator=(const Shell&) = delete;
 
             // DevModeListener
-            void devModeChanged(bool value);
+            virtual void devModeChanged(bool value) override;
 
             void addToHistory(const std::string& command);
@@ -157,5 +160,5 @@
             void clearInput();
             // BaseWriter
-            virtual void printLine(const std::string& line, OutputLevel level);
+            virtual void printLine(const std::string& line, OutputLevel level) override;
 
             void configureInputBuffer();
Index: code/trunk/src/libraries/core/command/TclBind.cc
===================================================================
--- code/trunk/src/libraries/core/command/TclBind.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/TclBind.cc	(revision 11071)
@@ -47,5 +47,5 @@
     SetConsoleCommand("bgerror", &TclBind::bgerror).hide();
 
-    TclBind* TclBind::singletonPtr_s = 0;
+    TclBind* TclBind::singletonPtr_s = nullptr;
 
     /**
@@ -55,5 +55,5 @@
     TclBind::TclBind(const std::string& datapath)
     {
-        this->interpreter_ = 0;
+        this->interpreter_ = nullptr;
         this->bSetTclDataPath_ = false;
         this->setDataPath(datapath);
@@ -228,5 +228,5 @@
         @brief Executes Tcl-code and returns the return-value.
         @param tclcode A string that contains Tcl-code
-        @param error A pointer to an integer (or NULL) that is used to write an error-code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
+        @param error A pointer to an integer (or nullptr) that is used to write an error-code (see @ref CommandExecutorErrorCodes "CommandExecutor error codes")
         @return Returns the return-value of the executed code (or an empty string if there's no return-value)
     */
Index: code/trunk/src/libraries/core/command/TclBind.h
===================================================================
--- code/trunk/src/libraries/core/command/TclBind.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/TclBind.h	(revision 11071)
@@ -121,8 +121,10 @@
             static void tcl_execute(Tcl::object const &args);
 
-            static std::string eval(const std::string& tclcode, int* error = 0);
+            static std::string eval(const std::string& tclcode, int* error = nullptr);
 
         private:
-            TclBind(const TclBind& other);      ///< Copy-constructor, not implemented
+            // non-copyable:
+            TclBind(const TclBind&) = delete;
+            TclBind& operator=(const TclBind&) = delete;
 
             static std::string tcl_helper(Tcl::object const &args, bool bQuery);
Index: code/trunk/src/libraries/core/command/TclThreadList.h
===================================================================
--- code/trunk/src/libraries/core/command/TclThreadList.h	(revision 11056)
+++ code/trunk/src/libraries/core/command/TclThreadList.h	(revision 11071)
@@ -262,6 +262,6 @@
         boost::shared_lock<boost::shared_mutex> lock(this->mutex_);
 
-        for (typename std::list<T>::const_iterator it = this->list_.begin(); it != this->list_.end(); ++it)
-            if (*it == value)
+        for (const T& element : this->list_)
+            if (element == value)
                 return true;
 
Index: code/trunk/src/libraries/core/command/TclThreadManager.cc
===================================================================
--- code/trunk/src/libraries/core/command/TclThreadManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/command/TclThreadManager.cc	(revision 11071)
@@ -34,5 +34,5 @@
 #include "TclThreadManager.h"
 
-#include <boost/bind.hpp>
+#include <functional>
 #include <boost/thread/thread.hpp>
 #include <boost/thread/locks.hpp>
@@ -86,5 +86,5 @@
     };
 
-    TclThreadManager* TclThreadManager::singletonPtr_s = 0;
+    TclThreadManager* TclThreadManager::singletonPtr_s = nullptr;
 
     /**
@@ -145,10 +145,10 @@
             {
                 boost::shared_lock<boost::shared_mutex> lock(*this->interpreterBundlesMutex_);
-                for (std::map<unsigned int, TclInterpreterBundle*>::const_iterator it = this->interpreterBundles_.begin(); it != this->interpreterBundles_.end(); ++it)
+                for (const auto& mapEntry : this->interpreterBundles_)
                 {
-                    if (it->first == 0)
+                    if (mapEntry.first == 0)
                         continue; // We'll handle the default interpreter later (and without threads of course)
 
-                    TclInterpreterBundle* bundle = it->second;
+                    TclInterpreterBundle* bundle = mapEntry.second;
                     if (!bundle->queue_.empty())
                     {
@@ -163,5 +163,5 @@
                                 {
                                     // Start a thread to execute the command
-                                    boost::thread(boost::bind(&tclThread, bundle, command));
+                                    boost::thread(std::bind(&tclThread, bundle, command));
                                 }
                                 else
@@ -289,5 +289,5 @@
         catch (const Tcl::tcl_error& e)
         {
-            bundle->interpreter_ = 0;
+            bundle->interpreter_ = nullptr;
             orxout(user_error, context::tcl) << "Tcl error while creating Tcl-interpreter (" << id_string << "): " << e.what() << endl;
         }
@@ -488,5 +488,5 @@
     void TclThreadManager::source(const std::string& file)
     {
-        boost::thread(boost::bind(&sourceThread, file));
+        boost::thread(std::bind(&sourceThread, file));
     }
 
@@ -521,5 +521,5 @@
         {
             TclThreadManager::error("No Tcl-interpreter with ID " + multi_cast<std::string>(id) + " existing.");
-            return 0;
+            return nullptr;
         }
     }
@@ -551,7 +551,7 @@
 
         std::list<unsigned int> threads;
-        for (std::map<unsigned int, TclInterpreterBundle*>::const_iterator it = this->interpreterBundles_.begin(); it != this->interpreterBundles_.end(); ++it)
-            if (it->first > 0 && it->first <= this->numInterpreterBundles_) // only list autonumbered interpreters (created with create()) - exclude the default interpreter 0 and all manually numbered interpreters)
-                threads.push_back(it->first);
+        for (const auto& mapEntry : this->interpreterBundles_)
+            if (mapEntry.first > 0 && mapEntry.first <= this->numInterpreterBundles_) // only list autonumbered interpreters (created with create()) - exclude the default interpreter 0 and all manually numbered interpreters)
+                threads.push_back(mapEntry.first);
         return threads;
     }
Index: code/trunk/src/libraries/core/commandline/CommandLineIncludes.h
===================================================================
--- code/trunk/src/libraries/core/commandline/CommandLineIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/core/commandline/CommandLineIncludes.h	(revision 11071)
@@ -64,8 +64,8 @@
             ~StaticallyInitializedCommandLineArgument() { delete argument_; }
 
-            virtual void load()
+            virtual void load() override
                 { CommandLineParser::addArgument(this->argument_); }
 
-            virtual void unload()
+            virtual void unload() override
                 { CommandLineParser::removeArgument(this->argument_); }
 
Index: code/trunk/src/libraries/core/commandline/CommandLineParser.cc
===================================================================
--- code/trunk/src/libraries/core/commandline/CommandLineParser.cc	(revision 11056)
+++ code/trunk/src/libraries/core/commandline/CommandLineParser.cc	(revision 11071)
@@ -40,5 +40,5 @@
 namespace orxonox
 {
-    CommandLineParser* CommandLineParser::singletonPtr_s = 0;
+    CommandLineParser* CommandLineParser::singletonPtr_s = nullptr;
 
     /**
@@ -110,11 +110,10 @@
             {
                 // first shove all the shortcuts in a map
-                for (std::map<std::string, CommandLineArgument*>::const_iterator it = cmdLineArgs_.begin();
-                    it != cmdLineArgs_.end(); ++it)
+                for (const auto& mapEntry : cmdLineArgs_)
                 {
-                    OrxAssert(cmdLineArgsShortcut_.find(it->second->getShortcut()) == cmdLineArgsShortcut_.end(),
+                    OrxAssert(cmdLineArgsShortcut_.find(mapEntry.second->getShortcut()) == cmdLineArgsShortcut_.end(),
                         "Cannot have two command line shortcut with the same name.");
-                    if (!it->second->getShortcut().empty())
-                        cmdLineArgsShortcut_[it->second->getShortcut()] = it->second;
+                    if (!mapEntry.second->getShortcut().empty())
+                        cmdLineArgsShortcut_[mapEntry.second->getShortcut()] = mapEntry.second;
                 }
                 bFirstTimeParse_ = false;
@@ -124,21 +123,21 @@
             std::string shortcut;
             std::string value;
-            for (unsigned int i = 0; i < arguments.size(); ++i)
-            {
-                if (arguments[i].size() != 0)
+            for (const std::string& argument : arguments)
+            {
+                if (argument.size() != 0)
                 {
                     // sure not ""
-                    if (arguments[i][0] == '-')
+                    if (argument[0] == '-')
                     {
                         // start with "-"
-                        if (arguments[i].size() == 1)
+                        if (argument.size() == 1)
                         {
                             // argument[i] is "-", probably a minus sign
                             value += "- ";
                         }
-                        else if (arguments[i][1] <= 57 && arguments[i][1] >= 48)
+                        else if (argument[1] <= 57 && argument[1] >= 48)
                         {
                             // negative number as a value
-                            value += arguments[i] + ' ';
+                            value += argument + ' ';
                         }
                         else
@@ -161,13 +160,13 @@
                             }
 
-                            if (arguments[i][1] == '-')
+                            if (argument[1] == '-')
                             {
                                 // full name argument with "--name"
-                                name = arguments[i].substr(2);
+                                name = argument.substr(2);
                             }
                             else
                             {
                                 // shortcut with "-s"
-                                shortcut = arguments[i].substr(1);
+                                shortcut = argument.substr(1);
                             }
 
@@ -186,5 +185,5 @@
 
                         // Concatenate strings as long as there's no new argument by "-" or "--"
-                        value += arguments[i] + ' ';
+                        value += argument + ' ';
                     }
                 }
@@ -257,8 +256,7 @@
         // determine maximum name size
         size_t maxNameSize = 0;
-        for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
-            it != inst.cmdLineArgs_.end(); ++it)
-        {
-            maxNameSize = std::max(it->second->getName().size(), maxNameSize);
+        for (const auto& mapEntry : inst.cmdLineArgs_)
+        {
+            maxNameSize = std::max(mapEntry.second->getName().size(), maxNameSize);
         }
 
@@ -267,19 +265,18 @@
         infoStr << "Available options:" << endl;
 
-        for (std::map<std::string, CommandLineArgument*>::const_iterator it = inst.cmdLineArgs_.begin();
-            it != inst.cmdLineArgs_.end(); ++it)
-        {
-            if (!it->second->getShortcut().empty())
-                infoStr << " [-" << it->second->getShortcut() << "] ";
+        for (const auto& mapEntry : inst.cmdLineArgs_)
+        {
+            if (!mapEntry.second->getShortcut().empty())
+                infoStr << " [-" << mapEntry.second->getShortcut() << "] ";
             else
                 infoStr << "      ";
-            infoStr << "--" << it->second->getName() << ' ';
-            if (it->second->getValue().isType<bool>())
+            infoStr << "--" << mapEntry.second->getName() << ' ';
+            if (mapEntry.second->getValue().isType<bool>())
                 infoStr << "    ";
             else
                 infoStr << "ARG ";
             // fill with the necessary amount of blanks
-            infoStr << std::string(maxNameSize - it->second->getName().size(), ' ');
-            infoStr << ": " << it->second->getInformation();
+            infoStr << std::string(maxNameSize - mapEntry.second->getName().size(), ' ');
+            infoStr << ": " << mapEntry.second->getInformation();
             infoStr << endl;
         }
Index: code/trunk/src/libraries/core/commandline/CommandLineParser.h
===================================================================
--- code/trunk/src/libraries/core/commandline/CommandLineParser.h	(revision 11056)
+++ code/trunk/src/libraries/core/commandline/CommandLineParser.h	(revision 11071)
@@ -107,6 +107,7 @@
 
     private:
-        //! Undefined copy constructor
-        CommandLineArgument(const CommandLineArgument& instance);
+        // non-copyable:
+        CommandLineArgument(const CommandLineArgument&) = delete;
+        CommandLineArgument& operator=(const CommandLineArgument&) = delete;
 
         //! Parses the value string of a command line argument.
Index: code/trunk/src/libraries/core/config/ConfigFile.cc
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFile.cc	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFile.cc	(revision 11071)
@@ -35,4 +35,8 @@
 
 #include <boost/filesystem.hpp>
+
+#include <iterator>
+#include <algorithm>
+#include <fstream>
 
 #include "util/Convert.h"
@@ -93,5 +97,7 @@
                         try
                         {
-                            boost::filesystem::copy_file(defaultFilepath, filepath);
+                            std::ifstream input(defaultFilepath.string().c_str(), std::ifstream::in | std::ifstream::binary);
+                            std::ofstream output(filepath.string().c_str(), std::ofstream::out | std::ofstream::binary);
+                            copy(std::istreambuf_iterator<char>(input), std::istreambuf_iterator<char>(), std::ostream_iterator<char>(output));
                             orxout(internal_info, context::config) << "Copied " << this->filename_ << " from the default config folder." << endl;
                         }
@@ -108,5 +114,5 @@
         if (file.is_open())
         {
-            ConfigFileSection* newsection = 0;
+            ConfigFileSection* newsection = nullptr;
 
             while (file.good() && !file.eof())
@@ -135,5 +141,5 @@
                 }
 
-                if (newsection != 0)
+                if (newsection != nullptr)
                 {
                     if (isComment(line))
@@ -228,10 +234,10 @@
         }
 
-        for (std::list<ConfigFileSection*>::const_iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-        {
-            file << (*it)->getFileEntry() << endl;
-
-            for (std::list<ConfigFileEntry*>::const_iterator it_entries = (*it)->getEntriesBegin(); it_entries != (*it)->getEntriesEnd(); ++it_entries)
-                file << (*it_entries)->getFileEntry() << endl;
+        for (ConfigFileSection* section : this->sections_)
+        {
+            file << section->getFileEntry() << endl;
+
+            for (ConfigFileEntry* entry : section->getEntries())
+                file << entry->getFileEntry() << endl;
 
             file << endl;
@@ -270,12 +276,12 @@
 
     /**
-        @brief Returns a pointer to the section with given name (or NULL if the section doesn't exist).
-    */
-    ConfigFileSection* ConfigFile::getSection(const std::string& section) const
-    {
-        for (std::list<ConfigFileSection*>::const_iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-            if ((*it)->getName() == section)
-                return (*it);
-        return NULL;
+        @brief Returns a pointer to the section with given name (or nullptr if the section doesn't exist).
+    */
+    ConfigFileSection* ConfigFile::getSection(const std::string& sectionName) const
+    {
+        for (ConfigFileSection* section : this->sections_)
+            if (section->getName() == sectionName)
+                return section;
+        return nullptr;
     }
 
@@ -283,13 +289,13 @@
         @brief Returns a pointer to the section with given name. If it doesn't exist, the section is created.
     */
-    ConfigFileSection* ConfigFile::getOrCreateSection(const std::string& section)
-    {
-        for (std::list<ConfigFileSection*>::iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-            if ((*it)->getName() == section)
-                return (*it);
+    ConfigFileSection* ConfigFile::getOrCreateSection(const std::string& sectionName)
+    {
+        for (ConfigFileSection* section : this->sections_)
+            if (section->getName() == sectionName)
+                return section;
 
         this->bUpdated_ = true;
 
-        return (*this->sections_.insert(this->sections_.end(), new ConfigFileSection(section)));
+        return (*this->sections_.insert(this->sections_.end(), new ConfigFileSection(sectionName)));
     }
 
@@ -301,10 +307,10 @@
         bool sectionsUpdated = false;
 
-        for (std::list<ConfigFileSection*>::iterator it = this->sections_.begin(); it != this->sections_.end(); ++it)
-        {
-            if ((*it)->bUpdated_)
+        for (ConfigFileSection* section : this->sections_)
+        {
+            if (section->bUpdated_)
             {
                 sectionsUpdated = true;
-                (*it)->bUpdated_ = false;
+                section->bUpdated_ = false;
             }
         }
Index: code/trunk/src/libraries/core/config/ConfigFileEntry.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileEntry.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileEntry.h	(revision 11071)
@@ -51,5 +51,5 @@
         public:
             /// Destructor
-            virtual ~ConfigFileEntry() {};
+            virtual ~ConfigFileEntry() = default;
 
             /// Changes the value of the entry.
Index: code/trunk/src/libraries/core/config/ConfigFileEntryComment.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileEntryComment.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileEntryComment.h	(revision 11071)
@@ -54,21 +54,21 @@
 
             /// Destructor
-            inline virtual ~ConfigFileEntryComment() {}
+            virtual inline ~ConfigFileEntryComment() = default;
 
-            inline virtual const std::string& getName() const
+            virtual inline const std::string& getName() const override
                 { return this->comment_; }
 
-            inline virtual void setComment(const std::string& comment)
+            virtual inline void setComment(const std::string& comment) override
                 { this->comment_ = comment; }
 
-            inline virtual void setValue(const std::string& value)
+            virtual inline void setValue(const std::string& value) override
                 {}
-            inline virtual const std::string& getValue() const
+            virtual inline const std::string& getValue() const override
                 { return BLANKSTRING; }
 
-            inline void setString(bool bString)
+            virtual inline void setString(bool bString) override
                 {}
 
-            inline virtual const std::string& getFileEntry() const
+            virtual inline const std::string& getFileEntry() const override
                 { return this->comment_; }
 
Index: code/trunk/src/libraries/core/config/ConfigFileEntryValue.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileEntryValue.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileEntryValue.h	(revision 11071)
@@ -67,25 +67,25 @@
 
             /// Destructor
-            inline virtual ~ConfigFileEntryValue() {}
+            virtual inline ~ConfigFileEntryValue() = default;
 
-            inline virtual const std::string& getName() const
+            virtual inline const std::string& getName() const override
                 { return this->name_; }
 
-            inline virtual void setComment(const std::string& comment)
+            virtual inline void setComment(const std::string& comment) override
                 { this->additionalComment_ = comment; this->update(); }
 
-            inline virtual void setValue(const std::string& value)
+            virtual inline void setValue(const std::string& value) override
                 { this->value_ = value; this->update(); }
-            inline virtual const std::string& getValue() const
+            virtual inline const std::string& getValue() const override
                 { return this->value_; }
 
-            inline void virtual setString(bool bString)
+            virtual inline void setString(bool bString) override
                 { this->bString_ = bString; this->update(); }
 
-            inline virtual const std::string& getFileEntry() const
+            virtual inline const std::string& getFileEntry() const override
                 { return this->fileEntry_; }
 
             /// Returns the "key" of the value (in this case it's just the name of the entry, but for vectors it's different)
-            inline virtual const std::string& getKeyString() const
+            virtual inline const std::string& getKeyString() const
                 { return this->name_; }
 
Index: code/trunk/src/libraries/core/config/ConfigFileEntryVectorValue.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileEntryVectorValue.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileEntryVectorValue.h	(revision 11071)
@@ -65,15 +65,15 @@
 
             /// Destructor
-            inline ~ConfigFileEntryVectorValue() {}
+            inline ~ConfigFileEntryVectorValue() = default;
 
-            inline unsigned int getIndex() const
+            virtual inline unsigned int getIndex() const override
                 { return this->index_; }
 
             /// Returns the "key" of the value (the name of the vector plus the index of the element)
-            inline const std::string& getKeyString() const
+            virtual inline const std::string& getKeyString() const override
                 { return this->keyString_; }
 
         private:
-            void update();
+            virtual void update() override;
 
             unsigned int index_;        ///< The index of the element in the vector
Index: code/trunk/src/libraries/core/config/ConfigFileManager.cc
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileManager.cc	(revision 11071)
@@ -42,10 +42,10 @@
     ///////////////////////
 
-    ConfigFileManager* ConfigFileManager::singletonPtr_s = 0;
+    ConfigFileManager* ConfigFileManager::singletonPtr_s = nullptr;
 
-    /// Constructor: Initializes the array of config files with NULL.
+    /// Constructor: Initializes the array of config files with nullptr.
     ConfigFileManager::ConfigFileManager()
     {
-        this->configFiles_.assign(NULL);
+        this->configFiles_.fill(nullptr);
     }
 
@@ -53,7 +53,7 @@
     ConfigFileManager::~ConfigFileManager()
     {
-        for (boost::array<ConfigFile*, 3>::const_iterator it = this->configFiles_.begin(); it != this->configFiles_.end(); ++it)
-            if (*it)
-                delete (*it);
+        for (ConfigFile* configFile : this->configFiles_)
+            if (configFile)
+                delete configFile;
     }
 
Index: code/trunk/src/libraries/core/config/ConfigFileManager.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileManager.h	(revision 11071)
@@ -38,5 +38,5 @@
 #include "core/CorePrereqs.h"
 
-#include <boost/array.hpp>
+#include <array>
 
 #include "util/Singleton.h"
@@ -67,7 +67,9 @@
 
         private:
-            ConfigFileManager(const ConfigFileManager&);    ///< Copy-constructor: not implemented
+            // non-copyable:
+            ConfigFileManager(const ConfigFileManager&) = delete;
+            ConfigFileManager& operator=(const ConfigFileManager&) = delete;
 
-            boost::array<ConfigFile*, 3> configFiles_;      ///< Stores the config files for each type in an array (must have the same size like ConfigFileType::Value)
+            std::array<ConfigFile*, 3> configFiles_;        ///< Stores the config files for each type in an array (must have the same size like ConfigFileType::Value)
             static ConfigFileManager* singletonPtr_s;       ///< Stores the singleton-pointer
     };
Index: code/trunk/src/libraries/core/config/ConfigFileSection.cc
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileSection.cc	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileSection.cc	(revision 11071)
@@ -80,8 +80,8 @@
     {
         unsigned int size = 0;
-        for (std::list<ConfigFileEntry*>::const_iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
-            if ((*it)->getName() == name)
-                if ((*it)->getIndex() >= size)
-                    size = (*it)->getIndex() + 1;
+        for (ConfigFileEntry* entry : this->entries_)
+            if (entry->getName() == name)
+                if (entry->getIndex() >= size)
+                    size = entry->getIndex() + 1;
         return size;
     }
@@ -99,5 +99,5 @@
 
     /**
-        @brief Returns the entry with given name (or NULL if it doesn't exist).
+        @brief Returns the entry with given name (or nullptr if it doesn't exist).
 
         @param name     The name of the entry
@@ -105,14 +105,14 @@
     ConfigFileEntry* ConfigFileSection::getEntry(const std::string& name) const
     {
-        for (std::list<ConfigFileEntry*>::const_iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
+        for (ConfigFileEntry* entry : this->entries_)
         {
-            if ((*it)->getName() == name)
-                return *it;
+            if (entry->getName() == name)
+                return entry;
         }
-        return NULL;
+        return nullptr;
     }
 
     /**
-        @brief Returns the entry of a vector element with given name and index (or NULL if it doesn't exist).
+        @brief Returns the entry of a vector element with given name and index (or nullptr if it doesn't exist).
 
         @param name     The name of the vector
@@ -121,10 +121,10 @@
     ConfigFileEntry* ConfigFileSection::getEntry(const std::string& name, unsigned int index) const
     {
-        for (std::list<ConfigFileEntry*>::const_iterator it = this->entries_.begin(); it != this->entries_.end(); ++it)
+        for (ConfigFileEntry* entry : this->entries_)
         {
-            if (((*it)->getName() == name) && ((*it)->getIndex() == index))
-                return *it;
+            if ((entry->getName() == name) && (entry->getIndex() == index))
+                return entry;
         }
-        return NULL;
+        return nullptr;
     }
 
Index: code/trunk/src/libraries/core/config/ConfigFileSection.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigFileSection.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigFileSection.h	(revision 11071)
@@ -39,4 +39,5 @@
 #include <string>
 #include <list>
+#include "util/StringUtils.h"
 #include "ConfigFileEntry.h"
 
@@ -160,10 +161,6 @@
             std::list<ConfigFileEntry*>& getEntries()
                 { return this->entries_; }
-            /// Returns the begin-iterator of the list of entries in this section.
-            std::list<ConfigFileEntry*>::const_iterator getEntriesBegin() const
-                { return this->entries_.begin(); }
-            /// Returns the end-iterator of the list of entries in this section.
-            std::list<ConfigFileEntry*>::const_iterator getEntriesEnd() const
-                { return this->entries_.end(); }
+            const std::list<ConfigFileEntry*>& getEntries() const
+                { return this->entries_; }
 
             std::list<ConfigFileEntry*>::iterator getOrCreateEntryIterator(const std::string& name, const std::string& fallback, bool bString);
Index: code/trunk/src/libraries/core/config/ConfigValueContainer.cc
===================================================================
--- code/trunk/src/libraries/core/config/ConfigValueContainer.cc	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigValueContainer.cc	(revision 11071)
@@ -53,5 +53,5 @@
         this->sectionname_ = sectionname;
         this->varname_ = varname;
-        this->callback_ = 0;
+        this->callback_ = nullptr;
         this->bContainerIsNew_ = true;
         this->bDoInitialCallback_ = false;
@@ -191,5 +191,5 @@
                 for (unsigned int i = this->valueVector_.size(); i <= index; i++)
                 {
-                    this->valueVector_.push_back(MultiType());
+                    this->valueVector_.emplace_back();
                 }
             }
Index: code/trunk/src/libraries/core/config/ConfigValueContainer.h
===================================================================
--- code/trunk/src/libraries/core/config/ConfigValueContainer.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/ConfigValueContainer.h	(revision 11071)
@@ -59,5 +59,5 @@
         public:
             virtual void call(void* object) = 0;
-            inline virtual ~ConfigValueCallbackBase() {}
+            virtual inline ~ConfigValueCallbackBase() {}
     };
 
@@ -67,6 +67,6 @@
         public:
             inline ConfigValueCallback(void (T::*function) (void)) : function_(function) {}
-            inline virtual ~ConfigValueCallback() {}
-            inline virtual void call(void* object)
+            virtual inline ~ConfigValueCallback() = default;
+            virtual inline void call(void* object) override
             {
                 if (!IdentifierManager::getInstance().isCreatingHierarchy())
@@ -130,6 +130,6 @@
 
                 this->value_ = V();
-                for (unsigned int i = 0; i < defvalue.size(); i++)
-                    this->valueVector_.push_back(MultiType(defvalue[i]));
+                for (const D& defvalueElement : defvalue)
+                    this->valueVector_.emplace_back(defvalueElement);
 
                 this->initVector();
@@ -183,6 +183,6 @@
                     std::vector<T> temp = *value;
                     value->clear();
-                    for (unsigned int i = 0; i < this->valueVector_.size(); ++i)
-                        value->push_back(this->valueVector_[i]);
+                    for (const MultiType& vectorEntry : this->valueVector_)
+                        value->push_back(vectorEntry);
 
                     if (value->size() != temp.size())
@@ -211,6 +211,6 @@
                 {
                     value->clear();
-                    for (unsigned int i = 0; i < this->valueVector_.size(); ++i)
-                        value->push_back(this->valueVector_[i]);
+                    for (const MultiType& vectorEntry : this->valueVector_)
+                        value->push_back(vectorEntry);
                 }
                 return *this;
@@ -223,5 +223,5 @@
             inline const std::string& getSectionName() const
                 { return this->sectionname_; }
-            /// Returns the associated identifier (can be NULL).
+            /// Returns the associated identifier (can be nullptr).
             inline Identifier* getIdentifier() const
                 { return this->identifier_; }
Index: code/trunk/src/libraries/core/config/SettingsConfigFile.cc
===================================================================
--- code/trunk/src/libraries/core/config/SettingsConfigFile.cc	(revision 11056)
+++ code/trunk/src/libraries/core/config/SettingsConfigFile.cc	(revision 11071)
@@ -57,5 +57,5 @@
     SetConsoleCommand(__CC_getConfig_name,       &SettingsConfigFile::getConfig).argumentCompleter(0, autocompletion::settingssections()).argumentCompleter(1, autocompletion::settingsentries());
 
-    SettingsConfigFile* SettingsConfigFile::singletonPtr_s = 0;
+    SettingsConfigFile* SettingsConfigFile::singletonPtr_s = nullptr;
 
     /**
@@ -77,9 +77,9 @@
     SettingsConfigFile::~SettingsConfigFile()
     {
-        ModifyConsoleCommand(__CC_load_name).setObject(0);
-        ModifyConsoleCommand(__CC_setFilename_name).setObject(0);
-        ModifyConsoleCommand(__CC_config_name).setObject(0);
-        ModifyConsoleCommand(__CC_tconfig_name).setObject(0);
-        ModifyConsoleCommand(__CC_getConfig_name).setObject(0);
+        ModifyConsoleCommand(__CC_load_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_setFilename_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_config_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_tconfig_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_getConfig_name).setObject(nullptr);
     }
 
@@ -106,5 +106,5 @@
     void SettingsConfigFile::addConfigValueContainer(ConfigValueContainer* container)
     {
-        if (container == NULL)
+        if (container == nullptr)
             return;
         std::pair<std::string, ConfigValueContainer*> second(getLowercase(container->getName()), container);
@@ -118,5 +118,5 @@
     void SettingsConfigFile::removeConfigValueContainer(ConfigValueContainer* container)
     {
-        if (container == NULL)
+        if (container == nullptr)
             return;
         const std::string& sectionLC = getLowercase(container->getSectionName());
@@ -142,8 +142,8 @@
         // todo: can this be done more efficiently? looks like some identifiers will be updated multiple times.
 
-        for (ContainerMap::const_iterator it = this->containers_.begin(); it != this->containers_.end(); ++it)
-        {
-            it->second.second->update();
-            it->second.second->getIdentifier()->updateConfigValues();
+        for (const auto& mapEntry : this->containers_)
+        {
+            mapEntry.second.second->update();
+            mapEntry.second.second->getIdentifier()->updateConfigValues();
         }
     }
@@ -269,5 +269,5 @@
             {
                 std::string value;
-                it->second.second->getValue<std::string, void>(&value, NULL);
+                it->second.second->getValue<std::string, void>(&value, nullptr);
                 return value;
             }
Index: code/trunk/src/libraries/core/config/SettingsConfigFile.h
===================================================================
--- code/trunk/src/libraries/core/config/SettingsConfigFile.h	(revision 11056)
+++ code/trunk/src/libraries/core/config/SettingsConfigFile.h	(revision 11071)
@@ -63,10 +63,10 @@
 
         public:
-            typedef std::multimap<std::string, std::pair<std::string, ConfigValueContainer*> > ContainerMap;
+            typedef std::multimap<std::string, std::pair<std::string, ConfigValueContainer*>> ContainerMap;
 
             SettingsConfigFile(const std::string& filename);
             ~SettingsConfigFile();
 
-            void load(); // tolua_export
+            virtual void load() override; // tolua_export
             void setFilename(const std::string& filename); // tolua_export
             void clean(bool bCleanComments = false); // tolua_export
Index: code/trunk/src/libraries/core/input/Button.cc
===================================================================
--- code/trunk/src/libraries/core/input/Button.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/Button.cc	(revision 11071)
@@ -53,5 +53,5 @@
     Button::Button()
         : bButtonThresholdUser_(false)
-        , paramCommandBuffer_(0)
+        , paramCommandBuffer_(nullptr)
     {
         nCommands_[0]=0;
@@ -75,5 +75,5 @@
                     delete commands_[j][i];
                 delete[] commands_[j];
-                commands_[j] = 0;
+                commands_[j] = nullptr;
                 nCommands_[j] = 0;
             }
@@ -196,15 +196,15 @@
 
                     // add command to the buffer if not yet existing
-                    for (unsigned int iParamCmd = 0; iParamCmd < paramCommandBuffer_->size(); iParamCmd++)
-                    {
-                        if ((*paramCommandBuffer_)[iParamCmd]->evaluation_.getConsoleCommand()
+                    for (BufferedParamCommand* command : *paramCommandBuffer_)
+                    {
+                        if (command->evaluation_.getConsoleCommand()
                             == eval.getConsoleCommand())
                         {
                             // already in list
-                            cmd->paramCommand_ = (*paramCommandBuffer_)[iParamCmd];
+                            cmd->paramCommand_ = command;
                             break;
                         }
                     }
-                    if (cmd->paramCommand_ == 0)
+                    if (cmd->paramCommand_ == nullptr)
                     {
                         cmd->paramCommand_ = new BufferedParamCommand();
@@ -239,5 +239,5 @@
             }
             else
-                commands_[j] = 0;
+                commands_[j] = nullptr;
         }
     }
Index: code/trunk/src/libraries/core/input/HalfAxis.h
===================================================================
--- code/trunk/src/libraries/core/input/HalfAxis.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/HalfAxis.h	(revision 11071)
@@ -49,5 +49,5 @@
             : relVal_(0.0f)
             , absVal_(0.0f)
-            , paramCommands_(0)
+            , paramCommands_(nullptr)
             , nParamCommands_(0)
             , pressed_(false)
@@ -56,6 +56,6 @@
         using Button::execute;
         bool execute();
-        bool addParamCommand(ParamCommand* command);
-        void clear();
+        virtual bool addParamCommand(ParamCommand* command) override;
+        virtual void clear() override;
         void reset();
 
Index: code/trunk/src/libraries/core/input/InputBuffer.cc
===================================================================
--- code/trunk/src/libraries/core/input/InputBuffer.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputBuffer.cc	(revision 11071)
@@ -75,7 +75,6 @@
     InputBuffer::~InputBuffer()
     {
-        for (std::list<BaseInputBufferListenerTuple*>::const_iterator it = this->listeners_.begin();
-            it != this->listeners_.end(); ++it)
-            delete *it;
+        for (BaseInputBufferListenerTuple* listener : this->listeners_)
+            delete listener;
     }
 
@@ -110,10 +109,10 @@
     void InputBuffer::insert(const std::string& input, bool update)
     {
-        for (unsigned int i = 0; i < input.size(); ++i)
-        {
-            this->insert(input[i], false);
+        for (const char& inputChar : input)
+        {
+            this->insert(inputChar, false);
 
             if (update)
-                this->updated(input[i], false);
+                this->updated(inputChar, false);
         }
 
@@ -170,8 +169,8 @@
     void InputBuffer::updated()
     {
-        for (std::list<BaseInputBufferListenerTuple*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
-        {
-            if ((*it)->bListenToAllChanges_)
-                (*it)->callFunction();
+        for (BaseInputBufferListenerTuple* listener : this->listeners_)
+        {
+            if (listener->bListenToAllChanges_)
+                listener->callFunction();
         }
     }
@@ -179,8 +178,8 @@
     void InputBuffer::updated(const char& update, bool bSingleInput)
     {
-        for (std::list<BaseInputBufferListenerTuple*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
-        {
-            if ((!(*it)->trueKeyFalseChar_) && ((*it)->bListenToAllChanges_ || ((*it)->char_ == update)) && (!(*it)->bOnlySingleInput_ || bSingleInput))
-                (*it)->callFunction();
+        for (BaseInputBufferListenerTuple* listener : this->listeners_)
+        {
+            if ((!listener->trueKeyFalseChar_) && (listener->bListenToAllChanges_ || (listener->char_ == update)) && (!listener->bOnlySingleInput_ || bSingleInput))
+                listener->callFunction();
         }
     }
@@ -201,8 +200,8 @@
             return;
 
-        for (std::list<BaseInputBufferListenerTuple*>::iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
-        {
-            if ((*it)->trueKeyFalseChar_ && ((*it)->key_ == evt.getKeyCode()))
-                (*it)->callFunction();
+        for (BaseInputBufferListenerTuple* listener : this->listeners_)
+        {
+            if (listener->trueKeyFalseChar_ && (listener->key_ == evt.getKeyCode()))
+                listener->callFunction();
         }
 
Index: code/trunk/src/libraries/core/input/InputBuffer.h
===================================================================
--- code/trunk/src/libraries/core/input/InputBuffer.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputBuffer.h	(revision 11071)
@@ -47,5 +47,5 @@
               trueKeyFalseChar_(trueKeyFalseChar), char_(_char), key_(key)
         { }
-        virtual ~BaseInputBufferListenerTuple() { }
+        virtual ~BaseInputBufferListenerTuple() = default;
         virtual void callFunction() = 0;
         bool bListenToAllChanges_;
@@ -65,6 +65,6 @@
               listener_(listener), function_(function)
         { }
-        virtual ~InputBufferListenerTuple() { }
-        void callFunction()
+        virtual ~InputBufferListenerTuple() = default;
+        virtual void callFunction() override
         {
             (listener_->*function_)();
@@ -165,13 +165,13 @@
                 { if (this->cursor_ > 0) { --this->cursor_; } }
 
-            void buttonPressed(const KeyEvent& evt);
+            virtual void buttonPressed(const KeyEvent& evt) override;
 
         private:
             bool charIsAllowed(const char& input);
 
-            void buttonHeld   (const KeyEvent& evt);
-            void processKey   (const KeyEvent& evt);
+            virtual void buttonHeld (const KeyEvent& evt) override;
+            void processKey (const KeyEvent& evt);
 
-            void keyboardUpdated(float dt);
+            virtual void keyboardUpdated(float dt) override;
 
             std::string buffer_;
Index: code/trunk/src/libraries/core/input/InputCommands.h
===================================================================
--- code/trunk/src/libraries/core/input/InputCommands.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputCommands.h	(revision 11071)
@@ -57,5 +57,5 @@
     public:
         BaseCommand() : bFixedKeybindMode_(false) {}
-        virtual ~BaseCommand() { }
+        virtual ~BaseCommand() = default;
 
         virtual bool execute(float abs = 1.0f, float rel = 1.0f) = 0;
@@ -76,7 +76,7 @@
     {
     public:
-        bool execute(float abs = 1.0f, float rel = 1.0f);
-        CommandEvaluation* getEvaluation();
-        virtual SimpleCommand* clone() { return new SimpleCommand(*this); }
+        virtual bool execute(float abs = 1.0f, float rel = 1.0f) override;
+        virtual CommandEvaluation* getEvaluation() override;
+        virtual SimpleCommand* clone() override { return new SimpleCommand(*this); }
 
         CommandEvaluation evaluation_;
@@ -103,8 +103,8 @@
     {
     public:
-        ParamCommand() : scale_(1.0f), paramCommand_(0) { }
-        bool execute(float abs = 1.0f, float rel = 1.0f);
-        CommandEvaluation* getEvaluation();
-        virtual ParamCommand* clone() { return new ParamCommand(*this); }
+        ParamCommand() : scale_(1.0f), paramCommand_(nullptr) { }
+        virtual bool execute(float abs = 1.0f, float rel = 1.0f) override;
+        virtual CommandEvaluation* getEvaluation() override;
+        virtual ParamCommand* clone() override { return new ParamCommand(*this); }
 
         float scale_;
@@ -118,5 +118,5 @@
             return &this->paramCommand_->evaluation_;
         else
-            return 0;
+            return nullptr;
     }
 }
Index: code/trunk/src/libraries/core/input/InputDevice.h
===================================================================
--- code/trunk/src/libraries/core/input/InputDevice.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputDevice.h	(revision 11071)
@@ -60,5 +60,5 @@
         //! Only resets the members
         InputDevice(unsigned int id) : bCalibrating_(false), deviceID_(id) { }
-        virtual ~InputDevice() { }
+        virtual ~InputDevice() = default;
         //! Returns the device class (derived) name as string
         virtual std::string getClassName() const = 0;
@@ -99,5 +99,7 @@
 
     private:
-        InputDevice(const InputDevice& rhs); //!< Don't use!
+        // non-copyable:
+        InputDevice(const InputDevice&) = delete;
+        InputDevice& operator=(const InputDevice&) = delete;
 
         bool bCalibrating_;                  //!< Whether the device is in calibration mode
@@ -153,17 +155,17 @@
 
         //! Captures OIS events (which then get distributed to the derived class) and creates the button held events
-        void update(const Clock& time)
+        virtual void update(const Clock& time) override
         {
             oisDevice_->capture();
 
             // Call all the states with the held button event
-            for (unsigned int iB = 0; iB < pressedButtons_.size(); ++iB)
-                for (unsigned int iS = 0; iS < inputStates_.size(); ++iS)
-                    inputStates_[iS]->buttonEvent<ButtonEvent::THold, typename Traits::ButtonTypeParam>(
-                        this->getDeviceID(), static_cast<DeviceClass*>(this)->getButtonEventArg(pressedButtons_[iB]));
+            for (ButtonType& button : pressedButtons_)
+                for (InputState* state : inputStates_)
+                    state->template buttonEvent<ButtonEvent::THold, typename Traits::ButtonTypeParam>(
+                        this->getDeviceID(), static_cast<DeviceClass*>(this)->getButtonEventArg(button));
 
             // Call states with device update events
-            for (unsigned int i = 0; i < inputStates_.size(); ++i)
-                inputStates_[i]->update(time.getDeltaTime(), this->getDeviceID());
+            for (InputState* state : inputStates_)
+                state->update(time.getDeltaTime(), this->getDeviceID());
 
             static_cast<DeviceClass*>(this)->updateImpl(time);
@@ -171,5 +173,5 @@
 
         //! Clears the list of pressed buttons and calls the derived class's method
-        void clearBuffers()
+        virtual void clearBuffers() override
         {
             pressedButtons_.clear();
@@ -180,5 +182,5 @@
         OISDeviceClass* getOISDevice()   { return this->oisDevice_; }
         // Returns the name of the derived class as string
-        std::string getClassName() const { return DeviceClass::getClassNameImpl(); }
+        virtual std::string getClassName() const override { return DeviceClass::getClassNameImpl(); }
 
     protected:
@@ -196,6 +198,6 @@
 
             // Call states
-            for (unsigned int i = 0; i < inputStates_.size(); ++i)
-                inputStates_[i]->buttonEvent<ButtonEvent::TPress, typename Traits::ButtonTypeParam>(this->getDeviceID(), static_cast<DeviceClass*>(this)->getButtonEventArg(button));
+            for (InputState* state : inputStates_)
+                state->template buttonEvent<ButtonEvent::TPress, typename Traits::ButtonTypeParam>(this->getDeviceID(), static_cast<DeviceClass*>(this)->getButtonEventArg(button));
         }
 
@@ -218,6 +220,6 @@
 
             // Call states
-            for (unsigned int i = 0; i < inputStates_.size(); ++i)
-                inputStates_[i]->buttonEvent<ButtonEvent::TRelease, typename Traits::ButtonTypeParam>(this->getDeviceID(), static_cast<DeviceClass*>(this)->getButtonEventArg(button));
+            for (InputState* state : inputStates_)
+                state->template buttonEvent<ButtonEvent::TRelease, typename Traits::ButtonTypeParam>(this->getDeviceID(), static_cast<DeviceClass*>(this)->getButtonEventArg(button));
         }
 
Index: code/trunk/src/libraries/core/input/InputHandler.h
===================================================================
--- code/trunk/src/libraries/core/input/InputHandler.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputHandler.h	(revision 11071)
@@ -119,5 +119,5 @@
     {
     public:
-        virtual ~InputHandler() { }
+        virtual ~InputHandler() = default;
 
         template<class T> void buttonEvent(unsigned int device, T button, ButtonEvent::TPress)
Index: code/trunk/src/libraries/core/input/InputManager.cc
===================================================================
--- code/trunk/src/libraries/core/input/InputManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputManager.cc	(revision 11071)
@@ -39,5 +39,4 @@
 #include <ois/OISException.h>
 #include <ois/OISInputManager.h>
-#include <boost/foreach.hpp>
 #include <loki/ScopeGuard.h>
 
@@ -72,5 +71,5 @@
     InputHandler InputHandler::EMPTY;
 
-    InputManager* InputManager::singletonPtr_s = 0;
+    InputManager* InputManager::singletonPtr_s = nullptr;
 
     //! Defines the |= operator for easier use.
@@ -94,9 +93,9 @@
     InputManager::InputManager()
         : internalState_(Bad)
-        , oisInputManager_(0)
+        , oisInputManager_(nullptr)
         , devices_(2)
         , exclusiveMouse_(false)
-        , emptyState_(0)
-        , calibratorCallbackHandler_(0)
+        , emptyState_(nullptr)
+        , calibratorCallbackHandler_(nullptr)
     {
         RegisterObject(InputManager);
@@ -149,6 +148,6 @@
         // When loading the devices they should not already be loaded
         assert(internalState_ & Bad);
-        assert(devices_[InputDeviceEnumerator::Mouse] == 0);
-        assert(devices_[InputDeviceEnumerator::Keyboard] == 0);
+        assert(devices_[InputDeviceEnumerator::Mouse] == nullptr);
+        assert(devices_[InputDeviceEnumerator::Keyboard] == nullptr);
         assert(devices_.size() == InputDeviceEnumerator::FirstJoyStick);
 
@@ -210,5 +209,5 @@
         catch (const std::exception& ex)
         {
-            oisInputManager_ = NULL;
+            oisInputManager_ = nullptr;
             internalState_ |= Bad;
             ThrowException(InitialisationFailed, "Could not initialise the input system: " << ex.what());
@@ -294,6 +293,6 @@
 
         // Reset console commands
-        ModifyConsoleCommand(__CC_InputManager_name, __CC_calibrate_name).setObject(0);
-        ModifyConsoleCommand(__CC_InputManager_name, __CC_reload_name).setObject(0);
+        ModifyConsoleCommand(__CC_InputManager_name, __CC_calibrate_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_InputManager_name, __CC_reload_name).setObject(nullptr);
 
         orxout(internal_status, context::input) << "InputManager: Destruction complete." << endl;
@@ -310,16 +309,16 @@
         orxout(verbose, context::input) << "InputManager: Destroying devices..." << endl;
 
-        BOOST_FOREACH(InputDevice*& device, devices_)
-        {
-            if (device == NULL)
+        for (InputDevice*& device : devices_)
+        {
+            if (device == nullptr)
                 continue;
             const std::string& className = device->getClassName();
             delete device;
-            device = 0;
+            device = nullptr;
             orxout(verbose, context::input) << className << " destroyed." << endl;
         }
         devices_.resize(InputDeviceEnumerator::FirstJoyStick);
 
-        assert(oisInputManager_ != NULL);
+        assert(oisInputManager_ != nullptr);
         try
         {
@@ -331,5 +330,5 @@
                                                    << "Potential resource leak!" << endl;
         }
-        oisInputManager_ = NULL;
+        oisInputManager_ = nullptr;
 
         internalState_ |= Bad;
@@ -374,9 +373,9 @@
         // check whether a state has changed its EMPTY situation
         bool bUpdateRequired = false;
-        for (std::map<int, InputState*>::iterator it = activeStates_.begin(); it != activeStates_.end(); ++it)
-        {
-            if (it->second->hasExpired())
-            {
-                it->second->resetExpiration();
+        for (const auto& mapEntry : activeStates_)
+        {
+            if (mapEntry.second->hasExpired())
+            {
+                mapEntry.second->resetExpiration();
                 bUpdateRequired = true;
             }
@@ -387,11 +386,11 @@
         // Capture all the input and collect the function calls
         // No event gets triggered here yet!
-        BOOST_FOREACH(InputDevice* device, devices_)
-            if (device != NULL)
+        for  (InputDevice* device : devices_)
+            if (device != nullptr)
                 device->update(time);
 
         // Collect function calls for the update
-        for (unsigned int i = 0; i < activeStatesTicked_.size(); ++i)
-            activeStatesTicked_[i]->update(time.getDeltaTime());
+        for (InputState* state : activeStatesTicked_)
+            state->update(time.getDeltaTime());
 
         // Execute all cached function calls in order
@@ -402,6 +401,6 @@
         // If we delay the calls, then OIS and and the InputStates are not anymore
         // in the call stack and can therefore be edited.
-        for (size_t i = 0; i < this->callBuffer_.size(); ++i)
-            this->callBuffer_[i]();
+        for (auto& function : this->callBuffer_)
+            function();
 
         this->callBuffer_.clear();
@@ -419,5 +418,5 @@
         for (unsigned int i = 0; i < devices_.size(); ++i)
         {
-            if (devices_[i] == NULL)
+            if (devices_[i] == nullptr)
                 continue;
             std::vector<InputState*>& states = devices_[i]->getStateListRef();
@@ -438,13 +437,13 @@
         // Using an std::set to avoid duplicates
         std::set<InputState*> tempSet;
-        for (unsigned int i = 0; i < devices_.size(); ++i)
-            if (devices_[i] != NULL)
-                for (unsigned int iState = 0; iState < devices_[i]->getStateListRef().size(); ++iState)
-                    tempSet.insert(devices_[i]->getStateListRef()[iState]);
+        for (InputDevice* device : devices_)
+            if (device != nullptr)
+                for (unsigned int iState = 0; iState < device->getStateListRef().size(); ++iState)
+                    tempSet.insert(device->getStateListRef()[iState]);
 
         // Copy the content of the std::set back to the actual vector
         activeStatesTicked_.clear();
-        for (std::set<InputState*>::const_iterator it = tempSet.begin();it != tempSet.end(); ++it)
-            activeStatesTicked_.push_back(*it);
+        for (InputState* state : tempSet)
+            activeStatesTicked_.push_back(state);
 
         // Check whether we have to change the mouse mode
@@ -466,6 +465,6 @@
     void InputManager::clearBuffers()
     {
-        BOOST_FOREACH(InputDevice* device, devices_)
-            if (device != NULL)
+        for (InputDevice* device : devices_)
+            if (device != nullptr)
                 device->clearBuffers();
     }
@@ -476,6 +475,6 @@
                         << "When done, put the axex in the middle position and press enter." << endl;
 
-        BOOST_FOREACH(InputDevice* device, devices_)
-            if (device != NULL)
+        for (InputDevice* device : devices_)
+            if (device != nullptr)
                 device->startCalibration();
 
@@ -487,6 +486,6 @@
     void InputManager::stopCalibration()
     {
-        BOOST_FOREACH(InputDevice* device, devices_)
-            if (device != NULL)
+        for (InputDevice* device : devices_)
+            if (device != nullptr)
                 device->stopCalibration();
 
@@ -509,5 +508,5 @@
     {
         Mouse* mouse = static_cast<Mouse*>(devices_[InputDeviceEnumerator::Mouse]);
-        if (mouse != NULL)
+        if (mouse != nullptr)
         {
             const OIS::MouseState state = mouse->getOISDevice()->getMouseState();
@@ -526,5 +525,5 @@
     {
         if (name.empty())
-            return 0;
+            return nullptr;
         if (statesByName_.find(name) == statesByName_.end())
         {
@@ -532,12 +531,11 @@
             {
                 // Make sure we don't add two high priority states with the same priority
-                for (std::map<std::string, InputState*>::const_iterator it = this->statesByName_.begin();
-                    it != this->statesByName_.end(); ++it)
+                for (const auto& mapEntry : this->statesByName_)
                 {
-                    if (it->second->getPriority() == priority)
+                    if (mapEntry.second->getPriority() == priority)
                     {
                         orxout(internal_warning, context::input) << "Could not add an InputState with the same priority '"
                             << static_cast<int>(priority) << "' != 0." << endl;
-                        return 0;
+                        return nullptr;
                     }
                 }
@@ -551,5 +549,5 @@
         {
             orxout(internal_warning, context::input) << "Could not add an InputState with the same name '" << name << "'." << endl;
-            return 0;
+            return nullptr;
         }
     }
@@ -561,5 +559,5 @@
             return it->second;
         else
-            return 0;
+            return nullptr;
     }
 
Index: code/trunk/src/libraries/core/input/InputManager.h
===================================================================
--- code/trunk/src/libraries/core/input/InputManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputManager.h	(revision 11071)
@@ -35,5 +35,5 @@
 #include <string>
 #include <vector>
-#include <boost/function.hpp>
+#include <functional>
 
 #include "util/Singleton.h"
@@ -134,5 +134,5 @@
             Returns a pointer to a InputState referenced by name.
         @return
-            Returns NULL if state was not found.
+            Returns nullptr if state was not found.
         */
         InputState* getState(const std::string& name);
@@ -186,5 +186,5 @@
         // Function call caching
         //-------------------------------
-        void pushCall(const boost::function<void ()>& function)
+        void pushCall(const std::function<void ()>& function)
             { this->callBuffer_.push_back(function); }
 
@@ -192,6 +192,7 @@
 
     private: // functions
-        // don't mess with a Singleton
-        InputManager(const InputManager&);
+        // non-copyable:
+        InputManager(const InputManager&) = delete;
+        InputManager& operator=(const InputManager&) = delete;
 
         // Internal methods
@@ -208,5 +209,5 @@
 
         // From WindowEventListener
-        void windowFocusChanged(bool bFocus);
+        virtual void windowFocusChanged(bool bFocus) override;
 
     private: // variables
@@ -225,5 +226,5 @@
         std::vector<InputState*>            activeStatesTicked_;   //!< Like activeStates_, but only contains the ones that currently receive events
 
-        std::vector<boost::function<void ()> > callBuffer_;        //!< Caches all calls from InputStates to be executed afterwards (see preUpdate)
+        std::vector<std::function<void ()>> callBuffer_;        //!< Caches all calls from InputStates to be executed afterwards (see preUpdate)
 
         static InputManager*                singletonPtr_s;        //!< Pointer reference to the singleton
Index: code/trunk/src/libraries/core/input/InputPrereqs.h
===================================================================
--- code/trunk/src/libraries/core/input/InputPrereqs.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputPrereqs.h	(revision 11071)
@@ -454,11 +454,11 @@
         OrxEnumConstructors(InputStatePriority);
 
-        static const int Empty        = -1;
-        static const int Dynamic      = 0;
-
-        static const int HighPriority = 1000;
-        static const int Console      = HighPriority + 0;
-        static const int Calibrator   = HighPriority + 1;
-        static const int Detector     = HighPriority + 2;
+        static constexpr int Empty        = -1;
+        static constexpr int Dynamic      = 0;
+
+        static constexpr int HighPriority = 1000;
+        static constexpr int Console      = HighPriority + 0;
+        static constexpr int Calibrator   = HighPriority + 1;
+        static constexpr int Detector     = HighPriority + 2;
     };
 }
Index: code/trunk/src/libraries/core/input/InputState.cc
===================================================================
--- code/trunk/src/libraries/core/input/InputState.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputState.cc	(revision 11071)
@@ -40,7 +40,7 @@
         , bExpired_(true)
         , handlers_(2)
-        , joyStickHandlerAll_(0)
-        , enterFunctor_(0)
-        , leaveFunctor_(0)
+        , joyStickHandlerAll_(nullptr)
+        , enterFunctor_(nullptr)
+        , leaveFunctor_(nullptr)
     {
         if (priority >= InputStatePriority::HighPriority || priority == InputStatePriority::Empty)
@@ -49,5 +49,5 @@
             priority_ = 0;
 
-        handlers_.resize(InputDeviceEnumerator::FirstJoyStick + this->getJoyStickList().size(), NULL);
+        handlers_.resize(InputDeviceEnumerator::FirstJoyStick + this->getJoyStickList().size(), nullptr);
     }
 
@@ -55,5 +55,5 @@
     {
         if (device < handlers_.size())
-            return handlers_[device] != NULL;
+            return handlers_[device] != nullptr;
         else
             return false;
@@ -64,5 +64,5 @@
     {
         unsigned int oldSize = handlers_.size();
-        handlers_.resize(InputDeviceEnumerator::FirstJoyStick + joyStickList.size(), NULL);
+        handlers_.resize(InputDeviceEnumerator::FirstJoyStick + joyStickList.size(), nullptr);
 
         for (unsigned int i = oldSize; i < handlers_.size(); ++i)
Index: code/trunk/src/libraries/core/input/InputState.h
===================================================================
--- code/trunk/src/libraries/core/input/InputState.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/InputState.h	(revision 11071)
@@ -35,6 +35,5 @@
 #include <string>
 #include <vector>
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "util/tribool.h"
@@ -44,5 +43,5 @@
 
 #define INPUT_STATE_PUSH_CALL(deviceIndex, functionName, ...) \
-    InputManager::getInstance().pushCall(boost::function<void ()>(boost::bind(&InputHandler::functionName, handlers_[deviceIndex], __VA_ARGS__)))
+    InputManager::getInstance().pushCall(std::function<void ()>(std::bind(&InputHandler::functionName, handlers_[deviceIndex], __VA_ARGS__)))
 
 namespace orxonox
@@ -156,7 +155,7 @@
     private:
         InputState(const std::string& name, bool bAlwaysGetsInput, bool bTransparent, InputStatePriority priority);
-        ~InputState() { }
-
-        void JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList);
+        ~InputState() = default;
+
+        virtual void JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList) override;
 
         //! Sets the priority (only to be used by the InputManager!)
@@ -179,5 +178,5 @@
     {
         for (unsigned int i = 0; i < handlers_.size(); ++i)
-            if (handlers_[i] != NULL)
+            if (handlers_[i] != nullptr)
                 INPUT_STATE_PUSH_CALL(i, allDevicesUpdated, dt);
     }
@@ -188,15 +187,15 @@
         {
         case InputDeviceEnumerator::Keyboard:
-            if (handlers_[keyboardIndex_s] != NULL)
+            if (handlers_[keyboardIndex_s] != nullptr)
                 INPUT_STATE_PUSH_CALL(keyboardIndex_s, keyboardUpdated, dt);
             break;
 
         case InputDeviceEnumerator::Mouse:
-            if (handlers_[mouseIndex_s] != NULL)
+            if (handlers_[mouseIndex_s] != nullptr)
                 INPUT_STATE_PUSH_CALL(mouseIndex_s, mouseUpdated, dt);
             break;
 
         default: // joy sticks
-            if (handlers_[device] != NULL)
+            if (handlers_[device] != nullptr)
                 INPUT_STATE_PUSH_CALL(device, joyStickUpdated, device - firstJoyStickIndex_s, dt);
             break;
@@ -208,9 +207,9 @@
     {
         assert(device < handlers_.size());
-        if (handlers_[device] != NULL)
+        if (handlers_[device] != nullptr)
         {
             // We have to store the function pointer to tell the compiler about its actual type because of overloading
             void (InputHandler::*function)(unsigned int, ButtonTypeParam, EventType) = &InputHandler::buttonEvent<ButtonTypeParam>;
-            InputManager::getInstance().pushCall(boost::function<void ()>(boost::bind(function, handlers_[device], device, button, EventType())));
+            InputManager::getInstance().pushCall(std::function<void ()>(std::bind(function, handlers_[device], device, button, EventType())));
         }
     }
@@ -218,5 +217,5 @@
     ORX_FORCEINLINE void InputState::mouseMoved(IntVector2 abs, IntVector2 rel, IntVector2 clippingSize)
     {
-        if (handlers_[mouseIndex_s] != NULL)
+        if (handlers_[mouseIndex_s] != nullptr)
             INPUT_STATE_PUSH_CALL(mouseIndex_s, mouseMoved, abs, rel, clippingSize);
     }
@@ -224,5 +223,5 @@
     ORX_FORCEINLINE void InputState::mouseScrolled(int abs, int rel)
     {
-        if (handlers_[mouseIndex_s] != NULL)
+        if (handlers_[mouseIndex_s] != nullptr)
             INPUT_STATE_PUSH_CALL(mouseIndex_s, mouseScrolled, abs, rel);
     }
@@ -231,5 +230,5 @@
     {
         assert(device < handlers_.size());
-        if (handlers_[device] != NULL)
+        if (handlers_[device] != nullptr)
             INPUT_STATE_PUSH_CALL(device, axisMoved, device - firstJoyStickIndex_s, axis, value);
     }
Index: code/trunk/src/libraries/core/input/JoyStick.cc
===================================================================
--- code/trunk/src/libraries/core/input/JoyStick.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/JoyStick.cc	(revision 11071)
@@ -31,5 +31,4 @@
 #include <climits>
 #include <ois/OISJoyStick.h>
-#include <boost/foreach.hpp>
 
 #include "util/StringUtils.h"
@@ -73,5 +72,5 @@
         //deviceName_ += multi_cast<std::string>(oisDevice_->getNumberOfComponents(OIS::OIS_Vector3));
 
-        BOOST_FOREACH(std::string& idString, deviceNames_s)
+        for (const std::string& idString : deviceNames_s)
         {
             if (deviceName_ == idString)
@@ -128,9 +127,9 @@
     {
         // Set initial values
-        BOOST_FOREACH(int& minVal, configMinValues_)
+        for (int& minVal : configMinValues_)
             minVal = INT_MAX;
-        BOOST_FOREACH(int& minVal, configMaxValues_)
+        for (int& minVal : configMaxValues_)
             minVal = INT_MIN;
-        BOOST_FOREACH(int& zeroVal, configZeroValues_)
+        for (int& zeroVal : configZeroValues_)
             zeroVal = 0;
     }
@@ -187,6 +186,6 @@
     void JoyStick::clearBuffersImpl()
     {
-        for (int j = 0; j < 4; ++j)
-            povStates_[j] = 0;
+        for (int& state : povStates_)
+            state = 0;
     }
 
@@ -209,5 +208,5 @@
                 fValue *= negativeCoeffs_[axis];
 
-            BOOST_FOREACH(InputState* state, inputStates_)
+            for (InputState* state : inputStates_)
                 state->joyStickAxisMoved(this->getDeviceID(), axis, fValue);
         }
Index: code/trunk/src/libraries/core/input/JoyStick.h
===================================================================
--- code/trunk/src/libraries/core/input/JoyStick.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/JoyStick.h	(revision 11071)
@@ -70,5 +70,5 @@
         //! Assigns a generated ID string and loads the calibration (if present)
         JoyStick(unsigned int id, OIS::InputManager* oisInputManager);
-        ~JoyStick() { }
+        ~JoyStick() = default;
         void setConfigValues();
 
@@ -77,6 +77,6 @@
 
     private:
-        void calibrationStarted();
-        void calibrationStopped();
+        virtual void calibrationStarted() override;
+        virtual void calibrationStopped() override;
         void evaluateCalibration();
 
@@ -86,5 +86,5 @@
 
         //! OIS event handler
-        bool buttonPressed (const OIS::JoyStickEvent &arg, int button)
+        virtual bool buttonPressed (const OIS::JoyStickEvent &arg, int button) override
         {
             super::buttonPressed(static_cast<JoyStickButtonCode::ByEnum>(button));
@@ -93,5 +93,5 @@
 
         //! OIS event handler
-        bool buttonReleased(const OIS::JoyStickEvent &arg, int button)
+        virtual bool buttonReleased(const OIS::JoyStickEvent &arg, int button) override
         {
             super::buttonReleased(static_cast<JoyStickButtonCode::ByEnum>(button));
@@ -99,9 +99,9 @@
         }
 
-        bool axisMoved     (const OIS::JoyStickEvent &arg, int axis);
-        bool sliderMoved   (const OIS::JoyStickEvent &arg, int id);
-        bool povMoved      (const OIS::JoyStickEvent &arg, int id);
+        virtual bool axisMoved     (const OIS::JoyStickEvent &arg, int axis) override;
+        virtual bool sliderMoved   (const OIS::JoyStickEvent &arg, int id) override;
+        virtual bool povMoved      (const OIS::JoyStickEvent &arg, int id) override;
         //! OIS event handler (don't remove that because of OIS version issues!)
-        bool vector3Moved  (const OIS::JoyStickEvent &arg, int id) { return true; }
+        virtual bool vector3Moved  (const OIS::JoyStickEvent &arg, int id) override { return true; }
 
         //! Returns the class name as string
Index: code/trunk/src/libraries/core/input/JoyStickQuantityListener.cc
===================================================================
--- code/trunk/src/libraries/core/input/JoyStickQuantityListener.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/JoyStickQuantityListener.cc	(revision 11071)
@@ -47,6 +47,6 @@
     {
         joyStickList_s = joyStickList;
-        for (ObjectList<JoyStickQuantityListener>::iterator it = ObjectList<JoyStickQuantityListener>::begin(); it; ++it)
-            it->JoyStickQuantityChanged(joyStickList);
+        for (JoyStickQuantityListener* listener : ObjectList<JoyStickQuantityListener>())
+            listener->JoyStickQuantityChanged(joyStickList);
     }
 }
Index: code/trunk/src/libraries/core/input/JoyStickQuantityListener.h
===================================================================
--- code/trunk/src/libraries/core/input/JoyStickQuantityListener.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/JoyStickQuantityListener.h	(revision 11071)
@@ -48,5 +48,5 @@
     protected:
         JoyStickQuantityListener();
-        virtual ~JoyStickQuantityListener() { }
+        virtual ~JoyStickQuantityListener() = default;
 
         //! Returns a list with all JoySticks currently loaded
Index: code/trunk/src/libraries/core/input/KeyBinder.cc
===================================================================
--- code/trunk/src/libraries/core/input/KeyBinder.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/KeyBinder.cc	(revision 11071)
@@ -53,6 +53,6 @@
         : deriveTime_(0.0f)
         , filename_(filename)
-        , configFile_(NULL)
-        , fallbackConfigFile_(NULL)
+        , configFile_(nullptr)
+        , fallbackConfigFile_(nullptr)
     {
         mouseRelative_[0] = 0;
@@ -153,7 +153,7 @@
     void KeyBinder::buttonThresholdChanged()
     {
-        for (unsigned int i = 0; i < allHalfAxes_.size(); i++)
-            if (!allHalfAxes_[i]->bButtonThresholdUser_)
-                allHalfAxes_[i]->buttonThreshold_ = this->buttonThreshold_;
+        for (HalfAxis* halfAxis : allHalfAxes_)
+            if (!halfAxis->bButtonThresholdUser_)
+                halfAxis->buttonThreshold_ = this->buttonThreshold_;
     }
 
@@ -170,5 +170,5 @@
 
         // load the bindings if required
-        if (configFile_ != NULL)
+        if (configFile_ != nullptr)
         {
             for (unsigned int iDev = oldValue; iDev < joySticks_.size(); ++iDev)
@@ -188,7 +188,7 @@
     {
         while (joyStickAxes_.size() < joySticks_.size())
-            joyStickAxes_.push_back(shared_ptr<JoyStickAxisVector>(new JoyStickAxisVector()));
+            joyStickAxes_.push_back(std::make_shared<JoyStickAxisVector>());
         while (joyStickButtons_.size() < joySticks_.size())
-            joyStickButtons_.push_back(shared_ptr<JoyStickButtonVector>(new JoyStickButtonVector()));
+            joyStickButtons_.push_back(std::make_shared<JoyStickButtonVector>());
         // For the case the new size is smaller
         this->joyStickAxes_.resize(joySticks_.size());
@@ -274,8 +274,8 @@
 
         // Parse bindings and create the ConfigValueContainers if necessary
-        for (std::map<std::string, Button*>::const_iterator it = allButtons_.begin(); it != allButtons_.end(); ++it)
-        {
-            it->second->readBinding(this->configFile_, this->fallbackConfigFile_);
-            addButtonToCommand(it->second->bindingString_, it->second);
+        for (const auto& mapEntry : allButtons_)
+        {
+            mapEntry.second->readBinding(this->configFile_, this->fallbackConfigFile_);
+            addButtonToCommand(mapEntry.second->bindingString_, mapEntry.second);
         }
 
@@ -420,9 +420,9 @@
     void KeyBinder::clearBindings()
     {
-        for (std::map<std::string, Button*>::const_iterator it = allButtons_.begin(); it != allButtons_.end(); ++it)
-            it->second->clear();
-
-        for (unsigned int i = 0; i < paramCommandBuffer_.size(); i++)
-            delete paramCommandBuffer_[i];
+        for (const auto& mapEntry : allButtons_)
+            mapEntry.second->clear();
+
+        for (BufferedParamCommand* command : paramCommandBuffer_)
+            delete command;
         paramCommandBuffer_.clear();
     }
@@ -434,7 +434,7 @@
     {
         // iterate over all buttons
-        for (std::map<std::string, Button*>::iterator it = this->allButtons_.begin(); it != this->allButtons_.end(); ++it)
-        {
-            Button* button = it->second;
+        for (const auto& mapEntry : this->allButtons_)
+        {
+            Button* button = mapEntry.second;
 
             // iterate over all modes
@@ -479,5 +479,5 @@
                         {
                             delete[] button->commands_[mode_index];
-                            button->commands_[mode_index] = 0;
+                            button->commands_[mode_index] = nullptr;
                         }
 
@@ -505,6 +505,6 @@
         this->mousePosition_[1] = 0.0f;
 
-        for (unsigned int i = 0; i < MouseAxisCode::numberOfAxes * 2; i++)
-            mouseAxes_[i].reset();
+        for (HalfAxis& axis : mouseAxes_)
+            axis.reset();
     }
 
@@ -545,5 +545,5 @@
         }
 
-        for (unsigned int i = 0; i < MouseAxisCode::numberOfAxes * 2; i++)
+        for (HalfAxis& axis : mouseAxes_)
         {
             // Why dividing relative value by dt? The reason lies in the simple fact, that when you
@@ -555,8 +555,8 @@
             {
                 // just ignore if dt == 0.0 because we have multiplied by 0.0 anyway..
-                mouseAxes_[i].relVal_ /= dt;
-            }
-
-            tickHalfAxis(mouseAxes_[i]);
+                axis.relVal_ /= dt;
+            }
+
+            tickHalfAxis(axis);
         }
     }
Index: code/trunk/src/libraries/core/input/KeyBinder.h
===================================================================
--- code/trunk/src/libraries/core/input/KeyBinder.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/KeyBinder.h	(revision 11071)
@@ -36,5 +36,5 @@
 #include <vector>
 #include <map>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 #include "InputHandler.h"
@@ -85,26 +85,26 @@
         void compilePointerLists();
         // from JoyStickQuantityListener interface
-        virtual void JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList);
-
-        void allDevicesUpdated(float dt);
-        void mouseUpdated(float dt);
-        void joyStickUpdated(unsigned int joyStick, float dt);
+        virtual void JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList) override;
+
+        virtual void allDevicesUpdated(float dt) override;
+        virtual void mouseUpdated(float dt) override;
+        virtual void joyStickUpdated(unsigned int joyStick, float dt) override;
         // internal
         void tickHalfAxis(HalfAxis& halfAxis);
 
-        void buttonPressed (const KeyEvent& evt);
-        void buttonReleased(const KeyEvent& evt);
-        void buttonHeld    (const KeyEvent& evt);
-
-        void buttonPressed (MouseButtonCode::ByEnum button);
-        void buttonReleased(MouseButtonCode::ByEnum button);
-        void buttonHeld    (MouseButtonCode::ByEnum button);
-        void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize);
-        void mouseScrolled (int abs, int rel);
-
-        void buttonPressed (unsigned int device, JoyStickButtonCode::ByEnum button);
-        void buttonReleased(unsigned int device, JoyStickButtonCode::ByEnum button);
-        void buttonHeld    (unsigned int device, JoyStickButtonCode::ByEnum button);
-        void axisMoved     (unsigned int device, unsigned int axis, float value);
+        virtual void buttonPressed (const KeyEvent& evt) override;
+        virtual void buttonReleased(const KeyEvent& evt) override;
+        virtual void buttonHeld    (const KeyEvent& evt) override;
+
+        virtual void buttonPressed (MouseButtonCode::ByEnum button) override;
+        virtual void buttonReleased(MouseButtonCode::ByEnum button) override;
+        virtual void buttonHeld    (MouseButtonCode::ByEnum button) override;
+        virtual void mouseMoved    (IntVector2 abs, IntVector2 rel, IntVector2 clippingSize) override;
+        virtual void mouseScrolled (int abs, int rel) override;
+
+        virtual void buttonPressed (unsigned int device, JoyStickButtonCode::ByEnum button) override;
+        virtual void buttonReleased(unsigned int device, JoyStickButtonCode::ByEnum button) override;
+        virtual void buttonHeld    (unsigned int device, JoyStickButtonCode::ByEnum button) override;
+        virtual void axisMoved     (unsigned int device, unsigned int axis, float value) override;
 
     protected: // variables
@@ -128,5 +128,5 @@
         };
         //! Actual key bindings for joy stick buttons
-        std::vector<shared_ptr<JoyStickButtonVector> > joyStickButtons_;
+        std::vector<std::shared_ptr<JoyStickButtonVector>> joyStickButtons_;
         //! Helper class to use something like std:vector<HalfAxis[48]>
         struct JoyStickAxisVector
@@ -136,5 +136,5 @@
         };
         //! Actual key bindings for joy stick axes (and sliders)
-        std::vector<shared_ptr<JoyStickAxisVector> > joyStickAxes_;
+        std::vector<std::shared_ptr<JoyStickAxisVector>> joyStickAxes_;
 
         //! Pointer map with all Buttons, including half axes
@@ -143,5 +143,5 @@
         std::vector<HalfAxis*> allHalfAxes_;
         //! Maps input commands to all Button names, including half axes
-        std::map< std::string, std::vector<std::string> > allCommands_;
+        std::map< std::string, std::vector<std::string>> allCommands_;
 
         /**
@@ -160,5 +160,5 @@
         //! Name of the file used in this KeyBinder (constant!)
         const std::string filename_;
-        //! Config file used. NULL in case of KeyDetector. Also indicates whether we've already loaded.
+        //! Config file used. nullptr in case of KeyDetector. Also indicates whether we've already loaded.
         ConfigFile* configFile_;
         //! Config file from the data directory that only serves as fallback
@@ -227,13 +227,13 @@
     {
         // execute all buffered bindings (additional parameter)
-        for (unsigned int i = 0; i < paramCommandBuffer_.size(); i++)
+        for (BufferedParamCommand* command : paramCommandBuffer_)
         {
-            paramCommandBuffer_[i]->rel_ *= dt;
-            paramCommandBuffer_[i]->execute();
+            command->rel_ *= dt;
+            command->execute();
         }
 
         // always reset the relative movement of the mouse
-        for (unsigned int i = 0; i < MouseAxisCode::numberOfAxes * 2; i++)
-            mouseAxes_[i].relVal_ = 0.0f;
+        for (HalfAxis& axis : mouseAxes_)
+            axis.relVal_ = 0.0f;
     }
 }// tolua_export
Index: code/trunk/src/libraries/core/input/KeyBinderManager.cc
===================================================================
--- code/trunk/src/libraries/core/input/KeyBinderManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/KeyBinderManager.cc	(revision 11071)
@@ -56,5 +56,5 @@
 
     KeyBinderManager::KeyBinderManager()
-        : currentBinder_(NULL)
+        : currentBinder_(nullptr)
         , bDefaultFileLoaded_(true)
         , bBinding_(false)
@@ -76,12 +76,12 @@
     {
         // Delete all remaining KeyBinders
-        for (std::map<std::string, KeyBinder*>::const_iterator it = this->binders_.begin(); it != this->binders_.end(); ++it)
-            delete it->second;
+        for (const auto& mapEntry : this->binders_)
+            delete mapEntry.second;
 
         // Reset console commands
-        ModifyConsoleCommand(__CC_keybind_name ).setObject(0);
-        ModifyConsoleCommand(__CC_tkeybind_name).setObject(0);
-        ModifyConsoleCommand(__CC_unbind_name  ).setObject(0);
-        ModifyConsoleCommand(__CC_tunbind_name ).setObject(0);
+        ModifyConsoleCommand(__CC_keybind_name ).setObject(nullptr);
+        ModifyConsoleCommand(__CC_tkeybind_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_unbind_name  ).setObject(nullptr);
+        ModifyConsoleCommand(__CC_tunbind_name ).setObject(nullptr);
     }
 
@@ -205,5 +205,5 @@
     void KeyBinderManager::registerKeybindCallback(LuaFunctor* function)
     {
-        this->callbackFunction_ = function;
+        this->callbackFunction_.reset(function);
     }
 }
Index: code/trunk/src/libraries/core/input/KeyBinderManager.h
===================================================================
--- code/trunk/src/libraries/core/input/KeyBinderManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/KeyBinderManager.h	(revision 11071)
@@ -34,4 +34,5 @@
 #include <map>
 #include <string>
+#include <memory>
 
 #include "util/Singleton.h"
@@ -101,5 +102,8 @@
 
     private:
-        KeyBinderManager(const KeyBinderManager&);
+        // non-copyable:
+        KeyBinderManager(const KeyBinderManager&) = delete;
+        KeyBinderManager& operator=(const KeyBinderManager&) = delete;
+
         void keybindInternal(const std::string& command, bool bTemporary);
         void keybindKeyPressed(const std::string& keyName);
@@ -107,14 +111,14 @@
 
         // KeyBinder management
-        KeyBinder* currentBinder_;                   //! Currently selected KeyBinder (never NULL!)
-        std::map<std::string, KeyBinder*> binders_;  //! All loaded KeyBinders
-        bool bDefaultFileLoaded_;                    //! Tells whether the default one is loaded
-        std::string defaultFilename_;                //! Name of the file with the default key bindings
+        KeyBinder* currentBinder_;                      //! Currently selected KeyBinder (never nullptr!)
+        std::map<std::string, KeyBinder*> binders_;     //! All loaded KeyBinders
+        bool bDefaultFileLoaded_;                       //! Tells whether the default one is loaded
+        std::string defaultFilename_;                   //! Name of the file with the default key bindings
 
         // keybind command related
-        SharedPtr<LuaFunctor> callbackFunction_;     //! Function to be called when key was pressed after "keybind" command
-        bool bBinding_;                              //! Tells whether a key binding process is active
-        bool bTemporary_;                            //! Stores tkeybind/keybind value
-        std::string command_;                        //! Stores the command received by (t)keybind
+        std::shared_ptr<LuaFunctor> callbackFunction_;  //! Function to be called when key was pressed after "keybind" command
+        bool bBinding_;                                 //! Tells whether a key binding process is active
+        bool bTemporary_;                               //! Stores tkeybind/keybind value
+        std::string command_;                           //! Stores the command received by (t)keybind
 
         static KeyBinderManager* singletonPtr_s;
Index: code/trunk/src/libraries/core/input/KeyDetector.cc
===================================================================
--- code/trunk/src/libraries/core/input/KeyDetector.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/KeyDetector.cc	(revision 11071)
@@ -62,5 +62,5 @@
     KeyDetector::~KeyDetector()
     {
-        inputState_->setHandler(NULL);
+        inputState_->setHandler(nullptr);
         InputManager::getInstance().destroyState("detector");
         ModifyConsoleCommand(__CC_KeyDetector_callback_name).resetFunction();
@@ -70,6 +70,6 @@
     {
         // Assign every button/axis the same command, but with its name as argument
-        for (std::map<std::string, Button*>::const_iterator it = allButtons_.begin(); it != allButtons_.end(); ++it)
-            it->second->parse(__CC_KeyDetector_callback_name + ' ' + it->second->groupName_ + "." + it->second->name_);
+        for (const auto& mapEntry : allButtons_)
+            mapEntry.second->parse(__CC_KeyDetector_callback_name + ' ' + mapEntry.second->groupName_ + "." + mapEntry.second->name_);
     }
 
Index: code/trunk/src/libraries/core/input/KeyDetector.h
===================================================================
--- code/trunk/src/libraries/core/input/KeyDetector.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/KeyDetector.h	(revision 11071)
@@ -48,8 +48,10 @@
 
     private:
-        KeyDetector(const KeyDetector&);
+        // non-copyable:
+        KeyDetector(const KeyDetector&) = delete;
+        KeyDetector& operator=(const KeyDetector&) = delete;
 
         void callback(const std::string& name);
-        void JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList);
+        virtual void JoyStickQuantityChanged(const std::vector<JoyStick*>& joyStickList) override;
         void assignCommands();
 
Index: code/trunk/src/libraries/core/input/Keyboard.h
===================================================================
--- code/trunk/src/libraries/core/input/Keyboard.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/Keyboard.h	(revision 11071)
@@ -63,5 +63,5 @@
         //! Only resets the keyboard modifiers. Initialising is done in the base class.
         Keyboard(unsigned int id, OIS::InputManager* oisInputManager) : super(id, oisInputManager), modifiers_(0) { }
-        ~Keyboard() { }
+        ~Keyboard() = default;
 
     private:
@@ -75,6 +75,6 @@
         }
 
-        bool keyPressed(const OIS::KeyEvent& arg);
-        bool keyReleased(const OIS::KeyEvent& arg);
+        virtual bool keyPressed(const OIS::KeyEvent& arg) override;
+        virtual bool keyReleased(const OIS::KeyEvent& arg) override;
 
         //! Returns the class name as string
Index: code/trunk/src/libraries/core/input/Mouse.cc
===================================================================
--- code/trunk/src/libraries/core/input/Mouse.cc	(revision 11056)
+++ code/trunk/src/libraries/core/input/Mouse.cc	(revision 11071)
@@ -68,6 +68,6 @@
     {
 #ifdef ORXONOX_PLATFORM_LINUX
-        ModifyConsoleCommand(__CC_Mouse_name, __CC_grab_name).setObject(0);
-        ModifyConsoleCommand(__CC_Mouse_name, __CC_ungrab_name).setObject(0);
+        ModifyConsoleCommand(__CC_Mouse_name, __CC_grab_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_Mouse_name, __CC_ungrab_name).setObject(nullptr);
 #endif
     }
@@ -82,6 +82,6 @@
             IntVector2 rel(e.state.X.rel, e.state.Y.rel);
             IntVector2 clippingSize(e.state.width, e.state.height);
-            for (unsigned int i = 0; i < inputStates_.size(); ++i)
-                inputStates_[i]->mouseMoved(abs, rel, clippingSize);
+            for (InputState* state : inputStates_)
+                state->mouseMoved(abs, rel, clippingSize);
         }
 
@@ -89,6 +89,6 @@
         if (e.state.Z.rel != 0)
         {
-            for (unsigned int i = 0; i < inputStates_.size(); ++i)
-                inputStates_[i]->mouseScrolled(e.state.Z.abs, e.state.Z.rel);
+            for (InputState* state : inputStates_)
+                state->mouseScrolled(e.state.Z.abs, e.state.Z.rel);
         }
 
Index: code/trunk/src/libraries/core/input/Mouse.h
===================================================================
--- code/trunk/src/libraries/core/input/Mouse.h	(revision 11056)
+++ code/trunk/src/libraries/core/input/Mouse.h	(revision 11071)
@@ -74,5 +74,5 @@
     private:
         //! OIS event handler
-        bool mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
+        virtual bool mousePressed(const OIS::MouseEvent &arg, OIS::MouseButtonID id) override
         {
             super::buttonPressed(static_cast<MouseButtonCode::ByEnum>(id));
@@ -81,5 +81,5 @@
 
         //! OIS event handler
-        bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id)
+        virtual bool mouseReleased(const OIS::MouseEvent &arg, OIS::MouseButtonID id) override
         {
             super::buttonReleased(static_cast<MouseButtonCode::ByEnum>(id));
@@ -87,7 +87,7 @@
         }
 
-        bool mouseMoved(const OIS::MouseEvent &arg);
+        virtual bool mouseMoved(const OIS::MouseEvent &arg) override;
 
-        void windowResized(unsigned int newWidth, unsigned int newHeight);
+        virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
 
         // Returns the class name as string
Index: code/trunk/src/libraries/core/module/DynLib.cc
===================================================================
--- code/trunk/src/libraries/core/module/DynLib.cc	(revision 11056)
+++ code/trunk/src/libraries/core/module/DynLib.cc	(revision 11071)
@@ -56,5 +56,5 @@
     {
         mName = name;
-        m_hInst = NULL;
+        m_hInst = nullptr;
     }
 
@@ -127,10 +127,10 @@
             FORMAT_MESSAGE_FROM_SYSTEM |
             FORMAT_MESSAGE_IGNORE_INSERTS,
-            NULL,
+            nullptr,
             GetLastError(),
             MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
             (LPTSTR) &lpMsgBuf,
             0,
-            NULL
+            nullptr
             );
         std::string ret = (char*)lpMsgBuf;
Index: code/trunk/src/libraries/core/module/DynLib.h
===================================================================
--- code/trunk/src/libraries/core/module/DynLib.h	(revision 11056)
+++ code/trunk/src/libraries/core/module/DynLib.h	(revision 11071)
@@ -45,5 +45,5 @@
 #if defined(ORXONOX_PLATFORM_WINDOWS)
 #    define DYNLIB_HANDLE hInstance
-#    define DYNLIB_LOAD( a ) LoadLibraryEx( a, NULL, LOAD_WITH_ALTERED_SEARCH_PATH )
+#    define DYNLIB_LOAD( a ) LoadLibraryEx( a, nullptr, LOAD_WITH_ALTERED_SEARCH_PATH )
 #    define DYNLIB_GETSYM( a, b ) GetProcAddress( a, b )
 #    define DYNLIB_UNLOAD( a ) !FreeLibrary( a )
@@ -104,5 +104,5 @@
                 the symbol.
             @par
-                If the function fails, the returned value is <b>NULL</b>.
+                If the function fails, the returned value is <b>nullptr</b>.
 
         */
Index: code/trunk/src/libraries/core/module/DynLibManager.cc
===================================================================
--- code/trunk/src/libraries/core/module/DynLibManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/module/DynLibManager.cc	(revision 11071)
@@ -38,5 +38,5 @@
     //-----------------------------------------------------------------------
     //! Static pointer to the singleton
-    DynLibManager* DynLibManager::singletonPtr_s  = 0;
+    DynLibManager* DynLibManager::singletonPtr_s  = nullptr;
 
     //-----------------------------------------------------------------------
@@ -75,8 +75,8 @@
     {
         // Unload & delete resources in turn
-        for (DynLibList::iterator it = mLibList.begin(); it != mLibList.end(); ++it)
+        for (const auto& mapEntry : mLibList)
         {
-            it->second->unload();
-            delete it->second;
+            mapEntry.second->unload();
+            delete mapEntry.second;
         }
 
Index: code/trunk/src/libraries/core/module/ModuleInstance.cc
===================================================================
--- code/trunk/src/libraries/core/module/ModuleInstance.cc	(revision 11056)
+++ code/trunk/src/libraries/core/module/ModuleInstance.cc	(revision 11071)
@@ -33,9 +33,9 @@
 namespace orxonox
 {
-    ModuleInstance* ModuleInstance::currentModuleInstance_s = NULL;
+    ModuleInstance* ModuleInstance::currentModuleInstance_s = nullptr;
 
     ModuleInstance::ModuleInstance(const std::string& libraryName)
         : libraryName_(libraryName)
-        , dynLib_(NULL)
+        , dynLib_(nullptr)
     {
     }
@@ -59,6 +59,6 @@
     {
         const std::set<StaticallyInitializedInstance*>& instances = this->staticallyInitializedInstancesByType_[type];
-        for (std::set<StaticallyInitializedInstance*>::iterator it = instances.begin(); it != instances.end(); ++it)
-            (*it)->load();
+        for (StaticallyInitializedInstance* instance : instances)
+            instance->load();
     }
 
@@ -73,9 +73,9 @@
     void ModuleInstance::deleteAllStaticallyInitializedInstances()
     {
-        std::map<StaticInitialization::Type, std::set<StaticallyInitializedInstance*> > copy(this->staticallyInitializedInstancesByType_);
+        std::map<StaticInitialization::Type, std::set<StaticallyInitializedInstance*>> copy(this->staticallyInitializedInstancesByType_);
         this->staticallyInitializedInstancesByType_.clear();
-        for (std::map<StaticInitialization::Type, std::set<StaticallyInitializedInstance*> >::iterator it1 = copy.begin(); it1 != copy.end(); ++it1)
-            for (std::set<StaticallyInitializedInstance*>::iterator it2 = it1->second.begin(); it2 != it1->second.end(); ++it2)
-                delete (*it2);
+        for (const auto& mapEntry : copy)
+            for (StaticallyInitializedInstance* instance : mapEntry.second)
+                delete instance;
     }
 
Index: code/trunk/src/libraries/core/module/ModuleInstance.h
===================================================================
--- code/trunk/src/libraries/core/module/ModuleInstance.h	(revision 11056)
+++ code/trunk/src/libraries/core/module/ModuleInstance.h	(revision 11071)
@@ -69,5 +69,5 @@
 
         private:
-            std::map<StaticInitialization::Type, std::set<StaticallyInitializedInstance*> > staticallyInitializedInstancesByType_;
+            std::map<StaticInitialization::Type, std::set<StaticallyInitializedInstance*>> staticallyInitializedInstancesByType_;
             std::string libraryName_;
             DynLib* dynLib_;
Index: code/trunk/src/libraries/core/module/Plugin.cc
===================================================================
--- code/trunk/src/libraries/core/module/Plugin.cc	(revision 11056)
+++ code/trunk/src/libraries/core/module/Plugin.cc	(revision 11071)
@@ -39,5 +39,5 @@
     {
         this->referenceCounter_ = 0;
-        this->moduleInstance_ = NULL;
+        this->moduleInstance_ = nullptr;
     }
 
@@ -45,5 +45,5 @@
     {
         // force unloading of the module when the plugin is destroyed
-        if (this->moduleInstance_ != NULL)
+        if (this->moduleInstance_ != nullptr)
             this->unloadModule();
     }
@@ -79,5 +79,5 @@
     {
         // only load module if it isn't already loaded. otherwise merely activate it.
-        if (this->moduleInstance_ == NULL)
+        if (this->moduleInstance_ == nullptr)
             this->loadModule();
         else
@@ -112,5 +112,5 @@
         Core::getInstance().unloadModule(this->moduleInstance_);
         delete this->moduleInstance_;
-        this->moduleInstance_ = NULL;
+        this->moduleInstance_ = nullptr;
     }
     void Plugin::deactivateModule()
Index: code/trunk/src/libraries/core/module/PluginManager.cc
===================================================================
--- code/trunk/src/libraries/core/module/PluginManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/module/PluginManager.cc	(revision 11071)
@@ -54,5 +54,5 @@
     SetConsoleCommand("PluginManager", __CC_PluginManager_unload_name, &PluginManager::unloadPlugin);
 
-    PluginManager* PluginManager::singletonPtr_s  = 0;
+    PluginManager* PluginManager::singletonPtr_s  = nullptr;
 
     RegisterAbstractClass(PluginManager).inheritsFrom<Configurable>();
@@ -70,11 +70,11 @@
     PluginManager::~PluginManager()
     {
-        ModifyConsoleCommand("PluginManager", __CC_PluginManager_load_name).setObject(NULL);
-        ModifyConsoleCommand("PluginManager", __CC_PluginManager_unload_name).setObject(NULL);
+        ModifyConsoleCommand("PluginManager", __CC_PluginManager_load_name).setObject(nullptr);
+        ModifyConsoleCommand("PluginManager", __CC_PluginManager_unload_name).setObject(nullptr);
 
-        for (std::map<std::string, PluginReference*>::iterator it = this->references_.begin(); it != this->references_.end(); ++it)
-            delete it->second;
-        for (std::map<std::string, Plugin*>::iterator it = this->plugins_.begin(); it != this->plugins_.end(); ++it)
-            delete it->second;
+        for (const auto& mapEntry : this->references_)
+            delete mapEntry.second;
+        for (const auto& mapEntry : this->plugins_)
+            delete mapEntry.second;
     }
 
@@ -96,8 +96,7 @@
     {
         const std::vector<std::string>& pluginPaths = ApplicationPaths::getInstance().getPluginPaths();
-        for (std::vector<std::string>::const_iterator it = pluginPaths.begin(); it != pluginPaths.end(); ++it)
+        for (const std::string& libraryName : pluginPaths)
         {
             std::string name;
-            std::string libraryName = (*it);
             std::string filename = libraryName +  + specialConfig::pluginExtension;
             std::ifstream infile(filename.c_str());
@@ -117,5 +116,5 @@
     {
         Plugin* plugin = this->plugins_[name];
-        if (plugin != NULL)
+        if (plugin != nullptr)
             plugin->reference();
         else
@@ -126,5 +125,5 @@
     {
         Plugin* plugin = this->plugins_[name];
-        if (plugin != NULL)
+        if (plugin != nullptr)
             plugin->dereference(this->bMerelyDeactivatePlugins_);
         else
@@ -137,5 +136,5 @@
     void PluginManager::loadPlugin(const std::string& name)
     {
-        if (this->references_[name] == NULL)
+        if (this->references_[name] == nullptr)
         {
             this->references_[name] = new PluginReference(name);
@@ -152,7 +151,7 @@
     {
         PluginReference* reference = this->references_[name];
-        if (reference != NULL)
+        if (reference != nullptr)
         {
-            this->references_[name] = NULL;
+            this->references_[name] = nullptr;
             delete reference;
         }
Index: code/trunk/src/libraries/core/module/StaticInitializationHandler.h
===================================================================
--- code/trunk/src/libraries/core/module/StaticInitializationHandler.h	(revision 11056)
+++ code/trunk/src/libraries/core/module/StaticInitializationHandler.h	(revision 11071)
@@ -37,6 +37,6 @@
     {
         public:
-            StaticInitializationHandler() {}
-            virtual ~StaticInitializationHandler() {}
+            StaticInitializationHandler() = default;
+            virtual ~StaticInitializationHandler() = default;
 
             virtual void setupHandler() = 0;
Index: code/trunk/src/libraries/core/module/StaticInitializationHandlerIncludes.h
===================================================================
--- code/trunk/src/libraries/core/module/StaticInitializationHandlerIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/core/module/StaticInitializationHandlerIncludes.h	(revision 11071)
@@ -53,6 +53,6 @@
             ~StaticallyInitializedStaticInitializationHandler() { delete handler_; }
 
-            virtual void load();
-            virtual void unload();
+            virtual void load() override;
+            virtual void unload() override;
 
             inline StaticInitializationHandler& getHandler()
Index: code/trunk/src/libraries/core/module/StaticInitializationManager.cc
===================================================================
--- code/trunk/src/libraries/core/module/StaticInitializationManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/module/StaticInitializationManager.cc	(revision 11071)
@@ -33,5 +33,5 @@
 namespace orxonox
 {
-    StaticInitializationManager* StaticInitializationManager::singletonPtr_s = 0;
+    StaticInitializationManager* StaticInitializationManager::singletonPtr_s = nullptr;
 
     void StaticInitializationManager::addHandler(StaticInitializationHandler* handler)
@@ -50,6 +50,6 @@
     {
         // attention: loading a module may add new handlers to the list
-        for (std::list<StaticInitializationHandler*>::iterator it = this->handlers_.begin(); it != this->handlers_.end(); ++it)
-            (*it)->loadModule(module);
+        for (StaticInitializationHandler* handler : this->handlers_)
+            handler->loadModule(module);
     }
 
Index: code/trunk/src/libraries/core/module/StaticInitializationManager.h
===================================================================
--- code/trunk/src/libraries/core/module/StaticInitializationManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/module/StaticInitializationManager.h	(revision 11071)
@@ -43,6 +43,6 @@
 
         public:
-            StaticInitializationManager() {}
-            virtual ~StaticInitializationManager() {}
+            StaticInitializationManager() = default;
+            virtual ~StaticInitializationManager() = default;
 
             void addHandler(StaticInitializationHandler* handler);
Index: code/trunk/src/libraries/core/object/ClassFactory.h
===================================================================
--- code/trunk/src/libraries/core/object/ClassFactory.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/ClassFactory.h	(revision 11071)
@@ -53,5 +53,6 @@
     {
         public:
-            virtual ~Factory() {}
+            Factory() = default;
+            virtual ~Factory() = default;
             virtual Identifiable* fabricate(Context* context) = 0;
     };
Index: code/trunk/src/libraries/core/object/Context.cc
===================================================================
--- code/trunk/src/libraries/core/object/Context.cc	(revision 11056)
+++ code/trunk/src/libraries/core/object/Context.cc	(revision 11071)
@@ -40,5 +40,5 @@
     RegisterClass(Context);
 
-    Context* Context::rootContext_s = 0;
+    Context* Context::rootContext_s = nullptr;
 
     Context* getContextForInitializationOfOtherContexts()
@@ -46,11 +46,11 @@
         static size_t count = 0;
         // the first time this is called, ++count returns 1 and the context is created
-        // the second time this is called, ++count returns 2 and NULL is returned because we're in the constructor of the context itself
+        // the second time this is called, ++count returns 2 and nullptr is returned because we're in the constructor of the context itself
         // for each future call the context (now completely created) is returned
         if (++count == 2)
-            return NULL;
+            return nullptr;
         else
         {
-            static Context context(NULL);
+            static Context context(nullptr);
             return &context;
         }
@@ -70,6 +70,6 @@
         // unregister context from object lists before object lists are destroyed
         this->unregisterObject();
-        for (size_t i = 0; i < this->objectLists_.size(); ++i)
-            delete this->objectLists_[i];
+        for (ObjectListBase* objectList : this->objectLists_)
+            delete objectList;
     }
 
@@ -82,10 +82,10 @@
     {
         delete Context::rootContext_s;
-        Context::rootContext_s = NULL;
+        Context::rootContext_s = nullptr;
     }
 
     /*static*/ Context* Context::getRootContext()
     {
-        OrxVerify(Context::rootContext_s != NULL, "Root Context is undefined");
+        OrxVerify(Context::rootContext_s != nullptr, "Root Context is undefined");
         return Context::rootContext_s;
     }
@@ -105,5 +105,5 @@
         ObjectListBase* objectList = this->getObjectList(identifier);
         delete objectList;
-        this->objectLists_[identifier->getClassID()] = NULL;
+        this->objectLists_[identifier->getClassID()] = nullptr;
     }
 }
Index: code/trunk/src/libraries/core/object/DestroyLaterManager.h
===================================================================
--- code/trunk/src/libraries/core/object/DestroyLaterManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/DestroyLaterManager.h	(revision 11071)
@@ -45,6 +45,6 @@
             virtual ~DestroyLaterManager();
 
-            virtual void preUpdate(const Clock& time) { /*no action*/ }
-            virtual void postUpdate(const Clock& time);
+            virtual void preUpdate(const Clock& time) override { /*no action*/ }
+            virtual void postUpdate(const Clock& time) override;
 
             void retain(Destroyable* instance)
@@ -52,5 +52,5 @@
 
         private:
-            std::vector<StrongPtr<Destroyable> > retainedInstances_;
+            std::vector<StrongPtr<Destroyable>> retainedInstances_;
 
             static DestroyLaterManager* singletonPtr_s;
Index: code/trunk/src/libraries/core/object/Destroyable.cc
===================================================================
--- code/trunk/src/libraries/core/object/Destroyable.cc	(revision 11056)
+++ code/trunk/src/libraries/core/object/Destroyable.cc	(revision 11071)
@@ -54,5 +54,5 @@
     Destroyable::~Destroyable()
     {
-        if (!this->requestedDestruction_ && !IdentifierManager::getInstance().isCreatingHierarchy())
+        if (!this->requestedDestruction_ && IdentifierManager::exists() && !IdentifierManager::getInstance().isCreatingHierarchy())
             orxout(internal_warning) << "Deleted destroyable object without destroy()" << endl;
 
@@ -70,5 +70,5 @@
     void Destroyable::destroy()
     {
-        assert(this); // Just in case someone tries to delete a NULL pointer
+        assert(this); // Just in case someone tries to delete a nullptr
         this->requestedDestruction_ = true;
         if (this->referenceCount_ == 0)
Index: code/trunk/src/libraries/core/object/Iterator.h
===================================================================
--- code/trunk/src/libraries/core/object/Iterator.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/Iterator.h	(revision 11071)
@@ -70,5 +70,5 @@
     */
     template <class T>
-    class Iterator : public IteratorBase<T, Iterator<T> >
+    class Iterator : public IteratorBase<T, Iterator<T>>
     {
         public:
@@ -76,11 +76,5 @@
                 @brief Constructor: Sets the element, whereon the iterator points, to zero.
             */
-            inline Iterator() : IteratorBase<T, Iterator<T> >() {}
-
-            /**
-                @brief Constructor: Sets this element to a given element
-                @param element The element
-            */
-            inline Iterator(ObjectListBaseElement* element) : IteratorBase<T, Iterator<T> >(element) {}
+            inline Iterator() : IteratorBase<T, Iterator<T>>() {}
 
             /**
@@ -88,5 +82,6 @@
                 @param other The other Iterator
             */
-            inline Iterator(const IteratorBase<T, Iterator<T> >& other) : IteratorBase<T, Iterator<T> >(other) {}
+            template <class OT, class OI>
+            inline Iterator(const IteratorBase<OT, OI>& other) : IteratorBase<T, Iterator<T>>(other) {}
 
             /**
Index: code/trunk/src/libraries/core/object/IteratorBase.h
===================================================================
--- code/trunk/src/libraries/core/object/IteratorBase.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/IteratorBase.h	(revision 11071)
@@ -37,7 +37,4 @@
 
 #include "core/CorePrereqs.h"
-
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_base_of.hpp>
 
 #include "ObjectListBase.h"
@@ -52,12 +49,11 @@
     class IteratorBase : public ObjectListElementRemovalListener
     {
-        BOOST_STATIC_ASSERT((boost::is_base_of<Listable, T>::value));
-
-        protected:
+        static_assert(std::is_base_of<Listable, T>::value, "IteratorBase can only be used with Listables");
+
+        public:
             /**
                 @brief Constructor: Sets the element, whereon the iterator points, to the given element.
-                This constructor is protected and only for internal usage (don't mess with the BaseElements directly).
-            */
-            inline IteratorBase(ObjectListBaseElement* element = NULL)
+            */
+            inline IteratorBase(ObjectListElement<T>* element = nullptr)
             {
                 this->element_ = element;
@@ -65,34 +61,12 @@
             }
 
-
-        public:
-            /**
-                @brief Constructor: Sets the element, whereon the iterator points, to the given element.
-            */
-            inline IteratorBase(ObjectListElement<T>* element)
-            {
-                this->element_ = element;
-                this->registerIterator();
-            }
-
             /**
                 @brief Constructor: Sets the element, whereon the iterator points, to the given element of another type.
                 The element's type O must be a derivative of the Iterator's type T.
             */
-            template <class O>
-            inline IteratorBase(ObjectListElement<O>* element)
-            {
-                (void)static_cast<T*>((O*)NULL); // Check type: The element's type O must be a derivative of the Iterator's type T.
-                this->element_ = element;
-                this->registerIterator();
-            }
-
-            /**
-                @brief Constructor: Sets this element to the element of another Iterator.
-                @param other The other Iterator
-            */
-            inline IteratorBase(const IteratorBase& other)
-            {
-                this->element_ = other.element_;
+            template <class OT, class OI>
+            inline IteratorBase(const IteratorBase<OT, OI>& other)
+            {
+                this->element_ = other.getElement();
                 this->registerIterator();
             }
@@ -172,7 +146,7 @@
                 @return True if the Iterator points to an existing object.
             */
-            inline operator bool() const
-            {
-                return (this->element_ != NULL);
+            inline explicit operator bool() const
+            {
+                return (this->element_ != nullptr);
             }
 
@@ -201,8 +175,13 @@
                 @param object The object to compare with
             */
-            virtual void removedElement(ObjectListBaseElement* element)
+            virtual void removedElement(ObjectListBaseElement* element) override
             {
                 if (this->element_ == element)
                     this->operator++();
+            }
+
+            inline ObjectListBaseElement* getElement() const
+            {
+                return this->element_;
             }
 
@@ -226,5 +205,5 @@
                 }
                 else
-                    this->list_ = NULL;
+                    this->list_ = nullptr;
             }
 
Index: code/trunk/src/libraries/core/object/Listable.cc
===================================================================
--- code/trunk/src/libraries/core/object/Listable.cc	(revision 11056)
+++ code/trunk/src/libraries/core/object/Listable.cc	(revision 11071)
@@ -44,10 +44,6 @@
         @brief Constructor: Allocates space in the element list.
     */
-    Listable::Listable()
+    Listable::Listable() : Listable(Context::getRootContext())
     {
-        this->context_ = Context::getRootContext();
-        this->elements_.reserve(6);
-
-        RegisterObject(Listable);
     }
 
@@ -76,6 +72,6 @@
     void Listable::unregisterObject()
     {
-        for (size_t i = 0; i < this->elements_.size(); ++i)
-            Listable::deleteObjectListElement(this->elements_[i]);
+        for (ObjectListBaseElement* element : this->elements_)
+            Listable::deleteObjectListElement(element);
         this->elements_.clear();
     }
@@ -91,8 +87,8 @@
         this->elements_.clear();
 
-        for (size_t i = 0; i < copy.size(); ++i)
+        for (ObjectListBaseElement* element : copy)
         {
-            copy[i]->changeContext(this->context_, context);
-            Listable::deleteObjectListElement(copy[i]);
+            element->changeContext(this->context_, context);
+            Listable::deleteObjectListElement(element);
         }
 
Index: code/trunk/src/libraries/core/object/Listable.h
===================================================================
--- code/trunk/src/libraries/core/object/Listable.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/Listable.h	(revision 11071)
@@ -40,4 +40,5 @@
 #include <vector>
 
+#include "util/SmallObjectAllocator.h"
 #include "core/class/Identifiable.h"
 
Index: code/trunk/src/libraries/core/object/ObjectList.h
===================================================================
--- code/trunk/src/libraries/core/object/ObjectList.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/ObjectList.h	(revision 11071)
@@ -47,7 +47,4 @@
 #include "core/CorePrereqs.h"
 
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_base_of.hpp>
-
 #include "ObjectListBase.h"
 #include "ObjectListIterator.h"
@@ -69,57 +66,33 @@
     class ObjectList
     {
-        BOOST_STATIC_ASSERT((boost::is_base_of<Listable, T>::value));
+        static_assert(std::is_base_of<Listable, T>::value, "ObjectList can only be used with Listables");
 
         public:
             typedef ObjectListIterator<T> iterator;
 
-            /// Returns the size of the list (for the root context)
-            inline static size_t size()
-            {   return size(Context::getRootContext());   }
+            ObjectList() : ObjectList(Context::getRootContext()) {}
+            ObjectList(Context* context) : ObjectList(context->getObjectList<T>()) {}
+            ObjectList(ObjectListBase* list) : list_(list) {}
+
             /// Returns the size of the list
-            inline static size_t size(Context* context)
-            {
-                return context->getObjectList<T>()->size();
-            }
+            inline size_t size()
+            {   return this->list_->size();   }
 
-            /// Returns an Iterator to the first element in the list (for the root context).
-            inline static ObjectListElement<T>* begin()
-            {   return begin(Context::getRootContext());   }
             /// Returns an Iterator to the first element in the list.
-            inline static ObjectListElement<T>* begin(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->begin());
-            }
+            inline ObjectListIterator<T> begin()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->begin());   }
+            /// Returns an Iterator to the element after the last element in the list.
+            inline ObjectListIterator<T> end()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->end());   }
 
-            /// Returns an Iterator to the element after the last element in the list (for the root context).
-            inline static ObjectListElement<T>* end()
-            {   return end(Context::getRootContext());   }
-            /// Returns an Iterator to the element after the last element in the list.
-            inline static ObjectListElement<T>* end(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->end());
-            }
+            /// Returns an Iterator to the last element in the list.
+            inline ObjectListIterator<T> rbegin()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->rbegin());   }
+            /// Returns an Iterator to the element before the first element in the list.
+            inline ObjectListIterator<T> rend()
+            {   return static_cast<ObjectListElement<T>*>(this->list_->rend());   }
 
-            /// Returns an Iterator to the last element in the list (for the root context).
-            inline static ObjectListElement<T>* rbegin()
-            {   return rbegin(Context::getRootContext());   }
-            /// Returns an Iterator to the last element in the list.
-            inline static ObjectListElement<T>* rbegin(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->rbegin());
-            }
-
-            /// Returns an Iterator to the element before the first element in the list (for the root context).
-            inline static ObjectListElement<T>* rend()
-            {   return rend(Context::getRootContext());   }
-            /// Returns an Iterator to the element before the first element in the list.
-            inline static ObjectListElement<T>* rend(Context* context)
-            {
-                ObjectListBase* list = context->getObjectList<T>();
-                return static_cast<ObjectListElement<T>*>(list->rend());
-            }
+        private:
+            ObjectListBase* list_;
     };
 }
Index: code/trunk/src/libraries/core/object/ObjectListBase.cc
===================================================================
--- code/trunk/src/libraries/core/object/ObjectListBase.cc	(revision 11056)
+++ code/trunk/src/libraries/core/object/ObjectListBase.cc	(revision 11071)
@@ -58,6 +58,6 @@
     ObjectListBase::ObjectListBase()
     {
-        this->first_ = 0;
-        this->last_ = 0;
+        this->first_ = nullptr;
+        this->last_ = nullptr;
         this->size_ = 0;
     }
@@ -73,7 +73,7 @@
             ObjectListBaseElement* next = current->next_;
 
-            current->list_ = 0;
-            current->next_ = 0;
-            current->prev_ = 0;
+            current->list_ = nullptr;
+            current->next_ = nullptr;
+            current->prev_ = nullptr;
 
             current = next;
@@ -92,6 +92,6 @@
     void ObjectListBase::notifyRemovalListeners(ObjectListBaseElement* element) const
     {
-        for (std::vector<ObjectListElementRemovalListener*>::const_iterator it = this->listeners_.begin(); it != this->listeners_.end(); ++it)
-            (*it)->removedElement(element);
+        for (ObjectListElementRemovalListener* listener : this->listeners_)
+            listener->removedElement(element);
     }
 
@@ -155,7 +155,7 @@
             this->first_ = element->next_; // If there is no prev_, we deleted the first object and have to update the first_ pointer of the list
 
-        element->list_ = 0;
-        element->next_ = 0;
-        element->prev_ = 0;
+        element->list_ = nullptr;
+        element->next_ = nullptr;
+        element->prev_ = nullptr;
         --this->size_;
     }
Index: code/trunk/src/libraries/core/object/ObjectListBase.h
===================================================================
--- code/trunk/src/libraries/core/object/ObjectListBase.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/ObjectListBase.h	(revision 11071)
@@ -57,5 +57,5 @@
                 @param objectBase The object to store
             */
-            ObjectListBaseElement(Listable* object) : next_(0), prev_(0), objectBase_(object), list_(0) {}
+            ObjectListBaseElement(Listable* object) : next_(nullptr), prev_(nullptr), objectBase_(object), list_(nullptr) {}
             virtual ~ObjectListBaseElement() { this->removeFromList(); }
 
@@ -82,5 +82,5 @@
             ObjectListElement(T* object) : ObjectListBaseElement(static_cast<Listable*>(object)), object_(object) {}
 
-            virtual void changeContext(Context* oldContext, Context* newContext)
+            virtual void changeContext(Context* oldContext, Context* newContext) override
             {
                 // add object to new context, but only if this element belongs exactly to the old context (and not to a sub-context to avoid re-adding objects
@@ -104,5 +104,6 @@
     {
         public:
-            virtual ~ObjectListElementRemovalListener() {}
+            ObjectListElementRemovalListener() = default;
+            virtual ~ObjectListElementRemovalListener() = default;
             virtual void removedElement(ObjectListBaseElement* element) = 0;
     };
@@ -136,9 +137,9 @@
             inline ObjectListBaseElement* begin() const { return this->first_; }
             /// Returns a pointer to the element after the last element in the list. Works only with Iterator.
-            inline ObjectListBaseElement* end() const { return 0; }
+            inline ObjectListBaseElement* end() const { return nullptr; }
             /// Returns a pointer to the last element in the list. Works only with Iterator.
             inline ObjectListBaseElement* rbegin() const { return this->last_; }
             /// Returns a pointer to the element in front of the first element in the list. Works only with Iterator.
-            inline ObjectListBaseElement* rend() const { return 0; }
+            inline ObjectListBaseElement* rend() const { return nullptr; }
 
             inline void registerRemovalListener(ObjectListElementRemovalListener* listener) { this->listeners_.push_back(listener); }
Index: code/trunk/src/libraries/core/object/ObjectListIterator.h
===================================================================
--- code/trunk/src/libraries/core/object/ObjectListIterator.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/ObjectListIterator.h	(revision 11071)
@@ -41,5 +41,6 @@
     Usage:
     @code
-    for (ObjectListIterator<myClass> it = ObjectList<myClass>::begin(); it != ObjectList<myClass>::end(); ++it)
+    ObjectList<myClass> list;
+    for (ObjectListIterator<myClass> it = list.begin(); it != list.end(); ++it)
     {
         it->someFunction(...);
@@ -68,5 +69,5 @@
     */
     template <class T>
-    class ObjectListIterator : public IteratorBase<T, ObjectListIterator<T> >
+    class ObjectListIterator : public IteratorBase<T, ObjectListIterator<T>>
     {
         public:
@@ -74,5 +75,5 @@
                 @brief Constructor: Sets the element, whereon the ObjectListIterator points, to zero.
             */
-            inline ObjectListIterator() : IteratorBase<T, ObjectListIterator<T> >() {}
+            inline ObjectListIterator() : IteratorBase<T, ObjectListIterator<T>>() {}
 
             /**
@@ -80,5 +81,5 @@
                 @param element The element to start with
             */
-            inline ObjectListIterator(ObjectListElement<T>* element) : IteratorBase<T, ObjectListIterator<T> >(element) {}
+            inline ObjectListIterator(ObjectListElement<T>* element) : IteratorBase<T, ObjectListIterator<T>>(element) {}
 
             /**
@@ -86,5 +87,6 @@
                 @param other The other ObjectListIterator
             */
-            inline ObjectListIterator(const IteratorBase<T, ObjectListIterator<T> >& other) : IteratorBase<T, ObjectListIterator<T> >(other) {}
+            template <class OI>
+            inline ObjectListIterator(const IteratorBase<T, OI>& other) : IteratorBase<T, ObjectListIterator<T>>(other) {}
 
             /**
Index: code/trunk/src/libraries/core/object/StrongPtr.h
===================================================================
--- code/trunk/src/libraries/core/object/StrongPtr.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/StrongPtr.h	(revision 11071)
@@ -43,5 +43,5 @@
     orxonox::StrongPtr is an implementation of a smart pointer - it wraps a pointer to an
     object  and keeps this object alive until no StrongPtr points to this object anymore.
-    In contrast to orxonox::SharedPtr, StrongPtr works only with classes that are derived
+    In contrast to std::shared_ptr, StrongPtr works only with classes that are derived
     from orxonox::Destroyable, because it's an intrusive implementation, meaning the
     reference counter is stored in the object itself.
@@ -51,5 +51,5 @@
     at any time and also convert it back to a normal pointer if you like. This is possible
     because the reference counter is stored in the object itself and not in StrongPtr (in
-    contrast to SharedPtr).
+    contrast to std::shared_ptr).
 
     @b Important: If you want to delete an object, you must not use @c delete @c object but
@@ -138,5 +138,5 @@
         public:
             /// Constructor: Initializes the strong pointer with a null pointer.
-            inline StrongPtr() : pointer_(0), base_(0)
+            inline StrongPtr() : pointer_(nullptr), base_(nullptr)
             {
             }
@@ -158,5 +158,5 @@
             /// Copy-constructor for strong pointers to objects of another class.
             template <class O>
-            inline StrongPtr(const StrongPtr<O>& other) : pointer_(other.get()), base_(other.base_)
+            inline StrongPtr(const StrongPtr<O>& other) : pointer_(other.get()), base_(other.getBase())
             {
                 if (this->base_)
@@ -172,4 +172,11 @@
             }
 
+            /// Move-constructor
+            inline StrongPtr(StrongPtr&& other) : pointer_(other.pointer_), base_(other.base_)
+            {
+                other.pointer_ = nullptr;
+                other.base_ = nullptr;
+            }
+
             /// Destructor: Decrements the reference counter.
             inline ~StrongPtr()
@@ -187,7 +194,7 @@
 
             /// Assigns the wrapped pointer of another StrongPtr.
-            inline StrongPtr& operator=(const StrongPtr& other)
-            {
-                StrongPtr(other).swap(*this);
+            inline StrongPtr& operator=(StrongPtr other)
+            {
+                other.swap(*this);
                 return *this;
             }
@@ -230,5 +237,5 @@
             inline T* operator->() const
             {
-                assert(this->pointer_ != 0);
+                assert(this->pointer_ != nullptr);
                 return this->pointer_;
             }
@@ -237,12 +244,12 @@
             inline T& operator*() const
             {
-                assert(this->pointer_ != 0);
+                assert(this->pointer_ != nullptr);
                 return *this->pointer_;
             }
 
-            /// Returns true if the wrapped pointer is NULL.
-            inline bool operator!() const
-            {
-                return (this->pointer_ == 0);
+            /// Returns true if the pointer is not nullptr.
+            inline explicit operator bool() const
+            {
+                return (this->pointer_ != nullptr);
             }
 
@@ -262,5 +269,5 @@
             }
 
-            /// Resets the strong pointer (equivalent to assigning a NULL pointer).
+            /// Resets the strong pointer (equivalent to assigning a nullptr).
             inline void reset()
             {
Index: code/trunk/src/libraries/core/object/WeakPtr.h
===================================================================
--- code/trunk/src/libraries/core/object/WeakPtr.h	(revision 11056)
+++ code/trunk/src/libraries/core/object/WeakPtr.h	(revision 11071)
@@ -37,5 +37,5 @@
 
     A WeakPtr wraps a pointer to an object. If the object gets deleted, the WeakPtr becomes
-    NULL. This can be used to store pointers to objects without knowing when they will be
+    nullptr. This can be used to store pointers to objects without knowing when they will be
     destroyed.
 
@@ -50,10 +50,10 @@
     WeakPtr<MyClass> pointer = object;                  // create a WeakPtr and assign the object
 
-    if (pointer)                                        // checks if pointer is not NULL (which is true)
+    if (pointer)                                        // checks if pointer is not nullptr (which is true)
         pointer->someFunction();                        // calls MyClass::someFunction()
 
     object->destroy();                                  // calls destroy() which deletes the object
 
-    if (pointer)                                        // checks if pointer is not NULL (which is now false)
+    if (pointer)                                        // checks if pointer is not nullptr (which is now false)
         pointer->someFunction();                        // this will not be executed
     @endcode
@@ -91,5 +91,5 @@
 {
     /**
-        @brief WeakPtr wraps a pointer to an object, which becomes NULL if the object is deleted.
+        @brief WeakPtr wraps a pointer to an object, which becomes nullptr if the object is deleted.
 
         @see See @ref WeakPtrExample "this description" for more information and an example.
@@ -100,10 +100,10 @@
         public:
             /// Constructor: Initializes the weak pointer with a null pointer.
-            inline WeakPtr() : pointer_(0), base_(0), callback_(0)
+            inline WeakPtr() : pointer_(nullptr), base_(nullptr), callback_(nullptr)
             {
             }
 
             /// Constructor: Initializes the weak pointer with a pointer to an object.
-            inline WeakPtr(T* pointer) : pointer_(pointer), base_(pointer), callback_(0)
+            inline WeakPtr(T* pointer) : pointer_(pointer), base_(pointer), callback_(nullptr)
             {
                 this->registerAsDestructionListener(this->base_);
@@ -111,5 +111,5 @@
 
             /// Copy-constructor
-            inline WeakPtr(const WeakPtr& other) : pointer_(other.pointer_), base_(other.base_), callback_(0)
+            inline WeakPtr(const WeakPtr& other) : pointer_(other.pointer_), base_(other.base_), callback_(nullptr)
             {
                 this->registerAsDestructionListener(this->base_);
@@ -118,5 +118,5 @@
             /// Copy-constructor for weak pointers to objects of another class.
             template <class O>
-            inline WeakPtr(const WeakPtr<O>& other) : pointer_(other.get()), base_(other.base_), callback_(0)
+            inline WeakPtr(const WeakPtr<O>& other) : pointer_(other.get()), base_(other.getBase()), callback_(nullptr)
             {
                 this->registerAsDestructionListener(this->base_);
@@ -124,5 +124,5 @@
 
             /// Destructor
-            inline virtual ~WeakPtr()
+            virtual inline ~WeakPtr()
             {
                 this->unregisterAsDestructionListener(this->base_);
@@ -137,7 +137,7 @@
 
             /// Assigns the wrapped pointer of another WeakPtr.
-            inline WeakPtr& operator=(const WeakPtr& other)
-            {
-                WeakPtr(other).swap(*this);
+            inline WeakPtr& operator=(WeakPtr other)
+            {
+                other.swap(*this);
                 return *this;
             }
@@ -172,5 +172,5 @@
             inline T* operator->() const
             {
-                assert(this->pointer_ != 0);
+                assert(this->pointer_ != nullptr);
                 return this->pointer_;
             }
@@ -179,12 +179,12 @@
             inline T& operator*() const
             {
-                assert(this->pointer_ != 0);
+                assert(this->pointer_ != nullptr);
                 return *this->pointer_;
             }
 
-            /// Returns true if the wrapped pointer is NULL.
-            inline bool operator!() const
-            {
-                return (this->pointer_ == 0);
+            /// Returns true if the pointer is not nullptr.
+            inline explicit operator bool() const
+            {
+                return (this->pointer_ != nullptr);
             }
 
@@ -210,5 +210,5 @@
             }
 
-            /// Resets the weak pointer (equivalent to assigning a NULL pointer).
+            /// Resets the weak pointer (equivalent to assigning a nullptr).
             inline void reset()
             {
@@ -230,8 +230,8 @@
         private:
             /// Will be called by Destroyable::~Destroyable() if the stored object is deleted. Resets the wrapped pointer and executes the callback.
-            inline void objectDeleted()
-            {
-                this->base_ = 0;
-                this->pointer_ = 0;
+            virtual inline void objectDeleted() override
+            {
+                this->base_ = nullptr;
+                this->pointer_ = nullptr;
                 if (this->callback_)
                     (*this->callback_)();
Index: code/trunk/src/libraries/core/singleton/Scope.h
===================================================================
--- code/trunk/src/libraries/core/singleton/Scope.h	(revision 11056)
+++ code/trunk/src/libraries/core/singleton/Scope.h	(revision 11071)
@@ -72,5 +72,5 @@
         protected:
             ScopeListener() : bActivated_(false) { }
-            virtual ~ScopeListener() { }
+            virtual ~ScopeListener() = default;
 
             //! Gets called if the scope is activated
Index: code/trunk/src/libraries/core/singleton/ScopeManager.cc
===================================================================
--- code/trunk/src/libraries/core/singleton/ScopeManager.cc	(revision 11056)
+++ code/trunk/src/libraries/core/singleton/ScopeManager.cc	(revision 11071)
@@ -38,5 +38,5 @@
 namespace orxonox
 {
-    ScopeManager* ScopeManager::singletonPtr_s = 0;
+    ScopeManager* ScopeManager::singletonPtr_s = nullptr;
 
     void ScopeManager::addScope(ScopeID::Value scope)
@@ -73,12 +73,12 @@
     void ScopeManager::activateListenersForScope(ScopeID::Value scope)
     {
-        for (std::set<ScopeListener*>::iterator it = this->listeners_[scope].begin(); it != this->listeners_[scope].end(); ++it)
-            this->activateListener(*it);
+        for (ScopeListener* listener : this->listeners_[scope])
+            this->activateListener(listener);
     }
 
     void ScopeManager::deactivateListenersForScope(ScopeID::Value scope)
     {
-        for (std::set<ScopeListener*>::iterator it = this->listeners_[scope].begin(); it != this->listeners_[scope].end(); ++it)
-            this->deactivateListener(*it);
+        for (ScopeListener* listener : this->listeners_[scope])
+            this->deactivateListener(listener);
     }
 
Index: code/trunk/src/libraries/core/singleton/ScopeManager.h
===================================================================
--- code/trunk/src/libraries/core/singleton/ScopeManager.h	(revision 11056)
+++ code/trunk/src/libraries/core/singleton/ScopeManager.h	(revision 11071)
@@ -83,5 +83,5 @@
 
             std::set<ScopeID::Value> activeScopes_;
-            std::map<ScopeID::Value, std::set<ScopeListener*> > listeners_; //!< Stores all listeners for a scope
+            std::map<ScopeID::Value, std::set<ScopeListener*>> listeners_; //!< Stores all listeners for a scope
 
             static ScopeManager* singletonPtr_s;
Index: code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.h
===================================================================
--- code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/core/singleton/ScopedSingletonIncludes.h	(revision 11071)
@@ -71,5 +71,5 @@
 */
 #define ManageScopedSingleton(className, scope, allowedToFail) \
-    className* className::singletonPtr_s = NULL; \
+    className* className::singletonPtr_s = nullptr; \
     static ScopedSingletonWrapper& className##ScopedSingletonWrapper \
         = (new orxonox::SI_SSW(new ClassScopedSingletonWrapper<className, allowedToFail>(#className), scope))->getWrapper()
@@ -87,6 +87,6 @@
             ~StaticallyInitializedScopedSingletonWrapper() { delete wrapper_; }
 
-            virtual void load();
-            virtual void unload();
+            virtual void load() override;
+            virtual void unload() override;
 
             inline ScopedSingletonWrapper& getWrapper()
Index: code/trunk/src/libraries/core/singleton/ScopedSingletonWrapper.h
===================================================================
--- code/trunk/src/libraries/core/singleton/ScopedSingletonWrapper.h	(revision 11056)
+++ code/trunk/src/libraries/core/singleton/ScopedSingletonWrapper.h	(revision 11071)
@@ -64,5 +64,5 @@
                 : className_(className)
             { }
-            virtual ~ScopedSingletonWrapper() { }
+            virtual ~ScopedSingletonWrapper() = default;
 
         protected:
@@ -91,5 +91,5 @@
         ClassScopedSingletonWrapper(const std::string& className)
             : ScopedSingletonWrapper(className)
-            , singletonPtr_(NULL)
+            , singletonPtr_(nullptr)
         {
         }
@@ -102,16 +102,16 @@
 
         //! Called if the Scope of the Singleton gets active (creates the instance)
-        void activated()
+        virtual void activated() override
         {
-            assert(singletonPtr_ == NULL);
+            assert(singletonPtr_ == nullptr);
             singletonPtr_ = new T();
         }
 
         //! Called if the Scope of this Singleton gets deactivated (destroys the instance)
-        void deactivated()
+        virtual void deactivated() override
         {
-            assert(singletonPtr_ != NULL);
+            assert(singletonPtr_ != nullptr);
             this->destroy(singletonPtr_);
-            singletonPtr_ = NULL;
+            singletonPtr_ = nullptr;
         }
 
@@ -146,5 +146,5 @@
         ClassScopedSingletonWrapper(const std::string& className)
             : ScopedSingletonWrapper(className)
-            , singletonPtr_(NULL)
+            , singletonPtr_(nullptr)
         {
         }
@@ -157,7 +157,7 @@
 
         //! Called if the Scope of the Singleton gets active (creates the instance)
-        void activated()
+        virtual void activated() override
         {
-            assert(singletonPtr_ == NULL);
+            assert(singletonPtr_ == nullptr);
             try
                 { singletonPtr_ = new T(); }
@@ -169,10 +169,10 @@
 
         //! Called if the Scope of this Singleton gets deactivated (destroys the instance)
-        void deactivated()
+        virtual void deactivated() override
         {
-            if (singletonPtr_ != NULL)
+            if (singletonPtr_ != nullptr)
             {
                 this->destroy(singletonPtr_);
-                singletonPtr_ = NULL;
+                singletonPtr_ = nullptr;
             }
         }
Index: code/trunk/src/libraries/network/Client.cc
===================================================================
--- code/trunk/src/libraries/network/Client.cc	(revision 11056)
+++ code/trunk/src/libraries/network/Client.cc	(revision 11071)
@@ -161,8 +161,7 @@
         {
           std::vector<packet::Gamestate*> gamestates = GamestateManager::getGamestates();
-          std::vector<packet::Gamestate*>::iterator it;
-          for( it = gamestates.begin(); it != gamestates.end(); ++it )
+          for( packet::Gamestate* gamestate : gamestates )
           {
-            (*it)->send( static_cast<Host*>(this) );
+            gamestate->send( static_cast<Host*>(this) );
           }
         }
Index: code/trunk/src/libraries/network/Client.h
===================================================================
--- code/trunk/src/libraries/network/Client.h	(revision 11056)
+++ code/trunk/src/libraries/network/Client.h	(revision 11071)
@@ -76,20 +76,20 @@
     static Client* getInstance(){ return singletonPtr_s; } // tolua_export
 
-    bool establishConnection();
+    virtual bool establishConnection() override;
     void setDestination( const std::string& serverAddress, unsigned int port ); // tolua_export
-    bool closeConnection();
-    void queuePacket(ENetPacket* packet, int clientID, uint8_t channelID);
-    virtual bool sendPacket( packet::Packet* packet ){ return packet->send( static_cast<Host*>(this) ); }
-    virtual void doSendChat(const std::string& message, unsigned int sourceID, unsigned int targetID);
-    virtual void doReceiveChat(const std::string& message, unsigned int sourceID, unsigned int targetID);
-    virtual void printRTT();
+    virtual bool closeConnection() override;
+    virtual void queuePacket(ENetPacket* packet, int clientID, uint8_t channelID) override;
+    virtual bool sendPacket( packet::Packet* packet ) override{ return packet->send( static_cast<Host*>(this) ); }
+    virtual void doSendChat(const std::string& message, unsigned int sourceID, unsigned int targetID) override;
+    virtual void doReceiveChat(const std::string& message, unsigned int sourceID, unsigned int targetID) override;
+    virtual void printRTT() override;
 
     void update(const Clock& time);
   protected:
-    virtual void connectionClosed();
+    virtual void connectionClosed() override;
   private:
     Client(const Client& copy); // not used
-    virtual bool isServer_(){return false;}
-    void processPacket(packet::Packet* packet);
+    virtual bool isServer_() override{return false;}
+    virtual void processPacket(packet::Packet* packet) override;
 
     static Client* singletonPtr_s;
Index: code/trunk/src/libraries/network/ClientConnection.cc
===================================================================
--- code/trunk/src/libraries/network/ClientConnection.cc	(revision 11056)
+++ code/trunk/src/libraries/network/ClientConnection.cc	(revision 11071)
@@ -44,5 +44,5 @@
     Connection(NETWORK_PEER_ID_SERVER),
     established_(false),
-    server_(NULL)
+    server_(nullptr)
   {
     this->serverAddress_ = new ENetAddress();
@@ -72,9 +72,9 @@
 
     // create host
-    this->host_ = enet_host_create(NULL, NETWORK_CLIENT_MAX_CONNECTIONS, NETWORK_CHANNEL_COUNT, 0, 0);
+    this->host_ = enet_host_create(nullptr, NETWORK_CLIENT_MAX_CONNECTIONS, NETWORK_CHANNEL_COUNT, 0, 0);
     
-    if ( this->host_ == NULL )
+    if ( this->host_ == nullptr )
     {
-      orxout(internal_error, context::network) << "ClientConnection: host_ == NULL" << endl;
+      orxout(internal_error, context::network) << "ClientConnection: host_ == nullptr" << endl;
       // error handling
       return false;
@@ -93,7 +93,7 @@
 
     this->server_ = enet_host_connect(this->host_, serverAddress_, NETWORK_CHANNEL_COUNT, 0);
-    if ( this->server_==NULL )
+    if ( this->server_==nullptr )
     {
-      orxout(internal_error, context::network) << "ClientConnection: server_ == NULL" << endl;
+      orxout(internal_error, context::network) << "ClientConnection: server_ == nullptr" << endl;
       // error handling
       return false;
Index: code/trunk/src/libraries/network/ClientConnection.h
===================================================================
--- code/trunk/src/libraries/network/ClientConnection.h	(revision 11056)
+++ code/trunk/src/libraries/network/ClientConnection.h	(revision 11071)
@@ -57,6 +57,6 @@
     uint32_t getRTT();
   private:
-    virtual void addPeer(uint32_t peerID);
-    virtual void removePeer(uint32_t peerID);
+    virtual void addPeer(uint32_t peerID) override;
+    virtual void removePeer(uint32_t peerID) override;
 
     bool disconnectConnection();
Index: code/trunk/src/libraries/network/ClientConnectionListener.cc
===================================================================
--- code/trunk/src/libraries/network/ClientConnectionListener.cc	(revision 11056)
+++ code/trunk/src/libraries/network/ClientConnectionListener.cc	(revision 11071)
@@ -44,12 +44,12 @@
     void ClientConnectionListener::broadcastClientConnected(unsigned int clientID)
     {
-        for (ObjectList<ClientConnectionListener>::iterator it = ObjectList<ClientConnectionListener>::begin(); it != ObjectList<ClientConnectionListener>::end(); ++it)
-            it->clientConnected(clientID);
+        for (ClientConnectionListener* listener : ObjectList<ClientConnectionListener>())
+            listener->clientConnected(clientID);
     }
 
     void ClientConnectionListener::broadcastClientDisconnected(unsigned int clientID)
     {
-        for (ObjectList<ClientConnectionListener>::iterator it = ObjectList<ClientConnectionListener>::begin(); it != ObjectList<ClientConnectionListener>::end(); ++it)
-            it->clientDisconnected(clientID);
+        for (ClientConnectionListener* listener : ObjectList<ClientConnectionListener>())
+            listener->clientDisconnected(clientID);
     }
 
Index: code/trunk/src/libraries/network/Connection.cc
===================================================================
--- code/trunk/src/libraries/network/Connection.cc	(revision 11056)
+++ code/trunk/src/libraries/network/Connection.cc	(revision 11071)
@@ -46,5 +46,5 @@
 
   Connection::Connection(uint32_t firstPeerID):
-    host_(0), bCommunicationThreadRunning_(false), nextPeerID_(firstPeerID)
+    host_(nullptr), bCommunicationThreadRunning_(false), nextPeerID_(firstPeerID)
   {
     enet_initialize();
@@ -81,5 +81,5 @@
   {
 //     this->overallMutex_->lock();
-    outgoingEvent outEvent = { peerID, outgoingEventType::disconnectPeer, 0, 0 };
+    outgoingEvent outEvent = { peerID, OutgoingEventType::disconnectPeer, nullptr, 0 };
     
     this->outgoingEventsMutex_->lock();
@@ -91,5 +91,5 @@
   void Connection::disconnectPeers()
   {
-    outgoingEvent outEvent = { 0, outgoingEventType::disconnectPeers, 0, 0 };
+    outgoingEvent outEvent = { 0, OutgoingEventType::disconnectPeers, nullptr, 0 };
     
     this->outgoingEventsMutex_->lock();
@@ -101,5 +101,5 @@
   {
 //     this->overallMutex_->lock();
-    outgoingEvent outEvent = { peerID, outgoingEventType::sendPacket, packet, channelID };
+    outgoingEvent outEvent = { peerID, OutgoingEventType::sendPacket, packet, channelID };
     
     this->outgoingEventsMutex_->lock();
@@ -112,5 +112,5 @@
   {
 //     this->overallMutex_->lock();
-    outgoingEvent outEvent = { 0, outgoingEventType::broadcastPacket, packet, channelID };
+    outgoingEvent outEvent = { 0, OutgoingEventType::broadcastPacket, packet, channelID };
     
     this->outgoingEventsMutex_->lock();
@@ -197,5 +197,5 @@
     switch( event.type )
     {
-      case outgoingEventType::sendPacket:
+      case OutgoingEventType::sendPacket:
         // check whether the peer is still/already in the peer list
         if( this->peerMap_.find(event.peerID) != this->peerMap_.end() )
@@ -211,5 +211,5 @@
         }
         break;
-      case outgoingEventType::disconnectPeer:
+      case OutgoingEventType::disconnectPeer:
         if( this->peerMap_.find(event.peerID) != this->peerMap_.end() )
         {
@@ -223,8 +223,8 @@
         }
         break;
-      case outgoingEventType::disconnectPeers:
+      case OutgoingEventType::disconnectPeers:
         disconnectPeersInternal();
         break;
-      case outgoingEventType::broadcastPacket:
+      case OutgoingEventType::broadcastPacket:
         enet_host_broadcast( this->host_, event.channelID, event.packet );
         break;
@@ -237,8 +237,7 @@
   void Connection::disconnectPeersInternal()
   {
-    std::map<uint32_t, ENetPeer*>::iterator it;
-    for( it=this->peerMap_.begin(); it!=this->peerMap_.end(); ++it )
-    {
-      enet_peer_disconnect(it->second, 0);
+    for( const auto& mapEntry : this->peerMap_ )
+    {
+      enet_peer_disconnect(mapEntry.second, 0);
     }
     uint32_t iterations = NETWORK_DISCONNECT_TIMEOUT/NETWORK_WAIT_TIMEOUT;
@@ -272,11 +271,11 @@
       switch( inEvent.type )
       {
-        case incomingEventType::peerConnect:
+        case IncomingEventType::peerConnect:
           addPeer(inEvent.peerID);
           break;
-        case incomingEventType::peerDisconnect:
+        case IncomingEventType::peerDisconnect:
           removePeer(inEvent.peerID);
           break;
-        case incomingEventType::receivePacket:
+        case IncomingEventType::receivePacket:
           processPacket(inEvent.packet);
           break;
@@ -323,5 +322,5 @@
     
     // create new peerEvent and return it
-    incomingEvent inEvent = { peerID, incomingEventType::peerConnect, 0 };
+    incomingEvent inEvent = { peerID, IncomingEventType::peerConnect, nullptr };
     return inEvent;
   }
@@ -338,5 +337,5 @@
     
     // create new peerEvent and return it
-    incomingEvent inEvent = { peerID, incomingEventType::peerDisconnect, 0 };
+    incomingEvent inEvent = { peerID, IncomingEventType::peerDisconnect, nullptr };
     return inEvent;
   }
@@ -352,5 +351,5 @@
     
     // create new peerEvent and return it
-    incomingEvent inEvent = { peerID, incomingEventType::receivePacket, p };
+    incomingEvent inEvent = { peerID, IncomingEventType::receivePacket, p };
     return inEvent;
   }
Index: code/trunk/src/libraries/network/Connection.h
===================================================================
--- code/trunk/src/libraries/network/Connection.h	(revision 11056)
+++ code/trunk/src/libraries/network/Connection.h	(revision 11071)
@@ -46,5 +46,4 @@
 #include <map>
 #include <enet/enet.h>
-#include <boost/concept_check.hpp>
 
 namespace boost
@@ -61,40 +60,32 @@
   const unsigned int NETWORK_MAX_QUEUE_PROCESS_TIME = 5;
   
-  namespace incomingEventType
+  enum class IncomingEventType
   {
-    enum Value
-    {
-      receivePacket   = 1,  // incoming packet
-      peerConnect     = 2,  // incoming connect request
-      peerDisconnect  = 3   // incoming disconnect request
-    };
-    
-  }
+    receivePacket   = 1,  // incoming packet
+    peerConnect     = 2,  // incoming connect request
+    peerDisconnect  = 3   // incoming disconnect request
+  };
   
-  namespace outgoingEventType
+  enum class OutgoingEventType
   {
-    enum Value
-    {
-      sendPacket      = 1,  // outgoing packet
-      broadcastPacket = 2,  // outgoing broadcast packet
-      disconnectPeer  = 3,  // outgoing disconnect request
-      disconnectPeers = 4   // outgoing disconnect request
-    };
-    
-  }
+    sendPacket      = 1,  // outgoing packet
+    broadcastPacket = 2,  // outgoing broadcast packet
+    disconnectPeer  = 3,  // outgoing disconnect request
+    disconnectPeers = 4   // outgoing disconnect request
+  };
   
   struct _NetworkExport incomingEvent
   {
-    uint32_t                  peerID;
-    incomingEventType::Value  type;
-    packet::Packet*           packet;
+    uint32_t          peerID;
+    IncomingEventType type;
+    packet::Packet*   packet;
   };
   
   struct _NetworkExport outgoingEvent
   {
-    uint32_t                  peerID;
-    outgoingEventType::Value  type;
-    ENetPacket*               packet;
-    ENetChannelID             channelID;
+    uint32_t          peerID;
+    OutgoingEventType type;
+    ENetPacket*       packet;
+    ENetChannelID     channelID;
   };
   
Index: code/trunk/src/libraries/network/FunctionCall.cc
===================================================================
--- code/trunk/src/libraries/network/FunctionCall.cc	(revision 11056)
+++ code/trunk/src/libraries/network/FunctionCall.cc	(revision 11071)
@@ -48,5 +48,5 @@
 bool FunctionCall::execute(){
   NetworkFunctionBase* fct = NetworkFunctionManager::getInstance().getFunctionByNetworkId( this->functionID_ );
-  assert( fct != NULL );
+  assert( fct != nullptr );
   assert( this->nrOfArguments_==this->arguments_.size() );
   switch(this->nrOfArguments_)
@@ -119,5 +119,5 @@
   for( unsigned int i=0; i<this->nrOfArguments_; ++i )
   {
-    this->arguments_.push_back(MultiType());
+    this->arguments_.emplace_back();
     this->arguments_.back().importData(mem);
   }
@@ -131,7 +131,7 @@
   *(uint32_t*)(mem+2*sizeof(uint32_t)) = this->objectID_;
   mem += 3*sizeof(uint32_t);
-  for( std::vector<MultiType>::iterator it = this->arguments_.begin(); it!=this->arguments_.end(); ++it )
+  for(const MultiType& argument : this->arguments_)
   {
-    it->exportData( mem );
+    argument.exportData( mem );
   }
 }
Index: code/trunk/src/libraries/network/FunctionCallManager.cc
===================================================================
--- code/trunk/src/libraries/network/FunctionCallManager.cc	(revision 11056)
+++ code/trunk/src/libraries/network/FunctionCallManager.cc	(revision 11071)
@@ -37,5 +37,5 @@
 
 std::map<uint32_t, packet::FunctionCalls*> FunctionCallManager::sPeerMap_;
-std::vector<std::pair<FunctionCall, std::pair<uint32_t, uint32_t> > > FunctionCallManager::sIncomingFunctionCallBuffer_;
+std::vector<std::pair<FunctionCall, std::pair<uint32_t, uint32_t>>> FunctionCallManager::sIncomingFunctionCallBuffer_;
 
 
@@ -54,9 +54,8 @@
 void FunctionCallManager::sendCalls(orxonox::Host* host)
 {
-  std::map<uint32_t, packet::FunctionCalls*>::iterator it;
-  for (it = FunctionCallManager::sPeerMap_.begin(); it != FunctionCallManager::sPeerMap_.end(); ++it )
+  for (const auto& mapEntry : FunctionCallManager::sPeerMap_ )
   {
     assert(!FunctionCallManager::sPeerMap_.empty());
-    it->second->send(host);
+    mapEntry.second->send(host);
   }
   FunctionCallManager::sPeerMap_.clear();
@@ -65,10 +64,10 @@
 void FunctionCallManager::bufferIncomingFunctionCall(const orxonox::FunctionCall& fctCall, uint32_t minGamestateID, uint32_t peerID)
 {
-  FunctionCallManager::sIncomingFunctionCallBuffer_.push_back( std::make_pair(fctCall, std::make_pair(minGamestateID, peerID)));
+  FunctionCallManager::sIncomingFunctionCallBuffer_.emplace_back(fctCall, std::make_pair(minGamestateID, peerID));
 }
 
 void FunctionCallManager::processBufferedFunctionCalls()
 {
-  std::vector<std::pair<FunctionCall, std::pair<uint32_t, uint32_t> > >::iterator it = FunctionCallManager::sIncomingFunctionCallBuffer_.begin();
+  std::vector<std::pair<FunctionCall, std::pair<uint32_t, uint32_t>>>::iterator it = FunctionCallManager::sIncomingFunctionCallBuffer_.begin();
   while( it!=FunctionCallManager::sIncomingFunctionCallBuffer_.end() )
   {
Index: code/trunk/src/libraries/network/FunctionCallManager.h
===================================================================
--- code/trunk/src/libraries/network/FunctionCallManager.h	(revision 11056)
+++ code/trunk/src/libraries/network/FunctionCallManager.h	(revision 11071)
@@ -54,5 +54,5 @@
 
   static std::map<uint32_t, packet::FunctionCalls*>                           sPeerMap_;
-  static std::vector<std::pair<FunctionCall,std::pair<uint32_t, uint32_t> > > sIncomingFunctionCallBuffer_;
+  static std::vector<std::pair<FunctionCall,std::pair<uint32_t, uint32_t>>> sIncomingFunctionCallBuffer_;
 protected:
   FunctionCallManager();
Index: code/trunk/src/libraries/network/GamestateHandler.cc
===================================================================
--- code/trunk/src/libraries/network/GamestateHandler.cc	(revision 11056)
+++ code/trunk/src/libraries/network/GamestateHandler.cc	(revision 11071)
@@ -32,5 +32,5 @@
 namespace orxonox {
 
-// GamestateHandler *GamestateHandler::instance_=0;
+// GamestateHandler *GamestateHandler::instance_=nullptr;
 
 GamestateHandler::GamestateHandler()
Index: code/trunk/src/libraries/network/GamestateManager.cc
===================================================================
--- code/trunk/src/libraries/network/GamestateManager.cc	(revision 11056)
+++ code/trunk/src/libraries/network/GamestateManager.cc	(revision 11071)
@@ -60,5 +60,5 @@
 { 
   GamestateManager::GamestateManager() :
-  currentGamestate_(0), id_(0)
+  currentGamestate_(nullptr), id_(0)
   {
 //     trafficControl_ = new TrafficControl();
@@ -70,13 +70,11 @@
   {
     if( this->currentGamestate_ )
-        delete this->currentGamestate_;std::map<unsigned int, packet::Gamestate*>::iterator it;
-    for( it = gamestateQueue.begin(); it != gamestateQueue.end(); ++it )
-      delete it->second;
-    std::map<uint32_t, peerInfo>::iterator peerIt;
-    std::map<uint32_t, packet::Gamestate*>::iterator gamestateIt;
-    for( peerIt = peerMap_.begin(); peerIt != peerMap_.end(); ++peerIt )
-    {
-      for( gamestateIt = peerIt->second.gamestates.begin(); gamestateIt != peerIt->second.gamestates.end(); ++gamestateIt )
-        delete gamestateIt->second;
+        delete this->currentGamestate_;
+    for( const auto& mapEntry : gamestateQueue )
+      delete mapEntry.second;
+    for( const auto& mapEntryPeer : peerMap_ )
+    {
+      for( const auto& mapEntryGamestate : mapEntryPeer.second.gamestates )
+        delete mapEntryGamestate.second;
     }
 //     this->trafficControl_->destroy();
@@ -107,11 +105,10 @@
     if( this->gamestateQueue.empty() )
         return true;
-    std::map<unsigned int, packet::Gamestate*>::iterator it;
     // now push only the most recent gamestates we received (ignore obsolete ones)
-    for(it = gamestateQueue.begin(); it!=gamestateQueue.end(); it++)
-    {
-      OrxVerify(processGamestate(it->second), "ERROR: could not process Gamestate");
-      sendAck( it->second->getID(), it->second->getPeerID() );
-      delete it->second;
+    for(const auto& mapEntry : gamestateQueue)
+    {
+      OrxVerify(processGamestate(mapEntry.second), "ERROR: could not process Gamestate");
+      sendAck( mapEntry.second->getID(), mapEntry.second->getPeerID() );
+      delete mapEntry.second;
     }
     // now clear the queue
@@ -140,5 +137,5 @@
 
   bool GamestateManager::getSnapshot(){
-    if ( currentGamestate_ != 0 )
+    if ( currentGamestate_ != nullptr )
       delete currentGamestate_;
     uint8_t gsMode;
@@ -165,5 +162,5 @@
     { //we have no data to send
       delete currentGamestate_;
-      currentGamestate_=0;
+      currentGamestate_=nullptr;
       return false;
     }
@@ -177,19 +174,18 @@
     std::vector<packet::Gamestate*> peerGamestates;
     
-    std::map<uint32_t, peerInfo>::iterator peerIt;
-    for( peerIt=peerMap_.begin(); peerIt!=peerMap_.end(); ++peerIt )
-    {
-      if( !peerIt->second.isSynched )
+    for( const auto& mapEntry : peerMap_ )
+    {
+      if( !mapEntry.second.isSynched )
       {
         orxout(verbose_more, context::network) << "Server: not sending gamestate" << endl;
         continue;
       }
-      orxout(verbose_more, context::network) << "client id: " << peerIt->first << endl;
+      orxout(verbose_more, context::network) << "client id: " << mapEntry.first << endl;
       orxout(verbose_more, context::network) << "Server: doing gamestate gamestate preparation" << endl;
-      int peerID = peerIt->first; //get client id
-
-      unsigned int lastAckedGamestateID = peerIt->second.lastAckedGamestateID;
-
-      packet::Gamestate* baseGamestate=0;
+      int peerID = mapEntry.first; //get client id
+
+      unsigned int lastAckedGamestateID = mapEntry.second.lastAckedGamestateID;
+
+      packet::Gamestate* baseGamestate=nullptr;
       if(lastAckedGamestateID != GAMESTATEID_INITIAL)
       {
@@ -200,7 +196,7 @@
       }
 
-      peerGamestates.push_back(0);  // insert an empty gamestate* to be changed
+      peerGamestates.push_back(nullptr);  // insert an empty gamestate* to be changed
       finishGamestate( peerID, peerGamestates.back(), baseGamestate, currentGamestate_ );
-      if( peerGamestates.back()==0 )
+      if( peerGamestates.back()==nullptr )
         // nothing to send to remove pointer from vector
         peerGamestates.pop_back();
@@ -243,5 +239,5 @@
       {
         delete diffed1;
-        destgamestate = 0;
+        destgamestate = nullptr;
         return;
       }
@@ -340,8 +336,7 @@
   {
     assert(peerMap_.find(peerID)!=peerMap_.end());
-    std::map<uint32_t, packet::Gamestate*>::iterator peerIt;
-    for( peerIt = peerMap_[peerID].gamestates.begin(); peerIt!=peerMap_[peerID].gamestates.end(); ++peerIt )
-    {
-      delete peerIt->second;
+    for( const auto& mapEntry : peerMap_[peerID].gamestates )
+    {
+      delete mapEntry.second;
     }
     peerMap_.erase(peerMap_.find(peerID));
@@ -351,5 +346,5 @@
 //   void GamestateManager::removeClient(ClientInformation* client){
 //     assert(client);
-//     std::map<unsigned int, std::map<unsigned int, packet::Gamestate*> >::iterator clientMap = gamestateMap_.find(client->getID());
+//     std::map<unsigned int, std::map<unsigned int, packet::Gamestate*>>::iterator clientMap = gamestateMap_.find(client->getID());
 //     // first delete all remained gamestates
 //     std::map<unsigned int, packet::Gamestate*>::iterator it;
Index: code/trunk/src/libraries/network/GamestateManager.h
===================================================================
--- code/trunk/src/libraries/network/GamestateManager.h	(revision 11056)
+++ code/trunk/src/libraries/network/GamestateManager.h	(revision 11071)
@@ -47,5 +47,4 @@
 #include "core/CorePrereqs.h"
 #include "packet/Gamestate.h"
-#include <boost/concept_check.hpp>
 
 namespace orxonox
@@ -84,8 +83,8 @@
     ~GamestateManager();
 
-    virtual bool      addGamestate(packet::Gamestate *gs, unsigned int peerID);
-    virtual bool      ackGamestate(unsigned int gamestateID, unsigned int peerID);
-    virtual uint32_t  getLastReceivedGamestateID( unsigned int peerID );
-    virtual uint32_t  getCurrentGamestateID(){ if( currentGamestate_) return currentGamestate_->getID(); else return GAMESTATEID_INITIAL; }
+    virtual bool      addGamestate(packet::Gamestate *gs, unsigned int peerID) override;
+    virtual bool      ackGamestate(unsigned int gamestateID, unsigned int peerID) override;
+    virtual uint32_t  getLastReceivedGamestateID( unsigned int peerID ) override;
+    virtual uint32_t  getCurrentGamestateID() override{ if( currentGamestate_) return currentGamestate_->getID(); else return GAMESTATEID_INITIAL; }
 
     bool processGamestates();
@@ -108,5 +107,5 @@
     bool processGamestate(packet::Gamestate *gs);
 
-//     std::map<unsigned int, std::map<unsigned int, packet::Gamestate*> > gamestateMap_;
+//     std::map<unsigned int, std::map<unsigned int, packet::Gamestate*>> gamestateMap_;
     std::map<unsigned int, packet::Gamestate*> gamestateQueue;
 //     std::map<unsigned int, uint32_t> lastProcessedGamestateID_;
Index: code/trunk/src/libraries/network/Host.cc
===================================================================
--- code/trunk/src/libraries/network/Host.cc	(revision 11056)
+++ code/trunk/src/libraries/network/Host.cc	(revision 11071)
@@ -44,5 +44,5 @@
   SetConsoleCommand(__CC_printRTT_group, __CC_printRTT_name, &Host::printRTT);
 
-  // Host*               Host::instance_=0;
+  // Host*               Host::instance_=nullptr;
   uint32_t            Host::clientID_s=0;
 //   uint32_t            Host::shipID_s=-1;
@@ -54,5 +54,5 @@
   Host::Host()
   {
-  //   assert(instance_==0);
+  //   assert(instance_==nullptr);
     instances_s.push_back(this);
     ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(this);
@@ -62,5 +62,5 @@
 
   /**
-  * @brief Destructor: resets the instance pointer to 0
+  * @brief Destructor: resets the instance pointer to nullptr
   */
   Host::~Host()
@@ -68,5 +68,5 @@
     assert( std::find( instances_s.begin(), instances_s.end(), this )!=instances_s.end() );
     instances_s.erase(std::find( instances_s.begin(), instances_s.end(), this ));
-    ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(0);
+    ModifyConsoleCommand(__CC_printRTT_group, __CC_printRTT_name).setObject(nullptr);
   }
 
@@ -80,9 +80,9 @@
   void Host::addPacket(ENetPacket *packet, int clientID, uint8_t channelID)
   {
-    for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
+    for(Host* host : instances_s)
     {
-      if( (*it)->isActive() )
+      if( host->isActive() )
       {
-        (*it)->queuePacket(packet, clientID, channelID);
+        host->queuePacket(packet, clientID, channelID);
       }
     }
@@ -97,7 +97,7 @@
   void Host::sendChat(const std::string& message, unsigned int sourceID, unsigned int targetID)
   {
-    for( std::vector<Host*>::iterator it = instances_s.begin(); it!=instances_s.end(); ++it )
-      if( (*it)->isActive() )
-        (*it)->doSendChat(message, sourceID, targetID);
+    for(Host* host : instances_s)
+      if( host->isActive() )
+        host->doSendChat(message, sourceID, targetID);
   }
 
@@ -107,6 +107,6 @@
   void Host::doReceiveChat(const std::string& message, unsigned int sourceID, unsigned int targetID)
   {
-    for (ObjectList<NetworkChatListener>::iterator it = ObjectList<NetworkChatListener>::begin(); it != ObjectList<NetworkChatListener>::end(); ++it)
-      it->incomingChat(message, sourceID);
+    for (NetworkChatListener* listener : ObjectList<NetworkChatListener>())
+      listener->incomingChat(message, sourceID);
   }
 
@@ -114,9 +114,9 @@
   bool Host::isServer()
   {
-    for (std::vector<Host*>::iterator it=instances_s.begin(); it!=instances_s.end(); ++it )
+    for (Host* host : instances_s)
     {
-      if( (*it)->isActive() )
+      if( host->isActive() )
       {
-        if( (*it)->isServer_() )
+        if( host->isServer_() )
           return true;
       }
@@ -135,5 +135,5 @@
         ++it;
     }
-    return 0;
+    return nullptr;
   }
 
Index: code/trunk/src/libraries/network/LANDiscoverable.cc
===================================================================
--- code/trunk/src/libraries/network/LANDiscoverable.cc	(revision 11056)
+++ code/trunk/src/libraries/network/LANDiscoverable.cc	(revision 11071)
@@ -46,5 +46,5 @@
   RegisterClassNoArgs(LANDiscoverable);
 
-  LANDiscoverable::LANDiscoverable() : bActive_(false), host_(0)
+  LANDiscoverable::LANDiscoverable() : bActive_(false), host_(nullptr)
   {
     /* register object in orxonox */
@@ -82,13 +82,13 @@
       bindAddress.host = ENET_HOST_ANY;
       bindAddress.port = LAN_DISCOVERY_PORT;
-      assert( this->host_ == 0 );
+      assert( this->host_ == nullptr );
       this->host_ = enet_host_create( &bindAddress, 10, 0, 0, 0 );
-      if ( this->host_ == NULL )
-          orxout(internal_error, context::network) << "LANDiscoverable: host_ == NULL" << endl;
+      if ( this->host_ == nullptr )
+          orxout(internal_error, context::network) << "LANDiscoverable: host_ == nullptr" << endl;
     }
     else
     {
       enet_host_destroy( this->host_ );
-      this->host_ = 0;
+      this->host_ = nullptr;
     }
       this->bActive_ = bActive;
Index: code/trunk/src/libraries/network/LANDiscovery.cc
===================================================================
--- code/trunk/src/libraries/network/LANDiscovery.cc	(revision 11056)
+++ code/trunk/src/libraries/network/LANDiscovery.cc	(revision 11071)
@@ -42,12 +42,12 @@
   LANDiscovery::LANDiscovery()
   {
-    this->host_ = enet_host_create(NULL, 10, 0, 0, 0 );
-    if ( this->host_ == NULL )
-        orxout(internal_error, context::network) << "LANDiscovery: host_ == NULL" << endl;
+    this->host_ = enet_host_create(nullptr, 10, 0, 0, 0 );
+    if ( this->host_ == nullptr )
+        orxout(internal_error, context::network) << "LANDiscovery: host_ == nullptr" << endl;
   }
 
   LANDiscovery::~LANDiscovery()
   {
-    if (this->host_ != NULL)
+    if (this->host_ != nullptr)
       enet_host_destroy(this->host_);
   }
@@ -65,5 +65,5 @@
     address.host = ENET_HOST_BROADCAST;
     peer = enet_host_connect(this->host_, &address, 0, 0);
-    if (peer == NULL)
+    if (peer == nullptr)
         orxout(internal_error, context::network) << "Could not send LAN discovery to IPv4 Broadcast." << endl;
 
@@ -71,5 +71,5 @@
     enet_address_set_host(&address, "ff02::1"); // TODO: use a multicast group
     peer = enet_host_connect(this->host_, &address, 0, 0);
-    if (peer == NULL)
+    if (peer == nullptr)
         orxout(internal_error, context::network) << "Could not send LAN discovery to IPv6 Multicast." << endl;
 
Index: code/trunk/src/libraries/network/MasterServer.cc
===================================================================
--- code/trunk/src/libraries/network/MasterServer.cc	(revision 11056)
+++ code/trunk/src/libraries/network/MasterServer.cc	(revision 11071)
@@ -43,5 +43,5 @@
 
   /* forward declaration so the linker doesn't complain */
-  MasterServer *MasterServer::instance = NULL;
+  MasterServer *MasterServer::instance = nullptr;
 
   /* command: list servers */
@@ -49,15 +49,11 @@
   MasterServer::listServers( void )
   {
-    /* get an iterator */
-    std::list<ServerListElem>::iterator i;
-
     /* print list header */
     orxout(user_info) << "List of connected servers" << std::endl;
 
     /* loop through list elements */
-    for( i = MasterServer::getInstance()->mainlist.serverlist.begin();
-      i != MasterServer::getInstance()->mainlist.serverlist.end(); ++i )
+    for( const ServerListElem& elem : MasterServer::getInstance()->mainlist.serverlist )
     {
-      orxout(user_info) << "  " << (*i).ServerInfo.getServerIP() << std::endl;
+      orxout(user_info) << "  " << elem.ServerInfo.getServerIP() << std::endl;
     }
 
@@ -112,17 +108,13 @@
   MasterServer::helper_sendlist( ENetEvent *event )
   {
-    /* get an iterator */
-    std::list<ServerListElem>::iterator i;
-
     /* packet holder */
     ENetPacket *reply;
 
     /* loop through list elements */
-    for( i = mainlist.serverlist.begin(); i
-        != mainlist.serverlist.end(); ++i )
+    for( const ServerListElem& elem : mainlist.serverlist )
     {
       /* send this particular server */
       /* build reply string */
-      int packetlen = MSPROTO_SERVERLIST_ITEM_LEN + 1 + (*i).ServerInfo.getServerIP().length() + 1 + (*i).ServerInfo.getServerName().length() + 1 + sizeof((*i).ServerInfo.getClientNumber()) + 1;
+      int packetlen = MSPROTO_SERVERLIST_ITEM_LEN + 1 + elem.ServerInfo.getServerIP().length() + 1 + elem.ServerInfo.getServerName().length() + 1 + sizeof(elem.ServerInfo.getClientNumber()) + 1;
       char *tosend = (char *)calloc(packetlen ,1 );
       if( !tosend )
@@ -131,5 +123,5 @@
       }
       sprintf( tosend, "%s %s %s %u", MSPROTO_SERVERLIST_ITEM,
-          (*i).ServerInfo.getServerIP().c_str(), (*i).ServerInfo.getServerName().c_str(), (*i).ServerInfo.getClientNumber());
+          elem.ServerInfo.getServerIP().c_str(), elem.ServerInfo.getServerName().c_str(), elem.ServerInfo.getClientNumber());
 
       /* create packet from it */
@@ -167,21 +159,17 @@
   MasterServer::helper_cleanupServers( void )
   {
-    /* get an iterator */
-    std::list<ServerListElem>::iterator i;
-
     if( mainlist.serverlist.size() == 0 )
       return;
 
     /* loop through list elements */
-    for( i = mainlist.serverlist.begin(); i
-        != mainlist.serverlist.end(); ++i )
+    for( const ServerListElem& elem : mainlist.serverlist )
     { /* see if we have a disconnected peer */
-      if( (*i).peer &&
-         ((*i).peer->state == ENET_PEER_STATE_DISCONNECTED ||
-          (*i).peer->state == ENET_PEER_STATE_ZOMBIE ))
+      if( elem.peer &&
+         (elem.peer->state == ENET_PEER_STATE_DISCONNECTED ||
+          elem.peer->state == ENET_PEER_STATE_ZOMBIE ))
       {
         /* Remove it from the list */
-        orxout(internal_warning) << (char*)(*i).peer->data << " timed out.\n";
-        mainlist.delServerByName( (*i).ServerInfo.getServerName() );
+        orxout(internal_warning) << (char*)elem.peer->data << " timed out.\n";
+        mainlist.delServerByName( elem.ServerInfo.getServerName() );
 
         /* stop iterating, we manipulated the list */
@@ -345,5 +333,5 @@
     /***** ENTER MAIN LOOP *****/
     ENetEvent *event = (ENetEvent *)calloc(sizeof(ENetEvent), sizeof(char));
-    if( event == NULL )
+    if( event == nullptr )
     {
       orxout(user_error, context::master_server) << "Could not create ENetEvent structure, exiting." << endl;
Index: code/trunk/src/libraries/network/MasterServerComm.cc
===================================================================
--- code/trunk/src/libraries/network/MasterServerComm.cc	(revision 11056)
+++ code/trunk/src/libraries/network/MasterServerComm.cc	(revision 11071)
@@ -54,5 +54,5 @@
 
     /* initiate the client */
-    this->client = enet_host_create( NULL /* create a client host */,
+    this->client = enet_host_create( nullptr /* create a client host */,
         1,
         2, /* allow up 2 channels to be used, 0 and 1 */
@@ -61,5 +61,5 @@
 
     /* see if it worked */
-    if (this->client == NULL)
+    if (this->client == nullptr)
     { orxout(internal_error, context::master_server) << "An error occurred while trying to create an " 
         << "ENet client host." << endl;
@@ -85,5 +85,5 @@
     this->peer = enet_host_connect(this->client, &this->address, 2, 0);    
 
-    if( this->peer == NULL )
+    if( this->peer == nullptr )
     { orxout(internal_error, context::master_server) << "No available peers for initiating an ENet"
         << " connection." << endl;
@@ -157,5 +157,5 @@
 
     /* address buffer */
-    char *addrconv = NULL;
+    char *addrconv = nullptr;
     int retval = 0;
 
@@ -193,5 +193,5 @@
 
           /* call the supplied callback, if any. */
-          if( listener != NULL )
+          if( listener != nullptr )
             retval = listener->rhandler( addrconv, &(this->event) );
 
Index: code/trunk/src/libraries/network/NetworkFunction.h
===================================================================
--- code/trunk/src/libraries/network/NetworkFunction.h	(revision 11056)
+++ code/trunk/src/libraries/network/NetworkFunction.h	(revision 11071)
@@ -45,9 +45,9 @@
 
 #if defined(ORXONOX_COMPILER_GCC) && defined(ORXONOX_ARCH_32)
-static const unsigned int MAX_FUNCTION_POINTER_SIZE = 8;
+static constexpr unsigned int MAX_FUNCTION_POINTER_SIZE = 8;
 #else
-static const unsigned int MAX_FUNCTION_POINTER_SIZE = 16;
+static constexpr unsigned int MAX_FUNCTION_POINTER_SIZE = 16;
 #endif //ORXONOX_COMPILER_GCC
-static const unsigned int MAX_FUNCTION_POINTER_INTS = (MAX_FUNCTION_POINTER_SIZE-1)/4+1;
+static constexpr unsigned int MAX_FUNCTION_POINTER_INTS = (MAX_FUNCTION_POINTER_SIZE-1)/4+1;
 
 struct _NetworkExport NetworkFunctionPointer {
@@ -114,10 +114,10 @@
 
     // ignore the objectID because its a static function
-    virtual bool call(uint32_t objectID){ (*this->functor_)(); return true; }
-    virtual bool call(uint32_t objectID, const MultiType& mt1){ (*this->functor_)(mt1); return true; }
-    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2){ (*this->functor_)(mt1, mt2); return true; }
-    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3){ (*this->functor_)(mt1, mt2, mt3); return true; }
-    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4){ (*this->functor_)(mt1, mt2, mt3, mt4); return true; }
-    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5){ (*this->functor_)(mt1, mt2, mt3, mt4, mt5); return true; }
+    virtual bool call(uint32_t objectID) override{ (*this->functor_)(); return true; }
+    virtual bool call(uint32_t objectID, const MultiType& mt1) override{ (*this->functor_)(mt1); return true; }
+    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2) override{ (*this->functor_)(mt1, mt2); return true; }
+    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3) override{ (*this->functor_)(mt1, mt2, mt3); return true; }
+    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4) override{ (*this->functor_)(mt1, mt2, mt3, mt4); return true; }
+    virtual bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5) override{ (*this->functor_)(mt1, mt2, mt3, mt4, mt5); return true; }
 
   private:
@@ -142,7 +142,7 @@
     { }
 
-    inline bool call(uint32_t objectID)
-    {
-      if ( Synchronisable::getSynchronisable(objectID)!=0 )
+    virtual inline bool call(uint32_t objectID) override
+    {
+      if ( Synchronisable::getSynchronisable(objectID)!=nullptr )
       {
         (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)));
@@ -152,7 +152,7 @@
         return false;
     }
-    inline bool call(uint32_t objectID, const MultiType& mt1)
-    {
-      if ( Synchronisable::getSynchronisable(objectID)!=0 )
+    virtual inline bool call(uint32_t objectID, const MultiType& mt1) override
+    {
+      if ( Synchronisable::getSynchronisable(objectID)!=nullptr )
       {
         (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1);
@@ -162,7 +162,7 @@
         return false;
     }
-    inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2)
-    {
-      if ( Synchronisable::getSynchronisable(objectID)!=0 )
+    virtual inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2) override
+    {
+      if ( Synchronisable::getSynchronisable(objectID)!=nullptr )
       {
         (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2);
@@ -172,7 +172,7 @@
         return false;
     }
-    inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3)
-    {
-      if ( Synchronisable::getSynchronisable(objectID)!=0 )
+    virtual inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3) override
+    {
+      if ( Synchronisable::getSynchronisable(objectID)!=nullptr )
       {
         (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3);
@@ -182,7 +182,7 @@
         return false;
     }
-    inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4)
-    {
-      if ( Synchronisable::getSynchronisable(objectID)!=0 )
+    virtual inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4) override
+    {
+      if ( Synchronisable::getSynchronisable(objectID)!=nullptr )
       {
         (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4);
@@ -192,7 +192,7 @@
         return false;
     }
-    inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5)
-    {
-      if ( Synchronisable::getSynchronisable(objectID)!=0 )
+    virtual inline bool call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5) override
+    {
+      if ( Synchronisable::getSynchronisable(objectID)!=nullptr )
       {
         (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4, mt5);
Index: code/trunk/src/libraries/network/NetworkFunctionIncludes.h
===================================================================
--- code/trunk/src/libraries/network/NetworkFunctionIncludes.h	(revision 11056)
+++ code/trunk/src/libraries/network/NetworkFunctionIncludes.h	(revision 11071)
@@ -33,5 +33,4 @@
 
 #include <boost/preprocessor/cat.hpp>
-#include <boost/static_assert.hpp>
 
 #include "NetworkFunction.h"
@@ -57,6 +56,6 @@
             ~StaticallyInitializedNetworkFunction() { delete function_; }
 
-            virtual void load();
-            virtual void unload();
+            virtual void load() override;
+            virtual void unload() override;
 
             inline NetworkFunctionBase& getFunction()
@@ -72,5 +71,5 @@
     inline NetworkFunctionBase* registerStaticNetworkFunctionFct(PT ptr, const std::string& name)
     {
-        BOOST_STATIC_ASSERT(sizeof(PT) <= sizeof(NetworkFunctionPointer)); // if this fails your compiler uses bigger pointers for static functions than defined above
+        static_assert(sizeof(PT) <= sizeof(NetworkFunctionPointer), "check pointer size"); // if this fails your compiler uses bigger pointers for static functions than defined above
         NetworkFunctionPointer destptr;
         copyPtr(ptr, destptr);
@@ -81,5 +80,5 @@
     inline NetworkFunctionBase* registerMemberNetworkFunctionFct(PT ptr, const std::string& name)
     {
-        BOOST_STATIC_ASSERT(sizeof(PT) <= sizeof(NetworkFunctionPointer)); // if this fails your compiler uses bigger pointers for a specific kind of member functions than defined above
+        static_assert(sizeof(PT) <= sizeof(NetworkFunctionPointer), "check pointer size"); // if this fails your compiler uses bigger pointers for a specific kind of member functions than defined above
         NetworkFunctionPointer destptr;
         copyPtr(ptr, destptr);
Index: code/trunk/src/libraries/network/NetworkFunctionManager.cc
===================================================================
--- code/trunk/src/libraries/network/NetworkFunctionManager.cc	(revision 11056)
+++ code/trunk/src/libraries/network/NetworkFunctionManager.cc	(revision 11071)
@@ -32,5 +32,5 @@
 namespace orxonox
 {
-    NetworkFunctionManager* NetworkFunctionManager::singletonPtr_s = 0;
+    NetworkFunctionManager* NetworkFunctionManager::singletonPtr_s = nullptr;
 
     void NetworkFunctionManager::registerFunction(NetworkFunctionBase* function)
@@ -71,5 +71,5 @@
             return it->second;
         else
-            return NULL;
+            return nullptr;
     }
 
Index: code/trunk/src/libraries/network/NetworkPrereqs.h
===================================================================
--- code/trunk/src/libraries/network/NetworkPrereqs.h	(revision 11056)
+++ code/trunk/src/libraries/network/NetworkPrereqs.h	(revision 11071)
@@ -67,14 +67,14 @@
 namespace orxonox
 {
-  static const unsigned int GAMESTATEID_INITIAL       = static_cast<unsigned int>(-1);
+  static constexpr unsigned int GAMESTATEID_INITIAL       = static_cast<unsigned int>(-1);
   extern const char* LAN_DISCOVERY_MESSAGE;
   extern const char* LAN_DISCOVERY_ACK;
-  static const unsigned int LAN_DISCOVERY_PORT          = 55558;
-  static const unsigned int NETWORK_PEER_ID_SERVER      = 0;
-  static const unsigned int NETWORK_PEER_ID_BROADCAST   = static_cast<unsigned int>(-1);
-  static const unsigned int NETWORK_PEER_ID_UNKNOWN     = static_cast<unsigned int>(-2);
-  static const unsigned int NETWORK_CHANNEL_DEFAULT     = 0;
-  static const unsigned int NETWORK_CHANNEL_UNRELIABLE  = 1;
-  static const unsigned int NETWORK_CHANNEL_COUNT       = 2;
+  static constexpr unsigned int LAN_DISCOVERY_PORT          = 55558;
+  static constexpr unsigned int NETWORK_PEER_ID_SERVER      = 0;
+  static constexpr unsigned int NETWORK_PEER_ID_BROADCAST   = static_cast<unsigned int>(-1);
+  static constexpr unsigned int NETWORK_PEER_ID_UNKNOWN     = static_cast<unsigned int>(-2);
+  static constexpr unsigned int NETWORK_CHANNEL_DEFAULT     = 0;
+  static constexpr unsigned int NETWORK_CHANNEL_UNRELIABLE  = 1;
+  static constexpr unsigned int NETWORK_CHANNEL_COUNT       = 2;
 }
 
@@ -89,10 +89,7 @@
     namespace PacketFlag
     {
-      enum Value
-      {
-        Reliable    = 1,
-        Unsequenced = 2,
-        NoAllocate  = 4
-      };
+      static constexpr uint32_t Reliable    = 1;
+      static constexpr uint32_t Unsequenced = 2;
+      static constexpr uint32_t NoAllocate  = 4;
     }
   }
@@ -101,5 +98,5 @@
   {
     typedef int Type;
-    static const Type NETWORK_FUNCTION = 6;
+    static constexpr Type NETWORK_FUNCTION = 6;
   }
 }
Index: code/trunk/src/libraries/network/NetworkStaticInitializationHandler.h
===================================================================
--- code/trunk/src/libraries/network/NetworkStaticInitializationHandler.h	(revision 11056)
+++ code/trunk/src/libraries/network/NetworkStaticInitializationHandler.h	(revision 11071)
@@ -39,9 +39,9 @@
     {
         public:
-            virtual void setupHandler();
-            virtual void shutdownHandler();
+            virtual void setupHandler() override;
+            virtual void shutdownHandler() override;
 
-            virtual void loadModule(ModuleInstance* module);
-            virtual void unloadModule(ModuleInstance* module);
+            virtual void loadModule(ModuleInstance* module) override;
+            virtual void unloadModule(ModuleInstance* module) override;
     };
 }
Index: code/trunk/src/libraries/network/PeerList.cc
===================================================================
--- code/trunk/src/libraries/network/PeerList.cc	(revision 11056)
+++ code/trunk/src/libraries/network/PeerList.cc	(revision 11071)
@@ -41,5 +41,5 @@
   PeerList::addPeer( ENetPeer *toadd )
   { /* error correction */
-    if( toadd == NULL )
+    if( toadd == nullptr )
     { orxout(internal_error, context::master_server) << "PeerList::addPeer: empty peer given." << endl;
       return -1;
@@ -65,12 +65,10 @@
   bool
   PeerList::remPeerByAddr( ENetAddress addr )
-  { /* get an iterator */
-    std::list<ENetPeer *>::iterator i;
-
+  {
     /* loop through list elements */
-    for( i = peerlist.begin(); i != peerlist.end(); ++i )
-      if( !sub_compAddr((*i)->address, addr ) )
+    for( ENetPeer* peer : peerlist )
+      if( !sub_compAddr(peer->address, addr ) )
       { /* found this name, remove and quit */
-        this->peerlist.remove( *i );
+        this->peerlist.remove( peer );
         return true;
       }
@@ -82,15 +80,13 @@
   ENetPeer *
   PeerList::findPeerByAddr( ENetAddress addr )
-  { /* get an iterator */
-    std::list<ENetPeer *>::iterator i;
-
+  {
     /* loop through list elements */
-    for( i = peerlist.begin(); i != peerlist.end(); ++i )
-      if( !sub_compAddr((*i)->address, addr ) )
+    for( ENetPeer* peer : peerlist )
+      if( !sub_compAddr(peer->address, addr ) )
         /* found this name, remove and quit */
-        return *i;
+        return peer;
 
     /* not found */
-    return NULL;
+    return nullptr;
   }
 
Index: code/trunk/src/libraries/network/Server.cc
===================================================================
--- code/trunk/src/libraries/network/Server.cc	(revision 11056)
+++ code/trunk/src/libraries/network/Server.cc	(revision 11071)
@@ -194,5 +194,5 @@
   void Server::printRTT()
   {
-//     for( ClientInformation* temp=ClientInformation::getBegin(); temp!=0; temp=temp->next() )
+//     for( ClientInformation* temp=ClientInformation::getBegin(); temp!=nullptr; temp=temp->next() )
 //       orxout(message) << "Round trip time to client with ID: " << temp->getID() << " is " << temp->getRTT() << " ms" << endl;
   }
@@ -232,8 +232,7 @@
   {
     std::vector<packet::Gamestate*> gamestates = GamestateManager::getGamestates();
-    std::vector<packet::Gamestate*>::iterator it;
-    for( it = gamestates.begin(); it != gamestates.end(); ++it )
+    for( packet::Gamestate* gamestate : gamestates )
     {
-      (*it)->send(static_cast<Host*>(this));
+      gamestate->send(static_cast<Host*>(this));
     }
     return true;
@@ -244,5 +243,5 @@
   {
 //     ClientInformation *temp = ClientInformation::getBegin();
-//     if( temp == NULL )
+//     if( temp == nullptr )
       //no client connected
     if( this->clientIDs_.size()==0 )
@@ -255,5 +254,5 @@
     }
 //     orxout(verbose, context::network) << "sending DeleteObjects" << endl;
-//     while(temp != NULL){
+//     while(temp != nullptr){
 //       if( !(temp->getSynched()) )
 //       {
@@ -434,7 +433,6 @@
       return true;
 
-    std::vector<uint32_t>::iterator it;
-    for( it=this->clientIDs_.begin(); it!=this->clientIDs_.end(); ++it )
-      if( *it == targetID )
+    for( uint32_t id : this->clientIDs_ )
+      if( id == targetID )
         return true;
 
Index: code/trunk/src/libraries/network/Server.h
===================================================================
--- code/trunk/src/libraries/network/Server.h	(revision 11056)
+++ code/trunk/src/libraries/network/Server.h	(revision 11071)
@@ -61,9 +61,9 @@
     void open();
     void close();
-    void queuePacket(ENetPacket *packet, int clientID, uint8_t channelID);
-    virtual bool sendPacket( packet::Packet* packet ){ return packet->send( static_cast<Host*>(this) ); }
+    virtual void queuePacket(ENetPacket *packet, int clientID, uint8_t channelID) override;
+    virtual bool sendPacket( packet::Packet* packet ) override{ return packet->send( static_cast<Host*>(this) ); }
     void update(const Clock& time);
     unsigned int getRTT(unsigned int clientID);
-    virtual void printRTT();
+    virtual void printRTT() override;
     float getPacketLoss(unsigned int clientID);
     int getClientCount() { return this->clientIDs_.size();}
@@ -73,10 +73,10 @@
     void updateGamestate();
   private:
-    virtual bool isServer_(){return true;}
+    virtual bool isServer_() override{return true;}
     unsigned int playerID(){return 0;}
 
-    void addPeer(uint32_t peerID);
-    void removePeer(uint32_t peerID);
-    void processPacket(packet::Packet* packet);
+    virtual void addPeer(uint32_t peerID) override;
+    virtual void removePeer(uint32_t peerID) override;
+    virtual void processPacket(packet::Packet* packet) override;
 
     bool createClient(int clientID);
@@ -85,6 +85,6 @@
     bool sendObjectDeletes();
     bool isValidTarget(unsigned int targetID);
-    virtual void doSendChat(const std::string& message, unsigned int sourceID, unsigned int targetID);
-    virtual void doReceiveChat(const std::string& message, unsigned int sourceID, unsigned int targetID);
+    virtual void doSendChat(const std::string& message, unsigned int sourceID, unsigned int targetID) override;
+    virtual void doReceiveChat(const std::string& message, unsigned int sourceID, unsigned int targetID) override;
     void syncClassid(unsigned int clientID);
 
Index: code/trunk/src/libraries/network/ServerConnection.cc
===================================================================
--- code/trunk/src/libraries/network/ServerConnection.cc	(revision 11056)
+++ code/trunk/src/libraries/network/ServerConnection.cc	(revision 11071)
@@ -73,7 +73,7 @@
     this->host_ = enet_host_create(this->bindAddress_, NETWORK_MAX_CONNECTIONS, NETWORK_CHANNEL_COUNT, 0, 0);
     
-    if ( this->host_ == NULL )
+    if ( this->host_ == nullptr )
     {
-        orxout(internal_error, context::network) << "ServerConnection: host_ == NULL" << endl;
+        orxout(internal_error, context::network) << "ServerConnection: host_ == nullptr" << endl;
         return false;
     }
Index: code/trunk/src/libraries/network/TrafficControl.cc
===================================================================
--- code/trunk/src/libraries/network/TrafficControl.cc	(revision 11056)
+++ code/trunk/src/libraries/network/TrafficControl.cc	(revision 11071)
@@ -30,5 +30,5 @@
 
 #include <cassert>
-#include <boost/bind.hpp>
+#include <functional>
 
 #include "core/CoreIncludes.h"
@@ -38,5 +38,6 @@
 namespace orxonox {
 
-  static const unsigned int SCHED_PRIORITY_OFFSET = static_cast<unsigned int>(-1);
+  static constexpr unsigned int SCHED_PRIORITY_OFFSET = static_cast<unsigned int>(-1);
+  namespace arg = std::placeholders;
 
   objInfo::objInfo(uint32_t ID, uint32_t creatorID, int32_t curGsID, int32_t diffGsID, uint32_t size, unsigned int prioperm, unsigned int priosched)
@@ -64,5 +65,5 @@
 *Initializing protected members
 */
-    TrafficControl *TrafficControl::instance_=0;
+    TrafficControl *TrafficControl::instance_=nullptr;
 
     /**
@@ -72,5 +73,5 @@
     {
     RegisterObject(TrafficControl);
-      assert(instance_==0);
+      assert(instance_==nullptr);
       instance_=this;
     this->setConfigValues();
@@ -78,9 +79,9 @@
 
     /**
-    * @brief Destructor: resets the instance pointer to 0
+    * @brief Destructor: resets the instance pointer to nullptr
     */
     TrafficControl::~TrafficControl()
     {
-      instance_=0;
+      instance_=nullptr;
     }
 
@@ -148,5 +149,5 @@
     // shortcut for maps
     std::map<unsigned int, objInfo >& objectListPerm = clientListPerm_[clientID];
-    std::map<unsigned int, std::list<obj> >& objectListTemp = clientListTemp_[clientID];
+    std::map<unsigned int, std::list<obj>>& objectListTemp = clientListTemp_[clientID];
 
     for(itvec = objectListTemp[gamestateID].begin(); itvec != objectListTemp[gamestateID].end(); itvec++)
@@ -180,5 +181,5 @@
     void TrafficControl::insertinClientListPerm(unsigned int clientID, obj objinf)
     {
-      std::map<unsigned int,std::map<unsigned int, objInfo> >::iterator itperm;//iterator clientListPerm over clientIDs
+      std::map<unsigned int,std::map<unsigned int, objInfo>>::iterator itperm;//iterator clientListPerm over clientIDs
     unsigned int gsid=GAMESTATEID_INITIAL, gsdiff=currentGamestateID, prioperm=Synchronisable::getSynchronisable(objinf.objID)->getPriority(), priomom=0;
     clientListPerm_[clientID][objinf.objID] = objInfo(objinf.objID, objinf.objCreatorID,gsid,gsdiff, objinf.objSize,prioperm,priomom);
@@ -258,9 +259,9 @@
 
       //sort copied list according to priorities
-      // use boost bind here because we need to pass a memberfunction to stl sort
-//       sort( list.begin(), list.end(), boost::bind(&TrafficControl::prioritySort, this, clientID, _1, _2) );
-      list.sort( boost::bind(&TrafficControl::prioritySort, this, clientID, _1, _2) );
-
-//       list.sort(boost::bind(&TrafficControl::prioritySort, this, clientID, _1, _2) );
+      // use std::bind here because we need to pass a memberfunction to stl sort
+//       sort( list.begin(), list.end(), std::bind(&TrafficControl::prioritySort, this, clientID, arg::_1, arg::_2) );
+      list.sort( std::bind(&TrafficControl::prioritySort, this, clientID, arg::_1, arg::_2) );
+
+//       list.sort(std::bind(&TrafficControl::prioritySort, this, clientID, arg::_1, arg::_2) );
 
       //now we check, that the creator of an object always exists on a client
@@ -275,6 +276,6 @@
       cut(list, targetSize);
       //now sort again after objDataOffset
-//       sort(list.begin(), list.end(), boost::bind(&TrafficControl::dataSort, this, _1, _2) );
-      list.sort( boost::bind(&TrafficControl::dataSort, this, _1, _2) );
+//       sort(list.begin(), list.end(), std::bind(&TrafficControl::dataSort, this, arg::_1, arg::_2) );
+      list.sort( std::bind(&TrafficControl::dataSort, this, arg::_1, arg::_2) );
 
       //diese Funktion updateClientList muss noch gemacht werden
Index: code/trunk/src/libraries/network/TrafficControl.h
===================================================================
--- code/trunk/src/libraries/network/TrafficControl.h	(revision 11056)
+++ code/trunk/src/libraries/network/TrafficControl.h	(revision 11071)
@@ -82,5 +82,5 @@
     *permanent client list: contains client ids, object ids and objectInfos (in this order)
     */
-    std::map<unsigned int, std::map<unsigned int, objInfo > > clientListPerm_;
+    std::map<unsigned int, std::map<unsigned int, objInfo >> clientListPerm_;
     //has to be created with constructor and then needs to be updated by evaluateList().
 
@@ -88,5 +88,5 @@
     *temporary client list: contains client ids, gamestate ids and object ids (in this order)
     */
-    std::map<unsigned int, std::map<unsigned int, std::list<obj> > > clientListTemp_;
+    std::map<unsigned int, std::map<unsigned int, std::list<obj>>> clientListTemp_;
 
     /**updateReferenceList
@@ -109,6 +109,6 @@
 
     //ClientConnectionListener functions
-    virtual void clientConnected(unsigned int clientID){};
-    virtual void clientDisconnected(unsigned int clientID);
+    virtual void clientConnected(unsigned int clientID) override{};
+    virtual void clientDisconnected(unsigned int clientID) override;
 
 
Index: code/trunk/src/libraries/network/packet/Acknowledgement.cc
===================================================================
--- code/trunk/src/libraries/network/packet/Acknowledgement.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Acknowledgement.cc	(revision 11071)
@@ -38,5 +38,5 @@
 #define PACKET_FLAGS_ACK    0
 #define _PACKETID           0
-#define _ACKID              _PACKETID + sizeof(packet::Type::Value)
+#define _ACKID              _PACKETID + sizeof(packet::Type)
 
 Acknowledgement::Acknowledgement( unsigned int id, unsigned int peerID )
@@ -45,5 +45,5 @@
   flags_ = flags_ | PACKET_FLAGS_ACK;
   data_=new uint8_t[ getSize() ];
-  *(Type::Value *)(data_ + _PACKETID ) = Type::Acknowledgement;
+  *(Type *)(data_ + _PACKETID ) = Type::Acknowledgement;
   *(uint32_t *)(data_ + _ACKID ) = id;
   peerID_=peerID;
Index: code/trunk/src/libraries/network/packet/Acknowledgement.h
===================================================================
--- code/trunk/src/libraries/network/packet/Acknowledgement.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Acknowledgement.h	(revision 11071)
@@ -46,6 +46,6 @@
   ~Acknowledgement();
 
-  inline unsigned int getSize() const;
-  virtual bool process(orxonox::Host* host);
+  virtual inline unsigned int getSize() const override;
+  virtual bool process(orxonox::Host* host) override;
 
   unsigned int getAckID();
Index: code/trunk/src/libraries/network/packet/Chat.cc
===================================================================
--- code/trunk/src/libraries/network/packet/Chat.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Chat.cc	(revision 11071)
@@ -40,5 +40,5 @@
 /* Some lengths */
 #define _PACKETID         0
-#define _SOURCEID         _PACKETID + sizeof(Type::Value)
+#define _SOURCEID         _PACKETID + sizeof(Type)
 #define _TARGETID         _SOURCEID + sizeof(uint32_t)
 #define _MESSAGELENGTH    _TARGETID + sizeof(uint32_t)
@@ -57,5 +57,5 @@
   data_=new unsigned char[ getSize() ];
 
-  *(Type::Value *)(data_ + _PACKETID ) = Type::Chat;
+  *(Type *)(data_ + _PACKETID ) = Type::Chat;
   *(unsigned int *)(data_ + _SOURCEID ) = sourceID;
   *(unsigned int *)(data_ + _TARGETID ) = targetID;
Index: code/trunk/src/libraries/network/packet/Chat.h
===================================================================
--- code/trunk/src/libraries/network/packet/Chat.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Chat.h	(revision 11071)
@@ -49,8 +49,8 @@
 
   /* get size of packet */
-  inline unsigned int getSize() const;
+  virtual inline unsigned int getSize() const override;
 
   /* process chat message packet and remove it afterwards */
-  virtual bool process(orxonox::Host* host);
+  virtual bool process(orxonox::Host* host) override;
 
   /* Get the length of the message (not the full size of the packet) */
Index: code/trunk/src/libraries/network/packet/ClassID.cc
===================================================================
--- code/trunk/src/libraries/network/packet/ClassID.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/ClassID.cc	(revision 11071)
@@ -52,11 +52,10 @@
   uint32_t network_id;
   flags_ = flags_ | PACKET_FLAGS_CLASSID;
-  std::queue<std::pair<uint32_t, std::string> > tempQueue;
+  std::queue<std::pair<uint32_t, std::string>> tempQueue;
 
   //calculate total needed size (for all strings and integers)
-  std::map<std::string, Identifier*>::const_iterator it = IdentifierManager::getInstance().getIdentifierByStringMap().begin();
-  for(;it != IdentifierManager::getInstance().getIdentifierByStringMap().end();++it){
-    id = it->second;
-    if(id == NULL || !id->hasFactory())
+  for(const auto& mapEntry : IdentifierManager::getInstance().getIdentifierByStringMap()){
+    id = mapEntry.second;
+    if(id == nullptr || !id->hasFactory())
       continue;
     const std::string& classname = id->getName();
@@ -71,5 +70,5 @@
   //set the appropriate packet id
   assert(this->data_);
-  *(Type::Value *)(this->data_ + _PACKETID ) = Type::ClassID;
+  *(Type *)(this->data_ + _PACKETID ) = Type::ClassID;
 
   uint8_t *temp=data_+sizeof(uint32_t);
@@ -144,5 +143,5 @@
     id=ClassByString( std::string((const char*)classname) );
     orxout(internal_info, context::packets) << "processing classid: " << networkID << " name: " << classname << " id: " << id << endl;
-    if(id==NULL){
+    if(id==nullptr){
       orxout(user_error, context::packets) << "Received a bad classname" << endl;
       abort();
Index: code/trunk/src/libraries/network/packet/ClassID.h
===================================================================
--- code/trunk/src/libraries/network/packet/ClassID.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/ClassID.h	(revision 11071)
@@ -47,6 +47,6 @@
   ~ClassID();
 
-  uint32_t getSize() const;
-  virtual bool process(orxonox::Host* host);
+  virtual uint32_t getSize() const override;
+  virtual bool process(orxonox::Host* host) override;
 
 private:
Index: code/trunk/src/libraries/network/packet/DeleteObjects.cc
===================================================================
--- code/trunk/src/libraries/network/packet/DeleteObjects.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/DeleteObjects.cc	(revision 11071)
@@ -39,5 +39,5 @@
 #define PACKET_FLAG_DELETE  PacketFlag::Reliable
 #define _PACKETID           0
-#define _QUANTITY           _PACKETID + sizeof(Type::Value)
+#define _QUANTITY           _PACKETID + sizeof(Type)
 #define _OBJECTIDS          _QUANTITY + sizeof(uint32_t)
 
@@ -63,9 +63,9 @@
     return false;
   orxout(verbose, context::packets) << "sending DeleteObjects: ";
-  unsigned int size = sizeof(Type::Value) + sizeof(uint32_t)*(number+1);
+  unsigned int size = sizeof(Type) + sizeof(uint32_t)*(number+1);
   data_ = new uint8_t[size];
   uint8_t *tdata = data_;
-  *reinterpret_cast<Type::Value*>(tdata) = Type::DeleteObjects;
-  tdata += sizeof(Type::Value);
+  *reinterpret_cast<Type*>(tdata) = Type::DeleteObjects;
+  tdata += sizeof(Type);
   *(uint32_t *)tdata = number;
   tdata += sizeof(uint32_t);
Index: code/trunk/src/libraries/network/packet/DeleteObjects.h
===================================================================
--- code/trunk/src/libraries/network/packet/DeleteObjects.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/DeleteObjects.h	(revision 11071)
@@ -48,6 +48,6 @@
   bool fetchIDs();
 
-  inline unsigned int getSize() const;
-  virtual bool process(orxonox::Host* host);
+  virtual inline unsigned int getSize() const override;
+  virtual bool process(orxonox::Host* host) override;
 
 private:
Index: code/trunk/src/libraries/network/packet/FunctionCalls.cc
===================================================================
--- code/trunk/src/libraries/network/packet/FunctionCalls.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/FunctionCalls.cc	(revision 11071)
@@ -96,5 +96,5 @@
   assert(this->functionCalls_.size());
   data_=new uint8_t[ currentSize_ ];
-  *(Type::Value *)(data_ + _PACKETID ) = Type::FunctionCalls; // Set the Packet ID
+  *(Type *)(data_ + _PACKETID ) = Type::FunctionCalls; // Set the Packet ID
   *(uint32_t*)(data_+sizeof(uint32_t)) = this->functionCalls_.size(); // set nrOfCalls
   *(uint32_t*)(data_+2*sizeof(uint32_t)) = this->minGamestateID_; // set minGamestateID_
Index: code/trunk/src/libraries/network/packet/FunctionCalls.h
===================================================================
--- code/trunk/src/libraries/network/packet/FunctionCalls.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/FunctionCalls.h	(revision 11071)
@@ -52,10 +52,10 @@
   ~FunctionCalls();
 
-  inline unsigned int getSize() const
+  virtual inline unsigned int getSize() const override
     { assert(!this->isDataENetAllocated()); return currentSize_; }
-  virtual bool process(orxonox::Host* host);
+  virtual bool process(orxonox::Host* host) override;
 
   void addCall( uint32_t networkID, uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5);
-  virtual bool send(orxonox::Host* host);
+  virtual bool send(orxonox::Host* host) override;
 private:
   std::queue<orxonox::FunctionCall> functionCalls_;
Index: code/trunk/src/libraries/network/packet/FunctionIDs.cc
===================================================================
--- code/trunk/src/libraries/network/packet/FunctionIDs.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/FunctionIDs.cc	(revision 11071)
@@ -53,5 +53,5 @@
   uint32_t networkID;
   flags_ = flags_ | PACKET_FLAGS_FUNCTIONIDS;
-  std::queue<std::pair<uint32_t, std::string> > tempQueue;
+  std::queue<std::pair<uint32_t, std::string>> tempQueue;
 
   //calculate total needed size (for all strings and integers)
@@ -71,5 +71,5 @@
   //set the appropriate packet id
   assert(this->data_);
-  *(Type::Value *)(this->data_ + _PACKETID ) = Type::FunctionIDs;
+  *(Type *)(this->data_ + _PACKETID ) = Type::FunctionIDs;
 
   uint8_t *temp=data_+sizeof(uint32_t);
Index: code/trunk/src/libraries/network/packet/FunctionIDs.h
===================================================================
--- code/trunk/src/libraries/network/packet/FunctionIDs.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/FunctionIDs.h	(revision 11071)
@@ -47,6 +47,6 @@
   ~FunctionIDs();
 
-  virtual uint32_t getSize() const;
-  virtual bool process(orxonox::Host* host);
+  virtual uint32_t getSize() const override;
+  virtual bool process(orxonox::Host* host) override;
 
 private:
Index: code/trunk/src/libraries/network/packet/Gamestate.cc
===================================================================
--- code/trunk/src/libraries/network/packet/Gamestate.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Gamestate.cc	(revision 11071)
@@ -106,5 +106,5 @@
 {
   uint32_t tempsize=0, currentsize=0;
-  assert(data_==0);
+  assert(data_==nullptr);
   uint32_t size = calcGamestateSize(id, mode);
 
@@ -126,5 +126,5 @@
   mem += GamestateHeader::getSize();
   ObjectList<Synchronisable>::iterator it;
-  for(it = ObjectList<Synchronisable>::begin(); it; ++it)
+  for(it = ObjectList<Synchronisable>().begin(); it; ++it)
   {
 
@@ -133,5 +133,5 @@
     tempsize = it->getData(mem, this->sizes_, id, mode);
     if ( tempsize != 0 )
-      dataVector_.push_back( obj(it->getObjectID(), it->getContextID(), tempsize, mem-data_) );
+      dataVector_.emplace_back(it->getObjectID(), it->getContextID(), tempsize, mem-data_);
 
 #ifndef NDEBUG
@@ -213,14 +213,13 @@
   {
     std::list<uint32_t> v1;
-    ObjectList<Synchronisable>::iterator it;
-    for (it = ObjectList<Synchronisable>::begin(); it != ObjectList<Synchronisable>::end(); ++it)
-    {
-      if (it->getObjectID() == OBJECTID_UNKNOWN)
-      {
-        if (it->objectMode_ != 0x0)
+    for (Synchronisable* synchronisable : ObjectList<Synchronisable>())
+    {
+      if (synchronisable->getObjectID() == OBJECTID_UNKNOWN)
+      {
+        if (synchronisable->objectMode_ != 0x0)
         {
           orxout(user_error, context::packets) << "Found object with OBJECTID_UNKNOWN on the client with objectMode != 0x0!" << endl;
           orxout(user_error, context::packets) << "Possible reason for this error: Client created a synchronized object without the Server's approval." << endl;
-          orxout(user_error, context::packets) << "Objects class: " << it->getIdentifier()->getName() << endl;
+          orxout(user_error, context::packets) << "Objects class: " << synchronisable->getIdentifier()->getName() << endl;
           assert(false);
         }
@@ -228,8 +227,7 @@
       else
       {
-        std::list<uint32_t>::iterator it2;
-        for (it2 = v1.begin(); it2 != v1.end(); ++it2)
+        for (uint32_t id : v1)
         {
-          if (it->getObjectID() == *it2)
+          if (synchronisable->getObjectID() == id)
           {
             orxout(user_error, context::packets) << "Found duplicate objectIDs on the client!" << endl
@@ -239,5 +237,5 @@
           }
         }
-        v1.push_back(it->getObjectID());
+        v1.push_back(synchronisable->getObjectID());
       }
     }
@@ -608,5 +606,5 @@
 
   if(dest_length==0)
-    return NULL;
+    return nullptr;
 
   uint8_t *ndata = new uint8_t[dest_length*sizeof(uint8_t)+GamestateHeader::getSize()];
@@ -645,5 +643,5 @@
 
   if(dest_length==0)
-    return NULL;
+    return nullptr;
 
   uint8_t *ndata = new uint8_t[dest_length*sizeof(uint8_t)+GamestateHeader::getSize()];
@@ -762,10 +760,8 @@
   uint32_t size = 0;
   uint32_t nrOfVariables = 0;
-    // get the start of the Synchronisable list
-  ObjectList<Synchronisable>::iterator it;
     // get total size of gamestate
-  for(it = ObjectList<Synchronisable>::begin(); it; ++it){
-    size+=it->getSize(id, mode); // size of the actual data of the synchronisable
-    nrOfVariables += it->getNrOfVariables();
+  for(Synchronisable* synchronisable : ObjectList<Synchronisable>()){
+    size+=synchronisable->getSize(id, mode); // size of the actual data of the synchronisable
+    nrOfVariables += synchronisable->getNrOfVariables();
   }
 //   orxout() << "allocating " << nrOfVariables << " ints" << endl;
Index: code/trunk/src/libraries/network/packet/Gamestate.h
===================================================================
--- code/trunk/src/libraries/network/packet/Gamestate.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Gamestate.h	(revision 11071)
@@ -48,17 +48,17 @@
 {
     
-static const uint8_t GAMESTATE_MODE_SERVER = 0x1;
-static const uint8_t GAMESTATE_MODE_CLIENT = 0x2;
+static constexpr uint8_t GAMESTATE_MODE_SERVER = 0x1;
+static constexpr uint8_t GAMESTATE_MODE_CLIENT = 0x2;
 
 class _NetworkExport GamestateHeader
 {
   public:
-    GamestateHeader(){ data_=0; }
+    GamestateHeader(){ data_=nullptr; }
     GamestateHeader(uint8_t* data)
-      { assert(data); data_ = data; *(uint32_t*)data_ = Type::Gamestate; }
+      { assert(data); data_ = data; *(Type*)data_ = Type::Gamestate; }
     /*GamestateHeader(uint8_t* data, GamestateHeader* h)
       { assert(data); data_=data; memcpy(data_, h->data_, getSize()); }*/
     void setData(uint8_t* data)
-      { assert(data); data_ = data; *(uint32_t*)data_ = Type::Gamestate; }
+      { assert(data); data_ = data; *(Type*)data_ = Type::Gamestate; }
     static inline uint32_t getSize()
       { return 21; }
@@ -138,6 +138,6 @@
 //     void rawDiff( uint8_t* newdata, uint8_t* data, uint8_t* basedata, uint32_t datalength, uint32_t baselength);
 //     inline uint32_t findObject( const SynchronisableHeader& header, uint8_t* mem, uint32_t dataLength, uint32_t startPosition = 0 );
-    virtual uint32_t getSize() const;
-    virtual bool process(orxonox::Host* host);
+    virtual uint32_t getSize() const override;
+    virtual bool process(orxonox::Host* host) override;
     uint32_t calcGamestateSize(uint32_t id, uint8_t mode=0x0);
 //     inline void diffObject( uint8_t*& newData, uint8_t*& origData, uint8_t*& baseData, SynchronisableHeader& objectHeader, std::vector<uint32_t>::iterator& sizes );
Index: code/trunk/src/libraries/network/packet/Packet.cc
===================================================================
--- code/trunk/src/libraries/network/packet/Packet.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Packet.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #define WIN32_LEAN_AND_MEAN
 #include <enet/enet.h>
-#include <boost/static_assert.hpp>
 #include <boost/thread/mutex.hpp>
 
@@ -54,7 +53,7 @@
 
 // Make sure we assume the right values
-BOOST_STATIC_ASSERT(static_cast<int>(PacketFlag::Reliable)    == static_cast<int>(ENET_PACKET_FLAG_RELIABLE));
-BOOST_STATIC_ASSERT(static_cast<int>(PacketFlag::Unsequenced) == static_cast<int>(ENET_PACKET_FLAG_UNSEQUENCED));
-BOOST_STATIC_ASSERT(static_cast<int>(PacketFlag::NoAllocate)  == static_cast<int>(ENET_PACKET_FLAG_NO_ALLOCATE));
+static_assert(static_cast<int>(PacketFlag::Reliable)    == static_cast<int>(ENET_PACKET_FLAG_RELIABLE),    "check enum");
+static_assert(static_cast<int>(PacketFlag::Unsequenced) == static_cast<int>(ENET_PACKET_FLAG_UNSEQUENCED), "check enum");
+static_assert(static_cast<int>(PacketFlag::NoAllocate)  == static_cast<int>(ENET_PACKET_FLAG_NO_ALLOCATE), "check enum");
 
 #define PACKET_FLAG_DEFAULT PacketFlag::NoAllocate
@@ -69,6 +68,6 @@
   packetDirection_ = Direction::Outgoing;
   peerID_=0;
-  data_=0;
-  enetPacket_=0;
+  data_=nullptr;
+  enetPacket_=nullptr;
   bDataENetAllocated_ = false;
 }
@@ -80,5 +79,5 @@
   peerID_=peerID;
   data_=data;
-  enetPacket_=0;
+  enetPacket_=nullptr;
   bDataENetAllocated_ = false;
 }
@@ -95,5 +94,5 @@
     memcpy(data_, p.data_, p.getSize());
   }else
-    data_=0;
+    data_=nullptr;
   bDataENetAllocated_ = p.bDataENetAllocated_;
 }
@@ -122,5 +121,5 @@
   // Destroy the ENetPacket if necessary.
   // Note: For the case ENet used the callback to destroy the packet, we have already set
-  // enetPacket_ to NULL to avoid destroying it again.
+  // enetPacket_ to nullptr to avoid destroying it again.
   if (this->enetPacket_)
   {
@@ -158,5 +157,5 @@
   }
 #ifndef NDEBUG
-  switch( *(Type::Value *)(data_ + _PACKETID) )
+  switch( *(Type *)(data_ + _PACKETID) )
   {
     case Type::Acknowledgement:
@@ -175,5 +174,5 @@
 #endif
 //  ENetPacket *temp = enetPacket_;
-//  enetPacket_ = 0; // otherwise we have a double free because enet already handles the deallocation of the packet
+//  enetPacket_ = nullptr; // otherwise we have a double free because enet already handles the deallocation of the packet
   if( this->flags_ & PacketFlag::Reliable )
     host->addPacket( enetPacket_, peerID_, NETWORK_CHANNEL_DEFAULT);
@@ -191,7 +190,7 @@
 //   if( peerID==static_cast<unsigned int>(-2))
 //     peerID = NETWORK_PEER_ID_SERVER;
-  Packet *p = 0;
-//   orxout(verbose_ultra, context::packets) << "packet type: " << *(Type::Value *)&data[_PACKETID] << endl;
-  switch( *(Type::Value *)(data + _PACKETID) )
+  Packet *p = nullptr;
+//   orxout(verbose_ultra, context::packets) << "packet type: " << *(Type *)&data[_PACKETID] << endl;
+  switch( *(Type *)(data + _PACKETID) )
   {
     case Type::Acknowledgement:
@@ -251,5 +250,5 @@
   assert(it != packetMap_.end());
   // Make sure we don't delete it again in the destructor
-  it->second->enetPacket_ = 0;
+  it->second->enetPacket_ = nullptr;
   delete it->second;
   packetMap_.erase(it);
Index: code/trunk/src/libraries/network/packet/Packet.h
===================================================================
--- code/trunk/src/libraries/network/packet/Packet.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Packet.h	(revision 11071)
@@ -38,27 +38,21 @@
 {
 
-namespace Direction
+enum class Direction
 {
-  enum Value
-  {
-    Incoming,
-    Outgoing,
-    Bidirectional
-  };
-}
-namespace Type
+  Incoming,
+  Outgoing,
+  Bidirectional
+};
+enum class Type : uint8_t
 {
-  enum Value
-  {
-    Acknowledgement,
-    Chat,
-    ClassID,
-    DeleteObjects,
-    FunctionIDs,
-    FunctionCalls,
-    Gamestate,
-    Welcome
-  };
-}
+  Acknowledgement,
+  Chat,
+  ClassID,
+  DeleteObjects,
+  FunctionIDs,
+  FunctionCalls,
+  Gamestate,
+  Welcome
+};
 
 /**
@@ -98,5 +92,5 @@
     unsigned int peerID_;
     uint32_t requiredGamestateID_;
-    Direction::Value packetDirection_;
+    Direction packetDirection_;
     /** Pointer to the data. Be careful when deleting it because it might
         point to a location that was allocated by ENet.
Index: code/trunk/src/libraries/network/packet/ServerInformation.cc
===================================================================
--- code/trunk/src/libraries/network/packet/ServerInformation.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/ServerInformation.cc	(revision 11071)
@@ -87,10 +87,11 @@
   } // namespace packet
 
-  std::ostream& operator<<(std::ostream& out, const ENetAddress& address)
-  {
-      char addr[64];
-      if (!enet_address_get_host_ip(&address, addr, 64))
-          out << addr;
-      return out;
-  }
 } // namespace orxonox
+
+std::ostream& operator<<(std::ostream& out, const ENetAddress& address)
+{
+    char addr[64];
+    if (!enet_address_get_host_ip(&address, addr, 64))
+        out << addr;
+    return out;
+}
Index: code/trunk/src/libraries/network/packet/ServerInformation.h
===================================================================
--- code/trunk/src/libraries/network/packet/ServerInformation.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/ServerInformation.h	(revision 11071)
@@ -50,10 +50,10 @@
         void          send( ENetPeer* peer );
         void          setServerName(std::string name) { this->serverName_ = name; }
-        std::string   getServerName() { return this->serverName_; }
+        std::string   getServerName() const { return this->serverName_; }
         void          setServerIP( std::string IP ) { this->serverIP_ = IP; }
-        std::string   getServerIP() { return this->serverIP_; }
+        std::string   getServerIP() const { return this->serverIP_; }
         void          setClientNumber( int clientNumber ) { this->clientNumber_ = clientNumber; }
-        int           getClientNumber() { return this->clientNumber_; }
-        uint32_t      getServerRTT() { return this->serverRTT_; }
+        int           getClientNumber() const { return this->clientNumber_; }
+        uint32_t      getServerRTT() const { return this->serverRTT_; }
 
       private:
@@ -66,6 +66,7 @@
   }
 
-  _NetworkExport std::ostream& operator<<(std::ostream& out, const ENetAddress& address);
 }
 
+_NetworkExport std::ostream& operator<<(std::ostream& out, const ENetAddress& address);
+
 #endif // SERVERINFORMATION_H
Index: code/trunk/src/libraries/network/packet/Welcome.cc
===================================================================
--- code/trunk/src/libraries/network/packet/Welcome.cc	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Welcome.cc	(revision 11071)
@@ -41,5 +41,5 @@
 #define PACKET_FLAGS_CLASSID  PacketFlag::Reliable
 #define _PACKETID             0
-#define _CLIENTID             _PACKETID + sizeof(Type::Value)
+#define _CLIENTID             _PACKETID + sizeof(Type)
 #define _ENDIANTEST           _CLIENTID + sizeof(uint32_t)
 
@@ -51,5 +51,5 @@
   data_=new uint8_t[ getSize() ];
   assert(data_);
-  *(packet::Type::Value *)(data_ + _PACKETID ) = packet::Type::Welcome;
+  *(packet::Type *)(data_ + _PACKETID ) = packet::Type::Welcome;
   *(uint32_t *)(data_ + _CLIENTID ) = static_cast<uint32_t>(clientID);
   *(uint32_t *)(data_ + _ENDIANTEST ) = 0xFEDC4321;
@@ -70,5 +70,5 @@
 
 unsigned int Welcome::getSize() const{
-  return sizeof(packet::Type::Value) + 2*sizeof(uint32_t);
+  return sizeof(packet::Type) + 2*sizeof(uint32_t);
 }
 
Index: code/trunk/src/libraries/network/packet/Welcome.h
===================================================================
--- code/trunk/src/libraries/network/packet/Welcome.h	(revision 11056)
+++ code/trunk/src/libraries/network/packet/Welcome.h	(revision 11071)
@@ -45,7 +45,7 @@
   virtual ~Welcome();
 
-  uint8_t *getData();
-  inline unsigned int getSize() const;
-  virtual bool process(orxonox::Host* host);
+  virtual uint8_t *getData() override;
+  virtual inline unsigned int getSize() const override;
+  virtual bool process(orxonox::Host* host) override;
 
 private:
Index: code/trunk/src/libraries/network/synchronisable/NetworkCallback.h
===================================================================
--- code/trunk/src/libraries/network/synchronisable/NetworkCallback.h	(revision 11056)
+++ code/trunk/src/libraries/network/synchronisable/NetworkCallback.h	(revision 11071)
@@ -53,5 +53,5 @@
       NetworkCallback(T* object, void (T::*function) (void)) : object_(object), function_(function) {}
       virtual ~NetworkCallback() {}
-      virtual void call()
+      virtual void call() override
         { (this->object_->*function_)(); }
 
@@ -68,5 +68,5 @@
       NetworkCallbackNotify() {}
       virtual ~NetworkCallbackNotify() {}
-      virtual void call()
+      virtual void call() override
         { (this->object_->*function_)( this->oldValue_ ); }
       void setOldValue(const U& value){ this->oldValue_ = value; }
Index: code/trunk/src/libraries/network/synchronisable/Serialise.h
===================================================================
--- code/trunk/src/libraries/network/synchronisable/Serialise.h	(revision 11056)
+++ code/trunk/src/libraries/network/synchronisable/Serialise.h	(revision 11071)
@@ -90,5 +90,5 @@
     {
 //         *const_cast<typename Loki::TypeTraits<T*>::UnqualifiedType*>(&variable) = dynamic_cast<T*>(variable->getSynchronisable( *(uint32_t*)(mem) ));
-        *const_cast<typename Loki::TypeTraits<StrongPtr<T> >::UnqualifiedType*>(&variable) = orxonox_cast<T*>(T::getSynchronisable(*(uint32_t*)(mem)));
+        *const_cast<typename Loki::TypeTraits<StrongPtr<T>>::UnqualifiedType*>(&variable) = orxonox_cast<T*>(T::getSynchronisable(*(uint32_t*)(mem)));
         mem += returnSize( variable );
     }
@@ -125,5 +125,5 @@
     {
         //         *const_cast<typename Loki::TypeTraits<T*>::UnqualifiedType*>(&variable) = dynamic_cast<T*>(variable->getSynchronisable( *(uint32_t*)(mem) ));
-        *const_cast<typename Loki::TypeTraits<WeakPtr<T> >::UnqualifiedType*>(&variable) = orxonox_cast<T*>(T::getSynchronisable(*(uint32_t*)(mem)));
+        *const_cast<typename Loki::TypeTraits<WeakPtr<T>>::UnqualifiedType*>(&variable) = orxonox_cast<T*>(T::getSynchronisable(*(uint32_t*)(mem)));
         mem += returnSize( variable );
     }
Index: code/trunk/src/libraries/network/synchronisable/Synchronisable.cc
===================================================================
--- code/trunk/src/libraries/network/synchronisable/Synchronisable.cc	(revision 11056)
+++ code/trunk/src/libraries/network/synchronisable/Synchronisable.cc	(revision 11071)
@@ -88,6 +88,6 @@
     }
     // delete all Synchronisable Variables from syncList_ ( which are also in stringList_ )
-    for(std::vector<SynchronisableVariableBase*>::iterator it = syncList_.begin(); it!=syncList_.end(); it++)
-      delete (*it);
+    for(SynchronisableVariableBase* variable : syncList_)
+      delete variable;
     syncList_.clear();
     stringList_.clear();
@@ -105,9 +105,9 @@
   uint32_t Synchronisable::findContextID(Context* context)
   {
-      if (context == NULL)
+      if (context == nullptr)
           return OBJECTID_UNKNOWN;
 
       Synchronisable* synchronisableContext = orxonox_cast<Synchronisable*>(context);
-      if (synchronisableContext != NULL)
+      if (synchronisableContext != nullptr)
           return synchronisableContext->getObjectID();
       else
@@ -140,5 +140,5 @@
     {
       mem += header.getDataSize() + header.getSize();
-      return 0;
+      return nullptr;
     }
 //     assert( !header.isDiffed() );
@@ -156,5 +156,5 @@
     }
     assert(id);
-    Context* context = 0;
+    Context* context = nullptr;
     if (header.getContextID() != OBJECTID_UNKNOWN)
     {
@@ -164,5 +164,5 @@
         mem += header.getDataSize()+SynchronisableHeader::getSize(); //.TODO: this suckz.... remove size from header
         assert(0); // TODO: uncomment this if we have a clean objecthierarchy (with destruction of children of objects) ^^
-        return 0;
+        return nullptr;
       }
       else
@@ -172,5 +172,5 @@
       context = Context::getRootContext();
 
-    assert(getSynchronisable(header.getObjectID())==0);   //make sure no object with this id exists
+    assert(getSynchronisable(header.getObjectID())==nullptr);   //make sure no object with this id exists
     BaseObject *bo = orxonox_cast<BaseObject*>(id->fabricate(context));
     assert(bo);
@@ -226,5 +226,5 @@
       return it1->second;
     // if the objects not in the map it should'nt exist at all anymore
-    return NULL;
+    return nullptr;
   }
 
@@ -266,5 +266,4 @@
     assert(this->classID_==this->getIdentifier()->getNetworkID());
     assert(this->objectID_!=OBJECTID_UNKNOWN);
-    std::vector<SynchronisableVariableBase*>::iterator i;
 
     // start copy header
@@ -276,7 +275,7 @@
 //     orxout(verbose, context::network) << "objectid: " << this->objectID_ << ":";
     // copy to location
-    for(i=syncList_.begin(); i!=syncList_.end(); ++i)
-    {
-      uint32_t varsize = (*i)->getData( mem, mode );
+    for(SynchronisableVariableBase* variable : syncList_)
+    {
+      uint32_t varsize = variable->getData( mem, mode );
 //       orxout(verbose, context::network) << " " << varsize;
       tempsize += varsize;
@@ -348,9 +347,8 @@
       assert( this->getContextID() == syncHeader2.getContextID() );
       mem += SynchronisableHeader::getSize();
-      std::vector<SynchronisableVariableBase *>::iterator i;
-      for(i=syncList_.begin(); i!=syncList_.end(); ++i)
+      for(SynchronisableVariableBase* variable : syncList_)
       {
         assert( mem <= data+syncHeader2.getDataSize()+SynchronisableHeader::getSize() ); // always make sure we don't exceed the datasize in our stream
-        (*i)->putData( mem, mode, forceCallback );
+        variable->putData( mem, mode, forceCallback );
       }
       assert(mem == data+syncHeaderLight.getDataSize()+SynchronisableHeader::getSize() );
@@ -388,8 +386,7 @@
     assert( mode==state_ );
     tsize += this->dataSize_;
-    std::vector<SynchronisableVariableBase*>::iterator i;
-    for(i=stringList_.begin(); i!=stringList_.end(); ++i)
-    {
-      tsize += (*i)->getSize( mode );
+    for(SynchronisableVariableBase* variable : stringList_)
+    {
+      tsize += variable->getSize( mode );
     }
     return tsize;
Index: code/trunk/src/libraries/network/synchronisable/Synchronisable.h
===================================================================
--- code/trunk/src/libraries/network/synchronisable/Synchronisable.h	(revision 11056)
+++ code/trunk/src/libraries/network/synchronisable/Synchronisable.h	(revision 11071)
@@ -38,4 +38,5 @@
 #include <queue>
 #include <set>
+#include <type_traits>
 
 #include "util/mbool.h"
@@ -171,6 +172,6 @@
   protected:
     Synchronisable(Context* context);
-    template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false);
-    template <class T> void registerVariable(std::set<T>& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=0, bool bidirectional=false);
+    template <class T> void registerVariable(T& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=nullptr, bool bidirectional=false);
+    template <class T> void registerVariable(std::set<T>& variable, uint8_t mode=0x1, NetworkCallbackBase *cb=nullptr, bool bidirectional=false);
     template <class T> void unregisterVariable(T& var);
 
@@ -203,14 +204,26 @@
   };
 
-  template <class T> void Synchronisable::registerVariable(T& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional)
-  {
+  namespace detail
+  {
+    template <class T, bool = std::is_enum<T>::value>
+    struct UnderlyingType;
+    template <class T>
+    struct UnderlyingType<T, true> { typedef typename std::underlying_type<T>::type type; };
+    template <class T>
+    struct UnderlyingType<T, false> { typedef T type; };
+  }
+
+  template <class T>
+  void Synchronisable::registerVariable(T& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional)
+  {
+    typedef typename detail::UnderlyingType<T>::type UnderlyingType;
     if (bidirectional)
     {
-      syncList_.push_back(new SynchronisableVariableBidirectional<T>(variable, mode, cb));
+      syncList_.push_back(new SynchronisableVariableBidirectional<UnderlyingType>(reinterpret_cast<UnderlyingType&>(variable), mode, cb));
       this->dataSize_ += syncList_.back()->getSize(state_);
     }
     else
     {
-      syncList_.push_back(new SynchronisableVariable<T>(variable, mode, cb));
+      syncList_.push_back(new SynchronisableVariable<UnderlyingType>(reinterpret_cast<UnderlyingType&>(variable), mode, cb));
       if ( this->state_ == mode )
         this->dataSize_ += syncList_.back()->getSize(state_);
@@ -218,5 +231,6 @@
   }
   
-  template <class T> void Synchronisable::unregisterVariable(T& variable)
+  template <class T>
+  void Synchronisable::unregisterVariable(T& variable)
   {
     std::vector<SynchronisableVariableBase*>::iterator it = syncList_.begin();
@@ -238,11 +252,13 @@
   }
 
-  template <class T> void Synchronisable::registerVariable( std::set<T>& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional)
-  {
+  template <class T>
+  void Synchronisable::registerVariable( std::set<T>& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional)
+  {
+    typedef typename detail::UnderlyingType<T>::type UnderlyingType;
     SynchronisableVariableBase* sv;
     if (bidirectional)
-      sv = new SynchronisableVariableBidirectional<std::set<T> >(variable, mode, cb);
+      sv = new SynchronisableVariableBidirectional<std::set<UnderlyingType>>(reinterpret_cast<std::set<UnderlyingType>&>(variable), mode, cb);
     else
-      sv = new SynchronisableVariable<std::set<T> >(variable, mode, cb);
+      sv = new SynchronisableVariable<std::set<UnderlyingType>>(reinterpret_cast<std::set<UnderlyingType>&>(variable), mode, cb);
     syncList_.push_back(sv);
     stringList_.push_back(sv);
@@ -250,5 +266,5 @@
 
   template <> _NetworkExport void Synchronisable::registerVariable( std::string& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional);
-//   template <class T> _NetworkExport void Synchronisable::registerVariable<std::set<T> >( std::set<T>& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional);
+//   template <class T> _NetworkExport void Synchronisable::registerVariable<std::set<T>>( std::set<T>& variable, uint8_t mode, NetworkCallbackBase *cb, bool bidirectional);
   template <> _NetworkExport void Synchronisable::unregisterVariable( std::string& variable );
 
Index: code/trunk/src/libraries/network/synchronisable/SynchronisableVariable.h
===================================================================
--- code/trunk/src/libraries/network/synchronisable/SynchronisableVariable.h	(revision 11056)
+++ code/trunk/src/libraries/network/synchronisable/SynchronisableVariable.h	(revision 11071)
@@ -71,12 +71,12 @@
   {
     public:
-      SynchronisableVariable(T& variable, uint8_t syncDirection=VariableDirection::ToClient, NetworkCallbackBase *cb=0);
+      SynchronisableVariable(T& variable, uint8_t syncDirection=VariableDirection::ToClient, NetworkCallbackBase *cb=nullptr);
       virtual ~SynchronisableVariable();
 
-      virtual inline uint8_t getMode(){ return mode_; }
-      virtual inline uint32_t getData(uint8_t*& mem, uint8_t mode);
-      virtual inline void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false);
-      virtual inline uint32_t getSize(uint8_t mode);
-      virtual inline void* getReference(){ return static_cast<void*>(const_cast<typename Loki::TypeTraits<T>::UnqualifiedType*>(&this->variable_)); }
+      virtual inline uint8_t getMode() override{ return mode_; }
+      virtual inline uint32_t getData(uint8_t*& mem, uint8_t mode) override;
+      virtual inline void putData(uint8_t*& mem, uint8_t mode, bool forceCallback = false) override;
+      virtual inline uint32_t getSize(uint8_t mode) override;
+      virtual inline void* getReference() override{ return static_cast<void*>(const_cast<typename Loki::TypeTraits<T>::UnqualifiedType*>(&this->variable_)); }
     protected:
       T&                       variable_;
@@ -89,5 +89,5 @@
   {
     public:
-      SynchronisableVariableBidirectional(T& variable, uint8_t master=Bidirectionality::ServerMaster, NetworkCallbackBase *cb=0);
+      SynchronisableVariableBidirectional(T& variable, uint8_t master=Bidirectionality::ServerMaster, NetworkCallbackBase *cb=nullptr);
       virtual ~SynchronisableVariableBidirectional();
 
Index: code/trunk/src/libraries/tools/BillboardSet.cc
===================================================================
--- code/trunk/src/libraries/tools/BillboardSet.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/BillboardSet.cc	(revision 11071)
@@ -46,5 +46,5 @@
     BillboardSet::BillboardSet()
     {
-        this->billboardSet_ = 0;
+        this->billboardSet_ = nullptr;
     }
 
@@ -81,5 +81,5 @@
         {
             orxout(internal_error) << "Couldn't load billboard \"" << file << '"' << endl;
-            this->billboardSet_ = 0;
+            this->billboardSet_ = nullptr;
         }
 
@@ -104,5 +104,5 @@
         {
             orxout(internal_error) << "Couldn't load billboard \"" << file << '"' << endl;
-            this->billboardSet_ = 0;
+            this->billboardSet_ = nullptr;
         }
 
@@ -114,5 +114,5 @@
         if (this->billboardSet_ && this->scenemanager_)
             this->scenemanager_->destroyBillboardSet(this->billboardSet_);
-        this->billboardSet_ = 0;
+        this->billboardSet_ = nullptr;
     }
 
Index: code/trunk/src/libraries/tools/BulletDebugDrawer.h
===================================================================
--- code/trunk/src/libraries/tools/BulletDebugDrawer.h	(revision 11056)
+++ code/trunk/src/libraries/tools/BulletDebugDrawer.h	(revision 11071)
@@ -13,4 +13,6 @@
 #include <btBulletCollisionCommon.h>
 #include <OgreFrameListener.h>
+#include <OgreVector3.h>
+#include <OgreColourValue.h>
 
 namespace orxonox
@@ -21,27 +23,27 @@
             BulletDebugDrawer(Ogre::SceneManager* sceneManager);
             ~BulletDebugDrawer();
-            virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& color);
-//            virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& color, btScalar);
-            virtual void drawSphere (const btVector3& p, btScalar radius, const btVector3& color);
-            virtual void drawSphere(btScalar radius, const btTransform& transform, const btVector3& color);
-            virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btVector3& color);
-            virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btTransform& trans, const btVector3& color);
-            virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color);
-            virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform& transform, const btVector3& color);
-//            virtual void drawPlane(const btVector3& planeNormal, btScalar planeConst, const btTransform& transform, const btVector3& color);
+            virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& color) override;
+//            virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& color, btScalar) override;
+            virtual void drawSphere (const btVector3& p, btScalar radius, const btVector3& color) override;
+            virtual void drawSphere(btScalar radius, const btTransform& transform, const btVector3& color) override;
+            virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btVector3& color) override;
+            virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btTransform& trans, const btVector3& color) override;
+            virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color) override;
+            virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform& transform, const btVector3& color) override;
+//            virtual void drawPlane(const btVector3& planeNormal, btScalar planeConst, const btTransform& transform, const btVector3& color) override;
 
-            virtual void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color);
+            virtual void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color) override;
 
-            virtual void reportErrorWarning(const char* warningString);
-            virtual void draw3dText(const btVector3& location, const char* textString);
+            virtual void reportErrorWarning(const char* warningString) override;
+            virtual void draw3dText(const btVector3& location, const char* textString) override;
 
-            virtual void setDebugMode(int debugMode);
-            virtual int getDebugMode() const;
+            virtual void setDebugMode(int debugMode) override;
+            virtual int getDebugMode() const override;
 
             void configure(bool bFill, float fillAlpha);
 
         protected:
-            bool frameStarted(const Ogre::FrameEvent& evt);
-            bool frameEnded(const Ogre::FrameEvent& evt);
+            virtual bool frameStarted(const Ogre::FrameEvent& evt) override;
+            virtual bool frameEnded(const Ogre::FrameEvent& evt) override;
 
         private:
Index: code/trunk/src/libraries/tools/DebugDrawer.cc
===================================================================
--- code/trunk/src/libraries/tools/DebugDrawer.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/DebugDrawer.cc	(revision 11071)
@@ -21,5 +21,5 @@
 {
     DebugDrawer::DebugDrawer(Ogre::SceneManager *_sceneManager, float _fillAlpha) :
-            sceneManager(_sceneManager), fillAlpha(_fillAlpha), manualObject(0), isEnabled(true), linesIndex(0), trianglesIndex(0)
+            sceneManager(_sceneManager), fillAlpha(_fillAlpha), manualObject(nullptr), isEnabled(true), linesIndex(0), trianglesIndex(0)
     {
         initialise();
@@ -392,11 +392,11 @@
             manualObject->estimateVertexCount(lineVertices.size());
             manualObject->estimateIndexCount(lineIndices.size());
-            for (std::list<VertexPair>::iterator i = lineVertices.begin(); i != lineVertices.end(); i++)
+            for (const VertexPair& pair : lineVertices)
             {
-                manualObject->position(i->first);
-                manualObject->colour(i->second);
+                manualObject->position(pair.first);
+                manualObject->colour(pair.second);
             }
-            for (std::list<int>::iterator i = lineIndices.begin(); i != lineIndices.end(); i++)
-                manualObject->index(*i);
+            for (int lineIndex : lineIndices)
+                manualObject->index(lineIndex);
         }
         else
@@ -409,11 +409,11 @@
             manualObject->estimateVertexCount(triangleVertices.size());
             manualObject->estimateIndexCount(triangleIndices.size());
-            for (std::list<VertexPair>::iterator i = triangleVertices.begin(); i != triangleVertices.end(); i++)
+            for (const VertexPair& pair : triangleVertices)
             {
-                manualObject->position(i->first);
-                manualObject->colour(i->second.r, i->second.g, i->second.b, fillAlpha);
+                manualObject->position(pair.first);
+                manualObject->colour(pair.second.r, pair.second.g, pair.second.b, fillAlpha);
             }
-            for (std::list<int>::iterator i = triangleIndices.begin(); i != triangleIndices.end(); i++)
-                manualObject->index(*i);
+            for (int triangleIndex : triangleIndices)
+                manualObject->index(triangleIndex);
         }
         else
@@ -433,5 +433,5 @@
     int DebugDrawer::addLineVertex(const Ogre::Vector3& vertex, const Ogre::ColourValue& colour)
     {
-        lineVertices.push_back(VertexPair(vertex, colour));
+        lineVertices.emplace_back(vertex, colour);
         return linesIndex++;
     }
@@ -445,5 +445,5 @@
     int DebugDrawer::addTriangleVertex(const Ogre::Vector3& vertex, const Ogre::ColourValue& colour)
     {
-        triangleVertices.push_back(VertexPair(vertex, colour));
+        triangleVertices.emplace_back(vertex, colour);
         return trianglesIndex++;
     }
Index: code/trunk/src/libraries/tools/DynamicLines.cc
===================================================================
--- code/trunk/src/libraries/tools/DynamicLines.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/DynamicLines.cc	(revision 11071)
@@ -69,5 +69,5 @@
     void DynamicLines::addPoint(Real x, Real y, Real z)
     {
-        mPoints.push_back(Vector3(x,y,z));
+        mPoints.emplace_back(x,y,z);
         mDirty = true;
     }
Index: code/trunk/src/libraries/tools/DynamicLines.h
===================================================================
--- code/trunk/src/libraries/tools/DynamicLines.h	(revision 11056)
+++ code/trunk/src/libraries/tools/DynamicLines.h	(revision 11071)
@@ -84,7 +84,7 @@
     protected:
         /// Implementation DynamicRenderable, creates a simple vertex-only decl
-        virtual void createVertexDeclaration();
+        virtual void createVertexDeclaration() override;
         /// Implementation DynamicRenderable, pushes point list out to hardware memory
-        virtual void fillHardwareBuffers();
+        virtual void fillHardwareBuffers() override;
 
     private:
Index: code/trunk/src/libraries/tools/DynamicRenderable.h
===================================================================
--- code/trunk/src/libraries/tools/DynamicRenderable.h	(revision 11056)
+++ code/trunk/src/libraries/tools/DynamicRenderable.h	(revision 11071)
@@ -61,7 +61,7 @@
 
         /// Implementation of SimpleRenderable
-        virtual Real getBoundingRadius(void) const;
+        virtual Real getBoundingRadius(void) const override;
         /// Implementation of SimpleRenderable
-        virtual Real getSquaredViewDepth(const Camera* cam) const;
+        virtual Real getSquaredViewDepth(const Camera* cam) const override;
 
     protected:
Index: code/trunk/src/libraries/tools/IcoSphere.cc
===================================================================
--- code/trunk/src/libraries/tools/IcoSphere.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/IcoSphere.cc	(revision 11071)
@@ -116,7 +116,6 @@
             std::list<TriangleIndices> faces2;
 
-            for (std::list<TriangleIndices>::iterator j = faces.begin(); j != faces.end(); j++)
+            for (const TriangleIndices& f : faces)
             {
-                TriangleIndices f = *j;
                 int a = getMiddlePoint(f.v1, f.v2);
                 int b = getMiddlePoint(f.v2, f.v3);
@@ -127,8 +126,8 @@
                 removeLineIndices(f.v3, f.v1);
 
-                faces2.push_back(TriangleIndices(f.v1, a, c));
-                faces2.push_back(TriangleIndices(f.v2, b, a));
-                faces2.push_back(TriangleIndices(f.v3, c, b));
-                faces2.push_back(TriangleIndices(a, b, c));
+                faces2.emplace_back(f.v1, a, c);
+                faces2.emplace_back(f.v2, b, a);
+                faces2.emplace_back(f.v3, c, b);
+                faces2.emplace_back(a, b, c);
 
                 addTriangleLines(f.v1, a, c);
@@ -143,5 +142,5 @@
     void IcoSphere::addLineIndices(int index0, int index1)
     {
-        lineIndices.push_back(LineIndices(index0, index1));
+        lineIndices.emplace_back(index0, index1);
     }
 
@@ -164,5 +163,5 @@
     {
         Ogre::Real length = vertex.length();
-        vertices.push_back(Ogre::Vector3(vertex.x / length, vertex.y / length, vertex.z / length));
+        vertices.emplace_back(vertex.x / length, vertex.y / length, vertex.z / length);
         return index++;
     }
@@ -189,13 +188,13 @@
     void IcoSphere::addFace(int index0, int index1, int index2)
     {
-        faces.push_back(TriangleIndices(index0, index1, index2));
+        faces.emplace_back(index0, index1, index2);
     }
 
     void IcoSphere::addToLineIndices(int baseIndex, std::list<int>* target) const
     {
-        for (std::list<LineIndices>::const_iterator i = lineIndices.begin(); i != lineIndices.end(); i++)
+        for (const LineIndices& line : lineIndices)
         {
-            target->push_back(baseIndex + (*i).v1);
-            target->push_back(baseIndex + (*i).v2);
+            target->push_back(baseIndex + line.v1);
+            target->push_back(baseIndex + line.v2);
         }
     }
@@ -203,9 +202,9 @@
     void IcoSphere::addToTriangleIndices(int baseIndex, std::list<int>* target) const
     {
-        for (std::list<TriangleIndices>::const_iterator i = faces.begin(); i != faces.end(); i++)
+        for (const TriangleIndices& triangle : faces)
         {
-            target->push_back(baseIndex + (*i).v1);
-            target->push_back(baseIndex + (*i).v2);
-            target->push_back(baseIndex + (*i).v3);
+            target->push_back(baseIndex + triangle.v1);
+            target->push_back(baseIndex + triangle.v2);
+            target->push_back(baseIndex + triangle.v3);
         }
     }
@@ -217,6 +216,6 @@
         transform.setScale(Ogre::Vector3(scale, scale, scale));
 
-        for (int i = 0; i < (int) vertices.size(); i++)
-            target->push_back(VertexPair(transform * vertices[i], colour));
+        for (const Ogre::Vector3& vertex : vertices)
+            target->emplace_back(transform * vertex, colour);
 
         return vertices.size();
Index: code/trunk/src/libraries/tools/Mesh.cc
===================================================================
--- code/trunk/src/libraries/tools/Mesh.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/Mesh.cc	(revision 11071)
@@ -44,5 +44,5 @@
     Mesh::Mesh()
     {
-        this->entity_ = 0;
+        this->entity_ = nullptr;
         this->bCastShadows_ = true;
     }
@@ -73,5 +73,5 @@
             {
                 orxout(internal_error) << "Couldn't load mesh \"" << meshsource << '"' << endl;
-                this->entity_ = 0;
+                this->entity_ = nullptr;
             }
         }
Index: code/trunk/src/libraries/tools/OgreBulletUtils.h
===================================================================
--- code/trunk/src/libraries/tools/OgreBulletUtils.h	(revision 11056)
+++ code/trunk/src/libraries/tools/OgreBulletUtils.h	(revision 11071)
@@ -10,4 +10,9 @@
 
 #include "tools/ToolsPrereqs.h"
+#include <OgreVector3.h>
+#include <OgreQuaternion.h>
+#include <OgreColourValue.h>
+#include <OgreMatrix3.h>
+#include <OgreMatrix4.h>
 
 namespace orxonox
@@ -42,5 +47,5 @@
     inline Ogre::Matrix3 matrix3(const btMatrix3x3& matrix)
     {
-        return Matrix3(
+        return Ogre::Matrix3(
                 matrix[0][0], matrix[0][1], matrix[0][2],
                 matrix[1][0], matrix[1][1], matrix[1][2],
Index: code/trunk/src/libraries/tools/ParticleInterface.cc
===================================================================
--- code/trunk/src/libraries/tools/ParticleInterface.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/ParticleInterface.cc	(revision 11071)
@@ -59,5 +59,5 @@
 
         this->scenemanager_ = scenemanager;
-        this->particleSystem_ = 0;
+        this->particleSystem_ = nullptr;
 
         this->bEnabled_ = true;
@@ -80,5 +80,5 @@
             {
                 orxout(internal_error) << "Couldn't load particle system \"" << templateName << '"' << endl;
-                this->particleSystem_ = 0;
+                this->particleSystem_ = nullptr;
             }
         }
@@ -110,5 +110,5 @@
         }
         else
-            return 0;
+            return nullptr;
     }
     Ogre::ParticleEmitter* ParticleInterface::getEmitter(unsigned int emitterNr) const
@@ -117,5 +117,5 @@
             return this->particleSystem_->getEmitter(emitterNr);
         else
-            return 0;
+            return nullptr;
     }
     void ParticleInterface::removeEmitter(unsigned int emitterNr)
@@ -142,5 +142,5 @@
             return this->particleSystem_->addAffector(name);
         else
-            return 0;
+            return nullptr;
     }
     Ogre::ParticleAffector* ParticleInterface::getAffector(unsigned int affectorNr)
@@ -149,5 +149,5 @@
             return this->particleSystem_->getAffector(affectorNr);
         else
-            return 0;
+            return nullptr;
     }
     void ParticleInterface::removeAffector(unsigned int affectorNr)
Index: code/trunk/src/libraries/tools/ParticleInterface.h
===================================================================
--- code/trunk/src/libraries/tools/ParticleInterface.h	(revision 11056)
+++ code/trunk/src/libraries/tools/ParticleInterface.h	(revision 11071)
@@ -78,5 +78,5 @@
 
         protected:
-            virtual void changedTimeFactor(float factor_new, float factor_old);
+            virtual void changedTimeFactor(float factor_new, float factor_old) override;
 
         private:
Index: code/trunk/src/libraries/tools/ResourceCollection.cc
===================================================================
--- code/trunk/src/libraries/tools/ResourceCollection.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/ResourceCollection.cc	(revision 11071)
@@ -48,8 +48,4 @@
     }
 
-    ResourceCollection::~ResourceCollection()
-    {
-    }
-
     void ResourceCollection::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
@@ -93,5 +89,5 @@
     {
         if (index >= resourceLocations_.size())
-            return NULL;
+            return nullptr;
         else
             return resourceLocations_[index];
Index: code/trunk/src/libraries/tools/ResourceCollection.h
===================================================================
--- code/trunk/src/libraries/tools/ResourceCollection.h	(revision 11056)
+++ code/trunk/src/libraries/tools/ResourceCollection.h	(revision 11071)
@@ -42,7 +42,7 @@
     public:
         ResourceCollection(Context* context);
-        virtual ~ResourceCollection();
+        virtual ~ResourceCollection() = default;
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         void setResourceGroup(const std::string& resourceGroup);
@@ -54,5 +54,7 @@
 
     private:
-        ResourceCollection(const ResourceCollection&);
+        // non-copyable:
+        ResourceCollection(const ResourceCollection&) = delete;
+        ResourceCollection& operator=(const ResourceCollection&) = delete;
 
         std::string resourceGroup_;
Index: code/trunk/src/libraries/tools/ResourceLocation.cc
===================================================================
--- code/trunk/src/libraries/tools/ResourceLocation.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/ResourceLocation.cc	(revision 11071)
@@ -54,8 +54,4 @@
     }
 
-    ResourceLocation::~ResourceLocation()
-    {
-    }
-
     void ResourceLocation::XMLPort(Element& xmlelement, XMLPort::Mode mode)
     {
Index: code/trunk/src/libraries/tools/ResourceLocation.h
===================================================================
--- code/trunk/src/libraries/tools/ResourceLocation.h	(revision 11056)
+++ code/trunk/src/libraries/tools/ResourceLocation.h	(revision 11071)
@@ -44,7 +44,7 @@
     public:
         ResourceLocation(Context* context);
-        virtual ~ResourceLocation();
+        virtual ~ResourceLocation() = default;
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         void setPath(const std::string& path) { path_ = path; }
@@ -60,5 +60,7 @@
 
     private:
-        ResourceLocation(const ResourceLocation&);
+        // non-copyable:
+        ResourceLocation(const ResourceLocation&) = delete;
+        ResourceLocation& operator=(const ResourceLocation&) = delete;
 
         void load(const std::string& resourceGroup);
Index: code/trunk/src/libraries/tools/Shader.cc
===================================================================
--- code/trunk/src/libraries/tools/Shader.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/Shader.cc	(revision 11071)
@@ -44,5 +44,5 @@
         @brief Initializes the values and sets the scene manager.
     */
-    Shader::Shader(Ogre::SceneManager* scenemanager) : compositorInstance_(0)
+    Shader::Shader(Ogre::SceneManager* scenemanager) : compositorInstance_(nullptr)
     {
         RegisterObject(Shader);
@@ -109,5 +109,5 @@
     {
         // For the moment, we get the viewport always from the graphics manager
-        // TODO: Try to support multiple viewports - note however that scenemanager_->getCurrentViewport() returns NULL
+        // TODO: Try to support multiple viewports - note however that scenemanager_->getCurrentViewport() returns nullptr
         //       after switching to a camera in a different scene (only for the first time this scene is displayed though)
         this->changedCompositorName(GraphicsManager::getInstance().getViewport());
@@ -127,5 +127,5 @@
                 Ogre::CompositorManager::getSingleton().removeCompositor(viewport, this->oldcompositorName_);
                 this->compositorInstance_->removeListener(this);
-                this->compositorInstance_ = 0;
+                this->compositorInstance_ = nullptr;
             }
             if (!this->compositorName_.empty())
@@ -197,23 +197,23 @@
     {
         // iterate through the list of parameters
-        for (std::list<ParameterContainer>::iterator it = this->parameters_.begin(); it != this->parameters_.end(); ++it)
-        {
-            Ogre::Technique* techniquePtr = materialPtr->getTechnique(it->technique_);
+        for (const ParameterContainer& parameter : this->parameters_)
+        {
+            Ogre::Technique* techniquePtr = materialPtr->getTechnique(parameter.technique_);
             if (techniquePtr)
             {
-                Ogre::Pass* passPtr = techniquePtr->getPass(it->pass_);
+                Ogre::Pass* passPtr = techniquePtr->getPass(parameter.pass_);
                 if (passPtr)
                 {
                     // change the value of the parameter depending on its type
-                    if (it->value_.isType<int>())
-                        passPtr->getFragmentProgramParameters()->setNamedConstant(it->parameter_, it->value_.get<int>());
-                    else if (it->value_.isType<float>())
-                        passPtr->getFragmentProgramParameters()->setNamedConstant(it->parameter_, it->value_.get<float>());
+                    if (parameter.value_.isType<int>())
+                        passPtr->getFragmentProgramParameters()->setNamedConstant(parameter.parameter_, parameter.value_.get<int>());
+                    else if (parameter.value_.isType<float>())
+                        passPtr->getFragmentProgramParameters()->setNamedConstant(parameter.parameter_, parameter.value_.get<float>());
                 }
                 else
-                    orxout(internal_warning) << "No pass " << it->pass_ << " in technique " << it->technique_ << " in compositor \"" << this->compositorName_ << "\" or pass has no shader." << endl;
+                    orxout(internal_warning) << "No pass " << parameter.pass_ << " in technique " << parameter.technique_ << " in compositor \"" << this->compositorName_ << "\" or pass has no shader." << endl;
             }
             else
-                orxout(internal_warning) << "No technique " << it->technique_ << " in compositor \"" << this->compositorName_ << "\" or technique has no pass with shader." << endl;
+                orxout(internal_warning) << "No technique " << parameter.technique_ << " in compositor \"" << this->compositorName_ << "\" or technique has no pass with shader." << endl;
         }
         this->parameters_.clear();
@@ -228,6 +228,6 @@
         {
             const Ogre::Root::PluginInstanceList& plugins = Ogre::Root::getSingleton().getInstalledPlugins();
-            for (size_t i = 0; i < plugins.size(); ++i)
-                if (plugins[i]->getName() == "Cg Program Manager")
+            for (Ogre::Plugin* plugin : plugins)
+                if (plugin->getName() == "Cg Program Manager")
                     return true;
         }
Index: code/trunk/src/libraries/tools/Shader.h
===================================================================
--- code/trunk/src/libraries/tools/Shader.h	(revision 11056)
+++ code/trunk/src/libraries/tools/Shader.h	(revision 11071)
@@ -48,5 +48,5 @@
     {
         public:
-            Shader(Ogre::SceneManager* scenemanager = 0);
+            Shader(Ogre::SceneManager* scenemanager = nullptr);
             virtual ~Shader();
 
@@ -87,10 +87,10 @@
                 { return this->scenemanager_; }
 
-            virtual void cameraChanged(Ogre::Viewport* viewport, Ogre::Camera* oldCamera);
+            virtual void cameraChanged(Ogre::Viewport* viewport, Ogre::Camera* oldCamera) override;
 
             void setParameter(unsigned short technique, unsigned short pass, const std::string& parameter, float value);
             void setParameter(unsigned short technique, unsigned short pass, const std::string& parameter, int value);
 
-            virtual void notifyMaterialRender(Ogre::uint32 pass_id, Ogre::MaterialPtr& materialPtr);
+            virtual void notifyMaterialRender(Ogre::uint32 pass_id, Ogre::MaterialPtr& materialPtr) override;
 
         private:
Index: code/trunk/src/libraries/tools/TextureGenerator.cc
===================================================================
--- code/trunk/src/libraries/tools/TextureGenerator.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/TextureGenerator.cc	(revision 11071)
@@ -71,5 +71,5 @@
 namespace orxonox
 {
-    std::map<std::string, std::map<ColourValue, std::string> > TextureGenerator::materials_s;
+    std::map<std::string, std::map<ColourValue, std::string>> TextureGenerator::materials_s;
     unsigned int TextureGenerator::materialCount_s = 0;
 
Index: code/trunk/src/libraries/tools/TextureGenerator.h
===================================================================
--- code/trunk/src/libraries/tools/TextureGenerator.h	(revision 11056)
+++ code/trunk/src/libraries/tools/TextureGenerator.h	(revision 11071)
@@ -49,9 +49,11 @@
 
     private:
-        TextureGenerator();
-        TextureGenerator(const TextureGenerator&);
-        ~TextureGenerator();
+        // static class, no instances allowed:
+        TextureGenerator() = delete;
+        TextureGenerator(const TextureGenerator&) = delete;
+        TextureGenerator& operator=(const TextureGenerator&) = delete;
+        ~TextureGenerator() = delete;
 
-        static std::map<std::string, std::map<ColourValue, std::string> > materials_s;
+        static std::map<std::string, std::map<ColourValue, std::string>> materials_s;
         static unsigned int materialCount_s;
     };
Index: code/trunk/src/libraries/tools/Timer.cc
===================================================================
--- code/trunk/src/libraries/tools/Timer.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/Timer.cc	(revision 11071)
@@ -163,5 +163,5 @@
     void Timer::init()
     {
-        this->executor_ = 0;
+        this->executor_ = nullptr;
         this->interval_ = 0;
         this->bLoop_ = false;
Index: code/trunk/src/libraries/tools/Timer.h
===================================================================
--- code/trunk/src/libraries/tools/Timer.h	(revision 11056)
+++ code/trunk/src/libraries/tools/Timer.h	(revision 11071)
@@ -175,5 +175,5 @@
 
         protected:
-            virtual float getTimeFactor();
+            virtual float getTimeFactor() override;
     };
 }
Index: code/trunk/src/libraries/tools/interfaces/TimeFactorListener.h
===================================================================
--- code/trunk/src/libraries/tools/interfaces/TimeFactorListener.h	(revision 11056)
+++ code/trunk/src/libraries/tools/interfaces/TimeFactorListener.h	(revision 11071)
@@ -39,5 +39,5 @@
         public:
             TimeFactorListener();
-            virtual ~TimeFactorListener() {}
+            virtual ~TimeFactorListener() = default;
 
             static void setTimeFactor(float factor);
Index: code/trunk/src/libraries/tools/interfaces/ToolsInterfaceCompilation.cc
===================================================================
--- code/trunk/src/libraries/tools/interfaces/ToolsInterfaceCompilation.cc	(revision 11056)
+++ code/trunk/src/libraries/tools/interfaces/ToolsInterfaceCompilation.cc	(revision 11071)
@@ -60,6 +60,6 @@
         float oldFactor = TimeFactorListener::timefactor_s;
         TimeFactorListener::timefactor_s = factor;
-        for (ObjectList<TimeFactorListener>::iterator it = ObjectList<TimeFactorListener>::begin(); it != ObjectList<TimeFactorListener>::end(); ++it)
-            it->changedTimeFactor(factor, oldFactor);
+        for (TimeFactorListener* listener : ObjectList<TimeFactorListener>())
+            listener->changedTimeFactor(factor, oldFactor);
     }
 
Index: code/trunk/src/libraries/util/CMakeLists.txt
===================================================================
--- code/trunk/src/libraries/util/CMakeLists.txt	(revision 11056)
+++ code/trunk/src/libraries/util/CMakeLists.txt	(revision 11071)
@@ -26,5 +26,4 @@
   CRC32.cc
   ExprParser.cc
-  SharedPtr.cc
   Sleep.cc
   SmallObjectAllocator.cc
Index: code/trunk/src/libraries/util/Clipboard.cc
===================================================================
--- code/trunk/src/libraries/util/Clipboard.cc	(revision 11056)
+++ code/trunk/src/libraries/util/Clipboard.cc	(revision 11071)
@@ -93,5 +93,5 @@
             {
                 HANDLE hData = GetClipboardData(CF_TEXT);
-                if (hData == NULL)
+                if (hData == nullptr)
                     return "";
                 std::string output(static_cast<char*>(GlobalLock(hData)));
Index: code/trunk/src/libraries/util/Clock.h
===================================================================
--- code/trunk/src/libraries/util/Clock.h	(revision 11056)
+++ code/trunk/src/libraries/util/Clock.h	(revision 11071)
@@ -102,6 +102,7 @@
 
     private:
-        /// Undefined
-        Clock(const Clock& instance);
+        // non-copyable:
+        Clock(const Clock&) = delete;
+        Clock& operator=(const Clock&) = delete;
 
         Ogre::Timer*       timer_;       ///< Ogre timer object
Index: code/trunk/src/libraries/util/DestructionHelper.h
===================================================================
--- code/trunk/src/libraries/util/DestructionHelper.h	(revision 11056)
+++ code/trunk/src/libraries/util/DestructionHelper.h	(revision 11071)
@@ -36,5 +36,5 @@
     /** Deletes an object and resets the pointer
     @param object
-        Pointer to an object. Handing over NULL is safe.
+        Pointer to an object. Handing over nullptr is safe.
     */
     template <class T>
@@ -42,5 +42,5 @@
     {
         delete *object;
-        *object = NULL;
+        *object = nullptr;
     }
 
@@ -87,5 +87,7 @@
 
     private:
-        DestructionHelper(const DestructionHelper&); //!< Don't use (undefined)
+        // non-copyable:
+        DestructionHelper(const DestructionHelper&) = delete;
+        DestructionHelper& operator=(const DestructionHelper&) = delete;
 
         T* object_;
Index: code/trunk/src/libraries/util/DisplayStringConversions.h
===================================================================
--- code/trunk/src/libraries/util/DisplayStringConversions.h	(revision 11056)
+++ code/trunk/src/libraries/util/DisplayStringConversions.h	(revision 11071)
@@ -51,7 +51,7 @@
             {
                 Ogre::UTFString::code_point cp;
-                for (unsigned int i = 0; i < input.size(); ++i)
+                for (const char& character : input)
                 {
-                  cp = input[i];
+                  cp = character;
                   cp &= 0xFF;
                   output->append(1, cp);
Index: code/trunk/src/libraries/util/ExprParser.cc
===================================================================
--- code/trunk/src/libraries/util/ExprParser.cc	(revision 11056)
+++ code/trunk/src/libraries/util/ExprParser.cc	(revision 11071)
@@ -391,5 +391,5 @@
     }
 
-    char* ExprParser::parse_word(char* str)
+    void ExprParser::parse_word(char* str)
     {
         char* word = str;
@@ -402,9 +402,8 @@
             {
                 this->failed_ = true;
-                return '\0';
+                return;
             }
         };
         *word = '\0';
-        return str;
     }
 
Index: code/trunk/src/libraries/util/ExprParser.h
===================================================================
--- code/trunk/src/libraries/util/ExprParser.h	(revision 11056)
+++ code/trunk/src/libraries/util/ExprParser.h	(revision 11071)
@@ -139,5 +139,5 @@
         float parse_expr_7();
         float parse_expr_8();
-        char* parse_word(char* str);
+        void parse_word(char* str);
         binary_operator parse_binary_operator();
         unary_operator parse_unary_operator();
Index: code/trunk/src/libraries/util/ImplicitConversion.h
===================================================================
--- code/trunk/src/libraries/util/ImplicitConversion.h	(revision 11056)
+++ code/trunk/src/libraries/util/ImplicitConversion.h	(revision 11071)
@@ -68,5 +68,10 @@
     {
     private:
-        ImplicitConversion(); ImplicitConversion(const ImplicitConversion&); ~ImplicitConversion();
+        // 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);
Index: code/trunk/src/libraries/util/Math.cc
===================================================================
--- code/trunk/src/libraries/util/Math.cc	(revision 11056)
+++ code/trunk/src/libraries/util/Math.cc	(revision 11071)
@@ -371,4 +371,10 @@
     }
 
+
+    namespace detail
+    {
+        std::mt19937 rngen;
+    }
+
     /**
         @brief Returns a unique number. This function will never return the same value twice.
Index: code/trunk/src/libraries/util/Math.h
===================================================================
--- code/trunk/src/libraries/util/Math.h	(revision 11056)
+++ code/trunk/src/libraries/util/Math.h	(revision 11071)
@@ -46,4 +46,6 @@
 #include <cmath>
 #include <cstdlib>
+#include <random>
+#include <type_traits>
 
 #include <OgreMath.h>
@@ -73,11 +75,11 @@
     namespace math
     {
-        const float twoPi   = 6.283185482025146484375f;     ///< PI * 2
-        const float pi      = 3.1415927410125732421875f;    ///< PI
-        const float pi_2    = 1.57079637050628662109375f;   ///< PI / 2
-        const float pi_4    = 0.785398185253143310546875f;  ///< PI / 4
-        const float e       = 2.718281269073486328125f;     ///< e
-        const float sqrt2   = 1.41421353816986083984375f;   ///< sqrt(2)
-        const float sqrt2_2 = 0.707106769084930419921875f;  ///< sqrt(2) / 2
+        constexpr float twoPi   = 6.283185482025146484375f;     ///< PI * 2
+        constexpr float pi      = 3.1415927410125732421875f;    ///< PI
+        constexpr float pi_2    = 1.57079637050628662109375f;   ///< PI / 2
+        constexpr float pi_4    = 0.785398185253143310546875f;  ///< PI / 4
+        constexpr float e       = 2.718281269073486328125f;     ///< e
+        constexpr float sqrt2   = 1.41421353816986083984375f;   ///< sqrt(2)
+        constexpr float sqrt2_2 = 0.707106769084930419921875f;  ///< sqrt(2) / 2
     }
 
@@ -104,5 +106,5 @@
     */
     template <typename T>
-    inline T sgn(T x)
+    constexpr inline T sgn(T x)
     {
         return (x >= 0) ? (T)1 : (T)-1;
@@ -116,13 +118,7 @@
     */
     template <typename T>
-    inline T clamp(T x, T min, T max)
-    {
-        if (x < min)
-            return min;
-
-        if (x > max)
-            return max;
-
-        return x;
+    constexpr inline T clamp(T x, T min, T max)
+    {
+        return x < min ? min : (x > max ? max : x);
     }
 
@@ -131,5 +127,5 @@
     */
     template <typename T>
-    inline T square(T x)
+    constexpr inline T square(T x)
     {
         return x*x;
@@ -140,5 +136,5 @@
     */
     template <typename T>
-    inline T cube(T x)
+    constexpr inline T cube(T x)
     {
         return x*x*x;
@@ -183,11 +179,15 @@
         @c Vector3 you get <tt>Vector3(0, 0, 0)</tt>.
     */
-    template <typename T>
-    inline T zeroise()
-    {
-        // Default, raise a compiler error without including large boost header cascade.
-        T temp();
-        *********temp; // If you reach this code, you abused zeroise()!
-        return temp;
+    template <typename T> /* for normal classes */ typename std::enable_if<!std::is_enum<T>::value, T>::type
+    inline /*T*/ zeroise()
+    {
+        // If you reach this code, you abused zeroise()!
+        static_assert(sizeof(T) != sizeof(T), "No template specialization available for T");
+    }
+    /// Implementation for enum classes: uses the underlying type to create a zero value.
+    template <typename T> /* for enum classes */ typename std::enable_if<std::is_enum<T>::value, T>::type
+    inline /*T*/ zeroise()
+    {
+        return static_cast<T>(zeroise<typename std::underlying_type<T>::type>());
     }
 
@@ -206,5 +206,5 @@
     template <> inline long double          zeroise<long double>()          { return 0; }
     template <> inline bool                 zeroise<bool>()                 { return 0; }
-    template <> inline void*                zeroise<void*>()                { return 0; }
+    template <> inline void*                zeroise<void*>()                { return nullptr; }
     template <> inline std::string          zeroise<std::string>()          { return std::string(); }
     template <> inline orxonox::Radian      zeroise<orxonox::Radian>()      { return orxonox::Radian(0.0f); }
@@ -258,4 +258,31 @@
     }
 
+    namespace detail
+    {
+        /**
+        Random number generator used for the functions below. Marked extern to only have one global instance.
+        */
+        _UtilExport extern std::mt19937 rngen;
+    }
+
+    /**
+    @brief Seeds the random number generator used for the functions below.
+    */
+    inline void rndseed(unsigned int seed)
+    {
+        detail::rngen.seed(seed);
+    }
+
+    /**
+    @brief Returns a random number between @a min and almost @a max: <tt>min <= rnd < max</tt>.
+    @param min The minimum
+    @param max The maximum
+    */
+    inline float rnd(float min, float max)
+    {
+        std::uniform_real_distribution<float> dist(min, max);
+        return dist(detail::rngen);
+    }
+
     /**
         @brief Returns a random number between 0 and almost 1: <tt>0 <= rnd < 1</tt>.
@@ -263,5 +290,5 @@
     inline float rnd()
     {
-        return rand() / (RAND_MAX + 1.0f);
+        return rnd(0, 1);
     }
 
@@ -272,15 +299,5 @@
     inline float rnd(float max)
     {
-        return rnd() * max;
-    }
-
-    /**
-        @brief Returns a random number between @a min and almost @a max: <tt>min <= rnd < max</tt>.
-        @param min The minimum
-        @param max The maximum
-    */
-    inline float rnd(float min, float max)
-    {
-        return rnd(max - min) + min;
+        return rnd(0, max);
     }
 
@@ -290,5 +307,6 @@
     inline float rndsgn()
     {
-        return static_cast<float>((rand() & 0x2) - 1); // rand() & 0x2 is either 2 or 0
+        std::uniform_int_distribution<> dist;
+        return static_cast<float>((dist(detail::rngen) & 0x2) - 1); // dist(...) & 0x2 is either 2 or 0
     }
 
Index: code/trunk/src/libraries/util/MultiType.cc
===================================================================
--- code/trunk/src/libraries/util/MultiType.cc	(revision 11056)
+++ code/trunk/src/libraries/util/MultiType.cc	(revision 11071)
@@ -43,5 +43,5 @@
         @param type The type
     */
-    bool MultiType::convert(Type::Enum type)
+    bool MultiType::convert(Type type)
     {
         switch (type)
@@ -106,5 +106,5 @@
     std::string MultiType::getTypename() const
     {
-        Type::Enum type = (this->value_) ? this->value_->type_ : Type::Null;
+        Type type = (this->value_) ? this->value_->type_ : Type::Null;
 
         switch (type)
Index: code/trunk/src/libraries/util/MultiType.h
===================================================================
--- code/trunk/src/libraries/util/MultiType.h	(revision 11056)
+++ code/trunk/src/libraries/util/MultiType.h	(revision 11071)
@@ -132,36 +132,33 @@
         template <typename T> friend class MT_Value;
 
-        struct Type
+        /**
+            @brief Enum of all possible types of a MultiType.
+        */
+        enum class Type : uint8_t
         {
-            /**
-                @brief Enum of all possible types of a MultiType.
-            */
-            enum Enum
-            {
-                Null,
-                Char,
-                UnsignedChar,
-                Short,
-                UnsignedShort,
-                Int,
-                UnsignedInt,
-                Long,
-                UnsignedLong,
-                LongLong,
-                UnsignedLongLong,
-                Float,
-                Double,
-                LongDouble,
-                Bool,
-                VoidPointer,
-                String,
-                Vector2,
-                Vector3,
-                Vector4,
-                ColourValue,
-                Quaternion,
-                Radian,
-                Degree
-            };
+            Null,
+            Char,
+            UnsignedChar,
+            Short,
+            UnsignedShort,
+            Int,
+            UnsignedInt,
+            Long,
+            UnsignedLong,
+            LongLong,
+            UnsignedLongLong,
+            Float,
+            Double,
+            LongDouble,
+            Bool,
+            VoidPointer,
+            String,
+            Vector2,
+            Vector3,
+            Vector4,
+            ColourValue,
+            Quaternion,
+            Radian,
+            Degree
         };
 
@@ -174,6 +171,6 @@
         {
         public:
-            inline MT_ValueBase(void* data, Type::Enum type) : type_(type), bLastConversionSuccessful(true), data_(data) {}
-            inline virtual ~MT_ValueBase() {}
+            inline MT_ValueBase(void* data, Type type) : type_(type), bLastConversionSuccessful(true), data_(data) {}
+            virtual inline ~MT_ValueBase() {}
 
             virtual MT_ValueBase* clone() const = 0;
@@ -182,7 +179,20 @@
 
             /// Returns the type of the current value.
-            inline const Type::Enum& getType() const { return this->type_; }
-            /// Returns true if the type of the stored value is T.
-            template <typename T> inline bool isType() const { return false; }
+            inline const Type& getType() const { return this->type_; }
+
+            /// Returns true if the type of the stored value is T. Note: the actual implementations for all supported types are defined outside of the class.
+            template <typename T> /* for normal classes */ typename std::enable_if<!std::is_enum<T>::value, bool>::type
+            inline /*bool*/ isType() const
+            {
+                // If you reach this code, you used MultiType with an unsupported type T
+                static_assert(sizeof(T) != sizeof(T), "No template specialization available for T");
+                return false;
+            }
+            /// Implementation for enum classes: Returns true if the type of the stored value is the underlying type of T.
+            template <typename T> /* for enum classes */ typename std::enable_if<std::is_enum<T>::value, bool>::type
+            inline /*bool*/ isType() const
+            {
+                return this->isType<typename std::underlying_type<T>::type>();
+            }
 
             /// Checks whether the value is a default one.
@@ -215,4 +225,18 @@
             virtual bool setValue(const MultiType& other)            = 0;
 
+            template <typename T> /* for normal classes */ typename std::enable_if<!std::is_enum<T>::value, bool>::type
+            inline /*bool*/ setValue(const T& value)
+            {
+                // If you reach this code, you used MultiType with an unsupported type T
+                static_assert(sizeof(T) != sizeof(T), "No template specialization available for T");
+                return false;
+            }
+            template <typename T> /* for enum classes */ typename std::enable_if<std::is_enum<T>::value, bool>::type
+            inline /*bool*/ setValue(const T& value)
+            {
+                typedef typename std::underlying_type<T>::type UnderlyingType;
+                return this->setValue(reinterpret_cast<const UnderlyingType&>(value));
+            }
+
             virtual bool getValue(char*                 value) const = 0;
             virtual bool getValue(unsigned char*        value) const = 0;
@@ -239,4 +263,18 @@
             virtual bool getValue(orxonox::Degree*      value) const = 0;
 
+            template <typename T> /* for normal classes */ typename std::enable_if<!std::is_enum<T>::value, bool>::type
+            inline /*bool*/ getValue(T* value) const
+            {
+                // If you reach this code, you used MultiType with an unsupported type T
+                static_assert(sizeof(T) != sizeof(T), "No template specialization available for T");
+                return false;
+            }
+            template <typename T> /* for enum classes */ typename std::enable_if<std::is_enum<T>::value, bool>::type
+            inline /*bool*/ getValue(T* value) const
+            {
+                typedef typename std::underlying_type<T>::type UnderlyingType;
+                return this->getValue(reinterpret_cast<UnderlyingType*>(value));
+            }
+
             template <typename T> T get() const
             {
@@ -257,5 +295,5 @@
             virtual uint8_t getSize() const = 0;
 
-            Type::Enum type_;               ///< The type of the current value
+            Type type_;                     ///< The type of the current value
             bool bLastConversionSuccessful; ///< True if the last conversion was successful
             void* data_;                    ///< For direct access to the value if the type is known
@@ -266,10 +304,10 @@
 
             /// Default constructor: Assigns no value and no type. The type will be determined by the first assignment of a value.
-            inline MultiType()                       : value_(0) { }
+            inline MultiType()                       : value_(nullptr) { }
             /// Constructor: Assigns the given value and sets the type.
             template <typename V>
-            inline MultiType(const V& value)         : value_(0) { this->set(value); }
+            inline MultiType(const V& value)         : value_(nullptr) { this->set(value); }
             /// Copyconstructor: Assigns value and type of the other MultiType.
-            inline MultiType(const MultiType& other) : value_(0) { this->set(other); }
+            inline MultiType(const MultiType& other) : value_(nullptr) { this->set(other); }
 
             /// Destructor: Deletes the MT_Value.
@@ -325,5 +363,5 @@
                 if (this->value_)
                     delete this->value_;
-                this->value_ = (other.value_) ? other.value_->clone() : 0;
+                this->value_ = (other.value_) ? other.value_->clone() : nullptr;
             }
 
@@ -332,5 +370,5 @@
 
             /// Resets value and type. Type will be void afterwards and null() returns true.
-            inline void reset() { if (this->value_) delete this->value_; this->value_ = 0; }
+            inline void reset() { if (this->value_) delete this->value_; this->value_ = nullptr; }
             /// Resets the value and changes the internal type to T.
             template <typename T> inline void reset() { this->assignValue(typename Loki::TypeTraits<T>::UnqualifiedReferredType()); }
@@ -354,7 +392,10 @@
             template <typename T> inline bool getValue(T* value) const { if (this->value_) { return this->value_->getValue(value); } return false; }
 
-            /// Returns the current value, converted to the requested type. This base implementation works only for pointers. All other supported types are
-            /// implemented in  specialized functions at the bottom of this file.
-            template <typename T> inline T get() const { return static_cast<T>(this->get<void*>()); }
+            /// Returns the current value, converted to the requested type.
+            template <typename T> /* for normal types */ typename std::enable_if<!std::is_pointer<T>::value, T>::type
+            inline /*T*/ get() const { return (this->value_ ? this->value_->get<T>() : NilValue<T>()); }
+            /// Returns the current value, converted to a pointer of the requested type.
+            template <typename T> /* for pointers */ typename std::enable_if<std::is_pointer<T>::value, T>::type
+            inline /*T*/ get() const { return this->value_ ? static_cast<T>(this->value_->get<void*>()) : nullptr; }
 
 
@@ -365,6 +406,6 @@
             inline void exportData(uint8_t*& mem) const
             {
-                assert(sizeof(Type::Enum) <= 8);
-                *static_cast<uint8_t*>(mem) = this->getType();
+                assert(sizeof(Type) <= 8);
+                *static_cast<uint8_t*>(mem) = static_cast<uint8_t>(this->getType());
                 mem += sizeof(uint8_t);
                 this->value_->exportData(mem);
@@ -373,6 +414,6 @@
             inline void importData(uint8_t*& mem)
             {
-                assert(sizeof(Type::Enum) <= 8);
-                this->setType(static_cast<Type::Enum>(*static_cast<uint8_t*>(mem)));
+                assert(sizeof(Type) <= 8);
+                this->setType(static_cast<Type>(*static_cast<uint8_t*>(mem)));
                 mem += sizeof(uint8_t);
                 this->value_->importData(mem);
@@ -414,9 +455,9 @@
 
             /// Resets the value and changes the internal type to the given type.
-            inline void setType(Type::Enum type) { this->reset(); this->convert(type); this->resetValue(); }
+            inline void setType(Type type) { this->reset(); this->convert(type); this->resetValue(); }
             /// Returns the current type.
-            inline Type::Enum getType() const { return (this->value_) ? this->value_->type_ : Type::Null; }
+            inline Type getType() const { return (this->value_) ? this->value_->type_ : Type::Null; }
             /// Converts the current value to the given type.
-            bool convert(Type::Enum type);
+            bool convert(Type type);
 
             /// Changes the value container.
@@ -428,5 +469,17 @@
             }
             /// Creates a new value container (works only with specialized types).
-            template <typename T> inline void createNewValueContainer(const T& value) { /* STATIC ASSERT */ *****value; return false; }
+            template <typename T> /* for normal classes */ typename std::enable_if<!std::is_enum<T>::value>::type
+            inline /*void*/ createNewValueContainer(const T& value)
+            { 
+                // If you reach this code, you used MultiType with an unsupported type T
+                static_assert(sizeof(T) != sizeof(T), "No template specialization available for T");
+            }
+            /// Creates a new value container (implementation for enum classes that must be cast to the underlying type).
+            template <typename T> /* for enum classes */ typename std::enable_if<std::is_enum<T>::value>::type
+            inline /*void*/ createNewValueContainer(const T& value)
+            {
+                typedef typename std::underlying_type<T>::type UnderlyingType;
+                this->createNewValueContainer<UnderlyingType>(reinterpret_cast<const UnderlyingType&>(value));
+            }
 
             MT_ValueBase* value_; //!< A pointer to the value container
@@ -471,28 +524,4 @@
     template <> inline bool MultiType::isType<void>() const { return this->null(); }
     template <> inline bool MultiType::convert<void>() { this->reset(); return true; }
-
-    template <> inline char                 MultiType::get() const { return (this->value_ ? this->value_->get<char>()                 : 0); }
-    template <> inline unsigned char        MultiType::get() const { return (this->value_ ? this->value_->get<unsigned char>()        : 0); }
-    template <> inline short                MultiType::get() const { return (this->value_ ? this->value_->get<short>()                : 0); }
-    template <> inline unsigned short       MultiType::get() const { return (this->value_ ? this->value_->get<unsigned short>()       : 0); }
-    template <> inline int                  MultiType::get() const { return (this->value_ ? this->value_->get<int>()                  : 0); }
-    template <> inline unsigned int         MultiType::get() const { return (this->value_ ? this->value_->get<unsigned int>()         : 0); }
-    template <> inline long                 MultiType::get() const { return (this->value_ ? this->value_->get<long>()                 : 0); }
-    template <> inline unsigned long        MultiType::get() const { return (this->value_ ? this->value_->get<unsigned long>()        : 0); }
-    template <> inline long long            MultiType::get() const { return (this->value_ ? this->value_->get<long long>()            : 0); }
-    template <> inline unsigned long long   MultiType::get() const { return (this->value_ ? this->value_->get<unsigned long long>()   : 0); }
-    template <> inline float                MultiType::get() const { return (this->value_ ? this->value_->get<float>()                : 0); }
-    template <> inline double               MultiType::get() const { return (this->value_ ? this->value_->get<double>()               : 0); }
-    template <> inline long double          MultiType::get() const { return (this->value_ ? this->value_->get<long double>()          : 0); }
-    template <> inline bool                 MultiType::get() const { return (this->value_ ? this->value_->get<bool>()                 : 0); }
-    template <> inline void*                MultiType::get() const { return (this->value_ ? this->value_->get<void*>()                : 0); }
-    template <> inline std::string          MultiType::get() const { return (this->value_ ? this->value_->get<std::string>()          : NilValue<std::string>()); }
-    template <> inline orxonox::Vector2     MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::Vector2>()     : NilValue<orxonox::Vector2>()); }
-    template <> inline orxonox::Vector3     MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::Vector3>()     : NilValue<orxonox::Vector3>()); }
-    template <> inline orxonox::Vector4     MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::Vector4>()     : NilValue<orxonox::Vector4>()); }
-    template <> inline orxonox::ColourValue MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::ColourValue>() : NilValue<orxonox::ColourValue>()); }
-    template <> inline orxonox::Quaternion  MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::Quaternion>()  : NilValue<orxonox::Quaternion>()); }
-    template <> inline orxonox::Radian      MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::Radian>()      : NilValue<orxonox::Radian>()); }
-    template <> inline orxonox::Degree      MultiType::get() const { return (this->value_ ? this->value_->get<orxonox::Degree>()      : NilValue<orxonox::Degree>()); }
 
     template <> _UtilExport void MultiType::createNewValueContainer(const char& value);
Index: code/trunk/src/libraries/util/MultiTypeValue.h
===================================================================
--- code/trunk/src/libraries/util/MultiTypeValue.h	(revision 11056)
+++ code/trunk/src/libraries/util/MultiTypeValue.h	(revision 11071)
@@ -55,35 +55,35 @@
     public:
         /// Constructor: Assigns the value and the type identifier.
-        MT_Value(const T& value, MultiType::Type::Enum type) : MT_ValueBase(&this->value_, type), value_(value) {}
+        MT_Value(const T& value, MultiType::Type type) : MT_ValueBase(&this->value_, type), value_(value) {}
 
         /// Creates a copy of itself.
-        inline MT_ValueBase* clone() const { return new MT_Value<T>(this->value_, this->type_); }
+        virtual inline MT_ValueBase* clone() const override { return new MT_Value<T>(this->value_, this->type_); }
 
         /// Resets the current value to the default.
-        inline void reset() { this->value_ = zeroise<T>(); bLastConversionSuccessful = true; }
-
-        inline bool getValue(char*                 value) const { return convertValue<T, char                >(value, value_, 0); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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); } ///< 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_, NilValue<std::string>         ()); } ///< 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_, NilValue<orxonox::Vector2>    ()); } ///< 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_, NilValue<orxonox::Vector3>    ()); } ///< 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_, NilValue<orxonox::Vector4>    ()); } ///< 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_, NilValue<orxonox::ColourValue>()); } ///< 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_, NilValue<orxonox::Quaternion> ()); } ///< 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_, NilValue<orxonox::Radian>     ()); } ///< 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_, NilValue<orxonox::Degree>     ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline void reset() override { this->value_ = zeroise<T>(); bLastConversionSuccessful = true; }
+
+        virtual inline bool getValue(char*                 value) const override { return convertValue<T, char                >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(unsigned char*        value) const override { return convertValue<T, unsigned char       >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(short*                value) const override { return convertValue<T, short               >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(unsigned short*       value) const override { return convertValue<T, unsigned short      >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(int*                  value) const override { return convertValue<T, int                 >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(unsigned int*         value) const override { return convertValue<T, unsigned int        >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(long*                 value) const override { return convertValue<T, long                >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(unsigned long*        value) const override { return convertValue<T, unsigned long       >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(long long*            value) const override { return convertValue<T, long long           >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(unsigned long long*   value) const override { return convertValue<T, unsigned long long  >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(float*                value) const override { return convertValue<T, float               >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(double*               value) const override { return convertValue<T, double              >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(long double*          value) const override { return convertValue<T, long double         >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(bool*                 value) const override { return convertValue<T, bool                >(value, value_, 0); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(void**                value) const override { return convertValue<T, void*               >(value, value_, nullptr); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(std::string*          value) const override { return convertValue<T, std::string         >(value, value_, NilValue<std::string>         ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::Vector2*     value) const override { return convertValue<T, orxonox::Vector2    >(value, value_, NilValue<orxonox::Vector2>    ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::Vector3*     value) const override { return convertValue<T, orxonox::Vector3    >(value, value_, NilValue<orxonox::Vector3>    ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::Vector4*     value) const override { return convertValue<T, orxonox::Vector4    >(value, value_, NilValue<orxonox::Vector4>    ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::ColourValue* value) const override { return convertValue<T, orxonox::ColourValue>(value, value_, NilValue<orxonox::ColourValue>()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::Quaternion*  value) const override { return convertValue<T, orxonox::Quaternion >(value, value_, NilValue<orxonox::Quaternion> ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::Radian*      value) const override { return convertValue<T, orxonox::Radian     >(value, value_, NilValue<orxonox::Radian>     ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
+        virtual inline bool getValue(orxonox::Degree*      value) const override { return convertValue<T, orxonox::Degree     >(value, value_, NilValue<orxonox::Degree>     ()); } ///< Assigns the value to the given pointer. The value gets converted if the types don't match.
 
         /**
@@ -91,5 +91,5 @@
             @param other The other MultiType
         */
-        inline bool setValue(const MultiType& other)
+        virtual inline bool setValue(const MultiType& other) override
         {
             if (other.value_)
@@ -104,37 +104,37 @@
         }
 
-        inline bool setValue(const char& value)                 { return (bLastConversionSuccessful = convertValue<char                , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const unsigned char& value)        { return (bLastConversionSuccessful = convertValue<unsigned char       , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const short& value)                { return (bLastConversionSuccessful = convertValue<short               , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const unsigned short& value)       { return (bLastConversionSuccessful = convertValue<unsigned short      , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const int& value)                  { return (bLastConversionSuccessful = convertValue<int                 , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const unsigned int& value)         { return (bLastConversionSuccessful = convertValue<unsigned int        , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const long& value)                 { return (bLastConversionSuccessful = convertValue<long                , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const unsigned long& value)        { return (bLastConversionSuccessful = convertValue<unsigned long       , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const long long& value)            { return (bLastConversionSuccessful = convertValue<long long           , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const unsigned long long& value)   { return (bLastConversionSuccessful = convertValue<unsigned long long  , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const float& value)                { return (bLastConversionSuccessful = convertValue<float               , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const double& value)               { return (bLastConversionSuccessful = convertValue<double              , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const long double& value)          { return (bLastConversionSuccessful = convertValue<long double         , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const bool& value)                 { return (bLastConversionSuccessful = convertValue<bool                , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(      void* const& value)          { return (bLastConversionSuccessful = convertValue<void*               , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const std::string& value)          { return (bLastConversionSuccessful = convertValue<std::string         , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::Vector2& value)     { return (bLastConversionSuccessful = convertValue<orxonox::Vector2    , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::Vector3& value)     { return (bLastConversionSuccessful = convertValue<orxonox::Vector3    , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::Vector4& value)     { return (bLastConversionSuccessful = convertValue<orxonox::Vector4    , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::ColourValue& value) { return (bLastConversionSuccessful = convertValue<orxonox::ColourValue, T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::Quaternion& value)  { return (bLastConversionSuccessful = convertValue<orxonox::Quaternion , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::Radian& value)      { return (bLastConversionSuccessful = convertValue<orxonox::Radian     , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
-        inline bool setValue(const orxonox::Degree& value)      { return (bLastConversionSuccessful = convertValue<orxonox::Degree     , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const char& value)                 override { return (bLastConversionSuccessful = convertValue<char                , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const unsigned char& value)        override { return (bLastConversionSuccessful = convertValue<unsigned char       , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const short& value)                override { return (bLastConversionSuccessful = convertValue<short               , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const unsigned short& value)       override { return (bLastConversionSuccessful = convertValue<unsigned short      , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const int& value)                  override { return (bLastConversionSuccessful = convertValue<int                 , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const unsigned int& value)         override { return (bLastConversionSuccessful = convertValue<unsigned int        , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const long& value)                 override { return (bLastConversionSuccessful = convertValue<long                , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const unsigned long& value)        override { return (bLastConversionSuccessful = convertValue<unsigned long       , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const long long& value)            override { return (bLastConversionSuccessful = convertValue<long long           , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const unsigned long long& value)   override { return (bLastConversionSuccessful = convertValue<unsigned long long  , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const float& value)                override { return (bLastConversionSuccessful = convertValue<float               , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const double& value)               override { return (bLastConversionSuccessful = convertValue<double              , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const long double& value)          override { return (bLastConversionSuccessful = convertValue<long double         , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const bool& value)                 override { return (bLastConversionSuccessful = convertValue<bool                , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(      void* const& value)          override { return (bLastConversionSuccessful = convertValue<void*               , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const std::string& value)          override { return (bLastConversionSuccessful = convertValue<std::string         , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::Vector2& value)     override { return (bLastConversionSuccessful = convertValue<orxonox::Vector2    , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::Vector3& value)     override { return (bLastConversionSuccessful = convertValue<orxonox::Vector3    , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::Vector4& value)     override { return (bLastConversionSuccessful = convertValue<orxonox::Vector4    , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::ColourValue& value) override { return (bLastConversionSuccessful = convertValue<orxonox::ColourValue, T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::Quaternion& value)  override { return (bLastConversionSuccessful = convertValue<orxonox::Quaternion , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::Radian& value)      override { return (bLastConversionSuccessful = convertValue<orxonox::Radian     , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
+        virtual inline bool setValue(const orxonox::Degree& value)      override { return (bLastConversionSuccessful = convertValue<orxonox::Degree     , T>(&value_, value, NilValue<T>())); } ///< Assigns the value by converting it to T.
 
         /// Puts the current value on the stream
-        inline void toString(std::ostream& outstream) const { outstream << this->value_; }
+        virtual inline void toString(std::ostream& outstream) const override { outstream << this->value_; }
 
         /// loads data from the bytestream (mem) into the MT and increases the bytestream pointer by the size of the data
-        inline void importData( uint8_t*& mem )         { loadAndIncrease( /*(const T&)*/this->value_, mem ); }
+        virtual inline void importData( uint8_t*& mem ) override         { loadAndIncrease( /*(const T&)*/this->value_, mem ); }
         /// saves data from the MT into the bytestream (mem) and increases the bytestream pointer by the size of the data
-        inline void exportData( uint8_t*& mem ) const   { saveAndIncrease( /*(const T&)*/this->value_, mem ); }
+        virtual inline void exportData( uint8_t*& mem ) const override   { saveAndIncrease( /*(const T&)*/this->value_, mem ); }
         /// returns the size of the data that would be saved by exportData
-        inline uint8_t getSize() const { return returnSize( this->value_ ); }
+        virtual inline uint8_t getSize() const override { return returnSize( this->value_ ); }
 
         T value_; ///< The stored value
Index: code/trunk/src/libraries/util/Serialise.h
===================================================================
--- code/trunk/src/libraries/util/Serialise.h	(revision 11056)
+++ code/trunk/src/libraries/util/Serialise.h	(revision 11071)
@@ -672,6 +672,6 @@
     {
         uint32_t tempsize = sizeof(uint32_t); // for the number of entries
-        for( typename std::set<T>::iterator it=((std::set<T>*)(&variable))->begin(); it!=((std::set<T>*)(&variable))->end(); ++it)
-            tempsize += returnSize( *it );
+        for(const T& element : *((std::set<T>*)(&variable)))
+            tempsize += returnSize( element );
         return tempsize;
     }
@@ -679,8 +679,7 @@
     template <class T> inline void saveAndIncrease(  const std::set<T>& variable, uint8_t*& mem )
     {
-        typename std::set<T>::const_iterator it = variable.begin();
         saveAndIncrease( (uint32_t)variable.size(), mem );
-        for( ; it!=variable.end(); ++it )
-            saveAndIncrease( *it, mem );
+        for( const T& elem : variable )
+            saveAndIncrease( elem, mem );
     }
 
Index: code/trunk/src/libraries/util/SharedPtr.cc
===================================================================
--- code/trunk/src/libraries/util/SharedPtr.cc	(revision 11056)
+++ 	(revision )
@@ -1,46 +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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @file
-    @brief Static linkage of the SmallObjectAllocator used by SharedPtr.
-*/
-
-#include "SharedPtr.h"
-
-namespace orxonox
-{
-    namespace detail
-    {
-        SmallObjectAllocator& createSharedCounterPool()
-        {
-            static SmallObjectAllocator instance(sizeof(SharedCounterImpl<void>));
-            return instance;
-        }
-    }
-}
Index: code/trunk/src/libraries/util/SharedPtr.h
===================================================================
--- code/trunk/src/libraries/util/SharedPtr.h	(revision 11056)
+++ 	(revision )
@@ -1,375 +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:
- *      Fabian 'x3n' Landau
- *   Co-authors:
- *      ...
- *
- */
-
-/**
-    @defgroup SharedPtr SharedPtr<T>
-    @ingroup Util
-*/
-
-/**
-    @file
-    @ingroup SharedPtr
-    @brief Definition of the SharedPtr template that is used to manage pointers.
-
-    @anchor SharedPtrExample
-
-    The orxonox::SharedPtr template can be used to manage a pointer to an object
-    that was created with new. The SharedPtr acts like the pointer itself, but it
-    keeps track of the number of references to it. If all references are removed,
-    SharedPtr deletes the managed object automatically.
-
-    Example:
-
-    Classic implementation using new and delete:
-    @code
-    void someFunction()
-    {
-        MyClass* object = new MyClass();            // Create a new instance of MyClass
-
-        object->myFunction();                       // Calls MyClass::myFunction()
-
-        delete object;                              // Delete the object at the end of the scope
-    }
-    @endcode
-
-    The same function using SharedPtr:
-    @code
-    void someFunction()
-    {
-        SharedPtr<MyClass> object = new MyClass();  // Create a new instance of MyClass and store its pointer in a SharedPtr
-
-        object->myFunction();                       // Calls MyClass::myFunction()
-
-    }                                               // At the end of the scope, the SharedPtr is destroyed. Because no other SharedPtrs
-                                                    // point at the object, the object itself is also destroyed automatically
-    @endcode
-
-    This is especially handy if you do not know what will happen with an object that was
-    created with new, for example if you pass it to another object. If multiple instances
-    share a pointer to the same object, none of these instances can delete the object
-    without interfering with the other instances. But if none of the instances destroy the
-    object, it will never be destroyed and results in a memory leak. With a SharedPtr
-    however you don't have to think about destroying the object, because the SharedPtr
-    itself keeps track of the references.
-
-    Example:
-
-    Classic implementation using new and delete:
-    @code
-    class OtherClass                                    // Declaration of some class
-    {
-        public:
-            OtherClass(MyClass* object)                 // Constructor
-            {
-                this->object_ = object;                 // Assigns the pointer to the member variable object_
-            }
-
-            ~OtherClass()                               // Destructor
-            {
-                ???                                     // What to do with object_?
-            }
-
-        private:
-            MyClass* object_;                           // A pointer to the object
-    };
-
-    void someFunction()
-    {
-        MyClass* object = new MyClass();                // Create a new instance of MyClass
-
-        OtherClass* other1 = new OtherClass(object);    // Create an instance of OtherClass and pass the object pointer
-        OtherClass* other2 = new OtherClass(object);    // "
-        OtherClass* other3 = new OtherClass(object);    // "
-
-        ???                                             // What happens with object now?
-    }
-    @endcode
-
-    If you use SharedPtr<MyClass> instead of a classic MyClass* pointer, the instance of
-    MyClass would be automatically destroyed if all instances of OtherClass are destroyed.
-    You don't need any code in the destructor and you can completely forget about the
-    object, because its managed by the SharedPtr.
-
-    The same code using SharedPtr:
-    @code
-    class OtherClass                                        // Declaration of some class
-    {
-        public:
-            OtherClass(const SharedPtr<MyClass>& object)    // Constructor
-            {
-                this->object_ = object;                     // Assigns the pointer to the member variable object_
-            }
-
-        private:
-            SharedPtr<MyClass> object_;                     // A SharedPtr to the object
-    };
-
-    void someFunction()
-    {
-        SharedPtr<MyClass> object = new MyClass();          // Create a new instance of MyClass
-
-        OtherClass* other1 = new OtherClass(object);        // Create an instance of OtherClass and pass the object pointer
-        OtherClass* other2 = new OtherClass(object);        // "
-        OtherClass* other3 = new OtherClass(object);        // "
-
-    }                                                       // The SharedPtr "object" is destroyed at the end of the scope,
-                                                            // but the three instances of OtherClass keep the object alive
-                                                            // until they are all destroyed.
-    @endcode
-*/
-
-#ifndef _SharedPtr_H__
-#define _SharedPtr_H__
-
-#include "UtilPrereqs.h"
-
-#include <algorithm>
-#include <cassert>
-
-#include "SmallObjectAllocator.h"
-
-namespace orxonox
-{
-    namespace detail
-    {
-        /// BaseClass of SharedCounterImpl, has a counter that is initialized with 1
-        class SharedCounter
-        {
-            public:
-                SharedCounter() : count_(1) {}
-                virtual ~SharedCounter() {}
-                virtual void destroy() = 0;
-
-                int count_;
-        };
-
-        /// Child class of SharedCounter, keeps a pointer to an object of type T that can be destroyed with destroy()
-        template <class T>
-        class SharedCounterImpl : public SharedCounter
-        {
-            public:
-                SharedCounterImpl(T* pointer) : pointer_(pointer) {}
-
-                void destroy()
-                {
-                    delete this->pointer_;
-                }
-
-            private:
-                T* pointer_;
-        };
-
-        _UtilExport SmallObjectAllocator& createSharedCounterPool();
-
-        ORX_FORCEINLINE SmallObjectAllocator& getSharedCounterPool()
-        {
-            static SmallObjectAllocator& instance = createSharedCounterPool();
-            return instance;
-        }
-    }
-
-    /**
-        @brief The SharedPtr template is a utility to manage pointers to an object.
-        @param T The type of the managed object
-
-        SharedPtr acts like a real pointer, except that it keeps track of the number of
-        references to the object. If the the number of references drops to zero, the
-        object is destroyed automatically.
-
-        @see See @ref SharedPtrExample "this description" for some examples and more information.
-
-        @note The number of references is stored in a separate object that is shared
-        among all instances of SharedPtr that point to the same pointer. This object is
-        also responsible for destroying the pointer if the reference counter becomes zero.
-    */
-    template <class T>
-    class SharedPtr
-    {
-        template <class O>
-        friend class SharedPtr;
-
-        public:
-            /// Default constructor, the pointer is set to NULL.
-            inline SharedPtr() : pointer_(0), counter_(0)
-            {
-            }
-
-            /// Constructor, creates a SharedPtr that points to @a pointer, increments the counter.
-            inline SharedPtr(T* pointer) : pointer_(pointer), counter_(0)
-            {
-                if (this->pointer_)
-                {
-                    void* chunk = detail::getSharedCounterPool().alloc();
-                    this->counter_ = new (chunk) detail::SharedCounterImpl<T>(this->pointer_);
-                }
-            }
-
-            /// Copy-constructor, this SharedPtr now points to the same object like the other SharedPtr, increments the counter.
-            inline SharedPtr(const SharedPtr& other) : pointer_(other.pointer_), counter_(other.counter_)
-            {
-                if (this->pointer_)
-                    ++this->counter_->count_;
-            }
-
-            /// Copy-constructor for SharedPtr with another template agument, increments the counter.
-            template <class O>
-            inline SharedPtr(const SharedPtr<O>& other) : pointer_(other.pointer_), counter_(other.counter_)
-            {
-                if (this->pointer_)
-                    ++this->counter_->count_;
-            }
-
-            /// Destructor, decrements the counter and deletes the object if the counter becomes zero.
-            inline ~SharedPtr()
-            {
-                if (this->pointer_)
-                {
-                    --this->counter_->count_;
-
-                    if (this->counter_->count_ == 0)
-                    {
-                        this->counter_->destroy();
-                        detail::getSharedCounterPool().free(this->counter_);
-                    }
-                }
-            }
-
-            /// Assigns a new object, decrements the counter of the old object, increments the counter of the new object.
-            inline SharedPtr& operator=(const SharedPtr& other)
-            {
-                SharedPtr(other).swap(*this);
-                return *this;
-            }
-
-            /// Assigns a new object with another template argument, decrements the counter of the old object, increments the counter of the new object.
-            template <class O>
-            inline SharedPtr& operator=(const SharedPtr<O>& other)
-            {
-                SharedPtr(other).swap(*this);
-                return *this;
-            }
-
-            /// Casts the pointer to another type
-            template <class O>
-            inline SharedPtr<O> cast() const
-            {
-                O* temp = static_cast<O*>(this->pointer_); // temp value for prettier compiler error in case of an invalid static_cast
-                return SharedPtr<O>(temp, this->counter_);
-            }
-
-            /// Overloaded -> operator, returns the pointer to the managed object.
-            inline T* operator->() const
-            {
-                assert(this->pointer_ != 0);
-                return this->pointer_;
-            }
-
-            /// Overloaded * operator, returns a reference ot the managed object.
-            inline T& operator*() const
-            {
-                assert(this->pointer_ != 0);
-                return *this->pointer_;
-            }
-
-            /// Returns the pointer to the managed object.
-            inline T* get() const
-            {
-                return this->pointer_;
-            }
-
-            /// Returns true if the pointer is not NULL.
-            inline operator bool() const
-            {
-                return (this->pointer_ != 0);
-            }
-
-            /// Swaps the pointer and the counter of two instances of SharedPtr with the same template argument.
-            inline void swap(SharedPtr& other)
-            {
-                std::swap(this->pointer_, other.pointer_);
-                std::swap(this->counter_, other.counter_);
-            }
-
-        private:
-            /// Private constructor, used by the cast() function.
-            inline SharedPtr(T* pointer, detail::SharedCounter* counter) : pointer_(pointer), counter_(counter)
-            {
-                if (this->pointer_)
-                    ++this->counter_->count_;
-            }
-
-            T* pointer_;                        ///< A pointer to the managed object of type @a T
-            detail::SharedCounter* counter_;    ///< A pointer to the shared reference counter
-    };
-
-    /**
-        @brief A child class of SharedPtr, used to reflect the hierarchy of the underlying class @a T.
-        @param T The type of the managed object
-        @param Parent The type of the SharedPtr that manages the parent class of @a T
-
-        This class is used to reflect the hierarchy of the underlying class @a T.
-        For example the @c Functor classes: While a @c Functor* pointer would be managed by
-        @c SharedPtr<Functor>, the child class @c FunctorStatic is managed by the class
-        <tt>SharedChildPtr<FunctorStatic, SharedPtr<Functor> ></tt>.
-
-        The second template argument @a Parent is used as the parent class of
-        SharedChildPtr. This means that each instance of <tt>SharedChildPtr<T, Parent></tt>
-        can be upcasted to @c Parent.
-
-        So for example this works:
-        @code
-        SharedChildPtr<FunctorStatic, SharedPtr<Functor> > functorStatic = createFunctor(&MyClass::myStaticFunction);
-        SharedPtr<Functor> functor = functorStatic;
-        @endcode
-
-        @note There are some typedefs and more to make the usage of SharedChildPtr easier
-        for the classes Functor and Executor. See FunctorPtr.h and ExecutorPtr.h. The above
-        example could thus be simplified the following way:
-        @code
-        FunctorStaticPtr functorStatic = createFunctor(&MyClass::myStaticFunction);
-        FunctorPtr functor = functorStatic;
-        @endcode
-
-        @see See SharedPtr for more information about the base class SharedPtr.
-        @see See @ref SharedPtrExample "this description" for some examples about how to use SharedPtr.
-    */
-    template <class T, class Parent>
-    class SharedChildPtr : public Parent
-    {
-        public:
-            inline SharedChildPtr() : Parent() {}
-            inline SharedChildPtr(T* pointer) : Parent(pointer) {}
-            inline SharedChildPtr(const SharedPtr<T>& other) : Parent(other) {}
-
-            inline T* operator->() const { return static_cast<T*>(Parent::operator->()); }
-            inline T& operator*() const { return *static_cast<T*>(Parent::operator->()); }
-    };
-
-}
-
-#endif /* _SharedPtr_H__ */
Index: code/trunk/src/libraries/util/SignalHandler.cc
===================================================================
--- code/trunk/src/libraries/util/SignalHandler.cc	(revision 11056)
+++ code/trunk/src/libraries/util/SignalHandler.cc	(revision 11071)
@@ -44,5 +44,5 @@
 namespace orxonox
 {
-    SignalHandler* SignalHandler::singletonPtr_s = NULL;
+    SignalHandler* SignalHandler::singletonPtr_s = nullptr;
 }
 
@@ -81,7 +81,7 @@
     void SignalHandler::dontCatch()
     {
-      for ( SignalRecList::iterator it = sigRecList.begin(); it != sigRecList.end(); it++ )
-      {
-        signal( it->signal, it->handler );
+      for (const SignalRec& sigRec : sigRecList)
+      {
+        signal( sigRec.signal, sigRec.handler );
       }
 
@@ -127,5 +127,5 @@
       }
       // if the signalhandler has already been destroyed then don't do anything
-      if( SignalHandler::singletonPtr_s == 0 )
+      if( SignalHandler::singletonPtr_s == nullptr )
       {
         orxout(user_error) << "Received signal " << sigName.c_str() << endl << "Can't write backtrace because SignalHandler is already destroyed" << endl;
@@ -133,7 +133,7 @@
       }
 
-      for ( SignalCallbackList::iterator it = SignalHandler::getInstance().callbackList.begin(); it != SignalHandler::getInstance().callbackList.end(); it++  )
-      {
-        (*(it->cb))( it->someData );
+      for (const SignalCallbackRec& callback : SignalHandler::getInstance().callbackList)
+      {
+        (*(callback.cb))( callback.someData );
       }
 
@@ -175,5 +175,5 @@
         dup2( gdbErr[1], STDERR_FILENO );
 
-        execlp( "sh", "sh", "-c", "gdb", static_cast<void*>(NULL));
+        execlp( "sh", "sh", "-c", "gdb", static_cast<void*>(nullptr));
       }
 
@@ -186,5 +186,5 @@
         perror("pipe failed!\n");
         kill( gdbPid, SIGTERM );
-        waitpid( gdbPid, NULL, 0 );
+        waitpid( gdbPid, nullptr, 0 );
         exit(EXIT_FAILURE);
       }
@@ -196,5 +196,5 @@
         perror("fork failed!\n");
         kill( gdbPid, SIGTERM );
-        waitpid( gdbPid, NULL, 0 );
+        waitpid( gdbPid, nullptr, 0 );
         exit(EXIT_FAILURE);
       }
@@ -297,6 +297,6 @@
 
 
-      waitpid( sigPid, NULL, 0 );
-      waitpid( gdbPid, NULL, 0 );
+      waitpid( sigPid, nullptr, 0 );
+      waitpid( gdbPid, nullptr, 0 );
 
       int wsRemoved = 0;
@@ -312,5 +312,5 @@
         bt.erase(0, 1);
 
-      time_t now = time(NULL);
+      time_t now = time(nullptr);
 
       std::string timeString =
@@ -388,5 +388,5 @@
     SignalHandler::SignalHandler()
     {
-        this->prevExceptionFilter_ = NULL;
+        this->prevExceptionFilter_ = nullptr;
     }
 
@@ -394,9 +394,9 @@
     SignalHandler::~SignalHandler()
     {
-        if (this->prevExceptionFilter_ != NULL)
+        if (this->prevExceptionFilter_ != nullptr)
         {
             // Remove the unhandled exception filter function
             SetUnhandledExceptionFilter(this->prevExceptionFilter_);
-            this->prevExceptionFilter_ = NULL;
+            this->prevExceptionFilter_ = nullptr;
         }
     }
@@ -408,7 +408,7 @@
 
         // don't register twice
-        assert(this->prevExceptionFilter_ == NULL);
-
-        if (this->prevExceptionFilter_ == NULL)
+        assert(this->prevExceptionFilter_ == nullptr);
+
+        if (this->prevExceptionFilter_ == nullptr)
         {
             // Install the unhandled exception filter function
@@ -430,5 +430,5 @@
 
             // if the signalhandler has already been destroyed then don't do anything
-            if (SignalHandler::singletonPtr_s == 0)
+            if (SignalHandler::singletonPtr_s == nullptr)
             {
                 orxout(user_error) << "Caught an unhandled exception" << endl << "Can't write backtrace because SignalHandler is already destroyed" << endl;
@@ -441,5 +441,5 @@
             std::ofstream crashlog(SignalHandler::getInstance().filename_.c_str());
 
-            time_t now = time(NULL);
+            time_t now = time(nullptr);
 
             crashlog << "=======================================================" << endl;
@@ -480,5 +480,5 @@
     }
 
-    /// Returns the stack trace for either the current function, or, if @a pExceptionInfo is not NULL, for the given exception context.
+    /// Returns the stack trace for either the current function, or, if @a pExceptionInfo is not nullptr, for the given exception context.
     /* static */ std::string SignalHandler::getStackTrace(PEXCEPTION_POINTERS pExceptionInfo)
     {
@@ -625,5 +625,5 @@
 #ifdef ORXONOX_COMPILER_GCC
                 int status;
-                char* demangled = __cxxabiv1::__cxa_demangle(symbol->Name, NULL, NULL, &status);
+                char* demangled = __cxxabiv1::__cxa_demangle(symbol->Name, nullptr, nullptr, &status);
                 if (demangled)
                 {
@@ -684,5 +684,5 @@
         HMODULE hModule;
 
-        std::string output = (GetModuleFileName(NULL, szModule, MAX_PATH) ? SignalHandler::getModuleName(szModule) : "Application");
+        std::string output = (GetModuleFileName(nullptr, szModule, MAX_PATH) ? SignalHandler::getModuleName(szModule) : "Application");
         output += " caused ";
 
Index: code/trunk/src/libraries/util/SignalHandler.h
===================================================================
--- code/trunk/src/libraries/util/SignalHandler.h	(revision 11056)
+++ code/trunk/src/libraries/util/SignalHandler.h	(revision 11071)
@@ -113,5 +113,5 @@
             void doCatch(const std::string& appName, const std::string& filename);
 
-            static std::string getStackTrace(PEXCEPTION_POINTERS pExceptionInfo = NULL);
+            static std::string getStackTrace(PEXCEPTION_POINTERS pExceptionInfo = nullptr);
             static std::string getExceptionType(PEXCEPTION_POINTERS pExceptionInfo);
 
Index: code/trunk/src/libraries/util/Singleton.h
===================================================================
--- code/trunk/src/libraries/util/Singleton.h	(revision 11056)
+++ code/trunk/src/libraries/util/Singleton.h	(revision 11071)
@@ -66,5 +66,5 @@
     And don't forget to initialize the static singleton pointer in the source (*.cc) %file:
     @code
-    TestSingleton* TestSingleton::singletonPtr_s = NULL;
+    TestSingleton* TestSingleton::singletonPtr_s = nullptr;
     @endcode
 
@@ -118,5 +118,5 @@
         static T& getInstance()
         {
-            OrxVerify(T::singletonPtr_s != NULL, "T=" << typeid(T).name());
+            OrxVerify(T::singletonPtr_s != nullptr, "T=" << typeid(T).name());
             return *T::singletonPtr_s;
         }
@@ -125,5 +125,5 @@
         static bool exists()
         {
-            return (T::singletonPtr_s != NULL);
+            return (T::singletonPtr_s != nullptr);
         }
 
@@ -132,5 +132,5 @@
         Singleton()
         {
-            OrxVerify(T::singletonPtr_s == NULL, "T=" << typeid(T).name());
+            OrxVerify(T::singletonPtr_s == nullptr, "T=" << typeid(T).name());
             T::singletonPtr_s = static_cast<T*>(this);
         }
@@ -139,10 +139,12 @@
         virtual ~Singleton()
         {
-            OrxVerify(T::singletonPtr_s != NULL, "T=" << typeid(T).name());
-            T::singletonPtr_s = NULL;
+            OrxVerify(T::singletonPtr_s != nullptr, "T=" << typeid(T).name());
+            T::singletonPtr_s = nullptr;
         }
 
     private:
-        Singleton(const Singleton& rhs); //!< Don't use (undefined)
+        // non-copyable:
+        Singleton(const Singleton&) = delete;
+        Singleton& operator=(const Singleton&) = delete;
     };
 }
Index: code/trunk/src/libraries/util/SmallObjectAllocator.cc
===================================================================
--- code/trunk/src/libraries/util/SmallObjectAllocator.cc	(revision 11056)
+++ code/trunk/src/libraries/util/SmallObjectAllocator.cc	(revision 11071)
@@ -45,5 +45,5 @@
         this->chunkSize_ = std::max(objectSize, sizeof(Chunk)); // the chunk's size will be the maximum of the object's size and the size of a Chunk object itself
         this->numChunksPerBlock_ = numObjects;
-        this->first_ = 0;
+        this->first_ = nullptr;
     }
 
@@ -53,6 +53,6 @@
     SmallObjectAllocator::~SmallObjectAllocator()
     {
-        for (std::vector<char*>::iterator it = this->blocks_.begin(); it != this->blocks_.end(); ++it)
-            delete[] *it;
+        for (char* block : this->blocks_)
+            delete[] block;
     }
 
@@ -97,6 +97,6 @@
                 setNext(block + i * this->chunkSize_, block + (i + 1) * this->chunkSize_);
 
-            // the next_ pointer of the last chunk must point to NULL
-            setNext(block + (this->numChunksPerBlock_ - 1) * this->chunkSize_, 0);
+            // the next_ pointer of the last chunk must point to nullptr
+            setNext(block + (this->numChunksPerBlock_ - 1) * this->chunkSize_, nullptr);
 
             // The second chunk in the block is assigned to the first_ pointer
Index: code/trunk/src/libraries/util/SmallObjectAllocator.h
===================================================================
--- code/trunk/src/libraries/util/SmallObjectAllocator.h	(revision 11056)
+++ code/trunk/src/libraries/util/SmallObjectAllocator.h	(revision 11071)
@@ -77,4 +77,5 @@
 #include "UtilPrereqs.h"
 #include <vector>
+#include <cstdio>
 
 namespace orxonox
Index: code/trunk/src/libraries/util/StringUtils.cc
===================================================================
--- code/trunk/src/libraries/util/StringUtils.cc	(revision 11056)
+++ code/trunk/src/libraries/util/StringUtils.cc	(revision 11071)
@@ -36,5 +36,4 @@
 #include <cctype>
 #include <ctime>
-#include <boost/scoped_array.hpp>
 #include "Convert.h"
 #include "Math.h"
@@ -263,7 +262,7 @@
         std::string output(str.size() * 2, ' ');
         size_t i = 0;
-        for (size_t pos = 0; pos < str.size(); ++pos)
-        {
-            switch (str[pos])
+        for (const char& character : str)
+        {
+            switch (character)
             {
             case '\\': output[i] = '\\'; output[i + 1] = '\\'; break;
@@ -277,5 +276,5 @@
             case  '"': output[i] = '\\'; output[i + 1] =  '"'; break;
             case '\0': output[i] = '\\'; output[i + 1] =  '0'; break;
-            default  : output[i] = str[pos]; ++i; continue;
+            default  : output[i] = character; ++i; continue;
             }
             i += 2;
@@ -337,7 +336,7 @@
     void lowercase(std::string* str)
     {
-        for (size_t i = 0; i < str->size(); ++i)
-        {
-            (*str)[i] = static_cast<char>(tolower((*str)[i]));
+        for (char& character : *str)
+        {
+            character = static_cast<char>(tolower(character));
         }
     }
@@ -354,7 +353,7 @@
     void uppercase(std::string* str)
     {
-        for (size_t i = 0; i < str->size(); ++i)
-        {
-            (*str)[i] = static_cast<char>(toupper((*str)[i]));
+        for (char& character : *str)
+        {
+            character = static_cast<char>(toupper(character));
         }
     }
@@ -461,9 +460,9 @@
     {
         size_t j = 0;
-        for (size_t i = 0; i < str.size(); ++i)
-        {
-            if (str[i] == target)
+        for (char& character : str)
+        {
+            if (character == target)
             {
-                str[i] = replacement;
+                character = replacement;
                 ++j;
             }
@@ -482,5 +481,5 @@
         size_t cols = str1.size() + 1;
         size_t rows = str2.size() + 1;
-        boost::scoped_array<int> matrix(new int[rows * cols]);
+        const std::unique_ptr<int[]> matrix(new int[rows * cols]);
 
         for (size_t r = 0; r < rows; ++r)
Index: code/trunk/src/libraries/util/SubString.cc
===================================================================
--- code/trunk/src/libraries/util/SubString.cc	(revision 11056)
+++ code/trunk/src/libraries/util/SubString.cc	(revision 11071)
@@ -112,5 +112,5 @@
         for (size_t i = 0; i < argc; ++i)
         {
-            this->tokens_.push_back(std::string(argv[i]));
+            this->tokens_.emplace_back(argv[i]);
             this->bTokenInSafemode_.push_back(false);
         }
@@ -265,10 +265,10 @@
         bool inSafemode = false;
 
-        if(start_state != SL_NORMAL && tokens.size() > 0)
+        if(start_state != SPLIT_LINE_STATE::NORMAL && tokens.size() > 0)
         {
             token = tokens[tokens.size()-1];
             tokens.pop_back();
         }
-        if(start_state != SL_NORMAL && bTokenInSafemode.size() > 0)
+        if(start_state != SPLIT_LINE_STATE::NORMAL && bTokenInSafemode.size() > 0)
         {
             inSafemode = bTokenInSafemode[bTokenInSafemode.size()-1];
@@ -280,8 +280,8 @@
             switch(state)
             {
-            case SL_NORMAL:
+            case SPLIT_LINE_STATE::NORMAL:
                 if(line[i] == escapeChar)
                 {
-                    state = SL_ESCAPE;
+                    state = SPLIT_LINE_STATE::ESCAPE;
                     if (!bRemoveEscapeChar)
                         token += line[i];
@@ -290,5 +290,5 @@
                 else if(line[i] == safemodeChar)
                 {
-                    state = SL_SAFEMODE;
+                    state = SPLIT_LINE_STATE::SAFEMODE;
                     inSafemode = true;
                     if (!bRemoveSafemodeChar)
@@ -298,5 +298,5 @@
                 else if(line[i] == openparenthesisChar)
                 {
-                    state = SL_PARENTHESES;
+                    state = SPLIT_LINE_STATE::PARENTHESES;
                     inSafemode = true;
                     if (!bRemoveParenthesisChars)
@@ -318,5 +318,5 @@
                     }
                     token += line[i];       // EAT
-                    state = SL_COMMENT;
+                    state = SPLIT_LINE_STATE::COMMENT;
                 }
                 else if(delimiters.find(line[i]) != std::string::npos)
@@ -334,5 +334,5 @@
                         inSafemode = false;
                     }
-                    state = SL_NORMAL;
+                    state = SPLIT_LINE_STATE::NORMAL;
                 }
                 else
@@ -353,5 +353,5 @@
                 }
                 break;
-            case SL_ESCAPE:
+            case SPLIT_LINE_STATE::ESCAPE:
                 if (!bRemoveSafemodeChar)
                     token += line[i];
@@ -368,10 +368,10 @@
                     else token += line[i];  // EAT
                 }
-                state = SL_NORMAL;
-                break;
-            case SL_SAFEMODE:
+                state = SPLIT_LINE_STATE::NORMAL;
+                break;
+            case SPLIT_LINE_STATE::SAFEMODE:
                 if(line[i] == safemodeChar)
                 {
-                    state = SL_NORMAL;
+                    state = SPLIT_LINE_STATE::NORMAL;
                     if (!bRemoveSafemodeChar)
                         token += line[i];
@@ -379,5 +379,5 @@
                 else if(line[i] == escapeChar)
                 {
-                    state = SL_SAFEESCAPE;
+                    state = SPLIT_LINE_STATE::SAFEESCAPE;
                 }
                 else
@@ -387,5 +387,5 @@
                 break;
 
-            case SL_SAFEESCAPE:
+            case SPLIT_LINE_STATE::SAFEESCAPE:
                 if(line[i] == 'n') token += '\n';
                 else if(line[i] == 't') token += '\t';
@@ -397,11 +397,11 @@
                 else if(line[i] == '?') token += '\?';
                 else token += line[i];  // EAT
-                state = SL_SAFEMODE;
-                break;
-
-            case SL_PARENTHESES:
+                state = SPLIT_LINE_STATE::SAFEMODE;
+                break;
+
+            case SPLIT_LINE_STATE::PARENTHESES:
                 if(line[i] == closeparenthesisChar)
                 {
-                    state = SL_NORMAL;
+                    state = SPLIT_LINE_STATE::NORMAL;
                     if (!bRemoveParenthesisChars)
                         token += line[i];
@@ -409,5 +409,5 @@
                 else if(line[i] == escapeChar)
                 {
-                    state = SL_PARENTHESESESCAPE;
+                    state = SPLIT_LINE_STATE::PARENTHESESESCAPE;
                 }
                 else
@@ -417,5 +417,5 @@
                 break;
 
-            case SL_PARENTHESESESCAPE:
+            case SPLIT_LINE_STATE::PARENTHESESESCAPE:
                 if(line[i] == 'n') token += '\n';
                 else if(line[i] == 't') token += '\t';
@@ -427,8 +427,8 @@
                 else if(line[i] == '?') token += '\?';
                 else token += line[i];  // EAT
-                state = SL_PARENTHESES;
-                break;
-
-            case SL_COMMENT:
+                state = SPLIT_LINE_STATE::PARENTHESES;
+                break;
+
+            case SPLIT_LINE_STATE::COMMENT:
                 if(line[i] == '\n')
                 {
@@ -441,5 +441,5 @@
                         inSafemode = false;
                     }
-                    state = SL_NORMAL;
+                    state = SPLIT_LINE_STATE::NORMAL;
                 }
                 else
Index: code/trunk/src/libraries/util/SubString.h
===================================================================
--- code/trunk/src/libraries/util/SubString.h	(revision 11056)
+++ code/trunk/src/libraries/util/SubString.h	(revision 11071)
@@ -102,13 +102,13 @@
     {
         /// An enumerator for the internal state of the parser
-        enum SPLIT_LINE_STATE
+        enum class SPLIT_LINE_STATE
         {
-            SL_NORMAL,            //!< Normal state
-            SL_ESCAPE,            //!< After an escape character
-            SL_SAFEMODE,          //!< In safe mode (usually between quotation marks).
-            SL_SAFEESCAPE,        //!< In safe mode with the internal escape character, that escapes even the savemode character.
-            SL_COMMENT,           //!< In Comment mode.
-            SL_PARENTHESES,       //!< Between parentheses (usually '{' and '}')
-            SL_PARENTHESESESCAPE, //!< Between parentheses with the internal escape character, that escapes even the closing parenthesis character.
+            NORMAL,            //!< Normal state
+            ESCAPE,            //!< After an escape character
+            SAFEMODE,          //!< In safe mode (usually between quotation marks).
+            SAFEESCAPE,        //!< In safe mode with the internal escape character, that escapes even the savemode character.
+            COMMENT,           //!< In Comment mode.
+            PARENTHESES,       //!< Between parentheses (usually '{' and '}')
+            PARENTHESESESCAPE, //!< Between parentheses with the internal escape character, that escapes even the closing parenthesis character.
         };
 
@@ -204,5 +204,5 @@
                                           bool bRemoveParenthesisChars = true,
                                           char commentChar = '\0',
-                                          SPLIT_LINE_STATE start_state = SL_NORMAL);
+                                          SPLIT_LINE_STATE start_state = SPLIT_LINE_STATE::NORMAL);
 
         std::vector<std::string>  tokens_;              ///< The tokens after splitting the input line
Index: code/trunk/src/libraries/util/UtilPrereqs.h
===================================================================
--- code/trunk/src/libraries/util/UtilPrereqs.h	(revision 11056)
+++ code/trunk/src/libraries/util/UtilPrereqs.h	(revision 11071)
@@ -37,4 +37,5 @@
 
 #include "OrxonoxConfig.h"
+#include <string>
 
 //-----------------------------------------------------------------------
@@ -80,6 +81,4 @@
     class OutputStream;
     class ScopeListener;
-    template <class T>
-    class SharedPtr;
     class SignalHandler;
     template <class T>
Index: code/trunk/src/libraries/util/output/BaseWriter.cc
===================================================================
--- code/trunk/src/libraries/util/output/BaseWriter.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/BaseWriter.cc	(revision 11071)
@@ -47,5 +47,5 @@
         this->configurableMaxLevel_ = level::none;
         this->configurableAdditionalContextsMaxLevel_ = level::verbose;
-        this->configurableAdditionalContexts_.push_back("example");
+        this->configurableAdditionalContexts_.emplace_back("example");
 
         this->changedConfigurableLevel();
@@ -116,8 +116,6 @@
 
         // iterate over all strings in the config-vector
-        for (size_t i = 0; i < this->configurableAdditionalContexts_.size(); ++i)
+        for (const std::string& full_name : this->configurableAdditionalContexts_)
         {
-            const std::string& full_name = this->configurableAdditionalContexts_[i];
-
             // split the name into main-name and sub-name (if given; otherwise sub-name remains empty). both names are separated by ::
             std::string name = full_name;
Index: code/trunk/src/libraries/util/output/BaseWriter.h
===================================================================
--- code/trunk/src/libraries/util/output/BaseWriter.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/BaseWriter.h	(revision 11071)
@@ -103,5 +103,5 @@
 
         protected:
-            virtual void output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines);
+            virtual void output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines) override;
 
         private:
Index: code/trunk/src/libraries/util/output/ConsoleWriter.h
===================================================================
--- code/trunk/src/libraries/util/output/ConsoleWriter.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/ConsoleWriter.h	(revision 11071)
@@ -53,5 +53,4 @@
         public:
             ConsoleWriter(std::ostream& outputStream);
-            ConsoleWriter(const ConsoleWriter&);
             virtual ~ConsoleWriter();
 
@@ -63,7 +62,11 @@
 
         protected:
-            virtual void printLine(const std::string& line, OutputLevel level);
+            virtual void printLine(const std::string& line, OutputLevel level) override;
 
         private:
+            // non-copyable:
+            ConsoleWriter(const ConsoleWriter&) = delete;
+            ConsoleWriter& operator=(const ConsoleWriter&) = delete;
+
             std::ostream& outputStream_; ///< The ostream to which the console writer writes its output
             bool bEnabled_;              ///< If false, the instance will not write output to the console.
Index: code/trunk/src/libraries/util/output/LogWriter.cc
===================================================================
--- code/trunk/src/libraries/util/output/LogWriter.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/LogWriter.cc	(revision 11071)
@@ -35,4 +35,5 @@
 
 #include <ctime>
+#include <chrono>
 #include <cstdlib>
 
@@ -43,5 +44,5 @@
 namespace orxonox
 {
-    static const int MAX_ARCHIVED_FILES = 9;
+    static constexpr int MAX_ARCHIVED_FILES = 9;
 
     /**
@@ -180,14 +181,20 @@
             return;
 
+        // get the milliseconds
+        std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
+        std::chrono::system_clock::duration timeSinceEpoch = now.time_since_epoch();
+        std::chrono::milliseconds millisSinceEpoch = std::chrono::duration_cast<std::chrono::milliseconds>(timeSinceEpoch);
+        unsigned int millis = (millisSinceEpoch.count() % 1000);
+
         // get the current time
-        time_t rawtime;
-        struct tm* timeinfo;
-        time(&rawtime);
-        timeinfo = localtime(&rawtime);
+        time_t rawtime = std::chrono::system_clock::to_time_t(now);
+        struct tm* timeinfo = localtime(&rawtime);
+
+        // format time: hh:mm:ss:xxx
+        char buffer[13];
+        snprintf(buffer, sizeof(buffer), "%.2i:%.2i:%.2i:%.3i", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, millis);
 
         // print timestamp and output line to the log file
-        this->file_ << (timeinfo->tm_hour < 10 ? "0" : "") << timeinfo->tm_hour << ':' <<
-                       (timeinfo->tm_min  < 10 ? "0" : "") << timeinfo->tm_min  << ':' <<
-                       (timeinfo->tm_sec  < 10 ? "0" : "") << timeinfo->tm_sec  << ' ' << line << std::endl;
+        this->file_ << buffer << ' ' << line << std::endl;
     }
 }
Index: code/trunk/src/libraries/util/output/LogWriter.h
===================================================================
--- code/trunk/src/libraries/util/output/LogWriter.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/LogWriter.h	(revision 11071)
@@ -57,5 +57,4 @@
         public:
             LogWriter();
-            LogWriter(const LogWriter&);
             virtual ~LogWriter();
 
@@ -70,7 +69,11 @@
 
         protected:
-            virtual void printLine(const std::string& line, OutputLevel level);
+            virtual void printLine(const std::string& line, OutputLevel level) override;
 
         private:
+            // non-copyable:
+            LogWriter(const LogWriter&) = delete;
+            LogWriter& operator=(const LogWriter&) = delete;
+
             void openFile();
             void closeFile();
Index: code/trunk/src/libraries/util/output/MemoryWriter.cc
===================================================================
--- code/trunk/src/libraries/util/output/MemoryWriter.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/MemoryWriter.cc	(revision 11071)
@@ -57,5 +57,5 @@
     void MemoryWriter::output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines)
     {
-        this->messages_.push_back(Message(level, context, lines));
+        this->messages_.emplace_back(level, context, lines);
     }
 
@@ -65,7 +65,6 @@
     void MemoryWriter::resendOutput(OutputListener* listener) const
     {
-        for (size_t i = 0; i < this->messages_.size(); ++i)
+        for (const Message& message : this->messages_)
         {
-            const Message& message = this->messages_[i];
             listener->unfilteredOutput(message.level, *message.context, message.lines);
         }
Index: code/trunk/src/libraries/util/output/MemoryWriter.h
===================================================================
--- code/trunk/src/libraries/util/output/MemoryWriter.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/MemoryWriter.h	(revision 11071)
@@ -68,5 +68,4 @@
         public:
             MemoryWriter();
-            MemoryWriter(const MemoryWriter&);
             virtual ~MemoryWriter();
 
@@ -75,7 +74,11 @@
 
         protected:
-            virtual void output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines);
+            virtual void output(OutputLevel level, const OutputContextContainer& context, const std::vector<std::string>& lines) override;
 
         private:
+            // non-copyable:
+            MemoryWriter(const MemoryWriter&) = delete;
+            MemoryWriter& operator=(const MemoryWriter&) = delete;
+
             std::vector<Message> messages_; ///< Stores all output messages from the creation of this instance until disable() is called.
     };
Index: code/trunk/src/libraries/util/output/OutputDefinitions.h
===================================================================
--- code/trunk/src/libraries/util/output/OutputDefinitions.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/OutputDefinitions.h	(revision 11071)
@@ -132,8 +132,8 @@
     namespace context
     {
-        static const OutputContextMask all       = 0xFFFFFFFFFFFFFFFFull; ///< Context mask, all bits set to 1
-        static const OutputContextMask none      = 0x0000000000000000ull; ///< Context mask, all bits set to 0
+        static constexpr OutputContextMask all       = 0xFFFFFFFFFFFFFFFFull; ///< Context mask, all bits set to 1
+        static constexpr OutputContextMask none      = 0x0000000000000000ull; ///< Context mask, all bits set to 0
 
-        static const OutputContextSubID no_subcontext = 0; ///< Used as ID for contexts which are not sub-contexts
+        static constexpr OutputContextSubID no_subcontext = 0; ///< Used as ID for contexts which are not sub-contexts
 
         namespace
Index: code/trunk/src/libraries/util/output/OutputListener.cc
===================================================================
--- code/trunk/src/libraries/util/output/OutputListener.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/OutputListener.cc	(revision 11071)
@@ -111,6 +111,6 @@
         this->levelMask_ = mask;
 
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            this->listeners_[i]->updatedLevelMask(this);
+        for (AdditionalContextListener* listener : this->listeners_)
+            listener->updatedLevelMask(this);
     }
 
@@ -142,6 +142,6 @@
         this->additionalContextsLevelMask_ = mask;
 
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            this->listeners_[i]->updatedAdditionalContextsLevelMask(this);
+        for (AdditionalContextListener* listener : this->listeners_)
+            listener->updatedAdditionalContextsLevelMask(this);
     }
 
@@ -153,6 +153,6 @@
         this->additionalContextsMask_ = mask;
 
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            this->listeners_[i]->updatedAdditionalContextsMask(this);
+        for (AdditionalContextListener* listener : this->listeners_)
+            listener->updatedAdditionalContextsMask(this);
     }
 
Index: code/trunk/src/libraries/util/output/OutputManager.cc
===================================================================
--- code/trunk/src/libraries/util/output/OutputManager.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/OutputManager.cc	(revision 11071)
@@ -41,5 +41,4 @@
 #include "util/Output.h"
 #include "util/StringUtils.h"
-#include "util/SharedPtr.h"
 
 namespace orxonox
@@ -57,7 +56,7 @@
 
         this->isInitialized_ = false;
-        this->memoryWriterInstance_ = 0;
-        this->consoleWriterInstance_ = 0;
-        this->logWriterInstance_ = 0;
+        this->memoryWriterInstance_ = nullptr;
+        this->consoleWriterInstance_ = nullptr;
+        this->logWriterInstance_ = nullptr;
 
         // register 'undefined' context in order to give it always the first context-ID
@@ -81,7 +80,7 @@
     }
 
-    /*static*/ SharedPtr<OutputManager>& OutputManager::Testing::getInstancePointer()
-    {
-        static SharedPtr<OutputManager> instance(new OutputManager());
+    /*static*/ std::shared_ptr<OutputManager>& OutputManager::Testing::getInstancePointer()
+    {
+        static std::shared_ptr<OutputManager> instance(new OutputManager());
         return instance;
     }
@@ -132,6 +131,6 @@
         vectorize(message, '\n', &lines);
 
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            this->listeners_[i]->unfilteredOutput(level, context, lines);
+        for (OutputListener* listener : this->listeners_)
+            listener->unfilteredOutput(level, context, lines);
     }
 
@@ -179,6 +178,6 @@
     {
         int mask = 0;
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            mask |= this->listeners_[i]->getLevelMask();
+        for (OutputListener* listener : this->listeners_)
+            mask |= listener->getLevelMask();
         this->combinedLevelMask_ = static_cast<OutputLevel>(mask);
     }
@@ -190,6 +189,6 @@
     {
         int mask = 0;
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            mask |= this->listeners_[i]->getAdditionalContextsLevelMask();
+        for (OutputListener* listener : this->listeners_)
+            mask |= listener->getAdditionalContextsLevelMask();
         this->combinedAdditionalContextsLevelMask_ = static_cast<OutputLevel>(mask);
     }
@@ -201,6 +200,6 @@
     {
         this->combinedAdditionalContextsMask_ = 0;
-        for (size_t i = 0; i < this->listeners_.size(); ++i)
-            this->combinedAdditionalContextsMask_ |= this->listeners_[i]->getAdditionalContextsMask();
+        for (OutputListener* listener : this->listeners_)
+            this->combinedAdditionalContextsMask_ |= listener->getAdditionalContextsMask();
     }
 
Index: code/trunk/src/libraries/util/output/OutputManager.h
===================================================================
--- code/trunk/src/libraries/util/output/OutputManager.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/OutputManager.h	(revision 11071)
@@ -41,4 +41,5 @@
 #include <vector>
 #include <map>
+#include <memory>
 
 #include "OutputDefinitions.h"
@@ -66,5 +67,4 @@
         public:
             OutputManager();
-            OutputManager(const OutputManager&);
             virtual ~OutputManager();
 
@@ -81,9 +81,9 @@
             virtual void unregisterListener(OutputListener* listener);
 
-            virtual void updatedLevelMask(const OutputListener* listener)
+            virtual void updatedLevelMask(const OutputListener* listener) override
                 { this->updateCombinedLevelMask(); }
-            virtual void updatedAdditionalContextsLevelMask(const OutputListener* listener)
+            virtual void updatedAdditionalContextsLevelMask(const OutputListener* listener) override
                 { this->updateCombinedAdditionalContextsLevelMask(); }
-            virtual void updatedAdditionalContextsMask(const OutputListener* listener)
+            virtual void updatedAdditionalContextsMask(const OutputListener* listener) override
                 { this->updateCombinedAdditionalContextsMask(); }
 
@@ -114,4 +114,8 @@
 
         private:
+            // non-copyable:
+            OutputManager(const OutputManager&) = delete;
+            OutputManager& operator=(const OutputManager&) = delete;
+
             void updateMasks();
             void updateCombinedLevelMask();
@@ -137,5 +141,5 @@
             struct _UtilExport Testing
             {
-                static SharedPtr<OutputManager>& getInstancePointer();
+                static std::shared_ptr<OutputManager>& getInstancePointer();
             };
     };
Index: code/trunk/src/libraries/util/output/OutputStream.cc
===================================================================
--- code/trunk/src/libraries/util/output/OutputStream.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/OutputStream.cc	(revision 11071)
@@ -41,7 +41,6 @@
         @brief Default constructor, initializes level and context with default values.
     */
-    OutputStream::OutputStream()
+    OutputStream::OutputStream() : OutputStream(level::debug_output, context::undefined())
     {
-        this->setOutputAttributes(level::debug_output, context::undefined());
     }
 
Index: code/trunk/src/libraries/util/output/SubcontextOutputListener.cc
===================================================================
--- code/trunk/src/libraries/util/output/SubcontextOutputListener.cc	(revision 11056)
+++ code/trunk/src/libraries/util/output/SubcontextOutputListener.cc	(revision 11071)
@@ -79,8 +79,8 @@
 
         // compose the mask of subcontexts and build the set of sub-context-IDs
-        for (std::set<const OutputContextContainer*>::const_iterator it = subcontexts.begin(); it != subcontexts.end(); ++it)
+        for (const OutputContextContainer* subcontext : subcontexts)
         {
-            this->subcontextsCheckMask_ |= (*it)->mask;
-            this->subcontexts_.insert((*it)->sub_id);
+            this->subcontextsCheckMask_ |= subcontext->mask;
+            this->subcontexts_.insert(subcontext->sub_id);
         }
 
Index: code/trunk/src/libraries/util/output/SubcontextOutputListener.h
===================================================================
--- code/trunk/src/libraries/util/output/SubcontextOutputListener.h	(revision 11056)
+++ code/trunk/src/libraries/util/output/SubcontextOutputListener.h	(revision 11071)
@@ -73,8 +73,8 @@
             virtual ~SubcontextOutputListener();
 
-            virtual void setAdditionalContextsMask(OutputContextMask mask);
+            virtual void setAdditionalContextsMask(OutputContextMask mask) override;
             void setAdditionalSubcontexts(const std::set<const OutputContextContainer*>& subcontexts);
 
-            virtual bool acceptsOutput(OutputLevel level, const OutputContextContainer& context) const;
+            virtual bool acceptsOutput(OutputLevel level, const OutputContextContainer& context) const override;
 
             inline const std::set<OutputContextSubID>& getSubcontexts() const
Index: code/trunk/src/modules/designtools/CreateStars.h
===================================================================
--- code/trunk/src/modules/designtools/CreateStars.h	(revision 11056)
+++ code/trunk/src/modules/designtools/CreateStars.h	(revision 11071)
@@ -43,5 +43,5 @@
             void createBillboards();
 
-            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void setNumStars(int num) {
Index: code/trunk/src/modules/designtools/ScreenshotManager.cc
===================================================================
--- code/trunk/src/modules/designtools/ScreenshotManager.cc	(revision 11056)
+++ code/trunk/src/modules/designtools/ScreenshotManager.cc	(revision 11071)
@@ -69,5 +69,5 @@
         Constructor. 
     */
-    ScreenshotManager::ScreenshotManager() : finalPicturePB_(NULL), data_(NULL)
+    ScreenshotManager::ScreenshotManager() : finalPicturePB_(nullptr), data_(nullptr)
     {
         RegisterObject(ScreenshotManager);
@@ -90,13 +90,13 @@
     void ScreenshotManager::cleanup(void)
     {
-        if(this->finalPicturePB_ != NULL)
+        if(this->finalPicturePB_ != nullptr)
         {
             delete this->finalPicturePB_;
-            this->finalPicturePB_ = NULL;
-        }
-        if(this->data_ != NULL)
+            this->finalPicturePB_ = nullptr;
+        }
+        if(this->data_ != nullptr)
         {
             delete this->data_;
-            this->data_ = NULL;
+            this->data_ = nullptr;
         }
         if(!this->tempTexture_.isNull())
@@ -151,5 +151,5 @@
         // Get the screenshot.
         Ogre::Image* finalImage = getScreenshot();
-        if(finalImage != NULL)
+        if(finalImage != nullptr)
         {
             // Save it.
@@ -173,6 +173,6 @@
     Ogre::Image* ScreenshotManager::getScreenshot()
     {
-        if(CameraManager::getInstance().getActiveCamera() == NULL )
-            return NULL;
+        if(CameraManager::getInstance().getActiveCamera() == nullptr )
+            return nullptr;
         return this->getScreenshot(CameraManager::getInstance().getActiveCamera()->getOgreCamera());
     }
@@ -189,6 +189,6 @@
     Ogre::Image* ScreenshotManager::getScreenshot(Ogre::Camera* camera)
     {
-        if(camera == NULL)
-            return NULL;
+        if(camera == nullptr)
+            return nullptr;
         
         // Update the internal parameters.
Index: code/trunk/src/modules/designtools/SkyboxGenerator.cc
===================================================================
--- code/trunk/src/modules/designtools/SkyboxGenerator.cc	(revision 11056)
+++ code/trunk/src/modules/designtools/SkyboxGenerator.cc	(revision 11071)
@@ -82,17 +82,17 @@
         this->faceCounter_ = 0;
         
-        this->names_.push_back("fr");
-        this->names_.push_back("lf");
-        this->names_.push_back("bk");
-        this->names_.push_back("rt");
-        this->names_.push_back("up");
-        this->names_.push_back("dn");
-        
-        this->rotations_.push_back(std::pair<int, int>(90, 0));
-        this->rotations_.push_back(std::pair<int, int>(90, 0));
-        this->rotations_.push_back(std::pair<int, int>(90, 0));
-        this->rotations_.push_back(std::pair<int, int>(90, 90));
-        this->rotations_.push_back(std::pair<int, int>(0, 180));
-        this->rotations_.push_back(std::pair<int, int>(0, 90));
+        this->names_.emplace_back("fr");
+        this->names_.emplace_back("lf");
+        this->names_.emplace_back("bk");
+        this->names_.emplace_back("rt");
+        this->names_.emplace_back("up");
+        this->names_.emplace_back("dn");
+        
+        this->rotations_.emplace_back(90, 0);
+        this->rotations_.emplace_back(90, 0);
+        this->rotations_.emplace_back(90, 0);
+        this->rotations_.emplace_back(90, 90);
+        this->rotations_.emplace_back(0, 180);
+        this->rotations_.emplace_back(0, 90);
     }
 
@@ -146,6 +146,6 @@
             }
 
-            ControllableEntity* entity = NULL;
-            if(HumanController::getLocalControllerSingleton() != NULL && HumanController::getLocalControllerSingleton()->getControllableEntity() != NULL)
+            ControllableEntity* entity = nullptr;
+            if(HumanController::getLocalControllerSingleton() != nullptr && HumanController::getLocalControllerSingleton()->getControllableEntity() != nullptr)
                 entity = HumanController::getLocalControllerSingleton()->getControllableEntity();
             else
Index: code/trunk/src/modules/designtools/SkyboxGenerator.h
===================================================================
--- code/trunk/src/modules/designtools/SkyboxGenerator.h	(revision 11056)
+++ code/trunk/src/modules/designtools/SkyboxGenerator.h	(revision 11071)
@@ -65,5 +65,5 @@
             SkyboxGenerator();
             virtual ~SkyboxGenerator();
-            void tick(float dt); // This is where the skybox generation happens.
+            virtual void tick(float dt) override; // This is where the skybox generation happens.
             static void createSkybox(void); // Generate the 6 faces of a skybox.
             void setConfigValues(void); // Sets some config values.
@@ -106,5 +106,5 @@
             
             std::vector<std::string> names_; //!< The names of the image files for the skybox faces to be generated.
-            std::vector< std::pair<int, int> > rotations_; //!< The rotation in yaw an pitch direction that is applied to the camera after a specific face has been generated.
+            std::vector< std::pair<int, int>> rotations_; //!< The rotation in yaw an pitch direction that is applied to the camera after a specific face has been generated.
             
             // Storage variables
Index: code/trunk/src/modules/docking/Dock.cc
===================================================================
--- code/trunk/src/modules/docking/Dock.cc	(revision 11056)
+++ code/trunk/src/modules/docking/Dock.cc	(revision 11071)
@@ -87,8 +87,8 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        PlayerInfo* player = NULL;
+        PlayerInfo* player = nullptr;
 
         // Check whether it is a player trigger and extract pawn from it
-        if(pTrigger != NULL)
+        if(pTrigger != nullptr)
         {
             if(!pTrigger->isForPlayer()) {  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
@@ -103,5 +103,5 @@
             return false;
         }
-        if(player == NULL)
+        if(player == nullptr)
         {
             orxout(verbose, context::docking) << "Docking::execute Can't retrieve PlayerInfo from Trigger. (" << trigger->getIdentifier()->getName() << ")" << endl;
@@ -131,8 +131,8 @@
     {
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        PlayerInfo* player = NULL;
+        PlayerInfo* player = nullptr;
 
         // Check whether it is a player trigger and extract pawn from it
-        if(pTrigger != NULL)
+        if(pTrigger != nullptr)
         {
             if(!pTrigger->isForPlayer()) {  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
@@ -147,5 +147,5 @@
             return false;
         }
-        if(player == NULL)
+        if(player == nullptr)
         {
             orxout(verbose, context::docking) << "Docking::execute Can't retrieve PlayerInfo from Trigger. (" << trigger->getIdentifier()->getName() << ")" << endl;
@@ -214,7 +214,7 @@
     {
         PlayerInfo* player = HumanController::getLocalControllerSingleton()->getPlayer();
-        for(ObjectList<Dock>::iterator it = ObjectList<Dock>::begin(); it != ObjectList<Dock>::end(); ++it)
-        {
-            if(it->dock(player))
+        for(Dock* dock : ObjectList<Dock>())
+        {
+            if(dock->dock(player))
                 break;
         }
@@ -224,7 +224,7 @@
     {
         PlayerInfo* player = HumanController::getLocalControllerSingleton()->getPlayer();
-        for(ObjectList<Dock>::iterator it = ObjectList<Dock>::begin(); it != ObjectList<Dock>::end(); ++it)
-        {
-            if(it->undock(player))
+        for(Dock* dock : ObjectList<Dock>())
+        {
+            if(dock->undock(player))
                 break;
         }
@@ -295,7 +295,7 @@
         int i = 0;
         PlayerInfo* player = HumanController::getLocalControllerSingleton()->getPlayer();
-        for(ObjectList<Dock>::iterator it = ObjectList<Dock>::begin(); it != ObjectList<Dock>::end(); ++it)
-        {
-            if(it->candidates_.find(player) != it->candidates_.end())
+        for(Dock* dock : ObjectList<Dock>())
+        {
+            if(dock->candidates_.find(player) != dock->candidates_.end())
                 i++;
         }
@@ -306,14 +306,14 @@
     {
         PlayerInfo* player = HumanController::getLocalControllerSingleton()->getPlayer();
-        for(ObjectList<Dock>::iterator it = ObjectList<Dock>::begin(); it != ObjectList<Dock>::end(); ++it)
-        {
-            if(it->candidates_.find(player) != it->candidates_.end())
+        for(Dock* dock : ObjectList<Dock>())
+        {
+            if(dock->candidates_.find(player) != dock->candidates_.end())
             {
                 if(index == 0)
-                    return *it;
+                    return dock;
                 index--;
             }
         }
-        return NULL;
+        return nullptr;
     }
 
@@ -327,11 +327,11 @@
     const DockingEffect* Dock::getEffect(unsigned int i) const
     {
-        for (std::list<DockingEffect*>::const_iterator effect = this->effects_.begin(); effect != this->effects_.end(); ++effect)
+        for (DockingEffect* effect : this->effects_)
         {
             if(i == 0)
-               return *effect;
+               return effect;
             i--;
         }
-        return NULL;
+        return nullptr;
     }
 
@@ -346,11 +346,11 @@
     const DockingAnimation* Dock::getAnimation(unsigned int i) const
     {
-        for (std::list<DockingAnimation*>::const_iterator animation = this->animations_.begin(); animation != this->animations_.end(); ++animation)
+        for (DockingAnimation* animation : this->animations_)
         {
             if(i == 0)
-               return *animation;
+               return animation;
             i--;
         }
-        return NULL;
+        return nullptr;
     }
 }
Index: code/trunk/src/modules/docking/Dock.h
===================================================================
--- code/trunk/src/modules/docking/Dock.h	(revision 11056)
+++ code/trunk/src/modules/docking/Dock.h	(revision 11071)
@@ -65,6 +65,6 @@
 
             // XML interface
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             // XML functions
Index: code/trunk/src/modules/docking/DockToShip.cc
===================================================================
--- code/trunk/src/modules/docking/DockToShip.cc	(revision 11056)
+++ code/trunk/src/modules/docking/DockToShip.cc	(revision 11071)
@@ -72,5 +72,5 @@
 
         DockingTarget *target = DockingEffect::findTarget(this->target_);
-        if (target == NULL) {
+        if (target == nullptr) {
             orxout(internal_warning, context::docking) << "Can't retrieve target for '" << this->target_ << "'.." << endl;
             return false;
@@ -78,5 +78,5 @@
 
         ControllableEntity *dockTo = (ControllableEntity*) target->getParent();
-        if (dockTo == NULL) {
+        if (dockTo == nullptr) {
             orxout(internal_warning, context::docking) << "Parent is not a ControllableEntity.." << endl;
             return false;
Index: code/trunk/src/modules/docking/DockToShip.h
===================================================================
--- code/trunk/src/modules/docking/DockToShip.h	(revision 11056)
+++ code/trunk/src/modules/docking/DockToShip.h	(revision 11071)
@@ -60,10 +60,10 @@
             virtual ~DockToShip();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             void setTargetId(const std::string& str);
             const std::string& getTargetId() const;
 
-            virtual bool docking(PlayerInfo* player); //!< Called when docking starts
-            virtual bool release(PlayerInfo* player); //!< Called when player wants undock
+            virtual bool docking(PlayerInfo* player) override; //!< Called when docking starts
+            virtual bool release(PlayerInfo* player) override; //!< Called when player wants undock
         private:
             std::string target_;
Index: code/trunk/src/modules/docking/DockingAnimation.cc
===================================================================
--- code/trunk/src/modules/docking/DockingAnimation.cc	(revision 11056)
+++ code/trunk/src/modules/docking/DockingAnimation.cc	(revision 11071)
@@ -45,5 +45,5 @@
         RegisterObject(DockingAnimation);
 
-        this->parent_ = NULL;
+        this->parent_ = nullptr;
     }
 
@@ -57,10 +57,10 @@
         bool check = true;
 
-        for (std::list<DockingAnimation*>::iterator animation = animations.begin(); animation != animations.end(); animation++)
+        for (DockingAnimation* animation : animations)
         {
             if(dock)
-                check &= (*animation)->docking(player);
+                check &= animation->docking(player);
             else
-                check &= (*animation)->release(player);
+                check &= animation->release(player);
         }
 
Index: code/trunk/src/modules/docking/DockingController.cc
===================================================================
--- code/trunk/src/modules/docking/DockingController.cc	(revision 11056)
+++ code/trunk/src/modules/docking/DockingController.cc	(revision 11071)
@@ -44,7 +44,7 @@
         RegisterObject(DockingController);
 
-        this->dock_ = NULL;
-        this->player_ = NULL;
-        this->entity_ = NULL;
+        this->dock_ = nullptr;
+        this->player_ = nullptr;
+        this->entity_ = nullptr;
     }
 
@@ -122,5 +122,5 @@
         this->player_->startControl(this->entity_);
         this->setActive(false);
-        this->controllableEntity_ = NULL;
+        this->controllableEntity_ = nullptr;
 
         if (this->docking_)
Index: code/trunk/src/modules/docking/DockingController.h
===================================================================
--- code/trunk/src/modules/docking/DockingController.h	(revision 11056)
+++ code/trunk/src/modules/docking/DockingController.h	(revision 11071)
@@ -45,5 +45,5 @@
             virtual ~DockingController();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             void takeControl(bool docking);
@@ -53,5 +53,5 @@
 
         protected:
-            virtual void positionReached();
+            virtual void positionReached() override;
 
         private:
Index: code/trunk/src/modules/docking/DockingEffect.cc
===================================================================
--- code/trunk/src/modules/docking/DockingEffect.cc	(revision 11056)
+++ code/trunk/src/modules/docking/DockingEffect.cc	(revision 11071)
@@ -53,10 +53,10 @@
         bool check = true;
 
-        for (std::list<DockingEffect*>::iterator effect = effects.begin(); effect != effects.end(); effect++)
+        for (DockingEffect* effect : effects)
         {
             if (dock)
-                check &= (*effect)->docking(player);
+                check &= effect->docking(player);
             else
-                check &= (*effect)->release(player);
+                check &= effect->release(player);
         }
 
@@ -65,10 +65,10 @@
 
     DockingTarget *DockingEffect::findTarget(std::string name) {
-        for (ObjectList<DockingTarget>::iterator it = ObjectList<DockingTarget>::begin(); it != ObjectList<DockingTarget>::end(); ++it)
+        for (DockingTarget* target : ObjectList<DockingTarget>())
         {
-            if ((*it)->getName().compare(name) == 0)
-                return (*it);
+            if (target->getName().compare(name) == 0)
+                return target;
         }
-        return NULL;
+        return nullptr;
     }
 }
Index: code/trunk/src/modules/docking/DockingTarget.cc
===================================================================
--- code/trunk/src/modules/docking/DockingTarget.cc	(revision 11056)
+++ code/trunk/src/modules/docking/DockingTarget.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "DockingTarget.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 
@@ -49,12 +48,4 @@
     {
     }
-
-    void DockingTarget::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(DockingTarget, XMLPort, xmlelement, mode);
-
-        orxout(verbose, context::docking) << "DockingTarget with name '" << this->getName() << "' created.." << endl;
-    }
-
 }
 
Index: code/trunk/src/modules/docking/DockingTarget.h
===================================================================
--- code/trunk/src/modules/docking/DockingTarget.h	(revision 11056)
+++ code/trunk/src/modules/docking/DockingTarget.h	(revision 11071)
@@ -58,6 +58,4 @@
             virtual ~DockingTarget();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
     };
 
Index: code/trunk/src/modules/docking/MoveToDockingTarget.h
===================================================================
--- code/trunk/src/modules/docking/MoveToDockingTarget.h	(revision 11056)
+++ code/trunk/src/modules/docking/MoveToDockingTarget.h	(revision 11071)
@@ -59,6 +59,6 @@
             virtual ~MoveToDockingTarget();
 
-            virtual bool docking(PlayerInfo* player); //!< Called when a player starts docking
-            virtual bool release(PlayerInfo* player); //!< Called when player wants to undock
+            virtual bool docking(PlayerInfo* player) override; //!< Called when a player starts docking
+            virtual bool release(PlayerInfo* player) override; //!< Called when player wants to undock
     };
 
Index: code/trunk/src/modules/dodgerace/DodgeRace.cc
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRace.cc	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRace.cc	(revision 11071)
@@ -59,5 +59,5 @@
         comboTimer.setTimer(3.0f, true, createExecutor(createFunctor(&DodgeRace::comboControll, this)));
         this->numberOfBots_ = 0; //sets number of default bots temporarly to 0
-        this->center_ = 0;
+        this->center_ = nullptr;
 
         this->setHUDTemplate("DodgeRaceHUD");
@@ -67,5 +67,5 @@
     {
         level++;
-        if (getPlayer() != NULL)
+        if (getPlayer() != nullptr)
         {
             for (int i = 0; i < 7; i++)
@@ -89,5 +89,5 @@
     void DodgeRace::tick(float dt)
     {
-        if (getPlayer() != NULL)
+        if (getPlayer() != nullptr)
         {
             currentPosition = getPlayer()->getWorldPosition().x;
@@ -138,9 +138,9 @@
     DodgeRaceShip* DodgeRace::getPlayer()
     {
-        if (player == NULL)
-        {
-            for (ObjectList<DodgeRaceShip>::iterator it = ObjectList<DodgeRaceShip>::begin(); it != ObjectList<DodgeRaceShip>::end(); ++it)
-            {
-                player = *it;
+        if (player == nullptr)
+        {
+            for (DodgeRaceShip* ship : ObjectList<DodgeRaceShip>())
+            {
+                player = ship;
             }
         }
@@ -177,5 +177,5 @@
         this->bForceSpawn_ = false;
 
-        if (this->center_ == NULL)  // abandon mission!
+        if (this->center_ == nullptr)  // abandon mission!
         {
             orxout(internal_error) << "DodgeRace: No Centerpoint specified." << endl;
Index: code/trunk/src/modules/dodgerace/DodgeRace.h
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRace.h	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRace.h	(revision 11071)
@@ -68,10 +68,10 @@
             DodgeRace(Context* context);
 
-            virtual void start();
-            virtual void end();
+            virtual void start() override;
+            virtual void end() override;
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void playerPreSpawn(PlayerInfo* player);
+            virtual void playerPreSpawn(PlayerInfo* player) override;
 
             void levelUp();
@@ -84,5 +84,5 @@
             void setCenterpoint(DodgeRaceCenterPoint* center)
                        { this->center_ = center; }
-            virtual void addBots(unsigned int amount){} //<! overwrite function in order to bypass the addbots command
+            virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command
 
             // checks if multiplier should be reset.
Index: code/trunk/src/modules/dodgerace/DodgeRaceCenterPoint.cc
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRaceCenterPoint.cc	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRaceCenterPoint.cc	(revision 11071)
@@ -49,12 +49,7 @@
     }
 
-    void DodgeRaceCenterPoint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(DodgeRaceCenterPoint, XMLPort, xmlelement, mode);
-    }
-
     void DodgeRaceCenterPoint::checkGametype()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(DodgeRace)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(DodgeRace)))
         {
             DodgeRace* DodgeRaceGametype = orxonox_cast<DodgeRace*>(this->getGametype());
Index: code/trunk/src/modules/dodgerace/DodgeRaceCenterPoint.h
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRaceCenterPoint.h	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRaceCenterPoint.h	(revision 11071)
@@ -50,6 +50,4 @@
             DodgeRaceCenterPoint(Context* context); //checks whether the gametype is actually DodgeRace.
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
         private:
             void checkGametype();
Index: code/trunk/src/modules/dodgerace/DodgeRaceHUDinfo.cc
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRaceHUDinfo.cc	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRaceHUDinfo.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(DodgeRaceHUDinfo);
 
-        this->DodgeRaceGame = 0;
+        this->DodgeRaceGame = nullptr;
         this->bShowPoints_ = true;
     }
@@ -86,5 +86,5 @@
         else
         {
-            this->DodgeRaceGame = 0;
+            this->DodgeRaceGame = nullptr;
         }
     }
Index: code/trunk/src/modules/dodgerace/DodgeRaceHUDinfo.h
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRaceHUDinfo.h	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRaceHUDinfo.h	(revision 11071)
@@ -44,7 +44,7 @@
             DodgeRaceHUDinfo(Context* context);
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
 
             inline void setShowPoints(bool value)
Index: code/trunk/src/modules/dodgerace/DodgeRaceShip.cc
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRaceShip.cc	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRaceShip.cc	(revision 11071)
@@ -91,5 +91,5 @@
         // Camera
         Camera* camera = this->getCamera();
-        if (camera != NULL)
+        if (camera != nullptr)
         {
             // camera->setPosition(Vector3(-pos.z, -posforeward, 0));
@@ -142,5 +142,5 @@
     }
 
-    inline bool DodgeRaceShip::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+    inline bool DodgeRaceShip::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint)
     {
 
@@ -152,9 +152,9 @@
     DodgeRace* DodgeRaceShip::getGame()
     {
-        if (game == NULL)
+        if (game == nullptr)
         {
-            for (ObjectList<DodgeRace>::iterator it = ObjectList<DodgeRace>::begin(); it != ObjectList<DodgeRace>::end(); ++it)
+            for (DodgeRace* race : ObjectList<DodgeRace>())
             {
-                game = *it;
+                game = race;
             }
         }
Index: code/trunk/src/modules/dodgerace/DodgeRaceShip.h
===================================================================
--- code/trunk/src/modules/dodgerace/DodgeRaceShip.h	(revision 11056)
+++ code/trunk/src/modules/dodgerace/DodgeRaceShip.h	(revision 11071)
@@ -52,21 +52,23 @@
             DodgeRaceShip(Context* context);
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             // overwrite for 2d movement
-            virtual void moveFrontBack(const Vector2& value);
-            virtual void moveRightLeft(const Vector2& value);
+            virtual void moveFrontBack(const Vector2& value) override;
+            virtual void moveRightLeft(const Vector2& value) override;
 
             // Starts or stops fireing
-            virtual void boost(bool bBoost);
+            virtual void boost(bool bBoost) override;
 
             //no rotation!
-            virtual void rotateYaw(const Vector2& value){};
-            virtual void rotatePitch(const Vector2& value){};
+            virtual void rotateYaw(const Vector2& value) override{};
+            virtual void rotatePitch(const Vector2& value) override{};
 
             //return to main menu if game has ended.
-            virtual void rotateRoll(const Vector2& value){if (getGame()) if (getGame()->bEndGame) getGame()->end();};
+            virtual void rotateRoll(const Vector2& value) override{if (getGame()) if (getGame()->bEndGame) getGame()->end();};
 
             virtual void updateLevel();
+
+            virtual inline bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
 
             float speed, damping, posforeward;
@@ -74,8 +76,7 @@
 
         protected:
-            virtual void death();
+            virtual void death() override;
 
         private:
-            virtual inline bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
             DodgeRace* getGame();
             WeakPtr<DodgeRace> game;
Index: code/trunk/src/modules/gametypes/OldRaceCheckPoint.cc
===================================================================
--- code/trunk/src/modules/gametypes/OldRaceCheckPoint.cc	(revision 11056)
+++ code/trunk/src/modules/gametypes/OldRaceCheckPoint.cc	(revision 11071)
@@ -49,5 +49,5 @@
 
         this->setRadarObjectColour(ColourValue::Blue);
-        this->setRadarObjectShape(RadarViewable::Triangle);
+        this->setRadarObjectShape(RadarViewable::Shape::Triangle);
         this->setRadarVisibility(false);
     }
Index: code/trunk/src/modules/gametypes/OldRaceCheckPoint.h
===================================================================
--- code/trunk/src/modules/gametypes/OldRaceCheckPoint.h	(revision 11056)
+++ code/trunk/src/modules/gametypes/OldRaceCheckPoint.h	(revision 11071)
@@ -48,9 +48,9 @@
             virtual ~OldRaceCheckPoint();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
             protected:
-            virtual void triggered(bool bIsTriggered);
+            virtual void triggered(bool bIsTriggered) override;
             inline void setLast(bool isLast)
                 { this->bIsLast_ = isLast; }
@@ -64,5 +64,5 @@
             inline float getTimeLimit()
                 { return this->bTimeLimit_;}
-            inline const WorldEntity* getWorldEntity() const
+            virtual inline const WorldEntity* getWorldEntity() const override
                 { return this; }
 
Index: code/trunk/src/modules/gametypes/OldSpaceRace.h
===================================================================
--- code/trunk/src/modules/gametypes/OldSpaceRace.h	(revision 11056)
+++ code/trunk/src/modules/gametypes/OldSpaceRace.h	(revision 11071)
@@ -55,9 +55,9 @@
             virtual ~OldSpaceRace() {}
 
-            virtual void start();
-            virtual void end();
+            virtual void start() override;
+            virtual void end() override;
 
             virtual void newCheckpointReached();
-            virtual void addBots(unsigned int amount){} //<! overwrite function in order to bypass the addbots command.
+            virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command.
                                                         //<! This is only a temporary solution. Better: create racingBots.
 
Index: code/trunk/src/modules/gametypes/RaceCheckPoint.cc
===================================================================
--- code/trunk/src/modules/gametypes/RaceCheckPoint.cc	(revision 11056)
+++ code/trunk/src/modules/gametypes/RaceCheckPoint.cc	(revision 11071)
@@ -53,5 +53,5 @@
 
         this->setRadarObjectColour(ColourValue::Blue);
-        this->setRadarObjectShape(RadarViewable::Triangle);
+        this->setRadarObjectShape(RadarViewable::Shape::Triangle);
         this->setRadarVisibility(false);
         this->settingsChanged();
@@ -125,5 +125,5 @@
             }
         }
-        return NULL;
+        return nullptr;
     }
 
@@ -146,11 +146,11 @@
     {
         Vector3 checkpoints(-1,-1,-1); int count=0;
-        for (std::set<int>::iterator it= nextCheckpoints_.begin();it!=nextCheckpoints_.end(); it++ )
+        for (int nextCheckpoint : nextCheckpoints_)
         {
             switch (count)
             {
-                case 0: checkpoints.x = static_cast<Ogre::Real>(*it); break;
-                case 1: checkpoints.y = static_cast<Ogre::Real>(*it); break;
-                case 2: checkpoints.z = static_cast<Ogre::Real>(*it); break;
+                case 0: checkpoints.x = static_cast<Ogre::Real>(nextCheckpoint); break;
+                case 1: checkpoints.y = static_cast<Ogre::Real>(nextCheckpoint); break;
+                case 2: checkpoints.z = static_cast<Ogre::Real>(nextCheckpoint); break;
             }
             ++count;
Index: code/trunk/src/modules/gametypes/RaceCheckPoint.h
===================================================================
--- code/trunk/src/modules/gametypes/RaceCheckPoint.h	(revision 11056)
+++ code/trunk/src/modules/gametypes/RaceCheckPoint.h	(revision 11071)
@@ -48,5 +48,5 @@
             virtual ~RaceCheckPoint();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void setCheckpointIndex(int checkpointIndex)
@@ -92,7 +92,7 @@
         protected:
 
-            virtual void fire(bool bIsTriggered, BaseObject* originator);
+            virtual void fire(bool bIsTriggered, BaseObject* originator) override;
 
-            inline const WorldEntity* getWorldEntity() const
+            virtual inline const WorldEntity* getWorldEntity() const override
             {
                 return this;
Index: code/trunk/src/modules/gametypes/SpaceRace.cc
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRace.cc	(revision 11056)
+++ code/trunk/src/modules/gametypes/SpaceRace.cc	(revision 11071)
@@ -88,6 +88,6 @@
             this->cantMove_ = true;
 
-            for (ObjectList<Engine>::iterator it = ObjectList<Engine>::begin(); it; ++it)
-                it->setActive(false);
+            for (Engine* engine : ObjectList<Engine>())
+                engine->setActive(false);
         }
 
@@ -95,6 +95,6 @@
         if (!this->isStartCountdownRunning() && this->cantMove_)
         {
-            for (ObjectList<Engine>::iterator it = ObjectList<Engine>::begin(); it; ++it)
-                it->setActive(true);
+            for (Engine* engine : ObjectList<Engine>())
+                engine->setActive(true);
 
             this->cantMove_= false;
Index: code/trunk/src/modules/gametypes/SpaceRace.h
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRace.h	(revision 11056)
+++ code/trunk/src/modules/gametypes/SpaceRace.h	(revision 11071)
@@ -57,7 +57,7 @@
             virtual ~SpaceRace() {}
 
-            void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void end();
+            virtual void end() override;
 
             void newCheckpointReached(RaceCheckPoint* checkpoint, PlayerInfo* player);
@@ -70,7 +70,7 @@
                 { return this->clock_; }
 
-            bool allowPawnHit(Pawn* victim, Pawn* originator);
-            bool allowPawnDamage(Pawn* victim, Pawn* originator);
-            bool allowPawnDeath(Pawn* victim, Pawn* originator);
+            virtual bool allowPawnHit(Pawn* victim, Pawn* originator) override;
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator) override;
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator) override;
 
         private:
Index: code/trunk/src/modules/gametypes/SpaceRaceController.cc
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRaceController.cc	(revision 11056)
+++ code/trunk/src/modules/gametypes/SpaceRaceController.cc	(revision 11071)
@@ -59,10 +59,10 @@
 
         virtualCheckPointIndex = -2;
-        if (ObjectList<SpaceRaceManager>::size() != 1)
-            orxout(internal_warning) << "Expected 1 instance of SpaceRaceManager but found " << ObjectList<SpaceRaceManager>::size() << endl;
-        for (ObjectList<SpaceRaceManager>::iterator it = ObjectList<SpaceRaceManager>::begin(); it != ObjectList<SpaceRaceManager>::end(); ++it)
-        {
-            checkpoints = it->getAllCheckpoints();
-            nextRaceCheckpoint_ = it->findCheckpoint(0);
+        if (ObjectList<SpaceRaceManager>().size() != 1)
+            orxout(internal_warning) << "Expected 1 instance of SpaceRaceManager but found " << ObjectList<SpaceRaceManager>().size() << endl;
+        for (SpaceRaceManager* manager : ObjectList<SpaceRaceManager>())
+        {
+            checkpoints = manager->getAllCheckpoints();
+            nextRaceCheckpoint_ = manager->findCheckpoint(0);
         }
 
@@ -98,5 +98,5 @@
                     RaceCheckPoint* point2 = findCheckpoint((*numb));
 
-                    //if(point2 != NULL)
+                    //if(point2 != nullptr)
                     //placeVirtualCheckpoints((*it), point2);
                 }
@@ -126,8 +126,8 @@
         staticRacePoints_ = findStaticCheckpoints(nextRaceCheckpoint_, checkpoints);
         // initialisation of currentRaceCheckpoint_
-        currentRaceCheckpoint_ = NULL;
+        currentRaceCheckpoint_ = nullptr;
 
         int i;
-        for (i = -2; findCheckpoint(i) != NULL; i--)
+        for (i = -2; findCheckpoint(i) != nullptr; i--)
         {
             continue;
@@ -154,16 +154,16 @@
     {
         std::map<RaceCheckPoint*, int> zaehler; // counts how many times the checkpoint was reached (for simulation)
-        for (unsigned int i = 0; i < allCheckpoints.size(); i++)
-        {
-            zaehler.insert(std::pair<RaceCheckPoint*, int>(allCheckpoints[i],0));
+        for (RaceCheckPoint* checkpoint : allCheckpoints)
+        {
+            zaehler.insert(std::pair<RaceCheckPoint*, int>(checkpoint,0));
         }
         int maxWays = rekSimulationCheckpointsReached(currentCheckpoint, zaehler);
 
         std::vector<RaceCheckPoint*> returnVec;
-        for (std::map<RaceCheckPoint*, int>::iterator iter = zaehler.begin(); iter != zaehler.end(); iter++)
-        {
-            if (iter->second == maxWays)
-            {
-                returnVec.push_back(iter->first);
+        for (const auto& mapEntry : zaehler)
+        {
+            if (mapEntry.second == maxWays)
+            {
+                returnVec.push_back(mapEntry.first);
             }
         }
@@ -187,15 +187,15 @@
         {
             int numberOfWays = 0; // counts number of ways from this Point to the last point
-            for (std::set<int>::iterator it = currentCheckpoint->getNextCheckpoints().begin(); it!= currentCheckpoint->getNextCheckpoints().end(); ++it)
-            {
-                if (currentCheckpoint == findCheckpoint(*it))
+            for (int checkpointIndex : currentCheckpoint->getNextCheckpoints())
+            {
+                if (currentCheckpoint == findCheckpoint(checkpointIndex))
                 {
                     //orxout() << currentCheckpoint->getCheckpointIndex()<<endl;
                     continue;
                 }
-                if (findCheckpoint(*it) == NULL)
-                    orxout(internal_warning) << "Problematic Point: " << (*it) << endl;
+                if (findCheckpoint(checkpointIndex) == nullptr)
+                    orxout(internal_warning) << "Problematic Point: " << checkpointIndex << endl;
                 else
-                    numberOfWays += rekSimulationCheckpointsReached(findCheckpoint(*it), zaehler);
+                    numberOfWays += rekSimulationCheckpointsReached(findCheckpoint(checkpointIndex), zaehler);
             }
             zaehler[currentCheckpoint] += numberOfWays;
@@ -209,5 +209,5 @@
     float SpaceRaceController::distanceSpaceshipToCheckPoint(RaceCheckPoint* CheckPoint)
     {
-        if (this->getControllableEntity() != NULL)
+        if (this->getControllableEntity() != nullptr)
         {
             return (CheckPoint->getPosition()- this->getControllableEntity()->getPosition()).length();
@@ -223,13 +223,13 @@
     {
         float minDistance = 0;
-        RaceCheckPoint* minNextRaceCheckPoint = NULL;
+        RaceCheckPoint* minNextRaceCheckPoint = nullptr;
 
         // find the next checkpoint with the minimal distance
-        for (std::set<int>::iterator it = raceCheckpoint->getNextCheckpoints().begin(); it != raceCheckpoint->getNextCheckpoints().end(); ++it)
-        {
-            RaceCheckPoint* nextRaceCheckPoint = findCheckpoint(*it);
+        for (int checkpointIndex : raceCheckpoint->getNextCheckpoints())
+        {
+            RaceCheckPoint* nextRaceCheckPoint = findCheckpoint(checkpointIndex);
             float distance = recCalculateDistance(nextRaceCheckPoint, this->getControllableEntity()->getPosition());
 
-            if (distance < minDistance || minNextRaceCheckPoint == NULL)
+            if (distance < minDistance || minNextRaceCheckPoint == nullptr)
             {
                 minDistance = distance;
@@ -255,9 +255,9 @@
         {
             float minimum = std::numeric_limits<float>::max();
-            for (std::set<int>::iterator it = currentCheckPoint->getNextCheckpoints().begin(); it != currentCheckPoint->getNextCheckpoints().end(); ++it)
+            for (int checkpointIndex : currentCheckPoint->getNextCheckpoints())
             {
                 int dist_currentCheckPoint_currentPosition = static_cast<int> ((currentPosition- currentCheckPoint->getPosition()).length());
 
-                minimum = std::min(minimum, dist_currentCheckPoint_currentPosition + recCalculateDistance(findCheckpoint(*it), currentCheckPoint->getPosition()));
+                minimum = std::min(minimum, dist_currentCheckPoint_currentPosition + recCalculateDistance(findCheckpoint(checkpointIndex), currentCheckPoint->getPosition()));
                 // minimum of distanz from 'currentPosition' to the next static Checkpoint
             }
@@ -271,5 +271,5 @@
     RaceCheckPoint* SpaceRaceController::adjustNextPoint()
     {
-        if (currentRaceCheckpoint_ == NULL) // no Adjust possible
+        if (currentRaceCheckpoint_ == nullptr) // no Adjust possible
 
         {
@@ -289,8 +289,8 @@
     RaceCheckPoint* SpaceRaceController::findCheckpoint(int index) const
     {
-        for (size_t i = 0; i < this->checkpoints_.size(); ++i)
-            if (this->checkpoints_[i]->getCheckpointIndex() == index)
-                return this->checkpoints_[i];
-        return NULL;
+        for (RaceCheckPoint* checkpoint : this->checkpoints_)
+            if (checkpoint->getCheckpointIndex() == index)
+                return checkpoint;
+        return nullptr;
     }
 
@@ -299,5 +299,6 @@
         orxout()<<"add VCP at"<<virtualCheckPointPosition.x<<", "<<virtualCheckPointPosition.y<<", "<<virtualCheckPointPosition.z<<endl;
         RaceCheckPoint* newTempRaceCheckPoint;
-        for (ObjectList<SpaceRaceManager>::iterator it = ObjectList<SpaceRaceManager>::begin(); it!= ObjectList<SpaceRaceManager>::end(); ++it)
+        ObjectList<SpaceRaceManager> list;
+        for (ObjectList<SpaceRaceManager>::iterator it = list.begin(); it!= list.end(); ++it)
         {
             newTempRaceCheckPoint = new RaceCheckPoint((*it));
@@ -347,5 +348,5 @@
     void SpaceRaceController::tick(float dt)
     {
-        if (this->getControllableEntity() == NULL || this->getControllableEntity()->getPlayer() == NULL )
+        if (this->getControllableEntity() == nullptr || this->getControllableEntity()->getPlayer() == nullptr )
         {
             //orxout()<< this->getControllableEntity() << " in tick"<<endl;
@@ -414,10 +415,10 @@
         btScalar radiusObject;
 
-        for (std::vector<StaticEntity*>::const_iterator it = allObjects.begin(); it != allObjects.end(); ++it)
-        {
-            for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) != 0; everyShape++)
-            {
-                btCollisionShape* currentShape = (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape();
-                if(currentShape == NULL)
+        for (StaticEntity* object : allObjects)
+        {
+            for (int everyShape=0; object->getAttachedCollisionShape(everyShape) != nullptr; everyShape++)
+            {
+                btCollisionShape* currentShape = object->getAttachedCollisionShape(everyShape)->getCollisionShape();
+                if(currentShape == nullptr)
                 continue;
 
@@ -444,8 +445,8 @@
         for (std::vector<StaticEntity*>::iterator it = allObjects.begin(); it != allObjects.end(); ++it)
         {
-            for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) != 0; everyShape++)
+            for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape) != nullptr; everyShape++)
             {
                 btCollisionShape* currentShape = (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape();
-                if(currentShape == NULL)
+                if(currentShape == nullptr)
                 continue;
 
@@ -488,8 +489,9 @@
         std::vector<StaticEntity*> problematicObjects;
 
-        for (ObjectList<StaticEntity>::iterator it = ObjectList<StaticEntity>::begin(); it!= ObjectList<StaticEntity>::end(); ++it)
-        {
-
-            if (dynamic_cast<RaceCheckPoint*>(*it) != NULL)
+        ObjectList<StaticEntity> list;
+        for (ObjectList<StaticEntity>::iterator it = list.begin(); it!= list.end(); ++it)
+        {
+
+            if (dynamic_cast<RaceCheckPoint*>(*it) != nullptr)
             {
                 continue;
@@ -537,10 +539,10 @@
         //                    btVector3 positionObject;
         //                    btScalar radiusObject;
-        //                    if((*it)==NULL)
+        //                    if((*it)==nullptr)
         //                    {   orxout()<<"Problempoint 1.1"<<endl; continue;}
         //                    //TODO: Probably it points on a wrong object
-        //                    for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape)!=0; everyShape++)
+        //                    for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape)!=nullptr; everyShape++)
         //                    {
-        //                        if((*it)->getAttachedCollisionShape(everyShape)->getCollisionShape()==NULL)
+        //                        if((*it)->getAttachedCollisionShape(everyShape)->getCollisionShape()==nullptr)
         //                        {    continue;}
         //
@@ -570,9 +572,9 @@
         //                        btVector3 positionObject;
         //                        btScalar radiusObject;
-        //                        if((*it)==NULL)
+        //                        if((*it)==nullptr)
         //                        {   orxout()<<"Problempoint 1"<<endl; continue;}
-        //                        for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape)!=0; everyShape++)
+        //                        for (int everyShape=0; (*it)->getAttachedCollisionShape(everyShape)!=nullptr; everyShape++)
         //                        {
-        //                            if((*it)->getAttachedCollisionShape(everyShape)->getCollisionShape()==NULL)
+        //                            if((*it)->getAttachedCollisionShape(everyShape)->getCollisionShape()==nullptr)
         //                            {   orxout()<<"Problempoint 2.2"<<endl; continue;}
         //                            (*it)->getAttachedCollisionShape(everyShape)->getCollisionShape()->getBoundingSphere(positionObject,radiusObject);
Index: code/trunk/src/modules/gametypes/SpaceRaceController.h
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRaceController.h	(revision 11056)
+++ code/trunk/src/modules/gametypes/SpaceRaceController.h	(revision 11071)
@@ -42,6 +42,6 @@
             SpaceRaceController(Context* context);
             virtual ~SpaceRaceController();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
         private:
Index: code/trunk/src/modules/gametypes/SpaceRaceManager.cc
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRaceManager.cc	(revision 11056)
+++ code/trunk/src/modules/gametypes/SpaceRaceManager.cc	(revision 11071)
@@ -54,6 +54,6 @@
     SpaceRaceManager::~SpaceRaceManager()
     {
-        for (size_t i = 0; i < this->checkpoints_.size(); ++i)
-        this->checkpoints_[i]->destroy();
+        for (RaceCheckPoint* checkpoint : this->checkpoints_)
+        checkpoint->destroy();
     }
 
@@ -71,5 +71,5 @@
         this->players_ = this->race_->getPlayers();
 
-        if (this->checkpoints_[0] != NULL && !this->firstcheckpointvisible_)
+        if (this->checkpoints_[0] != nullptr && !this->firstcheckpointvisible_)
         {
             this->checkpoints_[0]->setRadarVisibility(true);
@@ -77,11 +77,11 @@
         }
 
-        for ( std::map< PlayerInfo*, Player>::iterator it = players_.begin(); it != players_.end(); ++it)
+        for (const auto& mapEntry : players_)
         {
 
-            for (size_t i = 0; i < this->checkpoints_.size(); ++i)
+            for (RaceCheckPoint* checkpoint : this->checkpoints_)
             {
-                if (this->checkpoints_[i]->playerWasHere(it->first)){
-                this->checkpointReached(this->checkpoints_[i], it->first /*this->checkpoints_[i]->getPlayer()*/);
+                if (checkpoint->playerWasHere(mapEntry.first)){
+                this->checkpointReached(checkpoint, mapEntry.first /*this->checkpoints_[i]->getPlayer()*/);
                 }
             }
@@ -100,5 +100,5 @@
         return this->checkpoints_[index];
         else
-        return 0;
+        return nullptr;
     }
 
@@ -113,18 +113,18 @@
     RaceCheckPoint* SpaceRaceManager::findCheckpoint(int index) const
     {
-        for (size_t i = 0; i < this->checkpoints_.size(); ++i)
-        if (this->checkpoints_[i]->getCheckpointIndex() == index)
-        return this->checkpoints_[i];
-        return 0;
+        for (RaceCheckPoint* checkpoint : this->checkpoints_)
+        if (checkpoint->getCheckpointIndex() == index)
+        return checkpoint;
+        return nullptr;
     }
 
     bool SpaceRaceManager::reachedValidCheckpoint(RaceCheckPoint* oldCheckpoint, RaceCheckPoint* newCheckpoint, PlayerInfo* player) const
     {
-        if (oldCheckpoint != NULL)
+        if (oldCheckpoint != nullptr)
         {
             // the player already visited an old checkpoint; see which checkpoints are possible now
             const std::set<int>& possibleCheckpoints = oldCheckpoint->getNextCheckpoints();
-            for (std::set<int>::const_iterator it = possibleCheckpoints.begin(); it != possibleCheckpoints.end(); ++it)
-            if (this->findCheckpoint(*it) == newCheckpoint)
+            for (int possibleCheckpoint : possibleCheckpoints)
+            if (this->findCheckpoint(possibleCheckpoint) == newCheckpoint)
             return true;
             return false;
@@ -179,6 +179,6 @@
         {
             const std::set<int>& oldVisible = oldCheckpoint->getNextCheckpoints();
-            for (std::set<int>::const_iterator it = oldVisible.begin(); it != oldVisible.end(); ++it)
-            this->findCheckpoint(*it)->setRadarVisibility(false);
+            for (int checkpointIndex : oldVisible)
+            this->findCheckpoint(checkpointIndex)->setRadarVisibility(false);
         }
 
@@ -188,6 +188,6 @@
 
             const std::set<int>& newVisible = newCheckpoint->getNextCheckpoints();
-            for (std::set<int>::const_iterator it = newVisible.begin(); it != newVisible.end(); ++it)
-            this->findCheckpoint(*it)->setRadarVisibility(true);
+            for (int checkpointIndex : newVisible)
+            this->findCheckpoint(checkpointIndex)->setRadarVisibility(true);
         }
     }
Index: code/trunk/src/modules/gametypes/SpaceRaceManager.h
===================================================================
--- code/trunk/src/modules/gametypes/SpaceRaceManager.h	(revision 11056)
+++ code/trunk/src/modules/gametypes/SpaceRaceManager.h	(revision 11071)
@@ -58,5 +58,5 @@
             virtual ~SpaceRaceManager() ;
 
-            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void addCheckpoint(RaceCheckPoint* checkpoint);
@@ -69,5 +69,5 @@
             std::vector<RaceCheckPoint*> getAllCheckpoints();
 
-            void tick(float dt);
+            virtual void tick(float dt) override;
 
         protected:
Index: code/trunk/src/modules/hover/FlagHUD.cc
===================================================================
--- code/trunk/src/modules/hover/FlagHUD.cc	(revision 11056)
+++ code/trunk/src/modules/hover/FlagHUD.cc	(revision 11071)
@@ -48,5 +48,5 @@
         RegisterObject(FlagHUD);
 
-        this->hoverGame_ = NULL;
+        this->hoverGame_ = nullptr;
         this->panel_ = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
             .createOverlayElement("Panel", "FlagHUD_Panel_" + getUniqueNumberString()));
@@ -101,5 +101,5 @@
         else
         {
-            this->hoverGame_ = 0;
+            this->hoverGame_ = nullptr;
         }
     }
Index: code/trunk/src/modules/hover/FlagHUD.h
===================================================================
--- code/trunk/src/modules/hover/FlagHUD.h	(revision 11056)
+++ code/trunk/src/modules/hover/FlagHUD.h	(revision 11071)
@@ -47,6 +47,6 @@
         virtual ~FlagHUD();
 
-        virtual void tick(float dt);
-        virtual void changedOwner();
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
 
         void setFlagCount(int flagCount);
Index: code/trunk/src/modules/hover/Hover.cc
===================================================================
--- code/trunk/src/modules/hover/Hover.cc	(revision 11056)
+++ code/trunk/src/modules/hover/Hover.cc	(revision 11071)
@@ -48,5 +48,5 @@
         RegisterObject(Hover);
 
-        this->origin_ = NULL;
+        this->origin_ = nullptr;
         this->numberOfFlags_ = 1;
         this->firstTick_ = true;
Index: code/trunk/src/modules/hover/Hover.h
===================================================================
--- code/trunk/src/modules/hover/Hover.h	(revision 11056)
+++ code/trunk/src/modules/hover/Hover.h	(revision 11071)
@@ -50,5 +50,5 @@
             Hover(Context* context);
 
-            virtual void tick(float dt);          
+            virtual void tick(float dt) override;
 
             void setOrigin(HoverOrigin* origin)
Index: code/trunk/src/modules/hover/HoverFlag.cc
===================================================================
--- code/trunk/src/modules/hover/HoverFlag.cc	(revision 11056)
+++ code/trunk/src/modules/hover/HoverFlag.cc	(revision 11071)
@@ -49,11 +49,11 @@
         RegisterObject(HoverFlag);
 
-        this->model_ = NULL;
-        this->cs_ = NULL;
+        this->model_ = nullptr;
+        this->cs_ = nullptr;
         this->collided_ = false;
 
         this->enableCollisionCallback();
         this->setCollisionResponse(true);
-        this->setCollisionType(Static);
+        this->setCollisionType(CollisionType::Static);
     }
 
Index: code/trunk/src/modules/hover/HoverFlag.h
===================================================================
--- code/trunk/src/modules/hover/HoverFlag.h	(revision 11056)
+++ code/trunk/src/modules/hover/HoverFlag.h	(revision 11071)
@@ -51,5 +51,5 @@
             void init(int xCoordinate, int yCoordinate, int cellSize);
 
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint);            
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
 
             inline bool getCollided() const
Index: code/trunk/src/modules/hover/HoverOrigin.cc
===================================================================
--- code/trunk/src/modules/hover/HoverOrigin.cc	(revision 11056)
+++ code/trunk/src/modules/hover/HoverOrigin.cc	(revision 11071)
@@ -58,5 +58,5 @@
     void HoverOrigin::checkGametype()
     {
-        if (getGametype() != NULL && this->getGametype()->isA(Class(Hover)))
+        if (getGametype() != nullptr && this->getGametype()->isA(Class(Hover)))
         {
             Hover* hoverGametype = orxonox_cast<Hover*>(this->getGametype());
Index: code/trunk/src/modules/hover/HoverOrigin.h
===================================================================
--- code/trunk/src/modules/hover/HoverOrigin.h	(revision 11056)
+++ code/trunk/src/modules/hover/HoverOrigin.h	(revision 11071)
@@ -108,6 +108,6 @@
         public:
             HoverOrigin(Context* context); //!< Constructor. Registers and initializes the object and checks whether the gametype is actually Hover.
-            virtual ~HoverOrigin() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method to create a HoverOrigin through XML.
+            virtual ~HoverOrigin() = default;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method to create a HoverOrigin through XML.
             
             inline void setNumCells(int numCells)
Index: code/trunk/src/modules/hover/HoverShip.h
===================================================================
--- code/trunk/src/modules/hover/HoverShip.h	(revision 11056)
+++ code/trunk/src/modules/hover/HoverShip.h	(revision 11071)
@@ -44,5 +44,5 @@
             HoverShip(Context* context);
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             /// sets this ships jumpBoost
@@ -53,19 +53,19 @@
                 { return this->jumpBoost_; }
 
-            virtual void moveFrontBack(const Vector2& value);
+            virtual void moveFrontBack(const Vector2& value) override;
 
-            virtual void moveRightLeft(const Vector2& value);
+            virtual void moveRightLeft(const Vector2& value) override;
 
-            virtual void moveUpDown(const Vector2& value);
+            virtual void moveUpDown(const Vector2& value) override;
 
-            virtual void rotateYaw(const Vector2& value);
+            virtual void rotateYaw(const Vector2& value) override;
 
-            virtual void rotatePitch(const Vector2& value);
+            virtual void rotatePitch(const Vector2& value) override;
 
-            virtual void rotateRoll(const Vector2& value);
+            virtual void rotateRoll(const Vector2& value) override;
 
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
 
-            virtual void boost(bool bBoost);
+            virtual void boost(bool bBoost) override;
 
         private:
Index: code/trunk/src/modules/hover/HoverWall.cc
===================================================================
--- code/trunk/src/modules/hover/HoverWall.cc	(revision 11056)
+++ code/trunk/src/modules/hover/HoverWall.cc	(revision 11071)
@@ -46,10 +46,10 @@
         RegisterObject(HoverWall);
 
-        this->model_ = NULL;
-        this->cs_ = NULL;
+        this->model_ = nullptr;
+        this->cs_ = nullptr;
 
         this->enableCollisionCallback();
         this->setCollisionResponse(true);
-        this->setCollisionType(Static);
+        this->setCollisionType(CollisionType::Static);
     }
 
Index: code/trunk/src/modules/hover/TimeHUD.cc
===================================================================
--- code/trunk/src/modules/hover/TimeHUD.cc	(revision 11056)
+++ code/trunk/src/modules/hover/TimeHUD.cc	(revision 11071)
@@ -47,5 +47,5 @@
         this->time_ = 0.0f;
         this->running_ = false;
-        this->hoverGame_ = 0;
+        this->hoverGame_ = nullptr;
         setRunning(true);
     }
@@ -98,5 +98,5 @@
         else
         {
-            this->hoverGame_ = 0;
+            this->hoverGame_ = nullptr;
         }
     }
Index: code/trunk/src/modules/hover/TimeHUD.h
===================================================================
--- code/trunk/src/modules/hover/TimeHUD.h	(revision 11056)
+++ code/trunk/src/modules/hover/TimeHUD.h	(revision 11071)
@@ -45,6 +45,6 @@
             TimeHUD(Context* context);
 
-            virtual void tick(float dt);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void changedOwner() override;
 
             /// sets if the clock is running
Index: code/trunk/src/modules/invader/Invader.cc
===================================================================
--- code/trunk/src/modules/invader/Invader.cc	(revision 11056)
+++ code/trunk/src/modules/invader/Invader.cc	(revision 11071)
@@ -61,5 +61,5 @@
         RegisterObject(Invader);
         this->numberOfBots_ = 0; //sets number of default bots temporarly to 0
-        this->center_ = 0;
+        this->center_ = nullptr;
         bEndGame = false;
         lives = 3;
@@ -78,5 +78,5 @@
     {
         level++;
-        if (getPlayer() != NULL)
+        if (getPlayer() != nullptr)
         {
             for (int i = 0; i < 7; i++)
@@ -103,8 +103,8 @@
     InvaderShip* Invader::getPlayer()
     {
-        if (player == NULL)
+        if (player == nullptr)
         {
-            for (ObjectList<InvaderShip>::iterator it = ObjectList<InvaderShip>::begin(); it != ObjectList<InvaderShip>::end(); ++it)
-                player = *it;
+            for (InvaderShip* ship : ObjectList<InvaderShip>())
+                player = ship;
         }
         return player;
@@ -113,5 +113,5 @@
     void Invader::spawnEnemy()
     {
-        if (getPlayer() == NULL)
+        if (getPlayer() == nullptr)
             return;
 
@@ -134,4 +134,9 @@
             newPawn->setPosition(player->getPosition() + Vector3(500.f + 100 * i, 0, float(rand())/RAND_MAX * 400 - 200));
         }
+    }
+
+    void Invader::setCenterpoint(InvaderCenterPoint* center)
+    {
+        this->center_ = center;
     }
 
@@ -160,5 +165,5 @@
         this->bForceSpawn_ = true;
 
-        if (this->center_ == NULL)  // abandon mission!
+        if (this->center_ == nullptr)  // abandon mission!
         {
             orxout(internal_error) << "Invader: No Centerpoint specified." << endl;
Index: code/trunk/src/modules/invader/Invader.h
===================================================================
--- code/trunk/src/modules/invader/Invader.h	(revision 11056)
+++ code/trunk/src/modules/invader/Invader.h	(revision 11071)
@@ -39,7 +39,4 @@
 
 #include "gametypes/Deathmatch.h"
-
-#include "InvaderCenterPoint.h"
-
 #include "tools/Timer.h"
 
@@ -52,12 +49,11 @@
             Invader(Context* context);
 
-            virtual void start();
-            virtual void end();
-            virtual void addBots(unsigned int amount){} //<! overwrite function in order to bypass the addbots command
+            virtual void start() override;
+            virtual void end() override;
+            virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command
 
             void spawnEnemy();
 
-            void setCenterpoint(InvaderCenterPoint* center)
-            { this->center_ = center; }
+            void setCenterpoint(InvaderCenterPoint* center);
 
             int getLives(){return this->lives;}
Index: code/trunk/src/modules/invader/InvaderCenterPoint.cc
===================================================================
--- code/trunk/src/modules/invader/InvaderCenterPoint.cc	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderCenterPoint.cc	(revision 11071)
@@ -49,12 +49,7 @@
     }
 
-    void InvaderCenterPoint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(InvaderCenterPoint, XMLPort, xmlelement, mode);
-    }
-
     void InvaderCenterPoint::checkGametype()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(Invader)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(Invader)))
         {
             Invader* InvaderGametype = orxonox_cast<Invader*>(this->getGametype());
Index: code/trunk/src/modules/invader/InvaderCenterPoint.h
===================================================================
--- code/trunk/src/modules/invader/InvaderCenterPoint.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderCenterPoint.h	(revision 11071)
@@ -47,6 +47,4 @@
             InvaderCenterPoint(Context* context); //checks whether the gametype is actually Invader.
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
         private:
             void checkGametype();
Index: code/trunk/src/modules/invader/InvaderEnemy.cc
===================================================================
--- code/trunk/src/modules/invader/InvaderEnemy.cc	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderEnemy.cc	(revision 11071)
@@ -32,6 +32,8 @@
 */
 
-#include "invader/InvaderPrereqs.h"
 #include "InvaderEnemy.h"
+
+#include "core/CoreIncludes.h"
+#include "Invader.h"
 #include "InvaderShip.h"
 
@@ -54,5 +56,5 @@
             removeHealth(2000);
 
-        if (player != NULL)
+        if (player != nullptr)
         {
             float newZ = 2/(pow(abs(getPosition().x - player->getPosition().x) * 0.01f, 2) + 1) * (player->getPosition().z - getPosition().z);
@@ -62,5 +64,5 @@
     }
 
-    inline bool InvaderEnemy::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+    inline bool InvaderEnemy::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint)
     {
         if(orxonox_cast<InvaderShip*>(otherObject))
@@ -71,8 +73,8 @@
     Invader* InvaderEnemy::getGame()
     {
-        if (game == NULL)
+        if (game == nullptr)
         {
-            for (ObjectList<Invader>::iterator it = ObjectList<Invader>::begin(); it != ObjectList<Invader>::end(); ++it)
-                game = *it;
+            for (Invader* invader : ObjectList<Invader>())
+                game = invader;
         }
         return game;
@@ -82,5 +84,5 @@
     {
         Pawn::damage(damage, healthdamage, shielddamage, originator, cs);
-        if (getGame() && orxonox_cast<InvaderShip*>(originator) != NULL && getHealth() <= 0)
+        if (getGame() && orxonox_cast<InvaderShip*>(originator) != nullptr && getHealth() <= 0)
             getGame()->addPoints(42);
     }
Index: code/trunk/src/modules/invader/InvaderEnemy.h
===================================================================
--- code/trunk/src/modules/invader/InvaderEnemy.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderEnemy.h	(revision 11071)
@@ -37,5 +37,5 @@
 #include "invader/InvaderPrereqs.h"
 
-#include "worldentities/pawns/SpaceShip.h"
+#include "worldentities/pawns/Pawn.h"
 
 namespace orxonox
@@ -46,7 +46,7 @@
             InvaderEnemy(Context* context);
 
-            virtual void tick(float dt);
-            virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
-            virtual void damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs);
+            virtual void tick(float dt) override;
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
+            virtual void damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs) override;
             virtual void setPlayer(InvaderShip* player){this->player = player;}
 
Index: code/trunk/src/modules/invader/InvaderEnemyShooter.cc
===================================================================
--- code/trunk/src/modules/invader/InvaderEnemyShooter.cc	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderEnemyShooter.cc	(revision 11071)
@@ -32,7 +32,10 @@
 */
 
-#include "invader/InvaderPrereqs.h"
 #include "InvaderEnemyShooter.h"
-// #include "worldentities/pawns/SpaceShip.h"
+
+#include "core/CoreIncludes.h"
+#include "core/command/Executor.h"
+#include "Invader.h"
+#include "InvaderShip.h"
 
 namespace orxonox
@@ -56,5 +59,5 @@
             removeHealth(2000);
 
-        if (player != NULL)
+        if (player != nullptr)
         {
             float distPlayer = player->getPosition().z - getPosition().z;
@@ -74,5 +77,5 @@
     {
         Pawn::damage(damage, healthdamage, shielddamage, originator, cs);
-        if (getGame() && orxonox_cast<InvaderShip*>(originator) != NULL && getHealth() <= 0)
+        if (getGame() && orxonox_cast<InvaderShip*>(originator) != nullptr && getHealth() <= 0)
             getGame()->addPoints(3*42);
     }
Index: code/trunk/src/modules/invader/InvaderEnemyShooter.h
===================================================================
--- code/trunk/src/modules/invader/InvaderEnemyShooter.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderEnemyShooter.h	(revision 11071)
@@ -47,6 +47,6 @@
             InvaderEnemyShooter(Context* context);
 
-            virtual void tick(float dt);
-            virtual void damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs);
+            virtual void tick(float dt) override;
+            virtual void damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs) override;
         protected:
             void shoot();
Index: code/trunk/src/modules/invader/InvaderHUDinfo.cc
===================================================================
--- code/trunk/src/modules/invader/InvaderHUDinfo.cc	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderHUDinfo.cc	(revision 11071)
@@ -30,5 +30,5 @@
 #include "core/XMLPort.h"
 #include "util/Convert.h"
-// #include "Invader.h"
+#include "Invader.h"
 
 namespace orxonox
@@ -40,5 +40,5 @@
         RegisterObject(InvaderHUDinfo);
 
-        this->InvaderGame = 0;
+        this->InvaderGame = nullptr;
         this->bShowLives_ = false;
         this->bShowLevel_ = false;
@@ -132,5 +132,5 @@
         else
         {
-            this->InvaderGame = 0;
+            this->InvaderGame = nullptr;
         }
     }
Index: code/trunk/src/modules/invader/InvaderHUDinfo.h
===================================================================
--- code/trunk/src/modules/invader/InvaderHUDinfo.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderHUDinfo.h	(revision 11071)
@@ -40,7 +40,7 @@
             InvaderHUDinfo(Context* context);
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
 
             inline void setShowLives(bool value)
Index: code/trunk/src/modules/invader/InvaderShip.cc
===================================================================
--- code/trunk/src/modules/invader/InvaderShip.cc	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderShip.cc	(revision 11071)
@@ -37,4 +37,7 @@
 #include "core/XMLPort.h"
 #include "Invader.h"
+#include "InvaderEnemy.h"
+#include "graphics/Camera.h"
+#include "weapons/projectiles/Projectile.h"
 
 namespace orxonox
@@ -92,5 +95,5 @@
         // Camera
         Camera* camera = this->getCamera();
-        if (camera != NULL)
+        if (camera != nullptr)
         {
             camera->setPosition(Vector3(-pos.z, -posforeward, 0));
@@ -139,5 +142,11 @@
         isFireing = bBoost;
     }
-    inline bool InvaderShip::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+    void InvaderShip::rotateRoll(const Vector2& value)
+    {
+        if (getGame())
+            if (getGame()->bEndGame)
+                getGame()->end();
+    }
+    inline bool InvaderShip::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint)
     {
         // orxout() << "touch!!! " << endl; //<< otherObject << " at " << contactPoint;
@@ -145,5 +154,5 @@
         Projectile* shot = orxonox_cast<Projectile*>(otherObject);
         // ensure that this gets only called once per enemy.
-        if (enemy != NULL && lastEnemy != enemy)
+        if (enemy != nullptr && lastEnemy != enemy)
         {
             lastEnemy = enemy;
@@ -156,7 +165,7 @@
         }
         // was shot, decrease multiplier
-        else if (shot != NULL  && lastShot != shot)
+        else if (shot != nullptr  && lastShot != shot)
         {
-            if (getGame() && orxonox_cast<InvaderEnemy*>(shot->getShooter()) != NULL)
+            if (getGame() && orxonox_cast<InvaderEnemy*>(shot->getShooter()) != nullptr)
             {
                 if (getGame()->multiplier > 1)
@@ -173,8 +182,8 @@
     Invader* InvaderShip::getGame()
     {
-        if (game == NULL)
+        if (game == nullptr)
         {
-            for (ObjectList<Invader>::iterator it = ObjectList<Invader>::begin(); it != ObjectList<Invader>::end(); ++it)
-                game = *it;
+            for (Invader* invader : ObjectList<Invader>())
+                game = invader;
         }
         return game;
Index: code/trunk/src/modules/invader/InvaderShip.h
===================================================================
--- code/trunk/src/modules/invader/InvaderShip.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderShip.h	(revision 11071)
@@ -37,7 +37,6 @@
 #include "invader/InvaderPrereqs.h"
 
+#include "weapons/WeaponsPrereqs.h"
 #include "worldentities/pawns/SpaceShip.h"
-#include "graphics/Camera.h"
-#include "weapons/projectiles/Projectile.h"
 
 namespace orxonox
@@ -48,25 +47,25 @@
             InvaderShip(Context* context);
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             // overwrite for 2d movement
-            virtual void moveFrontBack(const Vector2& value);
-            virtual void moveRightLeft(const Vector2& value);
+            virtual void moveFrontBack(const Vector2& value) override;
+            virtual void moveRightLeft(const Vector2& value) override;
 
             // Starts or stops fireing
-            virtual void boost(bool bBoost);
+            virtual void boost(bool bBoost) override;
 
             //no rotation!
-            virtual void rotateYaw(const Vector2& value){}; 
-            virtual void rotatePitch(const Vector2& value){};
+            virtual void rotateYaw(const Vector2& value) override{}; 
+            virtual void rotatePitch(const Vector2& value) override{};
             //return to main menu if game has ended.
-            virtual void rotateRoll(const Vector2& value){if (getGame()) if (getGame()->bEndGame) getGame()->end();};
+            virtual void rotateRoll(const Vector2& value) override;
 
             virtual void updateLevel();
 
-            virtual inline bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
+            virtual inline bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
 
         protected:
-            virtual void death();
+            virtual void death() override;
         private:
             Invader* getGame();
Index: code/trunk/src/modules/invader/InvaderWeapon.h
===================================================================
--- code/trunk/src/modules/invader/InvaderWeapon.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderWeapon.h	(revision 11071)
@@ -35,8 +35,8 @@
 #define _InvaderWeapon_H__
 
+#include "invader/InvaderPrereqs.h"
+
+#include "weapons/WeaponsPrereqs.h"
 #include "weapons/weaponmodes/HsW01.h"
-#include "weapons/WeaponsPrereqs.h"
-
-#include "tools/Timer.h"
 
 namespace orxonox
@@ -48,5 +48,5 @@
             virtual ~InvaderWeapon();
         protected:
-            virtual void shot();
+            virtual void shot() override;
             WeakPtr<Projectile> projectile;
     };
Index: code/trunk/src/modules/invader/InvaderWeaponEnemy.cc
===================================================================
--- code/trunk/src/modules/invader/InvaderWeaponEnemy.cc	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderWeaponEnemy.cc	(revision 11071)
@@ -34,4 +34,7 @@
 #include "InvaderWeaponEnemy.h"
 
+#include "core/CoreIncludes.h"
+#include "weapons/projectiles/Projectile.h"
+
 namespace orxonox
 {
Index: code/trunk/src/modules/invader/InvaderWeaponEnemy.h
===================================================================
--- code/trunk/src/modules/invader/InvaderWeaponEnemy.h	(revision 11056)
+++ code/trunk/src/modules/invader/InvaderWeaponEnemy.h	(revision 11071)
@@ -35,7 +35,7 @@
 #define _InvaderWeaponEnemy_H__
 
-// #include "weapons/weaponmodes/HsW01.h"
-// #include "weapons/WeaponsPrereqs.h"
-#include "invader/InvaderWeapon.h"
+#include "invader/InvaderPrereqs.h"
+
+#include "InvaderWeapon.h"
 #include "tools/Timer.h"
 
@@ -47,5 +47,5 @@
             InvaderWeaponEnemy(Context* context);
         protected:
-            virtual void shot();
+            virtual void shot() override;
     };
 }
Index: code/trunk/src/modules/jump/Jump.cc
===================================================================
--- code/trunk/src/modules/jump/Jump.cc	(revision 11056)
+++ code/trunk/src/modules/jump/Jump.cc	(revision 11071)
@@ -34,9 +34,5 @@
 #include "Jump.h"
 #include "core/CoreIncludes.h"
-#include "core/EventIncludes.h"
-#include "core/command/Executor.h"
-#include "core/config/ConfigValueIncludes.h"
-#include "gamestates/GSLevel.h"
-#include "chat/ChatManager.h"
+
 #include "JumpCenterpoint.h"
 #include "JumpPlatform.h"
@@ -56,5 +52,8 @@
 #include "JumpBoots.h"
 #include "JumpShield.h"
+
+#include "gamestates/GSLevel.h"
 #include "infos/PlayerInfo.h"
+#include "graphics/Camera.h"
 
 namespace orxonox
@@ -66,10 +65,8 @@
         RegisterObject(Jump);
 
-        center_ = 0;
-        figure_ = 0;
-        camera = 0;
+        center_ = nullptr;
+        figure_ = nullptr;
+        camera = nullptr;
         setHUDTemplate("JumpHUD");
-
-        setConfigValues();
     }
 
@@ -86,5 +83,5 @@
         SUPER(Jump, tick, dt);
 
-        if (figure_ != NULL)
+        if (figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getPosition();
@@ -101,5 +98,5 @@
                 if (screenShiftSinceLastUpdate_ > center_->getSectionLength())
                 {
-                    if (sectionNumber_ > 2 && sectionNumber_%4 == 0 && rand()%2 == 0 && figure_->propellerActive_ == false && figure_->rocketActive_ == false && addAdventure(adventureNumber_) == true)
+                    if (sectionNumber_ > 2 && sectionNumber_%4 == 0 && rand()%2 == 0 && figure_->propellerActive_ == nullptr && figure_->rocketActive_ == nullptr && addAdventure(adventureNumber_) == true)
                     {
                         screenShiftSinceLastUpdate_ -= 2*center_->getSectionLength();
@@ -133,5 +130,5 @@
 
 
-            if (camera != NULL)
+            if (camera != nullptr)
             {
                 Vector3 cameraPosition = Vector3(0, totalScreenShift_, 0);
@@ -144,10 +141,9 @@
         }
 
-        ObjectList<JumpPlatform>::iterator beginPlatform = ObjectList<JumpPlatform>::begin();
-        ObjectList<JumpPlatform>::iterator endPlatform = ObjectList<JumpPlatform>::end();
-        ObjectList<JumpPlatform>::iterator itPlatform = beginPlatform;
+        ObjectList<JumpPlatform> listPlatform;
+        ObjectList<JumpPlatform>::iterator itPlatform = listPlatform.begin();
         Vector3 platformPosition;
 
-        while (itPlatform != endPlatform)
+        while (itPlatform != listPlatform.end())
         {
             platformPosition = itPlatform->getPosition();
@@ -166,9 +162,8 @@
 
         // Deleted deactivated platforms
-        ObjectList<JumpPlatformDisappear>::iterator beginDisappear = ObjectList<JumpPlatformDisappear>::begin();
-        ObjectList<JumpPlatformDisappear>::iterator endDisappear = ObjectList<JumpPlatformDisappear>::end();
-        ObjectList<JumpPlatformDisappear>::iterator itDisappear = beginDisappear;
-
-        while (itDisappear != endDisappear)
+        ObjectList<JumpPlatformDisappear> listDisappear;
+        ObjectList<JumpPlatformDisappear>::iterator itDisappear = listDisappear.begin();
+
+        while (itDisappear != listDisappear.end())
         {
             if (!itDisappear->isActive())
@@ -185,9 +180,8 @@
         }
 
-        ObjectList<JumpPlatformTimer>::iterator beginTimer = ObjectList<JumpPlatformTimer>::begin();
-        ObjectList<JumpPlatformTimer>::iterator endTimer = ObjectList<JumpPlatformTimer>::end();
-        ObjectList<JumpPlatformTimer>::iterator itTimer = beginTimer;
-
-        while (itTimer != endTimer)
+        ObjectList<JumpPlatformTimer> listTimer;
+        ObjectList<JumpPlatformTimer>::iterator itTimer = listTimer.begin();
+
+        while (itTimer != listTimer.end())
         {
             if (!itTimer->isActive())
@@ -204,10 +198,9 @@
         }
 
-        ObjectList<JumpProjectile>::iterator beginProjectile = ObjectList<JumpProjectile>::begin();
-        ObjectList<JumpProjectile>::iterator endProjectile = ObjectList<JumpProjectile>::end();
-        ObjectList<JumpProjectile>::iterator itProjectile = beginProjectile;
+        ObjectList<JumpProjectile> listProjectile;
+        ObjectList<JumpProjectile>::iterator itProjectile = listProjectile.begin();
         Vector3 projectilePosition;
 
-        while (itProjectile != endProjectile)
+        while (itProjectile != listProjectile.end())
         {
             projectilePosition = itProjectile->getPosition();
@@ -225,10 +218,9 @@
         }
 
-        ObjectList<JumpEnemy>::iterator beginEnemy = ObjectList<JumpEnemy>::begin();
-        ObjectList<JumpEnemy>::iterator endEnemy = ObjectList<JumpEnemy>::end();
-        ObjectList<JumpEnemy>::iterator itEnemy = beginEnemy;
+        ObjectList<JumpEnemy> listEnemy;
+        ObjectList<JumpEnemy>::iterator itEnemy = listEnemy.begin();
         Vector3 enemyPosition;
 
-        while (itEnemy != endEnemy)
+        while (itEnemy != listEnemy.end())
         {
             enemyPosition = itEnemy->getPosition();
@@ -246,10 +238,9 @@
         }
 
-        ObjectList<JumpItem>::iterator beginItem = ObjectList<JumpItem>::begin();
-        ObjectList<JumpItem>::iterator endItem = ObjectList<JumpItem>::end();
-        ObjectList<JumpItem>::iterator itItem = beginItem;
+        ObjectList<JumpItem> listItem;
+        ObjectList<JumpItem>::iterator itItem = listItem.begin();
         Vector3 itemPosition;
 
-        while (itItem != endItem)
+        while (itItem != listItem.end())
         {
             itemPosition = itItem->getPosition();
@@ -273,12 +264,12 @@
     void Jump::cleanup()
     {
-        camera = 0;
+        camera = nullptr;
     }
 
     void Jump::start()
     {
-        if (center_ != NULL) // There needs to be a JumpCenterpoint, i.e. the area the game takes place.
-        {
-            if (figure_ == NULL)
+        if (center_ != nullptr) // There needs to be a JumpCenterpoint, i.e. the area the game takes place.
+        {
+            if (figure_ == nullptr)
             {
                 figure_ = new JumpFigure(center_->getContext());
@@ -301,5 +292,5 @@
         Deathmatch::start();
 
-        if (figure_ != NULL)
+        if (figure_ != nullptr)
         {
             camera = figure_->getCamera();
@@ -328,5 +319,5 @@
         assert(player);
 
-        if (figure_->getPlayer() == NULL)
+        if (figure_->getPlayer() == nullptr)
         {
             player->startControl(figure_);
@@ -337,5 +328,5 @@
     PlayerInfo* Jump::getPlayer() const
     {
-        if (this->figure_ != NULL)
+        if (this->figure_ != nullptr)
         {
             return this->figure_->getPlayer();
@@ -343,5 +334,5 @@
         else
         {
-            return 0;
+            return nullptr;
         }
     }
@@ -349,5 +340,5 @@
     void Jump::addPlatform(JumpPlatform* newPlatform, std::string platformTemplate, float xPosition, float zPosition)
     {
-        if (newPlatform != NULL && center_ != NULL)
+        if (newPlatform != nullptr && center_ != nullptr)
         {
             newPlatform->addTemplate(platformTemplate);
@@ -417,5 +408,5 @@
     {
         JumpProjectile* newProjectile = new JumpProjectile(center_->getContext());
-        if (newProjectile != NULL && center_ != NULL)
+        if (newProjectile != nullptr && center_ != nullptr)
         {
             newProjectile->addTemplate(center_->getProjectileTemplate());
@@ -430,5 +421,5 @@
     {
         JumpSpring* newSpring = new JumpSpring(center_->getContext());
-        if (newSpring != NULL && center_ != NULL)
+        if (newSpring != nullptr && center_ != nullptr)
         {
             newSpring->addTemplate(center_->getSpringTemplate());
@@ -443,5 +434,5 @@
     {
         JumpSpring* newSpring = new JumpSpring(center_->getContext());
-        if (newSpring != NULL && center_ != NULL)
+        if (newSpring != nullptr && center_ != nullptr)
         {
             newSpring->addTemplate(center_->getSpringTemplate());
@@ -456,5 +447,5 @@
     {
         JumpRocket* newRocket = new JumpRocket(center_->getContext());
-        if (newRocket != NULL && center_ != NULL)
+        if (newRocket != nullptr && center_ != nullptr)
         {
             newRocket->addTemplate(center_->getRocketTemplate());
@@ -469,5 +460,5 @@
     {
         JumpRocket* newRocket = new JumpRocket(center_->getContext());
-        if (newRocket != NULL && center_ != NULL)
+        if (newRocket != nullptr && center_ != nullptr)
         {
             newRocket->addTemplate(center_->getRocketTemplate());
@@ -482,5 +473,5 @@
     {
         JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
-        if (newPropeller != NULL && center_ != NULL)
+        if (newPropeller != nullptr && center_ != nullptr)
         {
             newPropeller->addTemplate(center_->getPropellerTemplate());
@@ -495,5 +486,5 @@
     {
         JumpPropeller* newPropeller = new JumpPropeller(center_->getContext());
-        if (newPropeller != NULL && center_ != NULL)
+        if (newPropeller != nullptr && center_ != nullptr)
         {
             newPropeller->addTemplate(center_->getPropellerTemplate());
@@ -508,5 +499,5 @@
     {
         JumpBoots* newBoots = new JumpBoots(center_->getContext());
-        if (newBoots != NULL && center_ != NULL)
+        if (newBoots != nullptr && center_ != nullptr)
         {
             newBoots->addTemplate(center_->getBootsTemplate());
@@ -521,5 +512,5 @@
     {
         JumpBoots* newBoots = new JumpBoots(center_->getContext());
-        if (newBoots != NULL && center_ != NULL)
+        if (newBoots != nullptr && center_ != nullptr)
         {
             newBoots->addTemplate(center_->getBootsTemplate());
@@ -534,5 +525,5 @@
     {
         JumpShield* newShield = new JumpShield(center_->getContext());
-        if (newShield != NULL && center_ != NULL)
+        if (newShield != nullptr && center_ != nullptr)
         {
             newShield->addTemplate(center_->getShieldTemplate());
@@ -547,5 +538,5 @@
     {
         JumpShield* newShield = new JumpShield(center_->getContext());
-        if (newShield != NULL && center_ != NULL)
+        if (newShield != nullptr && center_ != nullptr)
         {
             newShield->addTemplate(center_->getShieldTemplate());
@@ -560,5 +551,5 @@
     {
         JumpEnemy* newEnemy = new JumpEnemy(center_->getContext());
-        if (newEnemy != NULL && center_ != NULL)
+        if (newEnemy != nullptr && center_ != nullptr)
         {
             switch (type)
@@ -619,12 +610,12 @@
         const int numJ = 4;
 
-        enum PlatformType
-        {
-            PLATFORM_EMPTY, PLATFORM_STATIC, PLATFORM_HMOVE, PLATFORM_VMOVE, PLATFORM_DISAPPEAR, PLATFORM_TIMER, PLATFORM_FAKE
+        enum class PlatformType
+        {
+            EMPTY, STATIC, HMOVE, VMOVE, DISAPPEAR, TIMER, FAKE
         };
 
-        enum ItemType
-        {
-            ITEM_NOTHING, ITEM_SPRING, ITEM_PROPELLER, ITEM_ROCKET, ITEM_BOOTS, ITEM_SHIELD
+        enum class ItemType
+        {
+            NOTHING, SPRING, PROPELLER, ROCKET, BOOTS, SHIELD
         };
 
@@ -640,5 +631,5 @@
             for (int j = 0; j < numJ; ++j)
             {
-                matrix[i][j].type = PLATFORM_EMPTY;
+                matrix[i][j].type = PlatformType::EMPTY;
                 matrix[i][j].done = false;
             }
@@ -646,9 +637,9 @@
         PlatformType platformtype1;
         PlatformType platformtype2;
-        ItemType itemType = ITEM_NOTHING;
+        ItemType itemType = ItemType::NOTHING;
 
         if (rand()%2 == 0)
         {
-            itemType = ITEM_SPRING;
+            itemType = ItemType::SPRING;
         }
         else if (rand()%2 == 0 && sectionNumber_ > 3)
@@ -657,14 +648,14 @@
             {
             case 0:
-                itemType = ITEM_PROPELLER;
+                itemType = ItemType::PROPELLER;
                 break;
             case 1:
-                itemType = ITEM_ROCKET;
+                itemType = ItemType::ROCKET;
                 break;
             case 2:
-                itemType = ITEM_BOOTS;
+                itemType = ItemType::BOOTS;
                 break;
             case 3:
-                itemType = ITEM_SHIELD;
+                itemType = ItemType::SHIELD;
                 break;
             default:
@@ -676,122 +667,122 @@
         {
         case 0:
-            platformtype1 = PLATFORM_STATIC;
-            platformtype2 = PLATFORM_STATIC;
+            platformtype1 = PlatformType::STATIC;
+            platformtype2 = PlatformType::STATIC;
             break;
         case 1:
-            platformtype1 = PLATFORM_STATIC;
-            platformtype2 = PLATFORM_STATIC;
+            platformtype1 = PlatformType::STATIC;
+            platformtype2 = PlatformType::STATIC;
             break;
         case 2:
-            platformtype1 = PLATFORM_STATIC;
-            platformtype2 = PLATFORM_HMOVE;
+            platformtype1 = PlatformType::STATIC;
+            platformtype2 = PlatformType::HMOVE;
             break;
         case 3:
-            platformtype1 = PLATFORM_STATIC;
-            platformtype2 = PLATFORM_DISAPPEAR;
+            platformtype1 = PlatformType::STATIC;
+            platformtype2 = PlatformType::DISAPPEAR;
             break;
         case 4:
-            platformtype1 = PLATFORM_STATIC;
-            platformtype2 = PLATFORM_VMOVE;
+            platformtype1 = PlatformType::STATIC;
+            platformtype2 = PlatformType::VMOVE;
             break;
         case 5:
-            platformtype1 = PLATFORM_STATIC;
-            platformtype2 = PLATFORM_TIMER;
+            platformtype1 = PlatformType::STATIC;
+            platformtype2 = PlatformType::TIMER;
             break;
         case 6:
-            platformtype1 = PLATFORM_HMOVE;
-            platformtype2 = PLATFORM_STATIC;
+            platformtype1 = PlatformType::HMOVE;
+            platformtype2 = PlatformType::STATIC;
             break;
         case 7:
-            platformtype1 = PLATFORM_HMOVE;
-            platformtype2 = PLATFORM_HMOVE;
+            platformtype1 = PlatformType::HMOVE;
+            platformtype2 = PlatformType::HMOVE;
             break;
         case 8:
-            platformtype1 = PLATFORM_HMOVE;
-            platformtype2 = PLATFORM_HMOVE;
+            platformtype1 = PlatformType::HMOVE;
+            platformtype2 = PlatformType::HMOVE;
             break;
         case 9:
-            platformtype1 = PLATFORM_HMOVE;
-            platformtype2 = PLATFORM_DISAPPEAR;
+            platformtype1 = PlatformType::HMOVE;
+            platformtype2 = PlatformType::DISAPPEAR;
             break;
         case 10:
-            platformtype1 = PLATFORM_HMOVE;
-            platformtype2 = PLATFORM_VMOVE;
+            platformtype1 = PlatformType::HMOVE;
+            platformtype2 = PlatformType::VMOVE;
             break;
         case 11:
-            platformtype1 = PLATFORM_HMOVE;
-            platformtype2 = PLATFORM_TIMER;
+            platformtype1 = PlatformType::HMOVE;
+            platformtype2 = PlatformType::TIMER;
             break;
         case 12:
-            platformtype1 = PLATFORM_DISAPPEAR;
-            platformtype2 = PLATFORM_STATIC;
+            platformtype1 = PlatformType::DISAPPEAR;
+            platformtype2 = PlatformType::STATIC;
             break;
         case 13:
-            platformtype1 = PLATFORM_DISAPPEAR;
-            platformtype2 = PLATFORM_HMOVE;
+            platformtype1 = PlatformType::DISAPPEAR;
+            platformtype2 = PlatformType::HMOVE;
             break;
         case 14:
-            platformtype1 = PLATFORM_DISAPPEAR;
-            platformtype2 = PLATFORM_DISAPPEAR;
+            platformtype1 = PlatformType::DISAPPEAR;
+            platformtype2 = PlatformType::DISAPPEAR;
             break;
         case 15:
-            platformtype1 = PLATFORM_DISAPPEAR;
-            platformtype2 = PLATFORM_DISAPPEAR;
+            platformtype1 = PlatformType::DISAPPEAR;
+            platformtype2 = PlatformType::DISAPPEAR;
             break;
         case 16:
-            platformtype1 = PLATFORM_DISAPPEAR;
-            platformtype2 = PLATFORM_VMOVE;
+            platformtype1 = PlatformType::DISAPPEAR;
+            platformtype2 = PlatformType::VMOVE;
             break;
         case 17:
-            platformtype1 = PLATFORM_DISAPPEAR;
-            platformtype2 = PLATFORM_TIMER;
+            platformtype1 = PlatformType::DISAPPEAR;
+            platformtype2 = PlatformType::TIMER;
             break;
         case 18:
-            platformtype1 = PLATFORM_VMOVE;
-            platformtype2 = PLATFORM_STATIC;
+            platformtype1 = PlatformType::VMOVE;
+            platformtype2 = PlatformType::STATIC;
             break;
         case 19:
-            platformtype1 = PLATFORM_VMOVE;
-            platformtype2 = PLATFORM_HMOVE;
+            platformtype1 = PlatformType::VMOVE;
+            platformtype2 = PlatformType::HMOVE;
             break;
         case 20:
-            platformtype1 = PLATFORM_VMOVE;
-            platformtype2 = PLATFORM_DISAPPEAR;
+            platformtype1 = PlatformType::VMOVE;
+            platformtype2 = PlatformType::DISAPPEAR;
             break;
         case 21:
-            platformtype1 = PLATFORM_VMOVE;
-            platformtype2 = PLATFORM_VMOVE;
+            platformtype1 = PlatformType::VMOVE;
+            platformtype2 = PlatformType::VMOVE;
             break;
         case 22:
-            platformtype1 = PLATFORM_VMOVE;
-            platformtype2 = PLATFORM_VMOVE;
+            platformtype1 = PlatformType::VMOVE;
+            platformtype2 = PlatformType::VMOVE;
             break;
         case 23:
-            platformtype1 = PLATFORM_VMOVE;
-            platformtype2 = PLATFORM_TIMER;
+            platformtype1 = PlatformType::VMOVE;
+            platformtype2 = PlatformType::TIMER;
             break;
         case 24:
-            platformtype1 = PLATFORM_TIMER;
-            platformtype2 = PLATFORM_STATIC;
+            platformtype1 = PlatformType::TIMER;
+            platformtype2 = PlatformType::STATIC;
             break;
         case 25:
-            platformtype1 = PLATFORM_TIMER;
-            platformtype2 = PLATFORM_HMOVE;
+            platformtype1 = PlatformType::TIMER;
+            platformtype2 = PlatformType::HMOVE;
             break;
         case 26:
-            platformtype1 = PLATFORM_TIMER;
-            platformtype2 = PLATFORM_DISAPPEAR;
+            platformtype1 = PlatformType::TIMER;
+            platformtype2 = PlatformType::DISAPPEAR;
             break;
         case 27:
-            platformtype1 = PLATFORM_TIMER;
-            platformtype2 = PLATFORM_VMOVE;
+            platformtype1 = PlatformType::TIMER;
+            platformtype2 = PlatformType::VMOVE;
             break;
         case 28:
-            platformtype1 = PLATFORM_TIMER;
-            platformtype2 = PLATFORM_TIMER;
+            platformtype1 = PlatformType::TIMER;
+            platformtype2 = PlatformType::TIMER;
             break;
         default:
-            platformtype1 = PLATFORM_TIMER;
-            platformtype2 = PLATFORM_TIMER;
+            platformtype1 = PlatformType::TIMER;
+            platformtype2 = PlatformType::TIMER;
             break;
         }
@@ -816,6 +807,6 @@
         if (platformtype1 == platformtype2 && sectionNumber_ > 10 && rand()%2 == 0)
         {
-            matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
+            matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
         }
 
@@ -825,9 +816,9 @@
             if (rand()%2 == 0)
             {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            }
-            else
-            {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            }
+            else
+            {
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::FAKE;
             }
         }
@@ -836,17 +827,17 @@
             if (rand()%2 == 0)
             {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            }
-            else
-            {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            }
+            else
+            {
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::FAKE;
             }
             if (rand()%2 == 0)
             {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            }
-            else
-            {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            }
+            else
+            {
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::FAKE;
             }
         }
@@ -855,25 +846,25 @@
             if (rand()%2 == 0)
             {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            }
-            else
-            {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            }
+            else
+            {
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::FAKE;
             }
             if (rand()%2 == 0)
             {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            }
-            else
-            {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            }
+            else
+            {
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::FAKE;
             }
             if (rand()%2 == 0)
             {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_EMPTY;
-            }
-            else
-            {
-                matrix[rand()%numI][rand()%numJ].type = PLATFORM_FAKE;
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::EMPTY;
+            }
+            else
+            {
+                matrix[rand()%numI][rand()%numJ].type = PlatformType::FAKE;
             }
         }
@@ -898,8 +889,8 @@
                     switch(matrix[i][j].type)
                     {
-                    case PLATFORM_EMPTY:
+                    case PlatformType::EMPTY:
                         matrix[i][j].done = true;
                         break;
-                    case PLATFORM_STATIC:
+                    case PlatformType::STATIC:
                         xPosition = randomXPosition(numJ, j);
                         zPosition = sectionBegin + i*sectionLength/numI;
@@ -907,5 +898,5 @@
                         matrix[i][j].done = true;
                         break;
-                    case PLATFORM_FAKE:
+                    case PlatformType::FAKE:
                         xPosition = randomXPosition(numJ, j);
                         zPosition = sectionBegin + i*sectionLength/numI;
@@ -913,5 +904,5 @@
                         matrix[i][j].done = true;
                         break;
-                    case PLATFORM_TIMER:
+                    case PlatformType::TIMER:
                         xPosition = randomXPosition(numJ, j);
                         zPosition = sectionBegin + i*sectionLength/numI;
@@ -919,5 +910,5 @@
                         matrix[i][j].done = true;
                         break;
-                    case PLATFORM_DISAPPEAR:
+                    case PlatformType::DISAPPEAR:
                         xPosition = randomXPosition(numJ, j);
                         zPosition = sectionBegin + i*sectionLength/numI;
@@ -925,7 +916,7 @@
                         matrix[i][j].done = true;
                         break;
-                    case PLATFORM_HMOVE:
+                    case PlatformType::HMOVE:
                         xVelocity = randomSpeed();
-                        if (j <= numJ-3 && matrix[i][j+1].type == PLATFORM_HMOVE && matrix[i][j+2].type == PLATFORM_HMOVE && rand()%2 == 0)
+                        if (j <= numJ-3 && matrix[i][j+1].type == PlatformType::HMOVE && matrix[i][j+2].type == PlatformType::HMOVE && rand()%2 == 0)
                         {
                             leftBoundary = randomXPositionLeft(numJ, j);
@@ -938,5 +929,5 @@
                             matrix[i][j+2].done = true;
                         }
-                        else if (j <= numJ-2 && matrix[i][j+1].type == PLATFORM_HMOVE && rand()%2 == 0)
+                        else if (j <= numJ-2 && matrix[i][j+1].type == PlatformType::HMOVE && rand()%2 == 0)
                         {
                             leftBoundary = randomXPositionLeft(numJ, j);
@@ -958,7 +949,7 @@
                         }
                         break;
-                    case PLATFORM_VMOVE:
+                    case PlatformType::VMOVE:
                         zVelocity = randomSpeed();
-                        if (i <= numI-3 && matrix[i+1][j].type == PLATFORM_VMOVE && matrix[i+2][j].type == PLATFORM_VMOVE && rand()%2 == 0)
+                        if (i <= numI-3 && matrix[i+1][j].type == PlatformType::VMOVE && matrix[i+2][j].type == PlatformType::VMOVE && rand()%2 == 0)
                         {
                             lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
@@ -971,5 +962,5 @@
                             matrix[i+2][j].done = true;
                         }
-                        else if (i <= numI-2 && matrix[i+1][j].type == PLATFORM_VMOVE && rand()%2 == 0)
+                        else if (i <= numI-2 && matrix[i+1][j].type == PlatformType::VMOVE && rand()%2 == 0)
                         {
                             lowerBoundary = randomZPositionLower(numI, i, sectionBegin, sectionEnd);
@@ -1009,14 +1000,14 @@
                 switch (itemType)
                 {
-                case ITEM_ROCKET:
+                case ItemType::ROCKET:
                     addRocket(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
                     break;
-                case ITEM_PROPELLER:
+                case ItemType::PROPELLER:
                     addPropeller(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
                     break;
-                case ITEM_BOOTS:
+                case ItemType::BOOTS:
                     addBoots(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
                     break;
-                case ITEM_SHIELD:
+                case ItemType::SHIELD:
                     addShield(0.0, randomPosition(sectionBegin, sectionBegin + sectionLength), -fieldWidth/2, fieldWidth/2, 0.0, 0.0, randomSpeed(), 0.0);
                     break;
@@ -1029,14 +1020,14 @@
                 switch (itemType)
                 {
-                case ITEM_ROCKET:
+                case ItemType::ROCKET:
                     addRocket(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
                     break;
-                case ITEM_PROPELLER:
+                case ItemType::PROPELLER:
                     addPropeller(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
                     break;
-                case ITEM_BOOTS:
+                case ItemType::BOOTS:
                     addBoots(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
                     break;
-                case ITEM_SHIELD:
+                case ItemType::SHIELD:
                     addShield(randomPosition(-fieldWidth/2, fieldWidth/2), sectionBegin + sectionLength/2, 0.0, 0.0, sectionBegin, sectionEnd, 0.0, randomSpeed());
                     break;
@@ -1054,17 +1045,17 @@
                 switch (itemType)
                 {
-                case ITEM_SPRING:
+                case ItemType::SPRING:
                     addSpring(itemPlatform);
                     break;
-                case ITEM_ROCKET:
+                case ItemType::ROCKET:
                     addRocket(itemPlatform);
                     break;
-                case ITEM_PROPELLER:
+                case ItemType::PROPELLER:
                     addPropeller(itemPlatform);
                     break;
-                case ITEM_BOOTS:
+                case ItemType::BOOTS:
                     addBoots(itemPlatform);
                     break;
-                case ITEM_SHIELD:
+                case ItemType::SHIELD:
                     addShield(itemPlatform);
                     break;
@@ -1273,19 +1264,19 @@
     float Jump::getFuel() const
     {
-        if (this->figure_ != NULL)
-        {
-            if (this->figure_->rocketActive_ != NULL)
+        if (this->figure_ != nullptr)
+        {
+            if (this->figure_->rocketActive_ != nullptr)
             {
                 return this->figure_->rocketActive_->getFuelState();
             }
-            else if (this->figure_->propellerActive_ != NULL)
+            else if (this->figure_->propellerActive_ != nullptr)
             {
                 return this->figure_->propellerActive_->getFuelState();
             }
-            else if (this->figure_->shieldActive_ != NULL)
+            else if (this->figure_->shieldActive_ != nullptr)
             {
                 return this->figure_->shieldActive_->getFuelState();
             }
-            else if (this->figure_->bootsActive_ != NULL)
+            else if (this->figure_->bootsActive_ != nullptr)
             {
                 return this->figure_->bootsActive_->getFuelState();
@@ -1300,3 +1291,9 @@
         return figure_->dead_;
     }
+
+    void Jump::setCenterpoint(JumpCenterpoint* center)
+    {
+        center_ = center;
+    }
+
 }
Index: code/trunk/src/modules/jump/Jump.h
===================================================================
--- code/trunk/src/modules/jump/Jump.h	(revision 11056)
+++ code/trunk/src/modules/jump/Jump.h	(revision 11071)
@@ -31,9 +31,5 @@
 
 #include "jump/JumpPrereqs.h"
-#include "tools/Timer.h"
-#include "graphics/Camera.h"
 #include "gametypes/Deathmatch.h"
-#include "JumpCenterpoint.h"
-#include <list>
 
 namespace orxonox
@@ -44,13 +40,12 @@
             Jump(Context* context);
             virtual ~Jump();
-            virtual void tick(float dt);
-            virtual void start();
-            virtual void end();
-            virtual void spawnPlayer(PlayerInfo* player);
+            virtual void tick(float dt) override;
+            virtual void start() override;
+            virtual void end() override;
+            virtual void spawnPlayer(PlayerInfo* player) override;
             int getScore(PlayerInfo* player) const;
             float getFuel() const;
             bool getDead(PlayerInfo* player) const;
-            void setCenterpoint(JumpCenterpoint* center)
-                { center_ = center; }
+            void setCenterpoint(JumpCenterpoint* center);
             PlayerInfo* getPlayer() const;
 
Index: code/trunk/src/modules/jump/JumpBoots.cc
===================================================================
--- code/trunk/src/modules/jump/JumpBoots.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpBoots.cc	(revision 11071)
@@ -35,12 +35,5 @@
 
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
-
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -67,9 +60,4 @@
     }
 
-    void JumpBoots::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpBoots, XMLPort, xmlelement, mode);
-    }
-
     void JumpBoots::tick(float dt)
     {
@@ -78,5 +66,5 @@
         Vector3 rocketPosition = getWorldPosition();
 
-        if (attachedToFigure_ == false && figure_ != NULL)
+        if (attachedToFigure_ == false && figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getWorldPosition();
Index: code/trunk/src/modules/jump/JumpBoots.h
===================================================================
--- code/trunk/src/modules/jump/JumpBoots.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpBoots.h	(revision 11071)
@@ -30,8 +30,6 @@
 #define _JumpBoots_H__
 
-#include "jump/JumpPrereqs.h"
-#include "util/Math.h"
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpItem.h"
 
 namespace orxonox
@@ -42,7 +40,6 @@
             JumpBoots(Context* context);
             virtual ~JumpBoots();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void touchFigure();
+            virtual void tick(float dt) override;
+            virtual void touchFigure() override;
             virtual float getFuelState();
         protected:
Index: code/trunk/src/modules/jump/JumpCenterpoint.cc
===================================================================
--- code/trunk/src/modules/jump/JumpCenterpoint.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpCenterpoint.cc	(revision 11071)
@@ -33,4 +33,5 @@
 
 #include "JumpCenterpoint.h"
+
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
@@ -82,5 +83,5 @@
     void JumpCenterpoint::checkGametype()
     {
-        if (getGametype() != NULL && this->getGametype()->isA(Class(Jump)))
+        if (getGametype() != nullptr && this->getGametype()->isA(Class(Jump)))
         {
             Jump* jumpGametype = orxonox_cast<Jump*>(this->getGametype());
Index: code/trunk/src/modules/jump/JumpCenterpoint.h
===================================================================
--- code/trunk/src/modules/jump/JumpCenterpoint.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpCenterpoint.h	(revision 11071)
@@ -31,9 +31,4 @@
 
 #include "jump/JumpPrereqs.h"
-
-#include <string>
-
-#include <util/Math.h>
-
 #include "worldentities/StaticEntity.h"
 
@@ -113,5 +108,5 @@
             JumpCenterpoint(Context* context); //!< Constructor. Registers and initializes the object and checks whether the gametype is actually Jump.
             virtual ~JumpCenterpoint() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method to create a JumpCenterpoint through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method to create a JumpCenterpoint through XML.
             void setPlatformStaticTemplate(const std::string& balltemplate)
                 { this->platformStaticTemplate_ = balltemplate; }
Index: code/trunk/src/modules/jump/JumpEnemy.cc
===================================================================
--- code/trunk/src/modules/jump/JumpEnemy.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpEnemy.cc	(revision 11071)
@@ -35,12 +35,6 @@
 
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
-
+#include "core/XMLPort.h"
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -57,5 +51,5 @@
 
         dead_ = false;
-        figure_ = 0;
+        figure_ = nullptr;
         width_ = 0.0;
         height_ = 0.0;
@@ -125,5 +119,5 @@
         Vector3 enemyPosition = getPosition();
 
-        if (figure_ != NULL)
+        if (figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getPosition();
Index: code/trunk/src/modules/jump/JumpEnemy.h
===================================================================
--- code/trunk/src/modules/jump/JumpEnemy.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpEnemy.h	(revision 11071)
@@ -37,9 +37,5 @@
 
 #include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
 #include "worldentities/MovableEntity.h"
-
 
 namespace orxonox
@@ -50,6 +46,6 @@
             JumpEnemy(Context* context);
             virtual ~JumpEnemy();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             void setFieldDimension(float width, float height)
                 { this->fieldWidth_ = width; this->fieldHeight_ = height; }
Index: code/trunk/src/modules/jump/JumpFigure.cc
===================================================================
--- code/trunk/src/modules/jump/JumpFigure.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpFigure.cc	(revision 11071)
@@ -36,4 +36,9 @@
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
+#include "graphics/Model.h"
+#include "JumpRocket.h"
+#include "JumpPropeller.h"
+#include "JumpBoots.h"
+#include "JumpShield.h"
 
 namespace orxonox
@@ -46,6 +51,6 @@
 
         // initialize variables
-        leftHand_ = NULL;
-        rightHand_ = NULL;
+        leftHand_ = nullptr;
+        rightHand_ = nullptr;
         fieldHeight_ = 0;
         fieldWidth_ = 0;
@@ -70,8 +75,8 @@
         animateHands_ = false;
         turnUp_ = false;
-        rocketActive_ = NULL;
-        propellerActive_ = NULL;
-        bootsActive_ = NULL;
-        shieldActive_ = NULL;
+        rocketActive_ = nullptr;
+        propellerActive_ = nullptr;
+        bootsActive_ = nullptr;
+        shieldActive_ = nullptr;
         rocketSpeed_ = 0.0;
         propellerSpeed_ = 0.0;
@@ -106,9 +111,9 @@
             // Move up/down
             Vector3 velocity = getVelocity();
-            if (rocketActive_ != NULL)
+            if (rocketActive_ != nullptr)
             {
                 velocity.z = rocketSpeed_;
             }
-            else if (propellerActive_ != NULL)
+            else if (propellerActive_ != nullptr)
             {
                 velocity.z = propellerSpeed_;
@@ -139,9 +144,9 @@
                 }
 
-                if (leftHand_ != NULL)
+                if (leftHand_ != nullptr)
                 {
                     leftHand_->setOrientation(Vector3(0.0, 1.0, 0.0), Degree(-handAngle_));
                 }
-                if (rightHand_ != NULL)
+                if (rightHand_ != nullptr)
                 {
                     rightHand_->setOrientation(Vector3(0.0, 1.0, 0.0), Degree(handAngle_));
@@ -207,5 +212,5 @@
         {
             Vector3 velocity = getVelocity();
-            if (bootsActive_ == NULL)
+            if (bootsActive_ == nullptr)
             {
                 velocity.z = 1.2f*jumpSpeed_;
@@ -234,5 +239,5 @@
     void JumpFigure::CollisionWithEnemy(JumpEnemy* enemy)
     {
-        if (rocketActive_ == NULL && propellerActive_ == NULL && shieldActive_ == NULL)
+        if (rocketActive_ == nullptr && propellerActive_ == nullptr && shieldActive_ == nullptr)
         {
             dead_ = true;
@@ -242,5 +247,5 @@
     bool JumpFigure::StartRocket(JumpRocket* rocket)
     {
-        if (rocketActive_ == NULL && propellerActive_ == NULL && bootsActive_ == NULL)
+        if (rocketActive_ == nullptr && propellerActive_ == nullptr && bootsActive_ == nullptr)
         {
             attach(rocket);
@@ -261,10 +266,10 @@
         detach(rocket);
         rocket->destroy();
-        rocketActive_ = NULL;
+        rocketActive_ = nullptr;
     }
 
     bool JumpFigure::StartPropeller(JumpPropeller* propeller)
     {
-        if (rocketActive_ == NULL && propellerActive_ == NULL && bootsActive_ == NULL)
+        if (rocketActive_ == nullptr && propellerActive_ == nullptr && bootsActive_ == nullptr)
         {
             attach(propeller);
@@ -285,10 +290,10 @@
         detach(propeller);
         propeller->destroy();
-        propellerActive_ = NULL;
+        propellerActive_ = nullptr;
     }
 
     bool JumpFigure::StartBoots(JumpBoots* boots)
     {
-        if (rocketActive_ == NULL && propellerActive_ == NULL && bootsActive_ == NULL)
+        if (rocketActive_ == nullptr && propellerActive_ == nullptr && bootsActive_ == nullptr)
         {
             attach(boots);
@@ -309,10 +314,10 @@
         detach(boots);
         boots->destroy();
-        bootsActive_ = NULL;
+        bootsActive_ = nullptr;
     }
 
     bool JumpFigure::StartShield(JumpShield* shield)
     {
-        if (shieldActive_ == false)
+        if (shieldActive_ == nullptr)
         {
             attach(shield);
@@ -333,5 +338,5 @@
         detach(shield);
         shield->destroy();
-        shieldActive_ = NULL;
+        shieldActive_ = nullptr;
     }
 
Index: code/trunk/src/modules/jump/JumpFigure.h
===================================================================
--- code/trunk/src/modules/jump/JumpFigure.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpFigure.h	(revision 11071)
@@ -40,13 +40,13 @@
             JumpFigure(Context* context); //!< Constructor. Registers and initializes the object.
             virtual ~JumpFigure() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
-            virtual void moveFrontBack(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void moveRightLeft(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
+            virtual void moveFrontBack(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void moveRightLeft(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
             void fire(unsigned int firemode);
-            virtual void fired(unsigned int firemode);
+            virtual void fired(unsigned int firemode) override;
             virtual void JumpFromPlatform(JumpPlatform* platform);
             virtual void JumpFromSpring(JumpSpring* spring);
Index: code/trunk/src/modules/jump/JumpItem.cc
===================================================================
--- code/trunk/src/modules/jump/JumpItem.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpItem.cc	(revision 11071)
@@ -35,12 +35,6 @@
 
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
-
+#include "core/XMLPort.h"
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,5 +48,5 @@
         attachedToFigure_ = false;
 
-        figure_ = 0;
+        figure_ = nullptr;
         height_ = 0.0;
         width_ = 0.0;
Index: code/trunk/src/modules/jump/JumpItem.h
===================================================================
--- code/trunk/src/modules/jump/JumpItem.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpItem.h	(revision 11071)
@@ -37,7 +37,4 @@
 
 #include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
 #include "worldentities/MovableEntity.h"
 
@@ -50,6 +47,6 @@
             JumpItem(Context* context);
             virtual ~JumpItem();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             virtual void setProperties(float newLeftBoundary, float newRightBoundary, float newLowerBoundary, float newUpperBoundary, float newHSpeed, float newVSpeed);
             virtual void setFigure(JumpFigure* newFigure);
Index: code/trunk/src/modules/jump/JumpPlatform.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatform.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatform.cc	(revision 11071)
@@ -36,11 +36,7 @@
 #include "core/CoreIncludes.h"
 #include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
-
+#include "core/XMLPort.h"
+#include "sound/WorldSound.h"
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -52,5 +48,5 @@
         RegisterObject(JumpPlatform);
 
-        figure_ = 0;
+        figure_ = nullptr;
 
         setPosition(Vector3(0,0,0));
@@ -90,5 +86,5 @@
         Vector3 platformPosition = this->getPosition();
 
-        if (figure_ != NULL)
+        if (figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getPosition();
Index: code/trunk/src/modules/jump/JumpPlatform.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatform.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatform.h	(revision 11071)
@@ -36,6 +36,5 @@
 #define _JumpPlatform_H__
 
-#include "jump/JumpPrereqs.h"
-#include "util/Math.h"
+#include "JumpPrereqs.h"
 #include "worldentities/MovableEntity.h"
 
@@ -47,6 +46,6 @@
             JumpPlatform(Context* context);
             virtual ~JumpPlatform();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             void setFigure(JumpFigure* newFigure);
             virtual void touchFigure();
Index: code/trunk/src/modules/jump/JumpPlatformDisappear.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformDisappear.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformDisappear.cc	(revision 11071)
@@ -35,12 +35,5 @@
 
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-
-#include "gametypes/Gametype.h"
-
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -58,14 +51,4 @@
     {
 
-    }
-
-    void JumpPlatformDisappear::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpPlatformDisappear, XMLPort, xmlelement, mode);
-    }
-
-    void JumpPlatformDisappear::tick(float dt)
-    {
-        SUPER(JumpPlatformDisappear, tick, dt);
     }
 
Index: code/trunk/src/modules/jump/JumpPlatformDisappear.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformDisappear.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformDisappear.h	(revision 11071)
@@ -36,7 +36,6 @@
 #define _JumpPlatformDisappear_H__
 
-#include "jump/JumpPrereqs.h"
-#include "util/Math.h"
-#include "worldentities/MovableEntity.h"
+#include "JumpPrereqs.h"
+#include "JumpPlatform.h"
 
 namespace orxonox
@@ -47,9 +46,7 @@
             JumpPlatformDisappear(Context* context);
             virtual ~JumpPlatformDisappear();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
             virtual void setProperties(bool active);
             virtual bool isActive();
-            virtual void touchFigure();
+            virtual void touchFigure() override;
 
         protected:
Index: code/trunk/src/modules/jump/JumpPlatformFake.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformFake.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformFake.cc	(revision 11071)
@@ -33,10 +33,6 @@
 
 #include "JumpPlatformFake.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "gametypes/Gametype.h"
-#include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -53,14 +49,3 @@
 
     }
-
-    void JumpPlatformFake::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpPlatformFake, XMLPort, xmlelement, mode);
-    }
-
-    void JumpPlatformFake::tick(float dt)
-    {
-        SUPER(JumpPlatformFake, tick, dt);
-    }
-
 }
Index: code/trunk/src/modules/jump/JumpPlatformFake.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformFake.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformFake.h	(revision 11071)
@@ -36,10 +36,6 @@
 #define _JumpPlatformFake_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpPlatform.h"
 
 namespace orxonox
@@ -50,6 +46,4 @@
             JumpPlatformFake(Context* context);
             virtual ~JumpPlatformFake();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
     };
 }
Index: code/trunk/src/modules/jump/JumpPlatformHMove.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformHMove.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformHMove.cc	(revision 11071)
@@ -33,10 +33,7 @@
 
 #include "JumpPlatformHMove.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "gametypes/Gametype.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,9 +51,4 @@
     {
 
-    }
-
-    void JumpPlatformHMove::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpPlatformHMove, XMLPort, xmlelement, mode);
     }
 
Index: code/trunk/src/modules/jump/JumpPlatformHMove.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformHMove.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformHMove.h	(revision 11071)
@@ -30,10 +30,6 @@
 #define _JumpPlatformHMove_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpPlatform.h"
 
 namespace orxonox
@@ -45,8 +41,7 @@
             JumpPlatformHMove(Context* context);
             virtual ~JumpPlatformHMove();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
             virtual void setProperties(float leftBoundary, float rightBoundary, float speed);
-            virtual void touchFigure();
+            virtual void touchFigure() override;
 
         protected:
Index: code/trunk/src/modules/jump/JumpPlatformStatic.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformStatic.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformStatic.cc	(revision 11071)
@@ -33,10 +33,7 @@
 
 #include "JumpPlatformStatic.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "gametypes/Gametype.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -55,15 +52,4 @@
     }
 
-    //xml port for loading sounds
-    void JumpPlatformStatic::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpPlatformStatic, XMLPort, xmlelement, mode);
-    }
-
-    void JumpPlatformStatic::tick(float dt)
-    {
-        SUPER(JumpPlatformStatic, tick, dt);
-    }
-
     void JumpPlatformStatic::touchFigure()
     {
Index: code/trunk/src/modules/jump/JumpPlatformStatic.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformStatic.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformStatic.h	(revision 11071)
@@ -30,10 +30,6 @@
 #define _JumpPlatformStatic_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpPlatform.h"
 
 namespace orxonox
@@ -45,8 +41,5 @@
             virtual ~JumpPlatformStatic();
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
-            virtual void touchFigure();
+            virtual void touchFigure() override;
     };
 }
Index: code/trunk/src/modules/jump/JumpPlatformTimer.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformTimer.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformTimer.cc	(revision 11071)
@@ -33,10 +33,9 @@
 
 #include "JumpPlatformTimer.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "gametypes/Gametype.h"
+#include "core/XMLPort.h"
+#include "graphics/ParticleSpawner.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -48,5 +47,5 @@
         RegisterObject(JumpPlatformTimer);
 
-        particleSpawner_ = NULL;
+        particleSpawner_ = nullptr;
 
         setProperties(3.0);
@@ -72,5 +71,5 @@
 
         time_ -= dt;
-        if (time_ < effectStartTime_ && particleSpawner_ == NULL)
+        if (time_ < effectStartTime_ && particleSpawner_ == nullptr)
         {
 
Index: code/trunk/src/modules/jump/JumpPlatformTimer.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformTimer.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformTimer.h	(revision 11071)
@@ -36,11 +36,6 @@
 #define _JumpPlatformTimer_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-#include "graphics/ParticleSpawner.h"
-
+#include "JumpPrereqs.h"
+#include "JumpPlatform.h"
 
 namespace orxonox
@@ -51,9 +46,9 @@
             JumpPlatformTimer(Context* context);
             virtual ~JumpPlatformTimer();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             virtual void setProperties(float time);
             virtual bool isActive(void);
-            virtual void touchFigure();
+            virtual void touchFigure() override;
 
             void setEffectPath(const std::string& effectPath)
Index: code/trunk/src/modules/jump/JumpPlatformVMove.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformVMove.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformVMove.cc	(revision 11071)
@@ -33,10 +33,7 @@
 
 #include "JumpPlatformVMove.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "gametypes/Gametype.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -54,9 +51,4 @@
     {
 
-    }
-
-    void JumpPlatformVMove::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpPlatformVMove, XMLPort, xmlelement, mode);
     }
 
Index: code/trunk/src/modules/jump/JumpPlatformVMove.h
===================================================================
--- code/trunk/src/modules/jump/JumpPlatformVMove.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPlatformVMove.h	(revision 11071)
@@ -30,7 +30,6 @@
 #define _JumpPlatformVMove_H__
 
-#include "jump/JumpPrereqs.h"
-#include "util/Math.h"
-#include "worldentities/MovableEntity.h"
+#include "JumpPrereqs.h"
+#include "JumpPlatform.h"
 
 namespace orxonox
@@ -41,8 +40,7 @@
             JumpPlatformVMove(Context* context);
             virtual ~JumpPlatformVMove();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
             virtual void setProperties(float leftBoundary, float rightBoundary, float speed);
-            virtual void touchFigure();
+            virtual void touchFigure() override;
 
         protected:
Index: code/trunk/src/modules/jump/JumpProjectile.cc
===================================================================
--- code/trunk/src/modules/jump/JumpProjectile.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpProjectile.cc	(revision 11071)
@@ -33,11 +33,8 @@
 
 #include "JumpProjectile.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
+#include "JumpEnemy.h"
 
 namespace orxonox
@@ -49,5 +46,5 @@
         RegisterObject(JumpProjectile);
 
-        figure_ = 0;
+        figure_ = nullptr;
         setPosition(Vector3(0,0,0));
         setVelocity(Vector3(0,0,250.0));
@@ -60,9 +57,4 @@
     }
 
-    void JumpProjectile::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpProjectile, XMLPort, xmlelement, mode);
-    }
-
     void JumpProjectile::tick(float dt)
     {
@@ -71,13 +63,13 @@
         Vector3 projectilePosition = getPosition();
 
-        for (ObjectList<JumpEnemy>::iterator it = ObjectList<JumpEnemy>::begin(); it != ObjectList<JumpEnemy>::end(); ++it)
+        for (JumpEnemy* enemy : ObjectList<JumpEnemy>())
         {
-            Vector3 enemyPosition = it->getPosition();
-            float enemyWidth = it->getWidth();
-            float enemyHeight = it->getHeight();
+            Vector3 enemyPosition = enemy->getPosition();
+            float enemyWidth = enemy->getWidth();
+            float enemyHeight = enemy->getHeight();
 
             if(projectilePosition.x > enemyPosition.x-enemyWidth && projectilePosition.x < enemyPosition.x+enemyWidth && projectilePosition.z > enemyPosition.z-enemyHeight && projectilePosition.z < enemyPosition.z+enemyHeight)
             {
-                it->dead_ = true;
+                enemy->dead_ = true;
             }
         }
Index: code/trunk/src/modules/jump/JumpProjectile.h
===================================================================
--- code/trunk/src/modules/jump/JumpProjectile.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpProjectile.h	(revision 11071)
@@ -43,7 +43,5 @@
             virtual ~JumpProjectile();
 
-            virtual void tick(float dt);
-
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
 
             void setFieldDimension(float width, float height)
Index: code/trunk/src/modules/jump/JumpPropeller.cc
===================================================================
--- code/trunk/src/modules/jump/JumpPropeller.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPropeller.cc	(revision 11071)
@@ -35,12 +35,5 @@
 
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
-
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -67,9 +60,4 @@
     }
 
-    void JumpPropeller::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpPropeller, XMLPort, xmlelement, mode);
-    }
-
     void JumpPropeller::tick(float dt)
     {
@@ -78,5 +66,5 @@
         Vector3 PropellerPosition = getWorldPosition();
 
-        if (attachedToFigure_ == false && figure_ != NULL)
+        if (attachedToFigure_ == false && figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getWorldPosition();
Index: code/trunk/src/modules/jump/JumpPropeller.h
===================================================================
--- code/trunk/src/modules/jump/JumpPropeller.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpPropeller.h	(revision 11071)
@@ -30,10 +30,6 @@
 #define _JumpPropeller_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpItem.h"
 
 namespace orxonox
@@ -44,7 +40,6 @@
             JumpPropeller(Context* context);
             virtual ~JumpPropeller();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void touchFigure();
+            virtual void tick(float dt) override;
+            virtual void touchFigure() override;
             virtual float getFuelState();
         protected:
Index: code/trunk/src/modules/jump/JumpRocket.cc
===================================================================
--- code/trunk/src/modules/jump/JumpRocket.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpRocket.cc	(revision 11071)
@@ -33,11 +33,7 @@
 
 #include "JumpRocket.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -64,9 +60,4 @@
     }
 
-    void JumpRocket::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpRocket, XMLPort, xmlelement, mode);
-    }
-
     void JumpRocket::tick(float dt)
     {
@@ -75,5 +66,5 @@
         Vector3 rocketPosition = getWorldPosition();
 
-        if (attachedToFigure_ == false && figure_ != NULL)
+        if (attachedToFigure_ == false && figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getWorldPosition();
Index: code/trunk/src/modules/jump/JumpRocket.h
===================================================================
--- code/trunk/src/modules/jump/JumpRocket.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpRocket.h	(revision 11071)
@@ -30,7 +30,6 @@
 #define _JumpRocket_H__
 
-#include "jump/JumpPrereqs.h"
-#include "util/Math.h"
-#include "worldentities/MovableEntity.h"
+#include "JumpPrereqs.h"
+#include "JumpItem.h"
 
 namespace orxonox
@@ -41,7 +40,6 @@
             JumpRocket(Context* context);
             virtual ~JumpRocket();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void touchFigure();
+            virtual void tick(float dt) override;
+            virtual void touchFigure() override;
             virtual float getFuelState();
         protected:
Index: code/trunk/src/modules/jump/JumpScore.cc
===================================================================
--- code/trunk/src/modules/jump/JumpScore.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpScore.cc	(revision 11071)
@@ -33,4 +33,5 @@
 
 #include "JumpScore.h"
+
 #include "core/CoreIncludes.h"
 #include "core/XMLPort.h"
@@ -38,5 +39,4 @@
 #include "infos/PlayerInfo.h"
 #include "Jump.h"
-#include "sound/WorldSound.h"
 
 namespace orxonox
@@ -48,5 +48,5 @@
         RegisterObject(JumpScore);
 
-        owner_ = NULL;
+        owner_ = nullptr;
         showScore_ = false;
         showFuel_ = false;
@@ -73,5 +73,5 @@
         SUPER(JumpScore, tick, dt);
 
-        if (owner_ != NULL)
+        if (owner_ != nullptr)
         {
             if (!owner_->hasEnded())
@@ -79,5 +79,5 @@
                 player_ = owner_->getPlayer();
 
-                if (player_ != NULL)
+                if (player_ != nullptr)
                 {
                     if (showScore_ == true)
@@ -116,5 +116,5 @@
         SUPER(JumpScore, changedOwner);
 
-        if (this->getOwner() != NULL && this->getOwner()->getGametype())
+        if (this->getOwner() != nullptr && this->getOwner()->getGametype())
         {
             this->owner_ = orxonox_cast<Jump*>(this->getOwner()->getGametype());
@@ -122,5 +122,5 @@
         else
         {
-            this->owner_ = NULL;
+            this->owner_ = nullptr;
         }
     }
Index: code/trunk/src/modules/jump/JumpScore.h
===================================================================
--- code/trunk/src/modules/jump/JumpScore.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpScore.h	(revision 11071)
@@ -44,7 +44,7 @@
             virtual ~JumpScore();
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
 
             void setShowScore(const bool showScore)
Index: code/trunk/src/modules/jump/JumpShield.cc
===================================================================
--- code/trunk/src/modules/jump/JumpShield.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpShield.cc	(revision 11071)
@@ -35,12 +35,5 @@
 
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
-
 #include "JumpFigure.h"
-
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -67,9 +60,4 @@
     }
 
-    void JumpShield::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpShield, XMLPort, xmlelement, mode);
-    }
-
     void JumpShield::tick(float dt)
     {
@@ -78,5 +66,5 @@
         Vector3 shieldPosition = getWorldPosition();
 
-        if (attachedToFigure_ == false && figure_ != NULL)
+        if (attachedToFigure_ == false && figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getWorldPosition();
Index: code/trunk/src/modules/jump/JumpShield.h
===================================================================
--- code/trunk/src/modules/jump/JumpShield.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpShield.h	(revision 11071)
@@ -30,10 +30,6 @@
 #define _JumpShield_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpItem.h"
 
 namespace orxonox
@@ -44,7 +40,6 @@
             JumpShield(Context* context);
             virtual ~JumpShield();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void touchFigure();
+            virtual void tick(float dt) override;
+            virtual void touchFigure() override;
             virtual float getFuelState();
         protected:
Index: code/trunk/src/modules/jump/JumpSpring.cc
===================================================================
--- code/trunk/src/modules/jump/JumpSpring.cc	(revision 11056)
+++ code/trunk/src/modules/jump/JumpSpring.cc	(revision 11071)
@@ -33,11 +33,7 @@
 
 #include "JumpSpring.h"
+
 #include "core/CoreIncludes.h"
-#include "core/GameMode.h"
-#include "graphics/Model.h"
-#include "gametypes/Gametype.h"
 #include "JumpFigure.h"
-#include "sound/WorldSound.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -63,9 +59,4 @@
     }
 
-    void JumpSpring::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(JumpSpring, XMLPort, xmlelement, mode);
-    }
-
     void JumpSpring::tick(float dt)
     {
@@ -80,5 +71,5 @@
         Vector3 springPosition = getWorldPosition();
 
-        if (figure_ != NULL)
+        if (figure_ != nullptr)
         {
             Vector3 figurePosition = figure_->getWorldPosition();
@@ -103,5 +94,5 @@
     void JumpSpring::accelerateFigure()
     {
-        if (figure_ != 0)
+        if (figure_ != nullptr)
         {
             figure_->JumpFromSpring(this);
Index: code/trunk/src/modules/jump/JumpSpring.h
===================================================================
--- code/trunk/src/modules/jump/JumpSpring.h	(revision 11056)
+++ code/trunk/src/modules/jump/JumpSpring.h	(revision 11071)
@@ -30,10 +30,6 @@
 #define _JumpSpring_H__
 
-#include "jump/JumpPrereqs.h"
-
-#include "util/Math.h"
-
-#include "worldentities/MovableEntity.h"
-
+#include "JumpPrereqs.h"
+#include "JumpItem.h"
 
 namespace orxonox
@@ -44,8 +40,7 @@
             JumpSpring(Context* context);
             virtual ~JumpSpring();
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void tick(float dt) override;
             virtual void accelerateFigure();
-            virtual void touchFigure();
+            virtual void touchFigure() override;
         protected:
             float stretch_;
Index: code/trunk/src/modules/mini4dgame/Mini4Dgame.cc
===================================================================
--- code/trunk/src/modules/mini4dgame/Mini4Dgame.cc	(revision 11056)
+++ code/trunk/src/modules/mini4dgame/Mini4Dgame.cc	(revision 11071)
@@ -66,5 +66,5 @@
         RegisterObject(Mini4Dgame);
 
-        this->board_ = 0;
+        this->board_ = nullptr;
 
         // Set the type of Bots for this particular Gametype.
@@ -88,8 +88,8 @@
     void Mini4Dgame::cleanup()
     {
-        if(this->board_ != NULL)// Destroy the board, if present.
+        if(this->board_ != nullptr)// Destroy the board, if present.
         {
             //this->board_->destroy();
-            this->board_ = 0;
+            this->board_ = nullptr;
         }
     }
@@ -101,8 +101,8 @@
     void Mini4Dgame::start()
     {
-        if (this->board_ != NULL) // There needs to be a Mini4DgameCenterpoint, i.e. the area the game takes place.
+        if (this->board_ != nullptr) // There needs to be a Mini4DgameCenterpoint, i.e. the area the game takes place.
         {
             /*
-            if (this->board_ == NULL)
+            if (this->board_ == nullptr)
             {
                 this->board_ = new Mini4DgameBoard(this->board_->getContext());
@@ -155,11 +155,11 @@
     {
         // first spawn human players to assign always the left bat to the player in singleplayer
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (mapEntry.first->isHumanPlayer() && (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                this->spawnPlayer(mapEntry.first);
         // now spawn bots
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (!it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (!mapEntry.first->isHumanPlayer() && (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                this->spawnPlayer(mapEntry.first);
     }
 
@@ -174,5 +174,5 @@
         assert(player);
 
-        if(false)//this->player_ == NULL)
+        if(false)//this->player_ == nullptr)
         {
             //this->player_ = player;
@@ -183,5 +183,5 @@
     void Mini4Dgame::undoStone()//Vector4 move, const int playerColor)
     {
-        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>::begin();
+        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>().begin();
         it->undoMove();
     }
@@ -191,5 +191,5 @@
     {
         Mini4DgamePosition move = Mini4DgamePosition(x,y,z,w);
-        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>::begin();
+        ObjectList<Mini4DgameBoard>::iterator it = ObjectList<Mini4DgameBoard>().begin();
         it->makeMove(move);
     }
Index: code/trunk/src/modules/mini4dgame/Mini4Dgame.h
===================================================================
--- code/trunk/src/modules/mini4dgame/Mini4Dgame.h	(revision 11056)
+++ code/trunk/src/modules/mini4dgame/Mini4Dgame.h	(revision 11071)
@@ -41,16 +41,4 @@
 namespace orxonox
 {
-
-    namespace mini4DgamePlayerColor
-    {
-        enum color
-        {
-            none,
-            red,
-            blue,
-            green
-        };
-    }
-
     /**
     @brief
@@ -65,8 +53,8 @@
             virtual ~Mini4Dgame(); //!< Destructor. Cleans up, if initialized.
 
-            virtual void start(void); //!< Starts the Mini4Dgame minigame.
-            virtual void end(void); ///!< Ends the Mini4Dgame minigame.
+            virtual void start(void) override; //!< Starts the Mini4Dgame minigame.
+            virtual void end(void) override; ///!< Ends the Mini4Dgame minigame.
 
-            virtual void spawnPlayer(PlayerInfo* player); //!< Spawns the input player.
+            virtual void spawnPlayer(PlayerInfo* player) override; //!< Spawns the input player.
 
             void setGameboard(Mini4DgameBoard* board)
@@ -84,5 +72,5 @@
 
         protected:
-            virtual void spawnPlayersIfRequested(); //!< Spawns player.
+            virtual void spawnPlayersIfRequested() override; //!< Spawns player.
 
 
Index: code/trunk/src/modules/mini4dgame/Mini4DgameAI.cc
===================================================================
--- code/trunk/src/modules/mini4dgame/Mini4DgameAI.cc	(revision 11056)
+++ code/trunk/src/modules/mini4dgame/Mini4DgameAI.cc	(revision 11071)
@@ -60,5 +60,5 @@
 
         this->setConfigValues();
-        this->center_ = 0;
+        this->center_ = nullptr;
     }
 
@@ -104,5 +104,5 @@
                 for(int k=0;k<4;k++){
                     for(int l=0;l<4;l++){
-                        if (this->board_[i][j][k][l]==mini4DgamePlayerColor::none)
+                        if (this->board_[i][j][k][l]==Mini4DgamePlayerColor::none)
                             possibleMoves.push_back(Vector4(i,j,k,l));
                     }
@@ -112,15 +112,3 @@
         return possibleMoves;
     }
-
-    /**
-    @brief
-        Is called each tick.
-        Implements the behavior of the PongAI (i.e. its intelligence).
-    @param dt
-        The time that has elapsed since the last tick.
-    */
-    void Mini4DgameAI::tick(float dt)
-    {
-
-    }
 }
Index: code/trunk/src/modules/mini4dgame/Mini4DgameAI.h
===================================================================
--- code/trunk/src/modules/mini4dgame/Mini4DgameAI.h	(revision 11056)
+++ code/trunk/src/modules/mini4dgame/Mini4DgameAI.h	(revision 11071)
@@ -39,6 +39,4 @@
 #include <list>
 
-#include "tools/interfaces/Tickable.h"
-
 #include "controllers/Controller.h"
 #include "Mini4DgameCenterpoint.h"
@@ -55,5 +53,5 @@
         Oliver Richter
     */
-    class _Mini4DgameExport Mini4DgameAI : public Controller, public Tickable
+    class _Mini4DgameExport Mini4DgameAI : public Controller
     {
         public:
@@ -73,7 +71,4 @@
             Vector4 makeMove(float timeout);
 
-
-            virtual void tick(float dt);
-
             void setCenterpoint(Mini4DgameCenterpoint* center)
                             { this->center_ = center; }
@@ -81,5 +76,5 @@
         protected:
 
-            std::list<std::pair<Timer*, char> > reactionTimers_; //!< A list of reaction timers and the directions that take effect when their timer expires.
+            std::list<std::pair<Timer*, char>> reactionTimers_; //!< A list of reaction timers and the directions that take effect when their timer expires.
             Mini4DgameCenterpoint* center_;
 
@@ -88,5 +83,5 @@
             std::list<Vector4> getPossibleMoves();
             void copyBoard();
-            mini4DgamePlayerColor::color board_[4][4][4][4];
+            Mini4DgamePlayerColor board_[4][4][4][4];
     };
 }
Index: code/trunk/src/modules/mini4dgame/Mini4DgameBoard.cc
===================================================================
--- code/trunk/src/modules/mini4dgame/Mini4DgameBoard.cc	(revision 11056)
+++ code/trunk/src/modules/mini4dgame/Mini4DgameBoard.cc	(revision 11071)
@@ -40,6 +40,4 @@
 #include "graphics/BlinkingBillboard.h"
 
-#include "core/XMLPort.h"
-
 #include "Mini4Dgame.h"
 
@@ -63,6 +61,6 @@
                 for(int k=0;k<4;k++){
                     for(int l=0;l<4;l++){
-                        this->board[i][j][k][l]=mini4DgamePlayerColor::none;
-                        this->blinkingBillboards[i][j][k][l] = 0;
+                        this->board[i][j][k][l]=Mini4DgamePlayerColor::none;
+                        this->blinkingBillboards[i][j][k][l] = nullptr;
                     }
                 }
@@ -71,11 +69,4 @@
         this->player_toggle_ = false;
         this->checkGametype();
-    }
-
-
-    //xml port for loading sounds
-    void Mini4DgameBoard::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(Mini4DgameBoard, XMLPort, xmlelement, mode);
     }
 
@@ -88,5 +79,5 @@
         return (move.x<4 && move.y<4 && move.z<4 && move.w<4
                 && move.x>=0 && move.y>=0 && move.z>=0 && move.w>=0
-                && this->board[move.x][move.y][move.z][move.w] == mini4DgamePlayerColor::none);
+                && this->board[move.x][move.y][move.z][move.w] == Mini4DgamePlayerColor::none);
     }
 
@@ -95,7 +86,7 @@
         const Mini4DgamePosition& move = moves.back();
         moves.pop_back();
-        this->board[move.x][move.y][move.z][move.w] = mini4DgamePlayerColor::none;
+        this->board[move.x][move.y][move.z][move.w] = Mini4DgamePlayerColor::none;
         this->blinkingBillboards[move.x][move.y][move.z][move.w]->destroy();
-        this->blinkingBillboards[move.x][move.y][move.z][move.w] = 0;
+        this->blinkingBillboards[move.x][move.y][move.z][move.w] = nullptr;
         if(player_toggle_){
             this->player_toggle_ = false;
@@ -124,14 +115,14 @@
 
             moves.push_back(move);
-            mini4DgamePlayerColor::color playerColor = mini4DgamePlayerColor::none;
+            Mini4DgamePlayerColor playerColor = Mini4DgamePlayerColor::none;
             if(player_toggle_){
-                playerColor = mini4DgamePlayerColor::blue;
+                playerColor = Mini4DgamePlayerColor::blue;
                 this->player_toggle_ = false;
             }else{
-                playerColor = mini4DgamePlayerColor::green;
+                playerColor = Mini4DgamePlayerColor::green;
                 this->player_toggle_ = true;
             }
 
-            this->board[move.x][move.y][move.z][move.w] = (mini4DgamePlayerColor::color) playerColor;
+            this->board[move.x][move.y][move.z][move.w] = playerColor;
 
             BlinkingBillboard* bb = new BlinkingBillboard(this->getContext());
@@ -155,9 +146,9 @@
 
             switch(playerColor){
-            case mini4DgamePlayerColor::red:
+            case Mini4DgamePlayerColor::red:
                 bb->setColour(ColourValue(1,0,0)); break;
-            case mini4DgamePlayerColor::green:
+            case Mini4DgamePlayerColor::green:
                 bb->setColour(ColourValue(0,1,0)); break;
-            case mini4DgamePlayerColor::blue:
+            case Mini4DgamePlayerColor::blue:
                 bb->setColour(ColourValue(0,0,1)); break;
             default: break;
@@ -169,5 +160,5 @@
 
             Mini4DgameWinner winner = this->getWinner();
-            if(winner.color_ != mini4DgamePlayerColor::none)
+            if(winner.color_ != Mini4DgamePlayerColor::none)
             {
                 orxout(user_status) << "Mini4Dgame: win!!!!!!!" << endl;
@@ -197,10 +188,10 @@
     {
         Mini4DgameWinner winner;
-        winner.color_ = mini4DgamePlayerColor::none;
+        winner.color_ = Mini4DgamePlayerColor::none;
 
         //check diagonals rows-columns-height-numbers
         for(int i=1; i<4; i++)
         {
-            if(this->board[i][i][i][i]==mini4DgamePlayerColor::none || this->board[0][0][0][0] != this->board[i][i][i][i])
+            if(this->board[i][i][i][i]==Mini4DgamePlayerColor::none || this->board[0][0][0][0] != this->board[i][i][i][i])
                 break;
             if(i==3)
@@ -218,5 +209,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[3-i][i][i][i]==mini4DgamePlayerColor::none || this->board[3][0][0][0] != this->board[3-i][i][i][i])
+            if(this->board[3-i][i][i][i]==Mini4DgamePlayerColor::none || this->board[3][0][0][0] != this->board[3-i][i][i][i])
                 break;
             if(i==3)
@@ -234,5 +225,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[i][3-i][i][i]==mini4DgamePlayerColor::none || this->board[0][3][0][0] != this->board[i][3-i][i][i])
+            if(this->board[i][3-i][i][i]==Mini4DgamePlayerColor::none || this->board[0][3][0][0] != this->board[i][3-i][i][i])
                 break;
             if(i==3)
@@ -250,5 +241,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[i][i][3-i][i]==mini4DgamePlayerColor::none || this->board[0][0][3][0] != this->board[i][i][3-i][i])
+            if(this->board[i][i][3-i][i]==Mini4DgamePlayerColor::none || this->board[0][0][3][0] != this->board[i][i][3-i][i])
                 break;
             if(i==3)
@@ -266,5 +257,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[i][i][i][3-i]==mini4DgamePlayerColor::none || this->board[0][0][0][3] != this->board[i][i][i][3-i])
+            if(this->board[i][i][i][3-i]==Mini4DgamePlayerColor::none || this->board[0][0][0][3] != this->board[i][i][i][3-i])
                 break;
             if(i==3)
@@ -282,5 +273,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[3-i][3-i][i][i]==mini4DgamePlayerColor::none || this->board[3][3][0][0] != this->board[3-i][3-i][i][i])
+            if(this->board[3-i][3-i][i][i]==Mini4DgamePlayerColor::none || this->board[3][3][0][0] != this->board[3-i][3-i][i][i])
                 break;
             if(i==3)
@@ -298,5 +289,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[3-i][i][3-i][i]==mini4DgamePlayerColor::none || this->board[3][0][3][0] != this->board[3-i][i][3-i][i])
+            if(this->board[3-i][i][3-i][i]==Mini4DgamePlayerColor::none || this->board[3][0][3][0] != this->board[3-i][i][3-i][i])
                 break;
             if(i==3)
@@ -314,5 +305,5 @@
         for(int i=1; i<4; i++)
         {
-            if(this->board[3-i][i][i][3-i]==mini4DgamePlayerColor::none || this->board[3][0][0][3] != this->board[3-i][i][i][3-i])
+            if(this->board[3-i][i][i][3-i]==Mini4DgamePlayerColor::none || this->board[3][0][0][3] != this->board[3-i][i][i][3-i])
                 break;
             if(i==3)
@@ -334,5 +325,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][i][i][l]==mini4DgamePlayerColor::none || this->board[0][0][0][l] != this->board[i][i][i][l])
+                if(this->board[i][i][i][l]==Mini4DgamePlayerColor::none || this->board[0][0][0][l] != this->board[i][i][i][l])
                     break;
                 if(i==3)
@@ -350,5 +341,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[3-i][i][i][l]==mini4DgamePlayerColor::none || this->board[3][0][0][l] != this->board[3-i][i][i][l])
+                if(this->board[3-i][i][i][l]==Mini4DgamePlayerColor::none || this->board[3][0][0][l] != this->board[3-i][i][i][l])
                     break;
                 if(i==3)
@@ -366,5 +357,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][3-i][i][l]==mini4DgamePlayerColor::none || this->board[0][3][0][l] != this->board[i][3-i][i][l])
+                if(this->board[i][3-i][i][l]==Mini4DgamePlayerColor::none || this->board[0][3][0][l] != this->board[i][3-i][i][l])
                     break;
                 if(i==3)
@@ -382,5 +373,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][i][3-i][l]==mini4DgamePlayerColor::none || this->board[0][0][3][l] != this->board[i][i][3-i][l])
+                if(this->board[i][i][3-i][l]==Mini4DgamePlayerColor::none || this->board[0][0][3][l] != this->board[i][i][3-i][l])
                     break;
                 if(i==3)
@@ -403,5 +394,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][i][l][i]==mini4DgamePlayerColor::none || this->board[0][0][l][0] != this->board[i][i][l][i])
+                if(this->board[i][i][l][i]==Mini4DgamePlayerColor::none || this->board[0][0][l][0] != this->board[i][i][l][i])
                     break;
                 if(i==3)
@@ -419,5 +410,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[3-i][i][l][i]==mini4DgamePlayerColor::none || this->board[3][0][l][0] != this->board[3-i][i][l][i])
+                if(this->board[3-i][i][l][i]==Mini4DgamePlayerColor::none || this->board[3][0][l][0] != this->board[3-i][i][l][i])
                     break;
                 if(i==3)
@@ -435,5 +426,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][3-i][l][i]==mini4DgamePlayerColor::none || this->board[0][3][l][0] != this->board[i][3-i][l][i])
+                if(this->board[i][3-i][l][i]==Mini4DgamePlayerColor::none || this->board[0][3][l][0] != this->board[i][3-i][l][i])
                     break;
                 if(i==3)
@@ -451,5 +442,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][i][l][3-i]==mini4DgamePlayerColor::none || this->board[0][0][l][3] != this->board[i][i][l][3-i])
+                if(this->board[i][i][l][3-i]==Mini4DgamePlayerColor::none || this->board[0][0][l][3] != this->board[i][i][l][3-i])
                     break;
                 if(i==3)
@@ -472,5 +463,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][l][i][i]==mini4DgamePlayerColor::none || this->board[0][l][0][0] != this->board[i][l][i][i])
+                if(this->board[i][l][i][i]==Mini4DgamePlayerColor::none || this->board[0][l][0][0] != this->board[i][l][i][i])
                     break;
                 if(i==3)
@@ -488,5 +479,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[3-i][l][i][i]==mini4DgamePlayerColor::none || this->board[3][l][0][0] != this->board[3-i][l][i][i])
+                if(this->board[3-i][l][i][i]==Mini4DgamePlayerColor::none || this->board[3][l][0][0] != this->board[3-i][l][i][i])
                     break;
                 if(i==3)
@@ -504,5 +495,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][l][3-i][i]==mini4DgamePlayerColor::none || this->board[0][l][3][0] != this->board[i][l][3-i][i])
+                if(this->board[i][l][3-i][i]==Mini4DgamePlayerColor::none || this->board[0][l][3][0] != this->board[i][l][3-i][i])
                     break;
                 if(i==3)
@@ -520,5 +511,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[i][l][i][3-i]==mini4DgamePlayerColor::none || this->board[0][l][0][3] != this->board[i][l][i][3-i])
+                if(this->board[i][l][i][3-i]==Mini4DgamePlayerColor::none || this->board[0][l][0][3] != this->board[i][l][i][3-i])
                     break;
                 if(i==3)
@@ -541,5 +532,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[l][i][i][i]==mini4DgamePlayerColor::none || this->board[l][0][0][0] != this->board[l][i][i][i])
+                if(this->board[l][i][i][i]==Mini4DgamePlayerColor::none || this->board[l][0][0][0] != this->board[l][i][i][i])
                     break;
                 if(i==3)
@@ -557,5 +548,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[l][3-i][i][i]==mini4DgamePlayerColor::none || this->board[l][3][0][0] != this->board[l][3-i][i][i])
+                if(this->board[l][3-i][i][i]==Mini4DgamePlayerColor::none || this->board[l][3][0][0] != this->board[l][3-i][i][i])
                     break;
                 if(i==3)
@@ -573,5 +564,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[l][i][3-i][i]==mini4DgamePlayerColor::none || this->board[l][0][3][0] != this->board[l][i][3-i][i])
+                if(this->board[l][i][3-i][i]==Mini4DgamePlayerColor::none || this->board[l][0][3][0] != this->board[l][i][3-i][i])
                     break;
                 if(i==3)
@@ -589,5 +580,5 @@
             for(int i=1; i<4; i++)
             {
-                if(this->board[l][i][i][3-i]==mini4DgamePlayerColor::none || this->board[l][0][0][3] != this->board[l][i][i][3-i])
+                if(this->board[l][i][i][3-i]==Mini4DgamePlayerColor::none || this->board[l][0][0][3] != this->board[l][i][i][3-i])
                     break;
                 if(i==3)
@@ -611,5 +602,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[i][i][k][l]==mini4DgamePlayerColor::none || this->board[0][0][k][l] != this->board[i][i][k][l])
+                    if(this->board[i][i][k][l]==Mini4DgamePlayerColor::none || this->board[0][0][k][l] != this->board[i][i][k][l])
                         break;
                     if(i==3)
@@ -627,5 +618,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[3-i][i][k][l]==mini4DgamePlayerColor::none || this->board[3][0][k][l] != this->board[3-i][i][k][l])
+                    if(this->board[3-i][i][k][l]==Mini4DgamePlayerColor::none || this->board[3][0][k][l] != this->board[3-i][i][k][l])
                         break;
                     if(i==3)
@@ -644,5 +635,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[i][k][i][l]==mini4DgamePlayerColor::none || this->board[0][k][0][l] != this->board[i][k][i][l])
+                    if(this->board[i][k][i][l]==Mini4DgamePlayerColor::none || this->board[0][k][0][l] != this->board[i][k][i][l])
                         break;
                     if(i==3)
@@ -660,5 +651,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[3-i][k][i][l]==mini4DgamePlayerColor::none || this->board[3][k][0][l] != this->board[3-i][k][i][l])
+                    if(this->board[3-i][k][i][l]==Mini4DgamePlayerColor::none || this->board[3][k][0][l] != this->board[3-i][k][i][l])
                         break;
                     if(i==3)
@@ -677,5 +668,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[i][k][l][i]==mini4DgamePlayerColor::none || this->board[0][k][l][0] != this->board[i][k][l][i])
+                    if(this->board[i][k][l][i]==Mini4DgamePlayerColor::none || this->board[0][k][l][0] != this->board[i][k][l][i])
                         break;
                     if(i==3)
@@ -693,5 +684,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[3-i][k][l][i]==mini4DgamePlayerColor::none || this->board[3][k][l][0] != this->board[3-i][k][l][i])
+                    if(this->board[3-i][k][l][i]==Mini4DgamePlayerColor::none || this->board[3][k][l][0] != this->board[3-i][k][l][i])
                         break;
                     if(i==3)
@@ -710,5 +701,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[k][i][i][l]==mini4DgamePlayerColor::none || this->board[k][0][0][l] != this->board[k][i][i][l])
+                    if(this->board[k][i][i][l]==Mini4DgamePlayerColor::none || this->board[k][0][0][l] != this->board[k][i][i][l])
                         break;
                     if(i==3)
@@ -726,5 +717,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[k][3-i][i][l]==mini4DgamePlayerColor::none || this->board[k][3][0][l] != this->board[k][3-i][i][l])
+                    if(this->board[k][3-i][i][l]==Mini4DgamePlayerColor::none || this->board[k][3][0][l] != this->board[k][3-i][i][l])
                         break;
                     if(i==3)
@@ -743,5 +734,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[k][i][l][i]==mini4DgamePlayerColor::none || this->board[k][0][l][0] != this->board[k][i][l][i])
+                    if(this->board[k][i][l][i]==Mini4DgamePlayerColor::none || this->board[k][0][l][0] != this->board[k][i][l][i])
                         break;
                     if(i==3)
@@ -759,5 +750,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[k][3-i][l][i]==mini4DgamePlayerColor::none || this->board[k][3][l][0] != this->board[k][3-i][l][i])
+                    if(this->board[k][3-i][l][i]==Mini4DgamePlayerColor::none || this->board[k][3][l][0] != this->board[k][3-i][l][i])
                         break;
                     if(i==3)
@@ -776,5 +767,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[k][l][i][i]==mini4DgamePlayerColor::none || this->board[k][l][0][0] != this->board[k][l][i][i])
+                    if(this->board[k][l][i][i]==Mini4DgamePlayerColor::none || this->board[k][l][0][0] != this->board[k][l][i][i])
                         break;
                     if(i==3)
@@ -792,5 +783,5 @@
                 for(int i=1; i<4; i++)
                 {
-                    if(this->board[k][l][3-i][i]==mini4DgamePlayerColor::none || this->board[k][l][3][0] != this->board[k][l][3-i][i])
+                    if(this->board[k][l][3-i][i]==Mini4DgamePlayerColor::none || this->board[k][l][3][0] != this->board[k][l][3-i][i])
                         break;
                     if(i==3)
@@ -813,5 +804,5 @@
             for(int k=0;k<4;k++){
                 for(int l=0;l<4;l++){
-                    if(this->board[0][j][k][l]!= mini4DgamePlayerColor::none
+                    if(this->board[0][j][k][l]!= Mini4DgamePlayerColor::none
                        && this->board[0][j][k][l]==this->board[1][j][k][l]
                        && this->board[1][j][k][l]==this->board[2][j][k][l]
@@ -835,5 +826,5 @@
             for(int k=0;k<4;k++){
                 for(int l=0;l<4;l++){
-                    if(this->board[i][0][k][l]!= mini4DgamePlayerColor::none
+                    if(this->board[i][0][k][l]!= Mini4DgamePlayerColor::none
                                && this->board[i][0][k][l]==this->board[i][1][k][l]
                                && this->board[i][1][k][l]==this->board[i][2][k][l]
@@ -857,5 +848,5 @@
             for(int j=0;j<4;j++){
                 for(int l=0;l<4;l++){
-                    if(this->board[i][j][0][l]!= mini4DgamePlayerColor::none
+                    if(this->board[i][j][0][l]!= Mini4DgamePlayerColor::none
                                        && this->board[i][j][0][l]==this->board[i][j][1][l]
                                        && this->board[i][j][1][l]==this->board[i][j][2][l]
@@ -879,5 +870,5 @@
             for(int j=0;j<4;j++){
                 for(int k=0;k<4;k++){
-                    if(this->board[i][j][k][0]!= mini4DgamePlayerColor::none
+                    if(this->board[i][j][k][0]!= Mini4DgamePlayerColor::none
                                        && this->board[i][j][k][0]==this->board[i][j][k][1]
                                        && this->board[i][j][k][1]==this->board[i][j][k][2]
@@ -905,5 +896,5 @@
     void Mini4DgameBoard::checkGametype()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(Mini4Dgame)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(Mini4Dgame)))
         {
             Mini4Dgame* Mini4DgameGametype = orxonox_cast<Mini4Dgame*>(this->getGametype());
Index: code/trunk/src/modules/mini4dgame/Mini4DgameBoard.h
===================================================================
--- code/trunk/src/modules/mini4dgame/Mini4DgameBoard.h	(revision 11056)
+++ code/trunk/src/modules/mini4dgame/Mini4DgameBoard.h	(revision 11071)
@@ -42,4 +42,11 @@
 namespace orxonox
 {
+    enum class Mini4DgamePlayerColor
+    {
+        none,
+        red,
+        blue,
+        green
+    };
 
     struct Mini4DgamePosition
@@ -58,5 +65,5 @@
         int winningHeight[4];
         int winningNumber[4];
-        int color_;
+        Mini4DgamePlayerColor color_;
     };
 
@@ -74,6 +81,4 @@
             //virtual ~Mini4DgameBoard();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
             bool isValidMove(const Mini4DgamePosition& move);
             void undoMove();
@@ -88,5 +93,5 @@
             bool player_toggle_;
             BlinkingBillboard* blinkingBillboards[4][4][4][4];
-            int board[4][4][4][4]; //!< The logical board where the game takes place. board[row][column][height][number]
+            Mini4DgamePlayerColor board[4][4][4][4]; //!< The logical board where the game takes place. board[row][column][height][number]
     };
 }
Index: code/trunk/src/modules/notifications/NotificationDispatcher.cc
===================================================================
--- code/trunk/src/modules/notifications/NotificationDispatcher.cc	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationDispatcher.cc	(revision 11071)
@@ -113,5 +113,5 @@
         // TODO: Needed?
         const std::string message = this->createNotificationMessage();
-        NotificationListener::sendNotification(message, this->getSender(), notificationMessageType::info, notificationSendMode::local);
+        NotificationListener::sendNotification(message, this->getSender(), NotificationMessageType::info, NotificationSendMode::local);
 
         // Broadcast
@@ -144,5 +144,5 @@
             const std::string message = this->createNotificationMessage();
             // TODO: Make the type configurable.
-            NotificationListener::sendNotification(message, this->getSender(), notificationMessageType::info, notificationSendMode::network, clientId);
+            NotificationListener::sendNotification(message, this->getSender(), NotificationMessageType::info, NotificationSendMode::network, clientId);
         }
         else if(GameMode::isServer())
@@ -177,8 +177,8 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        PlayerInfo* player = NULL;
+        PlayerInfo* player = nullptr;
 
         // If the trigger is a PlayerTrigger.
-        if(pTrigger != NULL)
+        if(pTrigger != nullptr)
         {
             if(!pTrigger->isForPlayer())  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
@@ -190,5 +190,5 @@
             return false;
 
-        if(player == NULL)
+        if(player == nullptr)
         {
             orxout(verbose, context::notifications) << "The NotificationDispatcher was triggered by an entity other than a Pawn. (" << trigger->getIdentifier()->getName() << ")" << endl;
Index: code/trunk/src/modules/notifications/NotificationDispatcher.h
===================================================================
--- code/trunk/src/modules/notifications/NotificationDispatcher.h	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationDispatcher.h	(revision 11071)
@@ -79,6 +79,6 @@
             virtual ~NotificationDispatcher(); //!< Destructor.
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a NotificationDispatcher object through XML.
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a NotificationDispatcher object through XML.
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             /**
Index: code/trunk/src/modules/notifications/NotificationManager.cc
===================================================================
--- code/trunk/src/modules/notifications/NotificationManager.cc	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationManager.cc	(revision 11071)
@@ -69,6 +69,6 @@
     {
         // Destroys all Notifications.
-        for(std::multimap<std::time_t, Notification*>::iterator it = this->allNotificationsList_.begin(); it!= this->allNotificationsList_.end(); it++)
-            it->second->destroy();
+        for(const auto& mapEntry : this->allNotificationsList_)
+            mapEntry.second->destroy();
         this->allNotificationsList_.clear();
 
@@ -106,5 +106,5 @@
         Returns true if successful.
     */
-    bool NotificationManager::registerNotification(const std::string& message, const std::string& sender, notificationMessageType::Value type)
+    bool NotificationManager::registerNotification(const std::string& message, const std::string& sender, NotificationMessageType type)
     {
         // TODO: Do something with the type.
@@ -124,8 +124,8 @@
         Returns true if the command was successfully executed.
     */
-    bool NotificationManager::executeCommand(notificationCommand::Value command, const std::string& sender)
+    bool NotificationManager::executeCommand(NotificationCommand command, const std::string& sender)
     {
         bool commandExecuted = false;
-        if(command == notificationCommand::clear)
+        if(command == NotificationCommand::clear)
         {
             if(this->commandClear(sender))
@@ -152,10 +152,10 @@
         bool executed = false;
         // Clear all NotificationQueues that have the input sender as target.
-        for(std::map<const std::string, NotificationQueue*>::iterator it = this->queues_.begin(); it != this->queues_.end(); it++) // Iterate through all NotificationQueues.
-        {
-            const std::set<std::string>& set = it->second->getTargetsSet();
+        for(const auto& mapEntry : this->queues_) // Iterate through all NotificationQueues.
+        {
+            const std::set<std::string>& set = mapEntry.second->getTargetsSet();
             // If either the sender is 'all', the NotificationQueue has as target all or the NotificationQueue has the input sender as a target.
             if(all || set.find(NotificationListener::ALL) != set.end() || set.find(sender) != set.end())
-                executed = it->second->tidy() || executed;
+                executed = mapEntry.second->tidy() || executed;
         }
 
@@ -187,7 +187,7 @@
 
         // Insert the Notification in all NotificationQueues that have its sender as target.
-        for(std::map<const std::string, NotificationQueue*>::iterator it = this->queues_.begin(); it != this->queues_.end(); it++) // Iterate through all NotificationQueues.
-        {
-            const std::set<std::string>& set = it->second->getTargetsSet();
+        for(const auto& mapEntry : this->queues_) // Iterate through all NotificationQueues.
+        {
+            const std::set<std::string>& set = mapEntry.second->getTargetsSet();
             bool bAll = set.find(NotificationListener::ALL) != set.end();
             // If either the Notification has as sender 'all', the NotificationQueue displays all Notifications or the NotificationQueue has the sender of the Notification as target.
@@ -195,6 +195,6 @@
             {
                 if(!bAll)
-                    this->notificationLists_[it->second->getName()]->insert(std::pair<std::time_t, Notification*>(time, notification)); // Insert the Notification in the notifications list of the current NotificationQueue.
-                it->second->update(notification, time); // Update the NotificationQueue.
+                    this->notificationLists_[mapEntry.second->getName()]->insert(std::pair<std::time_t, Notification*>(time, notification)); // Insert the Notification in the notifications list of the current NotificationQueue.
+                mapEntry.second->update(notification, time); // Update the NotificationQueue.
             }
         }
@@ -334,5 +334,5 @@
         // If all senders are the target of the NotificationQueue, then the list of Notifications for that specific NotificationQueue is the same as the list of all Notifications.
         bool bAll = set.find(NotificationListener::ALL) != set.end();
-        std::multimap<std::time_t, Notification*>* map = NULL;
+        std::multimap<std::time_t, Notification*>* map = nullptr;
         if(bAll)
             this->notificationLists_[queue->getName()] = &this->allNotificationsList_;
@@ -345,8 +345,8 @@
 
         // Iterate through all Notifications to determine whether any of them should belong to the newly registered NotificationQueue.
-        for(std::multimap<std::time_t, Notification*>::iterator it = this->allNotificationsList_.begin(); it != this->allNotificationsList_.end(); it++)
-        {
-            if(!bAll && set.find(it->second->getSender()) != set.end()) // Checks whether the listener has the sender of the current Notification as target.
-                map->insert(std::pair<std::time_t, Notification*>(it->first, it->second));
+        for(const auto& mapEntry : this->allNotificationsList_)
+        {
+            if(!bAll && set.find(mapEntry.second->getSender()) != set.end()) // Checks whether the listener has the sender of the current Notification as target.
+                map->insert(std::pair<std::time_t, Notification*>(mapEntry.first, mapEntry.second));
         }
 
@@ -395,12 +395,12 @@
         The name of the NotificationQueue.
     @return
-        Returns a pointer to the NotificationQueue with the input name. Returns NULL if no NotificationQueue with such a name exists.
+        Returns a pointer to the NotificationQueue with the input name. Returns nullptr if no NotificationQueue with such a name exists.
     */
     NotificationQueue* NotificationManager::getQueue(const std::string & name)
     {
         std::map<const std::string, NotificationQueue*>::iterator it = this->queues_.find(name);
-        // Returns NULL if no such NotificationQueue exists.
+        // Returns nullptr if no such NotificationQueue exists.
         if(it == this->queues_.end())
-            return NULL;
+            return nullptr;
 
         return (*it).second;
@@ -437,5 +437,5 @@
 
     */
-    Notification::Notification(const std::string& message, const std::string& sender, notificationMessageType::Value type)
+    Notification::Notification(const std::string& message, const std::string& sender, NotificationMessageType type)
     {
         this->initialize();
Index: code/trunk/src/modules/notifications/NotificationManager.h
===================================================================
--- code/trunk/src/modules/notifications/NotificationManager.h	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationManager.h	(revision 11071)
@@ -62,5 +62,5 @@
     {
         public:
-            Notification(const std::string& message, const std::string& sender, notificationMessageType::Value type);
+            Notification(const std::string& message, const std::string& sender, NotificationMessageType type);
             virtual ~Notification();
 
@@ -89,5 +89,5 @@
             @return Returns an enum with the type of the Notification.
             */
-            inline notificationMessageType::Value getType(void) const
+            inline NotificationMessageType getType(void) const
                 { return this->type_; }
 
@@ -95,5 +95,5 @@
             std::string message_; //!< The Notification message.
             std::string sender_; //!< The sender of the notification.
-            notificationMessageType::Value type_; //!< The type of the notification.
+            NotificationMessageType type_; //!< The type of the notification.
 
             void initialize(void); //!< Registers the object and sets some default values.
@@ -120,5 +120,5 @@
             virtual ~NotificationManager();
 
-            virtual void preDestroy(void); // Is called before the object is destroyed.
+            virtual void preDestroy(void) override; // Is called before the object is destroyed.
 
             /**
@@ -128,6 +128,6 @@
             static NotificationManager& getInstance() { return Singleton<NotificationManager>::getInstance(); } // tolua_export
 
-            virtual bool registerNotification(const std::string& message, const std::string& sender, notificationMessageType::Value type);
-            virtual bool executeCommand(notificationCommand::Value command, const std::string& sender);
+            virtual bool registerNotification(const std::string& message, const std::string& sender, NotificationMessageType type) override;
+            virtual bool executeCommand(NotificationCommand command, const std::string& sender) override;
 
             bool registerNotification(Notification* notification); // Registers a Notification within the NotificationManager.
Index: code/trunk/src/modules/notifications/NotificationQueue.cc
===================================================================
--- code/trunk/src/modules/notifications/NotificationQueue.cc	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationQueue.cc	(revision 11071)
@@ -206,8 +206,8 @@
         {
             // Add all Notifications that have been created after this NotificationQueue was created.
-            for(std::multimap<std::time_t, Notification*>::iterator it = notifications->begin(); it != notifications->end(); it++)
+            for(const auto& mapEntry : *notifications)
             {
-                if(it->first >= this->creationTime_)
-                    this->push(it->second, it->first);
+                if(mapEntry.first >= this->creationTime_)
+                    this->push(mapEntry.second, mapEntry.first);
             }
         }
@@ -336,6 +336,6 @@
         this->ordering_.clear();
         // Delete all NotificationContainers in the list.
-        for(std::vector<NotificationContainer*>::iterator it = this->notifications_.begin(); it != this->notifications_.end(); it++)
-            delete *it;
+        for(NotificationContainer* notification : this->notifications_)
+            delete notification;
 
         this->notifications_.clear();
@@ -426,5 +426,5 @@
         bool first = true;
         // Iterate through the set of targets.
-        for(std::set<std::string>::const_iterator it = this->targets_.begin(); it != this->targets_.end(); it++)
+        for(const std::string& target : this->targets_)
         {
             if(!first)
@@ -432,5 +432,5 @@
             else
                 first = false;
-            stream << *it;
+            stream << target;
         }
 
Index: code/trunk/src/modules/notifications/NotificationQueue.h
===================================================================
--- code/trunk/src/modules/notifications/NotificationQueue.h	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationQueue.h	(revision 11071)
@@ -97,8 +97,8 @@
             virtual ~NotificationQueue();
 
-            virtual void tick(float dt); // To update from time to time.
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
-            virtual void changedName(void);
+            virtual void tick(float dt) override; // To update from time to time.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+
+            virtual void changedName(void) override;
             
             void update(void); // Updates the NotificationQueue.
Index: code/trunk/src/modules/notifications/NotificationQueueCEGUI.cc
===================================================================
--- code/trunk/src/modules/notifications/NotificationQueueCEGUI.cc	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationQueueCEGUI.cc	(revision 11071)
@@ -290,11 +290,11 @@
         The name of the NotificationQueueCEGUI to be got.
     @return
-        Returns a pointer to the NotificationQueueCEGUI, or NULL if it doesn't exist.
+        Returns a pointer to the NotificationQueueCEGUI, or nullptr if it doesn't exist.
     */
     /*static*/ NotificationQueueCEGUI* NotificationQueueCEGUI::getQueue(const std::string& name)
     {
         NotificationQueue* queue = NotificationManager::getInstance().getQueue(name);
-        if(queue == NULL || !queue->isA(Class(NotificationQueueCEGUI)))
-            return NULL;
+        if(queue == nullptr || !queue->isA(Class(NotificationQueueCEGUI)))
+            return nullptr;
         return static_cast<NotificationQueueCEGUI*>(queue);
     }
Index: code/trunk/src/modules/notifications/NotificationQueueCEGUI.h
===================================================================
--- code/trunk/src/modules/notifications/NotificationQueueCEGUI.h	(revision 11056)
+++ code/trunk/src/modules/notifications/NotificationQueueCEGUI.h	(revision 11071)
@@ -73,7 +73,7 @@
             virtual ~NotificationQueueCEGUI();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedName(void);
+            virtual void changedName(void) override;
 
             void destroy(bool noGraphics = false); // Destroys the NotificationQueue.
@@ -136,11 +136,11 @@
             void registerVariables();
             
-            virtual void create(void); // Creates the NotificationQueue in lua.
+            virtual void create(void) override; // Creates the NotificationQueue in lua.
             
-            virtual void notificationPushed(Notification* notification); // Is called by the NotificationQueue when a Notification was pushed
-            virtual void notificationPopped(void); // Is called by the NotificationQueue when a Notification was popped.
-            virtual void notificationRemoved(unsigned int index); // Is called when a Notification was removed.
+            virtual void notificationPushed(Notification* notification) override; // Is called by the NotificationQueue when a Notification was pushed
+            virtual void notificationPopped(void) override; // Is called by the NotificationQueue when a Notification was popped.
+            virtual void notificationRemoved(unsigned int index) override; // Is called when a Notification was removed.
             
-            virtual void clear(bool noGraphics = false); // Clears the NotificationQueue by removing all NotificationContainers.
+            virtual void clear(bool noGraphics = false) override; // Clears the NotificationQueue by removing all NotificationContainers.
 
         protected:
Index: code/trunk/src/modules/objects/Attacher.cc
===================================================================
--- code/trunk/src/modules/objects/Attacher.cc	(revision 11056)
+++ code/trunk/src/modules/objects/Attacher.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(Attacher);
 
-        this->target_ = 0;
+        this->target_ = nullptr;
     }
 
@@ -61,6 +61,6 @@
         SUPER(Attacher, changedActivity);
 
-        for (std::list<WorldEntity*>::iterator it = this->objects_.begin(); it != this->objects_.end(); ++it)
-            (*it)->setActive(this->isActive());
+        for (WorldEntity* object : this->objects_)
+            object->setActive(this->isActive());
     }
 
@@ -69,6 +69,6 @@
         SUPER(Attacher, changedVisibility);
 
-        for (std::list<WorldEntity*>::iterator it = this->objects_.begin(); it != this->objects_.end(); ++it)
-            (*it)->setVisible(this->isVisible());
+        for (WorldEntity* object : this->objects_)
+            object->setVisible(this->isVisible());
     }
 
@@ -83,12 +83,12 @@
     {
         unsigned int i = 0;
-        for (std::list<WorldEntity*>::const_iterator it = this->objects_.begin(); it != this->objects_.end(); ++it)
+        for (WorldEntity* object : this->objects_)
         {
             if (i == index)
-                return (*it);
+                return object;
 
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -96,15 +96,15 @@
     {
         this->targetname_ = target;
-        this->target_ = 0;
+        this->target_ = nullptr;
 
         if (this->targetname_.empty())
             return;
 
-        for (ObjectList<WorldEntity>::iterator it = ObjectList<WorldEntity>::begin(); it != ObjectList<WorldEntity>::end(); ++it)
+        for (WorldEntity* worldEntity : ObjectList<WorldEntity>())
         {
-            if (it->getName() == this->targetname_)
+            if (worldEntity->getName() == this->targetname_)
             {
-                this->target_ = *it;
-                this->attachToParent(*it);
+                this->target_ = worldEntity;
+                this->attachToParent(worldEntity);
             }
         }
Index: code/trunk/src/modules/objects/Attacher.h
===================================================================
--- code/trunk/src/modules/objects/Attacher.h	(revision 11056)
+++ code/trunk/src/modules/objects/Attacher.h	(revision 11071)
@@ -51,9 +51,9 @@
             virtual ~Attacher() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void processEvent(Event& event);
-            virtual void changedActivity();
-            virtual void changedVisibility();
+            virtual void processEvent(Event& event) override;
+            virtual void changedActivity() override;
+            virtual void changedVisibility() override;
 
             void addObject(WorldEntity* object);
@@ -64,5 +64,5 @@
                 { return this->targetname_; }
 
-            void loadedNewXMLName(BaseObject* object);
+            virtual void loadedNewXMLName(BaseObject* object) override;
 
         private:
Index: code/trunk/src/modules/objects/ForceField.cc
===================================================================
--- code/trunk/src/modules/objects/ForceField.cc	(revision 11056)
+++ code/trunk/src/modules/objects/ForceField.cc	(revision 11071)
@@ -67,5 +67,5 @@
         this->setMassDiameter(0);   //! We allow point-masses
         this->setLength(2000);
-        this->mode_ = forceFieldMode::tube;
+        this->mode_ = ForceFieldMode::tube;
         
         this->registerVariables();
@@ -115,8 +115,8 @@
     void ForceField::tick(float dt)
     {
-        if(this->mode_ == forceFieldMode::tube)
-        {
-            // Iterate over all objects that could possibly be affected by the ForceField.
-            for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
+        if(this->mode_ == ForceFieldMode::tube)
+        {
+            // Iterate over all objects that could possibly be affected by the ForceField.
+            for (MobileEntity* mobileEntity : ObjectList<MobileEntity>())
             {
                 // The direction of the orientation of the force field.
@@ -125,5 +125,5 @@
 
                 // Vector from the center of the force field to the object its acting on.
-                Vector3 distanceVector = it->getWorldPosition() - (this->getWorldPosition() + (this->halfLength_ * direction));
+                Vector3 distanceVector = mobileEntity->getWorldPosition() - (this->getWorldPosition() + (this->halfLength_ * direction));
 
                 // The object is outside a ball around the center with radius length/2 of the ForceField.
@@ -132,5 +132,5 @@
 
                 // The distance of the object form the orientation vector. (Or rather the smallest distance from the orientation vector)
-                float distanceFromDirectionVector = ((it->getWorldPosition() - this->getWorldPosition()).crossProduct(direction)).length();
+                float distanceFromDirectionVector = ((mobileEntity->getWorldPosition() - this->getWorldPosition()).crossProduct(direction)).length();
 
                 // If the object in a tube of radius 'radius' around the direction of orientation.
@@ -140,13 +140,13 @@
                 // Apply a force to the object in the direction of the orientation.
                 // The force is highest when the object is directly on the direction vector, with a linear decrease, finally reaching zero, when distanceFromDirectionVector = radius.
-                it->applyCentralForce((this->radius_ - distanceFromDirectionVector)/this->radius_ * this->velocity_ * direction);
-            }
-        }
-        else if(this->mode_ == forceFieldMode::sphere)
-        {
-            // Iterate over all objects that could possibly be affected by the ForceField.
-            for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
-            {
-                Vector3 distanceVector = it->getWorldPosition() - this->getWorldPosition();
+                mobileEntity->applyCentralForce((this->radius_ - distanceFromDirectionVector)/this->radius_ * this->velocity_ * direction);
+            }
+        }
+        else if(this->mode_ == ForceFieldMode::sphere)
+        {
+            // Iterate over all objects that could possibly be affected by the ForceField.
+            for (MobileEntity* mobileEntity : ObjectList<MobileEntity>())
+            {
+                Vector3 distanceVector = mobileEntity->getWorldPosition() - this->getWorldPosition();
                 float distance = distanceVector.length();
                 // If the object is within 'radius' distance.
@@ -155,14 +155,14 @@
                     distanceVector.normalise();
                     // Apply a force proportional to the velocity, with highest force at the origin of the sphere, linear decreasing until reaching a distance of 'radius' from the origin, where the force reaches zero. 
-                    it->applyCentralForce((this->radius_ - distance)/this->radius_ * this->velocity_ * distanceVector);
-                }
-            }
-        }
-        else if(this->mode_ == forceFieldMode::invertedSphere)
-        {
-            // Iterate over all objects that could possibly be affected by the ForceField.
-            for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
-            {
-                Vector3 distanceVector = this->getWorldPosition() - it->getWorldPosition();
+                    mobileEntity->applyCentralForce((this->radius_ - distance)/this->radius_ * this->velocity_ * distanceVector);
+                }
+            }
+        }
+        else if(this->mode_ == ForceFieldMode::invertedSphere)
+        {
+            // Iterate over all objects that could possibly be affected by the ForceField.
+            for (MobileEntity* mobileEntity : ObjectList<MobileEntity>())
+            {
+                Vector3 distanceVector = this->getWorldPosition() - mobileEntity->getWorldPosition();
                 float distance = distanceVector.length();
                 // If the object is within 'radius' distance and no more than 'length' away from the boundary of the sphere.
@@ -172,14 +172,14 @@
                     distanceVector.normalise();
                     // Apply a force proportional to the velocity, with highest force at the boundary of the sphere, linear decreasing until reaching a distance of 'radius-length' from the origin, where the force reaches zero.
-                    it->applyCentralForce((distance-range)/range * this->velocity_ * distanceVector);
-                }
-            }
-        }
-        else if(this->mode_ == forceFieldMode::newtonianGravity)
-        {
-            // Iterate over all objects that could possibly be affected by the ForceField.
-            for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
-            {
-                Vector3 distanceVector = it->getWorldPosition() - this->getWorldPosition();
+                    mobileEntity->applyCentralForce((distance-range)/range * this->velocity_ * distanceVector);
+                }
+            }
+        }
+        else if(this->mode_ == ForceFieldMode::newtonianGravity)
+        {
+            // Iterate over all objects that could possibly be affected by the ForceField.
+            for (MobileEntity* mobileEntity : ObjectList<MobileEntity>())
+            {
+                Vector3 distanceVector = mobileEntity->getWorldPosition() - this->getWorldPosition();
                 float distance = distanceVector.length();
                 // If the object is within 'radius' distance and especially further away than massRadius_
@@ -197,14 +197,14 @@
                     
                     // Note: this so called force is actually an acceleration!
-                    it->applyCentralForce((-1) * (ForceField::attenFactor_ * ForceField::gravConstant_ * this->getMass()) / (distance * distance) * distanceVector);
-                }
-            }
-        }
-        else if(this->mode_ == forceFieldMode::homogen)
-        {
-            // Iterate over all objects that could possibly be affected by the ForceField.
-            for (ObjectList<MobileEntity>::iterator it = ObjectList<MobileEntity>::begin(); it != ObjectList<MobileEntity>::end(); ++it)
-            {
-                Vector3 distanceVector = it->getWorldPosition() - this->getWorldPosition();
+                    mobileEntity->applyCentralForce((-1) * (ForceField::attenFactor_ * ForceField::gravConstant_ * this->getMass()) / (distance * distance) * distanceVector);
+                }
+            }
+        }
+        else if(this->mode_ == ForceFieldMode::homogen)
+        {
+            // Iterate over all objects that could possibly be affected by the ForceField.
+            for (MobileEntity* mobileEntity : ObjectList<MobileEntity>())
+            {
+                Vector3 distanceVector = mobileEntity->getWorldPosition() - this->getWorldPosition();
                 float distance = distanceVector.length();
                 if (distance < this->radius_ && distance > this->massRadius_)
@@ -212,5 +212,5 @@
                     // Add a Acceleration in forceDirection_.
                     // Vector3(0,0,0) is the direction, where the force should work.
-                    it->addAcceleration(forceDirection_ , Vector3(0,0,0));
+                    mobileEntity->addAcceleration(forceDirection_ , Vector3(0,0,0));
                 }
             }
@@ -227,19 +227,19 @@
     {
         if(mode == ForceField::modeTube_s)
-            this->mode_ = forceFieldMode::tube;
+            this->mode_ = ForceFieldMode::tube;
         else if(mode == ForceField::modeSphere_s)
-            this->mode_ = forceFieldMode::sphere;
+            this->mode_ = ForceFieldMode::sphere;
         else if(mode == ForceField::modeInvertedSphere_s)
-            this->mode_ = forceFieldMode::invertedSphere;
+            this->mode_ = ForceFieldMode::invertedSphere;
         else if(mode == ForceField::modeNewtonianGravity_s)
-            this->mode_ = forceFieldMode::newtonianGravity;
+            this->mode_ = ForceFieldMode::newtonianGravity;
 
         else if(mode == ForceField::modeHomogen_s)
-            this->mode_ = forceFieldMode::homogen;
+            this->mode_ = ForceFieldMode::homogen;
 
         else
         {
             orxout(internal_warning) << "Wrong mode '" << mode << "' in ForceField. Setting to 'tube'." << endl;
-            this->mode_ = forceFieldMode::tube;
+            this->mode_ = ForceFieldMode::tube;
         }
     }
@@ -255,14 +255,14 @@
         switch(this->mode_)
         {
-            case forceFieldMode::tube:
+            case ForceFieldMode::tube:
                 return ForceField::modeTube_s;
-            case forceFieldMode::sphere:
+            case ForceFieldMode::sphere:
                 return ForceField::modeSphere_s;
-            case forceFieldMode::invertedSphere:
+            case ForceFieldMode::invertedSphere:
                 return ForceField::modeInvertedSphere_s;
-            case forceFieldMode::newtonianGravity:
+            case ForceFieldMode::newtonianGravity:
                 return ForceField::modeNewtonianGravity_s;
 
-            case forceFieldMode::homogen:
+            case ForceFieldMode::homogen:
                 return ForceField::modeHomogen_s;
 
Index: code/trunk/src/modules/objects/ForceField.h
===================================================================
--- code/trunk/src/modules/objects/ForceField.h	(revision 11056)
+++ code/trunk/src/modules/objects/ForceField.h	(revision 11071)
@@ -52,14 +52,11 @@
     @ingroup Objects
     */
-    namespace forceFieldMode
-    {
-        enum Value {
-            tube, //!< The ForceField has a tube shape.
-            sphere, //!< The ForceField has a spherical shape.
-            invertedSphere, //!< The ForceField has a spherical shape but "inverted" behavior.
-            newtonianGravity, //!< The ForceField imitates Newtonian gravitation for use in stellar bodies.
-            homogen //!< Local homogenous Force field with changeable direction for the Space Station
-        };
-    }
+    enum class ForceFieldMode {
+        tube, //!< The ForceField has a tube shape.
+        sphere, //!< The ForceField has a spherical shape.
+        invertedSphere, //!< The ForceField has a spherical shape but "inverted" behavior.
+        newtonianGravity, //!< The ForceField imitates Newtonian gravitation for use in stellar bodies.
+        homogen //!< Local homogenous Force field with changeable direction for the Space Station
+    };
 
     /**
@@ -92,7 +89,7 @@
             virtual ~ForceField();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Creates a ForceField object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Creates a ForceField object through XML.
             void registerVariables(); //!< Registers the variables that should get synchronised over the network
-            virtual void tick(float dt); //!< A method that is called every tick.
+            virtual void tick(float dt) override; //!< A method that is called every tick.
             
 
@@ -172,5 +169,5 @@
             float massRadius_; //!< The radius of the stellar body for the Newtonian ForceField.
             float halfLength_; //!< Half of the length of the ForceField.
-            int mode_; //!< The mode of the ForceField.
+            ForceFieldMode mode_; //!< The mode of the ForceField.
             
             //! Gravitational constant for Newtonian ForceFields.
Index: code/trunk/src/modules/objects/Planet.h
===================================================================
--- code/trunk/src/modules/objects/Planet.h	(revision 11056)
+++ code/trunk/src/modules/objects/Planet.h	(revision 11071)
@@ -52,9 +52,9 @@
             virtual ~Planet();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
             inline void setMeshSource(const std::string& meshname)
Index: code/trunk/src/modules/objects/Script.cc
===================================================================
--- code/trunk/src/modules/objects/Script.cc	(revision 11056)
+++ code/trunk/src/modules/objects/Script.cc	(revision 11071)
@@ -140,8 +140,8 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        PlayerInfo* player = NULL;
+        PlayerInfo* player = nullptr;
 
         // If the trigger is a PlayerTrigger.
-        if(pTrigger != NULL)
+        if(pTrigger != nullptr)
         {
             if(!pTrigger->isForPlayer())  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
@@ -153,5 +153,5 @@
             return false;
 
-        if(player == NULL)  //TODO: Will this ever happen? If not, change in NotificationDispatcher as well.
+        if(player == nullptr)  //TODO: Will this ever happen? If not, change in NotificationDispatcher as well.
         {
             orxout(internal_warning) << "The Script was triggered by an entity other than a Pawn. (" << trigger->getIdentifier()->getName() << ")" << endl;
@@ -196,7 +196,7 @@
             {
                 const std::map<unsigned int, PlayerInfo*> clients = PlayerManager::getInstance().getClients();
-                for(std::map<unsigned int, PlayerInfo*>::const_iterator it = clients.begin(); it != clients.end(); it++)
+                for(const auto& mapEntry : clients)
                 {
-                    callStaticNetworkFunction(&Script::executeHelper, it->first, this->getCode(), this->getMode(), this->getNeedsGraphics());
+                    callStaticNetworkFunction(&Script::executeHelper, mapEntry.first, this->getCode(), this->getMode(), this->getNeedsGraphics());
                     if(this->times_ != Script::INF) // Decrement the number of remaining executions.
                     {
Index: code/trunk/src/modules/objects/Script.h
===================================================================
--- code/trunk/src/modules/objects/Script.h	(revision 11056)
+++ code/trunk/src/modules/objects/Script.h	(revision 11071)
@@ -51,12 +51,9 @@
     @brief The mode a specific @ref orxonox::Script "Script" is in.
     */
-    namespace ScriptMode
+    enum class ScriptMode
     {
-        enum Value
-        {
-            normal, //!< The @ref orxonox::Script "Scripts'" code is executed through the @ref orxonox::CommandExecutor "CommandExecutor".
-            lua //!< The @ref orxonox::Script "Scripts'" code is executed through lua.
-        };
-    }
+        normal, //!< The @ref orxonox::Script "Scripts'" code is executed through the @ref orxonox::CommandExecutor "CommandExecutor".
+        lua //!< The @ref orxonox::Script "Scripts'" code is executed through lua.
+    };
 
     /**
@@ -98,6 +95,6 @@
             virtual ~Script();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a Script object through XML.
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode); //!< Creates a port that can be used to channel events and react to them.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a Script object through XML.
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Creates a port that can be used to channel events and react to them.
 
             bool trigger(bool triggered, BaseObject* trigger); //!< Is called when an event comes in trough the event port.
@@ -168,6 +165,6 @@
                 { return this->forAll_; }
 
-            virtual void clientConnected(unsigned int clientId); //!< Callback that is called when a new client has connected.
-            virtual void clientDisconnected(unsigned int clientid) {}
+            virtual void clientConnected(unsigned int clientId) override; //!< Callback that is called when a new client has connected.
+            virtual void clientDisconnected(unsigned int clientid) override {}
 
         private:
@@ -178,5 +175,5 @@
 
             std::string code_; //!< The code that is executed by this Script.
-            ScriptMode::Value mode_; //!< The mode the Script is in. Determines whether the code is executed the normal way or in lua.
+            ScriptMode mode_; //!< The mode the Script is in. Determines whether the code is executed the normal way or in lua.
             std::string modeStr_; //!< The mode the Script is in, as a string. Is used for networking purposes.
             bool onLoad_; //!< Whether the Scripts code is executed upon loading (creation) of this Script.
@@ -193,5 +190,5 @@
             @param mode The mode of the Script.
             */
-            inline void setMode(ScriptMode::Value mode)
+            inline void setMode(ScriptMode mode)
                 { this->mode_ = mode; }
     };
Index: code/trunk/src/modules/objects/SpaceBoundaries.cc
===================================================================
--- code/trunk/src/modules/objects/SpaceBoundaries.cc	(revision 11056)
+++ code/trunk/src/modules/objects/SpaceBoundaries.cc	(revision 11071)
@@ -59,9 +59,9 @@
             this->pawnsIn_.clear();
 
-            for( std::vector<BillboardAdministration>::iterator current = this->billboards_.begin(); current != this->billboards_.end(); current++)
+            for(BillboardAdministration& billboard : this->billboards_)
             {
-                if( current->billy != NULL)
-                {
-                    delete current->billy;
+                if( billboard.billy != nullptr)
+                {
+                    delete billboard.billy;
                 }
             }
@@ -73,7 +73,6 @@
     {
         pawnsIn_.clear();
-        for(ObjectList<Pawn>::iterator current = ObjectList<Pawn>::begin(); current != ObjectList<Pawn>::end(); ++current)
-        {
-            Pawn* currentPawn = *current;
+        for(Pawn* currentPawn : ObjectList<Pawn>())
+        {
             if( this->reaction_ == 0 )
             {
@@ -127,5 +126,5 @@
     void SpaceBoundaries::setBillboardOptions(Billboard *billy)
     {
-        if(billy != NULL)
+        if(billy != nullptr)
         {
             billy->setMaterial("Grid");
@@ -138,8 +137,8 @@
     void SpaceBoundaries::removeAllBillboards()
     {
-        for( std::vector<BillboardAdministration>::iterator current = this->billboards_.begin(); current != this->billboards_.end(); current++ )
-        {
-            current->usedYet = false;
-            current->billy->setVisible(false);
+        for(BillboardAdministration& billboard : this->billboards_)
+        {
+            billboard.usedYet = false;
+            billboard.billy->setVisible(false);
         }
     }
@@ -208,7 +207,6 @@
         float distance;
         bool humanItem;
-        for( std::list<WeakPtr<Pawn> >::iterator current = pawnsIn_.begin(); current != pawnsIn_.end(); current++ )
-        {
-            Pawn* currentPawn = *current;
+        for(Pawn* currentPawn : pawnsIn_)
+        {
             if( currentPawn && currentPawn->getNode() ) 
             {
@@ -250,5 +248,5 @@
     float SpaceBoundaries::computeDistance(WorldEntity *item)
     {
-        if(item != NULL)
+        if(item != nullptr)
         {
             Vector3 itemPosition = item->getWorldPosition();
@@ -310,5 +308,5 @@
     bool SpaceBoundaries::isHumanPlayer(Pawn *item)
     {
-        if(item != NULL)
+        if(item != nullptr)
         {
             if(item->getPlayer())
Index: code/trunk/src/modules/objects/SpaceBoundaries.h
===================================================================
--- code/trunk/src/modules/objects/SpaceBoundaries.h	(revision 11056)
+++ code/trunk/src/modules/objects/SpaceBoundaries.h	(revision 11071)
@@ -93,7 +93,7 @@
             int getReaction();
 
-            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            void tick(float dt);
+            virtual void tick(float dt) override;
 
         private:
@@ -101,5 +101,5 @@
 
             // Variabeln::
-            std::list<WeakPtr<Pawn> > pawnsIn_; //!< List of the pawns that this instance of SpaceBoundaries has to handle.
+            std::list<WeakPtr<Pawn>> pawnsIn_; //!< List of the pawns that this instance of SpaceBoundaries has to handle.
 
             std::vector<BillboardAdministration> billboards_;
Index: code/trunk/src/modules/objects/Turret.cc
===================================================================
--- code/trunk/src/modules/objects/Turret.cc	(revision 11056)
+++ code/trunk/src/modules/objects/Turret.cc	(revision 11071)
@@ -278,5 +278,5 @@
             //slower the closer it is to the destination
             Quaternion drot = Quaternion::nlerp(dt*this->rotationThrust_/20.f, Quaternion::IDENTITY, this->rotation_);
-            this->rotate(drot, WorldEntity::World);
+            this->rotate(drot, WorldEntity::TransformSpace::World);
             this->rotation_ = Quaternion::IDENTITY;
         }
Index: code/trunk/src/modules/objects/Turret.h
===================================================================
--- code/trunk/src/modules/objects/Turret.h	(revision 11056)
+++ code/trunk/src/modules/objects/Turret.h	(revision 11071)
@@ -61,12 +61,12 @@
             virtual ~Turret();
 
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
             virtual float isInRange(const WorldEntity* target);
             virtual void aimAtPosition(const Vector3 &position);
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
             /** @brief Sets the maximum distance the turret is allowed to shoot. @param radius The distance*/
Index: code/trunk/src/modules/objects/controllers/TeamTargetProxy.cc
===================================================================
--- code/trunk/src/modules/objects/controllers/TeamTargetProxy.cc	(revision 11056)
+++ code/trunk/src/modules/objects/controllers/TeamTargetProxy.cc	(revision 11071)
@@ -28,4 +28,5 @@
 
 #include "TeamTargetProxy.h"
+#include "core/CoreIncludes.h"
 #include "worldentities/ControllableEntity.h"
 #include "worldentities/pawns/Pawn.h"
Index: code/trunk/src/modules/objects/controllers/TurretController.cc
===================================================================
--- code/trunk/src/modules/objects/controllers/TurretController.cc	(revision 11056)
+++ code/trunk/src/modules/objects/controllers/TurretController.cc	(revision 11071)
@@ -30,4 +30,6 @@
 #include "worldentities/pawns/Pawn.h"
 #include "objects/Turret.h"
+#include "core/object/ObjectList.h"
+#include "core/CoreIncludes.h"
 
  namespace orxonox
@@ -81,5 +83,5 @@
         {
             this->forgetTarget();
-            turret->setTarget(0);
+            turret->setTarget(nullptr);
         }
 
@@ -99,12 +101,11 @@
         float minScore = FLT_MAX;
         float tempScore;
-        Pawn* minScorePawn = 0;
-
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
-        {
-            Pawn* entity = orxonox_cast<Pawn*>(*it);
-            if (!entity || FormationController::sameTeam(turret, entity, this->getGametype()))
+        Pawn* minScorePawn = nullptr;
+
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            if (!pawn || FormationController::sameTeam(turret, pawn, this->getGametype()))
                 continue;
-            tempScore = turret->isInRange(entity);
+            tempScore = turret->isInRange(pawn);
             if(tempScore != -1.f)
             {
@@ -112,5 +113,5 @@
                 {
                     minScore = tempScore;
-                    minScorePawn = entity;
+                    minScorePawn = pawn;
                 }
             }
Index: code/trunk/src/modules/objects/eventsystem/EventDispatcher.cc
===================================================================
--- code/trunk/src/modules/objects/eventsystem/EventDispatcher.cc	(revision 11056)
+++ code/trunk/src/modules/objects/eventsystem/EventDispatcher.cc	(revision 11071)
@@ -45,6 +45,6 @@
     {
         if (this->isInitialized())
-            for (std::list<BaseObject*>::iterator it = this->targets_.begin(); it != this->targets_.end(); ++it)
-                (*it)->destroy();
+            for (BaseObject* target : this->targets_)
+                target->destroy();
     }
 
@@ -61,6 +61,6 @@
     void EventDispatcher::processEvent(Event& event)
     {
-        for (std::list<BaseObject*>::iterator it = this->targets_.begin(); it != this->targets_.end(); ++it)
-            (*it)->processEvent(event);
+        for (BaseObject* target : this->targets_)
+            target->processEvent(event);
     }
 
@@ -73,11 +73,11 @@
     {
         unsigned int i = 0;
-        for (std::list<BaseObject*>::const_iterator it = this->targets_.begin(); it != this->targets_.end(); ++it)
+        for (BaseObject* target : this->targets_)
         {
             if (i == index)
-                return (*it);
+                return target;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 }
Index: code/trunk/src/modules/objects/eventsystem/EventFilter.cc
===================================================================
--- code/trunk/src/modules/objects/eventsystem/EventFilter.cc	(revision 11056)
+++ code/trunk/src/modules/objects/eventsystem/EventFilter.cc	(revision 11071)
@@ -70,7 +70,7 @@
         {
             bool success = false;
-            for (std::list<EventName*>::const_iterator it = this->names_.begin(); it != this->names_.end(); ++it)
+            for (EventName* name : this->names_)
             {
-                if ((*it)->getName() == event.name_)
+                if (name->getName() == event.name_)
                 {
                     success = true;
@@ -96,11 +96,11 @@
     {
         unsigned int i = 0;
-        for (std::list<BaseObject*>::const_iterator it = this->sources_.begin(); it != this->sources_.end(); ++it)
+        for (BaseObject* source : this->sources_)
         {
             if (i == index)
-                return (*it);
+                return source;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -113,11 +113,11 @@
     {
         unsigned int i = 0;
-        for (std::list<EventName*>::const_iterator it = this->names_.begin(); it != this->names_.end(); ++it)
+        for (EventName* name : this->names_)
         {
             if (i == index)
-                return (*it);
+                return name;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 }
Index: code/trunk/src/modules/objects/eventsystem/EventListener.cc
===================================================================
--- code/trunk/src/modules/objects/eventsystem/EventListener.cc	(revision 11056)
+++ code/trunk/src/modules/objects/eventsystem/EventListener.cc	(revision 11071)
@@ -78,7 +78,7 @@
             return;
 
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it != ObjectList<BaseObject>::end(); ++it)
-            if (it->getName() == this->eventName_)
-                this->addEventSource(*it, "");
+        for (BaseObject* object : ObjectList<BaseObject>())
+            if (object->getName() == this->eventName_)
+                this->addEventSource(object, "");
     }
 
Index: code/trunk/src/modules/objects/eventsystem/EventTarget.cc
===================================================================
--- code/trunk/src/modules/objects/eventsystem/EventTarget.cc	(revision 11056)
+++ code/trunk/src/modules/objects/eventsystem/EventTarget.cc	(revision 11071)
@@ -73,7 +73,7 @@
         this->target_ = name;
 
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it != ObjectList<BaseObject>::end(); ++it)
-            if (it->getName() == this->target_)
-                this->addEventTarget(*it);
+        for (BaseObject* object : ObjectList<BaseObject>())
+            if (object->getName() == this->target_)
+                this->addEventTarget(object);
     }
 
Index: code/trunk/src/modules/objects/triggers/CheckPoint.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/CheckPoint.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/CheckPoint.cc	(revision 11071)
@@ -56,5 +56,5 @@
 
         this->setRadarObjectColour(ColourValue::Green);
-        this->setRadarObjectShape(RadarViewable::Dot);
+        this->setRadarObjectShape(RadarViewable::Shape::Dot);
         this->setRadarVisibility(false);
 
Index: code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.cc	(revision 11071)
@@ -58,5 +58,5 @@
 
         this->distance_ = 100.0f;
-        this->setBeaconModeDirect(distanceMultiTriggerBeaconMode::off);
+        this->setBeaconModeDirect(DistanceMultiTriggerBeaconMode::off);
         this->targetName_ = "";
         this->beaconMask_.exclude(Class(BaseObject));
@@ -97,13 +97,13 @@
     {
 
-        std::queue<MultiTriggerState*>* queue = NULL;
+        std::queue<MultiTriggerState*>* queue = nullptr;
 
         // Check for objects that were in range but no longer are. Iterate through all objects, that are in range.
-        for(std::set<WeakPtr<WorldEntity> >::iterator it = this->range_.begin(); it != this->range_.end(); )
+        for(std::set<WeakPtr<WorldEntity>>::iterator it = this->range_.begin(); it != this->range_.end(); )
         {
             WorldEntity* entity = *it;
 
             // If the entity no longer exists.
-            if(entity == NULL)
+            if(entity == nullptr)
             {
                 this->range_.erase(it++);
@@ -118,5 +118,5 @@
 
                 // If no queue has been created, yet.
-                if(queue == NULL)
+                if(queue == nullptr)
                     queue = new std::queue<MultiTriggerState*>();
 
@@ -136,5 +136,5 @@
         ClassTreeMask targetMask = this->getTargetMask();
         // If we are in identify-mode another target mask has to be applies to find the DistanceTriggerBeacons.
-        if(this->beaconMode_ == distanceMultiTriggerBeaconMode::identify)
+        if(this->beaconMode_ == DistanceMultiTriggerBeaconMode::identify)
             targetMask = this->beaconMask_;
 
@@ -145,5 +145,5 @@
 
             // If the DistanceMultiTrigger is in identify-mode and the DistanceTriggerBeacon attached to the object has the wrong name we ignore it.
-            if(this->beaconMode_ == distanceMultiTriggerBeaconMode::identify)
+            if(this->beaconMode_ == DistanceMultiTriggerBeaconMode::identify)
             {
                 if(entity->getName() != this->targetName_)
@@ -155,12 +155,12 @@
             
             // If the DistanceMultiTrigger is in exclude mode and the DistanceTriggerBeacon attached to the object has the right name, we ignore it.
-            if(this->beaconMode_ == distanceMultiTriggerBeaconMode::exclude)
+            if(this->beaconMode_ == DistanceMultiTriggerBeaconMode::exclude)
             {
                 
-                const std::set<WorldEntity*> attached = entity->getAttachedObjects();
+                const std::set<WorldEntity*> attachedObjects = entity->getAttachedObjects();
                 bool found = false;
-                for(std::set<WorldEntity*>::const_iterator it = attached.begin(); it != attached.end(); it++)
+                for(WorldEntity* attachedObject : attachedObjects)
                 {
-                    if((*it)->isA(ClassIdentifier<DistanceTriggerBeacon>::getIdentifier()) && static_cast<DistanceTriggerBeacon*>(*it)->getName() == this->targetName_)
+                    if(attachedObject->isA(ClassIdentifier<DistanceTriggerBeacon>::getIdentifier()) && static_cast<DistanceTriggerBeacon*>(attachedObject)->getName() == this->targetName_)
                     {
                         found = true;
@@ -182,9 +182,9 @@
 
                 // Change the entity to the parent of the DistanceTriggerBeacon (if in identify-mode), which is the entity to which the beacon is attached.
-                if(this->beaconMode_ == distanceMultiTriggerBeaconMode::identify)
+                if(this->beaconMode_ == DistanceMultiTriggerBeaconMode::identify)
                     entity = entity->getParent();
 
                 // If no queue has been created, yet.
-                if(queue == NULL)
+                if(queue == nullptr)
                     queue = new std::queue<MultiTriggerState*>();
 
@@ -206,5 +206,5 @@
         The mode as an enum.
     */
-    void DistanceMultiTrigger::setBeaconModeDirect(distanceMultiTriggerBeaconMode::Value mode)
+    void DistanceMultiTrigger::setBeaconModeDirect(DistanceMultiTriggerBeaconMode mode)
     {
         this->beaconMode_ = mode;
@@ -221,9 +221,9 @@
         switch(this->getBeaconModeDirect())
         {
-            case distanceMultiTriggerBeaconMode::off :
+            case DistanceMultiTriggerBeaconMode::off :
                 return DistanceMultiTrigger::beaconModeOff_s;
-            case distanceMultiTriggerBeaconMode::identify:
+            case DistanceMultiTriggerBeaconMode::identify:
                 return DistanceMultiTrigger::beaconModeIdentify_s;
-            case distanceMultiTriggerBeaconMode::exclude:
+            case DistanceMultiTriggerBeaconMode::exclude:
                 return DistanceMultiTrigger::beaconModeExlcude_s;
             default :
@@ -242,9 +242,9 @@
     {
         if(mode == DistanceMultiTrigger::beaconModeOff_s)
-            this->setBeaconModeDirect(distanceMultiTriggerBeaconMode::off);
+            this->setBeaconModeDirect(DistanceMultiTriggerBeaconMode::off);
         else if(mode == DistanceMultiTrigger::beaconModeIdentify_s)
-            this->setBeaconModeDirect(distanceMultiTriggerBeaconMode::identify);
+            this->setBeaconModeDirect(DistanceMultiTriggerBeaconMode::identify);
         else if(mode == DistanceMultiTrigger::beaconModeExlcude_s)
-            this->setBeaconModeDirect(distanceMultiTriggerBeaconMode::exclude);
+            this->setBeaconModeDirect(DistanceMultiTriggerBeaconMode::exclude);
         else
             orxout(internal_error, context::triggers) << "Invalid beacon mode in DistanceMultiTrigger." << endl;
@@ -261,5 +261,5 @@
     bool DistanceMultiTrigger::addToRange(WorldEntity* entity)
     {
-        std::pair<std::set<WeakPtr<WorldEntity> >::iterator, bool> pair = this->range_.insert(entity);
+        std::pair<std::set<WeakPtr<WorldEntity>>::iterator, bool> pair = this->range_.insert(entity);
         return pair.second;
     }
Index: code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.h
===================================================================
--- code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.h	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/DistanceMultiTrigger.h	(revision 11071)
@@ -55,12 +55,9 @@
     @ingroup MultiTrigger
     */
-    namespace distanceMultiTriggerBeaconMode
-    {
-        enum Value {
-            off, //!< The DistanceMultiTrigger is not in <em>beacon-mode</em>.
-            identify, //!< The DistanceTrigger is in <em>identify-mode</em>.
-            exclude //!< The DistanceTrigger is in <em>exclude-mode</em>.
-        };
-    }
+    enum class DistanceMultiTriggerBeaconMode {
+        off, //!< The DistanceMultiTrigger is not in <em>beacon-mode</em>.
+        identify, //!< The DistanceTrigger is in <em>identify-mode</em>.
+        exclude //!< The DistanceTrigger is in <em>exclude-mode</em>.
+    };
 
     /**
@@ -113,10 +110,10 @@
                 { return this->distance_; }
             
-            void setBeaconModeDirect(distanceMultiTriggerBeaconMode::Value mode); // Set the beacon mode.
+            void setBeaconModeDirect(DistanceMultiTriggerBeaconMode mode); // Set the beacon mode.
             /**
             @brief Get the beacon mode.
             @return Returns the mode as an enum.
             */
-            inline distanceMultiTriggerBeaconMode::Value getBeaconModeDirect(void) const
+            inline DistanceMultiTriggerBeaconMode getBeaconModeDirect(void) const
                 { return this->beaconMode_; }
             void setBeaconMode(const std::string& mode); // Set the beacon mode.
@@ -149,9 +146,9 @@
             float distance_; //!< The distance at which the DistanceMultiTrigger triggers.
 
-            distanceMultiTriggerBeaconMode::Value beaconMode_; //!< The beacon mode, the DistanceMultiTrigger is in.
+            DistanceMultiTriggerBeaconMode beaconMode_; //!< The beacon mode, the DistanceMultiTrigger is in.
             std::string targetName_; //!< The target name, used in <em>single-target</em> mode.
             ClassTreeMask beaconMask_; //!< A mask, that only accepts DistanceTriggerBeacons.
 
-            std::set<WeakPtr<WorldEntity> > range_; //!< The set of entities that currently are in range of the DistanceMultiTrigger.
+            std::set<WeakPtr<WorldEntity>> range_; //!< The set of entities that currently are in range of the DistanceMultiTrigger.
 
     };
Index: code/trunk/src/modules/objects/triggers/DistanceTrigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/DistanceTrigger.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/DistanceTrigger.cc	(revision 11071)
@@ -106,5 +106,5 @@
             this->setForPlayer(true);
 
-        if (targetId == NULL)
+        if (targetId == nullptr)
         {
             orxout(internal_error, context::triggers) << "\"" << targetStr << "\" is not a valid class name to include in ClassTreeMask (in " << this->getName() << ", class " << this->getIdentifier()->getName() << ')' << endl;
@@ -147,5 +147,5 @@
     {
         // Check whether there is a cached object, it still exists and whether it is still in range, if so nothing further needs to be done.
-        if(this->cache_ != NULL)
+        if(this->cache_ != nullptr)
         {
             if((this->cache_->getWorldPosition() - this->getWorldPosition()).length() < this->distance_)
@@ -158,5 +158,5 @@
         ClassTreeMask targetMask = this->targetMask_;
         // If we are in identify-mode another target mask has to be applies to find the DistanceTriggerBeacons.
-        if(this->beaconMode_ == distanceTriggerBeaconMode::identify)
+        if(this->beaconMode_ == DistanceTriggerBeaconMode::identify)
             targetMask = this->beaconMask_;
 
@@ -167,5 +167,5 @@
 
             // If the DistanceTrigger is in identify-mode and the DistanceTriggerBeacon attached to the object has the wrong name we ignore it.
-            if(this->beaconMode_ == distanceTriggerBeaconMode::identify)
+            if(this->beaconMode_ == DistanceTriggerBeaconMode::identify)
             {
                 if(entity->getName() != this->targetName_)
@@ -177,12 +177,12 @@
 
             // If the DistanceTrigger is in exclude mode and the DistanceTriggerBeacon attached to the object has the right name, we ignore it.
-            if(this->beaconMode_ == distanceTriggerBeaconMode::exclude)
+            if(this->beaconMode_ == DistanceTriggerBeaconMode::exclude)
             {
 
-                const std::set<WorldEntity*> attached = entity->getAttachedObjects();
+                const std::set<WorldEntity*> attachedObjects = entity->getAttachedObjects();
                 bool found = false;
-                for(std::set<WorldEntity*>::const_iterator it = attached.begin(); it != attached.end(); it++)
+                for(WorldEntity* attachedObject : attachedObjects)
                 {
-                    if((*it)->isA(ClassIdentifier<DistanceTriggerBeacon>::getIdentifier()) && static_cast<DistanceTriggerBeacon*>(*it)->getName() == this->targetName_)
+                    if(attachedObject->isA(ClassIdentifier<DistanceTriggerBeacon>::getIdentifier()) && static_cast<DistanceTriggerBeacon*>(attachedObject)->getName() == this->targetName_)
                     {
                         found = true;
@@ -202,12 +202,12 @@
                 {
                     // Change the entity to the parent of the DistanceTriggerBeacon (if in identify-mode), which is the entity to which the beacon is attached.
-                    if(this->beaconMode_ == distanceTriggerBeaconMode::identify)
+                    if(this->beaconMode_ == DistanceTriggerBeaconMode::identify)
                         entity = entity->getParent();
 
                     Pawn* pawn = orxonox_cast<Pawn*>(entity);
-                    if(pawn != NULL)
+                    if(pawn != nullptr)
                         this->setTriggeringPawn(pawn);
                     else
-                        orxout(internal_warning, context::triggers) << "Pawn was NULL." << endl;
+                        orxout(internal_warning, context::triggers) << "Pawn was nullptr." << endl;
                 }
                 
@@ -228,5 +228,5 @@
         The mode as an enum.
     */
-    void DistanceTrigger::setBeaconModeDirect(distanceTriggerBeaconMode::Value mode)
+    void DistanceTrigger::setBeaconModeDirect(DistanceTriggerBeaconMode mode)
     {
         this->beaconMode_ = mode;
@@ -243,9 +243,9 @@
         switch(this->getBeaconModeDirect())
         {
-            case distanceTriggerBeaconMode::off :
+            case DistanceTriggerBeaconMode::off :
                 return DistanceTrigger::beaconModeOff_s;
-            case distanceTriggerBeaconMode::identify:
+            case DistanceTriggerBeaconMode::identify:
                 return DistanceTrigger::beaconModeIdentify_s;
-            case distanceTriggerBeaconMode::exclude:
+            case DistanceTriggerBeaconMode::exclude:
                 return DistanceTrigger::beaconModeExlcude_s;
             default :
@@ -264,9 +264,9 @@
     {
         if(mode == DistanceTrigger::beaconModeOff_s)
-            this->setBeaconModeDirect(distanceTriggerBeaconMode::off);
+            this->setBeaconModeDirect(DistanceTriggerBeaconMode::off);
         else if(mode == DistanceTrigger::beaconModeIdentify_s)
-            this->setBeaconModeDirect(distanceTriggerBeaconMode::identify);
+            this->setBeaconModeDirect(DistanceTriggerBeaconMode::identify);
         else if(mode == DistanceTrigger::beaconModeExlcude_s)
-            this->setBeaconModeDirect(distanceTriggerBeaconMode::exclude);
+            this->setBeaconModeDirect(DistanceTriggerBeaconMode::exclude);
         else
             orxout(internal_error, context::triggers) << "Invalid beacon mode in DistanceTrigger." << endl;
@@ -282,5 +282,5 @@
         Returns true if it is triggered ,false if not.
     */
-    bool DistanceTrigger::isTriggered(TriggerMode::Value mode)
+    bool DistanceTrigger::isTriggered(TriggerMode mode)
     {
         if (Trigger::isTriggered(mode))
Index: code/trunk/src/modules/objects/triggers/DistanceTrigger.h
===================================================================
--- code/trunk/src/modules/objects/triggers/DistanceTrigger.h	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/DistanceTrigger.h	(revision 11071)
@@ -55,12 +55,9 @@
   @ingroup NormalTrigger
   */
-  namespace distanceTriggerBeaconMode
-  {
-      enum Value {
-          off,
-          identify,
-          exclude
-      };
-  }
+  enum class DistanceTriggerBeaconMode {
+      off,
+      identify,
+      exclude
+  };
 
     /**
@@ -118,10 +115,10 @@
                 { return this->distance_; }
 
-            void setBeaconModeDirect(distanceTriggerBeaconMode::Value mode); // Set the beacon mode.
+            void setBeaconModeDirect(DistanceTriggerBeaconMode mode); // Set the beacon mode.
             /**
             @brief Get the beacon mode.
             @return Returns the mode as an enum.
             */
-            inline distanceTriggerBeaconMode::Value getBeaconModeDirect(void) const
+            inline DistanceTriggerBeaconMode getBeaconModeDirect(void) const
             { return this->beaconMode_; }
             void setBeaconMode(const std::string& mode); // Set the beacon mode.
@@ -144,5 +141,5 @@
 
         protected:
-            virtual bool isTriggered(TriggerMode::Value mode); // Check whether the DistanceTrigger is triggered.
+            virtual bool isTriggered(TriggerMode mode) override; // Check whether the DistanceTrigger is triggered.
             /**
             @brief Notifies interested parties about a change of the DistanceTrigger's target mask.
@@ -160,5 +157,5 @@
             float distance_; //!< The range of the DistanceTrigger.
             
-            distanceTriggerBeaconMode::Value beaconMode_; //!< The beacon mode.
+            DistanceTriggerBeaconMode beaconMode_; //!< The beacon mode.
             std::string targetName_; //!< The name a DistanceTriggerBeacon needs to have to make the DistanceTrigger react to it if in beacon-mode.
             ClassTreeMask beaconMask_; //!< A mask, that only accepts DistanceTriggerBeacons.
Index: code/trunk/src/modules/objects/triggers/EventMultiTrigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/EventMultiTrigger.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/EventMultiTrigger.cc	(revision 11071)
@@ -96,5 +96,5 @@
     {
         // If the originator is a MultiTriggerContainer, the event originates from a MultiTrigger and thus the event only triggers the EventMultiTrigger for the originator that caused the MultiTrigger to trigger.
-        if(originator != NULL && originator->isA(ClassIdentifier<MultiTriggerContainer>::getIdentifier()))
+        if(originator != nullptr && originator->isA(ClassIdentifier<MultiTriggerContainer>::getIdentifier()))
         {
             MultiTriggerContainer* container = static_cast<MultiTriggerContainer*>(originator);
Index: code/trunk/src/modules/objects/triggers/EventTrigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/EventTrigger.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/EventTrigger.cc	(revision 11071)
@@ -79,5 +79,5 @@
         It should be triggered if it is triggered according just to its sub-triggers and if the last event that came in was an event that changed from not triggered to triggered.
     */
-    bool EventTrigger::isTriggered(TriggerMode::Value mode)
+    bool EventTrigger::isTriggered(TriggerMode mode)
     {
         if (Trigger::isTriggered(mode))
Index: code/trunk/src/modules/objects/triggers/EventTrigger.h
===================================================================
--- code/trunk/src/modules/objects/triggers/EventTrigger.h	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/EventTrigger.h	(revision 11071)
@@ -84,5 +84,5 @@
 
         protected:
-            virtual bool isTriggered(TriggerMode::Value mode); // Check whether the EventTrigger should be triggered.
+            virtual bool isTriggered(TriggerMode mode) override; // Check whether the EventTrigger should be triggered.
 
         private:
Index: code/trunk/src/modules/objects/triggers/MultiTrigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/MultiTrigger.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/MultiTrigger.cc	(revision 11071)
@@ -124,13 +124,13 @@
         // Let the MultiTrigger return the states that trigger and process the new states if there are any.
         std::queue<MultiTriggerState*>* queue  = this->letTrigger();
-        if(queue != NULL)
+        if(queue != nullptr)
         {
             while(queue->size() > 0)
             {
                 MultiTriggerState* state = queue->front();
-                // If the state is NULL. (This really shouldn't happen)
-                if(state == NULL)
+                // If the state is nullptr. (This really shouldn't happen)
+                if(state == nullptr)
                 {
-                    orxout(internal_error, context::triggers) << "In MultiTrigger '" << this->getName() << "' (&" << this << "), Error: State of new states queue was NULL. State ignored." << endl;
+                    orxout(internal_error, context::triggers) << "In MultiTrigger '" << this->getName() << "' (&" << this << "), Error: State of new states queue was nullptr. State ignored." << endl;
                     queue->pop();
                     continue;
@@ -227,5 +227,5 @@
                             {
                                 // If the MultiTrigger is set to broadcast and has no originator a boradcast is fired.
-                                if(this->getBroadcast() && state->originator == NULL)
+                                if(this->getBroadcast() && state->originator == nullptr)
                                     this->broadcast(bActive);
                                 // Else a normal event is fired.
@@ -240,11 +240,11 @@
                         {
                             // Print some debug output if the state has changed.
-                            if(state->originator != NULL)
+                            if(state->originator != nullptr)
                                 orxout(verbose, context::triggers) << "MultiTrigger '" << this->getName() << "' (&" << this << ") changed state. originator: " << state->originator->getIdentifier()->getName() << " (&" << state->originator << "), active: " << bActive << ", triggered: " << state->bTriggered << "." << endl;
                             else
-                                orxout(verbose, context::triggers) << "MultiTrigger '" << this->getName() << "' (&" << this << ") changed state. originator: NULL, active: " << bActive << ", triggered: " << state->bTriggered << "." << endl;
+                                orxout(verbose, context::triggers) << "MultiTrigger '" << this->getName() << "' (&" << this << ") changed state. originator: nullptr, active: " << bActive << ", triggered: " << state->bTriggered << "." << endl;
 
                             // If the MultiTrigger has a parent trigger, that is itself a MultiTrigger, it needs to call a method to notify him, that its activity has changed.
-                            if(this->parent_ != NULL && this->parent_->isMultiTrigger())
+                            if(this->parent_ != nullptr && this->parent_->isMultiTrigger())
                                 static_cast<MultiTrigger*>(this->parent_)->childActivityChanged(state->originator);
                         }
@@ -265,5 +265,5 @@
                 else
                 {
-                    this->stateQueue_.push_back(std::pair<float, MultiTriggerState*>(timeRemaining-dt, state));
+                    this->stateQueue_.emplace_back(timeRemaining-dt, state);
                     this->stateQueue_.pop_front();
                 }
@@ -299,5 +299,5 @@
 
         // If the target is not a valid class name display an error.
-        if (target == NULL)
+        if (target == nullptr)
         {
             orxout(internal_error, context::triggers) << "'" << targetStr << "' is not a valid class name to include in ClassTreeMask (in " << this->getName() << ", class " << this->getIdentifier()->getName() << ")" << endl;
@@ -327,5 +327,5 @@
 
         // If the target is not a valid class name display an error.
-        if (target == NULL)
+        if (target == nullptr)
         {
             orxout(internal_error, context::triggers) << "'" << targetStr << "' is not a valid class name to include in ClassTreeMask (in " << this->getName() << ", class " << this->getIdentifier()->getName() << ")" << endl;
@@ -346,5 +346,5 @@
     std::queue<MultiTriggerState*>* MultiTrigger::letTrigger(void)
     {
-        return NULL;
+        return nullptr;
     }
 
@@ -443,6 +443,6 @@
     void MultiTrigger::fire(bool status, BaseObject* originator)
     {
-        // If the originator is NULL, a normal event without MultiTriggerContainer is sent.
-        if(originator == NULL)
+        // If the originator is nullptr, a normal event without MultiTriggerContainer is sent.
+        if(originator == nullptr)
         {
             this->fireEvent(status);
@@ -479,5 +479,5 @@
     bool MultiTrigger::addState(MultiTriggerState* state)
     {
-        assert(state); // The state really shouldn't be NULL.
+        assert(state); // The state really shouldn't be nullptr.
 
         // If the originator is no target of this MultiTrigger.
@@ -489,5 +489,5 @@
 
         // Add it ot the state queue with the delay specified for the MultiTrigger.
-        this->stateQueue_.push_back(std::pair<float, MultiTriggerState*>(this->getDelay(), state));
+        this->stateQueue_.emplace_back(this->getDelay(), state);
 
         return true;
@@ -504,7 +504,6 @@
     bool MultiTrigger::checkAnd(BaseObject* triggerer)
     {
-        for(std::set<TriggerBase*>::iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-        {
-            TriggerBase* trigger = *it;
+        for(TriggerBase* trigger : this->children_)
+        {
             if(trigger->isMultiTrigger())
             {
@@ -531,7 +530,6 @@
     bool MultiTrigger::checkOr(BaseObject* triggerer)
     {
-        for(std::set<TriggerBase*>::iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-        {
-            TriggerBase* trigger = *it;
+        for(TriggerBase* trigger : this->children_)
+        {
             if(trigger->isMultiTrigger())
             {
@@ -559,7 +557,6 @@
     {
         bool triggered = false;
-        for(std::set<TriggerBase*>::iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-        {
-            TriggerBase* trigger = *it;
+        for(TriggerBase* trigger : this->children_)
+        {
             if(triggered)
             {
Index: code/trunk/src/modules/objects/triggers/MultiTrigger.h
===================================================================
--- code/trunk/src/modules/objects/triggers/MultiTrigger.h	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/MultiTrigger.h	(revision 11071)
@@ -76,5 +76,5 @@
         - @b simultaneousTriggerers The number of simultaneous triggerers limits the number of objects that are allowed to trigger the MultiTrigger at the same time. Or more precisely, the number of distinct objects the MultiTrigger has <em>triggered</em> states for, at each point in time. The default is <code>-1</code>, which denotes infinity.
         - @b mode The mode describes how the MultiTrigger acts in relation to all the triggers, that are appended to it. There are 3 modes: <em>and</em>, meaning that the MultiTrigger can only be triggered if all the appended triggers are active. <em>or</em>, meaning that the MultiTrigger can only triggered if at least one of the appended triggers is active. And <em>xor</em>, meaning that the MultiTrigger can only be triggered if one and only one appended trigger is active. Note, that I wrote <em>can only be active</em>, that implies, that there is an additional condition to the <em>activity</em> of the MultiTrigger and that is the fulfillment of the triggering condition (the MultiTrigger itself doesn't have one, but all derived classes should). Also bear in mind, that the <em>activity</em> of a MultiTrigger is still coupled to the object that triggered it. The default is <em>and</em>.
-        - @b broadcast Broadcast is a boolean, if true the MutliTrigger is in <em>broadcast-mode</em>, meaning, that all trigger events that are caused by no originator (originator is NULL) are broadcast as having come from every possible originator, or more precisely as having come from all objects that are specified targets of this MultiTrigger. The default is false.
+        - @b broadcast Broadcast is a boolean, if true the MutliTrigger is in <em>broadcast-mode</em>, meaning, that all trigger events that are caused by no originator (originator is nullptr) are broadcast as having come from every possible originator, or more precisely as having come from all objects that are specified targets of this MultiTrigger. The default is false.
         - @b target The target describes the kind of objects that are allowed to trigger this MultiTrigger. The default is @ref orxonox::Pawn "Pawn".
         - Also there is the possibility of appending triggers (as long as they inherit from TriggerBase) to the MultiTrigger just by adding them as children in the XML description of your MultiTrigger.
@@ -110,6 +110,6 @@
             */
             inline bool isActive(void) const
-                { return this->isActive(NULL); }
-            bool isActive(BaseObject* triggerer = NULL) const; //!< Check whether the MultiTrigger is active for a given object.
+                { return this->isActive(nullptr); }
+            bool isActive(BaseObject* triggerer = nullptr) const; //!< Check whether the MultiTrigger is active for a given object.
 
             /**
@@ -145,5 +145,5 @@
             */
             inline bool isTarget(BaseObject* target)
-                { if(target == NULL) return true; else return targetMask_.isIncluded(target->getIdentifier()); }
+                { if(target == nullptr) return true; else return targetMask_.isIncluded(target->getIdentifier()); }
                 
             void addTarget(const std::string& targets); //!< Add some target to the MultiTrigger.
@@ -152,10 +152,10 @@
             virtual std::queue<MultiTriggerState*>* letTrigger(void); //!< This method is called by the MultiTrigger to get information about new trigger events that need to be looked at.
 
-            void changeTriggered(BaseObject* originator = NULL); //!< This method can be called by any class inheriting from MultiTrigger to change it's triggered status for a specified originator.
-
-            bool isModeTriggered(BaseObject* triggerer = NULL); //!< Checks whether the MultiTrigger is triggered concerning it's children.
-            bool isTriggered(BaseObject* triggerer = NULL); //!< Get whether the MultiTrigger is triggered for a given object.
-
-            virtual void fire(bool status, BaseObject* originator = NULL);  //!< Helper method. Creates an Event for the given status and originator and fires it.
+            void changeTriggered(BaseObject* originator = nullptr); //!< This method can be called by any class inheriting from MultiTrigger to change it's triggered status for a specified originator.
+
+            bool isModeTriggered(BaseObject* triggerer = nullptr); //!< Checks whether the MultiTrigger is triggered concerning it's children.
+            bool isTriggered(BaseObject* triggerer = nullptr); //!< Get whether the MultiTrigger is triggered for a given object.
+
+            virtual void fire(bool status, BaseObject* originator = nullptr);  //!< Helper method. Creates an Event for the given status and originator and fires it.
             void broadcast(bool status); //!< Helper method. Broadcasts an Event for every object that is a target.
 
@@ -192,5 +192,5 @@
             std::set<BaseObject*> triggered_; //!< The set of all objects the MultiTrigger is triggered for.
 
-            std::deque< std::pair<float, MultiTriggerState*> > stateQueue_; //!< The queue of states waiting to become active.
+            std::deque<std::pair<float, MultiTriggerState*>> stateQueue_; //!< The queue of states waiting to become active.
 
             ClassTreeMask targetMask_; //!< The target mask, masking all objects that can trigger this MultiTrigger.
Index: code/trunk/src/modules/objects/triggers/MultiTriggerContainer.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/MultiTriggerContainer.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/MultiTriggerContainer.cc	(revision 11071)
@@ -50,5 +50,5 @@
         The creator.
     */
-    MultiTriggerContainer::MultiTriggerContainer(Context* context) : BaseObject(context), originator_(NULL), data_(NULL)
+    MultiTriggerContainer::MultiTriggerContainer(Context* context) : BaseObject(context), originator_(nullptr), data_(nullptr)
     {
         RegisterObject(MultiTriggerContainer);
@@ -70,5 +70,5 @@
 
         Pawn* pawn = orxonox_cast<Pawn*>(data);
-        if(pawn != NULL)
+        if(pawn != nullptr)
         {
             this->setForPlayer(true);
Index: code/trunk/src/modules/objects/triggers/Trigger.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/Trigger.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/Trigger.cc	(revision 11071)
@@ -37,5 +37,4 @@
 #include "core/CoreIncludes.h"
 #include "core/GameMode.h"
-#include "core/XMLPort.h"
 #include "core/command/ConsoleCommandIncludes.h"
 
@@ -86,13 +85,4 @@
     {
 
-    }
-
-    /**
-    @brief
-        Method for creating a Trigger object through XML.
-    */
-    void Trigger::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(Trigger, XMLPort, xmlelement, mode);
     }
 
@@ -203,5 +193,5 @@
         Returns true if the Trigger should be triggered and false if not.
     */
-    bool Trigger::isTriggered(TriggerMode::Value mode)
+    bool Trigger::isTriggered(TriggerMode mode)
     {
         // If the trigger has sub-triggers.
@@ -234,7 +224,7 @@
     {
         // Iterate over all sub-triggers.
-        for (std::set<TriggerBase*>::iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-        {
-            if (!(*it)->isActive())
+        for (TriggerBase* child : this->children_)
+        {
+            if (!child->isActive())
                 return false;
         }
@@ -252,7 +242,7 @@
     {
         // Iterate over all sub-triggers.
-        for (std::set<TriggerBase*>::iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-        {
-            if ((*it)->isActive())
+        for (TriggerBase* child : this->children_)
+        {
+            if (child->isActive())
                 return true;
         }
@@ -270,9 +260,9 @@
     {
         bool test = false;
-        for (std::set<TriggerBase*>::iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-        {
-            if (test && (*it)->isActive())
+        for (TriggerBase* child : this->children_)
+        {
+            if (test && child->isActive())
                 return false;
-            if ((*it)->isActive())
+            if (child->isActive())
                 test = true;
         }
@@ -346,6 +336,6 @@
     {
         // Iterate over all Triggers.
-        for (ObjectList<Trigger>::iterator it = ObjectList<Trigger>::begin(); it != ObjectList<Trigger>::end(); ++it)
-            it->setVisible(bVisible);
+        for (Trigger* trigger : ObjectList<Trigger>())
+            trigger->setVisible(bVisible);
     }
 
Index: code/trunk/src/modules/objects/triggers/Trigger.h
===================================================================
--- code/trunk/src/modules/objects/triggers/Trigger.h	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/Trigger.h	(revision 11071)
@@ -83,5 +83,4 @@
             virtual ~Trigger();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); // Method for creating a Trigger object through XML.
             virtual void tick(float dt);
 
@@ -105,5 +104,5 @@
             inline bool isTriggered()
                 { return this->isTriggered(this->mode_); }
-            virtual bool isTriggered(TriggerMode::Value mode); // Check whether the Trigger should be triggered, given only its sub-triggers, given a specific mode.
+            virtual bool isTriggered(TriggerMode mode); // Check whether the Trigger should be triggered, given only its sub-triggers, given a specific mode.
             virtual void triggered(bool bIsTriggered); // Fires an event with the input triggered state.
 
@@ -127,5 +126,5 @@
             BillboardSet debugBillboard_; //!< A set of debug billboards to visualize the state of the trigger.
 
-            std::queue<std::pair<float, char> > stateChanges_; //!< A queue of state changes (in the same format as latestState_) paired with the time they will take effect since the last state change took effect.
+            std::queue<std::pair<float, char>> stateChanges_; //!< A queue of state changes (in the same format as latestState_) paired with the time they will take effect since the last state change took effect.
     };
 
Index: code/trunk/src/modules/objects/triggers/TriggerBase.cc
===================================================================
--- code/trunk/src/modules/objects/triggers/TriggerBase.cc	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/TriggerBase.cc	(revision 11071)
@@ -67,5 +67,5 @@
         this->mode_ = TriggerMode::EventTriggerAND;
 
-        this->parent_ = NULL;
+        this->parent_ = nullptr;
 
         this->bMultiTrigger_ = false;
@@ -100,15 +100,4 @@
 
         XMLPortObject(TriggerBase, TriggerBase, "", addTrigger, getTrigger, xmlelement, mode);
-    }
-
-    /**
-    @brief
-        A method that is executed each tick.
-    @param dt
-        The duration of the last tick.
-    */
-    void TriggerBase::tick(float dt)
-    {
-        SUPER(TriggerBase, tick, dt);
     }
 
@@ -170,5 +159,5 @@
         The index.
     @return
-        Returns a pointer ot the trigger. NULL if no such trigger exists.
+        Returns a pointer ot the trigger. nullptr if no such trigger exists.
     */
     const TriggerBase* TriggerBase::getTrigger(unsigned int index) const
@@ -176,5 +165,5 @@
         // If the index is greater than the number of children.
         if (this->children_.size() <= index)
-            return NULL;
+            return nullptr;
 
         std::set<TriggerBase*>::const_iterator it;
Index: code/trunk/src/modules/objects/triggers/TriggerBase.h
===================================================================
--- code/trunk/src/modules/objects/triggers/TriggerBase.h	(revision 11056)
+++ code/trunk/src/modules/objects/triggers/TriggerBase.h	(revision 11071)
@@ -52,13 +52,10 @@
     @ingroup Triggers
     */
-    namespace TriggerMode
+    enum class TriggerMode
     {
-        enum Value
-        {
-            EventTriggerAND, //!< The <em>and</em> mode. The trigger can only trigger if all the children are active. 
-            EventTriggerOR, //!< The <em>or</em> mode. The trigger can only trigger if at least one child is active.
-            EventTriggerXOR, //!< The <em>xor</em> mode. The trigger can only trigger if exactly one child is active. 
-        };
-    }
+        EventTriggerAND, //!< The <em>and</em> mode. The trigger can only trigger if all the children are active.
+        EventTriggerOR, //!< The <em>or</em> mode. The trigger can only trigger if at least one child is active.
+        EventTriggerXOR, //!< The <em>xor</em> mode. The trigger can only trigger if exactly one child is active.
+    };
 
     /**
@@ -78,5 +75,4 @@
 
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);  //!< Method for creating a TriggerBase object through XML.
-            virtual void tick(float dt); //!< A method that is executed each tick.
 
             /**
@@ -158,5 +154,5 @@
             @param mode The mode of the trigger.
             */
-            inline void setMode(TriggerMode::Value mode) //!< Get the mode of the trigger.
+            inline void setMode(TriggerMode mode) //!< Get the mode of the trigger.
                 { this->mode_ = mode; }
             const std::string& getModeString(void) const;
@@ -165,5 +161,5 @@
             @return Returns and Enum for the mode of the trigger.
             */
-            inline TriggerMode::Value getMode(void) const
+            inline TriggerMode getMode(void) const
                 { return mode_; }
 
@@ -211,5 +207,5 @@
 
             bool bInvertMode_; //!< Bool for the invert-mode, if true the trigger is inverted.
-            TriggerMode::Value mode_; //!< The mode of the trigger.
+            TriggerMode mode_; //!< The mode of the trigger.
 
             TriggerBase* parent_; //!< The parent of this trigger.
Index: code/trunk/src/modules/overlays/FadeoutText.h
===================================================================
--- code/trunk/src/modules/overlays/FadeoutText.h	(revision 11056)
+++ code/trunk/src/modules/overlays/FadeoutText.h	(revision 11071)
@@ -44,6 +44,6 @@
             virtual ~FadeoutText() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
             inline void setDelay(float delay)
@@ -58,6 +58,6 @@
 
         private:
-            virtual void changedColour();
-            virtual void changedCaption();
+            virtual void changedColour() override;
+            virtual void changedCaption() override;
 
             void fadeout();
Index: code/trunk/src/modules/overlays/GUIOverlay.cc
===================================================================
--- code/trunk/src/modules/overlays/GUIOverlay.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/GUIOverlay.cc	(revision 11071)
@@ -92,5 +92,5 @@
             ControllableEntity* entity = orxonox_cast<ControllableEntity*>(this->getOwner());
             if (entity)
-                GUIManager::getInstance().setPlayer(name, entity->getPlayer()); //Set Player is going to be NULL, so it needs to be set in changedVisibility() as well.
+                GUIManager::getInstance().setPlayer(name, entity->getPlayer()); //Set Player is going to be nullptr, so it needs to be set in changedVisibility() as well.
         }
     }
Index: code/trunk/src/modules/overlays/GUIOverlay.h
===================================================================
--- code/trunk/src/modules/overlays/GUIOverlay.h	(revision 11056)
+++ code/trunk/src/modules/overlays/GUIOverlay.h	(revision 11071)
@@ -44,11 +44,11 @@
             virtual ~GUIOverlay();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void setGUIName(const std::string& name);
             inline const std::string& getGUIName() const { return this->guiName_; }
 
-            virtual void changedVisibility();
-            virtual void changedOwner();
+            virtual void changedVisibility() override;
+            virtual void changedOwner() override;
 
         private:
Index: code/trunk/src/modules/overlays/OverlayText.cc
===================================================================
--- code/trunk/src/modules/overlays/OverlayText.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/OverlayText.cc	(revision 11071)
@@ -32,5 +32,4 @@
 #include <OgrePanelOverlayElement.h>
 #include <OgreTextAreaOverlayElement.h>
-#include <boost/static_assert.hpp>
 
 #include "util/StringUtils.h"
@@ -43,7 +42,7 @@
     RegisterClass(OverlayText);
 
-    BOOST_STATIC_ASSERT((int)Ogre::TextAreaOverlayElement::Left   == (int)OverlayText::Left);
-    BOOST_STATIC_ASSERT((int)Ogre::TextAreaOverlayElement::Center == (int)OverlayText::Center);
-    BOOST_STATIC_ASSERT((int)Ogre::TextAreaOverlayElement::Right  == (int)OverlayText::Right);
+    static_assert((int)Ogre::TextAreaOverlayElement::Left   == (int)OverlayText::Alignment::Left,   "check enum");
+    static_assert((int)Ogre::TextAreaOverlayElement::Center == (int)OverlayText::Alignment::Center, "check enum");
+    static_assert((int)Ogre::TextAreaOverlayElement::Right  == (int)OverlayText::Alignment::Right,  "check enum");
 
     OverlayText::OverlayText(Context* context)
@@ -86,9 +85,9 @@
     {
         if (alignment == "right")
-            this->setAlignment(OverlayText::Right);
+            this->setAlignment(OverlayText::Alignment::Right);
         else if (alignment == "center")
-            this->setAlignment(OverlayText::Center);
+            this->setAlignment(OverlayText::Alignment::Center);
         else // "left" and default
-            this->setAlignment(OverlayText::Left);
+            this->setAlignment(OverlayText::Alignment::Left);
     }
 
@@ -112,7 +111,7 @@
     void OverlayText::sizeChanged()
     {
-        if (this->rotState_ == Horizontal)
+        if (this->rotState_ == RotationState::Horizontal)
             this->overlay_->setScale(size_.y * sizeCorrection_.y, size_.y * sizeCorrection_.y);
-        else if (this->rotState_ == Vertical)
+        else if (this->rotState_ == RotationState::Vertical)
             this->overlay_->setScale(size_.y / (sizeCorrection_.y * sizeCorrection_.y), size_.y * sizeCorrection_.y);
         else
Index: code/trunk/src/modules/overlays/OverlayText.h
===================================================================
--- code/trunk/src/modules/overlays/OverlayText.h	(revision 11056)
+++ code/trunk/src/modules/overlays/OverlayText.h	(revision 11071)
@@ -42,5 +42,5 @@
     {
     public:
-        enum Alignment
+        enum class Alignment
         {
             Left,
@@ -52,5 +52,5 @@
         virtual ~OverlayText();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         void setCaption(const std::string& caption);
@@ -76,5 +76,5 @@
 
     protected:
-        virtual void sizeChanged();
+        virtual void sizeChanged() override;
         virtual void changedColour() {}
         virtual void changedCaption() {}
Index: code/trunk/src/modules/overlays/debugging/DebugFPSText.h
===================================================================
--- code/trunk/src/modules/overlays/debugging/DebugFPSText.h	(revision 11056)
+++ code/trunk/src/modules/overlays/debugging/DebugFPSText.h	(revision 11071)
@@ -43,5 +43,5 @@
         virtual ~DebugFPSText();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
     };
 }
Index: code/trunk/src/modules/overlays/debugging/DebugPositionText.cc
===================================================================
--- code/trunk/src/modules/overlays/debugging/DebugPositionText.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/debugging/DebugPositionText.cc	(revision 11071)
@@ -52,5 +52,5 @@
         SUPER(DebugPositionText, tick, dt);
         
-        ObjectList<NewHumanController>::iterator it = ObjectList<NewHumanController>::begin();
+        ObjectList<NewHumanController>::iterator it = ObjectList<NewHumanController>().begin();
         if (it && it->getControllableEntity() )
         {
Index: code/trunk/src/modules/overlays/debugging/DebugPositionText.h
===================================================================
--- code/trunk/src/modules/overlays/debugging/DebugPositionText.h	(revision 11056)
+++ code/trunk/src/modules/overlays/debugging/DebugPositionText.h	(revision 11071)
@@ -43,5 +43,5 @@
         virtual ~DebugPositionText();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
     };
 }
Index: code/trunk/src/modules/overlays/debugging/DebugRTRText.h
===================================================================
--- code/trunk/src/modules/overlays/debugging/DebugRTRText.h	(revision 11056)
+++ code/trunk/src/modules/overlays/debugging/DebugRTRText.h	(revision 11071)
@@ -43,5 +43,5 @@
         virtual ~DebugRTRText();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
     };
 }
Index: code/trunk/src/modules/overlays/hud/AnnounceMessage.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/AnnounceMessage.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/AnnounceMessage.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(AnnounceMessage);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
 
         this->setDelay(3.0f);
Index: code/trunk/src/modules/overlays/hud/AnnounceMessage.h
===================================================================
--- code/trunk/src/modules/overlays/hud/AnnounceMessage.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/AnnounceMessage.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~AnnounceMessage() {}
 
-            virtual void changedOwner();
+            virtual void changedOwner() override;
 
-            void announcemessage(const GametypeInfo* gtinfo, const std::string& message);
+            virtual void announcemessage(const GametypeInfo* gtinfo, const std::string& message) override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/ChatOverlay.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/ChatOverlay.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/ChatOverlay.cc	(revision 11071)
@@ -58,6 +58,6 @@
     ChatOverlay::~ChatOverlay()
     {
-        for (std::set<Timer*>::iterator it = this->timers_.begin(); it != this->timers_.end(); ++it)
-            delete (*it);
+        for (Timer* timer : this->timers_)
+            delete timer;
     }
 
@@ -92,7 +92,7 @@
         this->text_->setCaption("");
 
-        for (std::list<Ogre::DisplayString>::iterator it = this->messages_.begin(); it != this->messages_.end(); ++it)
+        for (const Ogre::DisplayString& message : this->messages_)
         {
-            this->text_->setCaption(this->text_->getCaption() + "\n" + (*it));
+            this->text_->setCaption(this->text_->getCaption() + "\n" + message);
         }
     }
Index: code/trunk/src/modules/overlays/hud/ChatOverlay.h
===================================================================
--- code/trunk/src/modules/overlays/hud/ChatOverlay.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/ChatOverlay.h	(revision 11071)
@@ -49,5 +49,5 @@
 
         protected:
-            virtual void incomingChat(const std::string& message, const std::string& name);
+            virtual void incomingChat(const std::string& message, const std::string& name) override;
 
             std::list<Ogre::DisplayString> messages_;
Index: code/trunk/src/modules/overlays/hud/CountDown.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/CountDown.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/CountDown.cc	(revision 11071)
@@ -71,5 +71,5 @@
         RegisterObject(CountDown);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
         this->hasStopped_ = false;
     }
Index: code/trunk/src/modules/overlays/hud/CountDown.h
===================================================================
--- code/trunk/src/modules/overlays/hud/CountDown.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/CountDown.h	(revision 11071)
@@ -44,7 +44,7 @@
             virtual ~CountDown();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
+            virtual void tick(float dt) override;
 
             inline void setCounter(float value)
Index: code/trunk/src/modules/overlays/hud/DeathMessage.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/DeathMessage.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/DeathMessage.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(DeathMessage);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
 
         this->setDelay(2.0f);
Index: code/trunk/src/modules/overlays/hud/DeathMessage.h
===================================================================
--- code/trunk/src/modules/overlays/hud/DeathMessage.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/DeathMessage.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~DeathMessage() {}
 
-            virtual void changedOwner();
+            virtual void changedOwner() override;
 
-            void deathmessage(const GametypeInfo* gtinfo, const std::string& message);
+            virtual void deathmessage(const GametypeInfo* gtinfo, const std::string& message) override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/GametypeFadingMessage.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/GametypeFadingMessage.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/GametypeFadingMessage.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(GametypeFadingMessage);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
         this->setDelay(2.0f);
         this->setFadeouttime(0.5f);
Index: code/trunk/src/modules/overlays/hud/GametypeFadingMessage.h
===================================================================
--- code/trunk/src/modules/overlays/hud/GametypeFadingMessage.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/GametypeFadingMessage.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~GametypeFadingMessage();
 
-            virtual void changedOwner();
+            virtual void changedOwner() override;
 
-            void fadingmessage(const GametypeInfo* gtinfo, const std::string& message);
+            virtual void fadingmessage(const GametypeInfo* gtinfo, const std::string& message) override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/GametypeStaticMessage.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/GametypeStaticMessage.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/GametypeStaticMessage.cc	(revision 11071)
@@ -42,5 +42,5 @@
     {
         RegisterObject(GametypeStaticMessage);
-        this->owner_ = 0;
+        this->owner_ = nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/GametypeStaticMessage.h
===================================================================
--- code/trunk/src/modules/overlays/hud/GametypeStaticMessage.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/GametypeStaticMessage.h	(revision 11071)
@@ -46,7 +46,7 @@
             virtual ~GametypeStaticMessage();
 
-            virtual void changedOwner();
+            virtual void changedOwner() override;
 
-            void staticmessage(const GametypeInfo* gtinfo, const std::string& message, const ColourValue& colour);
+            virtual void staticmessage(const GametypeInfo* gtinfo, const std::string& message, const ColourValue& colour) override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/HUDBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDBar.cc	(revision 11071)
@@ -219,5 +219,5 @@
             return barColours_[index];
         else
-            return 0;
+            return nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDBar.h	(revision 11071)
@@ -52,5 +52,5 @@
         virtual ~BarColour() { }
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);     
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         void setColour(const ColourValue& colour) { this->colour_ = colour; }
@@ -72,5 +72,5 @@
         virtual ~HUDBar();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         void clearColours();
Index: code/trunk/src/modules/overlays/hud/HUDBoostBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDBoostBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDBoostBar.cc	(revision 11071)
@@ -42,5 +42,5 @@
         RegisterObject(HUDBoostBar);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
         this->flashInterval_ = 0.25f;
         this->flashDt_ = 0.0f;
Index: code/trunk/src/modules/overlays/hud/HUDBoostBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDBoostBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDBoostBar.h	(revision 11071)
@@ -43,6 +43,6 @@
         virtual ~HUDBoostBar();
 
-        virtual void tick(float dt);
-        virtual void changedOwner();
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
 
     private:
Index: code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.cc	(revision 11071)
@@ -30,4 +30,5 @@
 
 #include "core/config/ConfigValueIncludes.h"
+#include "core/CoreIncludes.h"
 #include "worldentities/pawns/Pawn.h"
 
@@ -41,5 +42,5 @@
 
         this->setConfigValues();
-        this->owner_ = 0;
+        this->owner_ = nullptr;
     }
 
@@ -62,5 +63,5 @@
     void HUDEnemyHealthBar::updateTarget()
     {
-        Pawn* pawn = NULL;
+        Pawn* pawn = nullptr;
         if (this->owner_ && this->useEnemyBar_)
         {
@@ -73,9 +74,9 @@
             // Don't show the HealthBar if the pawn is invisible
             if (pawn && !pawn->isVisible())
-                pawn = NULL;
+                pawn = nullptr;
         }
         // Set the pawn as owner of the HealthBar
         this->setHealthBarOwner(pawn);
-        this->setVisible(pawn != NULL);
+        this->setVisible(pawn != nullptr);
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDEnemyHealthBar.h	(revision 11071)
@@ -41,7 +41,7 @@
 
             void setConfigValues();
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            void changedOwner();
+            virtual void changedOwner() override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/HUDEnemyShieldBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDEnemyShieldBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDEnemyShieldBar.cc	(revision 11071)
@@ -41,5 +41,5 @@
 
         this->setConfigValues();
-        this->owner_ = NULL;
+        this->owner_ = nullptr;
     }
 
@@ -62,5 +62,5 @@
     void HUDEnemyShieldBar::updateTarget()
     {
-        Pawn* pawn = NULL;
+        Pawn* pawn = nullptr;
         if (this->owner_ && this->useEnemyBar_)
         {
@@ -73,9 +73,9 @@
             // Don't show the EnemyShieldBar if the pawn is invisible
             if (pawn && !pawn->isVisible())
-                pawn = NULL;
+                pawn = nullptr;
         }
         // Set the pawn as owner of the EnemyShieldBar
         this->setShieldBarOwner(pawn);
-        this->setVisible(pawn != NULL);
+        this->setVisible(pawn != nullptr);
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDEnemyShieldBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDEnemyShieldBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDEnemyShieldBar.h	(revision 11071)
@@ -45,7 +45,7 @@
 
             void setConfigValues();
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            void changedOwner();
+            virtual void changedOwner() override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/HUDHealthBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDHealthBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDHealthBar.cc	(revision 11071)
@@ -43,5 +43,5 @@
         RegisterObject(HUDHealthBar);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
         this->bUseBarColour_ = false;
         this->textOffset_ = Vector2(0.0f, 0.0f);
@@ -66,5 +66,5 @@
         {
             this->textoverlay_->destroy();
-            this->textoverlay_ = NULL;
+            this->textoverlay_ = nullptr;
         }
     }
Index: code/trunk/src/modules/overlays/hud/HUDHealthBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDHealthBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDHealthBar.h	(revision 11071)
@@ -45,10 +45,10 @@
             virtual ~HUDHealthBar();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
-            virtual void changedOwner();
-            virtual void changedOverlayGroup();
-            virtual void changedVisibility();
-            virtual void changedName();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
+            virtual void changedOwner() override;
+            virtual void changedOverlayGroup() override;
+            virtual void changedVisibility() override;
+            virtual void changedName() override;
 
             inline void setTextFont(const std::string& font)
@@ -112,8 +112,8 @@
                 { this->owner_ = owner; }
         protected:
-            virtual void positionChanged();
-            virtual void sizeChanged();
+            virtual void positionChanged() override;
+            virtual void sizeChanged() override;
         private:
-            virtual void positionText();
+            void positionText();
             WeakPtr<Pawn> owner_;
             StrongPtr<OverlayText> textoverlay_;
Index: code/trunk/src/modules/overlays/hud/HUDNavigation.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDNavigation.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDNavigation.cc	(revision 11071)
@@ -53,5 +53,4 @@
 #include "core/config/ConfigValueIncludes.h"
 #include "tools/TextureGenerator.h"
-// #include <boost/bind/bind_template.hpp>
 
 
@@ -69,5 +68,5 @@
     RegisterClass ( HUDNavigation );
 
-    HUDNavigation* HUDNavigation::localHUD_s = 0;
+    HUDNavigation* HUDNavigation::localHUD_s = nullptr;
 
     HUDNavigation::HUDNavigation(Context* context) :
@@ -132,8 +131,8 @@
         }
         this->fontName_ = font;
-        for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it != this->activeObjectList_.end(); ++it)
-        {
-            if (it->second.text_ != NULL)
-                it->second.text_->setFontName(this->fontName_);
+        for (const auto& mapEntry : this->activeObjectList_)
+        {
+            if (mapEntry.second.text_ != nullptr)
+                mapEntry.second.text_->setFontName(this->fontName_);
         }
     }
@@ -152,8 +151,8 @@
         }
         this->textSize_ = size;
-        for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it!=this->activeObjectList_.end(); ++it)
-        {
-            if (it->second.text_)
-                it->second.text_->setCharHeight(size);
+        for (const auto& mapEntry : this->activeObjectList_)
+        {
+            if (mapEntry.second.text_)
+                mapEntry.second.text_->setCharHeight(size);
         }
     }
@@ -183,10 +182,10 @@
 
         Camera* cam = CameraManager::getInstance().getActiveCamera();
-        if (cam == NULL)
+        if (cam == nullptr)
         return;
         const Matrix4& camTransform = cam->getOgreCamera()->getProjectionMatrix() * cam->getOgreCamera()->getViewMatrix();
 
-        for (std::list<std::pair<RadarViewable*, unsigned int> >::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++listIt)
-        listIt->second = (int)((listIt->first->getRVWorldPosition() - HumanController::getLocalControllerSingleton()->getControllableEntity()->getWorldPosition()).length() + 0.5f);
+        for (std::pair<RadarViewable*, unsigned int>& pair : this->sortedObjectList_)
+        pair.second = (int)((pair.first->getRVWorldPosition() - HumanController::getLocalControllerSingleton()->getControllableEntity()->getWorldPosition()).length() + 0.5f);
 
         this->sortedObjectList_.sort(compareDistance);
@@ -209,5 +208,5 @@
         bool nextHasToBeSelected = false;
 
-        for (std::list<std::pair<RadarViewable*, unsigned int> >::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++markerCount, ++listIt)
+        for (std::list<std::pair<RadarViewable*, unsigned int>>::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++markerCount, ++listIt)
         {
 
@@ -469,7 +468,7 @@
                     if(!it->second.selected_
                             || it->first->getRVVelocity().squaredLength() == 0
-                            || pawn == NULL
+                            || pawn == nullptr
                             /* TODO : improve getTeam in such a way that it works
-                             * || humanPawn == NULL
+                             * || humanPawn == nullptr
                              * || pawn->getTeam() == humanPawn->getTeam()*/)
                     {
@@ -525,16 +524,16 @@
         float yScale = this->getActualSize().y;
 
-        for (std::map<RadarViewable*, ObjectInfo>::iterator it = this->activeObjectList_.begin(); it != this->activeObjectList_.end(); ++it)
-        {
-            if (it->second.health_ != NULL)
-                it->second.health_->setDimensions(this->healthMarkerSize_ * xScale, this->healthMarkerSize_ * yScale);
-            if (it->second.healthLevel_ != NULL)
-                it->second.healthLevel_->setDimensions(this->healthLevelMarkerSize_ * xScale, this->healthLevelMarkerSize_ * yScale);
-            if (it->second.panel_ != NULL)
-                it->second.panel_->setDimensions(this->navMarkerSize_ * xScale, this->navMarkerSize_ * yScale);
-            if (it->second.text_ != NULL)
-                it->second.text_->setCharHeight(this->textSize_ * yScale);
-            if (it->second.target_ != NULL)
-                it->second.target_->setDimensions(this->aimMarkerSize_ * xScale, this->aimMarkerSize_ * yScale);
+        for (const auto& mapEntry : this->activeObjectList_)
+        {
+            if (mapEntry.second.health_ != nullptr)
+                mapEntry.second.health_->setDimensions(this->healthMarkerSize_ * xScale, this->healthMarkerSize_ * yScale);
+            if (mapEntry.second.healthLevel_ != nullptr)
+                mapEntry.second.healthLevel_->setDimensions(this->healthLevelMarkerSize_ * xScale, this->healthLevelMarkerSize_ * yScale);
+            if (mapEntry.second.panel_ != nullptr)
+                mapEntry.second.panel_->setDimensions(this->navMarkerSize_ * xScale, this->navMarkerSize_ * yScale);
+            if (mapEntry.second.text_ != nullptr)
+                mapEntry.second.text_->setCharHeight(this->textSize_ * yScale);
+            if (mapEntry.second.target_ != nullptr)
+                mapEntry.second.target_->setDimensions(this->aimMarkerSize_ * xScale, this->aimMarkerSize_ * yScale);
         }
     }
@@ -546,5 +545,5 @@
 
         if (this->activeObjectList_.size() >= this->markerLimit_)
-        if (object == NULL)
+        if (object == nullptr)
         return;
 
@@ -634,5 +633,5 @@
         }
 
-        for (std::list<std::pair<RadarViewable*, unsigned int> >::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++listIt)
+        for (std::list<std::pair<RadarViewable*, unsigned int>>::iterator listIt = this->sortedObjectList_.begin(); listIt != this->sortedObjectList_.end(); ++listIt)
         {
             if ((listIt->first) == viewable)
@@ -664,8 +663,8 @@
     {
         const std::set<RadarViewable*>& respawnObjects = this->getOwner()->getScene()->getRadar()->getRadarObjects();
-        for (std::set<RadarViewable*>::const_iterator it = respawnObjects.begin(); it != respawnObjects.end(); ++it)
-        {
-            if (!(*it)->isHumanShip_)
-            this->addObject(*it);
+        for (RadarViewable* respawnObject : respawnObjects)
+        {
+            if (!respawnObject->isHumanShip_)
+            this->addObject(respawnObject);
         }
     }
Index: code/trunk/src/modules/overlays/hud/HUDNavigation.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDNavigation.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDNavigation.h	(revision 11071)
@@ -51,19 +51,19 @@
             void setConfigValues();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
             // RadarListener interface
-            virtual void addObject(RadarViewable* object);
-            virtual void removeObject(RadarViewable* viewable);
-            virtual void objectChanged(RadarViewable* viewable);
+            virtual void addObject(RadarViewable* object) override;
+            virtual void removeObject(RadarViewable* viewable) override;
+            virtual void objectChanged(RadarViewable* viewable) override;
 
-            virtual void changedOwner();
-            virtual void sizeChanged();
-            virtual void angleChanged() { }
-            virtual void positionChanged() { }
-            virtual void radarTick(float dt) {}
+            virtual void changedOwner() override;
+            virtual void sizeChanged() override;
+            virtual void angleChanged() override { }
+            virtual void positionChanged() override { }
+            virtual void radarTick(float dt) override {}
 
-            inline float getRadarSensitivity() const
+            virtual inline float getRadarSensitivity() const override
                 { return 1.0f; }
 
@@ -141,5 +141,5 @@
 
             std::map<RadarViewable*, ObjectInfo> activeObjectList_;
-            std::list<std::pair<RadarViewable*, unsigned int> > sortedObjectList_;
+            std::list<std::pair<RadarViewable*, unsigned int>> sortedObjectList_;
 
             float healthMarkerSize_;
Index: code/trunk/src/modules/overlays/hud/HUDRadar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDRadar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDRadar.cc	(revision 11071)
@@ -65,8 +65,8 @@
         this->setMaximumDotSize3D(0.07f);
 
-        this->shapeMaterials_[RadarViewable::Dot]      = "RadarDot.png";
-        this->shapeMaterials_[RadarViewable::Triangle] = "RadarTriangle.png";
-        this->shapeMaterials_[RadarViewable::Square]   = "RadarSquare.png";
-        this->owner_ = 0;
+        this->shapeMaterials_[RadarViewable::Shape::Dot]      = "RadarDot.png";
+        this->shapeMaterials_[RadarViewable::Shape::Triangle] = "RadarTriangle.png";
+        this->shapeMaterials_[RadarViewable::Shape::Square]   = "RadarSquare.png";
+        this->owner_ = nullptr;
 
         this->map3DFront_ = static_cast<Ogre::PanelOverlayElement*>(Ogre::OverlayManager::getSingleton()
@@ -92,8 +92,7 @@
             Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->map3DBack_);
 
-            for (std::map<RadarViewable*,Ogre::PanelOverlayElement*>::iterator it = this->radarObjects_.begin();
-                it != this->radarObjects_.end(); ++it)
-            {
-                Ogre::OverlayManager::getSingleton().destroyOverlayElement(it->second);
+            for (const auto& mapEntry : this->radarObjects_)
+            {
+                Ogre::OverlayManager::getSingleton().destroyOverlayElement(mapEntry.second);
             }
         }
@@ -166,7 +165,6 @@
     {
         const std::set<RadarViewable*>& objectSet = this->getCreator()->getScene()->getRadar()->getRadarObjects();
-        std::set<RadarViewable*>::const_iterator it;
-        for( it=objectSet.begin(); it!=objectSet.end(); ++it )
-            this->addObject(*it);
+        for( RadarViewable* viewable : objectSet )
+            this->addObject(viewable);
         this->radarTick(0);
     }
@@ -184,6 +182,4 @@
 
         // update the distances for all objects
-        std::map<RadarViewable*,Ogre::PanelOverlayElement*>::iterator it;
-
 
         if(RadarMode_)
@@ -202,8 +198,8 @@
         }
 
-        for( it = this->radarObjects_.begin(); it != this->radarObjects_.end(); ++it )
+        for( const auto& mapEntry : this->radarObjects_ )
         {
             // Make sure the object really is a WorldEntity
-            const WorldEntity* wePointer = it->first->getWorldEntity();
+            const WorldEntity* wePointer = mapEntry.first->getWorldEntity();
             if( !wePointer )
             {
@@ -211,5 +207,5 @@
                 assert(0);
             }
-            bool isFocus = (it->first == focusObject);
+            bool isFocus = (mapEntry.first == focusObject);
             // set size to fit distance...
             float distance = (wePointer->getWorldPosition() - this->owner_->getPosition()).length();
@@ -218,8 +214,8 @@
             float size;
             if(RadarMode_)
-                size = maximumDotSize3D_ * halfDotSizeDistance_ / (halfDotSizeDistance_ + distance) * it->first->getRadarObjectScale();
+                size = maximumDotSize3D_ * halfDotSizeDistance_ / (halfDotSizeDistance_ + distance) * mapEntry.first->getRadarObjectScale();
             else
-                size = maximumDotSize_ * halfDotSizeDistance_ / (halfDotSizeDistance_ + distance) * it->first->getRadarObjectScale();
-            it->second->setDimensions(size, size);
+                size = maximumDotSize_ * halfDotSizeDistance_ / (halfDotSizeDistance_ + distance) * mapEntry.first->getRadarObjectScale();
+            mapEntry.second->setDimensions(size, size);
 
             // calc position on radar...
@@ -235,7 +231,7 @@
                 int zOrder = determineMap3DZOrder(this->owner_->getPosition(), this->owner_->getOrientation() * WorldEntity::FRONT, this->owner_->getOrientation() * WorldEntity::UP, wePointer->getWorldPosition(), detectionLimit_);
                 if(overXZPlain == false /*&& (it->second->getZOrder() >  100 * this->overlay_->getZOrder())*/) // it appears that zOrder of attached Overlayelements is 100 times the zOrder of the Overlay
-                    it->second->_notifyZOrder(this->overlay_->getZOrder() * 100 - 70 + zOrder);
+                    mapEntry.second->_notifyZOrder(this->overlay_->getZOrder() * 100 - 70 + zOrder);
                 if(overXZPlain == true /*&& (it->second->getZOrder() <= 100 * this->overlay_->getZOrder())*/)
-                    it->second->_notifyZOrder(this->overlay_->getZOrder() * 100 + 70 + zOrder);
+                    mapEntry.second->_notifyZOrder(this->overlay_->getZOrder() * 100 + 70 + zOrder);
             }
             else
@@ -243,10 +239,10 @@
 
             coord *= math::pi / 3.5f; // small adjustment to make it fit the texture
-            it->second->setPosition((1.0f + coord.x - size) * 0.5f, (1.0f - coord.y - size) * 0.5f);
+            mapEntry.second->setPosition((1.0f + coord.x - size) * 0.5f, (1.0f - coord.y - size) * 0.5f);
 
             if( distance < detectionLimit_ || detectionLimit_ < 0 )
-                it->second->show();
+                mapEntry.second->show();
             else
-                it->second->hide();
+                mapEntry.second->hide();
 
             // if this object is in focus, then set the focus marker
@@ -256,5 +252,5 @@
                 this->marker_->setPosition((1.0f + coord.x - size * 1.5f) * 0.5f, (1.0f - coord.y - size * 1.5f) * 0.5f);
                 if(RadarMode_)
-                    this->marker_->_notifyZOrder(it->second->getZOrder() -1);
+                    this->marker_->_notifyZOrder(mapEntry.second->getZOrder() -1);
                 this->marker_->show();
             }
Index: code/trunk/src/modules/overlays/hud/HUDRadar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDRadar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDRadar.h	(revision 11071)
@@ -50,6 +50,6 @@
         virtual ~HUDRadar();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void changedOwner();
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void changedOwner() override;
         void setConfigValues();
 
@@ -80,5 +80,5 @@
         void set3DMaterialBack(std::string material3DBack) { this->material3DBack_ = material3DBack; }
 
-        float getRadarSensitivity() const { return this->sensitivity_; }
+        virtual float getRadarSensitivity() const override { return this->sensitivity_; }
         // used also by RadarListener interface!
         void setRadarSensitivity(float sensitivity) { this->sensitivity_ = sensitivity; }
@@ -89,8 +89,8 @@
 
         // RadarListener interface
-        virtual void addObject(RadarViewable* viewable);
-        virtual void removeObject(RadarViewable* viewable);
-        virtual void objectChanged( RadarViewable* rv );
-        void radarTick(float dt);
+        virtual void addObject(RadarViewable* viewable) override;
+        virtual void removeObject(RadarViewable* viewable) override;
+        virtual void objectChanged( RadarViewable* rv ) override;
+        virtual void radarTick(float dt) override;
         bool showObject( RadarViewable* rv ); //!< Do not display an object on radar, if showObject(.) is false.
 
Index: code/trunk/src/modules/overlays/hud/HUDRocketFuelBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDRocketFuelBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDRocketFuelBar.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(HUDRocketFuelBar);
 
-        this->owner_ = NULL;
+        this->owner_ = nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDRocketFuelBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDRocketFuelBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDRocketFuelBar.h	(revision 11071)
@@ -49,6 +49,6 @@
         virtual ~HUDRocketFuelBar();
 
-        virtual void tick(float dt);
-        virtual void changedOwner();
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
 
     private:
Index: code/trunk/src/modules/overlays/hud/HUDShieldBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDShieldBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDShieldBar.cc	(revision 11071)
@@ -41,5 +41,5 @@
         RegisterObject(HUDShieldBar);
 
-        this->owner_ = NULL;
+        this->owner_ = nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDShieldBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDShieldBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDShieldBar.h	(revision 11071)
@@ -49,6 +49,6 @@
         virtual ~HUDShieldBar();
 
-        virtual void tick(float dt);
-        virtual void changedOwner();
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
 
         inline void setShieldBarOwner(Pawn* owner)
Index: code/trunk/src/modules/overlays/hud/HUDSpeedBar.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDSpeedBar.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDSpeedBar.cc	(revision 11071)
@@ -43,5 +43,5 @@
         RegisterObject(HUDSpeedBar);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDSpeedBar.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDSpeedBar.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDSpeedBar.h	(revision 11071)
@@ -44,6 +44,6 @@
         virtual ~HUDSpeedBar();
 
-        virtual void tick(float dt);
-        virtual void changedOwner();
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
 
     private:
Index: code/trunk/src/modules/overlays/hud/HUDTimer.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDTimer.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDTimer.cc	(revision 11071)
@@ -42,5 +42,5 @@
         RegisterObject(HUDTimer);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/HUDTimer.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDTimer.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDTimer.h	(revision 11071)
@@ -43,7 +43,7 @@
         virtual ~HUDTimer();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
 
-        virtual void changedOwner();
+        virtual void changedOwner() override;
 
     private:
Index: code/trunk/src/modules/overlays/hud/HUDWeapon.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDWeapon.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDWeapon.cc	(revision 11071)
@@ -44,5 +44,4 @@
         weaponModeHUDActualSize_ = Vector2(0.0f,0.0f);
 
-        weaponModes_ = NULL;
         weaponIndex_ = 0;
         hudWeaponModes_.clear();
@@ -77,5 +76,5 @@
         if (!weapon_)
         {
-            // TODO: destroy this HUD id the Weapon does no more exist. (Wehen the weak pointer is NULL)
+            // TODO: destroy this HUD id the Weapon does no more exist. (Wehen the weak pointer is null)
         }
     }    
@@ -115,8 +114,8 @@
         bool visible = this->isVisible();
 
-        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
-        {
-            (*it)->changedVisibility(); //inform all Child Overlays that our visibility has changed
-            (*it)->setVisible(visible);
+        for (HUDWeaponMode* hudWeaponMode : hudWeaponModes_)
+        {
+            hudWeaponMode->changedVisibility(); //inform all Child Overlays that our visibility has changed
+            hudWeaponMode->setVisible(visible);
         }
     }
@@ -141,5 +140,5 @@
     void HUDWeapon::updateWeaponModeList()
     {
-        if (owner_ == NULL || weapon_ == NULL)
+        if (owner_ == nullptr || weapon_ == nullptr)
         {
             return;
@@ -147,6 +146,4 @@
             
         destroyHUDChilds();
-
-        weaponModes_ = weapon_->getAllWeaponmodes();
 
         updateSize();
@@ -157,5 +154,5 @@
     void HUDWeapon::createHUDChilds()
     {
-        if (weaponModes_ == NULL)
+        if (weapon_ == nullptr)
         {
             return;
@@ -164,5 +161,5 @@
         int positionIndex = 0;
 
-        for (std::multimap<unsigned int, WeaponMode*>::iterator it = weaponModes_->begin(); it != weaponModes_->end(); ++it)
+        for (const auto& mapEntry : weapon_->getAllWeaponmodes())
         {
             HUDWeaponMode* hudWeaponMode = new HUDWeaponMode(this->getContext());
@@ -170,5 +167,5 @@
             hudWeaponMode->setOverlayGroup(this->getOverlayGroup());
             hudWeaponMode->setVisible(this->isVisible());
-            hudWeaponMode->setWeaponMode(it->second);
+            hudWeaponMode->setWeaponMode(mapEntry.second);
             hudWeaponMode->setWeaponIndex(this->weaponIndex_);                    
             hudWeaponMode->setAspectCorrection(false);
@@ -185,10 +182,10 @@
         int positionIndex = 0;
 
-        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
-        {
-            (*it)->setPositionOffset(this->positionOffset_);
-            (*it)->setWeaponModeIndex(positionIndex);
-            (*it)->setWeaponIndex(this->weaponIndex_);
-            (*it)->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
+        for (HUDWeaponMode* hudWeaponMode : hudWeaponModes_)
+        {
+            hudWeaponMode->setPositionOffset(this->positionOffset_);
+            hudWeaponMode->setWeaponModeIndex(positionIndex);
+            hudWeaponMode->setWeaponIndex(this->weaponIndex_);
+            hudWeaponMode->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
 
             ++ positionIndex;
@@ -198,7 +195,7 @@
     void HUDWeapon::destroyHUDChilds()
     {
-        for (std::vector<WeakPtr<HUDWeaponMode> >::iterator it = hudWeaponModes_.begin(); it != hudWeaponModes_.end(); ++it)
-        {
-            (*it)->destroy();
+        for (HUDWeaponMode* hudWeaponMode : hudWeaponModes_)
+        {
+            hudWeaponMode->destroy();
         } 
 
@@ -208,7 +205,7 @@
     void HUDWeapon::updateSize()
     {
-        if (weaponModes_ != NULL)
-        {
-            this->setSize(Vector2(weaponModeHUDActualSize_.x,weaponModeHUDActualSize_.y*weaponModes_->size()));
+        if (weapon_ != nullptr)
+        {
+            this->setSize(Vector2(weaponModeHUDActualSize_.x,weaponModeHUDActualSize_.y*weapon_->getAllWeaponmodes().size()));
             updatePosition();
         }        
@@ -217,5 +214,5 @@
     void HUDWeapon::updatePosition()
     {
-        if (weaponModes_ != NULL)
+        if (weapon_ != nullptr)
         {
             this->setPosition(Vector2(weaponModeHUDActualSize_.x*weaponIndex_,0.0f) + this->positionOffset_);
Index: code/trunk/src/modules/overlays/hud/HUDWeapon.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDWeapon.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDWeapon.h	(revision 11071)
@@ -55,14 +55,14 @@
         virtual ~HUDWeapon();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void tick(float dt);
-        virtual void changedOwner();
-        virtual void changedOverlayGroup();
-        virtual void changedVisibility();
-        virtual void changedName();
-        virtual void positionChanged();
-        virtual void sizeChanged();
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
+        virtual void changedOverlayGroup() override;
+        virtual void changedVisibility() override;
+        virtual void changedName() override;
+        virtual void positionChanged() override;
+        virtual void sizeChanged() override;
 
-        virtual void setWeapon(Weapon* weapon);
+        void setWeapon(Weapon* weapon);
 
         inline void setWeaponModeHUDActualSize(Vector2 vector)
@@ -84,16 +84,15 @@
 
     private:
-        virtual void createHUDChilds();
-        virtual void positionHUDChilds();
-        virtual void destroyHUDChilds();
-        virtual void updateWeaponModeList();
-        virtual void updateSize();
-        virtual void updatePosition();
+        void createHUDChilds();
+        void positionHUDChilds();
+        void destroyHUDChilds();
+        void updateWeaponModeList();
+        void updateSize();
+        void updatePosition();
 
         WeakPtr<Pawn> owner_;
         WeakPtr<Weapon> weapon_;
 
-        std::multimap<unsigned int, WeaponMode*>* weaponModes_;
-        std::vector<WeakPtr<HUDWeaponMode> > hudWeaponModes_;
+        std::vector<WeakPtr<HUDWeaponMode>> hudWeaponModes_;
 
         Ogre::PanelOverlayElement* overlayElement_;
Index: code/trunk/src/modules/overlays/hud/HUDWeaponMode.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDWeaponMode.cc	(revision 11071)
@@ -29,7 +29,7 @@
 #include "HUDWeaponMode.h"
 
+#include "util/Convert.h"
+#include "util/StringUtils.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
-#include "util/Convert.h"
 #include "core/class/Super.h"
 
@@ -76,5 +76,5 @@
         textOverlayLeft_->setPickPoint(Vector2(0.0f,0.0f));
         textOverlayLeft_->setVisible(true);
-        textOverlayLeft_->setAlignment(OverlayText::Center);
+        textOverlayLeft_->setAlignment(OverlayText::Alignment::Center);
         textOverlayLeft_->setTextSize(0.02f);
         textOverlayLeft_->setColour(ColourValue(0.21,0.70,0.21,1.0));
@@ -87,5 +87,5 @@
         textOverlayRight_->setPickPoint(Vector2(0.0f,0.0f));
         textOverlayRight_->setVisible(true);
-        textOverlayRight_->setAlignment(OverlayText::Center);
+        textOverlayRight_->setAlignment(OverlayText::Alignment::Center);
         textOverlayRight_->setTextSize(0.02f);
         textOverlayRight_->setColour(ColourValue(0.21,0.70,0.21,1.0));
@@ -107,9 +107,4 @@
     }
 
-    void HUDWeaponMode::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(HUDWeaponMode, XMLPort, xmlelement, mode);
-    }
-
     void HUDWeaponMode::tick(float dt)
     {
@@ -131,7 +126,7 @@
             Munition* munition = this->weaponMode_->getMunition();
 
-            if (munition != NULL)
-            {
-                MunitionDeployment::Value deployment = munition->getMunitionDeployment();
+            if (munition != nullptr)
+            {
+                MunitionDeployment deployment = munition->getMunitionDeployment();
 
                 if (deployment == MunitionDeployment::Share)
@@ -242,7 +237,7 @@
         Munition* munition = this->weaponMode_->getMunition();
 
-        if (munition != NULL)
-        {
-            MunitionDeployment::Value deployment = munition->getMunitionDeployment();
+        if (munition != nullptr)
+        {
+            MunitionDeployment deployment = munition->getMunitionDeployment();
 
             if (deployment == MunitionDeployment::Share)
Index: code/trunk/src/modules/overlays/hud/HUDWeaponMode.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDWeaponMode.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDWeaponMode.h	(revision 11071)
@@ -57,14 +57,13 @@
         virtual ~HUDWeaponMode();
 
-        virtual void tick(float dt);
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void changedOwner();
-        virtual void changedOverlayGroup();
-        virtual void changedVisibility();
-        virtual void changedName();
-        virtual void positionChanged();
-        virtual void sizeChanged();
+        virtual void tick(float dt) override;
+        virtual void changedOwner() override;
+        virtual void changedOverlayGroup() override;
+        virtual void changedVisibility() override;
+        virtual void changedName() override;
+        virtual void positionChanged() override;
+        virtual void sizeChanged() override;
 
-        virtual void setWeaponMode(WeaponMode* weaponMode);
+        void setWeaponMode(WeaponMode* weaponMode);
 
         inline void setWeaponModeHUDActualSize(Vector2 vector)
@@ -89,7 +88,7 @@
 
     private:
-        virtual void updateSize();
-        virtual void updatePosition();
-        virtual void positionHUDChilds();
+        void updateSize();
+        void updatePosition();
+        void positionHUDChilds();
 
         WeakPtr<Pawn> owner_;
Index: code/trunk/src/modules/overlays/hud/HUDWeaponSystem.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDWeaponSystem.cc	(revision 11071)
@@ -103,8 +103,8 @@
         bool visible = this->isVisible();
 
-        for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
+        for (HUDWeapon* hudWeapon : hudWeapons_)
         {
-            (*it)->changedVisibility(); //inform all Child Overlays that our visibility has changed
-            (*it)->setVisible(visible);
+            hudWeapon->changedVisibility(); //inform all Child Overlays that our visibility has changed
+            hudWeapon->setVisible(visible);
         }
     }
@@ -117,5 +117,5 @@
     void HUDWeaponSystem::updateWeaponList()
     {
-        if (owner_ == NULL)
+        if (owner_ == nullptr)
         {
             return;
@@ -126,18 +126,19 @@
         destroyHUDChilds();
 
-        std::vector<WeaponPack*>* weaponPacks = owner_->getAllWeaponPacks();
+        if (owner_->getWeaponSystem())
+        {
+            const std::vector<WeaponPack*>& weaponPacks = owner_->getWeaponSystem()->getAllWeaponPacks();
+            for (WeaponPack* weaponPack : weaponPacks)
+            {
+                const std::vector<Weapon*>& weapons = weaponPack->getAllWeapons();
+                for (Weapon* weapon : weapons)
+                {
+                    this->weapons_.push_back(weapon);
+                }
+            }
 
-        for (std::vector<WeaponPack*>::const_iterator itPacks = weaponPacks->begin(); itPacks != weaponPacks->end(); ++itPacks)
-        {
-            std::vector<Weapon*>* weapons = (*itPacks)->getAllWeapons();
-
-            for (std::vector<Weapon*>::const_iterator itWeapons = weapons->begin(); itWeapons != weapons->end(); ++itWeapons)
-            {
-                this->weapons_.push_back(*itWeapons);
-            }
+            createHUDChilds();
+            positionHUDChilds();
         }
-
-        createHUDChilds();
-        positionHUDChilds();
     }
 
@@ -146,5 +147,5 @@
         int positionIndex = 0;
 
-        for (std::vector<WeakPtr<Weapon> >::iterator it = weapons_.begin(); it != weapons_.end(); ++it)
+        for (Weapon* weapon : weapons_)
         {
             HUDWeapon* hudWeapon = new HUDWeapon(this->getContext());
@@ -152,5 +153,5 @@
             hudWeapon->setOverlayGroup(this->getOverlayGroup());
             hudWeapon->setVisible(this->isVisible());
-            hudWeapon->setWeapon(*it);
+            hudWeapon->setWeapon(weapon);
             hudWeapon->setAspectCorrection(false);
             hudWeapon->setPickPoint(Vector2(0.0f,0.0f));
@@ -167,9 +168,9 @@
         Vector2 offset = this->getPosition();
 
-        for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
+        for (HUDWeapon* hudWeapon : hudWeapons_)
         {
-            (*it)->setPositionOffset(offset);
-            (*it)->setWeaponIndex(positionIndex);
-            (*it)->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
+            hudWeapon->setPositionOffset(offset);
+            hudWeapon->setWeaponIndex(positionIndex);
+            hudWeapon->setWeaponModeHUDActualSize(this->weaponModeHUDActualSize_);
 
             ++ positionIndex;
@@ -179,7 +180,7 @@
     void HUDWeaponSystem::destroyHUDChilds()
     {
-        for (std::vector<WeakPtr<HUDWeapon> >::iterator it = hudWeapons_.begin(); it != hudWeapons_.end(); ++it)
+        for (HUDWeapon* hudWeapon : hudWeapons_)
         {
-            (*it)->destroy();
+            hudWeapon->destroy();
         } 
 
Index: code/trunk/src/modules/overlays/hud/HUDWeaponSystem.h
===================================================================
--- code/trunk/src/modules/overlays/hud/HUDWeaponSystem.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/HUDWeaponSystem.h	(revision 11071)
@@ -49,11 +49,11 @@
         virtual ~HUDWeaponSystem();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void changedOwner();
-        virtual void changedOverlayGroup();
-        virtual void changedVisibility();
-        virtual void changedName();
-        virtual void positionChanged();
-        virtual void sizeChanged();
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void changedOwner() override;
+        virtual void changedOverlayGroup() override;
+        virtual void changedVisibility() override;
+        virtual void changedName() override;
+        virtual void positionChanged() override;
+        virtual void sizeChanged() override;
     protected:
         inline void setWeaponModeHUDSize(Vector2 vector)
@@ -64,13 +64,13 @@
             { return weaponModeHUDSize_; }
     private:
-        virtual void updateWeaponList();
-        virtual void createHUDChilds();
-        virtual void positionHUDChilds();
-        virtual void destroyHUDChilds();
+        void updateWeaponList();
+        void createHUDChilds();
+        void positionHUDChilds();
+        void destroyHUDChilds();
 
         WeakPtr<Pawn> owner_;
 
-        std::vector<WeakPtr<Weapon> > weapons_;
-        std::vector<WeakPtr<HUDWeapon> > hudWeapons_;
+        std::vector<WeakPtr<Weapon>> weapons_;
+        std::vector<WeakPtr<HUDWeapon>> hudWeapons_;
 
         Vector2 weaponModeHUDSize_;
Index: code/trunk/src/modules/overlays/hud/KillMessage.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/KillMessage.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/KillMessage.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(KillMessage);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
 
         this->setDelay(2.0f);
Index: code/trunk/src/modules/overlays/hud/KillMessage.h
===================================================================
--- code/trunk/src/modules/overlays/hud/KillMessage.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/KillMessage.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~KillMessage() {}
 
-            virtual void changedOwner();
+            virtual void changedOwner() override;
 
-            void killmessage(const GametypeInfo* gtinfo, const std::string& message);
+            virtual void killmessage(const GametypeInfo* gtinfo, const std::string& message) override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/LastManStandingInfos.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/LastManStandingInfos.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/LastManStandingInfos.cc	(revision 11071)
@@ -43,6 +43,6 @@
         RegisterObject(LastManStandingInfos);
 
-        this->lms_ = 0;
-        this->player_ = 0;
+        this->lms_ = nullptr;
+        this->player_ = nullptr;
         this->bShowLives_ = false;
         this->bShowPlayers_ = false;
@@ -91,6 +91,6 @@
         else
         {
-            this->player_ = 0;
-            this->lms_ = 0;
+            this->player_ = nullptr;
+            this->lms_ = nullptr;
         }
     }
Index: code/trunk/src/modules/overlays/hud/LastManStandingInfos.h
===================================================================
--- code/trunk/src/modules/overlays/hud/LastManStandingInfos.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/LastManStandingInfos.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~LastManStandingInfos();
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
 
             inline void setShowLives(bool value)
Index: code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.cc	(revision 11071)
@@ -43,6 +43,6 @@
         RegisterObject(LastTeamStandingInfos);
 
-        this->lts_ = 0;
-        this->player_ = 0;
+        this->lts_ = nullptr;
+        this->player_ = nullptr;
         this->bShowLives_ = false;
         this->bShowTeams_ = false;
@@ -91,6 +91,6 @@
         else
         {
-            this->player_ = 0;
-            this->lts_ = 0;
+            this->player_ = nullptr;
+            this->lts_ = nullptr;
         }
     }
Index: code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.h
===================================================================
--- code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/LastTeamStandingInfos.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~LastTeamStandingInfos();
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
 
             inline void setShowLives(bool value)
Index: code/trunk/src/modules/overlays/hud/PauseNotice.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/PauseNotice.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/PauseNotice.cc	(revision 11071)
@@ -40,5 +40,5 @@
         RegisterObject(PauseNotice);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
     }
 
Index: code/trunk/src/modules/overlays/hud/PauseNotice.h
===================================================================
--- code/trunk/src/modules/overlays/hud/PauseNotice.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/PauseNotice.h	(revision 11071)
@@ -42,8 +42,8 @@
             PauseNotice(Context* context);
 
-            virtual void changedOwner();
+            virtual void changedOwner() override;
 
         protected:
-            virtual void changedTimeFactor(float factor_new, float factor_old);
+            virtual void changedTimeFactor(float factor_new, float factor_old) override;
 
         private:
Index: code/trunk/src/modules/overlays/hud/TeamBaseMatchScore.cc
===================================================================
--- code/trunk/src/modules/overlays/hud/TeamBaseMatchScore.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/TeamBaseMatchScore.cc	(revision 11071)
@@ -43,5 +43,5 @@
         RegisterObject(TeamBaseMatchScore);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
 
         this->bShowBases_ = false;
@@ -120,5 +120,5 @@
             this->owner_ = orxonox_cast<TeamBaseMatch*>(this->getOwner()->getGametype());
         else
-            this->owner_ = 0;
+            this->owner_ = nullptr;
     }
 }
Index: code/trunk/src/modules/overlays/hud/TeamBaseMatchScore.h
===================================================================
--- code/trunk/src/modules/overlays/hud/TeamBaseMatchScore.h	(revision 11056)
+++ code/trunk/src/modules/overlays/hud/TeamBaseMatchScore.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~TeamBaseMatchScore();
 
-            virtual void tick(float dt);
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner();
+            virtual void tick(float dt) override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override;
 
             inline void setShowBases(bool value)
Index: code/trunk/src/modules/overlays/stats/CreateLines.cc
===================================================================
--- code/trunk/src/modules/overlays/stats/CreateLines.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/stats/CreateLines.cc	(revision 11071)
@@ -37,20 +37,20 @@
     CreateLines::CreateLines(float leftOffset, float topOffset, float width, float height)
     {
-        playerNameText_ = new OverlayText(0);
+        playerNameText_ = new OverlayText(nullptr);
         playerNameText_->setTextSize(0.04f);
         playerNameText_->setColour(ColourValue(0.0f, 0.75f, 0.2f, 1.0f));
         playerNameText_->setPosition(Vector2(0.1f, topOffset + 0.01f));
 
-        scoreText_ = new OverlayText(0);
+        scoreText_ = new OverlayText(nullptr);
         scoreText_->setTextSize(0.04f);
         scoreText_->setColour(ColourValue(0.0f, 0.75f, 0.2f, 1.0f));
         scoreText_->setPosition(Vector2(0.6f, topOffset + 0.01f));
 
-        deathsText_ = new OverlayText(0);
+        deathsText_ = new OverlayText(nullptr);
         deathsText_->setTextSize(0.04f);
         deathsText_->setColour(ColourValue(0, 0.75f, 0.2f, 1.0f));
         deathsText_->setPosition(Vector2(0.8f, topOffset + 0.01f));
 
-        background_ = new Stats(0);
+        background_ = new Stats(nullptr);
         background_->setPosition(Vector2(leftOffset, topOffset));
         background_->setSize(Vector2(width, height));
Index: code/trunk/src/modules/overlays/stats/CreateLines.h
===================================================================
--- code/trunk/src/modules/overlays/stats/CreateLines.h	(revision 11056)
+++ code/trunk/src/modules/overlays/stats/CreateLines.h	(revision 11071)
@@ -29,4 +29,6 @@
 
 #include "overlays/OverlaysPrereqs.h"
+
+#include <string>
 
 namespace orxonox
Index: code/trunk/src/modules/overlays/stats/Scoreboard.cc
===================================================================
--- code/trunk/src/modules/overlays/stats/Scoreboard.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/stats/Scoreboard.cc	(revision 11071)
@@ -60,6 +60,6 @@
         SUPER(Scoreboard, changedVisibility);
 
-        for (unsigned int i = 0; i < this->lines_.size(); ++i)
-            this->lines_[i]->changedVisibility();
+        for (CreateLines* line : this->lines_)
+            line->changedVisibility();
     }
 
@@ -94,9 +94,9 @@
 
         unsigned int index = 0;
-        for (std::map<PlayerInfo*, Player>::const_iterator it = playerList.begin(); it != playerList.end(); ++it)
+        for (const auto& mapEntry : playerList)
         {
-            this->lines_[index]->setPlayerName(multi_cast<std::string>(it->first->getName()));
-            this->lines_[index]->setScore(multi_cast<std::string>(it->second.frags_));
-            this->lines_[index]->setDeaths(multi_cast<std::string>(it->second.killed_));
+            this->lines_[index]->setPlayerName(multi_cast<std::string>(mapEntry.first->getName()));
+            this->lines_[index]->setScore(multi_cast<std::string>(mapEntry.second.frags_));
+            this->lines_[index]->setDeaths(multi_cast<std::string>(mapEntry.second.killed_));
             index++;
         }
Index: code/trunk/src/modules/overlays/stats/Scoreboard.h
===================================================================
--- code/trunk/src/modules/overlays/stats/Scoreboard.h	(revision 11056)
+++ code/trunk/src/modules/overlays/stats/Scoreboard.h	(revision 11071)
@@ -44,5 +44,5 @@
         virtual ~Scoreboard();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
 
         inline void setCreateLines(CreateLines* cl)
@@ -51,5 +51,5 @@
             { return this->createlines_; }
 
-        virtual void changedVisibility();
+        virtual void changedVisibility() override;
 
     private: // functions
Index: code/trunk/src/modules/overlays/stats/Stats.cc
===================================================================
--- code/trunk/src/modules/overlays/stats/Stats.cc	(revision 11056)
+++ code/trunk/src/modules/overlays/stats/Stats.cc	(revision 11071)
@@ -46,6 +46,6 @@
     Stats::Stats(Context* context)
         : OrxonoxOverlay(context)
-        , statsOverlayNoise_(0)
-        , statsOverlayBorder_(0)
+        , statsOverlayNoise_(nullptr)
+        , statsOverlayBorder_(nullptr)
     {
         RegisterObject(Stats);
Index: code/trunk/src/modules/overlays/stats/Stats.h
===================================================================
--- code/trunk/src/modules/overlays/stats/Stats.h	(revision 11056)
+++ code/trunk/src/modules/overlays/stats/Stats.h	(revision 11071)
@@ -46,5 +46,5 @@
         void setConfigValues();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
 
     private: // variables
Index: code/trunk/src/modules/pickup/CollectiblePickup.cc
===================================================================
--- code/trunk/src/modules/pickup/CollectiblePickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/CollectiblePickup.cc	(revision 11071)
@@ -47,5 +47,5 @@
         Registers the object and initializes variables.
     */
-    CollectiblePickup::CollectiblePickup() : collection_(NULL)
+    CollectiblePickup::CollectiblePickup() : collection_(nullptr)
     {
         RegisterObject(CollectiblePickup);
@@ -103,5 +103,5 @@
     void CollectiblePickup::wasRemovedFromCollection(void)
     {
-        this->collection_ = NULL;
+        this->collection_ = nullptr;
     }
 }
Index: code/trunk/src/modules/pickup/CollectiblePickup.h
===================================================================
--- code/trunk/src/modules/pickup/CollectiblePickup.h	(revision 11056)
+++ code/trunk/src/modules/pickup/CollectiblePickup.h	(revision 11071)
@@ -61,6 +61,6 @@
             virtual ~CollectiblePickup(); //! Destructor.
 
-            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
-            virtual void changedPickedUp(void); //!< Is called when the pickup has transited from picked up to dropped or the other way around.
+            virtual void changedUsed(void) override; //!< Is called when the pickup has transited from used to unused or the other way around.
+            virtual void changedPickedUp(void) override; //!< Is called when the pickup has transited from picked up to dropped or the other way around.
 
             /**
@@ -69,5 +69,5 @@
             */
             bool isInCollection(void) const
-                { return this->collection_ != NULL; }
+                { return this->collection_ != nullptr; }
 
         private:
Index: code/trunk/src/modules/pickup/Pickup.cc
===================================================================
--- code/trunk/src/modules/pickup/Pickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/Pickup.cc	(revision 11071)
@@ -78,6 +78,6 @@
     void Pickup::initialize(void)
     {
-        this->activationType_ = pickupActivationType::immediate;
-        this->durationType_ = pickupDurationType::once;
+        this->activationType_ = PickupActivationType::immediate;
+        this->durationType_ = PickupDurationType::once;
     }
 
@@ -105,7 +105,7 @@
         switch(this->getActivationType())
         {
-            case pickupActivationType::immediate:
+            case PickupActivationType::immediate:
                 return activationTypeImmediate_s;
-            case pickupActivationType::onUse:
+            case PickupActivationType::onUse:
                 return activationTypeOnUse_s;
             default:
@@ -124,7 +124,7 @@
         switch(this->getDurationType())
         {
-            case pickupDurationType::once:
+            case PickupDurationType::once:
                 return durationTypeOnce_s;
-            case pickupDurationType::continuous:
+            case PickupDurationType::continuous:
                 return durationTypeContinuous_s;
             default:
@@ -142,7 +142,7 @@
     {
         if(type == Pickup::activationTypeImmediate_s)
-            this->setActivationType(pickupActivationType::immediate);
+            this->setActivationType(PickupActivationType::immediate);
         else if(type == Pickup::activationTypeOnUse_s)
-            this->setActivationType(pickupActivationType::onUse);
+            this->setActivationType(PickupActivationType::onUse);
         else
             orxout(internal_error, context::pickups) << "Invalid activationType '" << type << "' in " << this->getIdentifier()->getName() << "." << endl;
@@ -158,7 +158,7 @@
     {
         if(type == Pickup::durationTypeOnce_s)
-            this->setDurationType(pickupDurationType::once);
+            this->setDurationType(PickupDurationType::once);
         else if(type == Pickup::durationTypeContinuous_s)
-            this->setDurationType(pickupDurationType::continuous);
+            this->setDurationType(PickupDurationType::continuous);
         else
             orxout(internal_error, context::pickups) << "Invalid durationType '" << type << "' in " << this->getIdentifier()->getName() << "." << endl;
Index: code/trunk/src/modules/pickup/Pickup.h
===================================================================
--- code/trunk/src/modules/pickup/Pickup.h	(revision 11056)
+++ code/trunk/src/modules/pickup/Pickup.h	(revision 11071)
@@ -53,12 +53,9 @@
     @ingroup Pickup
     */
-    namespace pickupActivationType
+    enum class PickupActivationType
     {
-        enum Value
-        {
-            immediate, //!< Means that the @ref orxonox::Pickup "Pickup" will be used immediately after pickup.
-            onUse, //!< Means that the @ref orxonox::Pickup "Pickup" will be used at a later point trough some external influence.
-        };
-    }
+        immediate, //!< Means that the @ref orxonox::Pickup "Pickup" will be used immediately after pickup.
+        onUse, //!< Means that the @ref orxonox::Pickup "Pickup" will be used at a later point trough some external influence.
+    };
 
     /**
@@ -68,12 +65,9 @@
     @ingroup Pickup
     */
-    namespace pickupDurationType
+    enum class PickupDurationType
     {
-        enum Value
-        {
-            once, //!< Means that the @ref orxonox::Pickup "Pickup" will be used only once at a singular time instant.
-            continuous, //!< Means that the @ref orxonox::Pickup "Pickup" will be used over a continuous timespan.
-        };
-    }
+        once, //!< Means that the @ref orxonox::Pickup "Pickup" will be used only once at a singular time instant.
+        continuous, //!< Means that the @ref orxonox::Pickup "Pickup" will be used over a continuous timespan.
+    };
 
     /**
@@ -103,7 +97,7 @@
             virtual ~Pickup(); //!< Destructor.
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual const std::string& getRepresentationName() const
+            virtual const std::string& getRepresentationName() const override
                 { return this->representationName_; }
 
@@ -112,5 +106,5 @@
             @return Returns the activation type of the Pickup.
             */
-            inline pickupActivationType::Value getActivationType(void) const
+            inline PickupActivationType getActivationType(void) const
                 { return this->activationType_; }
             /**
@@ -118,5 +112,5 @@
             @return Returns the duration type of the Pickup.
             */
-            inline pickupDurationType::Value getDurationType(void) const
+            inline PickupDurationType getDurationType(void) const
                 { return this->durationType_; }
 
@@ -129,5 +123,5 @@
             */
             inline bool isImmediate(void) const
-                { return this->getActivationType() == pickupActivationType::immediate; }
+                { return this->getActivationType() == PickupActivationType::immediate; }
             /**
             @brief Get whether the activation type is 'onUse'.
@@ -135,5 +129,5 @@
             */
             inline bool isOnUse(void) const
-                { return this->getActivationType() == pickupActivationType::onUse; }
+                { return this->getActivationType() == PickupActivationType::onUse; }
             /**
             @brief Get whether the duration type is 'once'.
@@ -141,5 +135,5 @@
             */
             inline bool isOnce(void) const
-                { return this->getDurationType() == pickupDurationType::once; }
+                { return this->getDurationType() == PickupDurationType::once; }
             /**
             @brief Get whether the duration type is 'continuous'.
@@ -147,10 +141,10 @@
             */
             inline bool isContinuous(void) const
-                { return this->getDurationType() == pickupDurationType::continuous; }
+                { return this->getDurationType() == PickupDurationType::continuous; }
 
-            virtual void changedPickedUp(void); //!< Should be called when the pickup has transited from picked up to dropped or the other way around.
+            virtual void changedPickedUp(void) override; //!< Should be called when the pickup has transited from picked up to dropped or the other way around.
 
         protected:
-            virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
+            virtual bool createSpawner(void) override; //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
 
             /**
@@ -164,5 +158,5 @@
             @param type The activation type of the Pickup.
             */
-            inline void setActivationType(pickupActivationType::Value type)
+            inline void setActivationType(PickupActivationType type)
                 { this->activationType_ = type; }
             /**
@@ -170,5 +164,5 @@
             @param type The duration type of the Pickup.
             */
-            inline void setDurationType(pickupDurationType::Value type)
+            inline void setDurationType(PickupDurationType type)
                 { this->durationType_ = type; }
 
@@ -180,6 +174,6 @@
 
             std::string representationName_; //!< The name of the associated PickupRepresentation.
-            pickupActivationType::Value activationType_; //!< The activation type of the Pickup.
-            pickupDurationType::Value durationType_; //!< The duration type of the Pickup.
+            PickupActivationType activationType_; //!< The activation type of the Pickup.
+            PickupDurationType durationType_; //!< The duration type of the Pickup.
 
             //! Strings for the activation and duration types.
Index: code/trunk/src/modules/pickup/PickupCollection.cc
===================================================================
--- code/trunk/src/modules/pickup/PickupCollection.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupCollection.cc	(revision 11071)
@@ -68,8 +68,8 @@
     {
         // Destroy all Pickupables constructing this PickupCollection.
-        for(std::list<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); ++it)
-        {
-            (*it)->wasRemovedFromCollection();
-            (*it)->destroy();
+        for(CollectiblePickup* pickup : this->pickups_)
+        {
+            pickup->wasRemovedFromCollection();
+            pickup->destroy();
         }
         this->pickups_.clear();
@@ -99,6 +99,6 @@
         this->processingUsed_ = true;
         // Change used for all Pickupables this PickupCollection consists of.
-        for(std::list<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); ++it)
-            (*it)->setUsed(this->isUsed());
+        for(CollectiblePickup* pickup : this->pickups_)
+            pickup->setUsed(this->isUsed());
 
         this->processingUsed_ = false;
@@ -119,9 +119,9 @@
         size_t numPickupsEnabled = 0;
         size_t numPickupsInUse = 0;
-        for(std::list<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); ++it)
-        {
-            if ((*it)->isEnabled())
+        for(CollectiblePickup* pickup : this->pickups_)
+        {
+            if (pickup->isEnabled())
                 ++numPickupsEnabled;
-            if ((*it)->isUsed())
+            if (pickup->isUsed())
                 ++numPickupsInUse;
         }
@@ -146,10 +146,10 @@
 
         // Change the PickupCarrier for all Pickupables this PickupCollection consists of.
-        for(std::list<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); ++it)
-        {
-            if(this->getCarrier() == NULL)
-                (*it)->setCarrier(NULL);
+        for(CollectiblePickup* pickup : this->pickups_)
+        {
+            if(this->getCarrier() == nullptr)
+                pickup->setCarrier(nullptr);
             else
-                (*it)->setCarrier(this->getCarrier()->getTarget(*it));
+                pickup->setCarrier(this->getCarrier()->getTarget(pickup));
         }
     }
@@ -186,7 +186,7 @@
         // If at least all the enabled pickups of this PickupCollection are no longer picked up.
         bool isOnePickupEnabledAndPickedUp = false;
-        for(std::list<CollectiblePickup*>::iterator it = this->pickups_.begin(); it != this->pickups_.end(); ++it)
-        {
-            if ((*it)->isEnabled() && (*it)->isPickedUp())
+        for(CollectiblePickup* pickup : this->pickups_)
+        {
+            if (pickup->isEnabled() && pickup->isPickedUp())
             {
                 isOnePickupEnabledAndPickedUp = true;
@@ -208,7 +208,7 @@
     bool PickupCollection::isTarget(const PickupCarrier* carrier) const
     {
-        for(std::list<CollectiblePickup*>::const_iterator it = this->pickups_.begin(); it != this->pickups_.end(); ++it)
-        {
-            if(!carrier->isTarget(*it))
+        for(CollectiblePickup* pickup : this->pickups_)
+        {
+            if(!carrier->isTarget(pickup))
                 return false;
         }
@@ -227,5 +227,5 @@
     bool PickupCollection::addPickupable(CollectiblePickup* pickup)
     {
-        if(pickup == NULL)
+        if(pickup == nullptr)
             return false;
 
@@ -247,5 +247,5 @@
     {
         if(this->pickups_.size() >= index)
-            return NULL;
+            return nullptr;
 
         std::list<CollectiblePickup*>::const_iterator it = this->pickups_.begin();
Index: code/trunk/src/modules/pickup/PickupCollection.h
===================================================================
--- code/trunk/src/modules/pickup/PickupCollection.h	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupCollection.h	(revision 11071)
@@ -73,15 +73,15 @@
             virtual ~PickupCollection(); //!< Destructor.
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Creates an instance of this Class through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Creates an instance of this Class through XML.
 
-            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
-            virtual void changedCarrier(void); //!< Is called when the pickup has changed its PickupCarrier.
-            virtual void changedPickedUp(void); //!< Is called when the pickup has transited from picked up to dropped or the other way around.
+            virtual void changedUsed(void) override; //!< Is called when the pickup has transited from used to unused or the other way around.
+            virtual void changedCarrier(void) override; //!< Is called when the pickup has changed its PickupCarrier.
+            virtual void changedPickedUp(void) override; //!< Is called when the pickup has transited from picked up to dropped or the other way around.
 
-            virtual bool isTarget(const PickupCarrier* carrier) const; //!< Get whether a given class, represented by the input Identifier, is a target of this PickupCollection.
+            virtual bool isTarget(const PickupCarrier* carrier) const override; //!< Get whether a given class, represented by the input Identifier, is a target of this PickupCollection.
 
             inline void setRepresentationName(const std::string& name)
                 { this->representationName_ = name; }
-            virtual const std::string& getRepresentationName() const
+            virtual const std::string& getRepresentationName() const override
                 { return this->representationName_; }
 
@@ -98,5 +98,5 @@
 
         protected:
-            virtual bool createSpawner(void); //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
+            virtual bool createSpawner(void) override; //!< Facilitates the creation of a PickupSpawner upon dropping of the Pickupable.
 
         private:
Index: code/trunk/src/modules/pickup/PickupManager.cc
===================================================================
--- code/trunk/src/modules/pickup/PickupManager.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupManager.cc	(revision 11071)
@@ -68,5 +68,5 @@
         Constructor. Registers the PickupManager and creates the default PickupRepresentation.
     */
-    PickupManager::PickupManager() : guiLoaded_(false), pickupHighestIndex_(0), defaultRepresentation_(NULL)
+    PickupManager::PickupManager() : guiLoaded_(false), pickupHighestIndex_(0), defaultRepresentation_(nullptr)
     {
         RegisterObject(PickupManager);
@@ -85,5 +85,5 @@
     {
         // Destroying the default representation.
-        if(this->defaultRepresentation_ != NULL)
+        if(this->defaultRepresentation_ != nullptr)
             this->defaultRepresentation_->destroy();
 
@@ -91,6 +91,6 @@
 
         // Destroying all the PickupInventoryContainers that are still there.
-        for(std::map<uint32_t, PickupInventoryContainer*>::iterator it = this->pickupInventoryContainers_.begin(); it != this->pickupInventoryContainers_.end(); it++)
-            delete it->second;
+        for(const auto& mapEntry : this->pickupInventoryContainers_)
+            delete mapEntry.second;
         this->pickupInventoryContainers_.clear();
 
@@ -184,16 +184,16 @@
         CollectiblePickup* collectible = orxonox_cast<CollectiblePickup*>(pickup);
         // If the Pickupable is part of a PickupCollection it isn't displayed in the PickupInventory, just the PickupCollection is.
-        if(collectible != NULL && collectible->isInCollection())
+        if(collectible != nullptr && collectible->isInCollection())
             return;
 
         // Getting clientId of the host this change of the pickup's used status concerns.
         PickupCarrier* carrier = pickup->getCarrier();
-        while(carrier->getCarrierParent() != NULL)
+        while(carrier->getCarrierParent() != nullptr)
             carrier = carrier->getCarrierParent();
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
-        if(pawn == NULL)
+        if(pawn == nullptr)
             return;
         PlayerInfo* info = pawn->getPlayer();
-        if(info == NULL)
+        if(info == nullptr)
             return;
         unsigned int clientId = info->getClientID();
@@ -265,16 +265,16 @@
         CollectiblePickup* collectible = orxonox_cast<CollectiblePickup*>(pickup);
         // If the Pickupable is part of a PickupCollection it isn't displayed in the PickupInventory, just the PickupCollection is.
-        if(collectible != NULL && collectible->isInCollection())
+        if(collectible != nullptr && collectible->isInCollection())
             return;
 
         // Getting clientId of the host this change of the pickup's pickedUp status concerns.
         PickupCarrier* carrier = pickup->getCarrier();
-        while(carrier->getCarrierParent() != NULL)
+        while(carrier->getCarrierParent() != nullptr)
             carrier = carrier->getCarrierParent();
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
-        if(pawn == NULL)
+        if(pawn == nullptr)
             return;
         PlayerInfo* info = pawn->getFormerPlayer();
-        if(info == NULL)
+        if(info == nullptr)
             return;
         unsigned int clientId = info->getClientID();
@@ -399,5 +399,5 @@
                 return;
             Pickupable* pickupable = this->pickups_.find(pickup)->second;
-            if(pickupable != NULL)
+            if(pickupable != nullptr)
                 pickupable->drop();
         }
@@ -442,5 +442,5 @@
                 return;
             Pickupable* pickupable = this->pickups_.find(pickup)->second;
-            if(pickupable != NULL)
+            if(pickupable != nullptr)
                 pickupable->setUsed(use);
         }
Index: code/trunk/src/modules/pickup/PickupManager.h
===================================================================
--- code/trunk/src/modules/pickup/PickupManager.h	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupManager.h	(revision 11071)
@@ -117,7 +117,7 @@
             PickupRepresentation* getRepresentation(const std::string& name); // tolua_export
 
-            virtual void pickupChangedUsed(Pickupable* pickup, bool used); //!< Is called by the PickupListener to notify the PickupManager, that the input Pickupable has transited to the input used state.
+            virtual void pickupChangedUsed(Pickupable* pickup, bool used) override; //!< Is called by the PickupListener to notify the PickupManager, that the input Pickupable has transited to the input used state.
             static void pickupChangedUsedNetwork(uint32_t pickup, bool inUse, bool usable, bool unusable); //!< Helper method to react to the change in the used status of a Pickupable.
-            virtual void pickupChangedPickedUp(Pickupable* pickup, bool pickedUp); //!< Is called by the PickupListener to notify the PickupManager, that the input Pickupable has transited to the input pickedUp state.
+            virtual void pickupChangedPickedUp(Pickupable* pickup, bool pickedUp) override; //!< Is called by the PickupListener to notify the PickupManager, that the input Pickupable has transited to the input pickedUp state.
             static void pickupChangedPickedUpNetwork(uint32_t pickup, bool usable, uint32_t representationObjectId, const std::string& representationName, bool pickedUp); //!< Helper method to react to the change in the pickedUp status of a Pickupable.
 
@@ -161,5 +161,5 @@
             std::map<uint32_t, PickupInventoryContainer*>::iterator pickupsIterator_; //!< An iterator pointing to the current Pickupable in pickupsList_.
 
-            std::map<uint32_t, WeakPtr<Pickupable> > pickups_; //!< Map linking a number identifying a Pickupable to a weak pointer of a Pickupable.
+            std::map<uint32_t, WeakPtr<Pickupable>> pickups_; //!< Map linking a number identifying a Pickupable to a weak pointer of a Pickupable.
             std::map<Pickupable*, uint32_t> indexes_;//!< Map linking Pickupable to the number identifying it.
 
Index: code/trunk/src/modules/pickup/PickupRepresentation.cc
===================================================================
--- code/trunk/src/modules/pickup/PickupRepresentation.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupRepresentation.cc	(revision 11071)
@@ -52,5 +52,5 @@
         This is primarily for use of the PickupManager in creating a default PickupRepresentation.
     */
-    PickupRepresentation::PickupRepresentation() : BaseObject(NULL), Synchronisable(NULL), spawnerRepresentation_(NULL)
+    PickupRepresentation::PickupRepresentation() : BaseObject(nullptr), Synchronisable(nullptr), spawnerRepresentation_(nullptr)
     {
         RegisterObject(PickupRepresentation);
@@ -64,5 +64,5 @@
         Default Constructor. Registers the object and initializes its member variables.
     */
-    PickupRepresentation::PickupRepresentation(Context* context) : BaseObject(context), Synchronisable(context), spawnerRepresentation_(NULL)
+    PickupRepresentation::PickupRepresentation(Context* context) : BaseObject(context), Synchronisable(context), spawnerRepresentation_(nullptr)
     {
         RegisterObject(PickupRepresentation);
@@ -78,5 +78,5 @@
     PickupRepresentation::~PickupRepresentation()
     {
-        if(this->spawnerRepresentation_ != NULL)
+        if(this->spawnerRepresentation_ != nullptr)
             this->spawnerRepresentation_->destroy();
 
@@ -135,5 +135,5 @@
     StaticEntity* PickupRepresentation::createSpawnerRepresentation(PickupSpawner* spawner)
     {
-        if(this->spawnerRepresentation_ == NULL)
+        if(this->spawnerRepresentation_ == nullptr)
         {
             orxout(verbose, context::pickups) << "PickupRepresentation: No spawner representation found." << endl;
@@ -149,5 +149,5 @@
         this->spawnerRepresentation_->setVisible(true);
         StaticEntity* temp = this->spawnerRepresentation_;
-        this->spawnerRepresentation_ = NULL;
+        this->spawnerRepresentation_ = nullptr;
 
         return temp;
@@ -164,5 +164,5 @@
     {
         this->spawnerRepresentation_ = representation;
-        if(this->spawnerRepresentation_ != NULL)
+        if(this->spawnerRepresentation_ != nullptr)
             this->spawnerRepresentation_->setVisible(false);
     }
Index: code/trunk/src/modules/pickup/PickupRepresentation.h
===================================================================
--- code/trunk/src/modules/pickup/PickupRepresentation.h	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupRepresentation.h	(revision 11071)
@@ -98,5 +98,5 @@
             virtual ~PickupRepresentation(); //!< Destructor.
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a PickupRepresentation object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a PickupRepresentation object through XML.
 
             /**
@@ -119,8 +119,8 @@
             @brief Get the StaticEntity that defines how the PickupSpawner of the Pickupable represented by this PickupRepresentation looks like.
             @param index The index.
-            @return Returns (for index = 0) a pointer to the StaticEntity. For index > 0 it returns NULL.
+            @return Returns (for index = 0) a pointer to the StaticEntity. For index > 0 it returns nullptr.
             */
             inline const StaticEntity* getSpawnerRepresentationIndex(unsigned int index) const
-                { if(index == 0) return this->spawnerRepresentation_; return NULL; }
+                { if(index == 0) return this->spawnerRepresentation_; return nullptr; }
             /**
             @brief Get the name of the image representing the pickup in the PickupInventory.
@@ -129,5 +129,5 @@
             inline const std::string& getInventoryRepresentation(void) const { return this->inventoryRepresentation_; } // tolua_export
 
-            virtual void changedName();
+            virtual void changedName() override;
 
             StaticEntity* createSpawnerRepresentation(PickupSpawner* spawner); //!< Create a spawnerRepresentation for a specific PickupSpawner.
Index: code/trunk/src/modules/pickup/PickupSpawner.cc
===================================================================
--- code/trunk/src/modules/pickup/PickupSpawner.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupSpawner.cc	(revision 11071)
@@ -55,5 +55,5 @@
         Pointer to the object which created this item.
     */
-    PickupSpawner::PickupSpawner(Context* context) : StaticEntity(context), pickup_(NULL), representation_(NULL), pickupTemplate_(NULL)
+    PickupSpawner::PickupSpawner(Context* context) : StaticEntity(context), pickup_(nullptr), representation_(nullptr), pickupTemplate_(nullptr)
     {
         RegisterObject(PickupSpawner);
@@ -74,5 +74,5 @@
         this->selfDestruct_ = false;
 
-        this->setPickupable(NULL);
+        this->setPickupable(nullptr);
     }
 
@@ -83,5 +83,5 @@
     PickupSpawner::~PickupSpawner()
     {
-        if(this->isInitialized() && this->selfDestruct_ && this->pickup_ != NULL)
+        if(this->isInitialized() && this->selfDestruct_ && this->pickup_ != nullptr)
             this->pickup_->destroy();
     }
@@ -158,16 +158,16 @@
 
             // Iterate trough all Pawns.
-            for(ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+            for(Pawn* pawn : ObjectList<Pawn>())
             {
-                if(spawner == NULL) // Stop if the PickupSpawner has been deleted (e.g. because it has run out of pickups to distribute).
+                if(spawner == nullptr) // Stop if the PickupSpawner has been deleted (e.g. because it has run out of pickups to distribute).
                     break;
 
-                Vector3 distance = it->getWorldPosition() - this->getWorldPosition();
-                PickupCarrier* carrier = static_cast<PickupCarrier*>(*it);
+                Vector3 distance = pawn->getWorldPosition() - this->getWorldPosition();
+                PickupCarrier* carrier = static_cast<PickupCarrier*>(pawn);
                 // If a PickupCarrier, that fits the target-range of the Pickupable spawned by this PickupSpawner, is in trigger-distance and the carrier is not blocked.
-                if(distance.length() < this->triggerDistance_ && carrier != NULL && this->blocked_.find(carrier) == this->blocked_.end())
+                if(distance.length() < this->triggerDistance_ && carrier != nullptr && this->blocked_.find(carrier) == this->blocked_.end())
                 {
                     if(carrier->isTarget(this->pickup_))
-                        this->trigger(*it);
+                        this->trigger(pawn);
                 }
             }
@@ -195,5 +195,5 @@
         pickedUp = false; // To avoid compiler warning.
 
-        this->setPickupable(NULL);
+        this->setPickupable(nullptr);
         this->decrementSpawnsRemaining();
     }
@@ -282,11 +282,11 @@
         {
             orxout(internal_error, context::pickups) << "Massive Error: PickupSpawner still alive until having spawned last item." << endl;
-            return NULL;
-        }
-
-        if (this->pickupTemplate_ != NULL)
+            return nullptr;
+        }
+
+        if (this->pickupTemplate_ != nullptr)
         {
             Identifier* identifier = this->pickupTemplate_->getBaseclassIdentifier();
-            if (identifier != NULL)
+            if (identifier != nullptr)
             {
                 Pickupable* pickup = orxonox_cast<Pickupable*>(identifier->fabricate(this->getContext()));
@@ -298,5 +298,5 @@
         }
 
-        return NULL;
+        return nullptr;
     }
 
@@ -309,13 +309,13 @@
     void PickupSpawner::setPickupable(Pickupable* pickup)
     {
-        if (this->representation_ != NULL)
+        if (this->representation_ != nullptr)
         {
             this->representation_->destroy();
-            this->representation_ = NULL;
-        }
-
-        if (pickup != NULL)
-        {
-            if (this->pickup_ != NULL)
+            this->representation_ = nullptr;
+        }
+
+        if (pickup != nullptr)
+        {
+            if (this->pickup_ != nullptr)
                 this->pickup_->destroy();
 
Index: code/trunk/src/modules/pickup/PickupSpawner.h
===================================================================
--- code/trunk/src/modules/pickup/PickupSpawner.h	(revision 11056)
+++ code/trunk/src/modules/pickup/PickupSpawner.h	(revision 11071)
@@ -82,6 +82,6 @@
             static PickupSpawner* createDroppedPickup(Context* context, Pickupable* pickup, PickupCarrier* carrier, float triggerDistance = 10.0);
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);  //!< Method for creating a PickupSpawner through XML.
-            virtual void tick(float dt); //!< Tick, checks if any Pawn is close enough to trigger.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;  //!< Method for creating a PickupSpawner through XML.
+            virtual void tick(float dt) override; //!< Tick, checks if any Pawn is close enough to trigger.
 
             /**
Index: code/trunk/src/modules/pickup/items/BoostPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/BoostPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/BoostPickup.cc	(revision 11071)
@@ -106,5 +106,5 @@
 
         SpaceShip* ship = this->carrierToSpaceShipHelper();
-        if(ship == NULL) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
+        if(ship == nullptr) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
             this->Pickupable::destroy();
 
@@ -128,5 +128,5 @@
         Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
     @return
-        A pointer to the SpaceShip, or NULL if the conversion failed.
+        A pointer to the SpaceShip, or nullptr if the conversion failed.
     */
     SpaceShip* BoostPickup::carrierToSpaceShipHelper(void)
@@ -135,5 +135,5 @@
         SpaceShip* ship = orxonox_cast<SpaceShip*>(carrier);
 
-        if(ship == NULL)
+        if(ship == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in BoostPickup." << endl;
Index: code/trunk/src/modules/pickup/items/BoostPickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/BoostPickup.h	(revision 11056)
+++ code/trunk/src/modules/pickup/items/BoostPickup.h	(revision 11071)
@@ -52,7 +52,7 @@
             virtual ~BoostPickup(); //!< Destructor.
 
-            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a BoostPickup object through XML.
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode) override; //!< Method for creating a BoostPickup object through XML.
 
-            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
+            virtual void changedUsed(void) override; //!< Is called when the pickup has transited from used to unused or the other way around.
             inline float getBoostRefill()
                 { return this->boostRefill_; }
Index: code/trunk/src/modules/pickup/items/DamageBoostPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/DamageBoostPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/DamageBoostPickup.cc	(revision 11071)
@@ -106,5 +106,5 @@
 
         SpaceShip* ship = this->carrierToSpaceShipHelper();
-        if(ship == NULL) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
+        if(ship == nullptr) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
             this->Pickupable::destroy();
 
@@ -152,5 +152,5 @@
         Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
     @return
-        A pointer to the SpaceShip, or NULL if the conversion failed.
+        A pointer to the SpaceShip, or nullptr if the conversion failed.
     */
     SpaceShip* DamageBoostPickup::carrierToSpaceShipHelper(void)
@@ -159,5 +159,5 @@
         SpaceShip* ship = orxonox_cast<SpaceShip*>(carrier);
 
-        if(ship == NULL)
+        if(ship == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in DamageBoostPickup." << endl;
Index: code/trunk/src/modules/pickup/items/DronePickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/DronePickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/DronePickup.cc	(revision 11071)
@@ -74,5 +74,5 @@
     {
         this->addTarget(ClassIdentifier<Pawn>::getIdentifier());
-        this->setDurationType(pickupDurationType::once);
+        this->setDurationType(PickupDurationType::once);
         this->droneTemplate_ = "";
     }
@@ -122,5 +122,5 @@
 
                 Pawn* pawn = this->carrierToPawnHelper();
-                if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+                if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                     this->Pickupable::destroy();
 
@@ -131,5 +131,5 @@
                 Controller* controller = drone->getController();
                 DroneController* droneController = orxonox_cast<DroneController*>(controller);
-                if(droneController != NULL)
+                if(droneController != nullptr)
                 {
                     droneController->setOwner(pawn);
@@ -156,5 +156,5 @@
         Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
     @return
-        A pointer to the Pawn, or NULL if the conversion failed.
+        A pointer to the Pawn, or nullptr if the conversion failed.
     */
     Pawn* DronePickup::carrierToPawnHelper(void)
@@ -163,5 +163,5 @@
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
 
-        if(pawn == NULL)
+        if(pawn == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in DronePickup." << endl;
Index: code/trunk/src/modules/pickup/items/HealthPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/HealthPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/HealthPickup.cc	(revision 11071)
@@ -77,5 +77,5 @@
         this->health_ = 0.0f;
         this->healthRate_ = 0.0f;
-        this->healthType_ = pickupHealthType::limited;
+        this->healthType_ = PickupHealthType::limited;
         this->maxHealthSave_ = 0.0f;
         this->maxHealthOverwrite_ = 0.0f;
@@ -114,5 +114,5 @@
         {
             Pawn* pawn = this->carrierToPawnHelper();
-            if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+            if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                 this->Pickupable::destroy();
 
@@ -127,11 +127,11 @@
             switch(this->getHealthType())
             {
-                case pickupHealthType::permanent:
+                case PickupHealthType::permanent:
                     if(pawn->getMaxHealth() < fullHealth)
                         pawn->setMaxHealth(fullHealth);
-                case pickupHealthType::limited:
+                case PickupHealthType::limited:
                     pawn->addHealth(health);
                     break;
-                case pickupHealthType::temporary:
+                case PickupHealthType::temporary:
                     if(pawn->getMaxHealth() > fullHealth)
                     {
@@ -168,5 +168,5 @@
             {
                 Pawn* pawn = this->carrierToPawnHelper();
-                if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+                if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                     this->Pickupable::destroy();
 
@@ -174,12 +174,12 @@
                 switch(this->getHealthType())
                 {
-                    case pickupHealthType::permanent:
+                    case PickupHealthType::permanent:
                         health = pawn->getHealth()+this->getHealth();
                         if(pawn->getMaxHealth() < health)
                             pawn->setMaxHealth(health);
-                    case pickupHealthType::limited:
+                    case PickupHealthType::limited:
                         pawn->addHealth(this->getHealth());
                         break;
-                    case pickupHealthType::temporary:
+                    case PickupHealthType::temporary:
                         health = pawn->getHealth()+this->getHealth();
                         if(pawn->getMaxHealth() < health)
@@ -201,10 +201,10 @@
         else
         {
-            if(this->getHealthType() == pickupHealthType::temporary)
+            if(this->getHealthType() == PickupHealthType::temporary)
             {
                 PickupCarrier* carrier = this->getCarrier();
                 Pawn* pawn = orxonox_cast<Pawn*>(carrier);
 
-                if(pawn == NULL)
+                if(pawn == nullptr)
                 {
                     orxout(internal_error, context::pickups) << "Something went horribly wrong in Health Pickup. PickupCarrier is '" << carrier->getIdentifier()->getName() << "' instead of Pawn." << endl;
@@ -233,5 +233,5 @@
         Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
     @return
-        A pointer to the Pawn, or NULL if the conversion failed.
+        A pointer to the Pawn, or nullptr if the conversion failed.
     */
     Pawn* HealthPickup::carrierToPawnHelper(void)
@@ -240,5 +240,5 @@
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
 
-        if(pawn == NULL)
+        if(pawn == nullptr)
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in HealthPickup." << endl;
 
@@ -256,9 +256,9 @@
         switch(this->getHealthType())
         {
-            case pickupHealthType::limited:
+            case PickupHealthType::limited:
                 return HealthPickup::healthTypeLimited_s;
-            case pickupHealthType::temporary:
+            case PickupHealthType::temporary:
                 return HealthPickup::healthTypeTemporary_s;
-            case pickupHealthType::permanent:
+            case PickupHealthType::permanent:
                 return HealthPickup::healthTypePermanent_s;
             default:
@@ -308,9 +308,9 @@
     {
         if(type == HealthPickup::healthTypeLimited_s)
-            this->setHealthType(pickupHealthType::limited);
+            this->setHealthType(PickupHealthType::limited);
         else if(type == HealthPickup::healthTypeTemporary_s)
-            this->setHealthType(pickupHealthType::temporary);
+            this->setHealthType(PickupHealthType::temporary);
         else if(type == HealthPickup::healthTypePermanent_s)
-            this->setHealthType(pickupHealthType::permanent);
+            this->setHealthType(PickupHealthType::permanent);
         else
             orxout(internal_error, context::pickups) << "Invalid healthType '" << type << "' in HealthPickup." << endl;
Index: code/trunk/src/modules/pickup/items/HealthPickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/HealthPickup.h	(revision 11056)
+++ code/trunk/src/modules/pickup/items/HealthPickup.h	(revision 11071)
@@ -51,13 +51,10 @@
     @ingroup PickupItems
     */
-    namespace pickupHealthType
+    enum class PickupHealthType
     {
-        enum Value
-        {
-            limited, //!< Means that the @ref orxonox::HealthPickup "HealthPickup" only increases the users health to its maximum health.
-            temporary, //!< Means that the @ref orxonox::HealthPickup "HealthPickup" temporarily increases the users health even above its maximum health, but only as long as it is in use.
-            permanent //!< Means that the @ref orxonox::HealthPickup "HealthPickup" increases the users health even above its maximum health and increases the maximum health permanently such that it matches the new health.
-        };
-    }
+        limited, //!< Means that the @ref orxonox::HealthPickup "HealthPickup" only increases the users health to its maximum health.
+        temporary, //!< Means that the @ref orxonox::HealthPickup "HealthPickup" temporarily increases the users health even above its maximum health, but only as long as it is in use.
+        permanent //!< Means that the @ref orxonox::HealthPickup "HealthPickup" increases the users health even above its maximum health and increases the maximum health permanently such that it matches the new health.
+    };
 
     /**
@@ -115,5 +112,5 @@
             @return Returns the health type as an enum.
             */
-            inline pickupHealthType::Value getHealthType(void) const
+            inline PickupHealthType getHealthType(void) const
                 { return this->healthType_; }
             const std::string& getHealthTypeAsString(void) const; //!< Get the health type of this pickup.
@@ -127,5 +124,5 @@
             @param type The type of this pickup as an enum.
             */
-            inline void setHealthType(pickupHealthType::Value type)
+            inline void setHealthType(PickupHealthType type)
                 { this->healthType_ = type; }
             void setHealthTypeAsString(const std::string& type); //!< Set the type of the HealthPickup.
@@ -139,5 +136,5 @@
             float maxHealthSave_; //!< Helper to remember what the actual maxHealth of the Pawn was before we changed it.
             float maxHealthOverwrite_; //!< Helper to remember with which value we overwrote the maxHealh, to detect if someone else changed it as well.
-            pickupHealthType::Value healthType_; //!< The type of the HealthPickup.
+            PickupHealthType healthType_; //!< The type of the HealthPickup.
 
             //! Strings for the health types.
Index: code/trunk/src/modules/pickup/items/InvisiblePickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/InvisiblePickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/InvisiblePickup.cc	(revision 11071)
@@ -139,5 +139,5 @@
     {
         Pawn* pawn = this->carrierToPawnHelper();
-        if(pawn == NULL)
+        if(pawn == nullptr)
             return false;
 
@@ -163,5 +163,5 @@
         Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
     @return
-        A pointer to the Pawn, or NULL if the conversion failed.
+        A pointer to the Pawn, or nullptr if the conversion failed.
     */
     Pawn* InvisiblePickup::carrierToPawnHelper(void)
@@ -170,5 +170,5 @@
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
 
-        if(pawn == NULL)
+        if(pawn == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in InvisiblePickup." << endl;
Index: code/trunk/src/modules/pickup/items/MetaPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/MetaPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/MetaPickup.cc	(revision 11071)
@@ -79,6 +79,6 @@
         this->addTarget(ClassIdentifier<PickupCarrier>::getIdentifier());
 
-        this->setDurationType(pickupDurationType::once);
-        this->metaType_ = pickupMetaType::none;
+        this->setDurationType(PickupDurationType::once);
+        this->metaType_ = PickupMetaType::none;
     }
 
@@ -104,11 +104,11 @@
 
         // If the MetaPickup transited to used, and the metaType is not none.
-        if(this->isUsed() && this->metaType_ != pickupMetaType::none)
+        if(this->isUsed() && this->metaType_ != PickupMetaType::none)
         {
             PickupCarrier* carrier = this->getCarrier();
-            if(this->getMetaType() != pickupMetaType::none && carrier != NULL)
+            if(this->getMetaType() != PickupMetaType::none && carrier != nullptr)
             {
                 // If the metaType is destroyCarrier, then the PickupCarrier is destroyed.
-                if(this->getMetaType() == pickupMetaType::destroyCarrier)
+                if(this->getMetaType() == PickupMetaType::destroyCarrier)
                 {
                     Pawn* pawn = orxonox_cast<Pawn*>(carrier);
@@ -118,22 +118,21 @@
                 std::set<Pickupable*> pickups = carrier->getPickups();
                 // Iterate over all Pickupables of the PickupCarrier.
-                for(std::set<Pickupable*>::iterator it = pickups.begin(); it != pickups.end(); it++)
+                for(Pickupable* pickup : pickups)
                 {
-                    Pickupable* pickup = (*it);
-                    if(pickup == NULL || pickup == this)
+                    if(pickup == nullptr || pickup == this)
                         continue;
 
                     // If the metaType is use, then the Pickupable is set to used.
-                    if(this->getMetaType() == pickupMetaType::use && !pickup->isUsed())
+                    if(this->getMetaType() == PickupMetaType::use && !pickup->isUsed())
                     {
                         pickup->setUsed(true);
                     }
                     // If the metaType is drop, then the Pickupable is dropped.
-                    else if(this->getMetaType() == pickupMetaType::drop)
+                    else if(this->getMetaType() == PickupMetaType::drop)
                     {
                         pickup->drop();
                     }
                     // If the metaType is destroy, then the Pickupable is destroyed.
-                    else if(this->getMetaType() == pickupMetaType::destroy)
+                    else if(this->getMetaType() == PickupMetaType::destroy)
                     {
                         pickup->Pickupable::destroy();
@@ -155,13 +154,13 @@
         switch(this->getMetaType())
         {
-            case pickupMetaType::none:
+            case PickupMetaType::none:
                 return MetaPickup::metaTypeNone_s;
-            case pickupMetaType::use:
+            case PickupMetaType::use:
                 return MetaPickup::metaTypeUse_s;
-            case pickupMetaType::drop:
+            case PickupMetaType::drop:
                 return MetaPickup::metaTypeDrop_s;
-            case pickupMetaType::destroy:
+            case PickupMetaType::destroy:
                 return MetaPickup::metaTypeDestroy_s;
-            case pickupMetaType::destroyCarrier:
+            case PickupMetaType::destroyCarrier:
                 return MetaPickup::metaTypeDestroyCarrier_s;
             default:
@@ -180,21 +179,21 @@
         if(type == MetaPickup::metaTypeNone_s)
         {
-            this->setMetaType(pickupMetaType::none);
+            this->setMetaType(PickupMetaType::none);
         }
         else if(type == MetaPickup::metaTypeUse_s)
         {
-            this->setMetaType(pickupMetaType::use);
+            this->setMetaType(PickupMetaType::use);
         }
         else if(type == MetaPickup::metaTypeDrop_s)
         {
-            this->setMetaType(pickupMetaType::drop);
+            this->setMetaType(PickupMetaType::drop);
         }
         else if(type == MetaPickup::metaTypeDestroy_s)
         {
-            this->setMetaType(pickupMetaType::destroy);
+            this->setMetaType(PickupMetaType::destroy);
         }
         else if(type == MetaPickup::metaTypeDestroyCarrier_s)
         {
-            this->setMetaType(pickupMetaType::destroyCarrier);
+            this->setMetaType(PickupMetaType::destroyCarrier);
         }
         else
Index: code/trunk/src/modules/pickup/items/MetaPickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/MetaPickup.h	(revision 11056)
+++ code/trunk/src/modules/pickup/items/MetaPickup.h	(revision 11071)
@@ -48,15 +48,12 @@
     @ingroup PickupItems
     */
-    namespace pickupMetaType
+    enum class PickupMetaType
     {
-        enum Value
-        {
-            none, //!< The @ref orxonox::MetaPickup "MetaPickup" does nothing.
-            use, //!< The @ref orxonox::MetaPickup "MetaPickup" uses all the @ref orxonox::PickupCarrier "PickupCarriers'" @ref orxonox::Pickupable "Pickupables".
-            drop, //!< The @ref orxonox::MetaPickup "MetaPickup" drops all the @ref orxonox::PickupCarrier "PickupCarriers'" @ref orxonox::Pickupable "Pickupables".
-            destroy, //!< The @ref orxonox::MetaPickup "MetaPickup" destroys all the @ref orxonox::PickupCarrier "PickupCarriers'" @ref orxonox::Pickupable "Pickupables".
-            destroyCarrier //!< The @ref orxonox::MetaPickup "MetaPickup" destroys the @ref orxonox::PickupCarrier "PickupCarrier".
-        };
-    }
+        none, //!< The @ref orxonox::MetaPickup "MetaPickup" does nothing.
+        use, //!< The @ref orxonox::MetaPickup "MetaPickup" uses all the @ref orxonox::PickupCarrier "PickupCarriers'" @ref orxonox::Pickupable "Pickupables".
+        drop, //!< The @ref orxonox::MetaPickup "MetaPickup" drops all the @ref orxonox::PickupCarrier "PickupCarriers'" @ref orxonox::Pickupable "Pickupables".
+        destroy, //!< The @ref orxonox::MetaPickup "MetaPickup" destroys all the @ref orxonox::PickupCarrier "PickupCarriers'" @ref orxonox::Pickupable "Pickupables".
+        destroyCarrier //!< The @ref orxonox::MetaPickup "MetaPickup" destroys the @ref orxonox::PickupCarrier "PickupCarrier".
+    };
 
     /**
@@ -100,5 +97,5 @@
             @return Returns an enum with the meta type of the MetaPickup.
             */
-            inline pickupMetaType::Value getMetaType(void) const
+            inline PickupMetaType getMetaType(void) const
                 { return this->metaType_; }
             const std::string& getMetaTypeAsString(void) const; //!< Get the meta type of this MetaPickup.
@@ -109,5 +106,5 @@
             @param type The meta type as an enum.
             */
-            inline void setMetaType(pickupMetaType::Value type)
+            inline void setMetaType(PickupMetaType type)
                 { this->metaType_ =  type; }
             void setMetaTypeAsString(const std::string& type); //!< Set the meta type of this MetaPickup.
@@ -116,5 +113,5 @@
             void initialize(void); //!< Initializes the member variables.
 
-            pickupMetaType::Value metaType_; //!< The meta type of the MetaPickup, determines which actions are taken.
+            PickupMetaType metaType_; //!< The meta type of the MetaPickup, determines which actions are taken.
 
             //! Static strings for the meta types.
Index: code/trunk/src/modules/pickup/items/MunitionContainer.h
===================================================================
--- code/trunk/src/modules/pickup/items/MunitionContainer.h	(revision 11056)
+++ code/trunk/src/modules/pickup/items/MunitionContainer.h	(revision 11071)
@@ -53,5 +53,5 @@
             virtual ~MunitionContainer();
 
-            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode) override;
 
             inline const std::string& getMunitionName() const
Index: code/trunk/src/modules/pickup/items/MunitionPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/MunitionPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/MunitionPickup.cc	(revision 11071)
@@ -86,5 +86,5 @@
     void MunitionPickup::addMunitionContainer(MunitionContainer* munitionContainer)
     {
-        OrxAssert(munitionContainer != NULL, "The munitionContainer cannot be NULL.");
+        OrxAssert(munitionContainer != nullptr, "The munitionContainer cannot be nullptr.");
         this->munitionContainers_.push_back(munitionContainer);
     }
@@ -93,5 +93,5 @@
     {
         if(this->munitionContainers_.size() >= index)
-            return NULL;
+            return nullptr;
         else
             return this->munitionContainers_[index];
@@ -108,5 +108,5 @@
         Pawn* pawn = this->carrierToPawnHelper();
 
-        if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+        if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
             this->Pickupable::destroy();
 
@@ -114,16 +114,16 @@
         if(this->isUsed())
         {
-            for(std::vector<MunitionContainer*>::iterator it = this->munitionContainers_.begin(); it != this->munitionContainers_.end(); ++it)
+            for(MunitionContainer* container : this->munitionContainers_)
             {
                 //Get pointer to the appropriate munition
-                SubclassIdentifier<Munition> identifier = (*it)->getMunitionType();
+                SubclassIdentifier<Munition> identifier = container->getMunitionType();
                 Munition* munition = pawn->getMunition(&identifier);
                 if (munition)
                 {
                     // Add munition and magzines
-                    munition->addMunition((*it)->getMunitionAmount());
-                    munition->addMagazines((*it)->getMagazinesAmount());
+                    munition->addMunition(container->getMunitionAmount());
+                    munition->addMagazines(container->getMagazinesAmount());
                 }
-                (*it)->destroy();
+                container->destroy();
             }
             // This will destroy the pickp
@@ -140,5 +140,5 @@
         Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
     @return
-        A pointer to the Pawn, or NULL if the conversion failed.
+        A pointer to the Pawn, or nullptr if the conversion failed.
     */
     Pawn* MunitionPickup::carrierToPawnHelper(void)
@@ -147,5 +147,5 @@
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
 
-        if(pawn == NULL)
+        if(pawn == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in MunitionPickup." << endl;
Index: code/trunk/src/modules/pickup/items/MunitionPickup.h
===================================================================
--- code/trunk/src/modules/pickup/items/MunitionPickup.h	(revision 11056)
+++ code/trunk/src/modules/pickup/items/MunitionPickup.h	(revision 11071)
@@ -59,9 +59,9 @@
             virtual ~MunitionPickup(); //!< Destructor.
 
-            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode); //!< Method for creating a MunitionPickup object through XML.
+            virtual void XMLPort(Element& xmlelement, orxonox::XMLPort::Mode mode) override; //!< Method for creating a MunitionPickup object through XML.
 
-            virtual void changedUsed(void); //!< Is called when the pickup has transited from used to unused or the other way around.
+            virtual void changedUsed(void) override; //!< Is called when the pickup has transited from used to unused or the other way around.
 
-            virtual void addMunitionContainer(MunitionContainer* munitionContainer);
+            void addMunitionContainer(MunitionContainer* munitionContainer);
             MunitionContainer* getMunitionContainer(unsigned int index);
 
Index: code/trunk/src/modules/pickup/items/ShieldPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/ShieldPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/ShieldPickup.cc	(revision 11071)
@@ -99,5 +99,5 @@
 
         Pawn* pawn = this->carrierToPawnHelper();
-        if(pawn == NULL)
+        if(pawn == nullptr)
             this->Pickupable::destroy();
 
@@ -143,5 +143,5 @@
     Helper to transform the PickupCarrier to a Pawn, and throw an error message if the conversion fails.
     @return
-    A pointer to the Pawn, or NULL if the conversion failed.
+    A pointer to the Pawn, or nullptr if the conversion failed.
     */
     Pawn* ShieldPickup::carrierToPawnHelper(void)
@@ -150,5 +150,5 @@
         Pawn* pawn = orxonox_cast<Pawn*>(carrier);
 
-        if(pawn == NULL)
+        if(pawn == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in ShieldPickup." << endl;
Index: code/trunk/src/modules/pickup/items/ShrinkPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/ShrinkPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/ShrinkPickup.cc	(revision 11071)
@@ -146,5 +146,5 @@
         {
             Pawn* pawn = this->carrierToPawnHelper();
-            if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+            if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
             {
                 this->Pickupable::destroy();
@@ -173,5 +173,5 @@
                 //TODO: Deploy particle effect.
                 Pawn* pawn = this->carrierToPawnHelper();
-                if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+                if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                     return;
 
@@ -182,10 +182,10 @@
 
                 // Iterate over all camera positions and inversely move the camera to create a shrinking sensation.
-                const std::list< StrongPtr<CameraPosition> >& cameraPositions = pawn->getCameraPositions();
+                const std::list<StrongPtr<CameraPosition>>& cameraPositions = pawn->getCameraPositions();
                 int size = cameraPositions.size();
                 for(int index = 0; index < size; index++)
                 {
                     CameraPosition* cameraPos = pawn->getCameraPosition(index);
-                    if(cameraPos == NULL)
+                    if(cameraPos == nullptr)
                         continue;
                     cameraPos->setPosition(cameraPos->getPosition()/factor);
@@ -201,5 +201,5 @@
                 //TODO: Deploy particle effect.
                 Pawn* pawn = this->carrierToPawnHelper();
-                if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+                if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                     return;
 
@@ -208,10 +208,10 @@
 
                 // Iterate over all camera positions and inversely move the camera to create a shrinking sensation.
-                const std::list< StrongPtr<CameraPosition> >& cameraPositions = pawn->getCameraPositions();
+                const std::list<StrongPtr<CameraPosition>>& cameraPositions = pawn->getCameraPositions();
                 int size = cameraPositions.size();
                 for(int index = 0; index < size; index++)
                 {
                     CameraPosition* cameraPos = pawn->getCameraPosition(index);
-                    if(cameraPos == NULL)
+                    if(cameraPos == nullptr)
                         continue;
                     cameraPos->setPosition(cameraPos->getPosition()/this->shrinkFactor_);
@@ -237,5 +237,5 @@
             {
                 Pawn* pawn = this->carrierToPawnHelper();
-                if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+                if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                 {
                     this->Pickupable::destroy();
@@ -263,10 +263,10 @@
 
                 // Iterate over all camera positions and inversely move the camera to create a shrinking sensation.
-                const std::list< StrongPtr<CameraPosition> >& cameraPositions = pawn->getCameraPositions();
+                const std::list<StrongPtr<CameraPosition>>& cameraPositions = pawn->getCameraPositions();
                 int size = cameraPositions.size();
                 for(int index = 0; index < size; index++)
                 {
                     CameraPosition* cameraPos = pawn->getCameraPosition(index);
-                    if(cameraPos == NULL)
+                    if(cameraPos == nullptr)
                         continue;
                     cameraPos->setPosition(cameraPos->getPosition()/factor);
@@ -277,5 +277,5 @@
             {
                 Pawn* pawn = this->carrierToPawnHelper();
-                if(pawn == NULL) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
+                if(pawn == nullptr) // If the PickupCarrier is no Pawn, then this pickup is useless and therefore is destroyed.
                     this->Pickupable::destroy();
 
@@ -304,10 +304,10 @@
 
                 // Iterate over all camera positions and inversely move the camera to create a shrinking sensation.
-                const std::list< StrongPtr<CameraPosition> >& cameraPositions = pawn->getCameraPositions();
+                const std::list<StrongPtr<CameraPosition>>& cameraPositions = pawn->getCameraPositions();
                 int size = cameraPositions.size();
                 for(int index = 0; index < size; index++)
                 {
                     CameraPosition* cameraPos = pawn->getCameraPosition(index);
-                    if(cameraPos == NULL)
+                    if(cameraPos == nullptr)
                         continue;
                     cameraPos->setPosition(cameraPos->getPosition()/factor);
Index: code/trunk/src/modules/pickup/items/SpeedPickup.cc
===================================================================
--- code/trunk/src/modules/pickup/items/SpeedPickup.cc	(revision 11056)
+++ code/trunk/src/modules/pickup/items/SpeedPickup.cc	(revision 11071)
@@ -99,5 +99,5 @@
 
         SpaceShip* ship = this->carrierToSpaceShipHelper();
-        if(ship == NULL) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
+        if(ship == nullptr) // If the PickupCarrier is no SpaceShip, then this pickup is useless and therefore is destroyed.
             this->Pickupable::destroy();
 
@@ -143,5 +143,5 @@
         Helper to transform the PickupCarrier to a SpaceShip, and throw an error message if the conversion fails.
     @return
-        A pointer to the SpaceShip, or NULL if the conversion failed.
+        A pointer to the SpaceShip, or nullptr if the conversion failed.
     */
     SpaceShip* SpeedPickup::carrierToSpaceShipHelper(void)
@@ -150,5 +150,5 @@
         SpaceShip* ship = orxonox_cast<SpaceShip*>(carrier);
 
-        if(ship == NULL)
+        if(ship == nullptr)
         {
             orxout(internal_error, context::pickups) << "Invalid PickupCarrier in SpeedPickup." << endl;
Index: code/trunk/src/modules/pong/Pong.cc
===================================================================
--- code/trunk/src/modules/pong/Pong.cc	(revision 11056)
+++ code/trunk/src/modules/pong/Pong.cc	(revision 11071)
@@ -64,8 +64,8 @@
         RegisterObject(Pong);
 
-        this->center_ = 0;
-        this->ball_ = 0;
-        this->bat_[0] = 0;
-        this->bat_[1] = 0;
+        this->center_ = nullptr;
+        this->ball_ = nullptr;
+        this->bat_[0] = nullptr;
+        this->bat_[1] = nullptr;
 
         this->setHUDTemplate("PongHUD");
@@ -103,8 +103,8 @@
     void Pong::cleanup()
     {
-        if (this->ball_ != NULL) // Destroy the ball, if present.
+        if (this->ball_ != nullptr) // Destroy the ball, if present.
         {
             this->ball_->destroy();
-            this->ball_ = 0;
+            this->ball_ = nullptr;
         }
 
@@ -112,8 +112,8 @@
         for (size_t i = 0; i < 2; ++i)
         {
-            if (this->bat_[0] != NULL)
+            if (this->bat_[0] != nullptr)
             {
                 this->bat_[0]->destroy();
-                this->bat_[0] = 0;
+                this->bat_[0] = nullptr;
             }
         }
@@ -127,7 +127,7 @@
     void Pong::start()
     {
-        if (this->center_ != NULL) // There needs to be a PongCenterpoint, i.e. the area the game takes place.
-        {
-            if (this->ball_ == NULL) // If there is no ball, create a new ball.
+        if (this->center_ != nullptr) // There needs to be a PongCenterpoint, i.e. the area the game takes place.
+        {
+            if (this->ball_ == nullptr) // If there is no ball, create a new ball.
             {
                 this->ball_ = new PongBall(this->center_->getContext());
@@ -145,10 +145,10 @@
 
             // If one of the bats is missing, create it. Apply the template for the bats as specified in the centerpoint.
-            for (size_t i = 0; i < 2; ++i)
+            for (WeakPtr<orxonox::PongBat>& bat : this->bat_)
             {
-                if (this->bat_[i] == NULL)
+                if (bat == nullptr)
                 {
-                    this->bat_[i] = new PongBat(this->center_->getContext());
-                    this->bat_[i]->addTemplate(this->center_->getBattemplate());
+                    bat = new PongBat(this->center_->getContext());
+                    bat->addTemplate(this->center_->getBattemplate());
                 }
             }
@@ -211,11 +211,11 @@
     {
         // first spawn human players to assign always the left bat to the player in singleplayer
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (mapEntry.first->isHumanPlayer() && (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                this->spawnPlayer(mapEntry.first);
         // now spawn bots
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (!it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (!mapEntry.first->isHumanPlayer() && (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                this->spawnPlayer(mapEntry.first);
     }
 
@@ -231,5 +231,5 @@
 
         // If the first (left) bat has no player.
-        if (this->bat_[0]->getPlayer() == NULL)
+        if (this->bat_[0]->getPlayer() == nullptr)
         {
             player->startControl(this->bat_[0]);
@@ -237,5 +237,5 @@
         }
         // If the second (right) bat has no player.
-        else if (this->bat_[1]->getPlayer() == NULL)
+        else if (this->bat_[1]->getPlayer() == nullptr)
         {
             player->startControl(this->bat_[1]);
@@ -247,5 +247,5 @@
 
         // If the player is an AI, it receives a pointer to the ball.
-        if (player->getController() != NULL && player->getController()->isA(Class(PongAI)))
+        if (player->getController() != nullptr && player->getController()->isA(Class(PongAI)))
         {
             PongAI* ai = orxonox_cast<PongAI*>(player->getController());
@@ -262,5 +262,5 @@
         Deathmatch::playerScored(player, score);
 
-        if (this->center_ != NULL) // If there is a centerpoint.
+        if (this->center_ != nullptr) // If there is a centerpoint.
         {
             // Fire an event for the player that has scored, to be able to react to it in the level, e.g. by displaying fireworks.
@@ -271,10 +271,10 @@
 
             // Also announce, that the player has scored.
-            if (player != NULL)
+            if (player != nullptr)
                 this->gtinfo_->sendAnnounceMessage(player->getName() + " scored");
         }
 
         // If there is a ball present, reset its position, velocity and acceleration.
-        if (this->ball_ != NULL)
+        if (this->ball_ != nullptr)
         {
             this->ball_->setPosition(Vector3::ZERO);
@@ -285,5 +285,5 @@
 
         // If there are bats reset them to the middle position.
-        if (this->bat_[0] != NULL && this->bat_[1] != NULL)
+        if (this->bat_[0] != nullptr && this->bat_[1] != nullptr)
         {
             this->bat_[0]->setPosition(-this->center_->getFieldDimension().x / 2, 0, 0);
@@ -292,5 +292,5 @@
 
         // If a player gets enough points, he won the game -> end of game
-        PlayerInfo* winningPlayer = NULL;
+        PlayerInfo* winningPlayer = nullptr;
         if (this->getLeftPlayer() && this->getScore(this->getLeftPlayer()) >= scoreLimit_)
             winningPlayer = this->getLeftPlayer();
@@ -314,5 +314,5 @@
     void Pong::startBall()
     {
-        if (this->ball_ != NULL && this->center_ != NULL)
+        if (this->ball_ != nullptr && this->center_ != nullptr)
             this->ball_->setSpeed(this->center_->getBallSpeed());
     }
@@ -322,12 +322,12 @@
         Get the left player.
     @return
-        Returns a pointer to the player playing on the left. If there is no left player, NULL is returned.
+        Returns a pointer to the player playing on the left. If there is no left player, nullptr is returned.
     */
     PlayerInfo* Pong::getLeftPlayer() const
     {
-        if (this->bat_ != NULL && this->bat_[0] != NULL)
+        if (this->bat_ != nullptr && this->bat_[0] != nullptr)
             return this->bat_[0]->getPlayer();
         else
-            return 0;
+            return nullptr;
     }
 
@@ -336,12 +336,12 @@
         Get the right player.
     @return
-        Returns a pointer to the player playing on the right. If there is no right player, NULL is returned.
+        Returns a pointer to the player playing on the right. If there is no right player, nullptr is returned.
     */
     PlayerInfo* Pong::getRightPlayer() const
     {
-        if (this->bat_ != NULL && this->bat_[1] != NULL)
+        if (this->bat_ != nullptr && this->bat_[1] != nullptr)
             return this->bat_[1]->getPlayer();
         else
-            return 0;
+            return nullptr;
     }
 }
Index: code/trunk/src/modules/pong/Pong.h
===================================================================
--- code/trunk/src/modules/pong/Pong.h	(revision 11056)
+++ code/trunk/src/modules/pong/Pong.h	(revision 11071)
@@ -68,10 +68,10 @@
             virtual ~Pong(); //!< Destructor. Cleans up, if initialized.
 
-            virtual void start(); //!< Starts the Pong minigame.
-            virtual void end(); ///!< Ends the Pong minigame.
+            virtual void start() override; //!< Starts the Pong minigame.
+            virtual void end() override; ///!< Ends the Pong minigame.
 
-            virtual void spawnPlayer(PlayerInfo* player); //!< Spawns the input player.
+            virtual void spawnPlayer(PlayerInfo* player) override; //!< Spawns the input player.
 
-            virtual void playerScored(PlayerInfo* player, int score = 1); //!< Is called when the player scored.
+            virtual void playerScored(PlayerInfo* player, int score = 1) override; //!< Is called when the player scored.
 
             /**
@@ -87,5 +87,5 @@
 
         protected:
-            virtual void spawnPlayersIfRequested(); //!< Spawns players, and fills the rest up with bots.
+            virtual void spawnPlayersIfRequested() override; //!< Spawns players, and fills the rest up with bots.
 
             void startBall(); //!< Starts the ball with some default speed.
Index: code/trunk/src/modules/pong/PongAI.cc
===================================================================
--- code/trunk/src/modules/pong/PongAI.cc	(revision 11056)
+++ code/trunk/src/modules/pong/PongAI.cc	(revision 11071)
@@ -57,5 +57,5 @@
         RegisterObject(PongAI);
 
-        this->ball_ = 0;
+        this->ball_ = nullptr;
         this->ballDirection_ = Vector2::ZERO;
         this->ballEndPosition_ = 0;
@@ -77,6 +77,6 @@
     PongAI::~PongAI()
     {
-        for (std::list<std::pair<Timer*, char> >::iterator it = this->reactionTimers_.begin(); it != this->reactionTimers_.end(); ++it)
-            delete it->first;
+        for (std::pair<Timer*, char>& pair : this->reactionTimers_)
+            delete pair.first;
     }
 
@@ -101,5 +101,5 @@
     {
         // If either the ball, or the controllable entity (i.e. the bat) don't exist (or aren't set).
-        if (this->ball_  == NULL || this->getControllableEntity() == NULL)
+        if (this->ball_  == nullptr || this->getControllableEntity() == nullptr)
             return;
 
@@ -362,5 +362,5 @@
             // Add a new Timer
             Timer* timer = new Timer(delay, false, createExecutor(createFunctor(&PongAI::delayedMove, this)));
-            this->reactionTimers_.push_back(std::pair<Timer*, char>(timer, direction));
+            this->reactionTimers_.emplace_back(timer, direction);
         }
         else
Index: code/trunk/src/modules/pong/PongAI.h
===================================================================
--- code/trunk/src/modules/pong/PongAI.h	(revision 11056)
+++ code/trunk/src/modules/pong/PongAI.h	(revision 11071)
@@ -66,5 +66,5 @@
             void setConfigValues();
 
-            virtual void tick(float dt); //!< Implements the behavior of the PongAI (i.e. its intelligence).
+            virtual void tick(float dt) override; //!< Implements the behavior of the PongAI (i.e. its intelligence).
 
             /**
@@ -89,5 +89,5 @@
             float strength_; //!< The strength of the AI. Ranging from 0 to 1.
 
-            std::list<std::pair<Timer*, char> > reactionTimers_; //!< A list of reaction timers and the directions that take effect when their timer expires.
+            std::list<std::pair<Timer*, char>> reactionTimers_; //!< A list of reaction timers and the directions that take effect when their timer expires.
             char movement_; //!< The planned movement.
             char oldMove_; //!< The previous movement.
Index: code/trunk/src/modules/pong/PongBall.cc
===================================================================
--- code/trunk/src/modules/pong/PongBall.cc	(revision 11056)
+++ code/trunk/src/modules/pong/PongBall.cc	(revision 11071)
@@ -61,5 +61,5 @@
         this->speed_ = 0;
         this->accelerationFactor_ = 1.0f;
-        this->bat_ = 0;
+        this->bat_ = nullptr;
         this->bDeleteBats_ = false;
         this->batID_ = new unsigned int[2];
@@ -82,7 +82,7 @@
              else
              {
-                 this->defScoreSound_ = 0;
-                 this->defBatSound_ = 0;
-                 this->defBoundarySound_ = 0;
+                 this->defScoreSound_ = nullptr;
+                 this->defBatSound_ = nullptr;
+                 this->defBoundarySound_ = nullptr;
              }
     }
@@ -163,8 +163,8 @@
             float distance = 0;
 
-            if (this->bat_ != NULL) // If there are bats.
+            if (this->bat_ != nullptr) // If there are bats.
             {
                 // If the right boundary has been crossed.
-                if (position.x > this->fieldWidth_ / 2 && this->bat_[1] != NULL)
+                if (position.x > this->fieldWidth_ / 2 && this->bat_[1] != nullptr)
                 {
                     // Calculate the distance (in z-direction) between the ball and the center of the bat, weighted by half of the effective length of the bat (with additional 10%)
@@ -195,5 +195,5 @@
                 }
                 // If the left boundary has been crossed.
-                else if (position.x < -this->fieldWidth_ / 2 && this->bat_[0] != NULL)
+                else if (position.x < -this->fieldWidth_ / 2 && this->bat_[0] != nullptr)
                 {
                     // Calculate the distance (in z-direction) between the ball and the center of the bat, weighted by half of the effective length of the bat (with additional 10%)
@@ -285,5 +285,5 @@
     {
         // Make space for the bats, if they don't exist, yet.
-        if (this->bat_ == NULL)
+        if (this->bat_ == nullptr)
         {
             this->bat_ = new WeakPtr<PongBat>[2];
Index: code/trunk/src/modules/pong/PongBall.h
===================================================================
--- code/trunk/src/modules/pong/PongBall.h	(revision 11056)
+++ code/trunk/src/modules/pong/PongBall.h	(revision 11071)
@@ -63,7 +63,7 @@
             virtual ~PongBall();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             /**
Index: code/trunk/src/modules/pong/PongBat.h
===================================================================
--- code/trunk/src/modules/pong/PongBat.h	(revision 11056)
+++ code/trunk/src/modules/pong/PongBat.h	(revision 11071)
@@ -60,10 +60,10 @@
             virtual ~PongBat() {}
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void moveFrontBack(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void moveRightLeft(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
+            virtual void moveFrontBack(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void moveRightLeft(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
 
-            virtual void changedPlayer(); //!< Is called when the player changed.
+            virtual void changedPlayer() override; //!< Is called when the player changed.
 
             /**
Index: code/trunk/src/modules/pong/PongCenterpoint.cc
===================================================================
--- code/trunk/src/modules/pong/PongCenterpoint.cc	(revision 11056)
+++ code/trunk/src/modules/pong/PongCenterpoint.cc	(revision 11071)
@@ -84,5 +84,5 @@
     void PongCenterpoint::checkGametype()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(Pong)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(Pong)))
         {
             Pong* pongGametype = orxonox_cast<Pong*>(this->getGametype());
Index: code/trunk/src/modules/pong/PongCenterpoint.h
===================================================================
--- code/trunk/src/modules/pong/PongCenterpoint.h	(revision 11056)
+++ code/trunk/src/modules/pong/PongCenterpoint.h	(revision 11071)
@@ -124,5 +124,5 @@
             virtual ~PongCenterpoint() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method to create a PongCenterpoint through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method to create a PongCenterpoint through XML.
 
             /**
Index: code/trunk/src/modules/pong/PongScore.cc
===================================================================
--- code/trunk/src/modules/pong/PongScore.cc	(revision 11056)
+++ code/trunk/src/modules/pong/PongScore.cc	(revision 11071)
@@ -55,5 +55,5 @@
         RegisterObject(PongScore);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
 
         this->bShowName_ = false;
@@ -97,5 +97,5 @@
 
         // If the owner is set. The owner being a Pong game.
-        if (this->owner_ != NULL)
+        if (this->owner_ != nullptr)
         {
             if (!this->owner_->hasEnded())
@@ -113,10 +113,10 @@
 
             // Save the name and score of each player as a string.
-            if (player1_ != NULL)
+            if (player1_ != nullptr)
             {
                 name1 = player1_->getName();
                 score1 = multi_cast<std::string>(this->owner_->getScore(player1_));
             }
-            if (player2_ != NULL)
+            if (player2_ != nullptr)
             {
                 name2 = player2_->getName();
@@ -128,5 +128,5 @@
             if (this->bShowLeftPlayer_)
             {
-                if (this->bShowName_ && this->bShowScore_ && player1_ != NULL)
+                if (this->bShowName_ && this->bShowScore_ && player1_ != nullptr)
                     output1 = name1 + " - " + score1;
                 else if (this->bShowScore_)
@@ -139,5 +139,5 @@
             if (this->bShowRightPlayer_)
             {
-                if (this->bShowName_ && this->bShowScore_ && player2_ != NULL)
+                if (this->bShowName_ && this->bShowScore_ && player2_ != nullptr)
                     output2 = score2 + " - " + name2;
                 else if (this->bShowScore_)
@@ -163,5 +163,5 @@
     @brief
         Is called when the owner changes.
-        Sets the owner to NULL, if it is not a pointer to a Pong game.
+        Sets the owner to nullptr, if it is not a pointer to a Pong game.
     */
     void PongScore::changedOwner()
@@ -169,8 +169,8 @@
         SUPER(PongScore, changedOwner);
 
-        if (this->getOwner() != NULL && this->getOwner()->getGametype())
+        if (this->getOwner() != nullptr && this->getOwner()->getGametype())
             this->owner_ = orxonox_cast<Pong*>(this->getOwner()->getGametype());
         else
-            this->owner_ = 0;
+            this->owner_ = nullptr;
     }
 }
Index: code/trunk/src/modules/pong/PongScore.h
===================================================================
--- code/trunk/src/modules/pong/PongScore.h	(revision 11056)
+++ code/trunk/src/modules/pong/PongScore.h	(revision 11071)
@@ -60,7 +60,7 @@
             virtual ~PongScore();
 
-            virtual void tick(float dt); //!< Creates and sets the caption to be displayed by the PongScore.
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner(); //!< Is called when the owner changes.
+            virtual void tick(float dt) override; //!< Creates and sets the caption to be displayed by the PongScore.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedOwner() override; //!< Is called when the owner changes.
 
             /**
Index: code/trunk/src/modules/portals/PortalEndPoint.cc
===================================================================
--- code/trunk/src/modules/portals/PortalEndPoint.cc	(revision 11056)
+++ code/trunk/src/modules/portals/PortalEndPoint.cc	(revision 11071)
@@ -48,5 +48,5 @@
     std::map<unsigned int, PortalEndPoint *> PortalEndPoint::idMap_s;
 
-    PortalEndPoint::PortalEndPoint(Context* context) : StaticEntity(context), RadarViewable(this, static_cast<WorldEntity*>(this)), id_(0), trigger_(NULL), reenterDelay_(0)
+    PortalEndPoint::PortalEndPoint(Context* context) : StaticEntity(context), RadarViewable(this, static_cast<WorldEntity*>(this)), id_(0), trigger_(nullptr), reenterDelay_(0)
     {
         RegisterObject(PortalEndPoint);
@@ -57,5 +57,5 @@
 
         this->setRadarObjectColour(ColourValue::White);
-        this->setRadarObjectShape(RadarViewable::Dot);
+        this->setRadarObjectShape(RadarViewable::Shape::Dot);
         this->setRadarVisibility(true);
         if( GameMode::isMaster() )
@@ -72,8 +72,8 @@
     {
         if (this->isInitialized()) {
-            if (this->trigger_ != NULL)
+            if (this->trigger_ != nullptr)
                 this->trigger_->destroy();
 
-            if (this->portalSound_ != NULL)
+            if (this->portalSound_ != nullptr)
                 this->portalSound_->destroy();
         }
@@ -112,9 +112,9 @@
 
         MultiTriggerContainer * cont = orxonox_cast<MultiTriggerContainer *>(trigger);
-        if(cont == 0)
+        if(cont == nullptr)
             return true;
 
         DistanceMultiTrigger * originatingTrigger = orxonox_cast<DistanceMultiTrigger *>(cont->getOriginator());
-        if(originatingTrigger == 0)
+        if(originatingTrigger == nullptr)
         {
             return true;
@@ -122,5 +122,5 @@
 
         MobileEntity * entity = orxonox_cast<MobileEntity *>(cont->getData());
-        if(entity == 0)
+        if(entity == nullptr)
             return true;
 
Index: code/trunk/src/modules/portals/PortalEndPoint.h
===================================================================
--- code/trunk/src/modules/portals/PortalEndPoint.h	(revision 11056)
+++ code/trunk/src/modules/portals/PortalEndPoint.h	(revision 11071)
@@ -63,11 +63,11 @@
             virtual ~PortalEndPoint();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedActivity(void);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void changedActivity(void) override;
 
             inline void setTarget(const std::string & target)                 //!< add types which are allowed to activate the PortalEndPoint
                 { this->trigger_->addTarget(target); }
 
-            void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
             static std::map<unsigned int, PortalEndPoint *> idMap_s; //!< Maps the id of each PortalEndPoint to a pointer to that PortalEndPoint
             inline void setReenterDelay(unsigned int seconds)
Index: code/trunk/src/modules/portals/PortalLink.cc
===================================================================
--- code/trunk/src/modules/portals/PortalLink.cc	(revision 11056)
+++ code/trunk/src/modules/portals/PortalLink.cc	(revision 11071)
@@ -40,5 +40,5 @@
     std::map<PortalEndPoint *, PortalEndPoint *> PortalLink::links_s;
 
-    PortalLink::PortalLink(Context* context) : BaseObject(context), fromID_(0), toID_(0), from_(0), to_(0)
+    PortalLink::PortalLink(Context* context) : BaseObject(context), fromID_(0), toID_(0), from_(nullptr), to_(nullptr)
     {
         RegisterObject(PortalLink);
@@ -67,5 +67,5 @@
     void PortalLink::use(MobileEntity* entity, PortalEndPoint * entrance)
     {
-        if(entrance == 0)
+        if(entrance == nullptr)
             return;
 
Index: code/trunk/src/modules/portals/PortalLink.h
===================================================================
--- code/trunk/src/modules/portals/PortalLink.h	(revision 11056)
+++ code/trunk/src/modules/portals/PortalLink.h	(revision 11071)
@@ -56,5 +56,5 @@
             PortalLink(Context* context);
             virtual ~PortalLink();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void setFromID(unsigned int from)    //!< set the ID of the PortalEndPoint which should act as the entrance of this link
Index: code/trunk/src/modules/questsystem/GlobalQuest.cc
===================================================================
--- code/trunk/src/modules/questsystem/GlobalQuest.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/GlobalQuest.cc	(revision 11071)
@@ -94,6 +94,6 @@
 
         // Iterate through all players possessing this Quest.
-        for(std::set<PlayerInfo*>::const_iterator it = players_.begin(); it != players_.end(); it++)
-            QuestEffect::invokeEffects(*it, this->getFailEffectList());
+        for(PlayerInfo* questPlayer : players_)
+            QuestEffect::invokeEffects(questPlayer, this->getFailEffectList());
 
         return true;
@@ -119,6 +119,6 @@
 
         // Iterate through all players possessing the Quest.
-        for(std::set<PlayerInfo*>::const_iterator it = players_.begin(); it != players_.end(); it++)
-            QuestEffect::invokeEffects(*it, this->getCompleteEffectList());
+        for(PlayerInfo* questPlayer : players_)
+            QuestEffect::invokeEffects(questPlayer, this->getCompleteEffectList());
 
         Quest::complete(player);
@@ -138,5 +138,5 @@
     bool GlobalQuest::isStartable(const PlayerInfo* player) const
     {
-        if(!(this->getParentQuest() == NULL || this->getParentQuest()->isActive(player)))
+        if(!(this->getParentQuest() == nullptr || this->getParentQuest()->isActive(player)))
             return false;
 
@@ -177,5 +177,5 @@
         The player.
     */
-    QuestStatus::Value GlobalQuest::getStatus(const PlayerInfo* player) const
+    QuestStatus GlobalQuest::getStatus(const PlayerInfo* player) const
     {
         assert(player);
@@ -198,7 +198,7 @@
         The status to be set.
     @return
-        Returns false if player is NULL.
-    */
-    bool GlobalQuest::setStatus(PlayerInfo* player, const QuestStatus::Value & status)
+        Returns false if player is nullptr.
+    */
+    bool GlobalQuest::setStatus(PlayerInfo* player, const QuestStatus & status)
     {
         assert(player);
@@ -242,12 +242,12 @@
     {
         int i = index;
-        for (std::list<QuestEffect*>::const_iterator effect = this->rewards_.begin(); effect != this->rewards_.end(); ++effect)
+        for (QuestEffect* reward : this->rewards_)
         {
             if(i == 0)
-               return *effect;
+               return reward;
 
             i--;
         }
-        return NULL;
+        return nullptr;
     }
 
Index: code/trunk/src/modules/questsystem/GlobalQuest.h
===================================================================
--- code/trunk/src/modules/questsystem/GlobalQuest.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/GlobalQuest.h	(revision 11071)
@@ -93,21 +93,21 @@
             virtual ~GlobalQuest();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a GlobalQuest object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a GlobalQuest object through XML.
 
-            virtual bool fail(PlayerInfo* player); //!< Fails the Quest.
-            virtual bool complete(PlayerInfo* player); //!< Completes the Quest.
+            virtual bool fail(PlayerInfo* player) override; //!< Fails the Quest.
+            virtual bool complete(PlayerInfo* player) override; //!< Completes the Quest.
 
         protected:
-            virtual bool isStartable(const PlayerInfo* player) const; //!< Checks whether the Quest can be started.
-            virtual bool isFailable(const PlayerInfo* player) const; //!< Checks whether the Quest can be failed.
-            virtual bool isCompletable(const PlayerInfo* player) const; //!< Checks whether the Quest can be completed.
+            virtual bool isStartable(const PlayerInfo* player) const override; //!< Checks whether the Quest can be started.
+            virtual bool isFailable(const PlayerInfo* player) const override; //!< Checks whether the Quest can be failed.
+            virtual bool isCompletable(const PlayerInfo* player) const override; //!< Checks whether the Quest can be completed.
 
-            virtual QuestStatus::Value getStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player.
+            virtual QuestStatus getStatus(const PlayerInfo* player) const override; //!< Returns the status of the Quest for a specific player.
 
-            virtual bool setStatus(PlayerInfo* player, const QuestStatus::Value & status); //!< Sets the status for a specific player.
+            virtual bool setStatus(PlayerInfo* player, const QuestStatus & status) override; //!< Sets the status for a specific player.
 
         private:
             std::set<PlayerInfo*> players_; //!< The set of players which possess this Quest.
-            QuestStatus::Value status_; //!< The status of this Quest.
+            QuestStatus status_; //!< The status of this Quest.
             std::list<QuestEffect*> rewards_; //!< Reward QuestEffects only invoked on the player completing the Quest.
 
Index: code/trunk/src/modules/questsystem/LocalQuest.cc
===================================================================
--- code/trunk/src/modules/questsystem/LocalQuest.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/LocalQuest.cc	(revision 11071)
@@ -128,5 +128,5 @@
     bool LocalQuest::isStartable(const PlayerInfo* player) const
     {
-        if(!(this->getParentQuest() == NULL || this->getParentQuest()->isActive(player)))
+        if(!(this->getParentQuest() == nullptr || this->getParentQuest()->isActive(player)))
             return false;
 
@@ -168,9 +168,9 @@
         Returns the status of the Quest for the input player.
     */
-    QuestStatus::Value LocalQuest::getStatus(const PlayerInfo* player) const
+    QuestStatus LocalQuest::getStatus(const PlayerInfo* player) const
     {
         assert(player);
 
-        std::map<const PlayerInfo*, QuestStatus::Value>::const_iterator it = this->playerStatus_.find(player);
+        std::map<const PlayerInfo*, QuestStatus>::const_iterator it = this->playerStatus_.find(player);
         if (it != this->playerStatus_.end()) // If there is a player in the map.
             return it->second;
@@ -188,7 +188,7 @@
         The status to be set.
     @return
-        Returns false if player is NULL.
-    */
-    bool LocalQuest::setStatus(PlayerInfo* player, const QuestStatus::Value & status)
+        Returns false if player is nullptr.
+    */
+    bool LocalQuest::setStatus(PlayerInfo* player, const QuestStatus & status)
     {
         assert(player);
Index: code/trunk/src/modules/questsystem/LocalQuest.h
===================================================================
--- code/trunk/src/modules/questsystem/LocalQuest.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/LocalQuest.h	(revision 11071)
@@ -87,19 +87,19 @@
             virtual ~LocalQuest();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a LocalQuest object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a LocalQuest object through XML.
 
-            virtual bool fail(PlayerInfo* player); //!< Fails the Quest.
-            virtual bool complete(PlayerInfo* player); //!< Completes the Quest.
+            virtual bool fail(PlayerInfo* player) override; //!< Fails the Quest.
+            virtual bool complete(PlayerInfo* player) override; //!< Completes the Quest.
 
         protected:
-            virtual bool isStartable(const PlayerInfo* player) const; //!< Checks whether the Quest can be started.
-            virtual bool isFailable(const PlayerInfo* player) const; //!< Checks whether the Quest can be failed.
-            virtual bool isCompletable(const PlayerInfo* player) const; //!< Checks whether the Quest can be completed.
+            virtual bool isStartable(const PlayerInfo* player) const override; //!< Checks whether the Quest can be started.
+            virtual bool isFailable(const PlayerInfo* player) const override; //!< Checks whether the Quest can be failed.
+            virtual bool isCompletable(const PlayerInfo* player) const override; //!< Checks whether the Quest can be completed.
 
-            virtual QuestStatus::Value getStatus(const PlayerInfo* player) const; //!< Returns the status of the Quest for a specific player.
-            virtual bool setStatus(PlayerInfo* player, const QuestStatus::Value & status); //!< Sets the status for a specific player.
+            virtual QuestStatus getStatus(const PlayerInfo* player) const override; //!< Returns the status of the Quest for a specific player.
+            virtual bool setStatus(PlayerInfo* player, const QuestStatus & status) override; //!< Sets the status for a specific player.
 
         private:
-            std::map<const PlayerInfo*, QuestStatus::Value> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
+            std::map<const PlayerInfo*, QuestStatus> playerStatus_; //!< List of the status for each player, with the Player-pointer as key.
 
     };
Index: code/trunk/src/modules/questsystem/Quest.cc
===================================================================
--- code/trunk/src/modules/questsystem/Quest.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/Quest.cc	(revision 11071)
@@ -55,5 +55,5 @@
         RegisterObject(Quest);
 
-        this->parentQuest_ = NULL;
+        this->parentQuest_ = nullptr;
     }
 
@@ -183,5 +183,5 @@
         The index.
     @return
-        Returns a pointer to the sub-quest at the given index. NULL if there is no element at the given index.
+        Returns a pointer to the sub-quest at the given index. nullptr if there is no element at the given index.
     */
     const Quest* Quest::getSubQuest(unsigned int index) const
@@ -190,13 +190,13 @@
 
         // Iterate through all subquests.
-        for (std::list<Quest*>::const_iterator subQuest = this->subQuests_.begin(); subQuest != this->subQuests_.end(); ++subQuest)
+        for (Quest* quest : this->subQuests_)
         {
             if(i == 0) // We're counting down...
-               return *subQuest;
+               return quest;
 
             i--;
         }
 
-        return NULL; // If the index is greater than the number of elements in the list.
+        return nullptr; // If the index is greater than the number of elements in the list.
     }
 
@@ -207,5 +207,5 @@
         The index.
     @return
-        Returns a pointer to the QuestHint at the given index. NULL if there is no element at the given index.
+        Returns a pointer to the QuestHint at the given index. nullptr if there is no element at the given index.
     */
     const QuestHint* Quest::getHint(unsigned int index) const
@@ -214,12 +214,12 @@
 
         // Iterate through all QuestHints.
-        for (std::list<QuestHint*>::const_iterator hint = this->hints_.begin(); hint != this->hints_.end(); ++hint)
+        for (QuestHint* hint : this->hints_)
         {
             if(i == 0) // We're counting down...
-               return *hint;
+               return hint;
 
             i--;
         }
-        return NULL; // If the index is greater than the number of elements in the list.
+        return nullptr; // If the index is greater than the number of elements in the list.
     }
 
@@ -230,5 +230,5 @@
         The index.
     @return
-        Returns a pointer to the fail QuestEffect at the given index. NULL if there is no element at the given index.
+        Returns a pointer to the fail QuestEffect at the given index. nullptr if there is no element at the given index.
     */
     const QuestEffect* Quest::getFailEffect(unsigned int index) const
@@ -237,12 +237,12 @@
 
         // Iterate through all fail QuestEffects.
-        for (std::list<QuestEffect*>::const_iterator effect = this->failEffects_.begin(); effect != this->failEffects_.end(); ++effect)
+        for (QuestEffect* effect : this->failEffects_)
         {
             if(i == 0) // We're counting down...
-               return *effect;
+               return effect;
 
             i--;
         }
-        return NULL; // If the index is greater than the number of elements in the list.
+        return nullptr; // If the index is greater than the number of elements in the list.
     }
 
@@ -253,5 +253,5 @@
         The index.
     @return
-        Returns a pointer to the complete QuestEffect at the given index. NULL if there is no element at the given index.
+        Returns a pointer to the complete QuestEffect at the given index. nullptr if there is no element at the given index.
     */
     const QuestEffect* Quest::getCompleteEffect(unsigned int index) const
@@ -260,12 +260,12 @@
 
         // Iterate through all complete QuestEffects.
-        for (std::list<QuestEffect*>::const_iterator effect = this->completeEffects_.begin(); effect != this->completeEffects_.end(); ++effect)
+        for (QuestEffect* effect : this->completeEffects_)
         {
             if(i == 0) // We're counting down...
-               return *effect;
+               return effect;
 
             i--;
         }
-        return NULL; // If the index is greater than the number of elements in the list.
+        return nullptr; // If the index is greater than the number of elements in the list.
     }
 
@@ -280,5 +280,5 @@
     bool Quest::isInactive(const PlayerInfo* player) const
     {
-        if(player == NULL)
+        if(player == nullptr)
             return true;
         return this->getStatus(player) == QuestStatus::Inactive;
@@ -295,5 +295,5 @@
     bool Quest::isActive(const PlayerInfo* player) const
     {
-        if(player == NULL)
+        if(player == nullptr)
             return false;
         return this->getStatus(player) == QuestStatus::Active;
@@ -310,5 +310,5 @@
     bool Quest::isFailed(const PlayerInfo* player) const
     {
-        if(player == NULL)
+        if(player == nullptr)
             return false;
         return this->getStatus(player) == QuestStatus::Failed;
@@ -325,5 +325,5 @@
     bool Quest::isCompleted(const PlayerInfo* player) const
     {
-        if(player == NULL)
+        if(player == nullptr)
             return false;
         return this->getStatus(player) == QuestStatus::Completed;
Index: code/trunk/src/modules/questsystem/Quest.h
===================================================================
--- code/trunk/src/modules/questsystem/Quest.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/Quest.h	(revision 11071)
@@ -51,14 +51,11 @@
     @ingroup Questsystem
     */
-    namespace QuestStatus
+    enum class QuestStatus
     {
-        enum Value
-        {
-            Inactive, //!< The @ref orxonox::Quest "Quest" is inactive.
-            Active, //!< The @ref orxonox::Quest "Quest" is active.
-            Failed, //!< The @ref orxonox::Quest "Quest" has been failed.
-            Completed //!< The @ref orxonox::Quest "Quest" has been completed.
-        };
-    }
+        Inactive, //!< The @ref orxonox::Quest "Quest" is inactive.
+        Active, //!< The @ref orxonox::Quest "Quest" is active.
+        Failed, //!< The @ref orxonox::Quest "Quest" has been failed.
+        Completed //!< The @ref orxonox::Quest "Quest" has been completed.
+    };
 
     /**
@@ -85,5 +82,5 @@
             virtual ~Quest();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a Quest object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a Quest object through XML.
 
             /**
@@ -143,6 +140,6 @@
                 { return this->completeEffects_; }
 
-            virtual QuestStatus::Value getStatus(const PlayerInfo* player) const = 0; //!< Returns the status of the Quest for a specific player.
-            virtual bool setStatus(PlayerInfo* player, const QuestStatus::Value & status) = 0; //!< Changes the status for a specific player.
+            virtual QuestStatus getStatus(const PlayerInfo* player) const = 0; //!< Returns the status of the Quest for a specific player.
+            virtual bool setStatus(PlayerInfo* player, const QuestStatus & status) = 0; //!< Changes the status for a specific player.
 
         private:
Index: code/trunk/src/modules/questsystem/QuestDescription.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestDescription.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestDescription.cc	(revision 11071)
@@ -119,5 +119,5 @@
         }
 
-        NotificationListener::sendNotification(message, QuestDescription::SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID());
+        NotificationListener::sendNotification(message, QuestDescription::SENDER, NotificationMessageType::info, NotificationSendMode::network, player->getClientID());
         return true;
     }
Index: code/trunk/src/modules/questsystem/QuestDescription.h
===================================================================
--- code/trunk/src/modules/questsystem/QuestDescription.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestDescription.h	(revision 11071)
@@ -67,5 +67,5 @@
             virtual ~QuestDescription();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a QuestDescription object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a QuestDescription object through XML.
 
 // tolua_begin
Index: code/trunk/src/modules/questsystem/QuestEffect.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestEffect.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestEffect.cc	(revision 11071)
@@ -74,6 +74,6 @@
         orxout(verbose, context::quests) << "Invoking QuestEffects on player: " << player << " ."  << endl;
 
-        for (std::list<QuestEffect*>::iterator effect = effects.begin(); effect != effects.end(); effect++)
-            temp = temp && (*effect)->invoke(player);
+        for (QuestEffect* effect : effects)
+            temp = temp && effect->invoke(player);
 
         return temp;
Index: code/trunk/src/modules/questsystem/QuestEffectBeacon.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestEffectBeacon.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestEffectBeacon.cc	(revision 11071)
@@ -113,8 +113,8 @@
 
         PlayerTrigger* pTrigger = orxonox_cast<PlayerTrigger*>(trigger);
-        PlayerInfo* player = NULL;
+        PlayerInfo* player = nullptr;
 
         // If the trigger is a PlayerTrigger.
-        if(pTrigger != NULL)
+        if(pTrigger != nullptr)
         {
             if(!pTrigger->isForPlayer())  // The PlayerTrigger is not exclusively for Pawns which means we cannot extract one.
@@ -126,5 +126,5 @@
             return false;
 
-        if(player == NULL)
+        if(player == nullptr)
         {
             orxout(verbose, context::quests) << "The QuestEffectBeacon was triggered by an entity other than a Pawn. (" << trigger->getIdentifier()->getName() << ")" << endl;
@@ -236,12 +236,12 @@
     {
         int i = index;
-        for (std::list<QuestEffect*>::const_iterator effect = this->effects_.begin(); effect != this->effects_.end(); ++effect)
+        for (QuestEffect* effect : this->effects_)
         {
             if(i == 0)
-               return *effect;
+               return effect;
 
             i--;
         }
-        return NULL;
+        return nullptr;
     }
 
Index: code/trunk/src/modules/questsystem/QuestEffectBeacon.h
===================================================================
--- code/trunk/src/modules/questsystem/QuestEffectBeacon.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestEffectBeacon.h	(revision 11071)
@@ -50,12 +50,9 @@
     @ingroup Questsystem
     */
-    namespace QuestEffectBeaconStatus
+    enum class QuestEffectBeaconStatus
     {
-        enum Value
-        {
-            Inactive, //!< The @ref orxonox::QuestEffectBeacon "QuestEffectBeacon" is inactive.
-            Active //!< The @ref orxonox::QuestEffectBeacon "QuestEffectBeacon" is active.
-        };
-    }
+        Inactive, //!< The @ref orxonox::QuestEffectBeacon "QuestEffectBeacon" is inactive.
+        Active //!< The @ref orxonox::QuestEffectBeacon "QuestEffectBeacon" is active.
+    };
 
     /**
@@ -96,6 +93,6 @@
             virtual ~QuestEffectBeacon();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a QuestEffectBeacon object through XML.
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a QuestEffectBeacon object through XML.
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             bool execute(bool bTriggered, BaseObject* trigger); //!< Executes the QuestEffects of the QuestEffectBeacon.
@@ -125,5 +122,5 @@
             std::list<QuestEffect*> effects_; //!< The list of QuestEffects to be invoked on the executing player.
             int times_; //!< Number of times the beacon can be exectued.
-            QuestEffectBeaconStatus::Value status_; //!< The status of the QuestEffectBeacon, Can be eighter active or inactive.
+            QuestEffectBeaconStatus status_; //!< The status of the QuestEffectBeacon, Can be eighter active or inactive.
 
             bool setTimes(const int & n); //!< Set the number of times the QuestEffectBeacon can be executed.
Index: code/trunk/src/modules/questsystem/QuestHint.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestHint.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestHint.cc	(revision 11071)
@@ -88,13 +88,13 @@
     bool QuestHint::isActive(const PlayerInfo* player) const
     {
-        if(player == NULL) // If the player is NULL, the Quest obviously can't be active.
+        if(player == nullptr) // If the player is nullptr, the Quest obviously can't be active.
             return false;
 
         // Find the player.
-        std::map<const PlayerInfo*, QuestHintStatus::Value>::const_iterator it = this->playerStatus_.find(player);
+        std::map<const PlayerInfo*, QuestHintStatus>::const_iterator it = this->playerStatus_.find(player);
         if (it != this->playerStatus_.end()) // If the player is in the map.
-            return it->second;
+            return (it->second == QuestHintStatus::Active);
 
-        return QuestStatus::Inactive;
+        return false;
     }
 
Index: code/trunk/src/modules/questsystem/QuestHint.h
===================================================================
--- code/trunk/src/modules/questsystem/QuestHint.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestHint.h	(revision 11071)
@@ -50,12 +50,9 @@
     @ingroup Questsystem
     */
-    namespace QuestHintStatus
+    enum class QuestHintStatus
     {
-        enum Value
-        {
-            Inactive, //!< The @ref orxonox::QuestHint "QuestHint" is inactive.
-            Active //!< The @ref orxonox::QuestHint "QuestHint" is active.
-        };
-    }
+        Inactive, //!< The @ref orxonox::QuestHint "QuestHint" is inactive.
+        Active //!< The @ref orxonox::QuestHint "QuestHint" is active.
+    };
 
     /**
@@ -85,5 +82,5 @@
             virtual ~QuestHint();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a QuestHint object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a QuestHint object through XML.
 
             bool isActive(const PlayerInfo* player) const; //!< Returns true if the QuestHint is active for the input player.
@@ -101,5 +98,5 @@
         private:
             Quest* quest_; //!< The Quest the QuestHint belongs to.
-            std::map<const PlayerInfo*, QuestHintStatus::Value> playerStatus_; //!< List of the states for each player, with the Player-pointer as key.
+            std::map<const PlayerInfo*, QuestHintStatus> playerStatus_; //!< List of the states for each player, with the Player-pointer as key.
 
     }; // tolua_export
Index: code/trunk/src/modules/questsystem/QuestItem.h
===================================================================
--- code/trunk/src/modules/questsystem/QuestItem.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestItem.h	(revision 11071)
@@ -63,5 +63,5 @@
             virtual ~QuestItem();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a QuestItem object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a QuestItem object through XML.
 
             /**
Index: code/trunk/src/modules/questsystem/QuestListener.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestListener.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestListener.cc	(revision 11071)
@@ -59,5 +59,5 @@
 
         this->mode_ = QuestListenerMode::All;
-        this->quest_ = NULL;
+        this->quest_ = nullptr;
     }
 
@@ -81,5 +81,5 @@
         XMLPortParam(QuestListener, "mode", setMode, getMode, xmlelement, mode);
 
-        if(this->quest_ != NULL)
+        if(this->quest_ != nullptr)
             this->quest_->addListener(this); // Adds the QuestListener to the Quests list of listeners.
 
@@ -97,7 +97,6 @@
     /* static */ void QuestListener::advertiseStatusChange(std::list<QuestListener*> & listeners, const std::string & status)
     {
-        for (std::list<QuestListener*>::iterator it = listeners.begin(); it != listeners.end(); ++it) // Iterate through all QuestListeners
-        {
-            QuestListener* listener = *it;
+        for (QuestListener* listener : listeners) // Iterate through all QuestListeners
+        {
             if(listener->getMode() == status || listener->getMode() == QuestListener::ALL) // Check whether the status change affects the give QuestListener.
                 listener->execute();
@@ -117,5 +116,5 @@
         this->quest_ = QuestManager::getInstance().findQuest(id); // Find the Quest corresponding to the given questId.
 
-        if(this->quest_ == NULL) // If there is no such Quest.
+        if(this->quest_ == nullptr) // If there is no such Quest.
         {
             ThrowException(Argument, "This is bad! The QuestListener has not found a Quest with a corresponding id..");
Index: code/trunk/src/modules/questsystem/QuestListener.h
===================================================================
--- code/trunk/src/modules/questsystem/QuestListener.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestListener.h	(revision 11071)
@@ -50,14 +50,11 @@
     @ingroup Questsystem
     */
-    namespace QuestListenerMode
+    enum class QuestListenerMode
     {
-        enum Value
-        {
-            All, //!< Listens to all events.
-            Start, //!< Only listens to events pertaining the starting of @ref orxonox::Quest "Quests".
-            Fail, //!< Only listens to events pertaining the failing of @ref orxonox::Quest "Quests".
-            Complete //!< Only listens to events pertaining the completing of @ref orxonox::Quest "Quests".
-        };
-    }
+        All, //!< Listens to all events.
+        Start, //!< Only listens to events pertaining the starting of @ref orxonox::Quest "Quests".
+        Fail, //!< Only listens to events pertaining the failing of @ref orxonox::Quest "Quests".
+        Complete //!< Only listens to events pertaining the completing of @ref orxonox::Quest "Quests".
+    };
 
     /**
@@ -90,5 +87,5 @@
             virtual ~QuestListener();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a QuestListener object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a QuestListener object through XML.
 
             static void advertiseStatusChange(std::list<QuestListener*> & listeners, const std::string & status); //!< Makes all QuestListener in the list aware that a certain status change has occured.
@@ -103,5 +100,5 @@
 
         private:
-            QuestListenerMode::Value mode_; //!< The mode of the QuestListener.
+            QuestListenerMode mode_; //!< The mode of the QuestListener.
             Quest* quest_; //!< A pointer to the Quest the QuestListener is reacting to.
 
Index: code/trunk/src/modules/questsystem/QuestManager.cc
===================================================================
--- code/trunk/src/modules/questsystem/QuestManager.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/QuestManager.cc	(revision 11071)
@@ -93,7 +93,7 @@
     bool QuestManager::registerQuest(Quest* quest)
     {
-        if(quest == NULL)
-        {
-            orxout(internal_error, context::quests) << "Quest pointer is NULL." << endl;
+        if(quest == nullptr)
+        {
+            orxout(internal_error, context::quests) << "Quest pointer is nullptr." << endl;
             return false;
         }
@@ -135,7 +135,7 @@
     bool QuestManager::registerHint(QuestHint* hint)
     {
-        if(hint == NULL)
-        {
-            orxout(internal_error, context::quests) << "Quest pointer is NULL." << endl;
+        if(hint == nullptr)
+        {
+            orxout(internal_error, context::quests) << "Quest pointer is nullptr." << endl;
             return false;
         }
@@ -173,5 +173,5 @@
     @return
         Returns a pointer to the Quest with the input id.
-        Returns NULL if there is no Quest with the given questId.
+        Returns nullptr if there is no Quest with the given questId.
     @throws
         Throws an exception if the given questId is invalid.
@@ -188,5 +188,5 @@
         else
         {
-           quest = NULL;
+           quest = nullptr;
            orxout(internal_warning, context::quests) << "The quest with id {" << questId << "} is nowhere to be found." << endl;
         }
@@ -202,5 +202,5 @@
     @return
         Returns a pointer to the QuestHint with the input id.
-        Returns NULL if there is no QuestHint with the given hintId.
+        Returns nullptr if there is no QuestHint with the given hintId.
     @throws
         Throws an exception if the given hintId is invalid.
@@ -217,5 +217,5 @@
         else
         {
-           hint = NULL;
+           hint = nullptr;
            orxout(internal_warning, context::quests) << "The hint with id {" << hintId << "} is nowhere to be found." << endl;
         }
@@ -235,7 +235,7 @@
     {
         int numQuests = 0;
-        for(std::map<std::string, Quest*>::iterator it = this->questMap_.begin(); it != this->questMap_.end(); it++)
-        {
-            if(it->second->getParentQuest() == NULL && !it->second->isInactive(player))
+        for(const auto& mapEntry : this->questMap_)
+        {
+            if(mapEntry.second->getParentQuest() == nullptr && !mapEntry.second->isInactive(player))
                 numQuests++;
         }
@@ -255,10 +255,10 @@
     Quest* QuestManager::getRootQuest(PlayerInfo* player, int index)
     {
-        for(std::map<std::string, Quest*>::iterator it = this->questMap_.begin(); it != this->questMap_.end(); it++)
-        {
-            if(it->second->getParentQuest() == NULL && !it->second->isInactive(player) && index-- == 0)
-                return it->second;
-        }
-        return NULL;
+        for(const auto& mapEntry : this->questMap_)
+        {
+            if(mapEntry.second->getParentQuest() == nullptr && !mapEntry.second->isInactive(player) && index-- == 0)
+                return mapEntry.second;
+        }
+        return nullptr;
     }
 
@@ -275,12 +275,12 @@
     int QuestManager::getNumSubQuests(Quest* quest, PlayerInfo* player)
     {
-        if(quest == NULL)
+        if(quest == nullptr)
             return this->getNumRootQuests(player);
 
         std::list<Quest*> quests = quest->getSubQuestList();
         int numQuests = 0;
-        for(std::list<Quest*>::iterator it = quests.begin(); it != quests.end(); it++)
-        {
-            if(!(*it)->isInactive(player))
+        for(Quest* subquest : quests)
+        {
+            if(!subquest->isInactive(player))
                 numQuests++;
         }
@@ -300,14 +300,14 @@
     Quest* QuestManager::getSubQuest(Quest* quest, PlayerInfo* player, int index)
     {
-        if(quest == NULL)
+        if(quest == nullptr)
             return this->getRootQuest(player, index);
 
         std::list<Quest*> quests = quest->getSubQuestList();
-        for(std::list<Quest*>::iterator it = quests.begin(); it != quests.end(); it++)
-        {
-            if(!(*it)->isInactive(player) && index-- == 0)
-                return *it;
-        }
-        return NULL;
+        for(Quest* subquest : quests)
+        {
+            if(!subquest->isInactive(player) && index-- == 0)
+                return quest;
+        }
+        return nullptr;
     }
 
@@ -326,7 +326,7 @@
         std::list<QuestHint*> hints = quest->getHintsList();
         int numHints = 0;
-        for(std::list<QuestHint*>::iterator it = hints.begin(); it != hints.end(); it++)
-        {
-            if((*it)->isActive(player))
+        for(QuestHint* hint : hints)
+        {
+            if(hint->isActive(player))
                 numHints++;
         }
@@ -349,10 +349,10 @@
     {
         std::list<QuestHint*> hints = quest->getHintsList();
-        for(std::list<QuestHint*>::iterator it = hints.begin(); it != hints.end(); it++)
-        {
-            if((*it)->isActive(player) && index-- == 0)
-                return *it;
-        }
-        return NULL;
+        for(QuestHint* hint : hints)
+        {
+            if(hint->isActive(player) && index-- == 0)
+                return hint;
+        }
+        return nullptr;
     }
 
@@ -367,5 +367,5 @@
     Quest* QuestManager::getParentQuest(Quest* quest)
     {
-        OrxAssert(quest, "The input Quest is NULL.");
+        OrxAssert(quest, "The input Quest is nullptr.");
         return quest->getParentQuest();
     }
@@ -381,5 +381,5 @@
     QuestDescription* QuestManager::getDescription(Quest* item)
     {
-        OrxAssert(item, "The input Quest is NULL.");
+        OrxAssert(item, "The input Quest is nullptr.");
         return item->getDescription();
     }
@@ -395,5 +395,5 @@
     QuestDescription* QuestManager::getDescription(QuestHint* item)
     {
-        OrxAssert(item, "The input QuestHint is NULL.");
+        OrxAssert(item, "The input QuestHint is nullptr.");
         return item->getDescription();
     }
@@ -409,5 +409,5 @@
     const std::string QuestManager::getId(Quest* item) const
     {
-        OrxAssert(item, "The input Quest is NULL.");
+        OrxAssert(item, "The input Quest is nullptr.");
         return item->getId();
     }
@@ -423,5 +423,5 @@
     const std::string QuestManager::getId(QuestHint* item) const
     {
-        OrxAssert(item, "The input QuestHint is NULL.");
+        OrxAssert(item, "The input QuestHint is nullptr.");
         return item->getId();
     }
@@ -440,8 +440,8 @@
     {
         PlayerInfo* player = GUIManager::getInstance().getPlayer(guiName);
-        if(player == NULL)
+        if(player == nullptr)
         {
             orxout(internal_error, context::quests) << "GUIOverlay with name '" << guiName << "' has no player." << endl;
-            return NULL;
+            return nullptr;
         }
 
Index: code/trunk/src/modules/questsystem/effects/AddQuest.cc
===================================================================
--- code/trunk/src/modules/questsystem/effects/AddQuest.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/AddQuest.cc	(revision 11071)
@@ -90,5 +90,5 @@
         {
             Quest* quest = QuestManager::getInstance().findQuest(this->getQuestId());
-            if(quest == NULL || !quest->start(player))
+            if(quest == nullptr || !quest->start(player))
                return false;
         }
Index: code/trunk/src/modules/questsystem/effects/AddQuest.h
===================================================================
--- code/trunk/src/modules/questsystem/effects/AddQuest.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/AddQuest.h	(revision 11071)
@@ -62,7 +62,7 @@
         virtual ~AddQuest();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a AddQuest object through XML.
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a AddQuest object through XML.
 
-        virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
+        virtual bool invoke(PlayerInfo* player) override; //!< Invokes the QuestEffect.
 
     };
Index: code/trunk/src/modules/questsystem/effects/AddQuestHint.cc
===================================================================
--- code/trunk/src/modules/questsystem/effects/AddQuestHint.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/AddQuestHint.cc	(revision 11071)
@@ -113,5 +113,5 @@
         {
             QuestHint* hint = QuestManager::getInstance().findHint(this->hintId_);
-            if(hint == NULL || !hint->setActive(player))
+            if(hint == nullptr || !hint->setActive(player))
                 return false;
         }
Index: code/trunk/src/modules/questsystem/effects/AddQuestHint.h
===================================================================
--- code/trunk/src/modules/questsystem/effects/AddQuestHint.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/AddQuestHint.h	(revision 11071)
@@ -64,7 +64,7 @@
             virtual ~AddQuestHint();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a AddQuestHint object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a AddQuestHint object through XML.
 
-            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player) override; //!< Invokes the QuestEffect.
 
         private:
Index: code/trunk/src/modules/questsystem/effects/AddReward.cc
===================================================================
--- code/trunk/src/modules/questsystem/effects/AddReward.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/AddReward.cc	(revision 11071)
@@ -84,11 +84,11 @@
     {
         int i = index;
-        for (std::list<Rewardable*>::const_iterator reward = this->rewards_.begin(); reward != this->rewards_.end(); ++reward)
+        for (Rewardable* reward : this->rewards_)
         {
             if(i == 0)
-               return *reward;
+               return reward;
             i--;
         }
-        return NULL;
+        return nullptr;
     }
 
@@ -106,6 +106,6 @@
 
         bool temp = true;
-        for ( std::list<Rewardable*>::iterator reward = this->rewards_.begin(); reward != this->rewards_.end(); ++reward )
-            temp = temp && (*reward)->reward(player);
+        for (Rewardable* reward : this->rewards_)
+            temp = temp && reward->reward(player);
 
         orxout(verbose, context::quests) << "Rewardable successfully added to player." << player << " ." << endl;
Index: code/trunk/src/modules/questsystem/effects/AddReward.h
===================================================================
--- code/trunk/src/modules/questsystem/effects/AddReward.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/AddReward.h	(revision 11071)
@@ -68,7 +68,7 @@
             virtual ~AddReward();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a AddReward object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a AddReward object through XML.
 
-            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player) override; //!< Invokes the QuestEffect.
 
         private:
Index: code/trunk/src/modules/questsystem/effects/ChangeQuestStatus.h
===================================================================
--- code/trunk/src/modules/questsystem/effects/ChangeQuestStatus.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/ChangeQuestStatus.h	(revision 11071)
@@ -59,5 +59,5 @@
             virtual ~ChangeQuestStatus();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a ChangeQuestStatus object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a ChangeQuestStatus object through XML.
 
             virtual bool invoke(PlayerInfo* player) = 0; //!< Invokes the QuestEffect.
Index: code/trunk/src/modules/questsystem/effects/CompleteQuest.cc
===================================================================
--- code/trunk/src/modules/questsystem/effects/CompleteQuest.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/CompleteQuest.cc	(revision 11071)
@@ -92,5 +92,5 @@
         {
             quest = QuestManager::getInstance().findQuest(this->getQuestId());
-            if(quest == NULL || !quest->complete(player))
+            if(quest == nullptr || !quest->complete(player))
                return false;
         }
Index: code/trunk/src/modules/questsystem/effects/CompleteQuest.h
===================================================================
--- code/trunk/src/modules/questsystem/effects/CompleteQuest.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/CompleteQuest.h	(revision 11071)
@@ -62,7 +62,7 @@
             virtual ~CompleteQuest();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a CompleteQuest object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a CompleteQuest object through XML.
 
-            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player) override; //!< Invokes the QuestEffect.
 
     };
Index: code/trunk/src/modules/questsystem/effects/FailQuest.cc
===================================================================
--- code/trunk/src/modules/questsystem/effects/FailQuest.cc	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/FailQuest.cc	(revision 11071)
@@ -91,5 +91,5 @@
         {
             quest = QuestManager::getInstance().findQuest(this->getQuestId());
-            if(quest == NULL || !quest->fail(player))
+            if(quest == nullptr || !quest->fail(player))
                return false;
         }
Index: code/trunk/src/modules/questsystem/effects/FailQuest.h
===================================================================
--- code/trunk/src/modules/questsystem/effects/FailQuest.h	(revision 11056)
+++ code/trunk/src/modules/questsystem/effects/FailQuest.h	(revision 11071)
@@ -62,7 +62,7 @@
             virtual ~FailQuest();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a FailQuest object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a FailQuest object through XML.
 
-            virtual bool invoke(PlayerInfo* player); //!< Invokes the QuestEffect.
+            virtual bool invoke(PlayerInfo* player) override; //!< Invokes the QuestEffect.
 
     };
Index: code/trunk/src/modules/tetris/Tetris.cc
===================================================================
--- code/trunk/src/modules/tetris/Tetris.cc	(revision 11056)
+++ code/trunk/src/modules/tetris/Tetris.cc	(revision 11071)
@@ -66,5 +66,5 @@
         RegisterObject(Tetris);
 
-        this->activeBrick_ = 0;
+        this->activeBrick_ = nullptr;
 
         // Pre-set the timer, but don't start it yet.
@@ -72,7 +72,7 @@
         this->starttimer_.stopTimer();
 
-        this->player_ = NULL;
+        this->player_ = nullptr;
         this->setHUDTemplate("TetrisHUD");
-        this->futureBrick_ = 0;
+        this->futureBrick_ = nullptr;
     }
 
@@ -96,14 +96,14 @@
         {
             this->activeBrick_->destroy();
-            this->activeBrick_ = 0;
+            this->activeBrick_ = nullptr;
         }
         if (this->futureBrick_)
         {
             this->futureBrick_->destroy();
-            this->futureBrick_ = 0;
-        }
-
-        for (std::list<StrongPtr<TetrisStone> >::iterator it = this->stones_.begin(); it != this->stones_.end(); ++it)
-            (*it)->destroy();
+            this->futureBrick_ = nullptr;
+        }
+
+        for (TetrisStone* stone : this->stones_)
+            stone->destroy();
         this->stones_.clear();
     }
@@ -113,5 +113,5 @@
         SUPER(Tetris, tick, dt);
 
-        if((this->activeBrick_ != NULL)&&(!this->hasEnded()))
+        if((this->activeBrick_ != nullptr)&&(!this->hasEnded()))
         {
             if(!this->isValidBrickPosition(this->activeBrick_))
@@ -136,7 +136,7 @@
             return false;
 
-        for(std::list<StrongPtr<TetrisStone> >::const_iterator it = this->stones_.begin(); it != this->stones_.end(); ++it)
-        {
-            const Vector3& currentStonePosition = (*it)->getPosition(); //!< Saves the position of the currentStone
+        for(TetrisStone* someStone : this->stones_)
+        {
+            const Vector3& currentStonePosition = someStone->getPosition(); //!< Saves the position of the currentStone
 
             if((position.x == currentStonePosition.x) && abs(position.y-currentStonePosition.y) < this->center_->getStoneSize())
@@ -192,8 +192,8 @@
 
         // check for collisions with all stones
-        for(std::list<StrongPtr<TetrisStone> >::const_iterator it = this->stones_.begin(); it != this->stones_.end(); ++it)
+        for(TetrisStone* someStone : this->stones_)
         {
             //Vector3 currentStonePosition = rotateVector((*it)->getPosition(), this->activeBrick_->getRotationCount());
-            const Vector3& currentStonePosition = (*it)->getPosition(); //!< Saves the position of the currentStone
+            const Vector3& currentStonePosition = someStone->getPosition(); //!< Saves the position of the currentStone
 
             //filter out cases where the falling stone is already below a steady stone
@@ -290,5 +290,5 @@
     void Tetris::start()
     {
-        if (this->center_ != NULL) // There needs to be a TetrisCenterpoint, i.e. the area the game takes place.
+        if (this->center_ != nullptr) // There needs to be a TetrisCenterpoint, i.e. the area the game takes place.
         {
             // Create the first brick.
@@ -323,5 +323,5 @@
     {
         this->activeBrick_->setVelocity(Vector3::ZERO);
-        if(this->activeBrick_ != NULL)
+        if(this->activeBrick_ != nullptr)
         {
             this->player_->stopControl();
@@ -341,7 +341,7 @@
     {
         // Spawn a human player.
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
-                this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (mapEntry.first->isHumanPlayer() && (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                this->spawnPlayer(mapEntry.first);
     }
     
@@ -351,5 +351,5 @@
         if(player && player->isHumanPlayer())
         {
-            if(this->activeBrick_ != NULL)
+            if(this->activeBrick_ != nullptr)
             {
                 this->player_->stopControl();
@@ -370,5 +370,5 @@
         assert(player);
 
-        if(this->player_ == NULL)
+        if(this->player_ == nullptr)
         {
             this->player_ = player;
@@ -381,9 +381,9 @@
     void Tetris::startBrick(void)
     {
-        if(this->player_ == NULL)
+        if(this->player_ == nullptr)
             return;
 
         unsigned int cameraIndex = 0;
-        if(this->activeBrick_ != NULL)
+        if(this->activeBrick_ != nullptr)
         {
             // Get camera settings
@@ -396,5 +396,5 @@
         // Make the last brick to be created the active brick.
         this->activeBrick_ = this->futureBrick_;
-        this->futureBrick_ = 0;
+        this->futureBrick_ = nullptr;
 
         // set its position
@@ -437,5 +437,5 @@
         Get the player.
     @return
-        Returns a pointer to the player. If there is no player, NULL is returned.
+        Returns a pointer to the player. If there is no player, nullptr is returned.
     */
     PlayerInfo* Tetris::getPlayer(void) const
@@ -469,7 +469,7 @@
         {
             stonesPerRow = 0;
-            for(std::list<StrongPtr<TetrisStone> >::iterator it = this->stones_.begin(); it != this->stones_.end(); )
-            {
-                std::list<StrongPtr<TetrisStone> >::iterator it_temp = it++;
+            for(std::list<StrongPtr<TetrisStone>>::iterator it = this->stones_.begin(); it != this->stones_.end(); )
+            {
+                std::list<StrongPtr<TetrisStone>>::iterator it_temp = it++;
                 correctPosition = static_cast<unsigned int>(((*it_temp)->getPosition().y - 5)/this->center_->getStoneSize());
                 if(correctPosition == row)
@@ -491,5 +491,5 @@
     void Tetris::clearRow(unsigned int row)
     {// clear the full row
-        for(std::list<StrongPtr<TetrisStone> >::iterator it = this->stones_.begin(); it != this->stones_.end(); )
+        for(std::list<StrongPtr<TetrisStone>>::iterator it = this->stones_.begin(); it != this->stones_.end(); )
         {
             if(static_cast<unsigned int>(((*it)->getPosition().y - 5)/this->center_->getStoneSize()) == row)
@@ -502,8 +502,8 @@
         }
       // adjust height of stones above the deleted row //TODO: check if this could be a source of a bug.
-        for(std::list<StrongPtr<TetrisStone> >::iterator it = this->stones_.begin(); it != this->stones_.end(); ++it)
-        {
-            if(static_cast<unsigned int>(((*it)->getPosition().y - 5)/this->center_->getStoneSize()) > row)
-                (*it)->setPosition((*it)->getPosition()-Vector3(0,10,0));
+        for(TetrisStone* stone : this->stones_)
+        {
+            if(static_cast<unsigned int>((stone->getPosition().y - 5)/this->center_->getStoneSize()) > row)
+                stone->setPosition(stone->getPosition()-Vector3(0,10,0));
         }
 
Index: code/trunk/src/modules/tetris/Tetris.h
===================================================================
--- code/trunk/src/modules/tetris/Tetris.h	(revision 11056)
+++ code/trunk/src/modules/tetris/Tetris.h	(revision 11071)
@@ -58,11 +58,11 @@
             virtual ~Tetris(); //!< Destructor. Cleans up, if initialized.
 
-            virtual void start(void); //!< Starts the Tetris minigame.
-            virtual void end(void); ///!< Ends the Tetris minigame.
+            virtual void start(void) override; //!< Starts the Tetris minigame.
+            virtual void end(void) override; ///!< Ends the Tetris minigame.
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void spawnPlayer(PlayerInfo* player); //!< Spawns the input player.
-            virtual bool playerLeft(PlayerInfo* player);
+            virtual void spawnPlayer(PlayerInfo* player) override; //!< Spawns the input player.
+            virtual bool playerLeft(PlayerInfo* player) override;
 
             void setCenterpoint(TetrisCenterpoint* center);
@@ -77,5 +77,5 @@
 
         protected:
-            virtual void spawnPlayersIfRequested(); //!< Spawns player.
+            virtual void spawnPlayersIfRequested() override; //!< Spawns player.
 
 
@@ -93,5 +93,5 @@
 
             WeakPtr<TetrisCenterpoint> center_; //!< The playing field.
-            std::list<StrongPtr<TetrisStone> > stones_; //!< A list of all stones in play.
+            std::list<StrongPtr<TetrisStone>> stones_; //!< A list of all stones in play.
             WeakPtr<TetrisBrick> activeBrick_;
             WeakPtr<TetrisBrick> futureBrick_;
Index: code/trunk/src/modules/tetris/TetrisBrick.cc
===================================================================
--- code/trunk/src/modules/tetris/TetrisBrick.cc	(revision 11056)
+++ code/trunk/src/modules/tetris/TetrisBrick.cc	(revision 11071)
@@ -81,14 +81,14 @@
             this->attach(stone);
             this->formBrick(stone, i);
-            if(this->tetris_ != NULL)
+            if(this->tetris_ != nullptr)
             {
                 stone->setGame(this->tetris_);
-                if(this->tetris_->getCenterpoint() != NULL)
+                if(this->tetris_->getCenterpoint() != nullptr)
                     stone->addTemplate(this->tetris_->getCenterpoint()->getStoneTemplate());
                 else
-                    orxout()<< "tetris_->getCenterpoint == NULL in TetrisBrick.cc"<< endl;
+                    orxout()<< "tetris_->getCenterpoint == nullptr in TetrisBrick.cc"<< endl;
             }
             else
-                orxout()<< "tetris_ == NULL in TetrisBrick.cc"<< endl;
+                orxout()<< "tetris_ == nullptr in TetrisBrick.cc"<< endl;
         }
     }
@@ -161,5 +161,5 @@
         if(i < this->brickStones_.size())
             return this->brickStones_[i];
-        else return NULL;
+        else return nullptr;
     }
 
@@ -167,10 +167,10 @@
     Tetris* TetrisBrick::getTetris()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(Tetris)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(Tetris)))
         {
             Tetris* tetrisGametype = orxonox_cast<Tetris*>(this->getGametype());
             return tetrisGametype;
         }
-        return NULL;
+        return nullptr;
     }
 
@@ -239,9 +239,9 @@
     {
         assert(this->tetris_);
-        for(unsigned int i = 0; i < this->brickStones_.size(); i++)
-        {
-            this->brickStones_[i]->detachFromParent();
-            this->brickStones_[i]->attachToParent(center);
-            this->brickStones_[i]->setPosition(this->getPosition()+this->tetris_->rotateVector(this->brickStones_[i]->getPosition(),this->rotationCount_ ));
+        for(TetrisStone* stone : this->brickStones_)
+        {
+            stone->detachFromParent();
+            stone->attachToParent(center);
+            stone->setPosition(this->getPosition()+this->tetris_->rotateVector(stone->getPosition(),this->rotationCount_ ));
         }
         this->brickStones_.clear();
Index: code/trunk/src/modules/tetris/TetrisBrick.h
===================================================================
--- code/trunk/src/modules/tetris/TetrisBrick.h	(revision 11056)
+++ code/trunk/src/modules/tetris/TetrisBrick.h	(revision 11071)
@@ -57,7 +57,7 @@
             virtual ~TetrisBrick() {}
 
-            virtual void moveFrontBack(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void moveRightLeft(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void changedPlayer(); //!< Is called when the player changed.
+            virtual void moveFrontBack(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void moveRightLeft(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void changedPlayer() override; //!< Is called when the player changed.
 
             bool isValidMove(const Vector3& position, bool isRotation);
Index: code/trunk/src/modules/tetris/TetrisCenterpoint.cc
===================================================================
--- code/trunk/src/modules/tetris/TetrisCenterpoint.cc	(revision 11056)
+++ code/trunk/src/modules/tetris/TetrisCenterpoint.cc	(revision 11071)
@@ -84,5 +84,5 @@
     void TetrisCenterpoint::checkGametype()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(Tetris)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(Tetris)))
         {
             Tetris* tetrisGametype = orxonox_cast<Tetris*>(this->getGametype());
Index: code/trunk/src/modules/tetris/TetrisCenterpoint.h
===================================================================
--- code/trunk/src/modules/tetris/TetrisCenterpoint.h	(revision 11056)
+++ code/trunk/src/modules/tetris/TetrisCenterpoint.h	(revision 11071)
@@ -62,5 +62,5 @@
             virtual ~TetrisCenterpoint() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method to create a TetrisCenterpoint through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method to create a TetrisCenterpoint through XML.
 
             /**
Index: code/trunk/src/modules/tetris/TetrisScore.cc
===================================================================
--- code/trunk/src/modules/tetris/TetrisScore.cc	(revision 11056)
+++ code/trunk/src/modules/tetris/TetrisScore.cc	(revision 11071)
@@ -36,5 +36,4 @@
 
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 #include "util/Convert.h"
 
@@ -56,6 +55,6 @@
         RegisterObject(TetrisScore);
 
-        this->owner_ = 0;
-        this->player_ = NULL;
+        this->owner_ = nullptr;
+        this->player_ = nullptr;
     }
 
@@ -66,13 +65,4 @@
     TetrisScore::~TetrisScore()
     {
-    }
-
-    /**
-    @brief
-        Method to create a TetrisScore through XML.
-    */
-    void TetrisScore::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(TetrisScore, XMLPort, xmlelement, mode);
     }
 
@@ -89,5 +79,5 @@
 
         // If the owner is set. The owner being a Tetris game.
-        if (this->owner_ != NULL)
+        if (this->owner_ != nullptr)
         {
             std::string score("0");
@@ -101,5 +91,5 @@
             {
                 // Save the name and score of each player as a string.
-                if (player_ != NULL)
+                if (player_ != nullptr)
                     score = multi_cast<std::string>(this->owner_->getScore(player_));
             }
@@ -111,5 +101,5 @@
     @brief
         Is called when the owner changes.
-        Sets the owner to NULL, if it is not a pointer to a Tetris game.
+        Sets the owner to nullptr, if it is not a pointer to a Tetris game.
     */
     void TetrisScore::changedOwner()
@@ -117,8 +107,8 @@
         SUPER(TetrisScore, changedOwner);
 
-        if (this->getOwner() != NULL && this->getOwner()->getGametype())
+        if (this->getOwner() != nullptr && this->getOwner()->getGametype())
             this->owner_ = orxonox_cast<Tetris*>(this->getOwner()->getGametype());
         else
-            this->owner_ = 0;
+            this->owner_ = nullptr;
     }
 }
Index: code/trunk/src/modules/tetris/TetrisScore.h
===================================================================
--- code/trunk/src/modules/tetris/TetrisScore.h	(revision 11056)
+++ code/trunk/src/modules/tetris/TetrisScore.h	(revision 11071)
@@ -60,7 +60,6 @@
             virtual ~TetrisScore();
 
-            virtual void tick(float dt); //!< Creates and sets the caption to be displayed by the TetrisScore.
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void changedOwner(); //!< Is called when the owner changes.
+            virtual void tick(float dt) override; //!< Creates and sets the caption to be displayed by the TetrisScore.
+            virtual void changedOwner() override; //!< Is called when the owner changes.
 
         private:
Index: code/trunk/src/modules/towerdefense/TowerDefense.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefense.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefense.cc	(revision 11071)
@@ -90,6 +90,6 @@
         RegisterObject(TowerDefense);
 
-        selecter = NULL;
-        this->player_ = NULL;        
+        selecter = nullptr;
+        this->player_ = nullptr;
         this->setHUDTemplate("TowerDefenseHUD");
         this->waveNumber_ = 0;
@@ -117,7 +117,7 @@
     void TowerDefense::start()
     {        
-        if (center_ != NULL) // There needs to be a TowerDefenseCenterpoint, i.e. the area the game takes place.
-        {
-            if (selecter == NULL)
+        if (center_ != nullptr) // There needs to be a TowerDefenseCenterpoint, i.e. the area the game takes place.
+        {
+            if (selecter == nullptr)
             {
                 selecter = new TowerDefenseSelecter(this->center_->getContext());                
@@ -176,5 +176,5 @@
         WaypointController* controller = (WaypointController*)(en1->getXMLController());
 
-        if (controller != NULL && waypoints_.size() > 1)
+        if (controller != nullptr && waypoints_.size() > 1)
         {
             en1->setPosition(waypoints_.at(0)->getPosition() + offset_);
@@ -183,8 +183,8 @@
             en1->lookAt(waypoints_.at(1)->getPosition() + offset_);
 
-            for (unsigned int i = 0; i < waypoints_.size(); ++ i)
+            for (TowerDefenseField* field : waypoints_)
             {
                 orxonox::WeakPtr<MovableEntity> waypoint = new MovableEntity(this->center_->getContext());
-                waypoint->setPosition(waypoints_.at(i)->getPosition() + offset_);
+                waypoint->setPosition(field->getPosition() + offset_);
                 controller->addWaypoint(waypoint);
             }
@@ -208,5 +208,5 @@
         player_ = player;
 
-        if (selecter->getPlayer() == NULL)
+        if (selecter->getPlayer() == nullptr)
         {
             player_->startControl(selecter);
@@ -219,5 +219,5 @@
         Get the player.
     @return
-        Returns a pointer to the player. If there is no player, NULL is returned.
+        Returns a pointer to the player. If there is no player, nullptr is returned.
     */
     PlayerInfo* TowerDefense::getPlayer(void) const
@@ -265,5 +265,5 @@
         SUPER(TowerDefense, tick, dt);
 
-        if (hasStarted() == false || player_ == NULL)
+        if (hasStarted() == false || player_ == nullptr)
         {
             return;
@@ -273,5 +273,5 @@
 
         //build/upgrade tower at selecter position
-        if (selecter != NULL && selecter->buildTower_ == true)
+        if (selecter != nullptr && selecter->buildTower_ == true)
         {
             selecter->buildTower_ = false;
@@ -287,7 +287,7 @@
         }
         
-        for (std::list<WeakPtr<TowerDefenseEnemy> >::iterator it = enemies_.begin(); it != enemies_.end(); )
-        {
-            if (*it == NULL)
+        for (std::list<WeakPtr<TowerDefenseEnemy>>::iterator it = enemies_.begin(); it != enemies_.end(); )
+        {
+            if (*it == nullptr)
             {
                 // the enemy was destroyed by a tower - remove it from the list
@@ -355,5 +355,5 @@
                 fields_[i][j]->create(fields.at(pos), fields.at(pos+1));
                 pos += 2;
-                if (fields_[i][j]->getType() == START)
+                if (fields_[i][j]->getType() == TowerDefenseFieldType::START)
                 {
                     startCoord.Set(i,j);
@@ -365,5 +365,5 @@
         TDCoordinate* thisCoord = &startCoord;
         TDCoordinate* nextCoord;
-        while ((nextCoord = getNextStreetCoord(thisCoord)) != NULL)
+        while ((nextCoord = getNextStreetCoord(thisCoord)) != nullptr)
         {
             waypoints_.push_back(fields_[nextCoord->GetX()][nextCoord->GetY()]);            
@@ -379,7 +379,7 @@
         TDCoordinate* nextCoord = new TDCoordinate(0,0);
 
-        if (thisField->getType() != STREET && thisField->getType() != START)
-        {
-            return NULL;
+        if (thisField->getType() != TowerDefenseFieldType::STREET && thisField->getType() != TowerDefenseFieldType::START)
+        {
+            return nullptr;
         }
 
@@ -406,5 +406,5 @@
         }
 
-        return NULL;
+        return nullptr;
     }
 }
Index: code/trunk/src/modules/towerdefense/TowerDefense.h
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefense.h	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefense.h	(revision 11071)
@@ -53,8 +53,8 @@
         virtual ~TowerDefense();        
         void addTowerDefenseEnemy(int templatenr);
-        virtual void start(); //<! The function is called when the gametype starts
-        virtual void end();
-        virtual void tick(float dt);
-        virtual void spawnPlayer(PlayerInfo* player);
+        virtual void start() override; //<! The function is called when the gametype starts
+        virtual void end() override;
+        virtual void tick(float dt) override;
+        virtual void spawnPlayer(PlayerInfo* player) override;
         PlayerInfo* getPlayer(void) const;
         int getCredit(){ return this->credit_; }
@@ -87,7 +87,7 @@
         int waveNumber_;
         int lifes_;
-        std::list<orxonox::WeakPtr<TowerDefenseEnemy> > enemies_;
+        std::list<orxonox::WeakPtr<TowerDefenseEnemy>> enemies_;
         TowerDefenseField* fields_[16][16];
-        std::vector<orxonox::WeakPtr<TowerDefenseField> > waypoints_;
+        std::vector<orxonox::WeakPtr<TowerDefenseField>> waypoints_;
         Vector3 endpoint_;
         Vector3 offset_;        
Index: code/trunk/src/modules/towerdefense/TowerDefenseCenterpoint.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseCenterpoint.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseCenterpoint.cc	(revision 11071)
@@ -92,5 +92,5 @@
     void TowerDefenseCenterpoint::checkGametype()
     {
-        if (this->getGametype() != NULL && this->getGametype()->isA(Class(TowerDefense)))
+        if (this->getGametype() != nullptr && this->getGametype()->isA(Class(TowerDefense)))
         {
             // Sets the centerpoint of the gametype. The gametype uses this to later spawn in towers, he needs the tower template stored in the center point
Index: code/trunk/src/modules/towerdefense/TowerDefenseCenterpoint.h
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseCenterpoint.h	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseCenterpoint.h	(revision 11071)
@@ -52,5 +52,5 @@
             virtual ~TowerDefenseCenterpoint() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             /**
Index: code/trunk/src/modules/towerdefense/TowerDefenseEnemy.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseEnemy.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseEnemy.cc	(revision 11071)
@@ -27,5 +27,5 @@
         RegisterObject(TowerDefenseEnemy);
 
-        this->setCollisionType(WorldEntity::Dynamic);
+        this->setCollisionType(WorldEntity::CollisionType::Dynamic);
         //needed to keep track of the PlayerStats coded in TowerDefense.h
         this->td = orxonox_cast<TowerDefense*>(this->getGametype());
@@ -38,22 +38,15 @@
     }
 
-    void TowerDefenseEnemy::tick(float dt)
-    {   
-        //orxout() << "TDE tick1" << endl;
-        SUPER(TowerDefenseEnemy, tick, dt);
-        //orxout() << "TDE tick2" << endl;
-    }
-
     WeakPtr<TowerDefense> TowerDefenseEnemy::getGame()
     {
-        if (game == NULL)
+        if (game == nullptr)
         {
-            for (ObjectList<TowerDefense>::iterator it = ObjectList<TowerDefense>::begin(); it != ObjectList<TowerDefense>::end(); ++it)
-                game = *it;
+            for (TowerDefense* towerDefense : ObjectList<TowerDefense>())
+                game = towerDefense;
         }
         return game;
     }
 
-    void TowerDefenseEnemy::damage(float damage, float healthdamage, float shielddamage, Pawn* originator)
+    void TowerDefenseEnemy::damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs)
     {
         Pawn::damage(damage, healthdamage, shielddamage, originator);
Index: code/trunk/src/modules/towerdefense/TowerDefenseEnemy.h
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseEnemy.h	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseEnemy.h	(revision 11071)
@@ -37,6 +37,5 @@
         //health gibt es unter: health_
 
-        virtual void tick(float dt);
-        virtual void damage(float damage, float healthdamage, float shielddamage, Pawn* originator);
+        virtual void damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs) override;
 
     private:
Index: code/trunk/src/modules/towerdefense/TowerDefenseField.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseField.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseField.cc	(revision 11071)
@@ -49,7 +49,7 @@
         RegisterObject(TowerDefenseField);
 
-        tower_ = NULL;
-        type_ = FREE;
-        center_ = NULL;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::FREE;
+        center_ = nullptr;
         upgrade_ = 0;
         setPosition(0,0,0);                            
@@ -119,5 +119,5 @@
     bool TowerDefenseField::canUpgrade()
     {
-        if (tower_ != NULL && upgrade_ < 5)
+        if (tower_ != nullptr && upgrade_ < 5)
         {
             return true;
@@ -129,5 +129,5 @@
     void TowerDefenseField::setAngle(int newAngle)
     {
-        if (modelGround_ != NULL)
+        if (modelGround_ != nullptr)
         {
             switch (newAngle)
@@ -152,5 +152,5 @@
         }
 
-        if (modelObject_ != NULL)
+        if (modelObject_ != nullptr)
         {
             switch (newAngle)
@@ -185,6 +185,6 @@
     {            
         modelGround_->setMeshSource("TD_F1.mesh");
-        tower_ = NULL;
-        type_ = FREE;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::FREE;
         setUpgrade(0);
         setAngle(orientation);
@@ -194,6 +194,6 @@
     {      
         modelGround_->setMeshSource("TD_S5.mesh");
-        tower_ = NULL;
-        type_ = START;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::START;
         setUpgrade(0);
         setAngle(orientation);    
@@ -204,6 +204,6 @@
     {     
         modelGround_->setMeshSource("TD_S4.mesh");
-        tower_ = NULL;
-        type_ = END;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::END;
         setUpgrade(0);
         setAngle(orientation);
@@ -213,6 +213,6 @@
     {      
         modelGround_->setMeshSource("TD_S1.mesh");
-        tower_ = NULL;
-        type_ = STREET;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::STREET;
         setUpgrade(0);
         setAngle(orientation);
@@ -222,6 +222,6 @@
     {     
         modelGround_->setMeshSource("TD_S2.mesh");
-        tower_ = NULL;
-        type_ = STREET;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::STREET;
         setUpgrade(0);
         setAngle(orientation);
@@ -231,6 +231,6 @@
     {    
         modelGround_->setMeshSource("TD_S3.mesh");
-        tower_ = NULL;
-        type_ = STREET;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::STREET;
         setUpgrade(0);
         setAngle(orientation);
@@ -241,6 +241,6 @@
         modelGround_->setMeshSource("TD_F1.mesh");
         modelObject_->setMeshSource("TD_O1.mesh");
-        tower_ = NULL;
-        type_ = OBSTACLE;
+        tower_ = nullptr;
+        type_ = TowerDefenseFieldType::OBSTACLE;
         setUpgrade(0);
         setAngle(orientation);
@@ -249,12 +249,12 @@
     void TowerDefenseField::createTower(int upgrade)
     {        
-        if (tower_ == NULL)
+        if (tower_ == nullptr)
         {
             modelGround_->setMeshSource("TD_F1.mesh");
             tower_ = new TowerDefenseTower(center_->getContext());
             attach(tower_);
-            type_ = TOWER;
+            type_ = TowerDefenseFieldType::TOWER;
             setUpgrade(upgrade);
-            if (upgrade_ > 0 && modelObject_ != NULL)
+            if (upgrade_ > 0 && modelObject_ != nullptr)
             {
                 switch (upgrade_)
@@ -287,8 +287,8 @@
     void TowerDefenseField::destroyTower()
     {
-        if (tower_ != NULL)
+        if (tower_ != nullptr)
         {
             tower_->destroy();
-            tower_ = NULL;
+            tower_ = nullptr;
         }
     }
Index: code/trunk/src/modules/towerdefense/TowerDefenseField.h
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseField.h	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseField.h	(revision 11071)
@@ -46,5 +46,5 @@
 namespace orxonox
 {
-    enum TowerDefenseFieldType
+    enum class TowerDefenseFieldType
     { 
         FREE,
@@ -62,7 +62,7 @@
             TowerDefenseField(Context* context);
             virtual ~TowerDefenseField() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             const bool isFree() const
-                { return type_==FREE; }
+                { return type_==TowerDefenseFieldType::FREE; }
             virtual void create(char object, char param);
             virtual void setCenterpoint(TowerDefenseCenterpoint* center);
Index: code/trunk/src/modules/towerdefense/TowerDefenseHUDController.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseHUDController.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseHUDController.cc	(revision 11071)
@@ -39,5 +39,5 @@
     {
         RegisterObject(TowerDefenseHUDController);
-        this->td = 0;
+        this->td = nullptr;
     }
 
@@ -89,5 +89,5 @@
                     else
                     {
-                        this->td = 0;
+                        this->td = nullptr;
                     }
                 }
Index: code/trunk/src/modules/towerdefense/TowerDefenseHUDController.h
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseHUDController.h	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseHUDController.h	(revision 11071)
@@ -53,7 +53,7 @@
 
 
-        virtual void tick(float dt);
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        virtual void changedOwner();
+        virtual void tick(float dt) override;
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void changedOwner() override;
         void setShowlives(bool temp)
             { this->showlives = temp; }
Index: code/trunk/src/modules/towerdefense/TowerDefenseSelecter.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseSelecter.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseSelecter.cc	(revision 11071)
@@ -35,5 +35,4 @@
 
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 #include "graphics/Model.h"
 
@@ -59,9 +58,4 @@
     {
 
-    }
-
-    void TowerDefenseSelecter::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(TowerDefenseSelecter, XMLPort, xmlelement, mode);
     }
 
Index: code/trunk/src/modules/towerdefense/TowerDefenseSelecter.h
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseSelecter.h	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseSelecter.h	(revision 11071)
@@ -41,14 +41,13 @@
             TowerDefenseSelecter(Context* context); //!< Constructor. Registers and initializes the object.
             virtual ~TowerDefenseSelecter();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);         
-            virtual void tick(float dt);            
-            virtual void moveFrontBack(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void moveRightLeft(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void tick(float dt) override;            
+            virtual void moveFrontBack(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void moveRightLeft(const Vector2& value) override; //!< Overloaded the function to steer the bat up and down.
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
             void fire(unsigned int firemode);
-            virtual void fired(unsigned int firemode);
-            virtual void boost(bool bBoost);
+            virtual void fired(unsigned int firemode) override;
+            virtual void boost(bool bBoost) override;
             virtual void setSelectedPosition(TDCoordinate* newPos);
             virtual void setSelectedPosition(int x, int y);
Index: code/trunk/src/modules/towerdefense/TowerDefenseTower.cc
===================================================================
--- code/trunk/src/modules/towerdefense/TowerDefenseTower.cc	(revision 11056)
+++ code/trunk/src/modules/towerdefense/TowerDefenseTower.cc	(revision 11071)
@@ -25,6 +25,6 @@
     {
         RegisterObject(TowerDefenseTower);
-        game_ =NULL;
-        this->setCollisionType(WorldEntity::None);
+        game_ =nullptr;
+        this->setCollisionType(WorldEntity::CollisionType::None);
         upgrade = 1;
 
Index: code/trunk/src/modules/weapons/IceGunFreezer.cc
===================================================================
--- code/trunk/src/modules/weapons/IceGunFreezer.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/IceGunFreezer.cc	(revision 11071)
@@ -63,17 +63,4 @@
     /**
     @brief
-        The controlling happens here. This method defines what the controller has to do each tick.
-    @param dt
-        The duration of the tick.
-    */
-    void IceGunFreezer::tick(float dt)
-    {
-        SUPER(IceGunFreezer, tick, dt);
-
-
-    }
-
-    /**
-    @brief
         Sets the freeze time variable to the passed value.
     */
@@ -101,5 +88,5 @@
 
         // Check if the freezer is attached to a parent and check if the parent is a SpaceShip
-        if (parent != NULL && parent->isA(Class(SpaceShip)))
+        if (parent != nullptr && parent->isA(Class(SpaceShip)))
         {
             freezedSpaceShip_ = orxonox_cast<SpaceShip*>(parent);
@@ -118,5 +105,5 @@
     void IceGunFreezer::stopFreezing()
     {
-        if (freezedSpaceShip_ != NULL && freezeFactor_ != 0.0)
+        if (freezedSpaceShip_ != nullptr && freezeFactor_ != 0.0)
         {
             freezedSpaceShip_->addSpeedFactor(1/freezeFactor_);
Index: code/trunk/src/modules/weapons/IceGunFreezer.h
===================================================================
--- code/trunk/src/modules/weapons/IceGunFreezer.h	(revision 11056)
+++ code/trunk/src/modules/weapons/IceGunFreezer.h	(revision 11071)
@@ -37,5 +37,4 @@
 #include "weapons/WeaponsPrereqs.h"
 
-#include "tools/interfaces/Tickable.h"
 #include "worldentities/StaticEntity.h"
 #include "graphics/Model.h"
@@ -50,10 +49,9 @@
     @ingroup Weapons
     */
-    class _WeaponsExport IceGunFreezer : public StaticEntity, public Tickable
+    class _WeaponsExport IceGunFreezer : public StaticEntity
     {
         public:
             IceGunFreezer(Context* context);
             virtual ~IceGunFreezer();
-            virtual void tick(float dt);
             virtual void startFreezing();
             virtual void stopFreezing();
Index: code/trunk/src/modules/weapons/RocketController.cc
===================================================================
--- code/trunk/src/modules/weapons/RocketController.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/RocketController.cc	(revision 11071)
@@ -38,4 +38,5 @@
 #include "projectiles/SimpleRocket.h"
 #include "weaponmodes/SimpleRocketFire.h"
+#include "core/CoreIncludes.h"
 
 namespace orxonox
Index: code/trunk/src/modules/weapons/RocketController.h
===================================================================
--- code/trunk/src/modules/weapons/RocketController.h	(revision 11056)
+++ code/trunk/src/modules/weapons/RocketController.h	(revision 11071)
@@ -55,5 +55,5 @@
             virtual ~RocketController();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
             /**
             @brief Get the rocket that is controlled by this controller.
Index: code/trunk/src/modules/weapons/munitions/FusionMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/FusionMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/FusionMunition.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "FusionMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -57,8 +56,3 @@
         this->reloadTime_ = 0.5f;
     }
-
-    void FusionMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(FusionMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/FusionMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/FusionMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/FusionMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             FusionMunition(Context* context);
-            virtual ~FusionMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~FusionMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/munitions/GravityBombMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/GravityBombMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/GravityBombMunition.cc	(revision 11071)
@@ -7,5 +7,4 @@
 #include "GravityBombMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -27,9 +26,4 @@
         this->reloadTime_ = 0.0f;
     }
-
-    void GravityBombMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(GravityBombMunition, XMLPort, xmlelement, mode);
-    }
 }
 
Index: code/trunk/src/modules/weapons/munitions/GravityBombMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/GravityBombMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/GravityBombMunition.h	(revision 11071)
@@ -27,6 +27,5 @@
         public:
             GravityBombMunition(Context* context);
-            virtual ~GravityBombMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~GravityBombMunition() = default;
     };
 
Index: code/trunk/src/modules/weapons/munitions/IceMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/IceMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/IceMunition.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "IceMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -55,8 +54,3 @@
         this->reloadTime_ = 0.5f;
     }
-
-    void IceMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(IceMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/IceMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/IceMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/IceMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             IceMunition(Context* context);
-            virtual ~IceMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~IceMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/munitions/LaserMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/LaserMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/LaserMunition.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "LaserMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -58,8 +57,3 @@
         this->reloadTime_ = 0.5f;
     }
-
-    void LaserMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(LaserMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/LaserMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/LaserMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/LaserMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             LaserMunition(Context* context);
-            virtual ~LaserMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~LaserMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/munitions/LightningMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/LightningMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/LightningMunition.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "LightningMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -55,8 +54,3 @@
         this->reloadTime_ = 0.5f;    
     }
-
-    void LightningMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(LightningMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/LightningMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/LightningMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/LightningMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             LightningMunition(Context* context);
-            virtual ~LightningMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~LightningMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/munitions/MineMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/MineMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/MineMunition.cc	(revision 11071)
@@ -54,8 +54,3 @@
         this->reloadTime_ = 0.5f;
     }
-
-    void MineMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(MineMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/MineMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/MineMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/MineMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             MineMunition(Context* context);
-            virtual ~MineMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~MineMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/munitions/RocketMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/RocketMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/RocketMunition.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "RocketMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -55,8 +54,3 @@
         this->reloadTime_ = 0.5f;
     }
-
-    void RocketMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(RocketMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/RocketMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/RocketMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/RocketMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             RocketMunition(Context* context);
-            virtual ~RocketMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~RocketMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/munitions/SplitMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/SplitMunition.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/SplitMunition.cc	(revision 11071)
@@ -34,5 +34,4 @@
 #include "SplitMunition.h"
 #include "core/CoreIncludes.h"
-#include "core/XMLPort.h"
 
 namespace orxonox
@@ -55,8 +54,3 @@
         this->reloadTime_ = 0.5f;
     }
-
-    void SplitMunition::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(SplitMunition, XMLPort, xmlelement, mode);
-    }
 }
Index: code/trunk/src/modules/weapons/munitions/SplitMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/SplitMunition.h	(revision 11056)
+++ code/trunk/src/modules/weapons/munitions/SplitMunition.h	(revision 11071)
@@ -52,6 +52,5 @@
         public:
             SplitMunition(Context* context);
-            virtual ~SplitMunition() {}
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual ~SplitMunition() = default;
     };
 }
Index: code/trunk/src/modules/weapons/projectiles/BasicProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 11071)
@@ -88,5 +88,5 @@
                                     // The projectile is destroyed by its tick()-function (in the following tick).
 
-            Pawn* victim = orxonox_cast<Pawn*>(otherObject); // If otherObject isn't a Pawn, then victim is NULL
+            Pawn* victim = orxonox_cast<Pawn*>(otherObject); // If otherObject isn't a Pawn, then victim is nullptr
 
             WorldEntity* entity = orxonox_cast<WorldEntity*>(this);
@@ -146,8 +146,8 @@
     bool BasicProjectile::isObjectRelatedToShooter(WorldEntity* otherObject)
     {
-        for (WorldEntity* shooter = this->getShooter(); shooter != NULL; shooter = shooter->getParent())
+        for (WorldEntity* shooter = this->getShooter(); shooter != nullptr; shooter = shooter->getParent())
             if (otherObject == shooter)
                 return true;
-        for (WorldEntity* object = otherObject; object != NULL; object = object->getParent())
+        for (WorldEntity* object = otherObject; object != nullptr; object = object->getParent())
             if (otherObject == this->getShooter())
                 return true;
Index: code/trunk/src/modules/weapons/projectiles/BillboardProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/BillboardProjectile.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/BillboardProjectile.h	(revision 11071)
@@ -61,5 +61,5 @@
             virtual void setMaterial(const std::string& material);
             virtual const std::string& getMaterial();
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
         private:
Index: code/trunk/src/modules/weapons/projectiles/GravityBomb.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/GravityBomb.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/GravityBomb.cc	(revision 11071)
@@ -28,5 +28,5 @@
                 this->timeToLife_= LIFETIME;
                 this->setCollisionResponse(false);
-                this->setCollisionType(WorldEntity::Dynamic);
+                this->setCollisionType(WorldEntity::CollisionType::Dynamic);
                 this->enableCollisionCallback();
 
Index: code/trunk/src/modules/weapons/projectiles/GravityBomb.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/GravityBomb.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/GravityBomb.h	(revision 11071)
@@ -41,7 +41,7 @@
             GravityBomb(Context* context);
             virtual ~GravityBomb();
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
             void detonate();
         private:
Index: code/trunk/src/modules/weapons/projectiles/GravityBombField.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/GravityBombField.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/GravityBombField.cc	(revision 11071)
@@ -41,5 +41,5 @@
         //Make the Field visible on Radar and minimap.
         this->setRadarObjectColour(ColourValue(1.0, 0.0, 0.2,1)); // Red
-        this->setRadarObjectShape(RadarViewable::Dot);
+        this->setRadarObjectShape(RadarViewable::Shape::Dot);
         this->setRadarObjectScale(1.0f);
         
@@ -125,18 +125,18 @@
 
             //Check if any pawn is inside the shockwave and hit it with dammage proportional to the distance between explosion centre and pawn. Make sure, the same pawn is damaged only once.
-            for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+            for (Pawn* pawn : ObjectList<Pawn>())
             {
-                Vector3 distanceVector = it->getWorldPosition()-this->getWorldPosition();
+                Vector3 distanceVector = pawn->getWorldPosition()-this->getWorldPosition();
                  //orxout(debug_output) << "Found Pawn:" << it->getWorldPosition() << endl;
                 if(distanceVector.length()< forceSphereRadius_)
                 {
                     //orxout(debug_output) << "Force sphere radius is: " << forceSphereRadius_ << " Distance to Pawn is: " << distanceVector.length();
-                    if (std::find(victimsAlreadyDamaged_.begin(),victimsAlreadyDamaged_.end(),*it) == victimsAlreadyDamaged_.end())
+                    if (std::find(victimsAlreadyDamaged_.begin(),victimsAlreadyDamaged_.end(),pawn) == victimsAlreadyDamaged_.end())
                     {
                         //orxout(debug_output) << "Found Pawn to damage: " << it->getWorldPosition() << endl;
                         float damage = FORCE_FIELD_EXPLOSION_DAMMAGE*(1-distanceVector.length()/EXPLOSION_RADIUS);
                         //orxout(debug_output) << "Damage: " << damage << endl;
-                        it->hit(shooter_, it->getWorldPosition(), NULL, damage, 0,0);
-                        victimsAlreadyDamaged_.push_back(*it);
+                        pawn->hit(shooter_, pawn->getWorldPosition(), nullptr, damage, 0,0);
+                        victimsAlreadyDamaged_.push_back(pawn);
                     }
                 }
Index: code/trunk/src/modules/weapons/projectiles/GravityBombField.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/GravityBombField.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/GravityBombField.h	(revision 11071)
@@ -39,5 +39,5 @@
     GravityBombField(Context* context);
     virtual ~GravityBombField();
-    virtual void tick(float dt);
+    virtual void tick(float dt) override;
     virtual void destroy();
 
Index: code/trunk/src/modules/weapons/projectiles/IceGunProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/IceGunProjectile.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/IceGunProjectile.cc	(revision 11071)
@@ -120,5 +120,5 @@
             Vector3 offset = this->getWorldPosition() - otherObject->getWorldPosition();
             freezer->setPosition(Vector3(0,0,0));
-            freezer->translate(offset, WorldEntity::World);
+            freezer->translate(offset, WorldEntity::TransformSpace::World);
             // Start the freezing effect.
             freezer->startFreezing();
Index: code/trunk/src/modules/weapons/projectiles/IceGunProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/IceGunProjectile.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/IceGunProjectile.h	(revision 11071)
@@ -62,5 +62,5 @@
 
         protected:
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
             static const float particleDestructionDelay_;
         private:
Index: code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc	(revision 11071)
@@ -48,5 +48,5 @@
         this->textureIndex_ = 1;
         this->setMass(2);
-        this->setCollisionType(Dynamic);
+        this->setCollisionType(CollisionType::Dynamic);
         this->maxTextureIndex_ = 8;
         this->textureTimer_.setTimer(0.01f, true, createExecutor(createFunctor(&LightningGunProjectile::changeTexture, this)));
Index: code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.h	(revision 11071)
@@ -58,5 +58,5 @@
             virtual ~LightningGunProjectile() {}
 
-            virtual void setMaterial(const std::string& material);
+            virtual void setMaterial(const std::string& material) override;
 
         private:
Index: code/trunk/src/modules/weapons/projectiles/MineProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/MineProjectile.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/MineProjectile.cc	(revision 11071)
@@ -112,5 +112,5 @@
         modelRing4_->yaw(Degree(270));
 
-        emitter_ = NULL;
+        emitter_ = nullptr;
 
         if (GameMode::isMaster())
@@ -121,5 +121,5 @@
             this->enableCollisionCallback();
             this->setCollisionResponse(true);
-            this->setCollisionType(Dynamic);
+            this->setCollisionType(CollisionType::Dynamic);
 
             // Create a sphere collision shape and attach it to the projectile.
@@ -217,10 +217,10 @@
             {
                 // Damage all pawns within the damage radius
-                for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+                for (Pawn* pawn : ObjectList<Pawn>())
                 {
-                    Vector3 distanceVector = it->getWorldPosition()-this->getWorldPosition();
+                    Vector3 distanceVector = pawn->getWorldPosition()-this->getWorldPosition();
                     if(distanceVector.length()< damageRadius_)
                     {
-                        it->hit(this->getShooter(), it->getWorldPosition(), NULL, this->getDamage(), this->getHealthDamage(), this->getShieldDamage());
+                        pawn->hit(this->getShooter(), pawn->getWorldPosition(), nullptr, this->getDamage(), this->getHealthDamage(), this->getShieldDamage());
                     }
                 }
Index: code/trunk/src/modules/weapons/projectiles/MineProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/MineProjectile.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/MineProjectile.h	(revision 11071)
@@ -57,8 +57,8 @@
             virtual ~MineProjectile();
 
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void setMaxTimeUntilExplosion(float maxTimeUntilExplosion);
-            virtual void setTimeUntilActivation(float timeUntilActivation);
+            void setMaxTimeUntilExplosion(float maxTimeUntilExplosion);
+            void setTimeUntilActivation(float timeUntilActivation);
         protected:
             static const float triggerRadius_;
@@ -84,7 +84,7 @@
             WeakPtr<DistanceTrigger> distanceTrigger_;
 
-            virtual void destructionEffect();
-            virtual void allowExplosion();
-            virtual void explode();
+            void destructionEffect();
+            void allowExplosion();
+            void explode();
     };
 }
Index: code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc	(revision 11071)
@@ -58,5 +58,5 @@
         }
         else
-            this->particles_ = 0;
+            this->particles_ = nullptr;
     }
 
Index: code/trunk/src/modules/weapons/projectiles/ParticleProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/ParticleProjectile.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/ParticleProjectile.h	(revision 11071)
@@ -53,5 +53,5 @@
             ParticleProjectile(Context* context);
             virtual ~ParticleProjectile();
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
         private:
Index: code/trunk/src/modules/weapons/projectiles/Projectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Projectile.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/Projectile.cc	(revision 11071)
@@ -57,5 +57,5 @@
             this->enableCollisionCallback();
             this->setCollisionResponse(false);
-            this->setCollisionType(Dynamic);
+            this->setCollisionType(CollisionType::Dynamic);
 
             // Create a sphere collision shape and attach it to the projectile.
@@ -94,5 +94,5 @@
     void Projectile::setCollisionShapeRadius(float radius)
     {
-        if (collisionShape_ != NULL && radius > 0)
+        if (collisionShape_ != nullptr && radius > 0)
         {
             collisionShape_->setRadius(radius);
Index: code/trunk/src/modules/weapons/projectiles/Projectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Projectile.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/Projectile.h	(revision 11071)
@@ -64,6 +64,6 @@
             void setConfigValues();
 
-            virtual void tick(float dt);
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
+            virtual void tick(float dt) override;
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
 
         protected:
Index: code/trunk/src/modules/weapons/projectiles/Rocket.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Rocket.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/Rocket.cc	(revision 11071)
@@ -70,5 +70,5 @@
         if (GameMode::isMaster())
         {
-            this->setCollisionType(WorldEntity::Kinematic);
+            this->setCollisionType(WorldEntity::CollisionType::Kinematic);
             this->setVelocity(0,0,-100);
 
@@ -92,5 +92,5 @@
             this->enableCollisionCallback();
             this->setCollisionResponse(false);
-            this->setCollisionType(Kinematic);
+            this->setCollisionType(CollisionType::Kinematic);
 
             // Add collision shape
@@ -117,6 +117,6 @@
         else
         {
-            this->defSndWpnEngine_ = 0;
-            this->defSndWpnLaunch_ = 0;
+            this->defSndWpnEngine_ = nullptr;
+            this->defSndWpnLaunch_ = nullptr;
         }
 
@@ -128,5 +128,5 @@
 
         this->setRadarObjectColour(ColourValue(1.0, 0.5, 0.0)); // orange
-        this->setRadarObjectShape(RadarViewable::Triangle);
+        this->setRadarObjectShape(RadarViewable::Shape::Triangle);
         this->setRadarObjectScale(0.5f);
     }
Index: code/trunk/src/modules/weapons/projectiles/Rocket.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Rocket.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/Rocket.h	(revision 11071)
@@ -62,17 +62,17 @@
             virtual ~Rocket();
 
-            virtual void tick(float dt); //!< Defines which actions the Rocket has to take in each tick.
+            virtual void tick(float dt) override; //!< Defines which actions the Rocket has to take in each tick.
 
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
-            virtual void destroyObject(void);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
+            virtual void destroyObject(void) override;
             void destructionEffect();
 
-            virtual void moveFrontBack(const Vector2& value) {}
-            virtual void moveRightLeft(const Vector2& value) {}
-            virtual void moveUpDown(const Vector2& value) {}
+            virtual void moveFrontBack(const Vector2& value) override {}
+            virtual void moveRightLeft(const Vector2& value) override {}
+            virtual void moveUpDown(const Vector2& value) override {}
 
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
 
             /**
@@ -114,12 +114,12 @@
                 { this->rotateRoll(Vector2(value, 0)); }
 
-            virtual void setShooter(Pawn* shooter);
+            virtual void setShooter(Pawn* shooter) override;
 
-            virtual void fired(unsigned int firemode);
+            virtual void fired(unsigned int firemode) override;
 
             /**
             @brief Set the maximum lifetime of the rocket.
             */
-            virtual void setMaxFuel(float fuel);
+            void setMaxFuel(float fuel);
             /**
             @brief Get the maximum lifetime of the rocket.
@@ -127,5 +127,5 @@
             inline float getMaxFuel() const
                 { return lifetime_; }
-            virtual float getFuel() const;
+            float getFuel() const;
 
         private:
Index: code/trunk/src/modules/weapons/projectiles/RocketOld.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/RocketOld.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/RocketOld.cc	(revision 11071)
@@ -70,5 +70,5 @@
         if (GameMode::isMaster())
         {
-            this->setCollisionType(WorldEntity::Kinematic);
+            this->setCollisionType(WorldEntity::CollisionType::Kinematic);
             this->setVelocity(0,0,-100);
 
@@ -92,5 +92,5 @@
             this->enableCollisionCallback();
             this->setCollisionResponse(false);
-            this->setCollisionType(Kinematic);
+            this->setCollisionType(CollisionType::Kinematic);
 
             // Add collision shape
@@ -117,6 +117,6 @@
         else
         {
-            this->defSndWpnEngine_ = 0;
-            this->defSndWpnLaunch_ = 0;
+            this->defSndWpnEngine_ = nullptr;
+            this->defSndWpnLaunch_ = nullptr;
         }
 
@@ -128,5 +128,5 @@
 
         this->setRadarObjectColour(ColourValue(1.0, 0.5, 0.0)); // orange
-        this->setRadarObjectShape(RadarViewable::Triangle);
+        this->setRadarObjectShape(RadarViewable::Shape::Triangle);
         this->setRadarObjectScale(0.5f);
     }
Index: code/trunk/src/modules/weapons/projectiles/RocketOld.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/RocketOld.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/RocketOld.h	(revision 11071)
@@ -62,17 +62,17 @@
             virtual ~RocketOld();
 
-            virtual void tick(float dt); //!< Defines which actions the RocketOld has to take in each tick.
+            virtual void tick(float dt) override; //!< Defines which actions the RocketOld has to take in each tick.
 
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
-            virtual void destroyObject(void);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
+            virtual void destroyObject(void) override;
             void destructionEffect();
 
-            virtual void moveFrontBack(const Vector2& value) {}
-            virtual void moveRightLeft(const Vector2& value) {}
-            virtual void moveUpDown(const Vector2& value) {}
+            virtual void moveFrontBack(const Vector2& value) override {}
+            virtual void moveRightLeft(const Vector2& value) override {}
+            virtual void moveUpDown(const Vector2& value) override {}
 
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
 
             /**
@@ -114,7 +114,7 @@
                 { this->rotateRoll(Vector2(value, 0)); }
 
-            virtual void setShooter(Pawn* shooter);
+            virtual void setShooter(Pawn* shooter) override;
 
-            virtual void fired(unsigned int firemode);
+            virtual void fired(unsigned int firemode) override;
 
         private:
Index: code/trunk/src/modules/weapons/projectiles/SimpleRocket.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/SimpleRocket.cc	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/SimpleRocket.cc	(revision 11071)
@@ -70,5 +70,5 @@
         if (GameMode::isMaster())
         {
-            this->setCollisionType(WorldEntity::Kinematic);
+            this->setCollisionType(WorldEntity::CollisionType::Kinematic);
             this->fuel_ = true;
 
@@ -87,5 +87,5 @@
             this->enableCollisionCallback();
             this->setCollisionResponse(false);
-            this->setCollisionType(Kinematic);
+            this->setCollisionType(CollisionType::Kinematic);
 
             // Add collision shape.
@@ -101,5 +101,5 @@
 
         this->setRadarObjectColour(ColourValue(1.0, 1.0, 0.0)); // yellow
-        this->setRadarObjectShape(RadarViewable::Triangle);
+        this->setRadarObjectShape(RadarViewable::Shape::Triangle);
         this->setRadarObjectScale(0.5f);
     }
Index: code/trunk/src/modules/weapons/projectiles/SimpleRocket.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/SimpleRocket.h	(revision 11056)
+++ code/trunk/src/modules/weapons/projectiles/SimpleRocket.h	(revision 11071)
@@ -62,17 +62,17 @@
             SimpleRocket(Context* context);
             virtual ~SimpleRocket();
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
 
             void disableFire(); //!< Method to disable the fire and stop all acceleration
 
-            virtual void moveFrontBack(const Vector2& value){}
-            virtual void moveRightLeft(const Vector2& value){}
-            virtual void moveUpDown(const Vector2& value){}
+            virtual void moveFrontBack(const Vector2& value) override{}
+            virtual void moveRightLeft(const Vector2& value) override{}
+            virtual void moveUpDown(const Vector2& value) override{}
 
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
             void setDestroy();
 
@@ -115,5 +115,5 @@
                 { this->rotateRoll(Vector2(value, 0)); }
 
-            virtual void setShooter(Pawn* shooter);
+            virtual void setShooter(Pawn* shooter) override;
 
             inline bool hasFuel() const
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 11071)
@@ -57,6 +57,6 @@
             virtual ~EnergyDrink() {}
 
-            virtual void fire();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void fire() override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         private:
Index: code/trunk/src/modules/weapons/weaponmodes/FusionFire.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FusionFire.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/FusionFire.h	(revision 11071)
@@ -54,5 +54,5 @@
             virtual ~FusionFire() {}
 
-            virtual void fire();
+            virtual void fire() override;
 
         private:
Index: code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.h	(revision 11071)
@@ -34,5 +34,5 @@
             virtual ~GravityBombFire();
 
-            virtual void fire();
+            virtual void fire() override;
 
         private:
Index: code/trunk/src/modules/weapons/weaponmodes/HsW01.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/HsW01.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/HsW01.h	(revision 11071)
@@ -56,6 +56,6 @@
             virtual ~HsW01();
 
-            virtual void fire();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void fire() override;
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         protected:
Index: code/trunk/src/modules/weapons/weaponmodes/IceGun.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/IceGun.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/IceGun.h	(revision 11071)
@@ -54,6 +54,6 @@
             virtual ~IceGun();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void fire();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void fire() override;
             
             inline void setFreezeTime(float freezeTime)
Index: code/trunk/src/modules/weapons/weaponmodes/LaserFire.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/LaserFire.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/LaserFire.h	(revision 11071)
@@ -54,5 +54,5 @@
             virtual ~LaserFire() {}
 
-            virtual void fire();
+            virtual void fire() override;
 
         private:
Index: code/trunk/src/modules/weapons/weaponmodes/LightningGun.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/LightningGun.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/LightningGun.h	(revision 11071)
@@ -54,5 +54,5 @@
             virtual ~LightningGun();
 
-            virtual void fire();
+            virtual void fire() override;
 
        private:
Index: code/trunk/src/modules/weapons/weaponmodes/MineGun.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/MineGun.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/MineGun.h	(revision 11071)
@@ -59,6 +59,6 @@
             virtual ~MineGun();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void fire();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void fire() override;
 
             inline float getMaxTimeUntilExplosion() const
Index: code/trunk/src/modules/weapons/weaponmodes/RocketFire.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/RocketFire.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/RocketFire.h	(revision 11071)
@@ -54,7 +54,7 @@
             virtual ~RocketFire();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void fire();
+            virtual void fire() override;
             inline void setFuel(float fuel)
                 { this->fuel_ = fuel; }
Index: code/trunk/src/modules/weapons/weaponmodes/RocketFireOld.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/RocketFireOld.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/RocketFireOld.h	(revision 11071)
@@ -54,5 +54,5 @@
             virtual ~RocketFireOld();
 
-            virtual void fire();
+            virtual void fire() override;
 
         private:
Index: code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.h	(revision 11071)
@@ -53,5 +53,5 @@
             virtual ~SimpleRocketFire();
             void deactivateFire();
-            virtual void fire();
+            virtual void fire() override;
 
         private:
Index: code/trunk/src/modules/weapons/weaponmodes/SplitGun.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/SplitGun.h	(revision 11056)
+++ code/trunk/src/modules/weapons/weaponmodes/SplitGun.h	(revision 11071)
@@ -54,6 +54,6 @@
             virtual ~SplitGun();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void fire();
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void fire() override;
 
             inline void setNumberOfSplits(int numberOfSplits)
Index: code/trunk/src/orxonox/CameraManager.cc
===================================================================
--- code/trunk/src/orxonox/CameraManager.cc	(revision 11056)
+++ code/trunk/src/orxonox/CameraManager.cc	(revision 11071)
@@ -60,5 +60,5 @@
             return this->cameraList_.front();
         else
-            return 0;
+            return nullptr;
     }
 
@@ -93,5 +93,5 @@
                 this->cameraList_.front()->setFocus();
             else
-                this->useCamera(NULL);
+                this->useCamera(nullptr);
         }
         else
Index: code/trunk/src/orxonox/CameraManager.h
===================================================================
--- code/trunk/src/orxonox/CameraManager.h	(revision 11056)
+++ code/trunk/src/orxonox/CameraManager.h	(revision 11071)
@@ -59,5 +59,7 @@
 
         private:
-            CameraManager(const CameraManager&); // don't use
+            // non-copyable:
+            CameraManager(const CameraManager&) = delete;
+            CameraManager& operator=(const CameraManager&) = delete;
 
             std::list<Camera*>    cameraList_;
Index: code/trunk/src/orxonox/Level.cc
===================================================================
--- code/trunk/src/orxonox/Level.cc	(revision 11056)
+++ code/trunk/src/orxonox/Level.cc	(revision 11071)
@@ -30,4 +30,5 @@
 
 #include "util/Math.h"
+#include "util/SubString.h"
 #include "core/CoreIncludes.h"
 #include "core/Loader.h"
@@ -54,5 +55,5 @@
         this->registerVariables();
         this->xmlfilename_ = this->getFilename();
-        this->xmlfile_ = 0;
+        this->xmlfile_ = nullptr;
     }
 
@@ -105,8 +106,8 @@
     void Level::networkCallbackTemplatesChanged()
     {
-        for( std::set<std::string>::iterator it = this->networkTemplateNames_.begin(); it!=this->networkTemplateNames_.end(); ++it )
-        {
-            assert(Template::getTemplate(*it));
-            Template::getTemplate(*it)->applyOn(this);
+        for(const std::string& name : this->networkTemplateNames_)
+        {
+            assert(Template::getTemplate(name));
+            Template::getTemplate(name)->applyOn(this);
         }
     }
@@ -134,6 +135,6 @@
         //       objects alive when ~Level is called. This is the reason why we cannot directly destroy() the Plugins - instead we need
         //       to call destroyLater() to ensure that no instances from this plugin exist anymore.
-        for (std::list<PluginReference*>::iterator it = this->plugins_.begin(); it != this->plugins_.end(); ++it)
-            (*it)->destroyLater();
+        for (PluginReference* plugin : this->plugins_)
+            plugin->destroyLater();
         this->plugins_.clear();
     }
@@ -172,11 +173,11 @@
     {
         unsigned int i = 0;
-        for (std::list<BaseObject*>::const_iterator it = this->objects_.begin(); it != this->objects_.end(); ++it)
+        for (BaseObject* object : this->objects_)
         {
             if (i == index)
-                return (*it);
+                return object;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -195,5 +196,5 @@
             return this->lodInformation_.find(meshName)->second;
 
-        return 0;
+        return nullptr;
     }
 
@@ -207,5 +208,5 @@
     {
         orxout(internal_info) << "player left level (id: " << player->getClientID() << ", name: " << player->getName() << ')' << endl;
-        player->switchGametype(0);
+        player->switchGametype(nullptr);
     }
 }
Index: code/trunk/src/orxonox/Level.h
===================================================================
--- code/trunk/src/orxonox/Level.h	(revision 11056)
+++ code/trunk/src/orxonox/Level.h	(revision 11071)
@@ -37,4 +37,5 @@
 #include "core/BaseObject.h"
 #include "network/synchronisable/Synchronisable.h"
+#include "core/object/Context.h"
 #include "graphics/MeshLodInformation.h"
 
@@ -47,5 +48,5 @@
             virtual ~Level();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void playerEntered(PlayerInfo* player);
Index: code/trunk/src/orxonox/LevelInfo.cc
===================================================================
--- code/trunk/src/orxonox/LevelInfo.cc	(revision 11056)
+++ code/trunk/src/orxonox/LevelInfo.cc	(revision 11071)
@@ -106,7 +106,7 @@
     {
         SubString substr = SubString(tags, ",", " "); // Split the string into tags.
-        const std::vector<std::string>& strings = substr.getAllStrings();
-        for (std::vector<std::string>::const_iterator it = strings.begin(); it != strings.end(); it++)
-            this->addTag(*it, false);
+        const std::vector<std::string>& tokens = substr.getAllStrings();
+        for (const std::string& token : tokens)
+            this->addTag(token, false);
 
         this->tagsUpdated();
@@ -121,7 +121,7 @@
     {
         SubString substr = SubString(ships, ",", " "); // Split the string into tags.
-        const std::vector<std::string>& strings = substr.getAllStrings();
-        for(std::vector<std::string>::const_iterator it = strings.begin(); it != strings.end(); it++)
-            this->addStartingShip(*it, false);
+        const std::vector<std::string>& tokens = substr.getAllStrings();
+        for(const std::string& token : tokens)
+            this->addStartingShip(token, false);
 
         this->startingshipsUpdated();
Index: code/trunk/src/orxonox/LevelInfo.h
===================================================================
--- code/trunk/src/orxonox/LevelInfo.h	(revision 11056)
+++ code/trunk/src/orxonox/LevelInfo.h	(revision 11071)
@@ -207,5 +207,5 @@
             virtual ~LevelInfo();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Creates a LevelInfo object through XML.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Creates a LevelInfo object through XML.
 
             /**
Index: code/trunk/src/orxonox/LevelManager.cc
===================================================================
--- code/trunk/src/orxonox/LevelManager.cc	(revision 11056)
+++ code/trunk/src/orxonox/LevelManager.cc	(revision 11071)
@@ -78,7 +78,6 @@
     {
         // Delete all the LevelInfoItem objects because the LevelManager created them
-        std::set<LevelInfoItem*, LevelInfoCompare>::iterator it = availableLevels_.begin();
-        for (; it != availableLevels_.end(); ++it)
-            (*it)->destroy();
+        for (LevelInfoItem* info : availableLevels_)
+            info->destroy();
     }
 
@@ -154,5 +153,5 @@
         Get the currently active Level.
     @return
-        Returns a pointer to the currently active level or NULL if there currently are no active Levels.
+        Returns a pointer to the currently active level or nullptr if there currently are no active Levels.
     */
     Level* LevelManager::getActiveLevel()
@@ -161,5 +160,5 @@
             return this->levels_.front();
         else
-            return 0;
+            return nullptr;
     }
 
@@ -175,6 +174,6 @@
             this->levels_.front()->setActive(true);
             // Make every player enter the newly activated level.
-            for (std::map<unsigned int, PlayerInfo*>::const_iterator it = PlayerManager::getInstance().getClients().begin(); it != PlayerManager::getInstance().getClients().end(); ++it)
-                this->levels_.front()->playerEntered(it->second);
+            for (const auto& mapEntry : PlayerManager::getInstance().getClients())
+                this->levels_.front()->playerEntered(mapEntry.second);
         }
     }
@@ -218,5 +217,5 @@
     {
         if(index >= this->availableLevels_.size())
-            return NULL;
+            return nullptr;
 
         // If this index directly follows the last we can optimize a lot.
@@ -272,5 +271,5 @@
             if (it->find("old/") != 0)
             {
-                LevelInfoItem* info = NULL;
+                LevelInfoItem* info = nullptr;
 
                 // Load the LevelInfo object from the level file.
@@ -279,12 +278,12 @@
 
                 // Find the LevelInfo object we've just loaded (if there was one)
-                for(ObjectList<LevelInfo>::iterator item = ObjectList<LevelInfo>::begin(); item != ObjectList<LevelInfo>::end(); ++item)
-                    if(item->getXMLFilename() == *it)
-                        info = item->copy();
+                for(LevelInfo* levelInfo : ObjectList<LevelInfo>())
+                    if(levelInfo->getXMLFilename() == *it)
+                        info = levelInfo->copy();
 
                 // We don't need the loaded stuff anymore
                 Loader::getInstance().unload(&file);
 
-                if(info == NULL)
+                if(info == nullptr)
                 {
                     // Create a default LevelInfoItem object that merely contains the name
Index: code/trunk/src/orxonox/LevelManager.h
===================================================================
--- code/trunk/src/orxonox/LevelManager.h	(revision 11056)
+++ code/trunk/src/orxonox/LevelManager.h	(revision 11071)
@@ -109,5 +109,7 @@
 
         private:
-            LevelManager(const LevelManager&);
+            // non-copyable:
+            LevelManager(const LevelManager&) = delete;
+            LevelManager& operator=(const LevelManager&) = delete;
 
             void activateNextLevel(); //!< Activate the next level.
Index: code/trunk/src/orxonox/Main.h
===================================================================
--- code/trunk/src/orxonox/Main.h	(revision 11056)
+++ code/trunk/src/orxonox/Main.h	(revision 11071)
@@ -33,4 +33,6 @@
 #include "OrxonoxPrereqs.h"
 
+#include <string>
+
 namespace orxonox
 {
Index: code/trunk/src/orxonox/MoodManager.cc
===================================================================
--- code/trunk/src/orxonox/MoodManager.cc	(revision 11056)
+++ code/trunk/src/orxonox/MoodManager.cc	(revision 11071)
@@ -103,6 +103,6 @@
     /*static*/ void MoodListener::changedMood(const std::string& mood)
     {
-        for (ObjectList<MoodListener>::iterator it = ObjectList<MoodListener>::begin(); it; ++it)
-            it->moodChanged(mood);
+        for (MoodListener* listener : ObjectList<MoodListener>())
+            listener->moodChanged(mood);
     }
 }
Index: code/trunk/src/orxonox/PlayerManager.cc
===================================================================
--- code/trunk/src/orxonox/PlayerManager.cc	(revision 11056)
+++ code/trunk/src/orxonox/PlayerManager.cc	(revision 11071)
@@ -62,5 +62,5 @@
 
             // create new HumanPlayer instance
-            HumanPlayer* player = new HumanPlayer(0);
+            HumanPlayer* player = new HumanPlayer(nullptr);
             player->setClientID(clientID);
 
@@ -111,9 +111,9 @@
         else
         {
-            for (ObjectList<PlayerInfo>::iterator it = ObjectList<PlayerInfo>::begin(); it != ObjectList<PlayerInfo>::end(); ++it)
-                if (it->getClientID() == clientID)
-                    return (*it);
+            for (PlayerInfo* info : ObjectList<PlayerInfo>())
+                if (info->getClientID() == clientID)
+                    return info;
         }
-        return 0;
+        return nullptr;
     }
 }
Index: code/trunk/src/orxonox/PlayerManager.h
===================================================================
--- code/trunk/src/orxonox/PlayerManager.h	(revision 11056)
+++ code/trunk/src/orxonox/PlayerManager.h	(revision 11071)
@@ -50,6 +50,6 @@
                 { return this->clients_; }
 
-            void clientConnected(unsigned int clientID);
-            void clientDisconnected(unsigned int clientID);
+            virtual void clientConnected(unsigned int clientID) override;
+            virtual void clientDisconnected(unsigned int clientID) override;
             void disconnectAllClients();
 
Index: code/trunk/src/orxonox/Radar.cc
===================================================================
--- code/trunk/src/orxonox/Radar.cc	(revision 11056)
+++ code/trunk/src/orxonox/Radar.cc	(revision 11071)
@@ -49,13 +49,13 @@
 
     Radar::Radar()
-        : itFocus_(0)
-        , focus_(0)
+        : itFocus_(nullptr)
+        , focus_(nullptr)
         , objectTypeCounter_(0)
     {
         // TODO: make this mapping configurable. Maybe there's a possibility with self configured
         //       configValues..
-        this->objectTypes_["Asteroid"] = RadarViewable::Dot;
-        this->objectTypes_["SpaceShip"] = RadarViewable::Square;
-        this->objectTypes_["AsdfQwerty"] = RadarViewable::Triangle;
+        this->objectTypes_["Asteroid"] = RadarViewable::Shape::Dot;
+        this->objectTypes_["SpaceShip"] = RadarViewable::Shape::Square;
+        this->objectTypes_["AsdfQwerty"] = RadarViewable::Shape::Triangle;
 
         /*WorldEntity* object;
@@ -84,7 +84,7 @@
         this->radarObjects_.insert(rv);
         // iterate through all radarlisteners and notify them
-        for (ObjectList<RadarListener>::iterator itListener = ObjectList<RadarListener>::begin(); itListener; ++itListener)
-        {
-            (*itListener)->addObject(rv);
+        for (RadarListener* listener : ObjectList<RadarListener>())
+        {
+            listener->addObject(rv);
         }
     }
@@ -95,7 +95,7 @@
         this->radarObjects_.erase(rv);
         // iterate through all radarlisteners and notify them
-        for (ObjectList<RadarListener>::iterator itListener = ObjectList<RadarListener>::begin(); itListener; ++itListener)
-        {
-            (*itListener)->removeObject(rv);
+        for (RadarListener* listener : ObjectList<RadarListener>())
+        {
+            listener->removeObject(rv);
         }
     }
@@ -106,5 +106,5 @@
             return *(this->itFocus_);
         else
-            return 0;
+            return nullptr;
     }
 
@@ -113,5 +113,5 @@
         std::map<std::string, RadarViewable::Shape>::iterator it = this->objectTypes_.find(name);
         if (it == this->objectTypes_.end())
-            return this->objectTypes_[name] = RadarViewable::Square; // default, configure!!
+            return this->objectTypes_[name] = RadarViewable::Shape::Square; // default, configure!!
         else
             return this->objectTypes_[name];
@@ -126,11 +126,11 @@
         {
             // focus object was deleted, release focus
-            this->focus_ = 0;
-            this->itFocus_ = 0;
-        }
-
-        for (ObjectList<RadarListener>::iterator itListener = ObjectList<RadarListener>::begin(); itListener; ++itListener)
-        {
-            (*itListener)->radarTick(dt);
+            this->focus_ = nullptr;
+            this->itFocus_ = nullptr;
+        }
+
+        for (RadarListener* listener : ObjectList<RadarListener>())
+        {
+            listener->radarTick(dt);
         }
     }
@@ -138,9 +138,10 @@
     void Radar::cycleFocus()
     {
-        if (ObjectList<RadarViewable>::begin() == ObjectList<RadarViewable>::end())
+        ObjectList<RadarViewable> listRadarViewable;
+        if (listRadarViewable.size() == 0)
         {
             // list is empty
-            this->itFocus_ = 0;
-            this->focus_ = 0;
+            this->itFocus_ = nullptr;
+            this->focus_ = nullptr;
         }
 
@@ -156,7 +157,7 @@
             float nextDistance = FLT_MAX;
             float minimumDistance = FLT_MAX;
-            ObjectList<RadarViewable>::iterator itFallback = 0;
-
-            for (ObjectList<RadarViewable>::iterator it = ObjectList<RadarViewable>::begin(); it; ++it)
+            ObjectList<RadarViewable>::iterator itFallback = nullptr;
+
+            for (ObjectList<RadarViewable>::iterator it = listRadarViewable.begin(); it; ++it)
             {
                 if (*it == static_cast<RadarViewable*>(HumanController::getLocalControllerEntityAsPawn()))
@@ -191,6 +192,6 @@
     void Radar::releaseFocus()
     {
-        this->itFocus_ = 0;
-        this->focus_ = 0;
+        this->itFocus_ = nullptr;
+        this->focus_ = nullptr;
     }
 
@@ -200,7 +201,8 @@
         // iterate through all Radar Objects
         unsigned int i = 0;
-        for (ObjectList<RadarViewable>::iterator it = ObjectList<RadarViewable>::begin(); it; ++it, ++i)
-        {
-            orxout(debug_output) << i++ << ": " << (*it)->getRVWorldPosition() << endl;
+        for (RadarViewable* viewable : ObjectList<RadarViewable>())
+        {
+            orxout(debug_output) << i++ << ": " << viewable->getRVWorldPosition() << endl;
+            ++i;
         }
     }
@@ -208,7 +210,7 @@
     void Radar::radarObjectChanged(RadarViewable* rv)
     {
-        for (ObjectList<RadarListener>::iterator itListener = ObjectList<RadarListener>::begin(); itListener; ++itListener)
-        {
-          (*itListener)->objectChanged(rv);
+        for (RadarListener* listener : ObjectList<RadarListener>())
+        {
+            listener->objectChanged(rv);
         }
     }
Index: code/trunk/src/orxonox/Radar.h
===================================================================
--- code/trunk/src/orxonox/Radar.h	(revision 11056)
+++ code/trunk/src/orxonox/Radar.h	(revision 11071)
@@ -54,5 +54,5 @@
         virtual ~Radar();
 
-        virtual void tick(float dt);
+        virtual void tick(float dt) override;
 
         const RadarViewable* getFocus();
Index: code/trunk/src/orxonox/Scene.cc
===================================================================
--- code/trunk/src/orxonox/Scene.cc	(revision 11056)
+++ code/trunk/src/orxonox/Scene.cc	(revision 11071)
@@ -66,5 +66,5 @@
         this->bShadows_ = true;
         this->bDebugDrawPhysics_ = false;
-        this->debugDrawer_ = NULL;
+        this->debugDrawer_ = nullptr;
         this->soundReferenceDistance_ = 20.0;
         this->bIsUpdatingPhysics_ = false;
@@ -84,5 +84,5 @@
             this->rootSceneNode_ = this->sceneManager_->getRootSceneNode();
 
-            this->radar_ = 0;
+            this->radar_ = nullptr;
         }
 
@@ -92,9 +92,9 @@
         this->positiveWorldRange_ = Vector3::UNIT_SCALE *  defaultMaxWorldSize;
         this->gravity_ = Vector3::ZERO;
-        this->physicalWorld_   = 0;
-        this->solver_          = 0;
-        this->dispatcher_      = 0;
-        this->collisionConfig_ = 0;
-        this->broadphase_      = 0;
+        this->physicalWorld_   = nullptr;
+        this->solver_          = nullptr;
+        this->dispatcher_      = nullptr;
+        this->collisionConfig_ = nullptr;
+        this->broadphase_      = nullptr;
 
         this->registerVariables();
@@ -220,9 +220,8 @@
         {
             // Remove all WorldEntities and shove them to the queue since they would still like to be in a physical world.
-            for (std::set<WorldEntity*>::const_iterator it = this->physicalObjects_.begin();
-                it != this->physicalObjects_.end(); ++it)
+            for (WorldEntity* object : this->physicalObjects_)
             {
-                this->physicalWorld_->removeRigidBody((*it)->physicalBody_);
-                this->physicalObjectQueue_.insert(*it);
+                this->physicalWorld_->removeRigidBody(object->physicalBody_);
+                this->physicalObjectQueue_.insert(object);
             }
             this->physicalObjects_.clear();
@@ -234,9 +233,9 @@
             delete this->collisionConfig_;
             delete this->broadphase_;
-            this->physicalWorld_   = 0;
-            this->solver_          = 0;
-            this->dispatcher_      = 0;
-            this->collisionConfig_ = 0;
-            this->broadphase_      = 0;
+            this->physicalWorld_   = nullptr;
+            this->solver_          = nullptr;
+            this->dispatcher_      = nullptr;
+            this->collisionConfig_ = nullptr;
+            this->broadphase_      = nullptr;
         }
     }
@@ -256,9 +255,8 @@
             {
                 // Add all scheduled WorldEntities
-                for (std::set<WorldEntity*>::const_iterator it = this->physicalObjectQueue_.begin();
-                    it != this->physicalObjectQueue_.end(); ++it)
+                for (WorldEntity* object : this->physicalObjectQueue_)
                 {
-                    this->physicalWorld_->addRigidBody((*it)->physicalBody_);
-                    this->physicalObjects_.insert(*it);
+                    this->physicalWorld_->addRigidBody(object->physicalBody_);
+                    this->physicalObjects_.insert(object);
                 }
                 this->physicalObjectQueue_.clear();
@@ -321,11 +319,11 @@
     {
         unsigned int i = 0;
-        for (std::list<BaseObject*>::const_iterator it = this->objects_.begin(); it != this->objects_.end(); ++it)
+        for (BaseObject* object : this->objects_)
         {
             if (i == index)
-                return (*it);
+                return object;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -391,6 +389,6 @@
     /*static*/ void Scene::consoleCommand_debugDrawPhysics(bool bDraw, bool bFill, float fillAlpha)
     {
-        for (ObjectListIterator<Scene> it = ObjectList<Scene>::begin(); it != ObjectList<Scene>::end(); ++it)
-            it->setDebugDrawPhysics(bDraw, bFill, fillAlpha);
+        for (Scene* scene : ObjectList<Scene>())
+            scene->setDebugDrawPhysics(bDraw, bFill, fillAlpha);
     }
 }
Index: code/trunk/src/orxonox/Scene.h
===================================================================
--- code/trunk/src/orxonox/Scene.h	(revision 11056)
+++ code/trunk/src/orxonox/Scene.h	(revision 11071)
@@ -40,4 +40,5 @@
 #include "util/OgreForwardRefs.h"
 #include "core/BaseObject.h"
+#include "core/object/Context.h"
 #include "network/synchronisable/Synchronisable.h"
 #include "tools/interfaces/Tickable.h"
@@ -51,5 +52,5 @@
             virtual ~Scene();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             void registerVariables();
 
@@ -79,7 +80,7 @@
                 { return this->radar_; }
 
-            inline virtual uint32_t getSceneID() const { return this->getObjectID(); }
+            virtual inline uint32_t getSceneID() const override { return this->getObjectID(); }
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
         private:
@@ -111,5 +112,5 @@
         public:
             inline bool hasPhysics() const
-                { return this->physicalWorld_ != 0; }
+                { return this->physicalWorld_ != nullptr; }
             void setPhysicalWorld(bool wantsPhysics);
 
Index: code/trunk/src/orxonox/Test.cc
===================================================================
--- code/trunk/src/orxonox/Test.cc	(revision 11056)
+++ code/trunk/src/orxonox/Test.cc	(revision 11071)
@@ -54,9 +54,9 @@
     registerMemberNetworkFunction( Test, printBlaBla );
 
-    Test* Test::instance_ = 0;
+    Test* Test::instance_ = nullptr;
 
     Test::Test(Context* context) : BaseObject(context), Synchronisable(context)
     {
-        assert(instance_==0);
+        assert(instance_==nullptr);
         instance_=this;
         RegisterObject ( Test );
@@ -64,10 +64,10 @@
         registerVariables();
         setSyncMode(0x3);
-        this->pointer_ = 0;
+        this->pointer_ = nullptr;
     }
 
     Test::~Test()
     {
-        instance_=0;
+        instance_=nullptr;
     }
 
Index: code/trunk/src/orxonox/chat/ChatHistory.cc
===================================================================
--- code/trunk/src/orxonox/chat/ChatHistory.cc	(revision 11056)
+++ code/trunk/src/orxonox/chat/ChatHistory.cc	(revision 11071)
@@ -30,4 +30,5 @@
 #include "core/singleton/ScopedSingletonIncludes.h"
 #include "core/ConfigurablePaths.h"
+#include "core/CoreIncludes.h"
 
 #ifndef CHATTEST
@@ -159,11 +160,7 @@
   void ChatHistory::debug_printhist()
   {
-    /* create deque iterator */
-    std::deque<std::string>::iterator it;
-
     /* output all the strings */
-    for( it = this->hist_buffer.begin(); it != this->hist_buffer.end();
-      ++it )
-      orxout(debug_output) << *it << endl;
+    for( const std::string& hist : this->hist_buffer )
+      orxout(debug_output) << hist << endl;
 
     /* output size */
Index: code/trunk/src/orxonox/chat/ChatHistory.h
===================================================================
--- code/trunk/src/orxonox/chat/ChatHistory.h	(revision 11056)
+++ code/trunk/src/orxonox/chat/ChatHistory.h	(revision 11071)
@@ -82,5 +82,5 @@
        * \param senderID Identification number of the sender
        */
-      virtual void incomingChat(const std::string& message, const std::string& name);
+      virtual void incomingChat(const std::string& message, const std::string& name) override;
 
       /** Synchronize logfile onto the hard drive
Index: code/trunk/src/orxonox/chat/ChatInputHandler.cc
===================================================================
--- code/trunk/src/orxonox/chat/ChatInputHandler.cc	(revision 11056)
+++ code/trunk/src/orxonox/chat/ChatInputHandler.cc	(revision 11071)
@@ -79,5 +79,5 @@
     this->inpbuf = new InputBuffer();
     this->disp_offset = 0;
-    assert( this->inpbuf != NULL );
+    assert( this->inpbuf != nullptr );
 
     /* generate chatbox ui and chatbox-inputonly ui */
Index: code/trunk/src/orxonox/chat/ChatInputHandler.h
===================================================================
--- code/trunk/src/orxonox/chat/ChatInputHandler.h	(revision 11056)
+++ code/trunk/src/orxonox/chat/ChatInputHandler.h	(revision 11071)
@@ -125,5 +125,5 @@
        * history window of the full chat window)
        */
-      void incomingChat(const std::string& message, const std::string& name);
+      virtual void incomingChat(const std::string& message, const std::string& name) override;
 
       /** \param full true means show full chat window with history,
Index: code/trunk/src/orxonox/chat/ChatManager.cc
===================================================================
--- code/trunk/src/orxonox/chat/ChatManager.cc	(revision 11056)
+++ code/trunk/src/orxonox/chat/ChatManager.cc	(revision 11071)
@@ -107,6 +107,6 @@
 
         // notify all listeners
-        for (ObjectList<ChatListener>::iterator it = ObjectList<ChatListener>::begin(); it != ObjectList<ChatListener>::end(); ++it)
-            it->incomingChat(text, name);
+        for (ChatListener* listener : ObjectList<ChatListener>())
+            listener->incomingChat(text, name);
     }
 
Index: code/trunk/src/orxonox/chat/ChatManager.h
===================================================================
--- code/trunk/src/orxonox/chat/ChatManager.h	(revision 11056)
+++ code/trunk/src/orxonox/chat/ChatManager.h	(revision 11071)
@@ -47,5 +47,5 @@
         public:
             ChatManager();
-            virtual ~ChatManager() {}
+            virtual ~ChatManager() = default;
 
             static void message(const std::string& message, unsigned int targetID = NETWORK_PEER_ID_BROADCAST);
@@ -53,7 +53,9 @@
 
         protected:
-            ChatManager(const ChatManager&);
+            // non-copyable:
+            ChatManager(const ChatManager&) = delete;
+            ChatManager& operator=(const ChatManager&) = delete;
 
-            virtual void incomingChat(const std::string& message, unsigned int sourceID);
+            virtual void incomingChat(const std::string& message, unsigned int sourceID) override;
 
             static ChatManager* singletonPtr_s;
Index: code/trunk/src/orxonox/collisionshapes/CollisionShape.cc
===================================================================
--- code/trunk/src/orxonox/collisionshapes/CollisionShape.cc	(revision 11056)
+++ code/trunk/src/orxonox/collisionshapes/CollisionShape.cc	(revision 11071)
@@ -57,7 +57,7 @@
         RegisterObject(CollisionShape);
 
-        this->parent_ = 0;
+        this->parent_ = nullptr;
         this->parentID_ = OBJECTID_UNKNOWN;
-        this->collisionShape_ = 0;
+        this->collisionShape_ = nullptr;
         this->position_ = Vector3::ZERO;
         this->orientation_ = Quaternion::IDENTITY;
@@ -154,5 +154,5 @@
     void CollisionShape::notifyDetached()
     {
-        this->parent_ = 0;
+        this->parent_ = nullptr;
         this->parentID_ = OBJECTID_UNKNOWN;
     }
Index: code/trunk/src/orxonox/collisionshapes/CollisionShape.h
===================================================================
--- code/trunk/src/orxonox/collisionshapes/CollisionShape.h	(revision 11056)
+++ code/trunk/src/orxonox/collisionshapes/CollisionShape.h	(revision 11071)
@@ -61,5 +61,5 @@
             virtual ~CollisionShape();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             /**
@@ -181,5 +181,5 @@
 
             btCollisionShape*       collisionShape_; //!< The bullet collision shape of this CollisionShape.
-            CompoundCollisionShape* parent_; //!< The CompoundCollisionShape this CollisionShape belongs to, NULL if it doesn't belong to one.
+            CompoundCollisionShape* parent_; //!< The CompoundCollisionShape this CollisionShape belongs to, nullptr if it doesn't belong to one.
             unsigned int            parentID_; //!< The objectID of the parent of this CollisionShape, which can either be a CompoundCollisionShape or a WorldEntity.
 
Index: code/trunk/src/orxonox/collisionshapes/CompoundCollisionShape.cc
===================================================================
--- code/trunk/src/orxonox/collisionshapes/CompoundCollisionShape.cc	(revision 11056)
+++ code/trunk/src/orxonox/collisionshapes/CompoundCollisionShape.cc	(revision 11071)
@@ -65,17 +65,16 @@
         {
             // Delete all children
-            for (std::map<CollisionShape*, btCollisionShape*>::iterator it = this->attachedShapes_.begin();
-                it != this->attachedShapes_.end(); ++it)
+            for (const auto& mapEntry : this->attachedShapes_)
             {
                 // make sure that the child doesn't want to detach itself --> speedup because of the missing update
-                it->first->notifyDetached();
-                it->first->destroy();
-                if (this->collisionShape_ == it->second)
-                    this->collisionShape_ = NULL; // don't destroy it twice
+                mapEntry.first->notifyDetached();
+                mapEntry.first->destroy();
+                if (this->collisionShape_ == mapEntry.second)
+                    this->collisionShape_ = nullptr; // don't destroy it twice
             }
 
             delete this->compoundShape_;
             if (this->collisionShape_ == this->compoundShape_)
-                this->collisionShape_ = NULL; // don't destroy it twice
+                this->collisionShape_ = nullptr; // don't destroy it twice
         }
     }
@@ -96,5 +95,5 @@
     void CompoundCollisionShape::attach(CollisionShape* shape)
     {
-        // If either the input shape is NULL or we try to attach the CollisionShape to itself.
+        // If either the input shape is nullptr or we try to attach the CollisionShape to itself.
         if (!shape || static_cast<CollisionShape*>(this) == shape)
             return;
@@ -197,16 +196,16 @@
     void CompoundCollisionShape::updatePublicShape()
     {
-        btCollisionShape* primitive = 0; // The primitive shape, if there is one.
+        btCollisionShape* primitive = nullptr; // The primitive shape, if there is one.
         bool bPrimitive = true; // Whether the CompoundCollisionShape has just one non-empty CollisionShape. And that shape also has no transformation.
         bool bEmpty = true; // Whether the CompoundCollisionShape is empty.
         // Iterate over all CollisionShapes that belong to this CompoundCollisionShape.
-        for (std::map<CollisionShape*, btCollisionShape*>::const_iterator it = this->attachedShapes_.begin(); it != this->attachedShapes_.end(); ++it)
+        for (const auto& mapEntry : this->attachedShapes_)
         {
             // TODO: Make sure this is correct.
-            if (it->second)
+            if (mapEntry.second)
             {
                 bEmpty = false;
-                if (!it->first->hasTransform() && bPrimitive)
-                    primitive = it->second;
+                if (!mapEntry.first->hasTransform() && bPrimitive)
+                    primitive = mapEntry.second;
                 else
                 {
@@ -221,7 +220,7 @@
         {
             // If there was none all along, nothing needs to be changed.
-            if (this->collisionShape_ == 0)
+            if (this->collisionShape_ == nullptr)
                 return;
-            this->collisionShape_ = 0;
+            this->collisionShape_ = nullptr;
         }
         // If the CompoundCollisionShape is just a primitive.
@@ -247,11 +246,11 @@
     {
         unsigned int i = 0;
-        for (std::map<CollisionShape*, btCollisionShape*>::const_iterator it = this->attachedShapes_.begin(); it != this->attachedShapes_.end(); ++it)
+        for (const auto& mapEntry : this->attachedShapes_)
         {
             if (i == index)
-                return it->first;
+                return mapEntry.first;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -267,6 +266,6 @@
         std::vector<CollisionShape*> shapes;
         // Iterate through all attached CollisionShapes and add them to the list of shapes.
-        for(std::map<CollisionShape*, btCollisionShape*>::iterator it = this->attachedShapes_.begin(); it != this->attachedShapes_.end(); it++)
-            shapes.push_back(it->first);
+        for(const auto& mapEntry : this->attachedShapes_)
+            shapes.push_back(mapEntry.first);
 
         // Delete the compound shape and create a new one.
@@ -275,7 +274,6 @@
 
         // Re-attach all CollisionShapes.
-        for(std::vector<CollisionShape*>::iterator it = shapes.begin(); it != shapes.end(); it++)
-        {
-            CollisionShape* shape = *it;
+        for(CollisionShape* shape : shapes)
+        {
             shape->setScale3D(this->getScale3D());
             // Only actually attach if we didn't pick a CompoundCollisionShape with no content.
Index: code/trunk/src/orxonox/collisionshapes/CompoundCollisionShape.h
===================================================================
--- code/trunk/src/orxonox/collisionshapes/CompoundCollisionShape.h	(revision 11056)
+++ code/trunk/src/orxonox/collisionshapes/CompoundCollisionShape.h	(revision 11071)
@@ -61,5 +61,5 @@
             virtual ~CompoundCollisionShape();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void attach(CollisionShape* shape);
@@ -70,10 +70,10 @@
             void updateAttachedShape(CollisionShape* shape);
 
-            virtual void changedScale();
+            virtual void changedScale() override;
 
         private:
             void updatePublicShape();
-            inline virtual btCollisionShape* createNewShape() const
-                { assert(false); return 0; }
+            virtual inline btCollisionShape* createNewShape() const override
+                { assert(false); return nullptr; }
 
             btCompoundShape* compoundShape_;
Index: code/trunk/src/orxonox/collisionshapes/WorldEntityCollisionShape.cc
===================================================================
--- code/trunk/src/orxonox/collisionshapes/WorldEntityCollisionShape.cc	(revision 11056)
+++ code/trunk/src/orxonox/collisionshapes/WorldEntityCollisionShape.cc	(revision 11071)
@@ -43,5 +43,5 @@
         RegisterObject(WorldEntityCollisionShape);
 
-        this->worldEntityOwner_ = NULL;
+        this->worldEntityOwner_ = nullptr;
         // suppress synchronisation
         this->setSyncMode(ObjectDirection::None);
@@ -54,5 +54,5 @@
         CollisionShape::updateParent();
 
-        assert(this->worldEntityOwner_ != 0);
+        assert(this->worldEntityOwner_ != nullptr);
         this->worldEntityOwner_->notifyCollisionShapeChanged();
     }
Index: code/trunk/src/orxonox/collisionshapes/WorldEntityCollisionShape.h
===================================================================
--- code/trunk/src/orxonox/collisionshapes/WorldEntityCollisionShape.h	(revision 11056)
+++ code/trunk/src/orxonox/collisionshapes/WorldEntityCollisionShape.h	(revision 11071)
@@ -46,8 +46,8 @@
 
         protected:
-            virtual void updateParent();
+            virtual void updateParent() override;
 
         private:
-            void parentChanged();
+            virtual void parentChanged() override;
 
             WorldEntity* worldEntityOwner_;
Index: code/trunk/src/orxonox/controllers/AIController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/AIController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/AIController.cc	(revision 11071)
@@ -249,5 +249,5 @@
             }
             else
-                this->setPreviousMode();//If bot dies -> getControllableEntity == NULL -> get out of ROCKET mode
+                this->setPreviousMode();//If bot dies -> getControllableEntity == nullptr -> get out of ROCKET mode
         }//END_OF ROCKET MODE
 
Index: code/trunk/src/orxonox/controllers/AIController.h
===================================================================
--- code/trunk/src/orxonox/controllers/AIController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/AIController.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~AIController();
 
-            virtual void tick(float dt); //<! Carrying out the targets set in action().
+            virtual void tick(float dt) override; //<! Carrying out the targets set in action().
 
         protected:
Index: code/trunk/src/orxonox/controllers/ActionpointController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/ActionpointController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ActionpointController.cc	(revision 11071)
@@ -339,5 +339,5 @@
             inLoop = this->bInLoop_;
 
-            Action::Value value;
+            Action value;
             
             if ( actionName == "FIGHT" )
@@ -371,8 +371,8 @@
             return this->actionpoints_[index];
         else
-            return 0;
+            return nullptr;
     }
     //XML method
-    Action::Value ActionpointController::getAction ()
+    Action ActionpointController::getAction ()
     {
         return this->action_;
@@ -401,10 +401,10 @@
     }
     //XML method
-    void ActionpointController::setAction (Action::Value action)
+    void ActionpointController::setAction (Action action)
     {
         this->action_ = action;
     }
     //set action and target/protect
-    void ActionpointController::setAction (Action::Value action, ControllableEntity* target)
+    void ActionpointController::setAction (Action action, ControllableEntity* target)
     {
         if (!this || !this->getControllableEntity())
@@ -423,5 +423,5 @@
     }
     //set action and target position
-    void ActionpointController::setAction (Action::Value action, const Vector3& target)
+    void ActionpointController::setAction (Action action, const Vector3& target)
     {
         if (!this || !this->getControllableEntity())
@@ -434,5 +434,5 @@
     }
     //set action and target position and orientation
-    void ActionpointController::setAction (Action::Value action, const Vector3& target,  const Quaternion& orient )
+    void ActionpointController::setAction (Action action, const Vector3& target,  const Quaternion& orient )
     {
         if (!this || !this->getControllableEntity())
@@ -476,5 +476,5 @@
                 return;
 
-            this->setTarget(0);
+            this->setTarget(nullptr);
             this->setTargetPosition(this->getControllableEntity()->getWorldPosition());
             this->action_ = Action::NONE;
@@ -506,11 +506,11 @@
                 if (targetName == "")
                     break;
-                for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
-                {
-                    if (!this || !this->getControllableEntity())
-                        return;
-                    if (CommonController::getName(*itP) == targetName)
+                for (Pawn* pawn : ObjectList<Pawn>())
+                {
+                    if (!this || !this->getControllableEntity())
+                        return;
+                    if (CommonController::getName(pawn) == targetName)
                     {
-                        this->setTarget (static_cast<ControllableEntity*>(*itP));
+                        this->setTarget (static_cast<ControllableEntity*>(pawn));
                     }
                 }
@@ -541,9 +541,9 @@
                 if (protectName == "reservedKeyword:human")
                 {
-                    for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
+                    for (Pawn* pawn : ObjectList<Pawn>())
                     {
-                        if (orxonox_cast<ControllableEntity*>(*itP) && ((*itP)->getController()) && ((*itP)->getController()->getIdentifier()->getName() == "NewHumanController"))
+                        if (orxonox_cast<ControllableEntity*>(pawn) && (pawn->getController()) && (pawn->getController()->getIdentifier()->getName() == "NewHumanController"))
                         {
-                            this->setProtect (static_cast<ControllableEntity*>(*itP));
+                            this->setProtect (static_cast<ControllableEntity*>(pawn));
                         }
                     }
@@ -551,9 +551,9 @@
                 else
                 {
-                    for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
+                    for (Pawn* pawn : ObjectList<Pawn>())
                     {
-                        if (CommonController::getName(*itP) == protectName)
+                        if (CommonController::getName(pawn) == protectName)
                         {
-                            this->setProtect (static_cast<ControllableEntity*>(*itP));
+                            this->setProtect (static_cast<ControllableEntity*>(pawn));
                         }
                     }                            
@@ -578,11 +578,11 @@
                 std::string targetName = p.name;
 
-                for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
-                {
-                    if (CommonController::getName(*itP) == targetName)
+                for (Pawn* pawn : ObjectList<Pawn>())
+                {
+                    if (CommonController::getName(pawn) == targetName)
                     {
                         if (!this || !this->getControllableEntity())
                             return;
-                        this->setTarget (static_cast<ControllableEntity*>(*itP));
+                        this->setTarget (static_cast<ControllableEntity*>(pawn));
                     }
                 }
@@ -702,20 +702,20 @@
     {
         if (!this || !this->getControllableEntity())
-            return 0;
-
-        Pawn* closestTarget = 0;
+            return nullptr;
+
+        Pawn* closestTarget = nullptr;
         float minDistance =  std::numeric_limits<float>::infinity();
         Gametype* gt = this->getGametype();
-        for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
+        for (Pawn* pawn : ObjectList<Pawn>())
         {
             if (!this || !this->getControllableEntity())
-                return 0;
-            if ( CommonController::sameTeam (this->getControllableEntity(), static_cast<ControllableEntity*>(*itP), gt) )
+                return nullptr;
+            if ( CommonController::sameTeam (this->getControllableEntity(), static_cast<ControllableEntity*>(pawn), gt) )
                 continue;
 
-            float distance = CommonController::distance (*itP, this->getControllableEntity());
+            float distance = CommonController::distance (pawn, this->getControllableEntity());
             if (distance < minDistance)
             {
-                closestTarget = *itP;
+                closestTarget = pawn;
                 minDistance = distance;
             }
@@ -725,5 +725,5 @@
            return closestTarget;
         } 
-        return 0;  
+        return nullptr;
     }
     //push action FIGHT to the stack and set target to the closest enemy
Index: code/trunk/src/orxonox/controllers/ActionpointController.h
===================================================================
--- code/trunk/src/orxonox/controllers/ActionpointController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ActionpointController.h	(revision 11071)
@@ -65,26 +65,15 @@
         All the demos are in a file called AITest.oxw. In the menu look for New AI Testing Level.
     */
-    namespace Action
+    enum class Action
     {  
-        enum Value
-        {
-            NONE, FLY, FIGHT, PROTECT, FIGHTALL, ATTACK
-        };
-        
-    }
+        NONE, FLY, FIGHT, PROTECT, FIGHTALL, ATTACK
+    };
     
     struct Point {
-        Action::Value action;
+        Action action;
         std::string name;
         Vector3 position;
         bool inLoop;
-    } ;
-    namespace PickupType
-    {
-        enum Value
-        {  
-            NONE, DAMAGE, HEALTH, SPEED, PORTAL
-        };
-    }
+    };
 
     class _OrxonoxExport ActionpointController : public FightingController, public Tickable
@@ -94,5 +83,5 @@
             ActionpointController(Context* context);
             virtual ~ActionpointController();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);          
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
                
             /**
@@ -101,5 +90,5 @@
                 In tick ship flies and fires.
             */
-            virtual void tick(float dt);   
+            virtual void tick(float dt) override;
             /**
             @brief
@@ -186,11 +175,11 @@
             virtual void takeActionpoints (const std::vector<Point>& vector, const std::vector<Point>& loop, bool b);
 
-            virtual Action::Value getAction ();
+            virtual Action getAction ();
             virtual std::string getActionName();
 
-            void setAction (Action::Value action);
-            void setAction (Action::Value action, ControllableEntity* target);
-            void setAction (Action::Value action, const Vector3& target);
-            void setAction (Action::Value action, const Vector3& target,  const Quaternion& orient );
+            void setAction (Action action);
+            void setAction (Action action, ControllableEntity* target);
+            void setAction (Action action, const Vector3& target);
+            void setAction (Action action, const Vector3& target,  const Quaternion& orient );
 
             virtual bool setWingman(ActionpointController* wingman)
@@ -210,11 +199,11 @@
                 WeakPtr<ActionpointController> myDivisionLeader_;
             //----[Actionpoint information]----
-                Action::Value action_;
+                Action action_;
                 std::string protectName_;
                 std::string targetName_;
-                std::vector<WeakPtr<WorldEntity> > actionpoints_;
+                std::vector<WeakPtr<WorldEntity>> actionpoints_;
                 float squaredaccuracy_;
-                std::vector<Point > parsedActionpoints_;//<! actionpoints as they are stored here after being parsed from XML
-                std::vector<Point > loopActionpoints_;  //<! actionpoints that are to be looped
+                std::vector<Point> parsedActionpoints_; //<! actionpoints as they are stored here after being parsed from XML
+                std::vector<Point> loopActionpoints_;   //<! actionpoints that are to be looped
                 bool bInLoop_;                          //<! variable for addActionpoint method
                 bool bLoop_;                            //<! is state machine looping?
Index: code/trunk/src/orxonox/controllers/ArtificialController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/ArtificialController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ArtificialController.cc	(revision 11071)
@@ -56,5 +56,5 @@
         this->currentWaypoint_ = 0;
         this->setAccuracy(5);
-        this->defaultWaypoint_ = NULL;
+        this->defaultWaypoint_ = nullptr;
         this->mode_ = DEFAULT;//Vector-implementation: mode_.push_back(DEFAULT);
     }
@@ -177,8 +177,8 @@
             {
                 this->weaponModes_.clear(); // reset previous weapon information
-                WeaponSlot* wSlot = 0;
+                WeaponSlot* wSlot = nullptr;
                 for(int l=0; (wSlot = pawn->getWeaponSlot(l)) ; l++)
                 {
-                    WeaponMode* wMode = 0;
+                    WeaponMode* wMode = nullptr;
                     for(int i=0; (wMode = wSlot->getWeapon()->getWeaponmode(i)) ; i++)
                     {
@@ -207,6 +207,6 @@
     void ArtificialController::setAllBotLevel(float level)
     {
-        for (ObjectList<ArtificialController>::iterator it = ObjectList<ArtificialController>::begin(); it != ObjectList<ArtificialController>::end(); ++it)
-            it->setBotLevel(level);
+        for (ArtificialController* controller : ObjectList<ArtificialController>())
+            controller->setBotLevel(level);
     }
 
@@ -222,5 +222,5 @@
     {
         SpaceShip* ship = orxonox_cast<SpaceShip*>(this->getControllableEntity());
-        if(ship == NULL) return;
+        if(ship == nullptr) return;
         if(ship->getBoostPower()*1.5f > ship->getInitialBoostPower() ) //upper limit ->boost
             this->getControllableEntity()->boost(true);
@@ -231,8 +231,8 @@
     int ArtificialController::getFiremode(std::string name)
     {
-        for (std::map< std::string, int >::iterator it = this->weaponModes_.begin(); it != this->weaponModes_.end(); ++it)
-        {
-            if (it->first == name)
-                return it->second;
+        for (const auto& mapEntry : this->weaponModes_)
+        {
+            if (mapEntry.first == name)
+                return mapEntry.second;
         }
         return -1;
@@ -249,5 +249,5 @@
             return this->waypoints_[index];
         else
-            return 0;
+            return nullptr;
     }
 
@@ -258,12 +258,12 @@
     void ArtificialController::updatePointsOfInterest(std::string name, float searchDistance)
     {
-        WorldEntity* waypoint = NULL;
-        for (ObjectList<WorldEntity>::iterator it = ObjectList<WorldEntity>::begin(); it != ObjectList<WorldEntity>::end(); ++it)
-        {
-            if((*it)->getIdentifier() == ClassByString(name))
+        WorldEntity* waypoint = nullptr;
+        for (WorldEntity* we : ObjectList<WorldEntity>())
+        {
+            if(we->getIdentifier() == ClassByString(name))
             {
                 ControllableEntity* controllable = this->getControllableEntity();
                 if(!controllable) continue;
-                float actualDistance = ( (*it)->getPosition() - controllable->getPosition() ).length();
+                float actualDistance = ( we->getPosition() - controllable->getPosition() ).length();
                 if(actualDistance > searchDistance || actualDistance < 5.0f) continue;
                     // TODO: PickupSpawner: adjust waypoint accuracy to PickupSpawner's triggerdistance
@@ -271,5 +271,5 @@
                 else
                 {
-                    waypoint = *it;
+                    waypoint = we;
                     break;
                 }
Index: code/trunk/src/orxonox/controllers/ArtificialController.h
===================================================================
--- code/trunk/src/orxonox/controllers/ArtificialController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ArtificialController.h	(revision 11071)
@@ -42,9 +42,9 @@
             virtual ~ArtificialController();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void abandonTarget(Pawn* target);
 
-            virtual void changedControllableEntity();
+            virtual void changedControllableEntity() override;
 
             virtual void doFire();
@@ -89,5 +89,5 @@
 
             //WAYPOINT DATA
-            std::vector<WeakPtr<WorldEntity> > waypoints_;
+            std::vector<WeakPtr<WorldEntity>> waypoints_;
             size_t currentWaypoint_;
             float squaredaccuracy_;
Index: code/trunk/src/orxonox/controllers/CommonController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/CommonController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/CommonController.cc	(revision 11071)
@@ -83,5 +83,5 @@
         int team2 = entity2->getTeam();
 
-        Controller* controller = 0;
+        Controller* controller = nullptr;
         if (entity1->getController())
             controller = entity1->getController();
@@ -120,5 +120,5 @@
         }
 
-        TeamBaseMatchBase* base = 0;
+        TeamBaseMatchBase* base = nullptr;
         base = orxonox_cast<TeamBaseMatchBase*>(entity1);
         if (base)
@@ -154,5 +154,5 @@
         }
 
-        DroneController* droneController = 0;
+        DroneController* droneController = nullptr;
         droneController = orxonox_cast<DroneController*>(entity1->getController());
         if (droneController && static_cast<ControllableEntity*>(droneController->getOwner()) == entity2)
Index: code/trunk/src/orxonox/controllers/Controller.cc
===================================================================
--- code/trunk/src/orxonox/controllers/Controller.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/Controller.cc	(revision 11071)
@@ -40,6 +40,6 @@
         RegisterObject(Controller);
 
-        this->player_ = 0;
-        this->controllableEntity_ = 0;
+        this->player_ = nullptr;
+        this->controllableEntity_ = nullptr;
         this->bGodMode_ = false;
         this->team_=-1;
Index: code/trunk/src/orxonox/controllers/Controller.h
===================================================================
--- code/trunk/src/orxonox/controllers/Controller.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/Controller.h	(revision 11071)
@@ -45,5 +45,5 @@
             Controller(Context* context);
             virtual ~Controller();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             inline void setPlayer(PlayerInfo* player)
                 { this->player_ = player; }
Index: code/trunk/src/orxonox/controllers/ControllerDirector.cc
===================================================================
--- code/trunk/src/orxonox/controllers/ControllerDirector.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ControllerDirector.cc	(revision 11071)
@@ -32,7 +32,7 @@
 
         // Initialize member variables
-        this->player_ = NULL;
-        this->entity_ = NULL;
-        this->pTrigger_ = NULL;
+        this->player_ = nullptr;
+        this->entity_ = nullptr;
+        this->pTrigger_ = nullptr;
         this->context_ = context;
     }
@@ -110,10 +110,10 @@
     {
         this->pTrigger_ = orxonox_cast<PlayerTrigger*>(trigger);
-        this->player_ = NULL;
+        this->player_ = nullptr;
 
         orxout(verbose) << "Preparation to take Control!" << endl; 
 
         // Check whether it is a player trigger and extract pawn from it
-        if(this->pTrigger_ != NULL)
+        if(this->pTrigger_ != nullptr)
         {
             // Get the object which triggered the event.
@@ -121,5 +121,5 @@
 
             // Check if there actually was a player returned.
-            if( this->player_ == NULL) return false;
+            if( this->player_ == nullptr) return false;
         }
         else
Index: code/trunk/src/orxonox/controllers/ControllerDirector.h
===================================================================
--- code/trunk/src/orxonox/controllers/ControllerDirector.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ControllerDirector.h	(revision 11071)
@@ -43,7 +43,7 @@
             virtual ~ControllerDirector() { }
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             bool party(bool bTriggered, BaseObject* trigger);
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void setScriptName(const std::string& name) { this->scriptname_ = name; }
Index: code/trunk/src/orxonox/controllers/DivisionController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/DivisionController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/DivisionController.cc	(revision 11071)
@@ -40,33 +40,19 @@
         RegisterObject(DivisionController);
         this->setFormationMode(FormationMode::DIAMOND);
-        this->target_ = 0;
-        this->myFollower_ = 0;
-        this->myWingman_ = 0;
+        this->target_ = nullptr;
+        this->myFollower_ = nullptr;
+        this->myWingman_ = nullptr;
     }
 
     DivisionController::~DivisionController()
     {
-        for (size_t i = 0; i < this->actionpoints_.size(); ++i)
+        for (WorldEntity* actionpoint : this->actionpoints_)
         {
-            if(this->actionpoints_[i])
-                this->actionpoints_[i]->destroy();
+            if (actionpoint)
+                actionpoint->destroy();
         }
         this->parsedActionpoints_.clear();
         this->actionpoints_.clear();
     } 
-
-    void DivisionController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(DivisionController, XMLPort, xmlelement, mode);
-        
-    }
-    void DivisionController::tick(float dt)
-    {   
-        if (!this->isActive())
-            return;   
-        
-        SUPER(DivisionController, tick, dt);
-        
-    }
     void DivisionController::action()
     {   
Index: code/trunk/src/orxonox/controllers/DivisionController.h
===================================================================
--- code/trunk/src/orxonox/controllers/DivisionController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/DivisionController.h	(revision 11071)
@@ -50,22 +50,16 @@
             //----[/language demanded functions]----            
 
-            //----[orxonox demanded functions]----
-                virtual void tick(float dt); 
-
-                virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);          
-            //----[orxonox demanded functions]----
-
             //----[own functions]----
-                virtual bool setFollower(ActionpointController* newFollower);
-                virtual bool setWingman(ActionpointController* newWingman);
-                virtual bool hasWingman();
-                virtual bool hasFollower();
+                virtual bool setFollower(ActionpointController* newFollower) override;
+                virtual bool setWingman(ActionpointController* newWingman) override;
+                virtual bool hasWingman() override;
+                virtual bool hasFollower() override;
                 
             //----[/own functions]----
-            virtual void stayNearProtect();
+            virtual void stayNearProtect() override;
 
         protected:
             //----action must only be managed by this----
-            virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
+            virtual void action() override; //<! action() is called in regular intervals managing the bot's behaviour.
 
         private:
Index: code/trunk/src/orxonox/controllers/DroneController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/DroneController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/DroneController.cc	(revision 11071)
@@ -49,6 +49,6 @@
         RegisterObject(DroneController);
 
-        this->owner_ = 0;
-        this->drone_ = 0;
+        this->owner_ = nullptr;
+        this->drone_ = nullptr;
         this->isShooting_ = false;
         this->setAccuracy(10);
Index: code/trunk/src/orxonox/controllers/DroneController.h
===================================================================
--- code/trunk/src/orxonox/controllers/DroneController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/DroneController.h	(revision 11071)
@@ -53,5 +53,5 @@
             virtual ~DroneController();
 
-            virtual void tick(float dt); //!< The controlling happens here. This method defines what the controller has to do each tick.
+            virtual void tick(float dt) override; //!< The controlling happens here. This method defines what the controller has to do each tick.
 
             void setOwner(Pawn* owner);
Index: code/trunk/src/orxonox/controllers/FightingController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/FightingController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/FightingController.cc	(revision 11071)
@@ -27,5 +27,4 @@
  */
 #include "controllers/FightingController.h"
-#include "core/XMLPort.h"
 #include "util/Math.h"
 
@@ -56,8 +55,4 @@
     {
         
-    }
-    void FightingController::XMLPort( Element& xmlelement, XMLPort::Mode mode )
-    {
-        SUPER( FightingController, XMLPort, xmlelement, mode );
     }
     void FightingController::lookAtTarget(float dt)
@@ -243,18 +238,18 @@
     {
         if (!this || !this->getControllableEntity())
-            return 0;
-
-        Pawn* closestTarget = 0;
+            return nullptr;
+
+        Pawn* closestTarget = nullptr;
         float minDistance =  std::numeric_limits<float>::infinity();
         Gametype* gt = this->getGametype();
-        for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
-        {
-            if ( CommonController::sameTeam (this->getControllableEntity(), static_cast<ControllableEntity*>(*itP), gt) )
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            if ( CommonController::sameTeam (this->getControllableEntity(), static_cast<ControllableEntity*>(pawn), gt) )
                 continue;
 
-            float distance = CommonController::distance (*itP, this->getControllableEntity());
+            float distance = CommonController::distance (pawn, this->getControllableEntity());
             if (distance < minDistance)
             {
-                closestTarget = *itP;
+                closestTarget = pawn;
                 minDistance = distance;
             }
@@ -264,5 +259,5 @@
            return closestTarget;
         } 
-        return 0;  
+        return nullptr;
     }
     //I checked it out, rockets DO NOT cause any problems! this->getControllableEntity() is always a SpaceShip
@@ -340,8 +335,8 @@
             {
                 this->weaponModes_.clear(); // reset previous weapon information
-                WeaponSlot* wSlot = 0;
+                WeaponSlot* wSlot = nullptr;
                 for(int l=0; (wSlot = pawn->getWeaponSlot(l)) ; l++)
                 {
-                    WeaponMode* wMode = 0;
+                    WeaponMode* wMode = nullptr;
                     for(int i=0; (wMode = wSlot->getWeapon()->getWeaponmode(i)) ; i++)
                     {
@@ -361,10 +356,10 @@
     }
 
-    int FightingController::getFiremode(std::string name)
-    {
-        for (std::map< std::string, int >::iterator it = this->weaponModes_.begin(); it != this->weaponModes_.end(); ++it)
-        {
-            if (it->first == name)
-                return it->second;
+    int FightingController::getFiremode(const std::string& name)
+    {
+        for (const auto& mapEntry : this->weaponModes_)
+        {
+            if (mapEntry.first == name)
+                return mapEntry.second;
         }
         return -1;
Index: code/trunk/src/orxonox/controllers/FightingController.h
===================================================================
--- code/trunk/src/orxonox/controllers/FightingController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/FightingController.h	(revision 11071)
@@ -50,6 +50,4 @@
             virtual ~FightingController();
             
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-       
             float squaredDistanceToTarget() const;
             bool isLookingAtTarget(float angle) const;
@@ -74,5 +72,4 @@
                                                                         //<! this and target_ plus or minus some amount in difference vector direction,
                                                                         //<! depending on whether it is better to close up or survive.
-            void dodgeTowards (Vector3& position);  //fly towards position and awoid being hit
             void doFire();  //<! choose weapon, set aim at target_ and fire
             WeakPtr<ControllableEntity> target_;
@@ -99,5 +96,5 @@
             void setupWeapons(); //<! Defines which weapons are available for a bot. Is recalled whenever a bot was killed.
             bool bSetupWorked; //<! If false, setupWeapons() is called.
-            int getFiremode(std::string name);
+            int getFiremode(const std::string& name);
           
     };
Index: code/trunk/src/orxonox/controllers/FlyingController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/FlyingController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/FlyingController.cc	(revision 11071)
@@ -61,8 +61,8 @@
     }
    
-    void FlyingController::setFormationModeXML(std::string val)
+    void FlyingController::setFormationModeXML(const std::string& val)
     {
         const std::string valUpper = getUppercase(val);
-        FormationMode::Value value;
+        FormationMode value;
         
         if (valUpper == "WALL")
@@ -233,5 +233,5 @@
             return;
         SpaceShip* ship = orxonox_cast<SpaceShip*>(this->getControllableEntity());
-        if(ship == NULL) return;
+        if(ship == nullptr) return;
         if(ship->getBoostPower()*1.5f > ship->getInitialBoostPower()) //upper limit ->boost
         {
Index: code/trunk/src/orxonox/controllers/FlyingController.h
===================================================================
--- code/trunk/src/orxonox/controllers/FlyingController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/FlyingController.h	(revision 11071)
@@ -41,11 +41,8 @@
 
     //Formation mode for the divisions
-    namespace FormationMode
+    enum class FormationMode
     {
-        enum Value
-        {
-            FINGER4, DIAMOND, WALL
-        };
-    }
+        FINGER4, DIAMOND, WALL
+    };
 
     class _OrxonoxExport FlyingController : public CommonController
@@ -58,5 +55,5 @@
             FlyingController(Context* context);
             virtual ~FlyingController();
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void setSpread (int spread)                         //<! spread is a multiplier for formation flight, should be bigger than 100
@@ -65,10 +62,10 @@
                 { return this->spread_; }
 
-            void setFormationModeXML(std::string val);
+            void setFormationModeXML(const std::string& val);
             std::string getFormationModeXML() const;
 
-            void setFormationMode(FormationMode::Value val)
+            void setFormationMode(FormationMode val)
                 { this->formationMode_ = val; }
-            FormationMode::Value getFormationMode() const
+            FormationMode getFormationMode() const
                 { return this->formationMode_; }
             bool bCopyOrientation_;                             //<! set to true by default, MasterController sets it in its tick(),
@@ -91,5 +88,5 @@
                                                                     //<! this stays in a certain position relative to leader      
             
-            FormationMode::Value formationMode_;
+            FormationMode formationMode_;
           
             float rotationProgress_;    //<! for slerping 
Index: code/trunk/src/orxonox/controllers/FormationController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/FormationController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/FormationController.cc	(revision 11071)
@@ -58,13 +58,13 @@
     RegisterClass(FormationController);
 
-    static const unsigned int STANDARD_MAX_FORMATION_SIZE = 9;
-    static const int RADIUS_TO_SEARCH_FOR_MASTERS = 5000;
-    static const float FORMATION_LENGTH =  110;
-    static const float FORMATION_WIDTH =  110;
-    static const int FREEDOM_COUNT = 4; //seconds the slaves in a formation will be set free when master attacks an enemy
-    static const float SPEED_MASTER = 0.6f;
-    static const float ROTATEFACTOR_MASTER = 0.2f;
-    static const float SPEED_FREE = 0.8f;
-    static const float ROTATEFACTOR_FREE = 0.8f;
+    static constexpr unsigned int STANDARD_MAX_FORMATION_SIZE = 9;
+    static constexpr int RADIUS_TO_SEARCH_FOR_MASTERS = 5000;
+    static constexpr float FORMATION_LENGTH =  110;
+    static constexpr float FORMATION_WIDTH =  110;
+    static constexpr int FREEDOM_COUNT = 4; //seconds the slaves in a formation will be set free when master attacks an enemy
+    static constexpr float SPEED_MASTER = 0.6f;
+    static constexpr float ROTATEFACTOR_MASTER = 0.2f;
+    static constexpr float SPEED_FREE = 0.8f;
+    static constexpr float ROTATEFACTOR_FREE = 0.8f;
 
     FormationController::FormationController(Context* context) : Controller(context)
@@ -72,9 +72,9 @@
         RegisterObject(FormationController);
 
-        this->target_ = 0;
+        this->target_ = nullptr;
         this->formationFlight_ = false;
         this->passive_ = false;
         this->maxFormationSize_ = STANDARD_MAX_FORMATION_SIZE;
-        this->myMaster_ = 0;
+        this->myMaster_ = nullptr;
         this->freedomCount_ = 0;
 
@@ -97,21 +97,21 @@
             this->removeFromFormation();
 
-            for (ObjectList<FormationController>::iterator it = ObjectList<FormationController>::begin(); it; ++it)
-            {
-                if (*it != this)
+            for (FormationController* controller : ObjectList<FormationController>())
+            {
+                if (controller != this)
                 {
-                    if (it->myMaster_ == this)
+                    if (controller->myMaster_ == this)
                     {
-                        orxout(internal_error) << this << " is still master in " << (*it) << endl;
-                        it->myMaster_ = 0;
+                        orxout(internal_error) << this << " is still master in " << controller << endl;
+                        controller->myMaster_ = nullptr;
                     }
 
                     while (true)
                     {
-                        std::vector<FormationController*>::iterator it2 = std::find(it->slaves_.begin(), it->slaves_.end(), this);
-                        if (it2 != it->slaves_.end())
+                        std::vector<FormationController*>::iterator it2 = std::find(controller->slaves_.begin(), controller->slaves_.end(), this);
+                        if (it2 != controller->slaves_.end())
                         {
-                            orxout(internal_error) << this << " is still slave in " << (*it) << endl;
-                            it->slaves_.erase(it2);
+                            orxout(internal_error) << this << " is still slave in " << controller << endl;
+                            controller->slaves_.erase(it2);
                         }
                         else
@@ -140,12 +140,12 @@
     void FormationController::formationflight(const bool form)
     {
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            Controller* controller = 0;
-
-            if (it->getController())
-                controller = it->getController();
-            else if (it->getXMLController())
-                controller = it->getXMLController();
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            Controller* controller = nullptr;
+
+            if (pawn->getController())
+                controller = pawn->getController();
+            else if (pawn->getXMLController())
+                controller = pawn->getXMLController();
 
             if (!controller)
@@ -171,12 +171,12 @@
     void FormationController::masteraction(const int action)
     {
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            Controller* controller = 0;
-
-            if (it->getController())
-                controller = it->getController();
-            else if (it->getXMLController())
-                controller = it->getXMLController();
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            Controller* controller = nullptr;
+
+            if (pawn->getController())
+                controller = pawn->getController();
+            else if (pawn->getXMLController())
+                controller = pawn->getXMLController();
 
             if (!controller)
@@ -201,12 +201,12 @@
     void FormationController::passivebehaviour(const bool passive)
     {
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            Controller* controller = 0;
-
-            if (it->getController())
-                controller = it->getController();
-            else if (it->getXMLController())
-                controller = it->getXMLController();
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            Controller* controller = nullptr;
+
+            if (pawn->getController())
+                controller = pawn->getController();
+            else if (pawn->getXMLController())
+                controller = pawn->getXMLController();
 
             if (!controller)
@@ -228,12 +228,12 @@
     void FormationController::formationsize(const int size)
     {
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            Controller* controller = 0;
-
-            if (it->getController())
-                controller = it->getController();
-            else if (it->getXMLController())
-                controller = it->getXMLController();
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            Controller* controller = nullptr;
+
+            if (pawn->getController())
+                controller = pawn->getController();
+            else if (pawn->getXMLController())
+                controller = pawn->getXMLController();
 
             if (!controller)
@@ -383,5 +383,5 @@
         }
 
-        this->myMaster_ = 0;
+        this->myMaster_ = nullptr;
         this->state_ = FREE;
     }
@@ -398,5 +398,5 @@
         int teamSize = 0;
         //go through all pawns
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
+        for (Pawn* pawn : ObjectList<Pawn>())
         {
 
@@ -405,16 +405,16 @@
             if (!gt)
             {
-                gt=it->getGametype();
-            }
-            if (!FormationController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(*it),gt))
+                gt=pawn->getGametype();
+            }
+            if (!FormationController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(pawn),gt))
                 continue;
 
             //has it an FormationController?
-            Controller* controller = 0;
-
-            if (it->getController())
-                controller = it->getController();
-            else if (it->getXMLController())
-                controller = it->getXMLController();
+            Controller* controller = nullptr;
+
+            if (pawn->getController())
+                controller = pawn->getController();
+            else if (pawn->getXMLController())
+                controller = pawn->getXMLController();
 
             if (!controller)
@@ -422,5 +422,5 @@
 
             //is pawn oneself?
-            if (orxonox_cast<ControllableEntity*>(*it) == this->getControllableEntity())
+            if (orxonox_cast<ControllableEntity*>(pawn) == this->getControllableEntity())
                 continue;
 
@@ -433,5 +433,5 @@
                 continue;
 
-            float distance = (it->getPosition() - this->getControllableEntity()->getPosition()).length();
+            float distance = (pawn->getPosition() - this->getControllableEntity()->getPosition()).length();
 
             // is pawn in range?
@@ -440,8 +440,8 @@
                 if(newMaster->slaves_.size() > this->maxFormationSize_) continue;
 
-                for(std::vector<FormationController*>::iterator itSlave = this->slaves_.begin(); itSlave != this->slaves_.end(); itSlave++)
+                for(FormationController* slave : this->slaves_)
                 {
-                    (*itSlave)->myMaster_ = newMaster;
-                    newMaster->slaves_.push_back(*itSlave);
+                    slave->myMaster_ = newMaster;
+                    newMaster->slaves_.push_back(slave);
                 }
                 this->slaves_.clear();
@@ -458,5 +458,5 @@
         {
             this->state_ = MASTER;
-            this->myMaster_ = 0;
+            this->myMaster_ = nullptr;
         }
     }
@@ -486,5 +486,5 @@
             int i = 1;
 
-            for(std::vector<FormationController*>::iterator it = slaves_.begin(); it != slaves_.end(); it++)
+            for(FormationController* slave : slaves_)
             {
                 pos = Vector3::ZERO;
@@ -497,6 +497,6 @@
                     dest+=FORMATION_LENGTH*(orient*WorldEntity::BACK);
                 }
-                (*it)->setTargetOrientation(orient);
-                (*it)->setTargetPosition(pos);
+                slave->setTargetOrientation(orient);
+                slave->setTargetPosition(pos);
                 left=!left;
             }
@@ -518,9 +518,9 @@
             newMaster->state_ = MASTER;
             newMaster->slaves_ = this->slaves_;
-            newMaster->myMaster_ = 0;
-
-            for(std::vector<FormationController*>::iterator it = newMaster->slaves_.begin(); it != newMaster->slaves_.end(); it++)
-            {
-                (*it)->myMaster_ = newMaster;
+            newMaster->myMaster_ = nullptr;
+
+            for(FormationController* slave : newMaster->slaves_)
+            {
+                slave->myMaster_ = newMaster;
             }
         }
@@ -547,9 +547,9 @@
                 newMaster->state_ = MASTER;
                 newMaster->slaves_ = this->slaves_;
-                newMaster->myMaster_ = 0;
-
-                for(std::vector<FormationController*>::iterator it = newMaster->slaves_.begin(); it != newMaster->slaves_.end(); it++)
+                newMaster->myMaster_ = nullptr;
+
+                for(FormationController* slave : newMaster->slaves_)
                 {
-                    (*it)->myMaster_ = newMaster;
+                    slave->myMaster_ = newMaster;
                 }
             }
@@ -569,8 +569,8 @@
         if(this->state_ != MASTER) return;
 
-        for(std::vector<FormationController*>::iterator it = slaves_.begin(); it != slaves_.end(); it++)
-        {
-            (*it)->state_ = FREE;
-            (*it)->myMaster_ = 0;
+        for(FormationController* slave : slaves_)
+        {
+            slave->state_ = FREE;
+            slave->myMaster_ = nullptr;
         }
         this->slaves_.clear();
@@ -584,10 +584,10 @@
         if(this->state_ != MASTER) return;
 
-        for(std::vector<FormationController*>::iterator it = slaves_.begin(); it != slaves_.end(); it++)
-        {
-            (*it)->state_ = FREE;
-            (*it)->forceFreedom();
-            (*it)->targetPosition_ = this->targetPosition_;
-            (*it)->bShooting_ = true;
+        for(FormationController* slave : slaves_)
+        {
+            slave->state_ = FREE;
+            slave->forceFreedom();
+            slave->targetPosition_ = this->targetPosition_;
+            slave->bShooting_ = true;
 //             (*it)->getControllableEntity()->fire(0);// fire once for fun
         }
@@ -629,5 +629,5 @@
 
         //search new Master, then take lead
-        if (this->state_==FREE && this->myMaster_==0)
+        if (this->state_==FREE && this->myMaster_==nullptr)
         {
           searchNewMaster();
@@ -650,9 +650,9 @@
             this->slaves_.push_back(this->myMaster_);
             //set this as new master
-            for(std::vector<FormationController*>::iterator it = slaves_.begin(); it != slaves_.end(); it++)
-            {
-                 (*it)->myMaster_=this;
-            }
-            this->myMaster_=0;
+            for(FormationController* slave : slaves_)
+            {
+                 slave->myMaster_=this;
+            }
+            this->myMaster_=nullptr;
             this->state_=MASTER;
         }
@@ -694,9 +694,9 @@
         if (this->state_ == MASTER)
         {
-            for(std::vector<FormationController*>::iterator it = slaves_.begin(); it != slaves_.end(); it++)
-            {
-                 (*it)->formationMode_ = val;
+            for(FormationController* slave : slaves_)
+            {
+                 slave->formationMode_ = val;
                  if (val == ATTACK)
-                     (*it)->forgetTarget();
+                     slave->forgetTarget();
             }
         }
@@ -773,16 +773,16 @@
     {
 
-        Pawn *humanPawn = NULL;
-        NewHumanController *currentHumanController = NULL;
+        Pawn *humanPawn = nullptr;
+        NewHumanController *currentHumanController = nullptr;
         std::vector<FormationController*> allMasters;
 
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            Controller* controller = 0;
-
-            if (it->getController())
-                controller = it->getController();
-            else if (it->getXMLController())
-                controller = it->getXMLController();
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            Controller* controller = nullptr;
+
+            if (pawn->getController())
+                controller = pawn->getController();
+            else if (pawn->getXMLController())
+                controller = pawn->getXMLController();
 
             if (!controller)
@@ -791,5 +791,5 @@
             currentHumanController = orxonox_cast<NewHumanController*>(controller);
 
-            if(currentHumanController) humanPawn = *it;
+            if(currentHumanController) humanPawn = pawn;
 
             FormationController *aiController = orxonox_cast<FormationController*>(controller);
@@ -800,5 +800,5 @@
         }
 
-        if((humanPawn != NULL) && (allMasters.size() != 0))
+        if((humanPawn != nullptr) && (allMasters.size() != 0))
         {
             float posHuman = humanPawn->getPosition().length();
@@ -808,9 +808,10 @@
             int i = 0;
 
-            for(std::vector<FormationController*>::iterator it = allMasters.begin(); it != allMasters.end(); it++, i++)
-            {
-                if (!FormationController::sameTeam((*it)->getControllableEntity(), humanPawn, (*it)->getGametype())) continue;
-                distance = posHuman - (*it)->getControllableEntity()->getPosition().length();
+            for(FormationController* master : allMasters)
+            {
+                if (!FormationController::sameTeam(master->getControllableEntity(), humanPawn, master->getGametype())) continue;
+                distance = posHuman - master->getControllableEntity()->getPosition().length();
                 if(distance < minDistance) index = i;
+                i++;
             }
             allMasters[index]->followInit(humanPawn);
@@ -826,5 +827,5 @@
     void FormationController::followInit(Pawn* pawn, const bool always, const int secondsToFollow)
     {
-        if (pawn == NULL || this->state_ != MASTER)
+        if (pawn == nullptr || this->state_ != MASTER)
             return;
         this->specificMasterAction_  =  FOLLOW;
@@ -844,22 +845,22 @@
     {
 
-        Pawn *humanPawn = NULL;
-        NewHumanController *currentHumanController = NULL;
-
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            if (!it->getController())
+        Pawn *humanPawn = nullptr;
+        NewHumanController *currentHumanController = nullptr;
+
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            if (!pawn->getController())
                 continue;
 
-            currentHumanController = orxonox_cast<NewHumanController*>(it->getController());
+            currentHumanController = orxonox_cast<NewHumanController*>(pawn->getController());
             if(currentHumanController)
             {
-                if (!FormationController::sameTeam(this->getControllableEntity(), *it, this->getGametype())) continue;
-                humanPawn = *it;
+                if (!FormationController::sameTeam(this->getControllableEntity(), pawn, this->getGametype())) continue;
+                humanPawn = pawn;
                 break;
             }
         }
 
-        if((humanPawn != NULL))
+        if((humanPawn != nullptr))
                 this->followInit(humanPawn);
     }
@@ -918,22 +919,22 @@
         this->forgetTarget();
 
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it; ++it)
-        {
-            if (FormationController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(*it), this->getGametype()))
+        for (Pawn* pawn : ObjectList<Pawn>())
+        {
+            if (FormationController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(pawn), this->getGametype()))
                 continue;
 
             /* So AI won't choose invisible Spaceships as target */
-            if (!it->getRadarVisibility())
+            if (!pawn->getRadarVisibility())
                 continue;
 
-            if (static_cast<ControllableEntity*>(*it) != this->getControllableEntity())
+            if (static_cast<ControllableEntity*>(pawn) != this->getControllableEntity())
             {
                 float speed = this->getControllableEntity()->getVelocity().length();
                 Vector3 distanceCurrent = this->targetPosition_ - this->getControllableEntity()->getPosition();
-                Vector3 distanceNew = it->getPosition() - this->getControllableEntity()->getPosition();
-                if (!this->target_ || it->getPosition().squaredDistance(this->getControllableEntity()->getPosition()) * (1.5f + acos((this->getControllableEntity()->getOrientation() * WorldEntity::FRONT).dotProduct(distanceNew) / speed / distanceNew.length()) / math::twoPi)
+                Vector3 distanceNew = pawn->getPosition() - this->getControllableEntity()->getPosition();
+                if (!this->target_ || pawn->getPosition().squaredDistance(this->getControllableEntity()->getPosition()) * (1.5f + acos((this->getControllableEntity()->getOrientation() * WorldEntity::FRONT).dotProduct(distanceNew) / speed / distanceNew.length()) / math::twoPi)
                         < this->targetPosition_.squaredDistance(this->getControllableEntity()->getPosition()) * (1.5f + acos((this->getControllableEntity()->getOrientation() * WorldEntity::FRONT).dotProduct(distanceCurrent) / speed / distanceCurrent.length()) / math::twoPi) + rnd(-250, 250))
                 {
-                    this->setTarget(*it);
+                    this->setTarget(pawn);
                 }
             }
@@ -943,5 +944,5 @@
     void FormationController::forgetTarget()
     {
-        this->target_ = 0;
+        this->target_ = nullptr;
         this->bShooting_ = false;
     }
@@ -963,5 +964,5 @@
         int team2 = entity2->getTeam();
 
-        Controller* controller = 0;
+        Controller* controller = nullptr;
         if (entity1->getController())
             controller = entity1->getController();
@@ -1000,5 +1001,5 @@
         }
 
-        TeamBaseMatchBase* base = 0;
+        TeamBaseMatchBase* base = nullptr;
         base = orxonox_cast<TeamBaseMatchBase*>(entity1);
         if (base)
@@ -1034,5 +1035,5 @@
         }
 
-        DroneController* droneController = 0;
+        DroneController* droneController = nullptr;
         droneController = orxonox_cast<DroneController*>(entity1->getController());
         if (droneController && static_cast<ControllableEntity*>(droneController->getOwner()) == entity2)
Index: code/trunk/src/orxonox/controllers/FormationController.h
===================================================================
--- code/trunk/src/orxonox/controllers/FormationController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/FormationController.h	(revision 11071)
@@ -50,5 +50,5 @@
       virtual ~FormationController();
 
-      virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+      virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
 
@@ -93,5 +93,5 @@
            { return this->formationMode_; }
 
-      virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage);
+      virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage) override;
 
       FormationController* getMaster( void ) { return myMaster_; }
@@ -99,5 +99,5 @@
       FormationController* getSlave( void ) { return this->slaves_.back(); }
 
-      virtual void changedControllableEntity();
+      virtual void changedControllableEntity() override;
 
   protected:
Index: code/trunk/src/orxonox/controllers/HumanController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/HumanController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/HumanController.cc	(revision 11071)
@@ -65,5 +65,5 @@
     RegisterUnloadableClass(HumanController);
 
-    HumanController* HumanController::localController_s = 0;
+    HumanController* HumanController::localController_s = nullptr;
 
     HumanController::HumanController(Context* context) : FormationController(context)
@@ -81,5 +81,5 @@
             HumanController::localController_s->removeFromFormation();
         }
-        HumanController::localController_s = 0;
+        HumanController::localController_s = nullptr;
     }
 
@@ -321,5 +321,5 @@
             return orxonox_cast<Pawn*>(HumanController::localController_s->getControllableEntity());
         else
-            return NULL;
+            return nullptr;
     }
 
Index: code/trunk/src/orxonox/controllers/HumanController.h
===================================================================
--- code/trunk/src/orxonox/controllers/HumanController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/HumanController.h	(revision 11071)
@@ -47,5 +47,5 @@
             virtual ~HumanController();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             static void moveFrontBack(const Vector2& value);
Index: code/trunk/src/orxonox/controllers/MasterController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/MasterController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/MasterController.cc	(revision 11071)
@@ -58,10 +58,10 @@
         {
             //fill the vector in the first tick
-            for (ObjectList<ActionpointController>::iterator it = ObjectList<ActionpointController>::begin(); it; ++it)
+            for (ActionpointController* controller : ObjectList<ActionpointController>())
             {
                 //----0ptr?----
-                if (!it)
+                if (!controller)
                     continue;
-                this->controllers_.push_back(*it);
+                this->controllers_.push_back(controller);
             }
         }
Index: code/trunk/src/orxonox/controllers/MasterController.h
===================================================================
--- code/trunk/src/orxonox/controllers/MasterController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/MasterController.h	(revision 11071)
@@ -61,5 +61,5 @@
 
             //----[orxonox demanded functions]----
-                virtual void tick(float dt); 
+                virtual void tick(float dt) override;
 
             //----[orxonox demanded functions]----
@@ -68,5 +68,5 @@
           
         private:
-            std::vector<WeakPtr<ActionpointController> > controllers_;  //<! vector of controllers, which action(), canFire() and maneuver() methods are to be called
+            std::vector<WeakPtr<ActionpointController>> controllers_;//<! vector of controllers, which action(), canFire() and maneuver() methods are to be called
             size_t indexOfCurrentController_;                        //<! index of current controller
             unsigned int numberOfTicksPassedSinceLastActionCall_;
Index: code/trunk/src/orxonox/controllers/NewHumanController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/NewHumanController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/NewHumanController.cc	(revision 11071)
@@ -58,22 +58,22 @@
     RegisterUnloadableClass(NewHumanController);
 
-    NewHumanController* NewHumanController::localController_s = 0;
+    NewHumanController* NewHumanController::localController_s = nullptr;
 
     NewHumanController::NewHumanController(Context* context)
         : HumanController(context)
-        , crossHairOverlay_(NULL)
-        , centerOverlay_(NULL)
-        , damageOverlayTop_(NULL)
-        , damageOverlayRight_(NULL)
-        , damageOverlayBottom_(NULL)
-        , damageOverlayLeft_(NULL)
+        , crossHairOverlay_(nullptr)
+        , centerOverlay_(nullptr)
+        , damageOverlayTop_(nullptr)
+        , damageOverlayRight_(nullptr)
+        , damageOverlayBottom_(nullptr)
+        , damageOverlayLeft_(nullptr)
         , damageOverlayTT_(0)
         , damageOverlayTR_(0)
         , damageOverlayTB_(0)
         , damageOverlayTL_(0)
-        , arrowsOverlay1_(NULL)
-        , arrowsOverlay2_(NULL)
-        , arrowsOverlay3_(NULL)
-        , arrowsOverlay4_(NULL)
+        , arrowsOverlay1_(nullptr)
+        , arrowsOverlay2_(nullptr)
+        , arrowsOverlay3_(nullptr)
+        , arrowsOverlay4_(nullptr)
     {
         RegisterObject(NewHumanController);
@@ -445,6 +445,6 @@
             pawn->setAimPosition( mouseRay.getOrigin() + mouseRay.getDirection() * 3000 );
 
-        if( this->getControllableEntity() && this->getControllableEntity()->getTarget() != 0 )
-            this->getControllableEntity()->setTarget( 0 );
+        if( this->getControllableEntity() && this->getControllableEntity()->getTarget() != nullptr )
+            this->getControllableEntity()->setTarget( nullptr );
 
         //return this->controllableEntity_->getWorldPosition() + (this->controllableEntity_->getWorldOrientation() * Vector3::NEGATIVE_UNIT_Z * 2000);
Index: code/trunk/src/orxonox/controllers/NewHumanController.h
===================================================================
--- code/trunk/src/orxonox/controllers/NewHumanController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/NewHumanController.h	(revision 11071)
@@ -45,16 +45,16 @@
             virtual ~NewHumanController();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void frontback(const Vector2& value);
-            virtual void yaw(const Vector2& value);
-            virtual void pitch(const Vector2& value);
+            virtual void frontback(const Vector2& value) override;
+            virtual void yaw(const Vector2& value) override;
+            virtual void pitch(const Vector2& value) override;
 
             static void accelerate();
             static void decelerate();
 
-            virtual void doFire(unsigned int firemode);
+            virtual void doFire(unsigned int firemode) override;
 
-            virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage);
+            virtual void hit(Pawn* originator, btManifoldPoint& contactpoint, float damage) override;
 
             static void unfire();
@@ -65,7 +65,7 @@
             static void changeMode();
 
-            virtual void changedControllableEntity();
-            virtual void doPauseControl();
-            virtual void doResumeControl();
+            virtual void changedControllableEntity() override;
+            virtual void doPauseControl() override;
+            virtual void doResumeControl() override;
 
             float getCurrentYaw(){ return this->currentYaw_; }
Index: code/trunk/src/orxonox/controllers/ScriptController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/ScriptController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ScriptController.cc	(revision 11071)
@@ -64,6 +64,6 @@
         /* Set default values for all variables */
         /* - pointers to zero */
-        this->player_ = NULL;
-        this->entity_ = NULL;
+        this->player_ = nullptr;
+        this->entity_ = nullptr;
 
         /* - times */
@@ -121,22 +121,18 @@
 
       /* Debugging: print all the scriptcontroller object pointers */
-      for(ObjectList<ScriptController>::iterator it = 
-        ObjectList<ScriptController>::begin(); 
-        it != ObjectList<ScriptController>::end(); ++it)
-      { orxout(verbose) << "Have object in list: " << *it << endl; }
+      for(ScriptController* controller : ObjectList<ScriptController>())
+      { orxout(verbose) << "Have object in list: " << controller << endl; }
 
       /* Find the first one with a nonzero ID */
-      for(ObjectList<ScriptController>::iterator it = 
-        ObjectList<ScriptController>::begin(); 
-        it != ObjectList<ScriptController>::end(); ++it)
+      for(ScriptController* controller : ObjectList<ScriptController>())
       { 
         // TODO: do some selection here. Currently just returns the first one
-        if( (*it)->getID() > 0 )
-        { orxout(verbose) << "Controller to return: " << *it << endl;
-          return *it; 
+        if( controller->getID() > 0 )
+        { orxout(verbose) << "Controller to return: " << controller << endl;
+          return controller;
         }
       
       }
-      return NULL;
+      return nullptr;
     }
 
Index: code/trunk/src/orxonox/controllers/ScriptController.h
===================================================================
--- code/trunk/src/orxonox/controllers/ScriptController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/ScriptController.h	(revision 11071)
@@ -71,5 +71,5 @@
             void setPlayer(PlayerInfo* player) { this->player_ = player; }
            
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             // LUA interface
Index: code/trunk/src/orxonox/controllers/SectionController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/SectionController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/SectionController.cc	(revision 11071)
@@ -40,6 +40,6 @@
         this->setFormationMode(FormationMode::FINGER4);
 
-        this->myWingman_ = 0;
-        this->myDivisionLeader_ = 0;
+        this->myWingman_ = nullptr;
+        this->myDivisionLeader_ = nullptr;
         this->bFirstAction_ = true;
 
@@ -48,25 +48,11 @@
     SectionController::~SectionController()
     {
-       for (size_t i = 0; i < this->actionpoints_.size(); ++i)
-        {
-            if(this->actionpoints_[i])
-                this->actionpoints_[i]->destroy();
+        for (WorldEntity* actionpoint : this->actionpoints_)
+        {
+            if (actionpoint)
+                actionpoint->destroy();
         }
         this->parsedActionpoints_.clear();
         this->actionpoints_.clear();
-    }
-    void SectionController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(SectionController, XMLPort, xmlelement, mode);
-    }
-
-    //----in tick, move (or look) and shoot----
-    void SectionController::tick(float dt)
-    {
-        if (!this->isActive())
-            return;
-   
-        SUPER(SectionController, tick, dt);
-        
     }
 
@@ -131,5 +117,5 @@
     {
         //----If division leader fights, cover him by fighting emenies close to his target----
-        Action::Value action = this->myDivisionLeader_->getAction();
+        Action action = this->myDivisionLeader_->getAction();
 
         if (action == Action::FIGHT || action == Action::FIGHTALL || action == Action::ATTACK)
@@ -147,15 +133,15 @@
                     Vector3 divisionTargetPosition = this->myDivisionLeader_->getTarget()->getWorldPosition();
                     Gametype* gt = this->getGametype();
-                    for (ObjectList<Pawn>::iterator itP = ObjectList<Pawn>::begin(); itP; ++itP)
+                    for (Pawn* pawn : ObjectList<Pawn>())
                     {
                         //----is enemy?----
-                        if ( CommonController::sameTeam (this->getControllableEntity(), static_cast<ControllableEntity*>(*itP), gt) )
+                        if ( CommonController::sameTeam (this->getControllableEntity(), static_cast<ControllableEntity*>(pawn), gt) )
                             continue;           
                         //----in range?----
-                        if (((*itP)->getWorldPosition() - divisionTargetPosition).length() < 3000 && 
-                            (*itP) != this->myDivisionLeader_->getTarget())
+                        if ((pawn->getWorldPosition() - divisionTargetPosition).length() < 3000 &&
+                            pawn != this->myDivisionLeader_->getTarget())
                         {
                             foundTarget = true;
-                            target =  (*itP);
+                            target = pawn;
                             break; 
                         }
@@ -188,26 +174,17 @@
         this->setFormationMode( this->myDivisionLeader_->getFormationMode() );
         this->spread_ = this->myDivisionLeader_->getSpread();
-        Vector3* targetRelativePosition;
         switch (this->formationMode_){
             case FormationMode::WALL:
-            {
-                targetRelativePosition = new Vector3 (-2.0f*this->spread_, 0, 0);   
-                break;
-            }
+                return Vector3 (-2.0f*this->spread_, 0, 0);
+
             case FormationMode::FINGER4: 
-            {
-                targetRelativePosition = new Vector3 (-2.0f*this->spread_, 0, 1.0f*this->spread_);   
-                break;
-            }
+                return Vector3 (-2.0f*this->spread_, 0, 1.0f*this->spread_);
             
             case FormationMode::DIAMOND: 
-            {
-                targetRelativePosition = new Vector3 (-2.0f*this->spread_, 0, 1.0f*this->spread_);
-                break;
-            }
-        }
-        Vector3 result = *targetRelativePosition;
-        delete targetRelativePosition;
-        return result;
+                return Vector3 (-2.0f*this->spread_, 0, 1.0f*this->spread_);
+
+            default:
+                return Vector3::ZERO;
+        }
     }
 
@@ -226,27 +203,27 @@
 
         if (!this->getControllableEntity())
-            return 0;
-
-        ActionpointController* closestLeader = 0;
+            return nullptr;
+
+        ActionpointController* closestLeader = nullptr;
         float minDistance =  std::numeric_limits<float>::infinity();
         //go through all pawns
-        for (ObjectList<ActionpointController>::iterator it = ObjectList<ActionpointController>::begin(); it; ++it)
+        for (ActionpointController* controller : ObjectList<ActionpointController>())
         {
             //0ptr or not DivisionController?
-            if (!(it) || !((it)->getIdentifier()->getName() == "DivisionController") || !(it->getControllableEntity()))
+            if (!controller || !(controller->getIdentifier()->getName() == "DivisionController") || !(controller->getControllableEntity()))
                 continue;
             //same team?
-            if ((this->getControllableEntity()->getTeam() != (it)->getControllableEntity()->getTeam()))
+            if ((this->getControllableEntity()->getTeam() != controller->getControllableEntity()->getTeam()))
                 continue;
 
             //is equal to this?
-            if (orxonox_cast<ControllableEntity*>(*it) == this->getControllableEntity())
+            if (orxonox_cast<ControllableEntity*>(controller) == this->getControllableEntity())
                 continue;
 
-            float distance = CommonController::distance (it->getControllableEntity(), this->getControllableEntity());
+            float distance = CommonController::distance (controller->getControllableEntity(), this->getControllableEntity());
             
-            if (distance < minDistance && !(it->hasFollower()))
-            {
-                closestLeader = *it;
+            if (distance < minDistance && !(controller->hasFollower()))
+            {
+                closestLeader = controller;
                 minDistance = distance;
             }
@@ -258,5 +235,5 @@
                 return closestLeader;
         }
-        return 0;
+        return nullptr;
     }
 
Index: code/trunk/src/orxonox/controllers/SectionController.h
===================================================================
--- code/trunk/src/orxonox/controllers/SectionController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/SectionController.h	(revision 11071)
@@ -49,16 +49,10 @@
             //----[/language demanded functions]----
             
-            //----[orxonox demanded functions]----
-                virtual void tick(float dt); 
-                
-                virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            //----[/orxonox demanded functions]----
-            
             //----[own functions]----
                 ActionpointController* findNewDivisionLeader();
 
-                virtual bool setWingman(ActionpointController* newWingman);
-                virtual bool hasWingman();
-                virtual bool hasFollower()
+                virtual bool setWingman(ActionpointController* newWingman) override;
+                virtual bool hasWingman() override;
+                virtual bool hasFollower() override
                     { return false; }
                 void chooseTarget();
@@ -67,5 +61,5 @@
         protected:       
             //----action must only be managed by this----     
-                virtual void action(); //<! action() is called in regular intervals by MasterController managing the bot's behaviour.
+                virtual void action() override; //<! action() is called in regular intervals by MasterController managing the bot's behaviour.
                 Vector3 getFormationPosition ();
                 void keepFormation();
Index: code/trunk/src/orxonox/controllers/WaypointController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/WaypointController.cc	(revision 11071)
@@ -44,8 +44,8 @@
     WaypointController::~WaypointController()
     {
-        for (size_t i = 0; i < this->waypoints_.size(); ++i)
+        for (WorldEntity* waypoint : this->waypoints_)
         {
-            if(this->waypoints_[i])
-                this->waypoints_[i]->destroy();
+            if(waypoint)
+                waypoint->destroy();
         }
     }
Index: code/trunk/src/orxonox/controllers/WaypointController.h
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/WaypointController.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~WaypointController();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
         protected:
Index: code/trunk/src/orxonox/controllers/WaypointPatrolController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointPatrolController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/WaypointPatrolController.cc	(revision 11071)
@@ -87,19 +87,19 @@
         float shortestsqdistance = (float)static_cast<unsigned int>(-1);
 
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+        for (Pawn* pawn : ObjectList<Pawn>())
         {
-            if (ArtificialController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(*it), this->getGametype()))
+            if (ArtificialController::sameTeam(this->getControllableEntity(), static_cast<ControllableEntity*>(pawn), this->getGametype()))
                 continue;
 
-            float sqdistance = it->getPosition().squaredDistance(myposition);
+            float sqdistance = pawn->getPosition().squaredDistance(myposition);
             if (sqdistance < shortestsqdistance)
             {
                 shortestsqdistance = sqdistance;
-                this->target_ = (*it);
+                this->target_ = pawn;
             }
         }
 
         if (shortestsqdistance > (this->alertnessradius_ * this->alertnessradius_))
-            this->target_ = 0;
+            this->target_ = nullptr;
     }
 }
Index: code/trunk/src/orxonox/controllers/WaypointPatrolController.h
===================================================================
--- code/trunk/src/orxonox/controllers/WaypointPatrolController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/WaypointPatrolController.h	(revision 11071)
@@ -43,6 +43,6 @@
             virtual ~WaypointPatrolController() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
             inline void setAlertnessRadius(float radius)
Index: code/trunk/src/orxonox/controllers/WingmanController.cc
===================================================================
--- code/trunk/src/orxonox/controllers/WingmanController.cc	(revision 11056)
+++ code/trunk/src/orxonox/controllers/WingmanController.cc	(revision 11071)
@@ -39,5 +39,5 @@
     {
         RegisterObject(WingmanController);
-        this->myLeader_ = 0;
+        this->myLeader_ = nullptr;
         this->bFirstAction_ = true;
 
@@ -46,26 +46,11 @@
     WingmanController::~WingmanController()
     {
-        for (size_t i = 0; i < this->actionpoints_.size(); ++i)
+        for (WorldEntity* actionpoint : this->actionpoints_)
         {
-            if(this->actionpoints_[i])
-                this->actionpoints_[i]->destroy();
+            if (actionpoint)
+                actionpoint->destroy();
         }
         this->parsedActionpoints_.clear();
         this->actionpoints_.clear();
-    }
-  
-    void WingmanController::XMLPort(Element& xmlelement, XMLPort::Mode mode)
-    {
-        SUPER(WingmanController, XMLPort, xmlelement, mode);
-    }
-    
-    //----in tick, move (or look) and shoot----
-    void WingmanController::tick(float dt)
-    {   
-        if (!this->isActive())
-            return; 
-        
-        SUPER(WingmanController, tick, dt);
-
     }
     
@@ -122,8 +107,5 @@
     Vector3 WingmanController::getFormationPosition ()
     {
-
-
         this->setFormationMode( this->myLeader_->getFormationMode() );
-        Vector3* targetRelativePosition;
         this->spread_ = this->myLeader_->getSpread();
         if (this->myLeader_->getIdentifier()->getName() == "DivisionController")
@@ -131,18 +113,11 @@
             switch (this->formationMode_){
                 case FormationMode::WALL:
-                {
-                    targetRelativePosition = new Vector3 (2.0f*this->spread_, 0, 0 - 1.0f*this->tolerance_);
-                    break;
-                }
+                    return Vector3 (2.0f*this->spread_, 0, 0 - 1.0f*this->tolerance_);
                 case FormationMode::FINGER4: 
-                {
-                    targetRelativePosition = new Vector3 (2.0f*this->spread_, 0, this->spread_ - 1.0f*this->tolerance_);
-                    break;
-                }
+                    return Vector3 (2.0f*this->spread_, 0, this->spread_ - 1.0f*this->tolerance_);
                 case FormationMode::DIAMOND: 
-                {
-                    targetRelativePosition = new Vector3 (2.0f*this->spread_, 0, this->spread_ - 1.0f*this->tolerance_);
-                    break;
-                }
+                    return Vector3 (2.0f*this->spread_, 0, this->spread_ - 1.0f*this->tolerance_);
+                default:
+                    return Vector3::ZERO;
             }
         }
@@ -151,23 +126,13 @@
             switch (this->formationMode_){
                 case FormationMode::WALL:
-                {
-                    targetRelativePosition = new Vector3 (-2.0f*this->spread_, 0, 0 - 1.0f*this->tolerance_);
-                    break;
-                }
+                    return Vector3 (-2.0f*this->spread_, 0, 0 - 1.0f*this->tolerance_);
                 case FormationMode::FINGER4: 
-                {
-                    targetRelativePosition = new Vector3 (-2.0f*this->spread_, 0, this->spread_ - 1.0f*this->tolerance_);
-                    break;
-                }
+                    return Vector3 (-2.0f*this->spread_, 0, this->spread_ - 1.0f*this->tolerance_);
                 case FormationMode::DIAMOND: 
-                {
-                    targetRelativePosition = new Vector3 (2.0f*this->spread_, -1.0f*this->spread_, 0 - 1.0f*this->tolerance_);
-                    break;
-                }
+                    return Vector3 (2.0f*this->spread_, -1.0f*this->spread_, 0 - 1.0f*this->tolerance_);
+                default:
+                    return Vector3::ZERO;
             }
         }
-        Vector3 result = *targetRelativePosition;
-        delete targetRelativePosition;
-        return result;
     }
     void WingmanController::keepFormation()
@@ -185,28 +150,28 @@
 
         if (!this->getControllableEntity())
-            return 0;
+            return nullptr;
 
         //----vars for finding the closest leader----
-        ActionpointController* closestLeader = 0;
+        ActionpointController* closestLeader = nullptr;
         float minDistance =  std::numeric_limits<float>::infinity();
         Gametype* gt = this->getGametype();
 
-        for (ObjectList<ActionpointController>::iterator it = ObjectList<ActionpointController>::begin(); it; ++it)
+        for (ActionpointController* controller : ObjectList<ActionpointController>())
         {
             //----0ptr or not a leader or dead?----
-            if (!it || 
-                (it->getIdentifier()->getName() != "SectionController" && it->getIdentifier()->getName() != "DivisionController") || 
-                !(it->getControllableEntity()))
+            if (!controller ||
+                (controller->getIdentifier()->getName() != "SectionController" && controller->getIdentifier()->getName() != "DivisionController") ||
+                !(controller->getControllableEntity()))
                 continue;
             
             //----same team?----
-            if ( !CommonController::sameTeam (this->getControllableEntity(), (it)->getControllableEntity(), gt) )
+            if ( !CommonController::sameTeam (this->getControllableEntity(), controller->getControllableEntity(), gt) )
                 continue;
             
             //----check distance----
-            float distance = CommonController::distance (it->getControllableEntity(), this->getControllableEntity());
-            if (distance < minDistance && !(it->hasWingman()))
+            float distance = CommonController::distance (controller->getControllableEntity(), this->getControllableEntity());
+            if (distance < minDistance && !(controller->hasWingman()))
             {
-                closestLeader = *it;
+                closestLeader = controller;
                 minDistance = distance;
             }
@@ -222,5 +187,5 @@
             }
         }
-        return 0;
+        return nullptr;
     }
 
Index: code/trunk/src/orxonox/controllers/WingmanController.h
===================================================================
--- code/trunk/src/orxonox/controllers/WingmanController.h	(revision 11056)
+++ code/trunk/src/orxonox/controllers/WingmanController.h	(revision 11071)
@@ -51,10 +51,7 @@
             
             //----[orxonox demanded functions]----
-                virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
-                virtual void tick(float dt); 
-                virtual bool hasWingman()
+                virtual bool hasWingman() override
                     { return false; }
-                virtual bool hasFollower()
+                virtual bool hasFollower() override
                     { return false; }
             //----[/orxonox demanded functions]----
@@ -66,5 +63,5 @@
         protected:
             //----action must only be managed by this----
-                virtual void action(); //<! action() is called in regular intervals managing the bot's behaviour.
+                virtual void action() override; //<! action() is called in regular intervals managing the bot's behaviour.
                 Vector3 getFormationPosition ();
                 void keepFormation();
Index: code/trunk/src/orxonox/gamestates/GSClient.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSClient.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSClient.h	(revision 11071)
@@ -43,7 +43,7 @@
         ~GSClient();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
     };
 }
Index: code/trunk/src/orxonox/gamestates/GSGraphics.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSGraphics.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSGraphics.h	(revision 11071)
@@ -53,7 +53,7 @@
         ~GSGraphics();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
 
     private:
Index: code/trunk/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSLevel.cc	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSLevel.cc	(revision 11071)
@@ -65,8 +65,8 @@
     GSLevel::GSLevel(const GameStateInfo& info)
         : GameState(info)
-        , gameInputState_(0)
-        , guiMouseOnlyInputState_(0)
-        , guiKeysOnlyInputState_(0)
-        , startFile_(0)
+        , gameInputState_(nullptr)
+        , guiMouseOnlyInputState_(nullptr)
+        , guiKeysOnlyInputState_(nullptr)
+        , startFile_(nullptr)
         , bShowIngameGUI_(false)
     {
@@ -143,7 +143,7 @@
 #endif
 
-            gameInputState_->setHandler(0);
-            guiMouseOnlyInputState_->setHandler(0);
-            guiKeysOnlyInputState_->setHandler(0);
+            gameInputState_->setHandler(nullptr);
+            guiMouseOnlyInputState_->setHandler(nullptr);
+            guiKeysOnlyInputState_->setHandler(nullptr);
             InputManager::getInstance().destroyState("game");
             InputManager::getInstance().destroyState("guiKeysOnly");
@@ -156,5 +156,5 @@
         {
             ModifyConsoleCommand(__CC_changeGame_name).deactivate();
-            ModifyConsoleCommand(__CC_reloadLevel_name).setObject(NULL).deactivate();
+            ModifyConsoleCommand(__CC_reloadLevel_name).setObject(nullptr).deactivate();
         }
     }
@@ -164,12 +164,12 @@
         // Note: Temporarily moved to GSRoot.
         //// Call the scene objects
-        //for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; ++it)
-        //    it->tick(time.getDeltaTime() * this->timeFactor_);
+        //for (Tickable* tickable : ObjectList<Tickable>())
+        //    tickable->tick(time.getDeltaTime() * this->timeFactor_);
     }
 
     void GSLevel::prepareObjectTracking()
     {
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it != ObjectList<BaseObject>::end(); ++it)
-            this->staticObjects_.insert(*it);
+        for (BaseObject* baseObject : ObjectList<BaseObject>())
+            this->staticObjects_.insert(baseObject);
     }
 
@@ -178,10 +178,10 @@
         orxout(internal_info) << "Remaining objects:" << endl;
         unsigned int i = 0;
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it != ObjectList<BaseObject>::end(); ++it)
-        {
-            std::set<BaseObject*>::const_iterator find = this->staticObjects_.find(*it);
+        for (BaseObject* baseObject : ObjectList<BaseObject>())
+        {
+            std::set<BaseObject*>::const_iterator find = this->staticObjects_.find(baseObject);
             if (find == this->staticObjects_.end())
             {
-                orxout(internal_warning) << ++i << ": " << it->getIdentifier()->getName() << " (" << *it << "), references: " << it->getReferenceCount() << endl;
+                orxout(internal_warning) << ++i << ": " << baseObject->getIdentifier()->getName() << " (" << baseObject << "), references: " << baseObject->getReferenceCount() << endl;
             }
         }
@@ -215,12 +215,15 @@
     void GSLevel::unloadLevelAsClient()
     {
-        for (ObjectList<Level>::iterator it = ObjectList<Level>::begin(); it != ObjectList<Level>::end(); )
+        ObjectList<Level> listLevel;
+        for (ObjectList<Level>::iterator it = listLevel.begin(); it != listLevel.end(); )
         {
             StrongPtr<Level> level = *(it++); // StrongPtr prevents that the Level gets destroyed while we loop over it
-            for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(level); it != ObjectList<BaseObject>::end(level); )
+            ObjectList<BaseObject> listBaseObject(level);
+            for (ObjectList<BaseObject>::iterator it = listBaseObject.begin(); it != listBaseObject.end(); )
                 (it++)->destroy();
         }
 
-        for (ObjectList<Synchronisable>::iterator it = ObjectList<Synchronisable>::begin(); it != ObjectList<Synchronisable>::end(); )
+        ObjectList<Synchronisable> listSynchronisable;
+        for (ObjectList<Synchronisable>::iterator it = listSynchronisable.begin(); it != listSynchronisable.end(); )
         {
             if (it->getSyncMode() != 0x0)
@@ -235,7 +238,7 @@
         // export all states
         std::vector<GSLevelMementoState*> states;
-        for (ObjectList<GSLevelMemento>::iterator it = ObjectList<GSLevelMemento>::begin(); it != ObjectList<GSLevelMemento>::end(); ++it)
-        {
-            GSLevelMementoState* state = it->exportMementoState();
+        for (GSLevelMemento* memento : ObjectList<GSLevelMemento>())
+        {
+            GSLevelMementoState* state = memento->exportMementoState();
             if (state)
                 states.push_back(state);
@@ -247,10 +250,10 @@
 
         // import all states
-        for (ObjectList<GSLevelMemento>::iterator it = ObjectList<GSLevelMemento>::begin(); it != ObjectList<GSLevelMemento>::end(); ++it)
-            it->importMementoState(states);
+        for (GSLevelMemento* memento : ObjectList<GSLevelMemento>())
+            memento->importMementoState(states);
 
         // delete states
-        for (size_t i = 0; i < states.size(); ++i)
-            delete states[i];
+        for (GSLevelMementoState* state : states)
+            delete state;
     }
 
Index: code/trunk/src/orxonox/gamestates/GSLevel.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSLevel.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSLevel.h	(revision 11071)
@@ -44,7 +44,7 @@
         ~GSLevel();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
 
         static void startMainMenu(void); //!< Starts the MainMenu
Index: code/trunk/src/orxonox/gamestates/GSLevelMemento.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSLevelMemento.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSLevelMemento.h	(revision 11071)
@@ -48,5 +48,5 @@
         protected:
             /**
-             * Returns the state of this memento. Returns NULL if no state needed to persist.
+             * Returns the state of this memento. Returns nullptr if no state needed to persist.
              */
             virtual GSLevelMementoState* exportMementoState() = 0;
Index: code/trunk/src/orxonox/gamestates/GSMainMenu.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSMainMenu.cc	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSMainMenu.cc	(revision 11071)
@@ -73,5 +73,5 @@
 
         // create an empty Scene
-        this->scene_ = new Scene(NULL);
+        this->scene_ = new Scene(nullptr);
         this->scene_->setSyncMode( 0x0 );
         // and a Camera
@@ -132,5 +132,5 @@
         InputManager::getInstance().leaveState("MainMenuHackery");
 
-        GraphicsManager::getInstance().setCamera(0);
+        GraphicsManager::getInstance().setCamera(nullptr);
         GUIManager::getInstance().setBackgroundImage("");
         GUIManager::hideGUI("MainMenu");
@@ -140,5 +140,5 @@
         ModifyConsoleCommand(__CC_startClient_name    ).deactivate();
         ModifyConsoleCommand(__CC_startDedicated_name ).deactivate();
-        ModifyConsoleCommand(__CC_setMainMenuSoundPath_name).setObject(0);
+        ModifyConsoleCommand(__CC_setMainMenuSoundPath_name).setObject(nullptr);
     }
 
Index: code/trunk/src/orxonox/gamestates/GSMainMenu.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSMainMenu.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSMainMenu.h	(revision 11071)
@@ -44,7 +44,7 @@
         ~GSMainMenu();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
 
         void setConfigValues();
Index: code/trunk/src/orxonox/gamestates/GSMasterServer.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSMasterServer.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSMasterServer.h	(revision 11071)
@@ -45,7 +45,7 @@
       ~GSMasterServer();
 
-      void activate();
-      void deactivate();
-      void update(const Clock& time);
+      virtual void activate() override;
+      virtual void deactivate() override;
+      virtual void update(const Clock& time) override;
 
     private:
Index: code/trunk/src/orxonox/gamestates/GSRoot.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSRoot.cc	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSRoot.cc	(revision 11071)
@@ -34,4 +34,5 @@
 #include "core/GameMode.h"
 #include "core/command/ConsoleCommandIncludes.h"
+#include "core/object/ObjectList.h"
 #include "network/NetworkFunctionIncludes.h"
 #include "tools/Timer.h"
@@ -73,11 +74,11 @@
     {
         unsigned int nr=0;
-        for (ObjectList<BaseObject>::iterator it = ObjectList<BaseObject>::begin(); it; ++it)
-        {
-            Synchronisable* synchronisable = orxonox_cast<Synchronisable*>(*it);
+        for (BaseObject* baseObject : ObjectList<BaseObject>())
+        {
+            Synchronisable* synchronisable = orxonox_cast<Synchronisable*>(baseObject);
             if (synchronisable)
-                orxout(debug_output) << "object: " << it->getIdentifier()->getName() << " id: " << synchronisable->getObjectID() << endl;
+                orxout(debug_output) << "object: " << baseObject->getIdentifier()->getName() << " id: " << synchronisable->getObjectID() << endl;
             else
-                orxout(debug_output) << "object: " << it->getIdentifier()->getName() << endl;
+                orxout(debug_output) << "object: " << baseObject->getIdentifier()->getName() << endl;
             nr++;
         }
@@ -98,8 +99,8 @@
     void GSRoot::deactivate()
     {
-        ModifyConsoleCommand(__CC_setTimeFactor_name).setObject(0);
-        ModifyConsoleCommand(__CC_getTimeFactor_name).setObject(0);
-        ModifyConsoleCommand(__CC_setPause_name).setObject(0);
-        ModifyConsoleCommand(__CC_pause_name).setObject(0);
+        ModifyConsoleCommand(__CC_setTimeFactor_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_getTimeFactor_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_setPause_name).setObject(nullptr);
+        ModifyConsoleCommand(__CC_pause_name).setObject(nullptr);
     }
 
@@ -112,5 +113,6 @@
         }
 
-        for (ObjectList<Timer>::iterator it = ObjectList<Timer>::begin(); it; )
+        ObjectList<Timer> listTimer;
+        for (ObjectList<Timer>::iterator it = listTimer.begin(); it; )
         {
             Timer* object = *it;
@@ -128,5 +130,6 @@
         }
         float realdt = leveldt * TimeFactorListener::getTimeFactor();
-        for (ObjectList<Tickable>::iterator it = ObjectList<Tickable>::begin(); it; )
+        ObjectList<Tickable> listTickable;
+        for (ObjectList<Tickable>::iterator it = listTickable.begin(); it; )
         {
             Tickable* object = *it;
Index: code/trunk/src/orxonox/gamestates/GSRoot.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSRoot.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSRoot.h	(revision 11071)
@@ -44,7 +44,7 @@
         static void printObjects();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
 
         // this has to be public because proteced triggers a bug in msvc
@@ -59,5 +59,5 @@
 
     protected:
-        virtual void changedTimeFactor(float factor_new, float factor_old);
+        virtual void changedTimeFactor(float factor_new, float factor_old) override;
 
     private:
Index: code/trunk/src/orxonox/gamestates/GSServer.cc
===================================================================
--- code/trunk/src/orxonox/gamestates/GSServer.cc	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSServer.cc	(revision 11071)
@@ -44,5 +44,5 @@
     GSServer::GSServer(const GameStateInfo& info)
         : GameState(info)
-        , server_(0)
+        , server_(nullptr)
     {
     }
Index: code/trunk/src/orxonox/gamestates/GSServer.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSServer.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSServer.h	(revision 11071)
@@ -43,7 +43,7 @@
         ~GSServer();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
 
     private:
Index: code/trunk/src/orxonox/gamestates/GSStandalone.h
===================================================================
--- code/trunk/src/orxonox/gamestates/GSStandalone.h	(revision 11056)
+++ code/trunk/src/orxonox/gamestates/GSStandalone.h	(revision 11071)
@@ -41,7 +41,7 @@
         ~GSStandalone();
 
-        void activate();
-        void deactivate();
-        void update(const Clock& time);
+        virtual void activate() override;
+        virtual void deactivate() override;
+        virtual void update(const Clock& time) override;
 
     private:
Index: code/trunk/src/orxonox/gametypes/Asteroids.h
===================================================================
--- code/trunk/src/orxonox/gametypes/Asteroids.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Asteroids.h	(revision 11071)
@@ -41,8 +41,8 @@
             virtual ~Asteroids() {}
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void start();
-            virtual void end();
+            virtual void start() override;
+            virtual void end() override;
 
             inline void firstCheckpointReached(bool reached)
@@ -50,5 +50,5 @@
 
         protected:
-            virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
+            virtual void pawnKilled(Pawn* victim, Pawn* killer = nullptr) override;
 
         private:
Index: code/trunk/src/orxonox/gametypes/Deathmatch.h
===================================================================
--- code/trunk/src/orxonox/gametypes/Deathmatch.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Deathmatch.h	(revision 11071)
@@ -41,12 +41,12 @@
             virtual ~Deathmatch() {}
 
-            virtual void start();
-            virtual void end();
-            virtual void playerEntered(PlayerInfo* player);
-            virtual bool playerLeft(PlayerInfo* player);
-            virtual bool playerChangedName(PlayerInfo* player);
+            virtual void start() override;
+            virtual void end() override;
+            virtual void playerEntered(PlayerInfo* player) override;
+            virtual bool playerLeft(PlayerInfo* player) override;
+            virtual bool playerChangedName(PlayerInfo* player) override;
 
-            virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
-            virtual void playerScored(PlayerInfo* player, int score = 1);
+            virtual void pawnKilled(Pawn* victim, Pawn* killer = nullptr) override;
+            virtual void playerScored(PlayerInfo* player, int score = 1) override;
     };
 }
Index: code/trunk/src/orxonox/gametypes/Dynamicmatch.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/Dynamicmatch.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Dynamicmatch.cc	(revision 11071)
@@ -88,6 +88,6 @@
     Dynamicmatch::~Dynamicmatch()
     {
-        for (std::set<Timer*>::iterator it = this->piggyTimers_.begin(); it != this->piggyTimers_.end(); ++it)
-            delete (*it);
+        for (Timer* timer : this->piggyTimers_)
+            delete timer;
     }
 
@@ -413,9 +413,9 @@
     void Dynamicmatch::rewardPig()
     {
-        for (std::map< PlayerInfo*, int >::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it) //durch alle Spieler iterieren und alle piggys finden
-        {
-            if (it->second==piggy)//Spieler mit der Pig-party frags++
-            {
-                 this->playerScored(it->first);
+        for (const auto& mapEntry : this->playerParty_) //durch alle Spieler iterieren und alle piggys finden
+        {
+            if (mapEntry.second==piggy)//Spieler mit der Pig-party frags++
+            {
+                 this->playerScored(mapEntry.first);
             }
         }
@@ -430,9 +430,9 @@
 
                 std::set<WorldEntity*> pawnAttachments = pawn->getAttachedObjects();
-                for (std::set<WorldEntity*>::iterator it = pawnAttachments.begin(); it != pawnAttachments.end(); ++it)
-                {
-                    if ((*it)->isA(Class(TeamColourable)))
+                for (WorldEntity* pawnAttachment : pawnAttachments)
+                {
+                    if (pawnAttachment->isA(Class(TeamColourable)))
                     {
-                        TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
+                        TeamColourable* tc = orxonox_cast<TeamColourable*>(pawnAttachment);
                         tc->setTeamColour(this->partyColours_[it_player->second]);
                     }
@@ -449,11 +449,11 @@
             if (tutorial) // Announce selectionphase
             {
-             for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
-                {
-                    if (!it->first)//in order to catch nullpointer
+             for (const auto& mapEntry : this->playerParty_)
+                {
+                    if (!mapEntry.first)//in order to catch nullpointer
                         continue;
-                    if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                    if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                         continue;
-                    this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",it->first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
+                    this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",mapEntry.first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
                 }
             }
@@ -464,26 +464,26 @@
              if(tutorial&&(!notEnoughKillers)&&(!notEnoughChasers)) //Selection phase over
              {
-                  for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
+                  for (const auto& mapEntry : this->playerParty_)
                   {
-                       if (!it->first)//in order to catch nullpointer
+                       if (!mapEntry.first)//in order to catch nullpointer
                            continue;
-                       if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                       if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                            continue;
-                       else if (it->second==chaser)
+                       else if (mapEntry.second==chaser)
                        {
                            if (numberOf[killer]>0)
-                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible. Defend yourself against the killers.",it->first->getClientID(),partyColours_[piggy]);
+                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible. Defend yourself against the killers.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            else
-                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible.",it->first->getClientID(),partyColours_[piggy]);
+                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            //this->gtinfo_->sendFadingMessage("You're now a chaser.",it->first->getClientID());
                        }
-                       else if (it->second==piggy)
-                       {
-                           this->gtinfo_->sendStaticMessage("Either hide or shoot a chaser.",it->first->getClientID(),partyColours_[chaser]);
+                       else if (mapEntry.second==piggy)
+                       {
+                           this->gtinfo_->sendStaticMessage("Either hide or shoot a chaser.",mapEntry.first->getClientID(),partyColours_[chaser]);
                            //this->gtinfo_->sendFadingMessage("You're now a victim.",it->first->getClientID());
                        }
-                       else if (it->second==killer)
-                       {
-                           this->gtinfo_->sendStaticMessage("Take the chasers down.",it->first->getClientID(),partyColours_[chaser]);
+                       else if (mapEntry.second==killer)
+                       {
+                           this->gtinfo_->sendStaticMessage("Take the chasers down.",mapEntry.first->getClientID(),partyColours_[chaser]);
                            //this->gtinfo_->sendFadingMessage("You're now a killer.",it->first->getClientID());
                        }
@@ -498,11 +498,11 @@
             if (tutorial) // Announce selectionphase
             {
-             for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
-                {
-                    if (!it->first)//in order to catch nullpointer
+             for (const auto& mapEntry : this->playerParty_)
+                {
+                    if (!mapEntry.first)//in order to catch nullpointer
                         continue;
-                    if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                    if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                         continue;
-                    this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",it->first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
+                    this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",mapEntry.first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
                 }
             }
@@ -513,26 +513,26 @@
             if(tutorial&&(!notEnoughPigs)&&(!notEnoughChasers)) //Selection phase over
              {
-                  for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
+                  for (const auto& mapEntry : this->playerParty_)
                   {
-                       if (!it->first)
+                       if (!mapEntry.first)
                            continue;
-                       if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                       if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                            continue;
-                       else if (it->second==chaser)
+                       else if (mapEntry.second==chaser)
                        {
                            if (numberOf[killer]>0)
-                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible. Defend yourself against the killers.",it->first->getClientID(),partyColours_[piggy]);
+                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible. Defend yourself against the killers.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            else
-                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible.",it->first->getClientID(),partyColours_[piggy]);
+                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            //this->gtinfo_->sendFadingMessage("You're now a chaser.",it->first->getClientID());
                        }
-                       else if (it->second==piggy)
-                       {
-                           this->gtinfo_->sendStaticMessage("Either hide or shoot a chaser.",it->first->getClientID(),partyColours_[piggy]);
+                       else if (mapEntry.second==piggy)
+                       {
+                           this->gtinfo_->sendStaticMessage("Either hide or shoot a chaser.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            //this->gtinfo_->sendFadingMessage("You're now a victim.",it->first->getClientID());
                        }
-                       else if (it->second==killer)
-                       {
-                           this->gtinfo_->sendStaticMessage("Take the chasers down.",it->first->getClientID(),partyColours_[piggy]);
+                       else if (mapEntry.second==killer)
+                       {
+                           this->gtinfo_->sendStaticMessage("Take the chasers down.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            //this->gtinfo_->sendFadingMessage("You're now a killer.",it->first->getClientID());
                        }
@@ -548,11 +548,11 @@
             if (tutorial) // Announce selectionphase
             {
-             for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
-                {
-                    if (!it->first)//in order to catch nullpointer
+             for (const auto& mapEntry : this->playerParty_)
+                {
+                    if (!mapEntry.first)//in order to catch nullpointer
                         continue;
-                    if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                    if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                         continue;
-                    this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",it->first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
+                    this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",mapEntry.first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
                 }
             }
@@ -563,26 +563,26 @@
              if(tutorial&&(!notEnoughPigs)&&(!notEnoughKillers)) //Selection phase over
              {
-                  for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
+                  for (const auto& mapEntry : this->playerParty_)
                   {
-                       if (!it->first)
+                       if (!mapEntry.first)
                            continue;
-                       if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                       if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                            continue;
-                       else if (it->second==chaser)
+                       else if (mapEntry.second==chaser)
                        {
                            if (numberOf[killer]>0)
-                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible. Defend yourself against the killers.",it->first->getClientID(),partyColours_[piggy]);
+                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible. Defend yourself against the killers.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            else
-                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible.",it->first->getClientID(),partyColours_[piggy]);
+                               this->gtinfo_->sendStaticMessage("Shoot at the victim as often as possible.",mapEntry.first->getClientID(),partyColours_[piggy]);
                            //this->gtinfo_->sendFadingMessage("You're now a chaser.",it->first->getClientID());
                        }
-                       else if (it->second==piggy)
-                       {
-                           this->gtinfo_->sendStaticMessage("Either hide or shoot a chaser.",it->first->getClientID(),partyColours_[chaser]);
+                       else if (mapEntry.second==piggy)
+                       {
+                           this->gtinfo_->sendStaticMessage("Either hide or shoot a chaser.",mapEntry.first->getClientID(),partyColours_[chaser]);
                            //this->gtinfo_->sendFadingMessage("You're now a victim.",it->first->getClientID());
                        }
-                       else if (it->second==killer)
-                       {
-                           this->gtinfo_->sendStaticMessage("Take the chasers down.",it->first->getClientID(),partyColours_[chaser]);
+                       else if (mapEntry.second==killer)
+                       {
+                           this->gtinfo_->sendStaticMessage("Take the chasers down.",mapEntry.first->getClientID(),partyColours_[chaser]);
                            //this->gtinfo_->sendFadingMessage("You're now a killer.",it->first->getClientID());
                        }
@@ -631,9 +631,9 @@
         else if(tutorial) // Announce selectionphase
         {
-            for (std::map<PlayerInfo*, int>::iterator it = this->playerParty_.begin(); it != this->playerParty_.end(); ++it)
-            {
-                if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+            for (const auto& mapEntry : this->playerParty_)
+            {
+                if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                     continue;
-                this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",it->first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
+                this->gtinfo_->sendStaticMessage("Selection phase: Shoot at everything that moves.",mapEntry.first->getClientID(),ColourValue(1.0f, 1.0f, 0.5f));
             }
         }
@@ -687,8 +687,8 @@
             unsigned int randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(teamSpawnPoints.size())));
             unsigned int index = 0;
-            for (std::set<SpawnPoint*>::const_iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ++it)
+            for (SpawnPoint* teamSpawnPoint : teamSpawnPoints)
             {
                 if (index == randomspawn)
-                    return (*it);
+                    return teamSpawnPoint;
 
                 ++index;
@@ -696,5 +696,5 @@
         }
 
-        return 0;
+        return nullptr;
     }
 
Index: code/trunk/src/orxonox/gametypes/Dynamicmatch.h
===================================================================
--- code/trunk/src/orxonox/gametypes/Dynamicmatch.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Dynamicmatch.h	(revision 11071)
@@ -65,12 +65,12 @@
             bool tutorial; //goal: new players receive messages how the new gametype works - later it can be switched off.
 
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); //ok - score function and management of parties
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); //ok - simple
-            virtual void start();
-            virtual void end(); //Wie geht das mit der Punkteausgabe aendern? Z.B: Persoenliche Nachricht?
-            virtual void playerEntered(PlayerInfo* player);
-            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn);//is used to initialize the player's party and colour
-            virtual bool playerLeft(PlayerInfo* player);
-            virtual bool playerChangedName(PlayerInfo* player);//unchanged
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = nullptr) override; //ok - score function and management of parties
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr) override; //ok - simple
+            virtual void start() override;
+            virtual void end() override; //Wie geht das mit der Punkteausgabe aendern? Z.B: Persoenliche Nachricht?
+            virtual void playerEntered(PlayerInfo* player) override;
+            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) override;//is used to initialize the player's party and colour
+            virtual bool playerLeft(PlayerInfo* player) override;
+            virtual bool playerChangedName(PlayerInfo* player) override;//unchanged
 
             /*virtual void instructions();
@@ -79,6 +79,6 @@
             void grantPigBoost(SpaceShip* spaceship); // Grant the piggy a boost.
             void resetSpeedFactor(SpaceShip* spaceship, Timer* timer);
-            void tick (float dt);// used to end the game
-            SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const;
+            virtual void tick (float dt) override;// used to end the game
+            virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const override;
 
 
Index: code/trunk/src/orxonox/gametypes/Gametype.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/Gametype.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Gametype.cc	(revision 11071)
@@ -66,5 +66,5 @@
 
         this->defaultControllableEntity_ = Class(Spectator);
-        this->scoreboard_ = 0;
+        this->scoreboard_ = nullptr;
 
         this->bAutoStart_ = false;
@@ -92,6 +92,6 @@
                 this->gtinfo_->destroy();
 
-            ModifyConsoleCommand(__CC_addBots_name).setObject(NULL);
-            ModifyConsoleCommand(__CC_killBots_name).setObject(NULL);
+            ModifyConsoleCommand(__CC_addBots_name).setObject(nullptr);
+            ModifyConsoleCommand(__CC_killBots_name).setObject(nullptr);
         }
     }
@@ -139,9 +139,9 @@
         if (!this->gtinfo_->hasStarted())
         {
-            for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
+            for (const auto& mapEntry : this->players_)
             {
                 // Inform the GametypeInfo that the player is ready to spawn.
-                if(it->first->isHumanPlayer() && it->first->isReadyToSpawn())
-                    this->gtinfo_->playerReadyToSpawn(it->first);
+                if(mapEntry.first->isHumanPlayer() && mapEntry.first->isReadyToSpawn())
+                    this->gtinfo_->playerReadyToSpawn(mapEntry.first);
             }
 
@@ -169,9 +169,9 @@
         }
 
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-        {
-            if (it->first->getControllableEntity())
-            {
-                ControllableEntity* oldentity = it->first->getControllableEntity();
+        for (const auto& mapEntry : this->players_)
+        {
+            if (mapEntry.first->getControllableEntity())
+            {
+                ControllableEntity* oldentity = mapEntry.first->getControllableEntity();
 
                 ControllableEntity* entity = this->defaultControllableEntity_.fabricate(oldentity->getContext());
@@ -186,8 +186,8 @@
                     entity->setOrientation(oldentity->getWorldOrientation());
                 }
-                it->first->startControl(entity);
+                mapEntry.first->startControl(entity);
             }
             else
-                this->spawnPlayerAsDefaultPawn(it->first);
+                this->spawnPlayerAsDefaultPawn(mapEntry.first);
         }
     }
@@ -337,15 +337,15 @@
         {
             // Fallback spawn point if there is no active one, choose a random one.
-            SpawnPoint* fallbackSpawnPoint = NULL;
+            SpawnPoint* fallbackSpawnPoint = nullptr;
             unsigned int randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(this->spawnpoints_.size())));
             unsigned int index = 0;
             std::vector<SpawnPoint*> activeSpawnPoints;
-            for (std::set<SpawnPoint*>::const_iterator it = this->spawnpoints_.begin(); it != this->spawnpoints_.end(); ++it)
+            for (SpawnPoint* spawnpoint : this->spawnpoints_)
             {
                 if (index == randomspawn)
-                    fallbackSpawnPoint = (*it);
-
-                if (*it != NULL && (*it)->isActive())
-                    activeSpawnPoints.push_back(*it);
+                    fallbackSpawnPoint = spawnpoint;
+
+                if (spawnpoint != nullptr && spawnpoint->isActive())
+                    activeSpawnPoints.push_back(spawnpoint);
 
                 ++index;
@@ -361,19 +361,19 @@
             return fallbackSpawnPoint;
         }
-        return 0;
+        return nullptr;
     }
 
     void Gametype::assignDefaultPawnsIfNeeded()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-        {
-            if (!it->first->getControllableEntity())
-            {
-                it->second.state_ = PlayerState::Dead;
-
-                if (!it->first->isReadyToSpawn() || !this->gtinfo_->hasStarted())
-                {
-                    this->spawnPlayerAsDefaultPawn(it->first);
-                    it->second.state_ = PlayerState::Dead;
+        for (auto& mapEntry : this->players_)
+        {
+            if (!mapEntry.first->getControllableEntity())
+            {
+                mapEntry.second.state_ = PlayerState::Dead;
+
+                if (!mapEntry.first->isReadyToSpawn() || !this->gtinfo_->hasStarted())
+                {
+                    this->spawnPlayerAsDefaultPawn(mapEntry.first);
+                    mapEntry.second.state_ = PlayerState::Dead;
                 }
             }
@@ -404,9 +404,9 @@
                     bool allplayersready = true;
                     bool hashumanplayers = false;
-                    for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
+                    for (const auto& mapEntry : this->players_)
                     {
-                        if (!it->first->isReadyToSpawn())
+                        if (!mapEntry.first->isReadyToSpawn())
                             allplayersready = false;
-                        if (it->first->isHumanPlayer())
+                        if (mapEntry.first->isHumanPlayer())
                             hashumanplayers = true;
                     }
@@ -430,8 +430,8 @@
     void Gametype::spawnPlayersIfRequested()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-        {
-            if (it->first->isReadyToSpawn() || this->bForceSpawn_)
-                this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+        {
+            if (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_)
+                this->spawnPlayer(mapEntry.first);
         }
     }
@@ -439,8 +439,8 @@
     void Gametype::spawnDeadPlayersIfRequested()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->second.state_ == PlayerState::Dead)
-                if (it->first->isReadyToSpawn() || this->bForceSpawn_)
-                    this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (mapEntry.second.state_ == PlayerState::Dead)
+                if (mapEntry.first->isReadyToSpawn() || this->bForceSpawn_)
+                    this->spawnPlayer(mapEntry.first);
     }
 
@@ -492,5 +492,6 @@
     {
         unsigned int i = 0;
-        for (ObjectList<Bot>::iterator it = ObjectList<Bot>::begin(); (it != ObjectList<Bot>::end()) && ((amount == 0) || (i < amount)); )
+        ObjectList<Bot> list;
+        for (ObjectList<Bot>::iterator it = list.begin(); (it != list.end()) && ((amount == 0) || (i < amount)); )
         {
             if (it->getGametype() == this)
@@ -538,9 +539,9 @@
     GSLevelMementoState* Gametype::exportMementoState()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-        {
-            if (it->first->isHumanPlayer() && it->first->getControllableEntity() && it->first->getControllableEntity()->getCamera())
-            {
-                Camera* camera = it->first->getControllableEntity()->getCamera();
+        for (const auto& mapEntry : this->players_)
+        {
+            if (mapEntry.first->isHumanPlayer() && mapEntry.first->getControllableEntity() && mapEntry.first->getControllableEntity()->getCamera())
+            {
+                Camera* camera = mapEntry.first->getControllableEntity()->getCamera();
 
                 GametypeMementoState* state = new GametypeMementoState();
@@ -552,5 +553,5 @@
         }
 
-        return NULL;
+        return nullptr;
     }
 
@@ -558,8 +559,8 @@
     {
         // find correct memento state
-        GametypeMementoState* state = NULL;
-        for (size_t i = 0; i < states.size(); ++i)
-        {
-            state = dynamic_cast<GametypeMementoState*>(states[i]);
+        GametypeMementoState* state = nullptr;
+        for (GSLevelMementoState* temp : states)
+        {
+            state = dynamic_cast<GametypeMementoState*>(temp);
             if (state)
                 break;
@@ -570,10 +571,10 @@
 
         // find correct scene
-        Scene* scene = NULL;
-        for (ObjectList<Scene>::iterator it = ObjectList<Scene>::begin(); it != ObjectList<Scene>::end(); ++it)
-        {
-            if (it->getName() == state->sceneName_)
-            {
-                scene = *it;
+        Scene* scene = nullptr;
+        for (Scene* someScene : ObjectList<Scene>())
+        {
+            if (someScene->getName() == state->sceneName_)
+            {
+                scene = someScene;
                 break;
             }
@@ -587,12 +588,12 @@
 
         // find correct player and assign default entity with original position & orientation
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-        {
-            if (it->first->isHumanPlayer())
+        for (const auto& mapEntry : this->players_)
+        {
+            if (mapEntry.first->isHumanPlayer())
             {
                 ControllableEntity* entity = this->defaultControllableEntity_.fabricate(scene->getContext());
                 entity->setPosition(state->cameraPosition_);
                 entity->setOrientation(state->cameraOrientation_);
-                it->first->startControl(entity);
+                mapEntry.first->startControl(entity);
                 break;
             }
Index: code/trunk/src/orxonox/gametypes/Gametype.h
===================================================================
--- code/trunk/src/orxonox/gametypes/Gametype.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Gametype.h	(revision 11071)
@@ -45,19 +45,16 @@
 namespace orxonox
 {
-    namespace PlayerState
-    {
-        enum Value
-        {
-            Uninitialized,
-            Joined,
-            Alive,
-            Dead
-        };
-    }
+    enum class PlayerState
+    {
+        Uninitialized,
+        Joined,
+        Alive,
+        Dead
+    };
 
     struct Player
     {
         PlayerInfo* info_;
-        PlayerState::Value state_;
+        PlayerState state_;
         int frags_;
         int killed_;
@@ -76,5 +73,5 @@
             void setConfigValues();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             inline const GametypeInfo* getGametypeInfo() const
@@ -96,9 +93,9 @@
             virtual void playerScored(PlayerInfo* player, int score = 1);
 
-            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0);
-
-            virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
+            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = nullptr);
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = nullptr);
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr);
+
+            virtual void pawnKilled(Pawn* victim, Pawn* killer = nullptr);
             virtual void pawnPreSpawn(Pawn* pawn);
             virtual void pawnPostSpawn(Pawn* pawn);
@@ -175,6 +172,6 @@
             virtual void spawnDeadPlayersIfRequested();
 
-            virtual GSLevelMementoState* exportMementoState();
-            virtual void importMementoState(const std::vector<GSLevelMementoState*>& states);
+            virtual GSLevelMementoState* exportMementoState() override;
+            virtual void importMementoState(const std::vector<GSLevelMementoState*>& states) override;
 
             WeakPtr<GametypeInfo> gtinfo_;
Index: code/trunk/src/orxonox/gametypes/LastManStanding.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/LastManStanding.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/LastManStanding.cc	(revision 11071)
@@ -56,11 +56,11 @@
     void LastManStanding::spawnDeadPlayersIfRequested()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->second.state_ == PlayerState::Dead)
-            {
-                bool alive = (0<playerLives_[it->first]&&(inGame_[it->first]));
-                if (alive&&(it->first->isReadyToSpawn() || this->bForceSpawn_))
-                {
-                    this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (mapEntry.second.state_ == PlayerState::Dead)
+            {
+                bool alive = (0<playerLives_[mapEntry.first]&&(inGame_[mapEntry.first]));
+                if (alive&&(mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                {
+                    this->spawnPlayer(mapEntry.first);
                 }
             }
@@ -114,10 +114,10 @@
     {
         int min=lives;
-        for (std::map<PlayerInfo*, int>::iterator it = this->playerLives_.begin(); it != this->playerLives_.end(); ++it)
-        {
-            if (it->second<=0)
+        for (const auto& mapEntry : this->playerLives_)
+        {
+            if (mapEntry.second<=0)
                 continue;
-            if (it->second<lives)
-                min=it->second;
+            if (mapEntry.second<lives)
+                min=mapEntry.second;
         }
         return min;
@@ -128,13 +128,13 @@
         Gametype::end();
 
-        for (std::map<PlayerInfo*, int>::iterator it = this->playerLives_.begin(); it != this->playerLives_.end(); ++it)
-        {
-            if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+        for (const auto& mapEntry : this->playerLives_)
+        {
+            if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                 continue;
 
-            if (it->second > 0)
-                this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
+            if (mapEntry.second > 0)
+                this->gtinfo_->sendAnnounceMessage("You have won the match!", mapEntry.first->getClientID());
             else
-                this->gtinfo_->sendAnnounceMessage("You have lost the match!", it->first->getClientID());
+                this->gtinfo_->sendAnnounceMessage("You have lost the match!", mapEntry.first->getClientID());
         }
     }
@@ -237,39 +237,39 @@
                 this->end();
             }
-            for (std::map<PlayerInfo*, float>::iterator it = this->timeToAct_.begin(); it != this->timeToAct_.end(); ++it)
-            {
-                if (playerGetLives(it->first)<=0)//Players without lives shouldn't be affected by time.
+            for (auto& mapEntry : this->timeToAct_)
+            {
+                if (playerGetLives(mapEntry.first)<=0)//Players without lives shouldn't be affected by time.
                     continue;
-                it->second-=dt;//Decreases punishment time.
-                if (!inGame_[it->first])//Manages respawn delay - player is forced to respawn after the delaytime is used up.
-                {
-                    playerDelayTime_[it->first]-=dt;
-                    if (playerDelayTime_[it->first]<=0)
-                    this->inGame_[it->first]=true;
-
-                    if (it->first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
+                mapEntry.second-=dt;//Decreases punishment time.
+                if (!inGame_[mapEntry.first])//Manages respawn delay - player is forced to respawn after the delaytime is used up.
+                {
+                    playerDelayTime_[mapEntry.first]-=dt;
+                    if (playerDelayTime_[mapEntry.first]<=0)
+                    this->inGame_[mapEntry.first]=true;
+
+                    if (mapEntry.first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
                         continue;
-                    int output=1+(int)playerDelayTime_[it->first];
+                    int output=1+(int)playerDelayTime_[mapEntry.first];
                     const std::string& message = "Respawn in " +multi_cast<std::string>(output)+ " seconds." ;//Countdown
-                    this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
-                }
-                else if (it->second<0.0f)
-                {
-                    it->second=timeRemaining+3.0f;//reset punishment-timer
-                    if (playerGetLives(it->first)>0)
+                    this->gtinfo_->sendFadingMessage(message,mapEntry.first->getClientID());
+                }
+                else if (mapEntry.second<0.0f)
+                {
+                    mapEntry.second=timeRemaining+3.0f;//reset punishment-timer
+                    if (playerGetLives(mapEntry.first)>0)
                     {
-                        this->punishPlayer(it->first);
-                        if (it->first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
+                        this->punishPlayer(mapEntry.first);
+                        if (mapEntry.first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
                             return;
                         const std::string& message = ""; // resets Camper-Warning-message
-                        this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
+                        this->gtinfo_->sendFadingMessage(message,mapEntry.first->getClientID());
                     }
                 }
-                else if (it->second<timeRemaining/5)//Warning message
-                {
-                    if (it->first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
+                else if (mapEntry.second<timeRemaining/5)//Warning message
+                {
+                    if (mapEntry.first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
                         continue;
                     const std::string& message = "Camper Warning! Don't forget to shoot.";
-                    this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
+                    this->gtinfo_->sendFadingMessage(message,mapEntry.first->getClientID());
                 }
             }
Index: code/trunk/src/orxonox/gametypes/LastManStanding.h
===================================================================
--- code/trunk/src/orxonox/gametypes/LastManStanding.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/LastManStanding.h	(revision 11071)
@@ -61,5 +61,5 @@
             bool bHardPunishment; //!< Switches between damage and death as punishment.
             float punishDamageRate; //!< Makes Damage adjustable.
-            virtual void spawnDeadPlayersIfRequested(); //!< Prevents dead players to respawn.
+            virtual void spawnDeadPlayersIfRequested() override; //!< Prevents dead players to respawn.
             virtual int getMinLives(); //!< Returns minimum of each player's lives; players with 0 lives are skipped; 
 
@@ -69,16 +69,16 @@
             void setConfigValues(); //!< Makes values configurable.
 
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); //!< If a player shoot's an opponent, his punishment countdown will be resetted.
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); //!< Manages each players lives.
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = nullptr) override; //!< If a player shoot's an opponent, his punishment countdown will be resetted.
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr) override; //!< Manages each players lives.
 
-            virtual void end(); //!< Sends an end message.
+            virtual void end() override; //!< Sends an end message.
             int playerGetLives(PlayerInfo* player); //!< getFunction for the map "playerLives_".
             int getNumPlayersAlive() const; //!< Returns the number of players that are still alive.
-            virtual void playerEntered(PlayerInfo* player); //!< Initializes values.
-            virtual bool playerLeft(PlayerInfo* player); //!< Manages all local variables.
-            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn); //!< Resets punishment time and respawn delay.
+            virtual void playerEntered(PlayerInfo* player) override; //!< Initializes values.
+            virtual bool playerLeft(PlayerInfo* player) override; //!< Manages all local variables.
+            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) override; //!< Resets punishment time and respawn delay.
 
             void punishPlayer(PlayerInfo* player); //!< Function in order to kill a player. Punishment for hiding longer than "timeRemaining".
-            void tick (float dt); //!< used to end the game
+            virtual void tick (float dt) override; //!< used to end the game
     };
 }
Index: code/trunk/src/orxonox/gametypes/LastTeamStanding.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/LastTeamStanding.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/LastTeamStanding.cc	(revision 11071)
@@ -145,11 +145,11 @@
     void LastTeamStanding::spawnDeadPlayersIfRequested()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-            if (it->second.state_ == PlayerState::Dead)
-            {
-                bool alive = (0 < playerLives_[it->first]&&(inGame_[it->first]));
-                if (alive&&(it->first->isReadyToSpawn() || this->bForceSpawn_))
-                {
-                    this->spawnPlayer(it->first);
+        for (const auto& mapEntry : this->players_)
+            if (mapEntry.second.state_ == PlayerState::Dead)
+            {
+                bool alive = (0 < playerLives_[mapEntry.first]&&(inGame_[mapEntry.first]));
+                if (alive&&(mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
+                {
+                    this->spawnPlayer(mapEntry.first);
                 }
             }
@@ -184,39 +184,39 @@
                 this->end();
             }
-            for (std::map<PlayerInfo*, float>::iterator it = this->timeToAct_.begin(); it != this->timeToAct_.end(); ++it)
-            {
-                if (playerGetLives(it->first) <= 0)//Players without lives shouldn't be affected by time.
+            for (auto& mapEntry : this->timeToAct_)
+            {
+                if (playerGetLives(mapEntry.first) <= 0)//Players without lives shouldn't be affected by time.
                     continue;
-                it->second -= dt;//Decreases punishment time.
-                if (!inGame_[it->first])//Manages respawn delay - player is forced to respawn after the delaytime is used up.
-                {
-                    playerDelayTime_[it->first] -= dt;
-                    if (playerDelayTime_[it->first] <= 0)
-                    this->inGame_[it->first] = true;
-
-                    if (it->first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
+                mapEntry.second -= dt;//Decreases punishment time.
+                if (!inGame_[mapEntry.first])//Manages respawn delay - player is forced to respawn after the delaytime is used up.
+                {
+                    playerDelayTime_[mapEntry.first] -= dt;
+                    if (playerDelayTime_[mapEntry.first] <= 0)
+                    this->inGame_[mapEntry.first] = true;
+
+                    if (mapEntry.first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
                         continue;
-                    int output = 1 + (int)playerDelayTime_[it->first];
+                    int output = 1 + (int)playerDelayTime_[mapEntry.first];
                     const std::string& message = "Respawn in " +multi_cast<std::string>(output)+ " seconds." ;//Countdown
-                    this->gtinfo_->sendFadingMessage(message,it->first->getClientID());
-                }
-                else if (it->second < 0.0f)
-                {
-                    it->second = timeRemaining + 3.0f;//reset punishment-timer
-                    if (playerGetLives(it->first) > 0)
+                    this->gtinfo_->sendFadingMessage(message,mapEntry.first->getClientID());
+                }
+                else if (mapEntry.second < 0.0f)
+                {
+                    mapEntry.second = timeRemaining + 3.0f;//reset punishment-timer
+                    if (playerGetLives(mapEntry.first) > 0)
                     {
-                        this->punishPlayer(it->first);
-                        if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                        this->punishPlayer(mapEntry.first);
+                        if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                             return;
                         const std::string& message = ""; // resets Camper-Warning-message
-                        this->gtinfo_->sendFadingMessage(message, it->first->getClientID());
+                        this->gtinfo_->sendFadingMessage(message, mapEntry.first->getClientID());
                     }
                 }
-                else if (it->second < timeRemaining/5)//Warning message
-                {
-                  if (it->first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
+                else if (mapEntry.second < timeRemaining/5)//Warning message
+                {
+                  if (mapEntry.first->getClientID()== NETWORK_PEER_ID_UNKNOWN)
                         continue;
                     const std::string& message = "Camper Warning! Don't forget to shoot.";
-                    this->gtinfo_->sendFadingMessage(message, it->first->getClientID());
+                    this->gtinfo_->sendFadingMessage(message, mapEntry.first->getClientID());
                 }
             }
@@ -229,13 +229,13 @@
         int party = -1;
         //find a player who survived
-        for (std::map<PlayerInfo*, int>::iterator it = this->playerLives_.begin(); it != this->playerLives_.end(); ++it)
-        {
-          if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+        for (const auto& mapEntry : this->playerLives_)
+        {
+          if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                 continue;
 
-            if (it->second > 0)//a player that is alive
+            if (mapEntry.second > 0)//a player that is alive
             {
                 //which party has survived?
-                std::map<PlayerInfo*, int>::iterator it2 = this->teamnumbers_.find(it->first);
+                std::map<PlayerInfo*, int>::iterator it2 = this->teamnumbers_.find(mapEntry.first);
                 if (it2 != this->teamnumbers_.end())
                 {
@@ -255,10 +255,10 @@
     {
         int min = lives;
-        for (std::map<PlayerInfo*, int>::iterator it = this->playerLives_.begin(); it != this->playerLives_.end(); ++it)
-        {
-            if (it->second <= 0)
+        for (const auto& mapEntry : this->playerLives_)
+        {
+            if (mapEntry.second <= 0)
                 continue;
-            if (it->second < lives)
-                min = it->second;
+            if (mapEntry.second < lives)
+                min = mapEntry.second;
         }
         return min;
Index: code/trunk/src/orxonox/gametypes/LastTeamStanding.h
===================================================================
--- code/trunk/src/orxonox/gametypes/LastTeamStanding.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/LastTeamStanding.h	(revision 11071)
@@ -67,5 +67,5 @@
             std::map<PlayerInfo*, bool> inGame_; //!< Indicates each Player's state.
 
-            virtual void spawnDeadPlayersIfRequested(); //!< Prevents dead players to respawn.
+            virtual void spawnDeadPlayersIfRequested() override; //!< Prevents dead players to respawn.
             virtual int getMinLives(); //!< Returns minimum of each player's lives; players with 0 lives are skipped;
 
@@ -74,12 +74,12 @@
             virtual ~LastTeamStanding(); //!< Default Destructor.
 
-            virtual void playerEntered(PlayerInfo* player); //!< Initializes values.
-            virtual bool playerLeft(PlayerInfo* player); //!< Manages all local variables.
+            virtual void playerEntered(PlayerInfo* player) override; //!< Initializes values.
+            virtual bool playerLeft(PlayerInfo* player) override; //!< Manages all local variables.
 
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0); //!< Manages each player's lost lives.
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0); //!< If a player shoot's an opponent, his punishment countdown will be resetted.
-            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn); //!< Resets punishment time and respawn delay.
-            void tick (float dt); //!< used to end the game
-            virtual void end(); //!< Sends an end message.
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr) override; //!< Manages each player's lost lives.
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = nullptr) override; //!< If a player shoot's an opponent, his punishment countdown will be resetted.
+            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) override; //!< Resets punishment time and respawn delay.
+            virtual void tick (float dt) override; //!< used to end the game
+            virtual void end() override; //!< Sends an end message.
             void punishPlayer(PlayerInfo* player); //!< Function in order to kill a player. Punishment for hiding longer than "timeRemaining".
             int playerGetLives(PlayerInfo* player); //!< getFunction for the map "playerLives_".
Index: code/trunk/src/orxonox/gametypes/Mission.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/Mission.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Mission.cc	(revision 11071)
@@ -101,7 +101,6 @@
     void Mission::setTeams()
     { //Set pawn-colours
-        for (ObjectList<Pawn>::iterator it = ObjectList<Pawn>::begin(); it != ObjectList<Pawn>::end(); ++it)
+        for (Pawn* pawn : ObjectList<Pawn>())
         {
-            Pawn* pawn = static_cast<Pawn*>(*it);
             if (!pawn)
                 continue;
@@ -111,8 +110,8 @@
     void Mission::endMission(bool accomplished)
     {
-        for (ObjectList<Mission>::iterator it = ObjectList<Mission>::begin(); it != ObjectList<Mission>::end(); ++it)
+        for (Mission* mission : ObjectList<Mission>())
         { //TODO: make sure that only the desired mission is ended !! This is a dirty HACK, that would end ALL missions!
-            it->setMissionAccomplished(accomplished);
-            it->end();
+            mission->setMissionAccomplished(accomplished);
+            mission->end();
         }
     }
@@ -120,7 +119,7 @@
     void Mission::setLivesWrapper(unsigned int amount)
     {
-        for (ObjectList<Mission>::iterator it = ObjectList<Mission>::begin(); it != ObjectList<Mission>::end(); ++it)
+        for (Mission* mission : ObjectList<Mission>())
         { //TODO: make sure that only the desired mission is ended !! This is a dirty HACK, that would affect ALL missions!
-            it->setLives(amount);
+            mission->setLives(amount);
         }
     }
Index: code/trunk/src/orxonox/gametypes/Mission.h
===================================================================
--- code/trunk/src/orxonox/gametypes/Mission.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/Mission.h	(revision 11071)
@@ -42,10 +42,10 @@
             virtual ~Mission() {}
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
-            virtual void start();
-            virtual void end();
+            virtual void start() override;
+            virtual void end() override;
             virtual void setTeams();
-            virtual void addBots(unsigned int amount){} //<! overwrite function in order to bypass the addbots command
+            virtual void addBots(unsigned int amount) override{} //<! overwrite function in order to bypass the addbots command
             inline void setLives(unsigned int amount)
                 {this->lives_ = amount;}
@@ -58,5 +58,5 @@
 
         protected:
-            virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
+            virtual void pawnKilled(Pawn* victim, Pawn* killer = nullptr) override;
             bool missionAccomplished_; //<! indicates if player successfully finsihed the mission;
             int lives_; //<! amount of player's lives <-> nr. of retries
Index: code/trunk/src/orxonox/gametypes/TeamBaseMatch.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/TeamBaseMatch.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/TeamBaseMatch.cc	(revision 11071)
@@ -152,11 +152,11 @@
         int amountControlled2 = 0;
 
-        for (std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.begin(); it != this->bases_.end(); ++it)
-        {
-            if((*it)->getState() == BaseState::ControlTeam1)
+        for (TeamBaseMatchBase* base : this->bases_)
+        {
+            if(base->getState() == BaseState::ControlTeam1)
             {
                 amountControlled++;
             }
-            if((*it)->getState() == BaseState::ControlTeam2)
+            if(base->getState() == BaseState::ControlTeam2)
             {
                 amountControlled2++;
@@ -187,13 +187,13 @@
             }
 
-            for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
-            {
-                if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+            for (const auto& mapEntry : this->teamnumbers_)
+            {
+                if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                     continue;
 
-                if (it->second == winningteam)
-                    this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
+                if (mapEntry.second == winningteam)
+                    this->gtinfo_->sendAnnounceMessage("You have won the match!", mapEntry.first->getClientID());
                 else
-                    this->gtinfo_->sendAnnounceMessage("You have lost the match!", it->first->getClientID());
+                    this->gtinfo_->sendAnnounceMessage("You have lost the match!", mapEntry.first->getClientID());
             }
 
@@ -238,9 +238,9 @@
         int count = 0;
 
-        for (std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.begin(); it != this->bases_.end(); ++it)
-        {
-            if ((*it)->getState() == BaseState::ControlTeam1 && team == 0)
+        for (TeamBaseMatchBase* base : this->bases_)
+        {
+            if (base->getState() == BaseState::ControlTeam1 && team == 0)
                 count++;
-            if ((*it)->getState() == BaseState::ControlTeam2 && team == 1)
+            if (base->getState() == BaseState::ControlTeam2 && team == 1)
                 count++;
         }
@@ -258,11 +258,11 @@
     {
         unsigned int i = 0;
-        for (std::set<TeamBaseMatchBase*>::const_iterator it = this->bases_.begin(); it != this->bases_.end(); ++it)
+        for (TeamBaseMatchBase* base : this->bases_)
         {
             i++;
             if (i > index)
-                return (*it);
-        }
-        return 0;
+                return base;
+        }
+        return nullptr;
     }
 
Index: code/trunk/src/orxonox/gametypes/TeamBaseMatch.h
===================================================================
--- code/trunk/src/orxonox/gametypes/TeamBaseMatch.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/TeamBaseMatch.h	(revision 11071)
@@ -44,8 +44,8 @@
             virtual ~TeamBaseMatch() {}
 
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator);
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr) override;
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator) override;
 
-            virtual void playerScored(PlayerInfo* player, int score = 1);
+            virtual void playerScored(PlayerInfo* player, int score = 1) override;
             virtual void showPoints();
             virtual void endGame();
Index: code/trunk/src/orxonox/gametypes/TeamDeathmatch.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/TeamDeathmatch.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/TeamDeathmatch.cc	(revision 11071)
@@ -69,10 +69,10 @@
         int winnerTeam = 0;
         int highestScore = 0;
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
+        for (const auto& mapEntry : this->players_)
         {
-            if ( this->getTeamScore(it->first) > highestScore )
+            if ( this->getTeamScore(mapEntry.first) > highestScore )
             {
-                winnerTeam = this->getTeam(it->first);
-                highestScore = this->getTeamScore(it->first);
+                winnerTeam = this->getTeam(mapEntry.first);
+                highestScore = this->getTeamScore(mapEntry.first);
             }
         }
Index: code/trunk/src/orxonox/gametypes/TeamDeathmatch.h
===================================================================
--- code/trunk/src/orxonox/gametypes/TeamDeathmatch.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/TeamDeathmatch.h	(revision 11071)
@@ -42,12 +42,12 @@
 
             void setConfigValues();
-            virtual void start();
-            virtual void end();
-            virtual void playerEntered(PlayerInfo* player);
-            virtual bool playerLeft(PlayerInfo* player);
-            virtual bool playerChangedName(PlayerInfo* player);
+            virtual void start() override;
+            virtual void end() override;
+            virtual void playerEntered(PlayerInfo* player) override;
+            virtual bool playerLeft(PlayerInfo* player) override;
+            virtual bool playerChangedName(PlayerInfo* player) override;
 
-            virtual void pawnKilled(Pawn* victim, Pawn* killer = 0);
-            virtual void playerScored(PlayerInfo* player, int score = 1);
+            virtual void pawnKilled(Pawn* victim, Pawn* killer = nullptr) override;
+            virtual void playerScored(PlayerInfo* player, int score = 1) override;
        protected:
             int maxScore_; 
Index: code/trunk/src/orxonox/gametypes/TeamGametype.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/TeamGametype.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/TeamGametype.cc	(revision 11071)
@@ -75,5 +75,5 @@
     void TeamGametype::playerEntered(PlayerInfo* player)
     {
-        if(player == NULL) return; // catch null pointers
+        if(player == nullptr) return; // catch null pointers
         Gametype::playerEntered(player);
         this->findAndSetTeam(player);
@@ -96,10 +96,10 @@
     void TeamGametype::findAndSetTeam(PlayerInfo* player)
     {
-        if(player == NULL) return; // catch null pointers
+        if(player == nullptr) return; // catch null pointers
         std::vector<unsigned int> playersperteam(this->teams_, 0);
 
-        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
-            if (it->second < static_cast<int>(this->teams_) && it->second >= 0)
-                playersperteam[it->second]++;
+        for (const auto& mapEntry : this->teamnumbers_)
+            if (mapEntry.second < static_cast<int>(this->teams_) && mapEntry.second >= 0)
+                playersperteam[mapEntry.second]++;
 
         unsigned int minplayers = static_cast<unsigned int>(-1);
@@ -123,8 +123,8 @@
         if( (this->players_.size() >= maxPlayers_) && (allowedInGame_[player] == true) ) // if there's a "waiting list"
         {
-            for (std::map<PlayerInfo*, bool>::iterator it = this->allowedInGame_.begin(); it != this->allowedInGame_.end(); ++it)
-            {
-                 if(it->second == false) // waiting player found
-                 {it->second = true; break;} // allow player to enter
+            for (auto& mapEntry : this->allowedInGame_)
+            {
+                 if(mapEntry.second == false) // waiting player found
+                 {mapEntry.second = true; break;} // allow player to enter
             }
         }
@@ -141,15 +141,15 @@
     void TeamGametype::spawnDeadPlayersIfRequested()
     {
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)\
-        {
-            if(allowedInGame_[it->first] == false)//check if dead player is allowed to enter
+        for (const auto& mapEntry : this->players_)\
+        {
+            if(allowedInGame_[mapEntry.first] == false)//check if dead player is allowed to enter
             {
                 continue;
             }
-            if (it->second.state_ == PlayerState::Dead)
-            {
-                if ((it->first->isReadyToSpawn() || this->bForceSpawn_))
+            if (mapEntry.second.state_ == PlayerState::Dead)
+            {
+                if ((mapEntry.first->isReadyToSpawn() || this->bForceSpawn_))
                 {
-                   this->spawnPlayer(it->first);
+                   this->spawnPlayer(mapEntry.first);
                 }
             }
@@ -178,9 +178,9 @@
         if(!player || this->getTeam(player) == -1)
             return 0;
-        for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
-        {
-            if ( this->getTeam(it->first) ==  this->getTeam(player) )
-            {
-                teamscore += it->second.frags_;
+        for (const auto& mapEntry : this->players_)
+        {
+            if ( this->getTeam(mapEntry.first) ==  this->getTeam(player) )
+            {
+                teamscore += mapEntry.second.frags_;
             }
         }
@@ -191,7 +191,7 @@
     {
         int teamSize = 0;
-        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
-        {
-            if (it->second == team)
+        for (const auto& mapEntry : this->teamnumbers_)
+        {
+            if (mapEntry.second == team)
                 teamSize++;
         }
@@ -202,7 +202,7 @@
     {
         int teamSize = 0;
-        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
-        {
-            if (it->second == team  && it->first->isHumanPlayer())
+        for (const auto& mapEntry : this->teamnumbers_)
+        {
+            if (mapEntry.second == team  && mapEntry.first->isHumanPlayer())
                 teamSize++;
         }
@@ -235,5 +235,5 @@
         }
 
-        SpawnPoint* fallbackSpawnPoint = NULL;
+        SpawnPoint* fallbackSpawnPoint = nullptr;
         if (teamSpawnPoints.size() > 0)
         {
@@ -241,9 +241,9 @@
             unsigned int index = 0;
             // Get random fallback spawnpoint in case there is no active SpawnPoint.
-            for (std::set<SpawnPoint*>::const_iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ++it)
+            for (SpawnPoint* teamSpawnPoint : teamSpawnPoints)
             {
                 if (index == randomspawn)
                 {
-                    fallbackSpawnPoint = (*it);
+                    fallbackSpawnPoint = teamSpawnPoint;
                     break;
                 }
@@ -266,8 +266,8 @@
             randomspawn = static_cast<unsigned int>(rnd(static_cast<float>(teamSpawnPoints.size())));
             index = 0;
-            for (std::set<SpawnPoint*>::const_iterator it = teamSpawnPoints.begin(); it != teamSpawnPoints.end(); ++it)
+            for (SpawnPoint* teamSpawnPoint : teamSpawnPoints)
             {
                 if (index == randomspawn)
-                    return (*it);
+                    return teamSpawnPoint;
 
                 ++index;
@@ -277,5 +277,5 @@
         }
 
-        return 0;
+        return nullptr;
     }
 
@@ -328,5 +328,5 @@
     void TeamGametype::setDefaultObjectColour(Pawn* pawn)
     {
-        if(pawn == NULL)
+        if(pawn == nullptr)
             return;
 
@@ -340,5 +340,5 @@
         ControllableEntity* entity = orxonox_cast<ControllableEntity*>(pawn);
 
-        Controller* controller = 0;
+        Controller* controller = nullptr;
         if (entity->getController())
             controller = entity->getController();
@@ -350,5 +350,5 @@
         ArtificialController* artificial =  orxonox_cast<ArtificialController*>(controller);
         //get Teamnumber - get the data
-        if(artificial == NULL)
+        if(artificial == nullptr)
             return;
         teamnumber= artificial->getTeam();
@@ -360,13 +360,13 @@
     void TeamGametype::colourPawn(Pawn* pawn, int teamNr)
     {// catch: no-colouring-case and wrong input
-        if(teamNr < 0 || teamNr+1 > int(this->teamcolours_.size()) ||pawn == NULL) return;
+        if(teamNr < 0 || teamNr+1 > int(this->teamcolours_.size()) ||pawn == nullptr) return;
         pawn->setRadarObjectColour(this->teamcolours_[teamNr]);
 
         std::set<WorldEntity*> pawnAttachments = pawn->getAttachedObjects();
-        for (std::set<WorldEntity*>::iterator it = pawnAttachments.begin(); it != pawnAttachments.end(); ++it)
-        {
-            if ((*it)->isA(Class(TeamColourable)))
-            {
-                TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
+        for (WorldEntity* pawnAttachment : pawnAttachments)
+        {
+            if (pawnAttachment->isA(Class(TeamColourable)))
+            {
+                TeamColourable* tc = orxonox_cast<TeamColourable*>(pawnAttachment);
                 tc->setTeamColour(this->teamcolours_[teamNr]);
             }
@@ -376,15 +376,15 @@
     void TeamGametype::announceTeamWin(int winnerTeam)
     {
-        for (std::map<PlayerInfo*, int>::iterator it3 = this->teamnumbers_.begin(); it3 != this->teamnumbers_.end(); ++it3)
-        {
-            if (it3->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+        for (const auto& mapEntry : this->teamnumbers_)
+        {
+            if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                 continue;
-            if (it3->second == winnerTeam)
-            {
-                this->gtinfo_->sendAnnounceMessage("Your team has won the match!", it3->first->getClientID());
+            if (mapEntry.second == winnerTeam)
+            {
+                this->gtinfo_->sendAnnounceMessage("Your team has won the match!", mapEntry.first->getClientID());
             }
             else
             {
-                this->gtinfo_->sendAnnounceMessage("Your team has lost the match!", it3->first->getClientID());
+                this->gtinfo_->sendAnnounceMessage("Your team has lost the match!", mapEntry.first->getClientID());
             }
         }   
Index: code/trunk/src/orxonox/gametypes/TeamGametype.h
===================================================================
--- code/trunk/src/orxonox/gametypes/TeamGametype.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/TeamGametype.h	(revision 11071)
@@ -46,14 +46,14 @@
             void setConfigValues();
 
-            virtual void playerEntered(PlayerInfo* player);
+            virtual void playerEntered(PlayerInfo* player) override;
             virtual void findAndSetTeam(PlayerInfo* player);
-            virtual bool playerLeft(PlayerInfo* player);
-            virtual void spawnDeadPlayersIfRequested(); //!< Prevents players to respawn.
+            virtual bool playerLeft(PlayerInfo* player) override;
+            virtual void spawnDeadPlayersIfRequested() override; //!< Prevents players to respawn.
 
-            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0);
+            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = nullptr) override;
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = nullptr) override;
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr) override;
 
-            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn);
+            virtual void playerStartsControllingPawn(PlayerInfo* player, Pawn* pawn) override;
 
 
@@ -67,5 +67,5 @@
 
         protected:
-            virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const;
+            virtual SpawnPoint* getBestSpawnPoint(PlayerInfo* player) const override;
             bool pawnsAreInTheSameTeam(Pawn* pawn1, Pawn* pawn2);
 
Index: code/trunk/src/orxonox/gametypes/UnderAttack.cc
===================================================================
--- code/trunk/src/orxonox/gametypes/UnderAttack.cc	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/UnderAttack.cc	(revision 11071)
@@ -48,5 +48,5 @@
         this->gameTime_ = 180;
         this->teams_ = 2;
-        this->destroyer_ = 0;
+        this->destroyer_ = nullptr;
         this->destroyer_.setCallback(createFunctor(&UnderAttack::killedDestroyer, this));
         this->gameEnded_ = false;
@@ -74,13 +74,13 @@
         this->gameEnded_ = true;
 
-        for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
-        {
-            if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+        for (const auto& mapEntry : this->teamnumbers_)
+        {
+            if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                 continue;
 
-            if (it->second == attacker_)
-                this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
+            if (mapEntry.second == attacker_)
+                this->gtinfo_->sendAnnounceMessage("You have won the match!", mapEntry.first->getClientID());
             else
-                this->gtinfo_->sendAnnounceMessage("You have lost the match!", it->first->getClientID());
+                this->gtinfo_->sendAnnounceMessage("You have lost the match!", mapEntry.first->getClientID());
         }
     }
@@ -155,13 +155,13 @@
                 ChatManager::message(message);
 
-                for (std::map<PlayerInfo*, int>::iterator it = this->teamnumbers_.begin(); it != this->teamnumbers_.end(); ++it)
-                {
-                    if (it->first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
+                for (const auto& mapEntry : this->teamnumbers_)
+                {
+                    if (mapEntry.first->getClientID() == NETWORK_PEER_ID_UNKNOWN)
                         continue;
 
-                    if (it->second == 1)
-                        this->gtinfo_->sendAnnounceMessage("You have won the match!", it->first->getClientID());
+                    if (mapEntry.second == 1)
+                        this->gtinfo_->sendAnnounceMessage("You have won the match!", mapEntry.first->getClientID());
                     else
-                        this->gtinfo_->sendAnnounceMessage("You have lost the match!", it->first->getClientID());
+                        this->gtinfo_->sendAnnounceMessage("You have lost the match!", mapEntry.first->getClientID());
                 }
             }
@@ -202,5 +202,5 @@
     void UnderAttack::setTransporterHealth()
     {
-        if (this->destroyer_ != 0)
+        if (this->destroyer_ != nullptr)
         {
             //Calculation: Each attacker deals about 3500 damage. A human attacker deals 1500 damage additionally.
Index: code/trunk/src/orxonox/gametypes/UnderAttack.h
===================================================================
--- code/trunk/src/orxonox/gametypes/UnderAttack.h	(revision 11056)
+++ code/trunk/src/orxonox/gametypes/UnderAttack.h	(revision 11071)
@@ -43,13 +43,13 @@
 
             void setConfigValues();
-            void tick (float dt);
+            virtual void tick (float dt) override;
             void addDestroyer(Destroyer* destroyer);
             inline Destroyer* getDestroyer() const
                 { return this->destroyer_; }
 
-            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = 0);
-            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = 0);
-            virtual void playerEntered(PlayerInfo* player);
+            virtual bool allowPawnHit(Pawn* victim, Pawn* originator = nullptr) override;
+            virtual bool allowPawnDamage(Pawn* victim, Pawn* originator = nullptr) override;
+            virtual bool allowPawnDeath(Pawn* victim, Pawn* originator = nullptr) override;
+            virtual void playerEntered(PlayerInfo* player) override;
 
         protected:
Index: code/trunk/src/orxonox/graphics/AnimatedModel.h
===================================================================
--- code/trunk/src/orxonox/graphics/AnimatedModel.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/AnimatedModel.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~AnimatedModel();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             void registerVariables();
 
@@ -51,5 +51,5 @@
             virtual void setAnimEnabled(bool enabled);
             virtual void setAnimLoop(bool loop);
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
             virtual void changedMesh();
 
Index: code/trunk/src/orxonox/graphics/Backlight.cc
===================================================================
--- code/trunk/src/orxonox/graphics/Backlight.cc	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Backlight.cc	(revision 11071)
@@ -51,6 +51,6 @@
         RegisterObject(Backlight);
 
-        this->ribbonTrail_ = 0;
-        this->ribbonTrailNode_ = 0;
+        this->ribbonTrail_ = nullptr;
+        this->ribbonTrailNode_ = nullptr;
 
         this->width_ = 0;
Index: code/trunk/src/orxonox/graphics/Backlight.h
===================================================================
--- code/trunk/src/orxonox/graphics/Backlight.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Backlight.h	(revision 11071)
@@ -44,8 +44,8 @@
             virtual ~Backlight();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void tick(float dt);
-            virtual void changedVisibility();
+            virtual void tick(float dt) override;
+            virtual void changedVisibility() override;
 
             inline void setWidth(float width)
@@ -74,15 +74,15 @@
                 { return this->trailmaterial_; }
 
-            virtual void changedScale();
+            virtual void changedScale() override;
 
         protected:
-            virtual void changedTimeFactor(float factor_new, float factor_old);
+            virtual void changedTimeFactor(float factor_new, float factor_old) override;
 
         private:
             void registerVariables();
-            virtual void startturnonoff();
-            virtual void stopturnonoff();
-            virtual void poststopturnonoff();
-            virtual void changedColour();
+            virtual void startturnonoff() override;
+            virtual void stopturnonoff() override;
+            virtual void poststopturnonoff() override;
+            virtual void changedColour() override;
             void update_width();
             void update_lifetime();
Index: code/trunk/src/orxonox/graphics/Billboard.cc
===================================================================
--- code/trunk/src/orxonox/graphics/Billboard.cc	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Billboard.cc	(revision 11071)
@@ -139,5 +139,5 @@
     {
         Ogre::BillboardSet* bSet = this->billboard_.getBillboardSet();
-        if( bSet != NULL )
+        if( bSet != nullptr )
         {
             bSet->setBillboardType(bbt);
@@ -148,5 +148,5 @@
     {
         Ogre::BillboardSet* bSet = this->billboard_.getBillboardSet();
-        if( bSet != NULL )
+        if( bSet != nullptr )
         {
             bSet->setCommonDirection( vec );
@@ -157,5 +157,5 @@
     {
         Ogre::BillboardSet* bSet = this->billboard_.getBillboardSet();
-        if( bSet != NULL )
+        if( bSet != nullptr )
         {
             bSet->setCommonUpVector( vec );
@@ -166,5 +166,5 @@
     {
         Ogre::BillboardSet* bSet = this->billboard_.getBillboardSet();
-        if( bSet != NULL )
+        if( bSet != nullptr )
         {
             bSet->setDefaultDimensions(width, height);
Index: code/trunk/src/orxonox/graphics/Billboard.h
===================================================================
--- code/trunk/src/orxonox/graphics/Billboard.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Billboard.h	(revision 11071)
@@ -47,7 +47,7 @@
             virtual ~Billboard();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
             inline const BillboardSet& getBillboardSet() const
@@ -71,5 +71,5 @@
 
 
-            virtual void setTeamColour(const ColourValue& colour)
+            virtual void setTeamColour(const ColourValue& colour) override
                 { this->setColour(colour); }
                 
Index: code/trunk/src/orxonox/graphics/BlinkingBillboard.h
===================================================================
--- code/trunk/src/orxonox/graphics/BlinkingBillboard.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/BlinkingBillboard.h	(revision 11071)
@@ -44,7 +44,7 @@
             virtual ~BlinkingBillboard();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             inline void setAmplitude(float amplitude)
Index: code/trunk/src/orxonox/graphics/Camera.h
===================================================================
--- code/trunk/src/orxonox/graphics/Camera.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Camera.h	(revision 11071)
@@ -50,5 +50,5 @@
 
             void setConfigValues();
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             void requestFocus();
@@ -72,5 +72,5 @@
             void configvaluecallback_changedNearClipDistance();
 
-            void windowResized(unsigned int newWidth, unsigned int newHeight);
+            virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
 
             Ogre::Camera*    camera_;
Index: code/trunk/src/orxonox/graphics/FadingBillboard.h
===================================================================
--- code/trunk/src/orxonox/graphics/FadingBillboard.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/FadingBillboard.h	(revision 11071)
@@ -45,9 +45,9 @@
             virtual ~FadingBillboard();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void tick(float dt);
-            virtual void changedActivity();
-            virtual void changedVisibility();
+            virtual void tick(float dt) override;
+            virtual void changedActivity() override;
+            virtual void changedVisibility() override;
 
             inline void setTurnOnTime(float turnontime)
@@ -69,5 +69,5 @@
             virtual void stopturnonoff();
             virtual void poststopturnonoff();
-            virtual void changedColour();
+            virtual void changedColour() override;
 
             float turnontime_;
Index: code/trunk/src/orxonox/graphics/GlobalShader.h
===================================================================
--- code/trunk/src/orxonox/graphics/GlobalShader.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/GlobalShader.h	(revision 11071)
@@ -44,7 +44,7 @@
             virtual ~GlobalShader();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
             inline const Shader& getShader() const
Index: code/trunk/src/orxonox/graphics/Light.cc
===================================================================
--- code/trunk/src/orxonox/graphics/Light.cc	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Light.cc	(revision 11071)
@@ -31,5 +31,4 @@
 #include <OgreSceneManager.h>
 #include <OgreLight.h>
-#include <boost/static_assert.hpp>
 
 #include "util/StringUtils.h"
@@ -45,7 +44,7 @@
 
     // Be sure we don't do bad conversions
-    BOOST_STATIC_ASSERT((int)Ogre::Light::LT_POINT       == (int)Light::Point);
-    BOOST_STATIC_ASSERT((int)Ogre::Light::LT_DIRECTIONAL == (int)Light::Directional);
-    BOOST_STATIC_ASSERT((int)Ogre::Light::LT_SPOTLIGHT   == (int)Light::Spotlight);
+    static_assert((int)Ogre::Light::LT_POINT       == (int)Light::Type::Point,       "check enum");
+    static_assert((int)Ogre::Light::LT_DIRECTIONAL == (int)Light::Type::Directional, "check enum");
+    static_assert((int)Ogre::Light::LT_SPOTLIGHT   == (int)Light::Type::Spotlight,   "check enum");
 
     Light::Light(Context* context) : StaticEntity(context)
@@ -53,8 +52,8 @@
         RegisterObject(Light);
 
-        this->light_ = 0;
+        this->light_ = nullptr;
         this->diffuse_ = ColourValue::White;
         this->specular_ = ColourValue::White;
-        this->type_ = Light::Point;
+        this->type_ = Type::Point;
         this->attenuation_ = Vector4(100000, 1, 0, 0);
         this->spotlightRange_ = Vector3(40.0f, 30.0f, 1.0f);
@@ -106,5 +105,5 @@
     void Light::registerVariables()
     {
-        registerVariable((int&)this->type_,     VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateType));
+        registerVariable(this->type_,           VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateType));
         registerVariable(this->diffuse_,        VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateDiffuseColour));
         registerVariable(this->specular_,       VariableDirection::ToClient, new NetworkCallback<Light>(this, &Light::updateSpecularColour));
@@ -127,5 +126,5 @@
     void Light::updateAttenuation()
     {
-        if (this->light_ && this->type_ != Light::Directional)
+        if (this->light_ && this->type_ != Type::Directional)
             this->light_->setAttenuation(this->attenuation_.x, this->attenuation_.y, this->attenuation_.z, this->attenuation_.w);
     }
@@ -133,5 +132,5 @@
     void Light::updateSpotlightRange()
     {
-        if (this->light_ && this->type_ == Light::Spotlight)
+        if (this->light_ && this->type_ == Type::Spotlight)
             this->light_->setSpotlightRange(Degree(this->spotlightRange_.x), Degree(this->spotlightRange_.y), this->spotlightRange_.z);
     }
@@ -140,11 +139,11 @@
     {
         if (type == "point")
-            this->setType(Light::Point);
+            this->setType(Type::Point);
         else if (type == "directional")
-            this->setType(Light::Directional);
+            this->setType(Type::Directional);
         else if (type == "spotlight")
-            this->setType(Light::Spotlight);
+            this->setType(Type::Spotlight);
         else
-            this->setType(Light::Point);
+            this->setType(Type::Point);
     }
 
@@ -153,9 +152,9 @@
         switch (this->type_)
         {
-            case Light::Directional:
+            case Type::Directional:
                 return "directional";
-            case Light::Spotlight:
+            case Type::Spotlight:
                 return "spotlight";
-            case Light::Point:
+            case Type::Point:
             default:
                 return "point";
@@ -169,7 +168,7 @@
             this->light_->setType(static_cast<Ogre::Light::LightTypes>(this->type_));
 
-            if (this->type_ != Light::Directional)
+            if (this->type_ != Type::Directional)
                 this->updateAttenuation();
-            if (this->type_ == Light::Spotlight)
+            if (this->type_ == Type::Spotlight)
                 this->updateSpotlightRange();
         }
Index: code/trunk/src/orxonox/graphics/Light.h
===================================================================
--- code/trunk/src/orxonox/graphics/Light.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Light.h	(revision 11071)
@@ -42,5 +42,5 @@
     {
         public:
-            enum LightTypes // Copy from the Ogre enum
+            enum class Type // Copy from the Ogre enum
             {
                 /// Point light sources give off light equally in all directions, so require only position not direction
@@ -56,14 +56,14 @@
             virtual ~Light();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
             inline Ogre::Light* getLight()
                 { return this->light_; }
 
-            inline void setType(Light::LightTypes type)
+            inline void setType(Light::Type type)
                 { this->type_ = type; this->updateType(); }
-            inline Light::LightTypes getType() const
+            inline Light::Type getType() const
                 { return this->type_; }
 
@@ -78,5 +78,5 @@
                 { return this->specular_; }
 
-            virtual void setTeamColour(const ColourValue& colour)
+            virtual void setTeamColour(const ColourValue& colour) override
                 { this->setDiffuseColour(colour); this->setSpecularColour(colour); }
 
@@ -144,5 +144,5 @@
 
             Ogre::Light* light_;
-            LightTypes type_;
+            Light::Type type_;
             ColourValue diffuse_;
             ColourValue specular_;
Index: code/trunk/src/orxonox/graphics/MeshLodInformation.h
===================================================================
--- code/trunk/src/orxonox/graphics/MeshLodInformation.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/MeshLodInformation.h	(revision 11071)
@@ -50,5 +50,5 @@
             float getReductionRate(){ return this->reductionRate_; }
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         private:
Index: code/trunk/src/orxonox/graphics/Model.cc
===================================================================
--- code/trunk/src/orxonox/graphics/Model.cc	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Model.cc	(revision 11071)
@@ -134,5 +134,5 @@
             Level* level = this->getLevel();
 
-            assert( level != 0 );
+            assert( level != nullptr );
 
             MeshLodInformation* lodInfo = level->getLodInfo(this->meshSrc_);
@@ -157,5 +157,5 @@
                 BaseObject* creatorPtr = this;
 
-                while(creatorPtr!=NULL&&orxonox_cast<WorldEntity*>(creatorPtr))
+                while(creatorPtr!=nullptr&&orxonox_cast<WorldEntity*>(creatorPtr))
                 {
                     scaleFactor *= getBiggestScale(((WorldEntity*) creatorPtr)->getScale3D());
Index: code/trunk/src/orxonox/graphics/Model.h
===================================================================
--- code/trunk/src/orxonox/graphics/Model.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/Model.h	(revision 11071)
@@ -46,7 +46,7 @@
             void setConfigValues();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
             inline const Mesh& getMesh() const
Index: code/trunk/src/orxonox/graphics/ParticleEmitter.cc
===================================================================
--- code/trunk/src/orxonox/graphics/ParticleEmitter.cc	(revision 11056)
+++ code/trunk/src/orxonox/graphics/ParticleEmitter.cc	(revision 11071)
@@ -52,5 +52,5 @@
             ThrowException(AbortLoading, "Can't create ParticleEmitter, no scene or no scene manager given.");
 
-        this->particles_ = 0;
+        this->particles_ = nullptr;
         this->LOD_ = LODParticle::Normal;
 
@@ -102,5 +102,5 @@
         {
             delete this->particles_;
-            this->particles_ = 0;
+            this->particles_ = nullptr;
         }
 
Index: code/trunk/src/orxonox/graphics/ParticleEmitter.h
===================================================================
--- code/trunk/src/orxonox/graphics/ParticleEmitter.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/ParticleEmitter.h	(revision 11071)
@@ -43,8 +43,8 @@
             virtual ~ParticleEmitter();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedVisibility();
-            virtual void changedActivity();
+            virtual void changedVisibility() override;
+            virtual void changedActivity() override;
 
             inline ParticleInterface* getParticleInterface() const
Index: code/trunk/src/orxonox/graphics/ParticleSpawner.h
===================================================================
--- code/trunk/src/orxonox/graphics/ParticleSpawner.h	(revision 11056)
+++ code/trunk/src/orxonox/graphics/ParticleSpawner.h	(revision 11071)
@@ -43,6 +43,6 @@
             virtual ~ParticleSpawner();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void stop(bool bDestroy)
Index: code/trunk/src/orxonox/infos/Bot.h
===================================================================
--- code/trunk/src/orxonox/infos/Bot.h	(revision 11056)
+++ code/trunk/src/orxonox/infos/Bot.h	(revision 11071)
@@ -45,9 +45,9 @@
             void setConfigValues();
 
-            inline bool isInitialized() const
+            virtual inline bool isInitialized() const override
                 { return true; }
-            inline float getPing() const
+            virtual inline float getPing() const override
                 { return 0; }
-            inline float getPacketLossRatio() const
+            virtual inline float getPacketLossRatio() const override
                 { return 0; }
 
Index: code/trunk/src/orxonox/infos/GametypeInfo.cc
===================================================================
--- code/trunk/src/orxonox/infos/GametypeInfo.cc	(revision 11056)
+++ code/trunk/src/orxonox/infos/GametypeInfo.cc	(revision 11071)
@@ -291,5 +291,5 @@
         if(GameMode::isMaster())
         {
-            NotificationListener::sendNotification("Press [Fire] to respawn", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID());
+            NotificationListener::sendNotification("Press [Fire] to respawn", GametypeInfo::NOTIFICATION_SENDER, NotificationMessageType::info, NotificationSendMode::network, player->getClientID());
             // Remove the player from the list of players that have spawned, since it currently is not.
             this->spawnedPlayers_.erase(player);
@@ -346,8 +346,8 @@
                 // Display "Press [Fire] to start the match" if the game has not yet ended.
                 if(!this->hasEnded())
-                    NotificationListener::sendNotification("Press [Fire] to start the match", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID());
+                    NotificationListener::sendNotification("Press [Fire] to start the match", GametypeInfo::NOTIFICATION_SENDER, NotificationMessageType::info, NotificationSendMode::network, player->getClientID());
                 // Else display "Game has ended".
                 else
-                    NotificationListener::sendNotification("Game has ended", GametypeInfo::NOTIFICATION_SENDER, notificationMessageType::info, notificationSendMode::network, player->getClientID());
+                    NotificationListener::sendNotification("Game has ended", GametypeInfo::NOTIFICATION_SENDER, NotificationMessageType::info, NotificationSendMode::network, player->getClientID());
             }
         }
@@ -461,30 +461,30 @@
     void GametypeInfo::dispatchAnnounceMessage(const std::string& message) const
     {
-        for (ObjectList<GametypeMessageListener>::iterator it = ObjectList<GametypeMessageListener>::begin(); it != ObjectList<GametypeMessageListener>::end(); ++it)
-            it->announcemessage(this, message);
+        for (GametypeMessageListener* listener : ObjectList<GametypeMessageListener>())
+            listener->announcemessage(this, message);
     }
 
     void GametypeInfo::dispatchKillMessage(const std::string& message) const
     {
-        for (ObjectList<GametypeMessageListener>::iterator it = ObjectList<GametypeMessageListener>::begin(); it != ObjectList<GametypeMessageListener>::end(); ++it)
-            it->killmessage(this, message);
+        for (GametypeMessageListener* listener : ObjectList<GametypeMessageListener>())
+            listener->killmessage(this, message);
     }
 
     void GametypeInfo::dispatchDeathMessage(const std::string& message) const
     {
-        for (ObjectList<GametypeMessageListener>::iterator it = ObjectList<GametypeMessageListener>::begin(); it != ObjectList<GametypeMessageListener>::end(); ++it)
-            it->deathmessage(this, message);
+        for (GametypeMessageListener* listener : ObjectList<GametypeMessageListener>())
+            listener->deathmessage(this, message);
     }
 
      void GametypeInfo::dispatchStaticMessage(const std::string& message, const ColourValue& colour) const
     {
-        for (ObjectList<GametypeMessageListener>::iterator it = ObjectList<GametypeMessageListener>::begin(); it != ObjectList<GametypeMessageListener>::end(); ++it)
-            it->staticmessage(this, message, colour);
+        for (GametypeMessageListener* listener : ObjectList<GametypeMessageListener>())
+            listener->staticmessage(this, message, colour);
     }
 
      void GametypeInfo::dispatchFadingMessage(const std::string& message) const
     {
-        for (ObjectList<GametypeMessageListener>::iterator it = ObjectList<GametypeMessageListener>::begin(); it != ObjectList<GametypeMessageListener>::end(); ++it)
-            it->fadingmessage(this, message);
+        for (GametypeMessageListener* listener : ObjectList<GametypeMessageListener>())
+            listener->fadingmessage(this, message);
     }
 }
Index: code/trunk/src/orxonox/infos/HumanPlayer.cc
===================================================================
--- code/trunk/src/orxonox/infos/HumanPlayer.cc	(revision 11056)
+++ code/trunk/src/orxonox/infos/HumanPlayer.cc	(revision 11071)
@@ -53,6 +53,6 @@
         this->defaultController_ = Class(NewHumanController);
 
-        this->humanHud_ = 0;
-        this->gametypeHud_ = 0;
+        this->humanHud_ = nullptr;
+        this->gametypeHud_ = nullptr;
 
         this->setConfigValues();
@@ -178,5 +178,5 @@
         {
             this->humanHud_->destroy();
-            this->humanHud_ = 0;
+            this->humanHud_ = nullptr;
         }
 
@@ -194,5 +194,5 @@
         {
             this->gametypeHud_->destroy();
-            this->gametypeHud_ = 0;
+            this->gametypeHud_ = nullptr;
         }
 
Index: code/trunk/src/orxonox/infos/HumanPlayer.h
===================================================================
--- code/trunk/src/orxonox/infos/HumanPlayer.h	(revision 11056)
+++ code/trunk/src/orxonox/infos/HumanPlayer.h	(revision 11071)
@@ -45,11 +45,11 @@
             void setConfigValues();
 
-            bool isInitialized() const;
-            float getPing() const;
-            float getPacketLossRatio() const;
+            virtual bool isInitialized() const override;
+            virtual float getPing() const override;
+            virtual float getPacketLossRatio() const override;
 
             void setClientID(unsigned int clientID);
 
-            virtual void switchGametype(Gametype* gametype);
+            virtual void switchGametype(Gametype* gametype) override;
 
             inline void setHumanHUDTemplate(const std::string& name)
Index: code/trunk/src/orxonox/infos/PlayerInfo.cc
===================================================================
--- code/trunk/src/orxonox/infos/PlayerInfo.cc	(revision 11056)
+++ code/trunk/src/orxonox/infos/PlayerInfo.cc	(revision 11071)
@@ -51,9 +51,9 @@
         this->bReadyToSpawn_ = false;
         this->bSetUnreadyAfterSpawn_ = true;
-        this->controller_ = 0;
-        this->controllableEntity_ = 0;
+        this->controller_ = nullptr;
+        this->controllableEntity_ = nullptr;
         this->controllableEntityID_ = OBJECTID_UNKNOWN;
 
-        this->gtinfo_ = 0;
+        this->gtinfo_ = nullptr;
         this->gtinfoID_ = OBJECTID_UNKNOWN;
         this->updateGametypeInfo(this->getGametype());
@@ -72,5 +72,5 @@
             {
                 this->controller_->destroy();
-                this->controller_ = 0;
+                this->controller_ = nullptr;
             }
 
@@ -126,5 +126,5 @@
     void PlayerInfo::updateGametypeInfo(Gametype* gametype)
     {
-        this->gtinfo_ = 0;
+        this->gtinfo_ = nullptr;
         this->gtinfoID_ = OBJECTID_UNKNOWN;
 
@@ -141,5 +141,5 @@
         {
             this->controller_->destroy();
-            this->controller_ = 0;
+            this->controller_ = nullptr;
         }
         this->controller_ = this->defaultController_.fabricate(this->getContext());
@@ -181,5 +181,5 @@
 
         RadarViewable* radarviewable = orxonox_cast<RadarViewable*>(entity);
-        if (radarviewable != NULL)
+        if (radarviewable != nullptr)
             radarviewable->setRadarName(this->getName());
     }
@@ -218,10 +218,10 @@
             return;
 
-        this->controllableEntity_->setController(0);
-        this->controllableEntity_ = 0;
+        this->controllableEntity_->setController(nullptr);
+        this->controllableEntity_ = nullptr;
         this->controllableEntityID_ = OBJECTID_UNKNOWN;
 
         if (this->controller_)
-            this->controller_->setControllableEntity(0);
+            this->controller_->setControllableEntity(nullptr);
 
         if ( GameMode::isMaster() )
@@ -239,12 +239,12 @@
 
         Controller* tmp =this->controllableEntity_->getController();
-        if (tmp == NULL)
-        {
-            orxout(verbose) <<  "PlayerInfo: pauseControl, Controller is NULL " << endl;
+        if (tmp == nullptr)
+        {
+            orxout(verbose) <<  "PlayerInfo: pauseControl, Controller is nullptr " << endl;
             return;
         }
         tmp->setActive(false);
-        //this->controllableEntity_->getController()->setControllableEntity(NULL);
-        this->controllableEntity_->setController(0);
+        //this->controllableEntity_->getController()->setControllableEntity(nullptr);
+        this->controllableEntity_->setController(nullptr);
     }
 
@@ -253,5 +253,5 @@
         ControllableEntity* entity = this->controllableEntity_;
 
-        assert(this->controllableEntity_ != NULL);
+        assert(this->controllableEntity_ != nullptr);
         if( !entity || this->previousControllableEntity_.size() == 0 )
             return;
@@ -259,5 +259,5 @@
         entity->destroyHud(); // HACK-ish
 
-        this->controllableEntity_->setController(0);
+        this->controllableEntity_->setController(nullptr);
         if(this->isHumanPlayer()) // TODO: Multiplayer?
             this->controllableEntity_->destroyHud(); // HACK-ish
@@ -266,13 +266,13 @@
         do {
             this->controllableEntity_ = this->previousControllableEntity_.back();
-        } while(this->controllableEntity_ == NULL && this->previousControllableEntity_.size() > 0);
+        } while(this->controllableEntity_ == nullptr && this->previousControllableEntity_.size() > 0);
         this->controllableEntityID_ = this->controllableEntity_->getObjectID();
         this->previousControllableEntity_.pop_back();
 
-        if ( this->controllableEntity_ != NULL && this->controller_ != NULL)
+        if ( this->controllableEntity_ != nullptr && this->controller_ != nullptr)
             this->controller_->setControllableEntity(this->controllableEntity_);
 
          // HACK-ish
-        if(this->controllableEntity_ != NULL && this->isHumanPlayer())
+        if(this->controllableEntity_ != nullptr && this->isHumanPlayer())
             this->controllableEntity_->createHud();
 
Index: code/trunk/src/orxonox/infos/PlayerInfo.h
===================================================================
--- code/trunk/src/orxonox/infos/PlayerInfo.h	(revision 11056)
+++ code/trunk/src/orxonox/infos/PlayerInfo.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~PlayerInfo();
 
-            virtual void changedName();
+            virtual void changedName() override;
             virtual void switchGametype(Gametype* gametype);
 
@@ -99,5 +99,5 @@
             Controller* controller_;
             ControllableEntity* controllableEntity_;
-            std::vector< WeakPtr<ControllableEntity> > previousControllableEntity_; //!< List of the previous ControllableEntities if repeatedly startTemporary control was called. The ControllableEntity at the back is the most recent.
+            std::vector<WeakPtr<ControllableEntity>> previousControllableEntity_; //!< List of the previous ControllableEntities if repeatedly startTemporary control was called. The ControllableEntity at the back is the most recent.
             unsigned int controllableEntityID_;
 
Index: code/trunk/src/orxonox/interfaces/NotificationListener.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/NotificationListener.cc	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/NotificationListener.cc	(revision 11071)
@@ -74,20 +74,20 @@
         The type of the notification, can be either 'info' or 'important'.
     */
-    /*static*/ void NotificationListener::sendNetworkHelper(const std::string& message, const std::string& sender, notificationSendMode::Value sendMode, unsigned int clientId, bool isCommand, notificationMessageType::Value messageType)
+    /*static*/ void NotificationListener::sendNetworkHelper(const std::string& message, const std::string& sender, NotificationSendMode sendMode, unsigned int clientId, bool isCommand, NotificationMessageType messageType)
     {
         // If we're in standalone mode or we're already no the right client we create and send the notification/command.
-        if(GameMode::isStandalone() || sendMode == notificationSendMode::local || (sendMode ==  notificationSendMode::network && Host::getPlayerID() == clientId))
+        if(GameMode::isStandalone() || sendMode == NotificationSendMode::local || (sendMode ==  NotificationSendMode::network && Host::getPlayerID() == clientId))
         {
             sendHelper(message, sender, isCommand, messageType);
         }
         // If we're on the server (and the server is not the intended recipient of the notification/command) we send it over the network.
-        else if(GameMode::isServer() && sendMode == notificationSendMode::network && Host::getPlayerID() != clientId)
+        else if(GameMode::isServer() && sendMode == NotificationSendMode::network && Host::getPlayerID() != clientId)
         {
-            callStaticNetworkFunction(&NotificationListener::sendHelper, clientId, message, sender, isCommand, (unsigned int)messageType);
+            callStaticNetworkFunction(&NotificationListener::sendHelper, clientId, message, sender, isCommand, messageType);
         }
-        else if(GameMode::isServer() && sendMode == notificationSendMode::broadcast)
+        else if(GameMode::isServer() && sendMode == NotificationSendMode::broadcast)
         {
             // TODO: Works as intended?
-            callStaticNetworkFunction(&NotificationListener::sendHelper, NETWORK_PEER_ID_BROADCAST, message, sender, isCommand, (unsigned int)messageType);
+            callStaticNetworkFunction(&NotificationListener::sendHelper, NETWORK_PEER_ID_BROADCAST, message, sender, isCommand, messageType);
         }
     }
@@ -105,19 +105,19 @@
         The type of the notification.
     */
-    /*static*/ void NotificationListener::sendHelper(const std::string& message, const std::string& sender, bool isCommand, unsigned int messageType)
+    /*static*/ void NotificationListener::sendHelper(const std::string& message, const std::string& sender, bool isCommand, NotificationMessageType type)
     {
         // Iterate through all NotificationListeners and notify them by calling the method they overloaded.
-        for(ObjectList<NotificationListener>::iterator it = ObjectList<NotificationListener>::begin(); it != ObjectList<NotificationListener>::end(); ++it)
+        for(NotificationListener* listener : ObjectList<NotificationListener>())
         {
             // If the notification is a message.
             if(!isCommand)
-                it->registerNotification(message, sender, notificationMessageType::Value(messageType));
+                listener->registerNotification(message, sender, type);
 
             // If the notification is a command.
             if(isCommand)
             {
-                notificationCommand::Value command = str2Command(message);
-                if(command != notificationCommand::none)
-                    it->executeCommand(command, sender);
+                NotificationCommand command = str2Command(message);
+                if(command != NotificationCommand::none)
+                    listener->executeCommand(command, sender);
             }
         }
@@ -130,12 +130,12 @@
         The string to be converted.
     @return
-        Returns the corresponding enum, notificationCommand::none if the command doesn't exist.
+        Returns the corresponding enum, NotificationCommand::none if the command doesn't exist.
     */
-    /*static*/ notificationCommand::Value NotificationListener::str2Command(const std::string& string)
+    /*static*/ NotificationCommand NotificationListener::str2Command(const std::string& string)
     {
-        notificationCommand::Value command = notificationCommand::none;
+        NotificationCommand command = NotificationCommand::none;
 
         if(string == NotificationListener::COMMAND_CLEAR)
-            command = notificationCommand::clear;
+            command = NotificationCommand::clear;
 
         return command;
@@ -150,9 +150,9 @@
         Returns the corresponding string.
     */
-    /*static*/ const std::string& NotificationListener::command2Str(notificationCommand::Value command)
+    /*static*/ const std::string& NotificationListener::command2Str(NotificationCommand command)
     {
         switch(command)
         {
-            case notificationCommand::clear:
+            case NotificationCommand::clear:
                 return NotificationListener::COMMAND_CLEAR;
             default:
Index: code/trunk/src/orxonox/interfaces/NotificationListener.h
===================================================================
--- code/trunk/src/orxonox/interfaces/NotificationListener.h	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/NotificationListener.h	(revision 11071)
@@ -49,28 +49,19 @@
 {
     // TODO: Document.
-    namespace notificationMessageType
-    {
-        enum Value {
-            info,
-            important
-        };
-    }
+    enum class NotificationMessageType {
+        info,
+        important
+    };
     
-    namespace notificationSendMode
-    {
-        enum Value {
-            local,
-            network,
-            broadcast
-        };
-    }
+    enum class NotificationSendMode {
+        local,
+        network,
+        broadcast
+    };
     
-    namespace notificationCommand
-    {
-        enum Value {
-            none,
-            clear
-        };
-    }
+    enum class NotificationCommand {
+        none,
+        clear
+    };
 
     // TODO: Update doc.
@@ -101,8 +92,8 @@
             @param sender The sender that sent the notification. Default is 'none'.
             @param messageType The type of the message, can be either 'info' or 'important'. Default is 'info'.
-            @param sendMode The mode in which the notification is sent, can be 'local' to send the notification to the client where this function is executed, 'network' if the notification is to be sent to the client with the specified clientID, or 'broadcast' if the notification should be sent to all hosts. Default is notificationSendMode::local.
+            @param sendMode The mode in which the notification is sent, can be 'local' to send the notification to the client where this function is executed, 'network' if the notification is to be sent to the client with the specified clientID, or 'broadcast' if the notification should be sent to all hosts. Default is NotificationSendMode::local.
             @param clientId The id of the client the notification should be sent to. Default is 0.
             */
-            static void sendNotification(const std::string& message, const std::string& sender = NotificationListener::NONE, notificationMessageType::Value messageType = notificationMessageType::info, notificationSendMode::Value sendMode = notificationSendMode::local, unsigned int clientId = 0)
+            static void sendNotification(const std::string& message, const std::string& sender = NotificationListener::NONE, NotificationMessageType messageType = NotificationMessageType::info, NotificationSendMode sendMode = NotificationSendMode::local, unsigned int clientId = 0)
                 { NotificationListener::sendNetworkHelper(message, sender, sendMode, clientId, false, messageType); }
             /**
@@ -110,11 +101,11 @@
             @param command The command that should be sent (and later executed).
             @param sender The sender that sent the notification. Default is 'none'.
-            @param sendMode The mode in which the command is sent, can be 'local' to send the command to the client where this function is executed, 'network' if the command is to be sent to the client with the specified clientID, or 'broadcast' if the command should be sent to all hosts. Default is notificationSendMode::local.
+            @param sendMode The mode in which the command is sent, can be 'local' to send the command to the client where this function is executed, 'network' if the command is to be sent to the client with the specified clientID, or 'broadcast' if the command should be sent to all hosts. Default is NotificationSendMode::local.
             @param clientId The id of the client the command should be sent to. Default is 0.
             */
-            static void sendCommand(const std::string& command, const std::string& sender = NotificationListener::NONE, notificationSendMode::Value sendMode = notificationSendMode::local, unsigned int clientId = 0)
+            static void sendCommand(const std::string& command, const std::string& sender = NotificationListener::NONE, NotificationSendMode sendMode = NotificationSendMode::local, unsigned int clientId = 0)
                 { NotificationListener::sendNetworkHelper(command, sender, sendMode, clientId, true); }
 
-            static void sendHelper(const std::string& message, const std::string& sender, bool isCommand = false, unsigned int messageMode = 0); // Helper method to register a notification/execute a command with all NotificationListeners after it has been sent over the network.
+            static void sendHelper(const std::string& message, const std::string& sender, bool isCommand, NotificationMessageType type); // Helper method to register a notification/execute a command with all NotificationListeners after it has been sent over the network.
 
             //TODO: Make protected?
@@ -128,5 +119,5 @@
             @return Returns true if the notification was successfully registered, false if not.
             */
-            virtual bool registerNotification(const std::string& message, const std::string& sender, notificationMessageType::Value type)
+            virtual bool registerNotification(const std::string& message, const std::string& sender, NotificationMessageType type)
                 { return false; }
             /**
@@ -137,5 +128,5 @@
             @return Returns true if the command was successfully executed, false if not.
             */
-            virtual bool executeCommand(notificationCommand::Value command, const std::string& sender) { return false; }
+            virtual bool executeCommand(NotificationCommand command, const std::string& sender) { return false; }
 
         public:
@@ -149,8 +140,8 @@
             
         protected:
-            static void sendNetworkHelper(const std::string& message, const std::string& sender, notificationSendMode::Value sendMode, unsigned int clientId, bool isCommand = false, notificationMessageType::Value messageType = notificationMessageType::info); // Helper method to send both notifications and commands over the network.
+            static void sendNetworkHelper(const std::string& message, const std::string& sender, NotificationSendMode sendMode, unsigned int clientId, bool isCommand = false, NotificationMessageType messageType = NotificationMessageType::info); // Helper method to send both notifications and commands over the network.
 
-            static notificationCommand::Value str2Command(const std::string& string); // Helper method. Converts a string into the enum for a command.
-            static const std::string& command2Str(notificationCommand::Value command); // Helper method. Converts a command enum into its corresponding string.
+            static NotificationCommand str2Command(const std::string& string); // Helper method. Converts a string into the enum for a command.
+            static const std::string& command2Str(NotificationCommand command); // Helper method. Converts a command enum into its corresponding string.
     };
 }
Index: code/trunk/src/orxonox/interfaces/PickupCarrier.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/PickupCarrier.cc	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/PickupCarrier.cc	(revision 11071)
@@ -101,7 +101,7 @@
         // Go recursively through all children to check whether they are a target.
         std::vector<PickupCarrier*>* children = this->getCarrierChildren();
-        for(std::vector<PickupCarrier*>::const_iterator it = children->begin(); it != children->end(); it++)
+        for(PickupCarrier* carrier : *children)
         {
-            if((*it)->isTarget(pickup))
+            if(carrier->isTarget(pickup))
             {
                 isTarget = true;
@@ -127,17 +127,17 @@
     {
         if(!this->isTarget(pickup))
-            return NULL;
+            return nullptr;
 
         if(pickup->isTarget(this)) // If the PickupCarrier itself is a target.
             return this;
 
-        PickupCarrier* target = NULL;
+        PickupCarrier* target = nullptr;
         // Go recursively through all children to check whether they are the target.
         std::vector<PickupCarrier*>* children = this->getCarrierChildren();
-        for(std::vector<PickupCarrier*>::iterator it = children->begin(); it != children->end(); it++)
+        for(PickupCarrier* child : *children)
         {
-            if(pickup->isTarget(*it))
+            if(pickup->isTarget(child))
             {
-                target = *it;
+                target = child;
                 break;
             }
Index: code/trunk/src/orxonox/interfaces/PickupCarrier.h
===================================================================
--- code/trunk/src/orxonox/interfaces/PickupCarrier.h	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/PickupCarrier.h	(revision 11071)
@@ -59,5 +59,5 @@
         But this structure has to be established first.
         - <b>getCarrierChildren()</b> To this end a PickupCarrier needs to implement getCarrierChildren() which returns a list of its direct PickupCarrier children. If you need an example, have a look at @ref orxonox::Pawn "Pawn" and @ref orxonox::Engine "Engine".
-        - <b>getCarrierParent()</b> This is the method in the other direction. It returns the parent of this PickupCarrier, or NULL if the PickupCarrier is a root node in this hierarchy.
+        - <b>getCarrierParent()</b> This is the method in the other direction. It returns the parent of this PickupCarrier, or nullptr if the PickupCarrier is a root node in this hierarchy.
 
     @author
@@ -77,5 +77,5 @@
             PickupCarrier(); //!< Constructor.
             virtual ~PickupCarrier(); //!< Destructor.
-            void preDestroy(void); //!< Is called before the PickupCarrier is effectively destroyed.
+            virtual void preDestroy(void) override; //!< Is called before the PickupCarrier is effectively destroyed.
 
             bool isTarget(const Pickupable* pickup) const; //!< Can be used to check whether the PickupCarrier or a child of his is a target ot the input Pickupable.
Index: code/trunk/src/orxonox/interfaces/PickupListener.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/PickupListener.cc	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/PickupListener.cc	(revision 11071)
@@ -74,6 +74,6 @@
 
         // Iterate through all PickupListeners and notify them by calling the method they overloaded.
-        for(ObjectList<PickupListener>::iterator it = ObjectList<PickupListener>::begin(); it != ObjectList<PickupListener>::end(); ++it)
-            it->pickupChangedUsed(pickup, used);
+        for(PickupListener* listener : ObjectList<PickupListener>())
+            listener->pickupChangedUsed(pickup, used);
     }
 
@@ -92,6 +92,6 @@
 
         // Iterate through all PickupListeners and notify them by calling the method they overloaded.
-        for(ObjectList<PickupListener>::iterator it = ObjectList<PickupListener>::begin(); it != ObjectList<PickupListener>::end(); ++it)
-            it->pickupChangedPickedUp(pickup, pickedUp);
+        for(PickupListener* listener : ObjectList<PickupListener>())
+            listener->pickupChangedPickedUp(pickup, pickedUp);
     }
 
Index: code/trunk/src/orxonox/interfaces/Pickupable.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/Pickupable.cc	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/Pickupable.cc	(revision 11071)
@@ -56,5 +56,5 @@
         RegisterObject(Pickupable);
 
-        this->carrier_ = NULL;
+        this->carrier_ = nullptr;
 
         this->beingDestroyed_ = false;
@@ -143,5 +143,5 @@
     bool Pickupable::isTarget(const PickupCarrier* carrier) const
     {
-        if(carrier == NULL)
+        if(carrier == nullptr)
             return false;
 
@@ -160,7 +160,7 @@
     {
         // Iterate through all targets of this Pickupable.
-        for(std::list<Identifier*>::const_iterator it = this->targets_.begin(); it != this->targets_.end(); it++)
+        for(Identifier* target : this->targets_)
         {
-            if(identifier->isA(*it))
+            if(identifier->isA(target))
                 return true;
         }
@@ -210,5 +210,5 @@
     bool Pickupable::pickup(PickupCarrier* carrier)
     {
-        if(carrier == NULL || this->isPickedUp()) // If carrier is NULL or the Pickupable is already picked up.
+        if(carrier == nullptr || this->isPickedUp()) // If carrier is nullptr or the Pickupable is already picked up.
             return false;
 
@@ -237,5 +237,5 @@
             return false;
 
-        assert(this->getCarrier()); // The Carrier cannot be NULL at this point.
+        assert(this->getCarrier()); // The Carrier cannot be nullptr at this point.
         if(!this->getCarrier()->removePickup(this)) //TODO Shouldn't this be a little later?
             orxout(internal_warning, context::pickups) << "Pickupable (&" << this << ", " << this->getIdentifier()->getName() << ") is being dropped, but it was not present in the PickupCarriers list of pickups." << endl;
@@ -249,5 +249,5 @@
             created = this->createSpawner();
 
-        this->setCarrier(NULL);
+        this->setCarrier(nullptr);
 
         if(!created && createSpawner) // If a PickupSpawner should have been created but wasn't.
@@ -301,5 +301,5 @@
         orxout(verbose, context::pickups) << "Pickupable (&" << this << ") changed Carrier (& " << carrier << ")." << endl;
 
-        if(carrier != NULL && tell)
+        if(carrier != nullptr && tell)
         {
             if(!carrier->addPickup(this))
Index: code/trunk/src/orxonox/interfaces/Pickupable.h
===================================================================
--- code/trunk/src/orxonox/interfaces/Pickupable.h	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/Pickupable.h	(revision 11071)
@@ -144,5 +144,5 @@
 
         protected:
-            virtual void preDestroy(void); //!< A method that is called by Destroyable::destroy() before the object is actually destroyed.
+            virtual void preDestroy(void) override; //!< A method that is called by Destroyable::destroy() before the object is actually destroyed.
             virtual void destroyPickup(void); //!< Destroys a Pickupable.
             virtual void carrierDestroyed(void); //!< Is called by the PickupCarrier when it is being destroyed.
@@ -182,5 +182,5 @@
         // For implementing the Rewardable interface:
         public:
-            virtual bool reward(PlayerInfo* player); //!< Method to transcribe a Pickupable as a Rewardable to the player.
+            virtual bool reward(PlayerInfo* player) override; //!< Method to transcribe a Pickupable as a Rewardable to the player.
 
     };
Index: code/trunk/src/orxonox/interfaces/RadarViewable.cc
===================================================================
--- code/trunk/src/orxonox/interfaces/RadarViewable.cc	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/RadarViewable.cc	(revision 11071)
@@ -49,5 +49,5 @@
         , wePtr_(wePtr)
         , radarObjectCamouflage_(0.0f)
-        , radarObjectShape_(Dot)
+        , radarObjectShape_(Shape::Dot)
         , radarObjectDescription_("staticObject")
         , scale_(1.0f)
Index: code/trunk/src/orxonox/interfaces/RadarViewable.h
===================================================================
--- code/trunk/src/orxonox/interfaces/RadarViewable.h	(revision 11056)
+++ code/trunk/src/orxonox/interfaces/RadarViewable.h	(revision 11071)
@@ -49,5 +49,5 @@
     {
     public:
-        enum Shape
+        enum class Shape
         {
             Square,
@@ -66,5 +66,5 @@
                 if (name == "HIDDEN")
                 {
-                    this->bVisibility_ = 0;
+                    this->bVisibility_ = false;
                     this->settingsChanged();
                 }
Index: code/trunk/src/orxonox/items/Engine.cc
===================================================================
--- code/trunk/src/orxonox/items/Engine.cc	(revision 11056)
+++ code/trunk/src/orxonox/items/Engine.cc	(revision 11071)
@@ -50,5 +50,5 @@
         RegisterObject(Engine);
 
-        this->ship_ = 0;
+        this->ship_ = nullptr;
         this->shipID_ = OBJECTID_UNKNOWN;
         this->relativePosition_ = Vector3::ZERO;
@@ -136,5 +136,5 @@
     void Engine::networkcallback_shipID()
     {
-        this->ship_ = 0;
+        this->ship_ = nullptr;
 
         if (this->shipID_ != OBJECTID_UNKNOWN)
@@ -155,5 +155,5 @@
     void Engine::run(float dt)
     {
-        if (this->ship_ == NULL)
+        if (this->ship_ == nullptr)
         {
             if (this->shipID_ != 0)
@@ -161,5 +161,5 @@
                 this->networkcallback_shipID();
 
-                if (this->ship_ == NULL)
+                if (this->ship_ == nullptr)
                     return;
             }
Index: code/trunk/src/orxonox/items/Engine.h
===================================================================
--- code/trunk/src/orxonox/items/Engine.h	(revision 11056)
+++ code/trunk/src/orxonox/items/Engine.h	(revision 11071)
@@ -59,5 +59,5 @@
             virtual ~Engine();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             void setConfigValues();
 
@@ -67,5 +67,5 @@
             /**
             @brief Get the SpaceShip this Engine is mounted on.
-            @return Returns a pointer to the SpaceShip. NULL if it isn't mounted on any ship.
+            @return Returns a pointer to the SpaceShip. nullptr if it isn't mounted on any ship.
             */
             inline SpaceShip* getShip() const
Index: code/trunk/src/orxonox/items/MultiStateEngine.cc
===================================================================
--- code/trunk/src/orxonox/items/MultiStateEngine.cc	(revision 11056)
+++ code/trunk/src/orxonox/items/MultiStateEngine.cc	(revision 11071)
@@ -67,7 +67,7 @@
         else
         {
-            this->defEngineSndBoost_ = 0;
-            this->defEngineSndNormal_ = 0;
-            this->lua_ = 0;
+            this->defEngineSndBoost_ = nullptr;
+            this->defEngineSndNormal_ = nullptr;
+            this->lua_ = nullptr;
         }
         this->state_ = 0;
@@ -85,7 +85,7 @@
             {
                 // We have no ship, so the effects are not attached and won't be destroyed automatically
-                for (std::vector<EffectContainer*>::const_iterator it = this->effectContainers_.begin(); it != this->effectContainers_.end(); ++it)
-                    for (std::vector<WorldEntity*>::const_iterator it2 = (*it)->getEffectsBegin(); it2 != (*it)->getEffectsBegin(); ++it2)
-                        (*it2)->destroy();
+                for (EffectContainer* container : this->effectContainers_)
+                    for (WorldEntity* effect : container->getEffects())
+                        effect->destroy();
                 if (this->defEngineSndNormal_)
                     this->defEngineSndNormal_->destroy();
@@ -124,14 +124,14 @@
                 this->state_ = 0;
                 if (this->getShip()->isBoosting() && forward)
-                    this->state_ = Boost;
+                    this->state_ = EngineState::Boost;
                 else if (forward && !this->state_) // this->state_ == Boost
-                    this->state_ = Normal;
+                    this->state_ = EngineState::Normal;
                 else if (direction.z > 0.0 && velocity.z < 0.0)
-                    this->state_ = Brake;
+                    this->state_ = EngineState::Brake;
                 else
-                    this->state_ = Idle;
-
-                if (this->state_ == Idle && this->getSpeedAdd() > 0)
-                    this->state_ = Normal;
+                    this->state_ = EngineState::Idle;
+
+                if (this->state_ == EngineState::Idle && this->getSpeedAdd() > 0)
+                    this->state_ = EngineState::Normal;
             }
 
@@ -141,33 +141,33 @@
 
                 float pitch = velocity.length();
-                if (this->state_ & Normal)
+                if (this->state_ & EngineState::Normal)
                     defEngineSndNormal_->setPitch(clamp(pitch/MAX_VELOCITY_NORMAL + 1, 0.5f, 2.0f));
-                if (this->state_ & Boost)
+                if (this->state_ & EngineState::Boost)
                     defEngineSndBoost_->setPitch(clamp(pitch/MAX_VELOCITY_BOOST + 1, 0.5f, 2.0f));
 
-                if (changes & Idle)
-                {
-                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & Idle);
+                if (changes & EngineState::Idle)
+                {
+                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & EngineState::Idle);
                     lua_setglobal(this->lua_->getInternalLuaState(), "idle");
                 }
-                if (changes & Normal)
-                {
-                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & Normal);
+                if (changes & EngineState::Normal)
+                {
+                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & EngineState::Normal);
                     lua_setglobal(this->lua_->getInternalLuaState(), "normal");
-                    if (this->state_ & Normal)
+                    if (this->state_ & EngineState::Normal)
                         defEngineSndNormal_->play();
                     else
                         defEngineSndNormal_->stop();
                 }
-                if (changes & Brake)
-                {
-                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & Brake);
+                if (changes & EngineState::Brake)
+                {
+                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & EngineState::Brake);
                     lua_setglobal(this->lua_->getInternalLuaState(), "brake");
                 }
-                if (changes & Boost)
-                {
-                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & Boost);
+                if (changes & EngineState::Boost)
+                {
+                    lua_pushboolean(this->lua_->getInternalLuaState(), this->state_ & EngineState::Boost);
                     lua_setglobal(this->lua_->getInternalLuaState(), "boost");
-                    if (this->state_ & Boost)
+                    if (this->state_ & EngineState::Boost)
                         defEngineSndBoost_->play();
                     else
@@ -178,6 +178,6 @@
 
                 // Update all effect conditions
-                for (std::vector<EffectContainer*>::const_iterator it = this->effectContainers_.begin(); it != this->effectContainers_.end(); ++it)
-                    (*it)->updateCondition();
+                for (EffectContainer* container : this->effectContainers_)
+                    container->updateCondition();
             }
         }
@@ -198,19 +198,19 @@
             this->getShip()->attach(defEngineSndBoost_);
 
-        for (std::vector<EffectContainer*>::const_iterator it = this->effectContainers_.begin(); it != this->effectContainers_.end(); ++it)
-            for (std::vector<WorldEntity*>::const_iterator it2 = (*it)->getEffectsBegin(); it2 != (*it)->getEffectsEnd(); ++it2)
-                this->getShip()->attach(*it2);
-    }
-
-    void MultiStateEngine::addEffectContainer(EffectContainer* effect)
-    {
-        if (effect == NULL)
+        for (EffectContainer* container : this->effectContainers_)
+            for (WorldEntity* effect : container->getEffects())
+                this->getShip()->attach(effect);
+    }
+
+    void MultiStateEngine::addEffectContainer(EffectContainer* container)
+    {
+        if (container == nullptr)
             return;
-        effect->setLuaState(this->lua_, 'f' + multi_cast<std::string>(this->effectContainers_.size()));
-        this->effectContainers_.push_back(effect);
+        container->setLuaState(this->lua_, 'f' + multi_cast<std::string>(this->effectContainers_.size()));
+        this->effectContainers_.push_back(container);
         if (this->getShip())
         {
-            for (std::vector<WorldEntity*>::const_iterator it = effect->getEffectsBegin(); it != effect->getEffectsBegin(); ++it)
-                this->getShip()->attach(*it);
+            for (WorldEntity* effect : container->getEffects())
+                this->getShip()->attach(effect);
         }
     }
@@ -219,10 +219,11 @@
     {
         unsigned int i = 0;
-        for (std::vector<EffectContainer*>::const_iterator it = this->effectContainers_.begin(); it != this->effectContainers_.end(); ++it)
+        for (EffectContainer* effectContainer : this->effectContainers_)
         {
             if (i == index)
-                return (*it);
-        }
-        return NULL;
+                return effectContainer;
+            i++;
+        }
+        return nullptr;
     }
 
Index: code/trunk/src/orxonox/items/MultiStateEngine.h
===================================================================
--- code/trunk/src/orxonox/items/MultiStateEngine.h	(revision 11056)
+++ code/trunk/src/orxonox/items/MultiStateEngine.h	(revision 11071)
@@ -41,10 +41,10 @@
     {
         public:
-            enum EngineState
+            struct EngineState
             {
-                Idle    = 1,
-                Normal  = 2,
-                Brake   = 4,
-                Boost   = 8
+                static constexpr int Idle    = 1;
+                static constexpr int Normal  = 2;
+                static constexpr int Brake   = 4;
+                static constexpr int Boost   = 8;
             };
 
@@ -52,9 +52,9 @@
             virtual ~MultiStateEngine();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void run(float dt);
+            virtual void run(float dt) override;
 
-            virtual void addToSpaceShip(SpaceShip* ship);
+            virtual void addToSpaceShip(SpaceShip* ship) override;
 
             void addEffectContainer(EffectContainer* effect);
Index: code/trunk/src/orxonox/items/PartDestructionEvent.cc
===================================================================
--- code/trunk/src/orxonox/items/PartDestructionEvent.cc	(revision 11056)
+++ code/trunk/src/orxonox/items/PartDestructionEvent.cc	(revision 11071)
@@ -98,14 +98,14 @@
         {
             switch (this->targetParam_) {
-            case shieldhealth:
+            case TargetParam::shieldhealth:
                 this->parent_->getParent()->setShieldHealth(operate(this->parent_->getParent()->getShieldHealth()));
                 break;
-            case boostpower:
+            case TargetParam::boostpower:
                 this->parent_->getParent()->setInitialBoostPower(operate(this->parent_->getParent()->getInitialBoostPower()));
                 break;
-            case boostpowerrate:
+            case TargetParam::boostpowerrate:
                 this->parent_->getParent()->setBoostPowerRate(operate(this->parent_->getParent()->getBoostPowerRate()));
                 break;
-            case rotationthrust:
+            case TargetParam::rotationthrust:
                 this->parent_->getParent()->setRotationThrust(operate(this->parent_->getParent()->getRotationThrust()));
                 break;
@@ -120,14 +120,14 @@
         {
             switch (this->targetParam_) {
-            case null:
+            case TargetParam::null:
                 this->parent_->getParent()->getEngineByName(targetName_)->destroy();
                 break;
-            case boostfactor:
+            case TargetParam::boostfactor:
                 this->parent_->getParent()->getEngineByName(targetName_)->setBoostFactor(operate(this->parent_->getParent()->getEngineByName(targetName_)->getBoostFactor()));
                 break;
-            case speedfront:
+            case TargetParam::speedfront:
                 this->parent_->getParent()->getEngineByName(targetName_)->setMaxSpeedFront(operate(this->parent_->getParent()->getEngineByName(targetName_)->getMaxSpeedFront()));
                 break;
-            case accelerationfront:
+            case TargetParam::accelerationfront:
                 this->parent_->getParent()->getEngineByName(targetName_)->setAccelerationFront(operate(this->parent_->getParent()->getEngineByName(targetName_)->getAccelerationFront()));
                 break;
@@ -142,5 +142,5 @@
         {
             switch (this->targetParam_) {
-            case null:
+            case TargetParam::null:
                 if (!this->parent_->getParent()->getShipPartByName(targetName_))
                     return;
@@ -214,20 +214,20 @@
             if (param == "NULL")
             {
-                this->targetParam_ = null;
+                this->targetParam_ = TargetParam::null;
                 return;
             }
             if (param == "boostfactor")
             {
-                this->targetParam_ = boostfactor;
+                this->targetParam_ = TargetParam::boostfactor;
                 return;
             }
             if (param == "speedfront")
             {
-                this->targetParam_ = speedfront;
+                this->targetParam_ = TargetParam::speedfront;
                 return;
             }
             if (param == "accelerationfront")
             {
-                this->targetParam_ = accelerationfront;
+                this->targetParam_ = TargetParam::accelerationfront;
                 return;
             }
@@ -244,20 +244,20 @@
             if (param == "shieldhealth")
             {
-                this->targetParam_ = shieldhealth;
+                this->targetParam_ = TargetParam::shieldhealth;
                 return;
             }
             if (param == "boostpower")
             {
-                this->targetParam_ = boostpower;
+                this->targetParam_ = TargetParam::boostpower;
                 return;
             }
             if (param == "boostpowerrate")
             {
-                this->targetParam_ = boostpowerrate;
+                this->targetParam_ = TargetParam::boostpowerrate;
                 return;
             }
             if (param == "rotationthrust")
             {
-                this->targetParam_ = rotationthrust;
+                this->targetParam_ = TargetParam::rotationthrust;
                 return;
             }
@@ -271,5 +271,5 @@
             if (param == "NULL")
             {
-                this->targetParam_ = null;
+                this->targetParam_ = TargetParam::null;
                 return;
             }
Index: code/trunk/src/orxonox/items/PartDestructionEvent.h
===================================================================
--- code/trunk/src/orxonox/items/PartDestructionEvent.h	(revision 11056)
+++ code/trunk/src/orxonox/items/PartDestructionEvent.h	(revision 11071)
@@ -82,5 +82,5 @@
                     List of all allowed parameters.
                 */
-            enum TargetParam
+            enum class TargetParam
             {
                 shieldhealth,
@@ -100,5 +100,5 @@
             virtual ~PartDestructionEvent();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void execute();
Index: code/trunk/src/orxonox/items/ShipPart.cc
===================================================================
--- code/trunk/src/orxonox/items/ShipPart.cc	(revision 11056)
+++ code/trunk/src/orxonox/items/ShipPart.cc	(revision 11071)
@@ -49,5 +49,5 @@
 
     ShipPart::ShipPart(Context* context)
-        : Item(context), parent_(NULL)
+        : Item(context), parent_(nullptr)
     {
         RegisterObject(ShipPart);
@@ -121,5 +121,5 @@
     void ShipPart::addEntity(StaticEntity* entity)
     {
-        OrxAssert(entity != NULL, "The Entity cannot be NULL.");
+        OrxAssert(entity != nullptr, "The Entity cannot be nullptr.");
         this->entityList_.push_back(entity);
     }
@@ -129,10 +129,10 @@
         Get the i-th StaticEntity of the ShipPart.
     @return
-        Returns a pointer to the i-the StaticEntity. NULL if there is no StaticEntity with that index.
+        Returns a pointer to the i-the StaticEntity. nullptr if there is no StaticEntity with that index.
     */
     StaticEntity* ShipPart::getEntity(unsigned int index)
     {
         if(this->entityList_.size() >= index)
-            return NULL;
+            return nullptr;
         else
             return this->entityList_[index];
@@ -142,12 +142,12 @@
     @brief
         Check whether the ShipPart has a particular Entity.
-    @param engine
+    @param search
         A pointer to the Entity to be checked.
     */
-    bool ShipPart::hasEntity(StaticEntity* entity) const
-    {
-        for(unsigned int i = 0; i < this->entityList_.size(); i++)
-        {
-            if(this->entityList_[i] == entity)
+    bool ShipPart::hasEntity(StaticEntity* search) const
+    {
+        for(StaticEntity* entity : this->entityList_)
+        {
+            if(entity == search)
                 return true;
         }
@@ -163,5 +163,5 @@
     void ShipPart::addDestructionEvent(PartDestructionEvent* event)
     {
-        OrxAssert(event != NULL, "The PartDestructionEvent cannot be NULL.");
+        OrxAssert(event != nullptr, "The PartDestructionEvent cannot be nullptr.");
         event->setParent(this);
         this->eventList_.push_back(event);
@@ -172,31 +172,17 @@
         Get the i-th PartDestructionEvent of the ShipPart.
     @return
-        Returns a pointer to the i-the PartDestructionEvent. NULL if there is no PartDestructionEvent with that index.
+        Returns a pointer to the i-the PartDestructionEvent. nullptr if there is no PartDestructionEvent with that index.
     */
     PartDestructionEvent* ShipPart::getDestructionEvent(unsigned int index)
     {
         if(this->eventList_.size() <= index)
-            return NULL;
+            return nullptr;
         else
             return this->eventList_[index];
     }
 
-    void ShipPart::setDamageAbsorption(float value)
-    {
-        this->damageAbsorption_ = value;
-    }
-
     void ShipPart::setParent(ModularSpaceShip* ship)
     {
         this->parent_ = ship;
-    }
-
-    /**
-    @brief
-        Sets the health of the ShipPart.
-    */
-    void ShipPart::setHealth(float health)
-    {
-        this->health_ = health;
     }
 
Index: code/trunk/src/orxonox/items/ShipPart.h
===================================================================
--- code/trunk/src/orxonox/items/ShipPart.h	(revision 11056)
+++ code/trunk/src/orxonox/items/ShipPart.h	(revision 11071)
@@ -47,5 +47,5 @@
             virtual ~ShipPart();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             virtual void handleHit(float damage, float healthdamage, float shielddamage, Pawn* originator);
@@ -64,18 +64,20 @@
             PartDestructionEvent* getDestructionEvent(unsigned int index);
 
-            virtual void setDamageAbsorption(float value);
-            inline float getDamageAbsorption()
+            inline void setDamageAbsorption(float value)
+                { this->damageAbsorption_ = value; }
+            inline float getDamageAbsorption() const
                 { return this->damageAbsorption_; }
 
             void setParent(ModularSpaceShip* ship);
-            inline ModularSpaceShip* getParent()
+            inline ModularSpaceShip* getParent() const
                 { return this->parent_; }
 
             inline void setEventExecution(bool var)
                 { this->eventExecution_ = var; }
-            inline bool isEventExecution()
+            inline bool isEventExecution() const
                 { return this->eventExecution_; }
 
-            virtual void setHealth(float health);
+            inline void setHealth(float health)
+                { this->health_ = health; }
             inline void addHealth(float health)
                 { this->setHealth(this->health_ + health); }
Index: code/trunk/src/orxonox/overlays/GUISheet.h
===================================================================
--- code/trunk/src/orxonox/overlays/GUISheet.h	(revision 11056)
+++ code/trunk/src/orxonox/overlays/GUISheet.h	(revision 11071)
@@ -44,5 +44,5 @@
         ~GUISheet();
 
-        void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         void show();
Index: code/trunk/src/orxonox/overlays/InGameConsole.cc
===================================================================
--- code/trunk/src/orxonox/overlays/InGameConsole.cc	(revision 11056)
+++ code/trunk/src/orxonox/overlays/InGameConsole.cc	(revision 11071)
@@ -75,11 +75,11 @@
         : shell_(new Shell("InGameConsole", true))
         , bShowCursor_(false)
-        , consoleOverlay_(0)
-        , consoleOverlayContainer_(0)
-        , consoleOverlayNoise_(0)
-        , consoleOverlayCursor_(0)
-        , consoleOverlayBorder_(0)
-        , consoleOverlayTextAreas_(0)
-        , inputState_(0)
+        , consoleOverlay_(nullptr)
+        , consoleOverlayContainer_(nullptr)
+        , consoleOverlayNoise_(nullptr)
+        , consoleOverlayCursor_(nullptr)
+        , consoleOverlayBorder_(nullptr)
+        , consoleOverlayTextAreas_(nullptr)
+        , inputState_(nullptr)
     {
         RegisterObject(InGameConsole);
@@ -130,5 +130,5 @@
                     if (this->consoleOverlayTextAreas_[i])
                         Ogre::OverlayManager::getSingleton().destroyOverlayElement(this->consoleOverlayTextAreas_[i]);
-                    this->consoleOverlayTextAreas_[i] = 0;
+                    this->consoleOverlayTextAreas_[i] = nullptr;
                 }
 
@@ -140,5 +140,5 @@
         {
             delete[] this->consoleOverlayTextAreas_;
-            this->consoleOverlayTextAreas_ = 0;
+            this->consoleOverlayTextAreas_ = nullptr;
         }
 
@@ -175,6 +175,6 @@
             else
             {
-                inputState_->setMouseHandler(0);
-                inputState_->setJoyStickHandler(0);
+                inputState_->setMouseHandler(nullptr);
+                inputState_->setJoyStickHandler(nullptr);
             }
         }
@@ -292,5 +292,5 @@
 
         for (int i = LINES - 1; i > max; --i)
-            this->print("", Shell::DebugOutput, i, true);
+            this->print("", Shell::LineType::DebugOutput, i, true);
 
         for (int i = max; i >= 1; --i)
@@ -318,5 +318,5 @@
     {
         if (LINES > 0)
-            this->print(this->shell_->getInput(), Shell::Input, 0);
+            this->print(this->shell_->getInput(), Shell::LineType::Input, 0);
 
         if (this->shell_->getInput().empty())
@@ -342,5 +342,5 @@
     void InGameConsole::executed()
     {
-        this->shell_->addOutput(this->shell_->getInput(), Shell::Command);
+        this->shell_->addOutput(this->shell_->getInput(), Shell::LineType::Command);
     }
 
@@ -562,26 +562,26 @@
         switch (type)
         {
-            case Shell::Message:
-            case Shell::DebugOutput:     colourTop = ColourValue(0.9f, 0.9f, 0.9f); break;
-
-            case Shell::UserError:       colourTop = ColourValue(0.9f, 0.0f, 0.0f); break;
-            case Shell::UserWarning:     colourTop = ColourValue(0.9f, 0.5f, 0.0f); break;
-            case Shell::UserStatus:      colourTop = ColourValue(0.0f, 0.9f, 0.0f); break;
-            case Shell::UserInfo:        colourTop = ColourValue(0.0f, 0.8f, 0.8f); break;
-
-            case Shell::InternalError:   colourTop = ColourValue(0.5f, 0.0f, 0.0f); break;
-            case Shell::InternalWarning: colourTop = ColourValue(0.5f, 0.2f, 0.0f); break;
-            case Shell::InternalStatus:  colourTop = ColourValue(0.0f, 0.5f, 0.0f); break;
-            case Shell::InternalInfo:    colourTop = ColourValue(0.0f, 0.4f, 0.4f); break;
-
-            case Shell::Verbose:         colourTop = ColourValue(0.3f, 0.3f, 0.9f); break;
-            case Shell::VerboseMore:     colourTop = ColourValue(0.2f, 0.2f, 0.7f); break;
-            case Shell::VerboseUltra:    colourTop = ColourValue(0.1f, 0.1f, 0.5f); break;
-
-            case Shell::Command:         colourTop = ColourValue(0.8f, 0.2f, 0.8f); break;
-            case Shell::Hint:            colourTop = ColourValue(0.4f, 0.0f, 0.4f); break;
-            case Shell::Input:           colourTop = ColourValue(0.9f, 0.9f, 0.9f); break;
-
-            default:                     colourTop = ColourValue(0.5f, 0.5f, 0.5f); break;
+            case Shell::LineType::Message:
+            case Shell::LineType::DebugOutput:     colourTop = ColourValue(0.9f, 0.9f, 0.9f); break;
+
+            case Shell::LineType::UserError:       colourTop = ColourValue(0.9f, 0.0f, 0.0f); break;
+            case Shell::LineType::UserWarning:     colourTop = ColourValue(0.9f, 0.5f, 0.0f); break;
+            case Shell::LineType::UserStatus:      colourTop = ColourValue(0.0f, 0.9f, 0.0f); break;
+            case Shell::LineType::UserInfo:        colourTop = ColourValue(0.0f, 0.8f, 0.8f); break;
+
+            case Shell::LineType::InternalError:   colourTop = ColourValue(0.5f, 0.0f, 0.0f); break;
+            case Shell::LineType::InternalWarning: colourTop = ColourValue(0.5f, 0.2f, 0.0f); break;
+            case Shell::LineType::InternalStatus:  colourTop = ColourValue(0.0f, 0.5f, 0.0f); break;
+            case Shell::LineType::InternalInfo:    colourTop = ColourValue(0.0f, 0.4f, 0.4f); break;
+
+            case Shell::LineType::Verbose:         colourTop = ColourValue(0.3f, 0.3f, 0.9f); break;
+            case Shell::LineType::VerboseMore:     colourTop = ColourValue(0.2f, 0.2f, 0.7f); break;
+            case Shell::LineType::VerboseUltra:    colourTop = ColourValue(0.1f, 0.1f, 0.5f); break;
+
+            case Shell::LineType::Command:         colourTop = ColourValue(0.8f, 0.2f, 0.8f); break;
+            case Shell::LineType::Hint:            colourTop = ColourValue(0.4f, 0.0f, 0.4f); break;
+            case Shell::LineType::Input:           colourTop = ColourValue(0.9f, 0.9f, 0.9f); break;
+
+            default:                               colourTop = ColourValue(0.5f, 0.5f, 0.5f); break;
         }
 
Index: code/trunk/src/orxonox/overlays/InGameConsole.h
===================================================================
--- code/trunk/src/orxonox/overlays/InGameConsole.h	(revision 11056)
+++ code/trunk/src/orxonox/overlays/InGameConsole.h	(revision 11071)
@@ -53,6 +53,6 @@
         void setConfigValues();
 
-        void preUpdate(const Clock& time);
-        void postUpdate(const Clock& time) { /*no action*/ }
+        virtual void preUpdate(const Clock& time) override;
+        virtual void postUpdate(const Clock& time) override { /*no action*/ }
 
         static void openConsole();
@@ -65,10 +65,10 @@
         void deactivate();
 
-        void linesChanged();
-        void lineAdded();
-        void inputChanged();
-        void cursorChanged();
-        void executed();
-        void exit();
+        virtual void linesChanged() override;
+        virtual void lineAdded() override;
+        virtual void inputChanged() override;
+        virtual void cursorChanged() override;
+        virtual void executed() override;
+        virtual void exit() override;
 
         void shiftLines();
@@ -77,5 +77,5 @@
         void print(const std::string& text, Shell::LineType type, int index, bool alwaysShift = false);
 
-        void windowResized(unsigned int newWidth, unsigned int newHeight);
+        virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
 
         // config value related
Index: code/trunk/src/orxonox/overlays/OrxonoxOverlay.cc
===================================================================
--- code/trunk/src/orxonox/overlays/OrxonoxOverlay.cc	(revision 11056)
+++ code/trunk/src/orxonox/overlays/OrxonoxOverlay.cc	(revision 11071)
@@ -70,6 +70,6 @@
         RegisterObject(OrxonoxOverlay);
 
-        this->owner_ = 0;
-        this->group_ = 0;
+        this->owner_ = nullptr;
+        this->group_ = nullptr;
 
         if (!GameMode::showsGraphics())
@@ -94,5 +94,5 @@
         this->angle_ = Degree(0.0);
         this->bCorrectAspect_ = false;
-        this->rotState_ = Horizontal;
+        this->rotState_ = RotationState::Horizontal;
         this->angleChanged(); // updates all other values as well
 
@@ -259,15 +259,15 @@
             {
                 tempAspect = 1.0f / this->windowAspectRatio_;
-                rotState_ = Vertical;
+                rotState_ = RotationState::Vertical;
             }
             else if (angle > 179 || angle < 1)
             {
                 tempAspect = this->windowAspectRatio_;
-                rotState_ = Horizontal;
+                rotState_ = RotationState::Horizontal;
             }
             else
             {
                 tempAspect = 1.0f;
-                rotState_ = Inbetween;
+                rotState_ = RotationState::Inbetween;
             }
 
Index: code/trunk/src/orxonox/overlays/OrxonoxOverlay.h
===================================================================
--- code/trunk/src/orxonox/overlays/OrxonoxOverlay.h	(revision 11056)
+++ code/trunk/src/orxonox/overlays/OrxonoxOverlay.h	(revision 11071)
@@ -79,5 +79,5 @@
             and in between is everything else.
         */
-        enum RotationState
+        enum class RotationState
         {
             Horizontal,
@@ -90,7 +90,7 @@
         virtual ~OrxonoxOverlay();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-
-        virtual void changedName();
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+
+        virtual void changedName() override;
 
         //! Shows the overlay with an detour to BaseObject::visibility_
@@ -167,5 +167,5 @@
         void setBackgroundColour(ColourValue colour);
 
-        virtual void changedVisibility();
+        virtual void changedVisibility() override;
 
         inline void setOwner(BaseObject* owner)
@@ -186,5 +186,5 @@
         virtual void changedOverlayGroup()
             { this->changedVisibility(); }
-        virtual void setZOrder(unsigned short order);
+        void setZOrder(unsigned short order);
 
     protected:
@@ -207,5 +207,5 @@
 
     private:
-        void windowResized(unsigned int newWidth, unsigned int newHeight);
+        virtual void windowResized(unsigned int newWidth, unsigned int newHeight) override;
 
         static unsigned int hudOverlayCounter_s;   //!< Static counter for hud elements
Index: code/trunk/src/orxonox/overlays/OverlayGroup.cc
===================================================================
--- code/trunk/src/orxonox/overlays/OverlayGroup.cc	(revision 11056)
+++ code/trunk/src/orxonox/overlays/OverlayGroup.cc	(revision 11071)
@@ -51,6 +51,6 @@
         {
             ArgumentCompletionList names;
-            for (ObjectList<OverlayGroup>::iterator it = ObjectList<OverlayGroup>::begin(); it; ++it)
-                names.push_back(ArgumentCompletionListElement(it->getName(), getLowercase(it->getName())));
+            for (OverlayGroup* overlayGroup : ObjectList<OverlayGroup>())
+                names.push_back(ArgumentCompletionListElement(overlayGroup->getName(), getLowercase(overlayGroup->getName())));
             return names;
         }
@@ -69,5 +69,5 @@
         RegisterObject(OverlayGroup);
 
-        this->owner_ = 0;
+        this->owner_ = nullptr;
 
         setScale(Vector2(1.0, 1.0));
@@ -77,6 +77,6 @@
     OverlayGroup::~OverlayGroup()
     {
-        for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
-            (*it)->destroy();
+        for (OrxonoxOverlay* hudElement : hudElements_)
+            hudElement->destroy();
         this->hudElements_.clear();
     }
@@ -101,6 +101,6 @@
     void OverlayGroup::setScale(const Vector2& scale)
     {
-        for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
-            (*it)->scale(scale / this->scale_);
+        for (OrxonoxOverlay* hudElement : hudElements_)
+            hudElement->scale(scale / this->scale_);
         this->scale_ = scale;
     }
@@ -109,6 +109,6 @@
     void OverlayGroup::setScroll(const Vector2& scroll)
     {
-        for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
-            (*it)->scroll(scroll - this->scroll_);
+        for (OrxonoxOverlay* hudElement : hudElements_)
+            hudElement->scroll(scroll - this->scroll_);
         this->scroll_ = scroll;
     }
@@ -148,5 +148,5 @@
         if (index < this->hudElements_.size())
         {
-            std::set< StrongPtr<OrxonoxOverlay> >::const_iterator it = hudElements_.begin();
+            std::set<StrongPtr<OrxonoxOverlay>>::const_iterator it = hudElements_.begin();
             for (unsigned int i = 0; i != index; ++it, ++i)
                 ;
@@ -154,5 +154,5 @@
         }
         else
-            return 0;
+            return nullptr;
     }
 
@@ -162,6 +162,6 @@
         SUPER( OverlayGroup, changedVisibility );
 
-        for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
-            (*it)->changedVisibility(); //inform all Child Overlays that our visibility has changed
+        for (OrxonoxOverlay* hudElement : hudElements_)
+            hudElement->changedVisibility(); //inform all Child Overlays that our visibility has changed
     }
 
@@ -170,6 +170,6 @@
         this->owner_ = owner;
 
-        for (std::set< StrongPtr<OrxonoxOverlay> >::iterator it = hudElements_.begin(); it != hudElements_.end(); ++it)
-            (*it)->setOwner(owner);
+        for (OrxonoxOverlay* hudElement : hudElements_)
+            hudElement->setOwner(owner);
     }
 
@@ -185,8 +185,8 @@
     /*static*/ void OverlayGroup::toggleVisibility(const std::string& name)
     {
-        for (ObjectList<OverlayGroup>::iterator it = ObjectList<OverlayGroup>::begin(); it; ++it)
-        {
-            if ((*it)->getName() == name)
-                (*it)->setVisible(!((*it)->isVisible()));
+        for (OverlayGroup* group : ObjectList<OverlayGroup>())
+        {
+            if (group->getName() == name)
+                group->setVisible(!(group->isVisible()));
         }
     }
@@ -200,12 +200,12 @@
     /*static*/ void OverlayGroup::show(const std::string& name)
     {
-        for (ObjectList<OverlayGroup>::iterator it = ObjectList<OverlayGroup>::begin(); it; ++it)
-        {
-            if ((*it)->getName() == name)
+        for (OverlayGroup* group : ObjectList<OverlayGroup>())
+        {
+            if (group->getName() == name)
             {
-                if((*it)->isVisible())
-                    (*it)->changedVisibility();
+                if(group->isVisible())
+                    group->changedVisibility();
                 else
-                    (*it)->setVisible(!((*it)->isVisible()));
+                    group->setVisible(!(group->isVisible()));
             }
         }
@@ -223,8 +223,8 @@
     /*static*/ void OverlayGroup::scaleGroup(const std::string& name, float scale)
     {
-        for (ObjectList<OverlayGroup>::iterator it = ObjectList<OverlayGroup>::begin(); it; ++it)
-        {
-            if ((*it)->getName() == name)
-                (*it)->scale(Vector2(scale, scale));
+        for (OverlayGroup* group : ObjectList<OverlayGroup>())
+        {
+            if (group->getName() == name)
+                group->scale(Vector2(scale, scale));
         }
     }
@@ -241,8 +241,8 @@
     /*static*/ void OverlayGroup::scrollGroup(const std::string& name, const Vector2& scroll)
     {
-        for (ObjectList<OverlayGroup>::iterator it = ObjectList<OverlayGroup>::begin(); it; ++it)
-        {
-            if ((*it)->getName() == name)
-                (*it)->scroll(scroll);
+        for (OverlayGroup* group : ObjectList<OverlayGroup>())
+        {
+            if (group->getName() == name)
+                group->scroll(scroll);
         }
     }
Index: code/trunk/src/orxonox/overlays/OverlayGroup.h
===================================================================
--- code/trunk/src/orxonox/overlays/OverlayGroup.h	(revision 11056)
+++ code/trunk/src/orxonox/overlays/OverlayGroup.h	(revision 11071)
@@ -58,5 +58,5 @@
         ~OverlayGroup();
 
-        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
         static void toggleVisibility(const std::string& name);
@@ -65,8 +65,8 @@
         static void scrollGroup(const std::string& name, const Vector2& scroll);
 
-        inline const std::set< StrongPtr<OrxonoxOverlay> >& getOverlays() const
+        inline const std::set<StrongPtr<OrxonoxOverlay>>& getOverlays() const
             { return this->hudElements_; }
 
-        virtual void changedVisibility();
+        virtual void changedVisibility() override;
 
         void setOwner(BaseObject* owner);
@@ -91,5 +91,5 @@
 
     private:
-        std::set< StrongPtr<OrxonoxOverlay> > hudElements_;    //!< Contains all the OrxonoxOverlays of the this group.
+        std::set<StrongPtr<OrxonoxOverlay>> hudElements_;    //!< Contains all the OrxonoxOverlays of the this group.
         Vector2 scale_;                            //!< Current scale (independent of the elements).
         Vector2 scroll_;                           //!< Current scrolling offset.
Index: code/trunk/src/orxonox/sound/AmbientSound.cc
===================================================================
--- code/trunk/src/orxonox/sound/AmbientSound.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/AmbientSound.cc	(revision 11071)
@@ -92,6 +92,6 @@
         {
             const std::string& path = "ambient/" + mood + '/' + this->ambientSource_;
-            shared_ptr<ResourceInfo> fileInfo = Resource::getInfo(path);
-            if (fileInfo != NULL)
+            std::shared_ptr<ResourceInfo> fileInfo = Resource::getInfo(path);
+            if (fileInfo != nullptr)
             {
                 orxout(user_info) << "Loading ambient sound " << path << "..." << endl; // TODO: make this output internal if we implement sound streaming
Index: code/trunk/src/orxonox/sound/AmbientSound.h
===================================================================
--- code/trunk/src/orxonox/sound/AmbientSound.h	(revision 11056)
+++ code/trunk/src/orxonox/sound/AmbientSound.h	(revision 11071)
@@ -50,7 +50,7 @@
         AmbientSound();
 
-        void play();
-        bool stop();
-        void pause();
+        virtual void play() override;
+        virtual bool stop() override;
+        virtual void pause() override;
 
         bool setAmbientSource(const std::string& source);
@@ -66,7 +66,7 @@
 
     private:
-        void preDestroy();
-        float getRealVolume();
-        bool moodChanged(const std::string& mood);
+        virtual void preDestroy() override;
+        virtual float getRealVolume() override;
+        virtual bool moodChanged(const std::string& mood) override;
         inline void ambientSourceChanged()
             { this->setAmbientSource(this->ambientSource_); }
Index: code/trunk/src/orxonox/sound/BaseSound.cc
===================================================================
--- code/trunk/src/orxonox/sound/BaseSound.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/BaseSound.cc	(revision 11071)
@@ -49,5 +49,5 @@
         , volume_(0.7)
         , bLooping_(false)
-        , state_(Stopped)
+        , state_(State::Stopped)
         , pitch_ (1.0)
     {
@@ -63,8 +63,8 @@
     BaseSound::~BaseSound()
     {
-        if (this->state_ != Stopped)
+        if (this->state_ != State::Stopped)
             this->stop();
         // Release buffer
-        if (this->soundBuffer_ != NULL)
+        if (this->soundBuffer_ != nullptr)
         {
             assert(GameMode::playsSound());
@@ -83,6 +83,6 @@
     void BaseSound::doPlay()
     {
-        this->state_ = Playing;
-        if (GameMode::playsSound() && this->getSourceState() != AL_PLAYING && this->soundBuffer_ != NULL)
+        this->state_ = State::Playing;
+        if (GameMode::playsSound() && this->getSourceState() != AL_PLAYING && this->soundBuffer_ != nullptr)
         {
             if (!alIsSource(this->audioSource_))
@@ -102,5 +102,5 @@
     bool BaseSound::doStop()
     {
-        this->state_ = Stopped;
+        this->state_ = State::Stopped;
         if (alIsSource(this->audioSource_))
         {
@@ -123,5 +123,5 @@
         if (this->isStopped())
             return;
-        this->state_ = Paused;
+        this->state_ = State::Paused;
         if (alIsSource(this->audioSource_))
             alSourcePause(this->audioSource_);
@@ -151,5 +151,5 @@
             orxout(internal_warning, context::sound) << "Setting source parameters to 0 failed: "
                                                      << SoundManager::getALErrorString(error) << endl;
-        assert(this->soundBuffer_ != NULL);
+        assert(this->soundBuffer_ != nullptr);
         alSourcei(this->audioSource_, AL_BUFFER, this->soundBuffer_->getBuffer());
         if (ALuint error = alGetError())
@@ -209,5 +209,5 @@
         }
 
-        if (this->soundBuffer_ != NULL)
+        if (this->soundBuffer_ != nullptr)
         {
             if (this->soundBuffer_->getFilename() == source)
@@ -233,5 +233,5 @@
         // Get new sound buffer
         this->soundBuffer_ = SoundManager::getInstance().getSoundBuffer(this->source_);
-        if (this->soundBuffer_ == NULL)
+        if (this->soundBuffer_ == nullptr)
             return;
 
@@ -256,10 +256,10 @@
         else // No source acquired so far, but might be set to playing or paused
         {
-            State state = static_cast<State>(this->state_); // save
+            State state = this->state_; // save
             if (this->isPlaying() || this->isPaused())
                 doPlay();
-            if (state == Paused)
-            {
-                this->state_ = Paused;
+            if (state == State::Paused)
+            {
+                this->state_ = State::Paused;
                 doPause();
             }
@@ -271,11 +271,11 @@
         switch (this->state_)
         {
-            case Playing:
+            case State::Playing:
                 this->play();
                 break;
-            case Paused:
+            case State::Paused:
                 this->pause();
                 break;
-            case Stopped:
+            case State::Stopped:
             default:
                 this->stop();
Index: code/trunk/src/orxonox/sound/BaseSound.h
===================================================================
--- code/trunk/src/orxonox/sound/BaseSound.h	(revision 11056)
+++ code/trunk/src/orxonox/sound/BaseSound.h	(revision 11071)
@@ -33,5 +33,5 @@
 
 #include <string>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #include <OgreDataStream.h>
 #include "core/object/Listable.h"
@@ -54,7 +54,7 @@
         virtual void pause() { this->doPause(); }
 
-        bool isPlaying() const { return this->state_ == Playing; }
-        bool isPaused()  const { return this->state_ == Paused; }
-        bool isStopped() const { return this->state_ == Stopped; }
+        bool isPlaying() const { return this->state_ == State::Playing; }
+        bool isPaused()  const { return this->state_ == State::Paused; }
+        bool isStopped() const { return this->state_ == State::Stopped; }
 
         virtual void setSource(const std::string& source);
@@ -76,5 +76,5 @@
 
     protected:
-        enum State
+        enum class State
         {
             Stopped,
@@ -107,9 +107,9 @@
         ALuint          audioSource_;
         bool            bPooling_;
-        shared_ptr<SoundBuffer> soundBuffer_;
+        std::shared_ptr<SoundBuffer> soundBuffer_;
         std::string     source_;
         float           volume_;
         bool            bLooping_;
-        uint8_t         state_;       // This Variable is actually of type State
+        State           state_;       // This Variable is actually of type State
         float           pitch_;
 
Index: code/trunk/src/orxonox/sound/SoundBuffer.cc
===================================================================
--- code/trunk/src/orxonox/sound/SoundBuffer.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/SoundBuffer.cc	(revision 11071)
@@ -39,5 +39,5 @@
 namespace orxonox
 {
-    SoundBuffer::SoundBuffer(const std::string& filename, std::list<shared_ptr<SoundBuffer> >::iterator poolIterator)
+    SoundBuffer::SoundBuffer(const std::string& filename, std::list<std::shared_ptr<SoundBuffer>>::iterator poolIterator)
         : filename_(filename)
         , audioBuffer_(AL_NONE)
@@ -45,9 +45,9 @@
     {
         if (this->filename_.empty())
-            ThrowException(General, "SoundBuffer construction: fileInfo was NULL");
+            ThrowException(General, "SoundBuffer construction: fileInfo was nullptr");
 
         // Get resource info
-        shared_ptr<ResourceInfo> fileInfo = Resource::getInfo(filename);
-        if (fileInfo == NULL)
+        std::shared_ptr<ResourceInfo> fileInfo = Resource::getInfo(filename);
+        if (fileInfo == nullptr)
         {
             orxout(internal_error, context::sound) << "Sound file '" << filename << "' not found" << endl;
@@ -83,5 +83,5 @@
     }
 
-    void SoundBuffer::loadStandard(const shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream)
+    void SoundBuffer::loadStandard(const std::shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream)
     {
         // Read everything into a temporary buffer
@@ -127,5 +127,5 @@
     }
 
-    void SoundBuffer::loadOgg(const shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream)
+    void SoundBuffer::loadOgg(const std::shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream)
     {
         char inbuffer[256*1024];
@@ -138,8 +138,8 @@
         vorbisCallbacks.seek_func  = &seekVorbis;
         vorbisCallbacks.tell_func  = &tellVorbis;
-        vorbisCallbacks.close_func = NULL;
+        vorbisCallbacks.close_func = nullptr;
 
         OggVorbis_File vf;
-        int ret = ov_open_callbacks(dataStream.get(), &vf, NULL, 0, vorbisCallbacks);
+        int ret = ov_open_callbacks(dataStream.get(), &vf, nullptr, 0, vorbisCallbacks);
         if (ret < 0)
         {
Index: code/trunk/src/orxonox/sound/SoundBuffer.h
===================================================================
--- code/trunk/src/orxonox/sound/SoundBuffer.h	(revision 11056)
+++ code/trunk/src/orxonox/sound/SoundBuffer.h	(revision 11071)
@@ -33,5 +33,5 @@
 
 #include <list>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 #include "core/Resource.h"
 
@@ -45,14 +45,7 @@
     {
         friend class SoundManager;
-#if !defined(_MSC_VER) || _MSC_VER >= 1500
-        // Make sure nobody deletes an instance (using strong pointers)
-        template <class T>
-        friend void boost::checked_delete(T*);
-#endif
 
     public:
-#if defined(_MSC_VER) && _MSC_VER < 1500
         ~SoundBuffer();
-#endif
         inline ALuint getBuffer()
             { return this->audioBuffer_; }
@@ -64,14 +57,11 @@
 
     private:
-        SoundBuffer(const std::string& filename, std::list<shared_ptr<SoundBuffer> >::iterator poolIterator);
-#if !defined(_MSC_VER) || _MSC_VER >= 1500
-        ~SoundBuffer();
-#endif
-        void loadStandard(const shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream);
-        void loadOgg(const shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream);
+        SoundBuffer(const std::string& filename, std::list<std::shared_ptr<SoundBuffer>>::iterator poolIterator);
+        void loadStandard(const std::shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream);
+        void loadOgg(const std::shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream);
 
         std::string filename_;
         ALuint audioBuffer_;
-        std::list<shared_ptr<SoundBuffer> >::iterator poolIterator_;
+        std::list<std::shared_ptr<SoundBuffer>>::iterator poolIterator_;
     };
 }
Index: code/trunk/src/orxonox/sound/SoundManager.cc
===================================================================
--- code/trunk/src/orxonox/sound/SoundManager.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/SoundManager.cc	(revision 11071)
@@ -83,5 +83,5 @@
             ThrowException(InitialisationAborted, "Sound: Not loading at all");
 #if !defined(ORXONOX_PLATFORM_APPLE)
-        if (!alutInitWithoutContext(NULL, NULL))
+        if (!alutInitWithoutContext(nullptr, nullptr))
             ThrowException(InitialisationFailed, "Sound Error: ALUT initialisation failed: " << alutGetErrorString(alutGetError()));
         Loki::ScopeGuard alutExitGuard = Loki::MakeGuard(&alutExit);
@@ -90,5 +90,5 @@
 /*
         // Get list of available sound devices and display them
-        const char* devices = alcGetString(NULL, ALC_DEVICE_SPECIFIER);
+        const char* devices = alcGetString(nullptr, ALC_DEVICE_SPECIFIER);
         char* device = new char[strlen(devices)+1];
         strcpy(device, devices);
@@ -110,12 +110,12 @@
         this->device_ = alcOpenDevice(renderDevice.c_str());
 */
-        this->device_ = alcOpenDevice(NULL);
-        if (this->device_ == NULL)
+        this->device_ = alcOpenDevice(nullptr);
+        if (this->device_ == nullptr)
             ThrowException(InitialisationFailed, "Sound Error: Could not open sound device.");
         Loki::ScopeGuard closeDeviceGuard = Loki::MakeGuard(&alcCloseDevice, this->device_);
 
         // Create sound context and make it the currently used one
-        this->context_ = alcCreateContext(this->device_, NULL);
-        if (this->context_ == NULL)
+        this->context_ = alcCreateContext(this->device_, nullptr);
+        if (this->context_ == nullptr)
             ThrowException(InitialisationFailed, "Sound Error: Could not create ALC context");
         Loki::ScopeGuard desroyContextGuard = Loki::MakeGuard(&alcDestroyContext, this->context_);
@@ -189,5 +189,5 @@
 
         // Relieve context to destroy it
-        if (!alcMakeContextCurrent(NULL))
+        if (!alcMakeContextCurrent(nullptr))
             orxout(internal_error, context::sound) << "Could not unset ALC context" << endl;
         alcDestroyContext(this->context_);
@@ -294,14 +294,14 @@
         {
         case SoundType::All:
-            for (ObjectList<BaseSound>::iterator it = ObjectList<BaseSound>::begin(); it != ObjectList<BaseSound>::end(); ++it)
-                (*it)->updateVolume();
+            for (BaseSound* sound : ObjectList<BaseSound>())
+                sound->updateVolume();
             break;
         case SoundType::Music:
-            for (ObjectList<AmbientSound>::iterator it = ObjectList<AmbientSound>::begin(); it != ObjectList<AmbientSound>::end(); ++it)
-                (*it)->updateVolume();
+            for (AmbientSound* sound : ObjectList<AmbientSound>())
+                sound->updateVolume();
             break;
         case SoundType::Effects:
-            for (ObjectList<WorldSound>::iterator it = ObjectList<WorldSound>::begin(); it != ObjectList<WorldSound>::end(); ++it)
-                (*it)->updateVolume();
+            for (WorldSound* sound : ObjectList<WorldSound>())
+                sound->updateVolume();
             break;
         default:
@@ -350,5 +350,5 @@
     void SoundManager::registerAmbientSound(AmbientSound* newAmbient)
     {
-        if (newAmbient != NULL && !this->bDestructorCalled_)
+        if (newAmbient != nullptr && !this->bDestructorCalled_)
         {
             for (AmbientList::const_iterator it = this->ambientSounds_.begin(); it != this->ambientSounds_.end(); ++it)
@@ -373,5 +373,5 @@
     void SoundManager::unregisterAmbientSound(AmbientSound* oldAmbient)
     {
-        if (oldAmbient == NULL || ambientSounds_.empty() || this->bDestructorCalled_)
+        if (oldAmbient == nullptr || ambientSounds_.empty() || this->bDestructorCalled_)
             return;
 
@@ -405,12 +405,12 @@
     void SoundManager::pauseAmbientSound(AmbientSound* ambient)
     {
-        if (ambient != NULL)
-        {
-            for (AmbientList::iterator it = this->ambientSounds_.begin(); it != this->ambientSounds_.end(); ++it)
-            {
-                if (it->first == ambient)
+        if (ambient != nullptr)
+        {
+            for (std::pair<AmbientSound*, bool>& pair : this->ambientSounds_)
+            {
+                if (pair.first == ambient)
                 {
-                    it->second = true;
-                    this->fadeOut(it->first);
+                    pair.second = true;
+                    this->fadeOut(pair.first);
                     return;
                 }
@@ -422,5 +422,5 @@
     {
         // If we're already fading out --> remove that
-        for (std::list<StrongPtr<AmbientSound> >::iterator it = this->fadeOutList_.begin(); it != this->fadeOutList_.end(); it++)
+        for (std::list<StrongPtr<AmbientSound>>::iterator it = this->fadeOutList_.begin(); it != this->fadeOutList_.end(); it++)
         {
             if (*it == sound)
@@ -438,5 +438,5 @@
     {
         // If we're already fading in --> remove that
-        for (std::list<StrongPtr<AmbientSound> >::iterator it = this->fadeInList_.begin(); it != this->fadeInList_.end(); it++)
+        for (std::list<StrongPtr<AmbientSound>>::iterator it = this->fadeInList_.begin(); it != this->fadeInList_.end(); it++)
         {
             if (*it == sound)
@@ -461,5 +461,5 @@
 
         // FADE IN
-        for (std::list<StrongPtr<AmbientSound> >::iterator it= this->fadeInList_.begin(); it != this->fadeInList_.end(); )
+        for (std::list<StrongPtr<AmbientSound>>::iterator it= this->fadeInList_.begin(); it != this->fadeInList_.end(); )
         {
             if ((*it)->getVolume() + this->crossFadeStep_*dt > 1.0f)
@@ -476,5 +476,5 @@
 
         // FADE OUT
-        for (std::list<StrongPtr<AmbientSound> >::iterator it = this->fadeOutList_.begin(); it != this->fadeOutList_.end(); )
+        for (std::list<StrongPtr<AmbientSound>>::iterator it = this->fadeOutList_.begin(); it != this->fadeOutList_.end(); )
         {
             if ((*it)->getVolume() - this->crossFadeStep_*dt < 0.0f)
@@ -505,7 +505,7 @@
     }
 
-    shared_ptr<SoundBuffer> SoundManager::getSoundBuffer(const std::string& filename)
-    {
-        shared_ptr<SoundBuffer> buffer;
+    std::shared_ptr<SoundBuffer> SoundManager::getSoundBuffer(const std::string& filename)
+    {
+        std::shared_ptr<SoundBuffer> buffer;
         // Check active or pooled buffers
         SoundBufferMap::const_iterator it = this->soundBuffers_.find(filename);
@@ -538,5 +538,5 @@
     }
 
-    void SoundManager::releaseSoundBuffer(const shared_ptr<SoundBuffer>& buffer, bool bPoolBuffer)
+    void SoundManager::releaseSoundBuffer(const std::shared_ptr<SoundBuffer>& buffer, bool bPoolBuffer)
     {
         // Check if others are still using the buffer
@@ -551,5 +551,5 @@
                 while (this->effectsPoolSize_ + it->second->getSize() > this->maxEffectsPoolSize_s && !this->effectsPool_.empty())
                 {
-                    shared_ptr<SoundBuffer> bufferDel = this->effectsPool_.back();
+                    std::shared_ptr<SoundBuffer> bufferDel = this->effectsPool_.back();
                     this->effectsPoolSize_ -= bufferDel->getSize();
                     bufferDel->poolIterator_ = this->effectsPool_.end();
@@ -576,5 +576,5 @@
             ALuint source = this->availableSoundSources_.back();
             this->availableSoundSources_.pop_back();
-            this->usedSoundSources_.push_back(std::make_pair(source, object));
+            this->usedSoundSources_.emplace_back(source, object);
             return source;
         }
@@ -588,5 +588,5 @@
                 if (alIsSource(source) && !alGetError())
                 {
-                    this->usedSoundSources_.push_back(std::make_pair(source, object));
+                    this->usedSoundSources_.emplace_back(source, object);
                     return source;
                 }
@@ -606,5 +606,5 @@
 #endif
         this->availableSoundSources_.push_back(source);
-        for (std::vector<std::pair<ALuint, BaseSound*> >::iterator it = this->usedSoundSources_.begin();
+        for (std::vector<std::pair<ALuint, BaseSound*>>::iterator it = this->usedSoundSources_.begin();
             it != this->usedSoundSources_.end(); ++it)
         {
Index: code/trunk/src/orxonox/sound/SoundManager.h
===================================================================
--- code/trunk/src/orxonox/sound/SoundManager.h	(revision 11056)
+++ code/trunk/src/orxonox/sound/SoundManager.h	(revision 11071)
@@ -36,5 +36,5 @@
 #include <map>
 #include <string>
-#include <boost/shared_ptr.hpp>
+#include <memory>
 
 #include "util/Singleton.h"
@@ -68,6 +68,6 @@
         ~SoundManager();
 
-        void preUpdate(const Clock& time);
-        void postUpdate(const Clock& time) { /*no action*/ }
+        virtual void preUpdate(const Clock& time) override;
+        virtual void postUpdate(const Clock& time) override { /*no action*/ }
         void setConfigValues();
 
@@ -96,6 +96,6 @@
         // tolua_end
 
-        shared_ptr<SoundBuffer> getSoundBuffer(const std::string& filename);
-        void releaseSoundBuffer(const shared_ptr<SoundBuffer>& buffer, bool bPoolBuffer);
+        std::shared_ptr<SoundBuffer> getSoundBuffer(const std::string& filename);
+        void releaseSoundBuffer(const std::shared_ptr<SoundBuffer>& buffer, bool bPoolBuffer);
 
         ALuint getSoundSource(BaseSound* object);
@@ -125,10 +125,10 @@
 
         // Ambient sound related
-        typedef std::list<std::pair<AmbientSound*, bool> > AmbientList;
+        typedef std::list<std::pair<AmbientSound*, bool>> AmbientList;
         AmbientList                        ambientSounds_;
         //! Absolute change per second (0.1 means 10% of the nominal volume) for cross fading
         float                              crossFadeStep_;
-        std::list<StrongPtr<AmbientSound> > fadeInList_;
-        std::list<StrongPtr<AmbientSound> > fadeOutList_;
+        std::list<StrongPtr<AmbientSound>> fadeInList_;
+        std::list<StrongPtr<AmbientSound>> fadeOutList_;
 
         // Volume related
@@ -139,7 +139,7 @@
         static const unsigned int maxEffectsPoolSize_s = 40 * 1024 * 1024;
         unsigned int effectsPoolSize_;
-        typedef std::list<shared_ptr<SoundBuffer> > EffectsPoolList;
+        typedef std::list<std::shared_ptr<SoundBuffer>> EffectsPoolList;
         EffectsPoolList effectsPool_;
-        typedef std::map<std::string, shared_ptr<SoundBuffer> > SoundBufferMap;
+        typedef std::map<std::string, std::shared_ptr<SoundBuffer>> SoundBufferMap;
         SoundBufferMap soundBuffers_;
 
@@ -148,5 +148,5 @@
         unsigned int maxSources_;
         std::vector<ALuint> availableSoundSources_;
-        std::vector<std::pair<ALuint, BaseSound*> > usedSoundSources_;
+        std::vector<std::pair<ALuint, BaseSound*>> usedSoundSources_;
 
         bool bDestructorCalled_; ///< Becomes true if the destructor is called - used to prevent ambient sounds from registering after the lists were cleared
Index: code/trunk/src/orxonox/sound/SoundStreamer.cc
===================================================================
--- code/trunk/src/orxonox/sound/SoundStreamer.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/SoundStreamer.cc	(revision 11071)
@@ -45,8 +45,8 @@
         vorbisCallbacks.seek_func  = &seekVorbis;
         vorbisCallbacks.tell_func  = &tellVorbis;
-        vorbisCallbacks.close_func = NULL;
+        vorbisCallbacks.close_func = nullptr;
 
         OggVorbis_File vf;
-        int ret = ov_open_callbacks(dataStream.get(), &vf, NULL, 0, vorbisCallbacks);
+        int ret = ov_open_callbacks(dataStream.get(), &vf, nullptr, 0, vorbisCallbacks);
         if (ret < 0)
         {
@@ -68,5 +68,5 @@
         int current_section;
 
-        for(int i = 0; i < 4; i++)
+        for(ALuint& initbuffer : initbuffers)
         {
             long ret = ov_read(&vf, inbuffer, sizeof(inbuffer), 0, 2, 1, &current_section);
@@ -82,5 +82,5 @@
             }
 
-            alBufferData(initbuffers[i], format, &inbuffer, ret, vorbisInfo->rate);
+            alBufferData(initbuffer, format, &inbuffer, ret, vorbisInfo->rate);
         }
         alSourceQueueBuffers(audioSource, 4, initbuffers);
Index: code/trunk/src/orxonox/sound/WorldAmbientSound.cc
===================================================================
--- code/trunk/src/orxonox/sound/WorldAmbientSound.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/WorldAmbientSound.cc	(revision 11071)
@@ -49,13 +49,13 @@
         this->ambientSound_ = new AmbientSound();
         this->registerVariables();
-        soundList_.push_back("Earth.ogg");
-        soundList_.push_back("Jupiter.ogg");
-        soundList_.push_back("Mars.ogg");
-        soundList_.push_back("allgorythm-lift_up.ogg");
-        soundList_.push_back("allgorythm-resonance_blaster.ogg");
-        soundList_.push_back("AlphaCentauri.ogg");
-        soundList_.push_back("Asteroid_rocks.ogg");
-        soundList_.push_back("Ganymede.ogg");
-        soundList_.push_back("luke_grey_-_hypermode.ogg");
+        soundList_.emplace_back("Earth.ogg");
+        soundList_.emplace_back("Jupiter.ogg");
+        soundList_.emplace_back("Mars.ogg");
+        soundList_.emplace_back("allgorythm-lift_up.ogg");
+        soundList_.emplace_back("allgorythm-resonance_blaster.ogg");
+        soundList_.emplace_back("AlphaCentauri.ogg");
+        soundList_.emplace_back("Asteroid_rocks.ogg");
+        soundList_.emplace_back("Ganymede.ogg");
+        soundList_.emplace_back("luke_grey_-_hypermode.ogg");
 
     }
@@ -114,8 +114,7 @@
 
         //HACK: Assuption - there is only one WorldAmbientSound in a level and only one level is used.
-        for (ObjectList<WorldAmbientSound>::iterator it = ObjectList<WorldAmbientSound>::begin();
-             it != ObjectList<WorldAmbientSound>::end(); ++it)
+        for (WorldAmbientSound* sound : ObjectList<WorldAmbientSound>())
         {
-            while(it->ambientSound_->setAmbientSource(WorldAmbientSound::soundList_[WorldAmbientSound::soundNumber_]) == false){
+            while(sound->ambientSound_->setAmbientSource(WorldAmbientSound::soundList_[WorldAmbientSound::soundNumber_]) == false){
                 WorldAmbientSound::soundNumber_ = (WorldAmbientSound::soundNumber_ + 1) % WorldAmbientSound::soundList_.size();
             }
Index: code/trunk/src/orxonox/sound/WorldAmbientSound.h
===================================================================
--- code/trunk/src/orxonox/sound/WorldAmbientSound.h	(revision 11056)
+++ code/trunk/src/orxonox/sound/WorldAmbientSound.h	(revision 11071)
@@ -50,8 +50,8 @@
             virtual ~WorldAmbientSound();
 
-            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
 
-            virtual void changedActivity();
+            virtual void changedActivity() override;
 
             void play();
Index: code/trunk/src/orxonox/sound/WorldSound.cc
===================================================================
--- code/trunk/src/orxonox/sound/WorldSound.cc	(revision 11056)
+++ code/trunk/src/orxonox/sound/WorldSound.cc	(revision 11071)
@@ -58,5 +58,5 @@
         registerVariable(bLooping_, ObjectDirection::ToClient, new NetworkCallback<WorldSound>(this, &WorldSound::loopingChanged));
         registerVariable(pitch_,    ObjectDirection::ToClient, new NetworkCallback<WorldSound>(this, &WorldSound::pitchChanged));
-        registerVariable((uint8_t&)(BaseSound::state_), ObjectDirection::ToClient, new NetworkCallback<WorldSound>(this, &WorldSound::stateChanged));
+        registerVariable(BaseSound::state_, ObjectDirection::ToClient, new NetworkCallback<WorldSound>(this, &WorldSound::stateChanged));
     }
 
Index: code/trunk/src/orxonox/sound/WorldSound.h
===================================================================
--- code/trunk/src/orxonox/sound/WorldSound.h	(revision 11056)
+++ code/trunk/src/orxonox/sound/WorldSound.h	(revision 11071)
@@ -47,9 +47,9 @@
         WorldSound(Context* context);
 
-        void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-        void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
-        void changedActivity();
+        virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
+        virtual void changedActivity() override;
 
-        void tick(float dt);
+        virtual void tick(float dt) override;
 
     protected:
@@ -58,6 +58,6 @@
     private:
         void registerVariables();
-        void initialiseSource();
-        float getRealVolume();
+        virtual void initialiseSource() override;
+        virtual float getRealVolume() override;
     };
 }
Index: code/trunk/src/orxonox/weaponsystem/DefaultWeaponmodeLink.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/DefaultWeaponmodeLink.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/DefaultWeaponmodeLink.h	(revision 11071)
@@ -42,5 +42,5 @@
             virtual ~DefaultWeaponmodeLink();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void setFiremode(const unsigned int firemode)
Index: code/trunk/src/orxonox/weaponsystem/Munition.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/Munition.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/Munition.cc	(revision 11071)
@@ -52,11 +52,11 @@
         this->reloadTime_ = 0.5f;
 
-        this->lastFilledWeaponMode_ = NULL;
+        this->lastFilledWeaponMode_ = nullptr;
     }
 
     Munition::~Munition()
     {
-        for (std::map<WeaponMode*, Magazine*>::iterator it = this->assignedMagazines_.begin(); it != this->assignedMagazines_.end(); ++it)
-            delete it->second;
+        for (const auto& mapEntry : this->assignedMagazines_)
+            delete mapEntry.second;
     }
 
@@ -76,5 +76,5 @@
             // For separated magazines we definitively need a given user
             if (!user)
-                return 0;
+                return nullptr;
 
             // Use the map to get the magazine assigned to the given user
@@ -90,5 +90,5 @@
         }
 
-        return 0;
+        return nullptr;
     }
 
@@ -200,5 +200,5 @@
                     magazine->munition_ = 0;
 
-                    if (this->reload(NULL))
+                    if (this->reload(nullptr))
                         // Successfully reloaded, continue recursively
                         return this->takeMunition(amount, 0);
@@ -262,5 +262,5 @@
         if (deployment_ != MunitionDeployment::Separate)
         {
-            user = NULL;
+            user = nullptr;
         }
 
@@ -271,5 +271,5 @@
             if (it->first == lastFilledWeaponMode_)
             {
-                lastFilledWeaponMode_ = NULL;
+                lastFilledWeaponMode_ = nullptr;
             }            
             delete it->second;
@@ -299,6 +299,6 @@
         {
             // Return true if any of the current magazines is not full (loading counts as full although it returns 0 munition)
-            for (std::map<WeaponMode*, Magazine*>::const_iterator it = this->assignedMagazines_.begin(); it != this->assignedMagazines_.end(); ++it)
-                if (it->second->munition_ < this->maxMunitionPerMagazine_ && it->second->bLoaded_)
+            for (const auto& mapEntry : this->assignedMagazines_)
+                if (mapEntry.second->munition_ < this->maxMunitionPerMagazine_ && mapEntry.second->bLoaded_)
                     return true;
         }
@@ -315,5 +315,5 @@
         {
             // Stacking munition means, if a magazine gets full, the munition adds to a new magazine
-            Magazine* magazine = this->getMagazine(NULL);
+            Magazine* magazine = this->getMagazine(nullptr);
             if (magazine)
             {
@@ -345,7 +345,7 @@
             std::map<WeaponMode*, Magazine*>::iterator it;
 
-            // If the pointer to the weapon mode whose magazine got munition added to is NULL, then set the iterator to the beginning of the map
+            // If the pointer to the weapon mode whose magazine got munition added to is nullptr, then set the iterator to the beginning of the map
             // Otherwise set it to the next weapon mode
-            if (lastFilledWeaponMode_ == NULL)
+            if (lastFilledWeaponMode_ == nullptr)
             {
                 it = this->assignedMagazines_.begin();
@@ -441,9 +441,9 @@
         for (unsigned int i = 0; i < addedMagazines; ++i)
         {
-            for (std::map<WeaponMode*, Magazine*>::iterator it = this->assignedMagazines_.begin(); it != this->assignedMagazines_.end(); ++it)
-            {
-                if (needReload(it->first))
-                {
-                    reload(it->first);
+            for (const auto& mapEntry : this->assignedMagazines_)
+            {
+                if (needReload(mapEntry.first))
+                {
+                    reload(mapEntry.first);
                     break;
                 }
@@ -515,5 +515,5 @@
         // If we don't use separate magazines, set user to 0
         if (deployment_ != MunitionDeployment::Separate)
-            user = NULL;
+            user = nullptr;
 
         // Remove the current magazine for the given user
@@ -523,5 +523,5 @@
             if (it->first == lastFilledWeaponMode_)
             {
-                lastFilledWeaponMode_ = NULL;
+                lastFilledWeaponMode_ = nullptr;
             }
             delete it->second;
Index: code/trunk/src/orxonox/weaponsystem/Munition.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/Munition.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/Munition.h	(revision 11071)
@@ -39,13 +39,10 @@
 namespace orxonox
 {
-    namespace MunitionDeployment
+    enum class MunitionDeployment
     {
-        enum Value
-        {
-            Separate, // Every comsuming weapon mode has its own magazine. It is possible that one weapon mode is out of ammo while another still has some.
-            Share, // All comsuming weapon modes take their munition from the same magazine. If this magazine is empty a new one is loaded.
-            Stack // There is only one magazine where all the munition is stored. Use this deployment mode for heavy weapons loke rockets, bombs, ...
-        };
-    }
+        Separate, // Every comsuming weapon mode has its own magazine. It is possible that one weapon mode is out of ammo while another still has some.
+        Share, // All comsuming weapon modes take their munition from the same magazine. If this magazine is empty a new one is loaded.
+        Stack // There is only one magazine where all the munition is stored. Use this deployment mode for heavy weapons loke rockets, bombs, ...
+    };
 
     class _OrxonoxExport Munition : public BaseObject
@@ -69,5 +66,5 @@
             virtual ~Munition();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             unsigned int getNumMunition(WeaponMode* user) const;
@@ -80,5 +77,5 @@
             inline unsigned int getMaxMunitionPerMagazine() const
                 { return this->maxMunitionPerMagazine_; }
-            inline MunitionDeployment::Value getMunitionDeployment() const
+            inline MunitionDeployment getMunitionDeployment() const
                 { return deployment_; }
 
@@ -115,5 +112,5 @@
             std::map<WeaponMode*, Magazine*> assignedMagazines_; // Maps weapon modes to magazines that are currently used.
 
-            MunitionDeployment::Value deployment_; // Defines the behaviour how munition and magazines are distributed to the consuming weapon modes.
+            MunitionDeployment deployment_; // Defines the behaviour how munition and magazines are distributed to the consuming weapon modes.
 
             bool bAllowMunitionRefilling_;
Index: code/trunk/src/orxonox/weaponsystem/ReplenishingMunition.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/ReplenishingMunition.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/ReplenishingMunition.h	(revision 11071)
@@ -52,9 +52,9 @@
         public:
             ReplenishingMunition(Context* context);
-            virtual ~ReplenishingMunition() {}
+            virtual ~ReplenishingMunition() = default;
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
             
-            virtual float getProgress();
+            float getProgress();
             inline unsigned int getReplenishAmount() const
                 { return replenishAmount_; }
Index: code/trunk/src/orxonox/weaponsystem/Weapon.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/Weapon.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/Weapon.cc	(revision 11071)
@@ -45,6 +45,6 @@
         RegisterObject(Weapon);
 
-        this->weaponPack_ = 0;
-        this->weaponSlot_ = 0;
+        this->weaponPack_ = nullptr;
+        this->weaponSlot_ = nullptr;
         this->bReloading_ = false;
         this->reloadingWeaponmode_ = WeaponSystem::WEAPON_MODE_UNASSIGNED;
@@ -61,6 +61,6 @@
                 this->weaponPack_->removeWeapon(this);
 
-            for (std::multimap<unsigned int, WeaponMode*>::iterator it = this->weaponmodes_.begin(); it != this->weaponmodes_.end(); ++it)
-                it->second->destroy();
+            for (const auto& mapEntry : this->weaponmodes_)
+                mapEntry.second->destroy();
         }
     }
@@ -85,12 +85,12 @@
     {
         unsigned int i = 0;
-        for (std::multimap<unsigned int, WeaponMode*>::const_iterator it = this->weaponmodes_.begin(); it != this->weaponmodes_.end(); ++it)
+        for (const auto& mapEntry : this->weaponmodes_)
         {
             if (i == index)
-                return it->second;
+                return mapEntry.second;
 
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -140,6 +140,6 @@
     void Weapon::reload()
     {
-        for (std::multimap<unsigned int, WeaponMode*>::iterator it = this->weaponmodes_.begin(); it != this->weaponmodes_.end(); ++it)
-            it->second->reload();
+        for (const auto& mapEntry : this->weaponmodes_)
+            mapEntry.second->reload();
     }
 
@@ -152,12 +152,12 @@
     void Weapon::notifyWeaponModes()
     {
-        for (std::multimap<unsigned int, WeaponMode*>::iterator it = this->weaponmodes_.begin(); it != this->weaponmodes_.end(); ++it)
-            it->second->setWeapon(this);
+        for (const auto& mapEntry : this->weaponmodes_)
+            mapEntry.second->setWeapon(this);
     }
 
     void Weapon::updateMunition()
     {
-        for (std::multimap<unsigned int, WeaponMode*>::iterator it = this->weaponmodes_.begin(); it != this->weaponmodes_.end(); ++it)
-            it->second->updateMunition();
+        for (const auto& mapEnty : this->weaponmodes_)
+            mapEnty.second->updateMunition();
     }
 }
Index: code/trunk/src/orxonox/weaponsystem/Weapon.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/Weapon.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/Weapon.h	(revision 11071)
@@ -50,5 +50,5 @@
             virtual ~Weapon();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void fire(unsigned int mode);
@@ -57,6 +57,6 @@
             void addWeaponmode(WeaponMode* weaponmode);
             WeaponMode* getWeaponmode(unsigned int index) const;
-            inline std::multimap<unsigned int, WeaponMode*>* getAllWeaponmodes()
-                { return &weaponmodes_; }
+            inline const std::multimap<unsigned int, WeaponMode*>& getAllWeaponmodes() const
+                { return weaponmodes_; }
             inline int getNumWeaponModes() const
                 { return weaponmodes_.size(); }
Index: code/trunk/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponMode.cc	(revision 11071)
@@ -51,8 +51,8 @@
         RegisterObject(WeaponMode);
 
-        this->weapon_ = 0;
+        this->weapon_ = nullptr;
         this->mode_ = WeaponSystem::WEAPON_MODE_UNASSIGNED;
 
-        this->munition_ = 0;
+        this->munition_ = nullptr;
         this->initialMunition_ = 0;
         this->initialMagazines_ = 0;
@@ -244,5 +244,5 @@
         else
         {
-            this->munition_ = NULL;
+            this->munition_ = nullptr;
         }
     }
Index: code/trunk/src/orxonox/weaponsystem/WeaponMode.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponMode.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponMode.h	(revision 11071)
@@ -52,5 +52,5 @@
             virtual ~WeaponMode();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             bool fire(float* reloadTime);
Index: code/trunk/src/orxonox/weaponsystem/WeaponPack.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponPack.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponPack.cc	(revision 11071)
@@ -44,5 +44,5 @@
         RegisterObject(WeaponPack);
 
-        this->weaponSystem_ = 0;
+        this->weaponSystem_ = nullptr;
     }
 
@@ -76,6 +76,6 @@
     void WeaponPack::fire(unsigned int weaponmode)
     {
-        for (std::vector<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
-            (*it)->fire(weaponmode);
+        for (Weapon* weapon : this->weapons_)
+            weapon->fire(weaponmode);
     }
 
@@ -86,6 +86,6 @@
     void WeaponPack::reload()
     {
-        for (std::vector<Weapon *>::iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
-            (*it)->reload();
+        for (Weapon* weapon : this->weapons_)
+            weapon->reload();
     }
 
@@ -107,5 +107,5 @@
         assert(it != this->weapons_.end());
         this->weapons_.erase(it);
-        weapon->setWeaponPack(0);
+        weapon->setWeaponPack(nullptr);
     }
 
@@ -114,18 +114,13 @@
         unsigned int i = 0;
 
-        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
+        for (Weapon* weapon : this->weapons_)
         {
             if (i == index)
-                return (*it);
+                return weapon;
             ++i;
         }
 
-        return 0;
+        return nullptr;
     }
-
-    std::vector<Weapon*>* WeaponPack::getAllWeapons()
-    {
-        return &weapons_;        
-    }    
 
     void WeaponPack::addDefaultWeaponmodeLink(DefaultWeaponmodeLink* link)
@@ -137,19 +132,19 @@
     {
         unsigned int i = 0;
-        for (std::set<DefaultWeaponmodeLink*>::const_iterator it = this->links_.begin(); it != this->links_.end(); ++it)
+        for (DefaultWeaponmodeLink* link : this->links_)
         {
             if (i == index)
-                return (*it);
+                return link;
 
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
     unsigned int WeaponPack::getDesiredWeaponmode(unsigned int firemode) const
     {
-        for (std::set<DefaultWeaponmodeLink*>::const_iterator it = this->links_.begin(); it != this->links_.end(); ++it)
-            if ((*it)->getFiremode() == firemode)
-                return (*it)->getWeaponmode();
+        for (DefaultWeaponmodeLink* link : this->links_)
+            if (link->getFiremode() == firemode)
+                return link->getWeaponmode();
 
         return WeaponSystem::WEAPON_MODE_UNASSIGNED;
@@ -158,12 +153,12 @@
     void WeaponPack::notifyWeapons()
     {
-        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
-            (*it)->setWeaponPack(this);
+        for (Weapon* weapon : this->weapons_)
+            weapon->setWeaponPack(this);
     }
 
     void WeaponPack::updateMunition()
     {
-        for (std::vector<Weapon *>::const_iterator it = this->weapons_.begin(); it != this->weapons_.end(); ++it)
-            (*it)->updateMunition();
+        for (Weapon* weapon : this->weapons_)
+            weapon->updateMunition();
     }
 }
Index: code/trunk/src/orxonox/weaponsystem/WeaponPack.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponPack.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponPack.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~WeaponPack();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void fire(unsigned int weaponmode);
@@ -52,5 +52,6 @@
             void removeWeapon(Weapon * weapon);
             Weapon * getWeapon(unsigned int index) const;
-            std::vector<Weapon*>* getAllWeapons();
+            inline const std::vector<Weapon*>& getAllWeapons() const
+                { return weapons_; }
 
             inline size_t getNumWeapons() const
Index: code/trunk/src/orxonox/weaponsystem/WeaponSet.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponSet.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponSet.cc	(revision 11071)
@@ -43,5 +43,5 @@
         RegisterObject(WeaponSet);
 
-        this->weaponSystem_ = 0;
+        this->weaponSystem_ = nullptr;
         this->desiredFiremode_ = WeaponSystem::FIRE_MODE_UNASSIGNED;
     }
@@ -63,7 +63,7 @@
     {
         // Fire all WeaponPacks with their defined weaponmode
-        for (std::map<WeaponPack*, unsigned int>::iterator it = this->weaponpacks_.begin(); it != this->weaponpacks_.end(); ++it)
-            if (it->second != WeaponSystem::WEAPON_MODE_UNASSIGNED)
-                it->first->fire(it->second);
+        for (const auto& mapEntry : this->weaponpacks_)
+            if (mapEntry.second != WeaponSystem::WEAPON_MODE_UNASSIGNED)
+                mapEntry.first->fire(mapEntry.second);
     }
 
@@ -71,6 +71,6 @@
     {
         // Reload all WeaponPacks with their defined weaponmode
-        for (std::map<WeaponPack*, unsigned int>::iterator it = this->weaponpacks_.begin(); it != this->weaponpacks_.end(); ++it)
-            it->first->reload();
+        for (const auto& mapEntry : this->weaponpacks_)
+            mapEntry.first->reload();
     }
 
Index: code/trunk/src/orxonox/weaponsystem/WeaponSet.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponSet.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponSet.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~WeaponSet();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void fire();
Index: code/trunk/src/orxonox/weaponsystem/WeaponSlot.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponSlot.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponSlot.cc	(revision 11071)
@@ -43,6 +43,6 @@
         RegisterObject(WeaponSlot);
 
-        this->weaponSystem_ = 0;
-        this->weapon_ = 0;
+        this->weaponSystem_ = nullptr;
+        this->weapon_ = nullptr;
 
         this->setSyncMode(ObjectDirection::None);
@@ -88,6 +88,6 @@
         if (this->weapon_)
         {
-            this->weapon_->setWeaponSlot(0);
-            this->weapon_ = 0;
+            this->weapon_->setWeaponSlot(nullptr);
+            this->weapon_ = nullptr;
         }
     }
Index: code/trunk/src/orxonox/weaponsystem/WeaponSlot.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponSlot.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponSlot.h	(revision 11071)
@@ -62,5 +62,5 @@
             virtual ~WeaponSlot();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void attachWeapon(Weapon * weapon);
@@ -74,5 +74,5 @@
             */
             inline bool isOccupied() const
-                { return (this->weapon_ != 0); }
+                { return (this->weapon_ != nullptr); }
 
             inline void setWeaponSystem(WeaponSystem * weaponSystem)
Index: code/trunk/src/orxonox/weaponsystem/WeaponSystem.cc
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponSystem.cc	(revision 11071)
@@ -52,5 +52,5 @@
         RegisterObject(WeaponSystem);
 
-        this->pawn_ = 0;
+        this->pawn_ = nullptr;
     }
 
@@ -60,5 +60,5 @@
         {
             if (this->pawn_)
-                this->pawn_->setWeaponSystem(0);
+                this->pawn_->setWeaponSystem(nullptr);
 
             while (!this->weaponSets_.empty())
@@ -106,11 +106,11 @@
     {
         unsigned int i = 0;
-        for (std::vector<WeaponSlot*>::const_iterator it = this->weaponSlots_.begin(); it != this->weaponSlots_.end(); ++it)
+        for (WeaponSlot* weaponSlot : this->weaponSlots_)
         {
             ++i;
             if (i > index)
-                return (*it);
-        }
-        return 0;
+                return weaponSlot;
+        }
+        return nullptr;
     }
 
@@ -153,11 +153,11 @@
     {
         unsigned int i = 0;
-        for (std::map<unsigned int, WeaponSet*>::const_iterator it = this->weaponSets_.begin(); it != this->weaponSets_.end(); ++it)
+        for (const auto& mapEntry : this->weaponSets_)
         {
             ++i;
             if (i > index)
-                return it->second;
-        }
-        return 0;
+                return mapEntry.second;
+        }
+        return nullptr;
     }
 
@@ -168,7 +168,7 @@
 
         unsigned int freeSlots = 0;
-        for (std::vector<WeaponSlot*>::iterator it = this->weaponSlots_.begin(); it != this->weaponSlots_.end(); ++it)
-        {
-            if (!(*it)->isOccupied())
+        for (WeaponSlot* weaponSlot : this->weaponSlots_)
+        {
+            if (!weaponSlot->isOccupied())
                 ++freeSlots;
         }
@@ -184,10 +184,10 @@
         // Attach all weapons to the first free slots (and to the Pawn)
         unsigned int i = 0;
-        for (std::vector<WeaponSlot*>::iterator it = this->weaponSlots_.begin(); it != this->weaponSlots_.end(); ++it)
-        {
-            if (!(*it)->isOccupied() && i < wPack->getNumWeapons())
+        for (WeaponSlot* weaponSlot : this->weaponSlots_)
+        {
+            if (!weaponSlot->isOccupied() && i < wPack->getNumWeapons())
             {
                 Weapon* weapon = wPack->getWeapon(i);
-                (*it)->attachWeapon(weapon);
+                weaponSlot->attachWeapon(weapon);
                 this->getPawn()->attach(weapon);
                 ++i;
@@ -196,9 +196,9 @@
 
         // Assign the desired weaponmode to the firemodes
-        for (std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.begin(); it != this->weaponSets_.end(); ++it)
-        {
-            unsigned int weaponmode = wPack->getDesiredWeaponmode(it->first);
+        for (const auto& mapEntry : this->weaponSets_)
+        {
+            unsigned int weaponmode = wPack->getDesiredWeaponmode(mapEntry.first);
             if (weaponmode != WeaponSystem::WEAPON_MODE_UNASSIGNED)
-                it->second->setWeaponmodeLink(wPack, weaponmode);
+                mapEntry.second->setWeaponmodeLink(wPack, weaponmode);
         }
 
@@ -213,5 +213,5 @@
         // Remove all weapons from their WeaponSlot
         unsigned int i = 0;
-        Weapon* weapon = 0;
+        Weapon* weapon = nullptr;
         while ((weapon = wPack->getWeapon(i++)))
             if (weapon->getWeaponSlot())
@@ -219,6 +219,6 @@
 
         // Remove all added links from the WeaponSets
-        for (std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.begin(); it != this->weaponSets_.end(); ++it)
-            it->second->removeWeaponmodeLink(wPack);
+        for (const auto& mapEntry : this->weaponSets_)
+            mapEntry.second->removeWeaponmodeLink(wPack);
 
         // Remove the WeaponPack from the WeaponSystem
@@ -231,17 +231,12 @@
     {
         unsigned int i = 0;
-        for (std::vector<WeaponPack*>::const_iterator it = this->weaponPacks_.begin(); it != this->weaponPacks_.end(); ++it)
+        for (WeaponPack* weaponPack : this->weaponPacks_)
         {
             ++i;
             if (i > index)
-                return (*it);
-        }
-        return 0;
-    }
-
-    std::vector<WeaponPack *> * WeaponSystem::getAllWeaponPacks()
-    {
-        return &weaponPacks_;
-    }    
+                return weaponPack;
+        }
+        return nullptr;
+    }
 
     bool WeaponSystem::swapWeaponSlots(WeaponSlot * wSlot1, WeaponSlot * wSlot2)
@@ -273,7 +268,7 @@
         // Check if the WeaponSet belongs to this WeaponSystem
         bool foundWeaponSet = false;
-        for (std::map<unsigned int, WeaponSet *>::iterator it2 = this->weaponSets_.begin(); it2 != this->weaponSets_.end(); ++it2)
-        {
-            if (it2->second == wSet)
+        for (const auto& mapEntry : this->weaponSets_)
+        {
+            if (mapEntry.second == wSet)
             {
                 foundWeaponSet = true;
@@ -301,6 +296,6 @@
     void WeaponSystem::reload()
     {
-        for (std::map<unsigned int, WeaponSet *>::iterator it = this->weaponSets_.begin(); it != this->weaponSets_.end(); ++it)
-            it->second->reload();
+        for (const auto& mapEntry : this->weaponSets_)
+            mapEntry.second->reload();
     }
 
@@ -308,5 +303,5 @@
     {
         if (!identifier || !identifier->getIdentifier())
-            return 0;
+            return nullptr;
 
         std::map<Identifier *, Munition *>::iterator it = this->munitions_.find(identifier->getIdentifier());
@@ -317,5 +312,5 @@
         else
         {
-            return NULL;
+            return nullptr;
         }
     }
@@ -323,5 +318,5 @@
     void WeaponSystem::addMunition(Munition* munition)
     {
-        if (munition == NULL)
+        if (munition == nullptr)
         {
             return;
@@ -337,5 +332,5 @@
         else
         {
-            orxout(internal_warning) << "Adding munition failed. identifier == NULL " << endl;
+            orxout(internal_warning) << "Adding munition failed. identifier == nullptr " << endl;
         }
     }
@@ -343,7 +338,7 @@
     void WeaponSystem::updateMunition()
     {
-        for (std::vector<WeaponPack*>::iterator it = this->weaponPacks_.begin(); it != this->weaponPacks_.end(); ++it)
-        {
-            (*it)->updateMunition();
+        for (WeaponPack* weaponPack : this->weaponPacks_)
+        {
+            weaponPack->updateMunition();
         }
     }
Index: code/trunk/src/orxonox/weaponsystem/WeaponSystem.h
===================================================================
--- code/trunk/src/orxonox/weaponsystem/WeaponSystem.h	(revision 11056)
+++ code/trunk/src/orxonox/weaponsystem/WeaponSystem.h	(revision 11071)
@@ -67,5 +67,6 @@
             void removeWeaponPack(WeaponPack * wPack);
             WeaponPack * getWeaponPack(unsigned int index) const;
-            std::vector<WeaponPack *> * getAllWeaponPacks();
+            inline const std::vector<WeaponPack *>& getAllWeaponPacks() const
+                { return weaponPacks_; }
 
             // configure slots and firemodes
Index: code/trunk/src/orxonox/worldentities/Actionpoint.h
===================================================================
--- code/trunk/src/orxonox/worldentities/Actionpoint.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/Actionpoint.h	(revision 11071)
@@ -92,7 +92,7 @@
         public:
             Actionpoint(Context* context);
-            virtual ~Actionpoint() {}
+            virtual ~Actionpoint() = default;
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             /** @brief Decides what AI will do. @param val action to execute */
Index: code/trunk/src/orxonox/worldentities/CameraPosition.h
===================================================================
--- code/trunk/src/orxonox/worldentities/CameraPosition.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/CameraPosition.h	(revision 11071)
@@ -41,5 +41,5 @@
             virtual ~CameraPosition();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void setDrag(bool bDrag)
Index: code/trunk/src/orxonox/worldentities/ControllableEntity.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/ControllableEntity.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/ControllableEntity.cc	(revision 11071)
@@ -61,15 +61,15 @@
         this->server_overwrite_ = 0;
         this->client_overwrite_ = 0;
-        this->player_ = 0;
-        this->formerPlayer_ = NULL;
+        this->player_ = nullptr;
+        this->formerPlayer_ = nullptr;
         this->playerID_ = OBJECTID_UNKNOWN;
-        this->hud_ = 0;
-        this->camera_ = 0;
-        this->xmlcontroller_ = 0;
-        //this->controller_ = 0;
-        this->reverseCamera_ = 0;
+        this->hud_ = nullptr;
+        this->camera_ = nullptr;
+        this->xmlcontroller_ = nullptr;
+        //this->controller_ = nullptr;
+        this->reverseCamera_ = nullptr;
         this->bDestroyWhenPlayerLeft_ = false;
         this->cameraPositionRootNode_ = this->node_->createChildSceneNode();
-        this->currentCameraPosition_ = 0;
+        this->currentCameraPosition_ = nullptr;
         this->bMouseLook_ = false;
         this->mouseLookSpeed_ = 200;
@@ -108,6 +108,6 @@
                 this->camera_->destroy();
 
-            for (std::list<StrongPtr<CameraPosition> >::const_iterator it = this->cameraPositions_.begin(); it != this->cameraPositions_.end(); ++it)
-                (*it)->destroy();
+            for (CameraPosition* cameraPosition : this->cameraPositions_)
+                cameraPosition->destroy();
 
             if (this->getScene()->getSceneManager())
@@ -165,11 +165,11 @@
     {
         unsigned int i = 0;
-        for (std::list<StrongPtr<CameraPosition> >::const_iterator it = this->cameraPositions_.begin(); it != this->cameraPositions_.end(); ++it)
+        for (CameraPosition* cameraPosition : this->cameraPositions_)
         {
             if (i == index)
-                return (*it);
+                return cameraPosition;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -180,7 +180,7 @@
 
         unsigned int counter = 0;
-        for (std::list<StrongPtr<CameraPosition> >::const_iterator it = this->cameraPositions_.begin(); it != this->cameraPositions_.end(); ++it)
-        {
-            if ((*it) == this->currentCameraPosition_)
+        for (CameraPosition* cameraPosition : this->cameraPositions_)
+        {
+            if (cameraPosition == this->currentCameraPosition_)
                 break;
             counter++;
@@ -194,5 +194,5 @@
     bool ControllableEntity::setCameraPosition(unsigned int index)
     {
-        if(this->camera_ != NULL && this->cameraPositions_.size() > 0)
+        if(this->camera_ != nullptr && this->cameraPositions_.size() > 0)
         {
             if(index >= this->cameraPositions_.size())
@@ -219,5 +219,5 @@
             else if (this->cameraPositions_.size() > 0)
             {
-                for (std::list<StrongPtr<CameraPosition> >::const_iterator it = this->cameraPositions_.begin(); it != this->cameraPositions_.end(); ++it)
+                for (std::list<StrongPtr<CameraPosition>>::const_iterator it = this->cameraPositions_.begin(); it != this->cameraPositions_.end(); ++it)
                 {
                     if ((*it) == this->camera_->getParent())
@@ -241,5 +241,5 @@
             {
                 this->camera_->attachToNode(this->cameraPositionRootNode_);
-                this->currentCameraPosition_ = 0;
+                this->currentCameraPosition_ = nullptr;
             }
 
@@ -321,5 +321,5 @@
         if ( !GameMode::isMaster() )
         {
-            if ( target != 0 )
+            if ( target != nullptr )
             {
                 callMemberNetworkFunction(&ControllableEntity::setTargetInternal, this->getObjectID(), 0, target->getObjectID() );
@@ -350,5 +350,5 @@
         this->bHasLocalController_ = player->isLocalPlayer();
         this->bHasHumanController_ = player->isHumanPlayer();
-        if(controller_ != NULL)
+        if(controller_ != nullptr)
             this->team_ = controller_->getTeam(); // forward controller team number
 
@@ -372,5 +372,5 @@
             this->stopLocalHumanControl();
 
-        this->player_ = 0;
+        this->player_ = nullptr;
         this->playerID_ = OBJECTID_UNKNOWN;
         this->bHasLocalController_ = false;
@@ -411,5 +411,5 @@
             {
                 this->camera_->attachToNode(this->cameraPositionRootNode_);
-                this->currentCameraPosition_ = 0;
+                this->currentCameraPosition_ = nullptr;
             }
         }
@@ -434,8 +434,8 @@
     void ControllableEntity::destroyHud(void)
     {
-        if (this->hud_ != NULL)
+        if (this->hud_ != nullptr)
         {
             this->hud_->destroy();
-            this->hud_ = NULL;
+            this->hud_ = nullptr;
         }
     }
@@ -447,5 +447,5 @@
             this->camera_->detachFromParent();
             this->camera_->destroy();
-            this->camera_ = 0;
+            this->camera_ = nullptr;
         }
 
@@ -453,5 +453,5 @@
         {
             this->hud_->destroy();
-            this->hud_ = 0;
+            this->hud_ = nullptr;
         }
     }
@@ -477,7 +477,7 @@
         if (parent)
         {
-            for (std::list<StrongPtr<CameraPosition> >::iterator it = this->cameraPositions_.begin(); it != this->cameraPositions_.end(); ++it)
-                if ((*it)->getIsAbsolute())
-                    parent->attach((*it));
+            for (CameraPosition* cameraPosition : this->cameraPositions_)
+                if (cameraPosition->getIsAbsolute())
+                    parent->attach(cameraPosition);
         }
     }
Index: code/trunk/src/orxonox/worldentities/ControllableEntity.h
===================================================================
--- code/trunk/src/orxonox/worldentities/ControllableEntity.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/ControllableEntity.h	(revision 11071)
@@ -54,6 +54,6 @@
             virtual ~ControllableEntity();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
             void setConfigValues();
 
@@ -121,5 +121,5 @@
             void addCameraPosition(CameraPosition* position);
             CameraPosition* getCameraPosition(unsigned int index) const;
-            inline const std::list<StrongPtr<CameraPosition> >& getCameraPositions() const
+            inline const std::list<StrongPtr<CameraPosition>>& getCameraPositions() const
                 { return this->cameraPositions_; }
             unsigned int getCurrentCameraIndex() const;
@@ -141,8 +141,8 @@
             using MobileEntity::setAngularVelocity;
 
-            void setPosition(const Vector3& position);
-            void setOrientation(const Quaternion& orientation);
-            void setVelocity(const Vector3& velocity);
-            void setAngularVelocity(const Vector3& velocity);
+            virtual void setPosition(const Vector3& position) override;
+            virtual void setOrientation(const Quaternion& orientation) override;
+            virtual void setVelocity(const Vector3& velocity) override;
+            virtual void setAngularVelocity(const Vector3& velocity) override;
 
             inline bool hasLocalController() const
@@ -177,5 +177,5 @@
 
         protected:
-            virtual void preDestroy();
+            virtual void preDestroy() override;
 
             virtual void setPlayer(PlayerInfo* player); // don't call this directly, use friend class PlayerInfo instead
@@ -184,5 +184,5 @@
             virtual void startLocalHumanControl();
             virtual void stopLocalHumanControl();
-            virtual void parentChanged();
+            virtual void parentChanged() override;
 
             inline void setHudTemplate(const std::string& name)
@@ -214,5 +214,5 @@
 
             // Bullet btMotionState related
-            void setWorldTransform(const btTransform& worldTrans);
+            virtual void setWorldTransform(const btTransform& worldTrans) override;
 
             unsigned int server_overwrite_;
@@ -242,5 +242,5 @@
             bool bMouseLook_;
             float mouseLookSpeed_;
-            std::list<StrongPtr<CameraPosition> > cameraPositions_;
+            std::list<StrongPtr<CameraPosition>> cameraPositions_;
             CameraPosition* currentCameraPosition_;
             std::string cameraPositionTemplate_;
Index: code/trunk/src/orxonox/worldentities/Drone.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/Drone.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/Drone.cc	(revision 11071)
@@ -30,4 +30,5 @@
 
 #include "core/XMLPort.h"
+#include "core/CoreIncludes.h"
 #include "BulletDynamics/Dynamics/btRigidBody.h"
 
@@ -43,10 +44,10 @@
         RegisterObject(Drone);
 
-        this->myController_ = 0;
+        this->myController_ = nullptr;
 
         this->localLinearAcceleration_.setValue(0, 0, 0);
         this->localAngularAcceleration_.setValue(0, 0, 0);
         this->setRadarVisibility(false);
-        this->setCollisionType(WorldEntity::Dynamic);
+        this->setCollisionType(WorldEntity::CollisionType::Dynamic);
 
         myController_ = new DroneController(this->getContext()); //!< Creates a new controller and passes our this pointer to it as creator.
Index: code/trunk/src/orxonox/worldentities/Drone.h
===================================================================
--- code/trunk/src/orxonox/worldentities/Drone.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/Drone.h	(revision 11071)
@@ -50,15 +50,15 @@
             virtual ~Drone();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method for creating a Drone through XML.
-            virtual void tick(float dt); //!< Defines which actions the Drone has to take in each tick.
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method for creating a Drone through XML.
+            virtual void tick(float dt) override; //!< Defines which actions the Drone has to take in each tick.
 
 
-            virtual void moveFrontBack(const Vector2& value);
-            virtual void moveRightLeft(const Vector2& value);
-            virtual void moveUpDown(const Vector2& value);
+            virtual void moveFrontBack(const Vector2& value) override;
+            virtual void moveRightLeft(const Vector2& value) override;
+            virtual void moveUpDown(const Vector2& value) override;
 
-            virtual void rotateYaw(const Vector2& value);
-            virtual void rotatePitch(const Vector2& value);
-            virtual void rotateRoll(const Vector2& value);
+            virtual void rotateYaw(const Vector2& value) override;
+            virtual void rotatePitch(const Vector2& value) override;
+            virtual void rotateRoll(const Vector2& value) override;
 
             /**
Index: code/trunk/src/orxonox/worldentities/EffectContainer.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/EffectContainer.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/EffectContainer.cc	(revision 11071)
@@ -44,5 +44,5 @@
     EffectContainer::EffectContainer(Context* context)
         : BaseObject(context)
-        , lua_(NULL)
+        , lua_(nullptr)
     {
         RegisterObject(EffectContainer);
@@ -89,8 +89,8 @@
     {
         unsigned int i = 0;
-        for (std::vector<WorldEntity*>::const_iterator it = this->effects_.begin(); it != this->effects_.end(); ++it)
+        for (WorldEntity* effect : this->effects_)
             if (i == index)
-                return (*it);
-        return NULL;
+                return effect;
+        return nullptr;
     }
 
@@ -103,7 +103,7 @@
             bool result = (bool)lua_toboolean(this->lua_->getInternalLuaState(), -1);
             lua_pop(this->lua_->getInternalLuaState(), 1);
-            for (std::vector<WorldEntity*>::const_iterator it = this->effects_.begin(); it != this->effects_.end(); ++it)
+            for (WorldEntity* effect : this->effects_)
             {
-                (*it)->setMainState(result);
+                effect->setMainState(result);
             }
         }
Index: code/trunk/src/orxonox/worldentities/EffectContainer.h
===================================================================
--- code/trunk/src/orxonox/worldentities/EffectContainer.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/EffectContainer.h	(revision 11071)
@@ -43,5 +43,5 @@
             virtual ~EffectContainer();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void setLuaState(LuaState* state, const std::string& functionName);
@@ -54,8 +54,6 @@
             WorldEntity* getEffect(unsigned int index) const;
 
-            inline std::vector<WorldEntity*>::const_iterator getEffectsBegin()
-                { return this->effects_.begin(); }
-            inline std::vector<WorldEntity*>::const_iterator getEffectsEnd()
-                { return this->effects_.end(); }
+            inline const std::vector<WorldEntity*>& getEffects() const
+                { return this->effects_; }
 
             void updateCondition();
Index: code/trunk/src/orxonox/worldentities/ExplosionChunk.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/ExplosionChunk.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/ExplosionChunk.cc	(revision 11071)
@@ -62,12 +62,12 @@
             {
                 orxout(internal_error) << "Couldn't load particle effect in ExplosionChunk: " << ex.what() << endl;
-                this->fire_ = 0;
-                this->smoke_ = 0;
+                this->fire_ = nullptr;
+                this->smoke_ = nullptr;
             }
         }
         else
         {
-            this->fire_ = 0;
-            this->smoke_ = 0;
+            this->fire_ = nullptr;
+            this->smoke_ = nullptr;
         }
 
Index: code/trunk/src/orxonox/worldentities/ExplosionChunk.h
===================================================================
--- code/trunk/src/orxonox/worldentities/ExplosionChunk.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/ExplosionChunk.h	(revision 11071)
@@ -43,5 +43,5 @@
             virtual ~ExplosionChunk();
 
-            virtual void tick(float dt);
+            virtual void tick(float dt) override;
 
             inline void setLOD(LODParticle::Value level)
Index: code/trunk/src/orxonox/worldentities/ExplosionPart.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/ExplosionPart.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/ExplosionPart.cc	(revision 11071)
@@ -47,6 +47,6 @@
         this->effect2_ = "";
         this->model_= new Model(this->getContext());
-        this->effect1Particle_= NULL;
-        this->effect2Particle_= NULL;
+        this->effect1Particle_= nullptr;
+        this->effect2Particle_= nullptr;
         this->explosionEntity_ = new MovableEntity(this->getContext());
         this->posOffset_ = Vector3::ZERO;
Index: code/trunk/src/orxonox/worldentities/ExplosionPart.h
===================================================================
--- code/trunk/src/orxonox/worldentities/ExplosionPart.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/ExplosionPart.h	(revision 11071)
@@ -51,5 +51,6 @@
             ExplosionPart(Context* context);
             ~ExplosionPart();
-            void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+
             void Explode();
             void stop();
Index: code/trunk/src/orxonox/worldentities/MobileEntity.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/MobileEntity.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/MobileEntity.cc	(revision 11071)
@@ -189,5 +189,5 @@
     bool MobileEntity::isCollisionTypeLegal(WorldEntity::CollisionType type) const
     {
-        if (type == WorldEntity::Static)
+        if (type == WorldEntity::CollisionType::Static)
         {
             orxout(internal_warning) << "Cannot tell a MobileEntity to have static collision type! Ignoring." << endl;
Index: code/trunk/src/orxonox/worldentities/MobileEntity.h
===================================================================
--- code/trunk/src/orxonox/worldentities/MobileEntity.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/MobileEntity.h	(revision 11071)
@@ -57,14 +57,14 @@
             virtual ~MobileEntity();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
-            virtual void setPosition(const Vector3& position);
-            virtual void setOrientation(const Quaternion& orientation);
+            virtual void setPosition(const Vector3& position) override;
+            virtual void setOrientation(const Quaternion& orientation) override;
 
             virtual void setVelocity(const Vector3& velocity);
             inline void setVelocity(float x, float y, float z)
                 { this->setVelocity(Vector3(x, y, z)); }
-            inline const Vector3& getVelocity() const
+            virtual inline const Vector3& getVelocity() const override
                 { return this->linearVelocity_; }
             /**
@@ -110,6 +110,6 @@
         protected:
             // Bullet btMotionState related
-            virtual void setWorldTransform(const btTransform& worldTrans);
-            void getWorldTransform(btTransform& worldTrans) const;
+            virtual void setWorldTransform(const btTransform& worldTrans) override;
+            virtual void getWorldTransform(btTransform& worldTrans) const override;
 
             Vector3 linearAcceleration_;
@@ -119,5 +119,5 @@
 
         private:
-            virtual bool isCollisionTypeLegal(WorldEntity::CollisionType type) const;
+            virtual bool isCollisionTypeLegal(WorldEntity::CollisionType type) const override;
     };
 }
Index: code/trunk/src/orxonox/worldentities/MovableEntity.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/MovableEntity.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/MovableEntity.cc	(revision 11071)
@@ -50,5 +50,5 @@
         this->overwrite_orientation_ = Quaternion::IDENTITY;
 
-        this->continuousResynchroTimer_ = 0;
+        this->continuousResynchroTimer_ = nullptr;
 
         this->setPriority(Priority::Low);
@@ -80,5 +80,5 @@
             {
                 float damage = this->collisionDamage_ * (victim->getVelocity() - this->getVelocity()).length();
-                victim->hit(0, contactPoint, ownCollisionShape, damage);
+                victim->hit(nullptr, contactPoint, ownCollisionShape, damage);
             }
         }
Index: code/trunk/src/orxonox/worldentities/MovableEntity.h
===================================================================
--- code/trunk/src/orxonox/worldentities/MovableEntity.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/MovableEntity.h	(revision 11071)
@@ -46,13 +46,13 @@
             virtual ~MovableEntity();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* cs, btManifoldPoint& contactPoint) override;
 
             using WorldEntity::setPosition;
             using WorldEntity::setOrientation;
 
-            inline void setPosition(const Vector3& position)
+            virtual inline void setPosition(const Vector3& position) override
                 { MobileEntity::setPosition(position); this->overwrite_position_ = this->getPosition(); }
-            inline void setOrientation(const Quaternion& orientation)
+            virtual inline void setOrientation(const Quaternion& orientation) override
                 { MobileEntity::setOrientation(orientation); this->overwrite_orientation_ = this->getOrientation(); }
 
@@ -79,6 +79,6 @@
         private:
             void registerVariables();
-            void clientConnected(unsigned int clientID);
-            void clientDisconnected(unsigned int clientID);
+            virtual void clientConnected(unsigned int clientID) override;
+            virtual void clientDisconnected(unsigned int clientID) override;
             void resynchronize();
 
Index: code/trunk/src/orxonox/worldentities/SpawnPoint.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/SpawnPoint.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/SpawnPoint.cc	(revision 11071)
@@ -43,5 +43,5 @@
         RegisterObject(SpawnPoint);
 
-        this->template_ = 0;
+        this->template_ = nullptr;
 
         if (this->getGametype())
Index: code/trunk/src/orxonox/worldentities/SpawnPoint.h
===================================================================
--- code/trunk/src/orxonox/worldentities/SpawnPoint.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/SpawnPoint.h	(revision 11071)
@@ -44,5 +44,5 @@
             virtual ~SpawnPoint() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline void setSpawnClass(Identifier* identifier)
Index: code/trunk/src/orxonox/worldentities/StaticEntity.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/StaticEntity.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/StaticEntity.cc	(revision 11071)
@@ -95,5 +95,5 @@
     bool StaticEntity::isCollisionTypeLegal(WorldEntity::CollisionType type) const
     {
-        if (type == WorldEntity::Kinematic || type == WorldEntity::Dynamic)
+        if (type == WorldEntity::CollisionType::Kinematic || type == WorldEntity::CollisionType::Dynamic)
         {
             orxout(internal_warning) << "Cannot tell a StaticEntity to have kinematic or dynamic collision type! Ignoring." << endl;
Index: code/trunk/src/orxonox/worldentities/StaticEntity.h
===================================================================
--- code/trunk/src/orxonox/worldentities/StaticEntity.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/StaticEntity.h	(revision 11071)
@@ -57,10 +57,10 @@
             using WorldEntity::setOrientation;
 
-            void setPosition(const Vector3& position);
-            void setOrientation(const Quaternion& orientation);
+            virtual void setPosition(const Vector3& position) override;
+            virtual void setOrientation(const Quaternion& orientation) override;
 
         private:
             void registerVariables();
-            bool isCollisionTypeLegal(CollisionType type) const;
+            virtual bool isCollisionTypeLegal(CollisionType type) const override;
 
             // network callbacks
@@ -71,6 +71,6 @@
 
             // Bullet btMotionState related
-            void setWorldTransform(const btTransform& worldTrans);
-            void getWorldTransform(btTransform& worldTrans) const;
+            virtual void setWorldTransform(const btTransform& worldTrans) override;
+            virtual void getWorldTransform(btTransform& worldTrans) const override;
     };
 }
Index: code/trunk/src/orxonox/worldentities/TeamSpawnPoint.h
===================================================================
--- code/trunk/src/orxonox/worldentities/TeamSpawnPoint.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/TeamSpawnPoint.h	(revision 11071)
@@ -43,5 +43,5 @@
             virtual ~TeamSpawnPoint() {}
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             void setTeamNumber(unsigned int team)
@@ -49,5 +49,5 @@
             unsigned int getTeamNumber() const
                 { return this->teamNumber_; }
-            virtual Pawn* spawn();
+            virtual Pawn* spawn() override;
 
         private:
Index: code/trunk/src/orxonox/worldentities/WorldEntity.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/WorldEntity.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/WorldEntity.cc	(revision 11071)
@@ -37,5 +37,4 @@
 #include <OgreSceneNode.h>
 #include <BulletDynamics/Dynamics/btRigidBody.h>
-#include <boost/static_assert.hpp>
 
 #include "util/OrxAssert.h"
@@ -57,7 +56,7 @@
 
     // Be sure we don't do bad conversions
-    BOOST_STATIC_ASSERT((int)Ogre::Node::TS_LOCAL  == (int)WorldEntity::Local);
-    BOOST_STATIC_ASSERT((int)Ogre::Node::TS_PARENT == (int)WorldEntity::Parent);
-    BOOST_STATIC_ASSERT((int)Ogre::Node::TS_WORLD  == (int)WorldEntity::World);
+    static_assert((int)Ogre::Node::TS_LOCAL  == (int)WorldEntity::TransformSpace::Local,  "check enum");
+    static_assert((int)Ogre::Node::TS_PARENT == (int)WorldEntity::TransformSpace::Parent, "check enum");
+    static_assert((int)Ogre::Node::TS_WORLD  == (int)WorldEntity::TransformSpace::World,  "check enum");
 
     RegisterAbstractClass(WorldEntity).inheritsFrom<BaseObject>().inheritsFrom<Synchronisable>();
@@ -77,5 +76,5 @@
         this->node_ = this->getScene()->getRootSceneNode()->createChildSceneNode();
 
-        this->parent_ = 0;
+        this->parent_ = nullptr;
         this->parentID_ = OBJECTID_UNKNOWN;
         this->bDeleteWithParent_ = true;
@@ -90,5 +89,5 @@
 
         // Default behaviour does not include physics
-        this->physicalBody_   = 0;
+        this->physicalBody_   = nullptr;
         this->bPhysicsActive_ = false;
         this->bPhysicsActiveSynchronised_    = false;
@@ -96,6 +95,6 @@
         this->collisionShape_ = new WorldEntityCollisionShape(this->getContext());
         this->collisionShape_->setWorldEntityOwner(this);
-        this->collisionType_             = None;
-        this->collisionTypeSynchronised_ = None;
+        this->collisionType_             = CollisionType::None;
+        this->collisionTypeSynchronised_ = CollisionType::None;
         this->mass_                 = 1.0f;
         this->childrenMass_         = 0;
@@ -208,5 +207,5 @@
         registerVariable(this->bCollisionResponseActive_,
                                                 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionResponseActivityChanged));
-        registerVariable((int&)this->collisionTypeSynchronised_,
+        registerVariable(this->collisionTypeSynchronised_,
                                                 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionTypeChanged));
         registerVariable(this->bPhysicsActiveSynchronised_,
@@ -234,14 +233,14 @@
 
             // iterate over all children and change their activity as well
-            for (std::set<WorldEntity*>::const_iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); it++)
+            for (WorldEntity* object : this->getAttachedObjects())
             {
                 if(!this->isActive())
                 {
-                    (*it)->bActiveMem_ = (*it)->isActive();
-                    (*it)->setActive(this->isActive());
+                    object->bActiveMem_ = object->isActive();
+                    object->setActive(this->isActive());
                 }
                 else
                 {
-                    (*it)->setActive((*it)->bActiveMem_);
+                    object->setActive(object->bActiveMem_);
                 }
             }
@@ -260,14 +259,14 @@
         {
             // iterate over all children and change their visibility as well
-            for (std::set<WorldEntity*>::const_iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); it++)
+            for (WorldEntity* object : this->getAttachedObjects())
             {
                 if(!this->isVisible())
                 {
-                    (*it)->bVisibleMem_ = (*it)->isVisible();
-                    (*it)->setVisible(this->isVisible());
+                    object->bVisibleMem_ = object->isVisible();
+                    object->setVisible(this->isVisible());
                 }
                 else
                 {
-                    (*it)->setVisible((*it)->bVisibleMem_);
+                    object->setVisible(object->bVisibleMem_);
                 }
             }
@@ -323,8 +322,8 @@
     void WorldEntity::collisionTypeChanged()
     {
-        if (this->collisionTypeSynchronised_ != Dynamic &&
-            this->collisionTypeSynchronised_ != Kinematic &&
-            this->collisionTypeSynchronised_ != Static &&
-            this->collisionTypeSynchronised_ != None)
+        if (this->collisionTypeSynchronised_ != CollisionType::Dynamic &&
+            this->collisionTypeSynchronised_ != CollisionType::Kinematic &&
+            this->collisionTypeSynchronised_ != CollisionType::Static &&
+            this->collisionTypeSynchronised_ != CollisionType::None)
         {
             orxout(internal_error) << "Error when collsion Type was received over network. Unknown enum value:" << this->collisionTypeSynchronised_ << endl;
@@ -498,5 +497,5 @@
     void WorldEntity::notifyDetached()
     {
-        this->parent_ = 0;
+        this->parent_ = nullptr;
         this->parentID_ = OBJECTID_UNKNOWN;
 
@@ -519,11 +518,11 @@
     {
         unsigned int i = 0;
-        for (std::set<WorldEntity*>::const_iterator it = this->children_.begin(); it != this->children_.end(); ++it)
+        for (WorldEntity* child : this->children_)
         {
             if (i == index)
-                return (*it);
+                return child;
             ++i;
         }
-        return 0;
+        return nullptr;
     }
 
@@ -563,5 +562,5 @@
     void WorldEntity::detachOgreObject(Ogre::MovableObject* object)
     {
-        object->setUserAny(Ogre::Any(static_cast<OrxonoxClass*>(NULL)));
+        object->setUserAny(Ogre::Any(static_cast<OrxonoxClass*>(nullptr)));
         this->node_->detachObject(object);
     }
@@ -660,5 +659,5 @@
     {
         // If physics is enabled scale the attached CollisionShape.
-        /*if (this->hasPhysics() && this->collisionShape_ != NULL)
+        /*if (this->hasPhysics() && this->collisionShape_ != nullptr)
         {
             this->collisionShape_->setScale3D(scale);
@@ -682,12 +681,12 @@
         switch (relativeTo)
         {
-        case WorldEntity::Local:
+        case TransformSpace::Local:
             // position is relative to parent so transform downwards
             this->setPosition(this->getPosition() + this->getOrientation() * distance);
             break;
-        case WorldEntity::Parent:
+        case TransformSpace::Parent:
             this->setPosition(this->getPosition() + distance);
             break;
-        case WorldEntity::World:
+        case TransformSpace::World:
             // position is relative to parent so transform upwards
             if (this->node_->getParent())
@@ -712,12 +711,12 @@
         switch(relativeTo)
         {
-        case WorldEntity::Local:
+        case TransformSpace::Local:
             this->setOrientation(this->getOrientation() * rotation);
             break;
-        case WorldEntity::Parent:
+        case TransformSpace::Parent:
             // Rotations are normally relative to local axes, transform up
             this->setOrientation(rotation * this->getOrientation());
             break;
-        case WorldEntity::World:
+        case TransformSpace::World:
             // Rotations are normally relative to local axes, transform up
             this->setOrientation(this->getOrientation() * this->getWorldOrientation().Inverse()
@@ -742,11 +741,11 @@
         switch (relativeTo)
         {
-        case WorldEntity::Local:
+        case TransformSpace::Local:
             origin = Vector3::ZERO;
             break;
-        case WorldEntity::Parent:
+        case TransformSpace::Parent:
             origin = this->getPosition();
             break;
-        case WorldEntity::World:
+        case TransformSpace::World:
             origin = this->getWorldPosition();
             break;
@@ -832,5 +831,5 @@
 
         // Check whether we have to create or destroy.
-        if (type != None && this->collisionType_ == None)
+        if (type != CollisionType::None && this->collisionType_ == CollisionType::None)
         {
 /*
@@ -850,5 +849,5 @@
             this->physicalBody_->setActivationState(DISABLE_DEACTIVATION);
         }
-        else if (type == None && this->collisionType_ != None)
+        else if (type == CollisionType::None && this->collisionType_ != CollisionType::None)
         {
             // Destroy rigid body
@@ -856,7 +855,7 @@
             deactivatePhysics();
             delete this->physicalBody_;
-            this->physicalBody_ = 0;
-            this->collisionType_ = None;
-            this->collisionTypeSynchronised_ = None;
+            this->physicalBody_ = nullptr;
+            this->collisionType_ = CollisionType::None;
+            this->collisionTypeSynchronised_ = CollisionType::None;
             return;
         }
@@ -865,14 +864,14 @@
         switch (type)
         {
-        case Dynamic:
+        case CollisionType::Dynamic:
             this->physicalBody_->setCollisionFlags(this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_STATIC_OBJECT & !btCollisionObject::CF_KINEMATIC_OBJECT);
             break;
-        case Kinematic:
+        case CollisionType::Kinematic:
             this->physicalBody_->setCollisionFlags((this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_STATIC_OBJECT) | btCollisionObject::CF_KINEMATIC_OBJECT);
             break;
-        case Static:
+        case CollisionType::Static:
             this->physicalBody_->setCollisionFlags((this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_KINEMATIC_OBJECT) | btCollisionObject::CF_STATIC_OBJECT);
             break;
-        case None:
+        case CollisionType::None:
             assert(false); // Doesn't happen
             return;
@@ -896,11 +895,11 @@
         CollisionType type;
         if (typeStrLower == "dynamic")
-            type = Dynamic;
+            type = CollisionType::Dynamic;
         else if (typeStrLower == "static")
-            type = Static;
+            type = CollisionType::Static;
         else if (typeStrLower == "kinematic")
-            type = Kinematic;
+            type = CollisionType::Kinematic;
         else if (typeStrLower == "none")
-            type = None;
+            type = CollisionType::None;
         else
             ThrowException(ParseError, std::string("Attempting to set an unknown collision type: '") + typeStr + "'.");
@@ -913,11 +912,11 @@
         switch (this->getCollisionType())
         {
-            case Dynamic:
+            case CollisionType::Dynamic:
                 return "dynamic";
-            case Kinematic:
+            case CollisionType::Kinematic:
                 return "kinematic";
-            case Static:
+            case CollisionType::Static:
                 return "static";
-            case None:
+            case CollisionType::None:
                 return "none";
             default:
@@ -939,6 +938,6 @@
         // Recalculate mass
         this->childrenMass_ = 0.0f;
-        for (std::set<WorldEntity*>::const_iterator it = this->children_.begin(); it != this->children_.end(); ++it)
-            this->childrenMass_ += (*it)->getMass();
+        for (WorldEntity* child : this->children_)
+            this->childrenMass_ += child->getMass();
         recalculateMassProps();
         // Notify parent WE
Index: code/trunk/src/orxonox/worldentities/WorldEntity.h
===================================================================
--- code/trunk/src/orxonox/worldentities/WorldEntity.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/WorldEntity.h	(revision 11071)
@@ -82,5 +82,5 @@
                 Enumeration denoting the spaces which a transform can be relative to.
             */
-            enum TransformSpace
+            enum class TransformSpace
             {
                 //! Transform is relative to the local space
@@ -96,5 +96,5 @@
             virtual ~WorldEntity();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
 
             inline const Ogre::SceneNode* getNode() const
@@ -108,6 +108,6 @@
             static const Vector3 UP;
 
-            virtual void changedActivity(void);
-            virtual void changedVisibility(void);
+            virtual void changedActivity(void) override;
+            virtual void changedVisibility(void) override;
 
             virtual void setPosition(const Vector3& position) = 0;
@@ -117,6 +117,6 @@
             const Vector3& getWorldPosition() const;
 
-            void translate(const Vector3& distance, TransformSpace relativeTo = WorldEntity::Parent);
-            inline void translate(float x, float y, float z, TransformSpace relativeTo = WorldEntity::Parent)
+            void translate(const Vector3& distance, TransformSpace relativeTo = TransformSpace::Parent);
+            inline void translate(float x, float y, float z, TransformSpace relativeTo = TransformSpace::Parent)
                 { this->translate(Vector3(x, y, z), relativeTo); }
 
@@ -134,18 +134,18 @@
             const Quaternion& getWorldOrientation() const;
 
-            void rotate(const Quaternion& rotation, TransformSpace relativeTo = WorldEntity::Local);
-            inline void rotate(const Vector3& axis, const Degree& angle, TransformSpace relativeTo = WorldEntity::Local)
+            void rotate(const Quaternion& rotation, TransformSpace relativeTo = TransformSpace::Local);
+            inline void rotate(const Vector3& axis, const Degree& angle, TransformSpace relativeTo = TransformSpace::Local)
                 { this->rotate(Quaternion(angle, axis), relativeTo); }
 
-            inline void yaw(const Degree& angle, TransformSpace relativeTo = WorldEntity::Local)
+            inline void yaw(const Degree& angle, TransformSpace relativeTo = TransformSpace::Local)
                 { this->rotate(Quaternion(angle, Vector3::UNIT_Y), relativeTo); }
-            inline void pitch(const Degree& angle, TransformSpace relativeTo = WorldEntity::Local)
+            inline void pitch(const Degree& angle, TransformSpace relativeTo = TransformSpace::Local)
                 { this->rotate(Quaternion(angle, Vector3::UNIT_X), relativeTo); }
-            inline void roll(const Degree& angle, TransformSpace relativeTo = WorldEntity::Local)
+            inline void roll(const Degree& angle, TransformSpace relativeTo = TransformSpace::Local)
                 { this->rotate(Quaternion(angle, Vector3::UNIT_Z), relativeTo); }
 
-            void lookAt(const Vector3& target, TransformSpace relativeTo = WorldEntity::Parent, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
-            void setDirection(const Vector3& direction, TransformSpace relativeTo = WorldEntity::Local, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
-            inline void setDirection(float x, float y, float z, TransformSpace relativeTo = WorldEntity::Local, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z)
+            void lookAt(const Vector3& target, TransformSpace relativeTo = TransformSpace::Parent, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
+            void setDirection(const Vector3& direction, TransformSpace relativeTo = TransformSpace::Local, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
+            inline void setDirection(float x, float y, float z, TransformSpace relativeTo = TransformSpace::Local, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z)
                 { this->setDirection(Vector3(x, y, z), relativeTo, localDirectionVector); }
 
@@ -257,5 +257,5 @@
                 None:      The object has no physics at all.
             */
-            enum CollisionType
+            enum class CollisionType
             {
                 Dynamic,
@@ -266,11 +266,11 @@
 
             //! Tells whether the object has any connection to the Bullet physics engine. If hasPhysics() is false, the object may still have a velocity.
-            bool hasPhysics()       const { return getCollisionType() != None     ; }
+            bool hasPhysics()       const { return getCollisionType() != CollisionType::None     ; }
             //! @see CollisionType
-            bool isStatic()         const { return getCollisionType() == Static   ; }
+            bool isStatic()         const { return getCollisionType() == CollisionType::Static   ; }
             //! @see CollisionType
-            bool isKinematic()      const { return getCollisionType() == Kinematic; }
+            bool isKinematic()      const { return getCollisionType() == CollisionType::Kinematic; }
             //! @see CollisionType
-            bool isDynamic()        const { return getCollisionType() == Dynamic  ; }
+            bool isDynamic()        const { return getCollisionType() == CollisionType::Dynamic  ; }
             //! Tells whether physics has been activated (you can temporarily deactivate it)
             bool isPhysicsActive()  const { return this->bPhysicsActive_; }
Index: code/trunk/src/orxonox/worldentities/pawns/FpsPlayer.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/FpsPlayer.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/FpsPlayer.cc	(revision 11071)
@@ -79,5 +79,5 @@
         // FpsPlayer is always a physical object per default
         // Be aware of this call: The collision type legality check will not reach derived classes!
-        this->setCollisionType(WorldEntity::Dynamic);
+        this->setCollisionType(WorldEntity::CollisionType::Dynamic);
         // Get notification about collisions
         this->enableCollisionCallback();
@@ -130,5 +130,5 @@
     bool FpsPlayer::isCollisionTypeLegal(WorldEntity::CollisionType type) const
     {
-        if (type != WorldEntity::Dynamic)
+        if (type != WorldEntity::CollisionType::Dynamic)
         {
             orxout(internal_warning) << "Cannot tell a FpsPlayer not to be dynamic! Ignoring." << endl;
@@ -168,5 +168,5 @@
             if (!this->isInMouseLook())
             {
-                this->yaw(Radian(this->yaw_ * this->getMouseLookSpeed()), WorldEntity::Parent);
+                this->yaw(Radian(this->yaw_ * this->getMouseLookSpeed()), WorldEntity::TransformSpace::Parent);
 
                 Radian pitch = this->cameraPositionRootNode_->getOrientation().getPitch();
@@ -282,5 +282,5 @@
     }
 
-    bool FpsPlayer::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
+    bool FpsPlayer::collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint)
     {
         if (contactPoint.m_normalWorldOnB.y() > 0.6)
Index: code/trunk/src/orxonox/worldentities/pawns/FpsPlayer.h
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/FpsPlayer.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/FpsPlayer.h	(revision 11071)
@@ -69,5 +69,5 @@
             virtual void fire();
 
-            bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
+            virtual bool collidesAgainst(WorldEntity* otherObject, const btCollisionShape* ownCollisionShape, btManifoldPoint& contactPoint) override;
 
             virtual void addedWeaponPack(WeaponPack* wPack);
Index: code/trunk/src/orxonox/worldentities/pawns/ModularSpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/ModularSpaceShip.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/ModularSpaceShip.cc	(revision 11071)
@@ -53,5 +53,5 @@
     RegisterClass(ModularSpaceShip);
 
-    std::map<StaticEntity*, ShipPart*>* ModularSpaceShip::partMap_s = 0;
+    std::map<StaticEntity*, ShipPart*>* ModularSpaceShip::partMap_s = nullptr;
 
     ModularSpaceShip::ModularSpaceShip(Context* context) : SpaceShip(context)
@@ -94,18 +94,18 @@
         for (unsigned int i=0; i < this->getAttachedObjects().size(); i++)
         {
-            if (this->getAttachedObject(i) == NULL)
+            if (this->getAttachedObject(i) == nullptr)
             {
                 break;
             }
             // iterate through all attached parts
-            for(unsigned int j = 0; j < this->partList_.size(); j++)
+            for(ShipPart* part : this->partList_)
             {
                 // if the name of the part matches the name of the object, add the object to that parts entitylist (unless it was already done).
-                if((this->partList_[j]->getName() == this->getAttachedObject(i)->getName()) && !this->partList_[j]->hasEntity(orxonox_cast<StaticEntity*>(this->getAttachedObject(i))))
+                if((part->getName() == this->getAttachedObject(i)->getName()) && !part->hasEntity(orxonox_cast<StaticEntity*>(this->getAttachedObject(i))))
                 {
                     // The Entity is added to the part's entityList_
-                    this->partList_[j]->addEntity(orxonox_cast<StaticEntity*>(this->getAttachedObject(i)));
+                    part->addEntity(orxonox_cast<StaticEntity*>(this->getAttachedObject(i)));
                     // An entry in the partMap_ is created, assigning the part to the entity.
-                    this->addPartEntityAssignment((StaticEntity*)(this->getAttachedObject(i)), this->partList_[j]);
+                    this->addPartEntityAssignment((StaticEntity*)(this->getAttachedObject(i)), part);
                 }
             }
@@ -146,10 +146,10 @@
     ShipPart* ModularSpaceShip::getPartOfEntity(StaticEntity* entity) const
     {
-        for (std::map<StaticEntity*, ShipPart*>::const_iterator it = this->partMap_.begin(); it != this->partMap_.end(); ++it)
-        {
-            if (it->first == entity)
-                return it->second;
-        }
-        return NULL;
+        for (const auto& mapEntry : this->partMap_)
+        {
+            if (mapEntry.first == entity)
+                return mapEntry.second;
+        }
+        return nullptr;
     }
 
@@ -160,5 +160,5 @@
     void ModularSpaceShip::damage(float damage, float healthdamage, float shielddamage, Pawn* originator, const btCollisionShape* cs)
     {
-        if (cs != NULL && this->getPartOfEntity((StaticEntity*)(cs->getUserPointer())) != NULL)
+        if (cs != nullptr && this->getPartOfEntity((StaticEntity*)(cs->getUserPointer())) != nullptr)
             this->getPartOfEntity((StaticEntity*)(cs->getUserPointer()))->handleHit(damage, healthdamage, shielddamage, originator);
         else
@@ -174,9 +174,9 @@
     void ModularSpaceShip::killShipPartStatic(std::string name)
     {
-        for (std::map<StaticEntity*, ShipPart*>::const_iterator it = ModularSpaceShip::partMap_s->begin(); it != ModularSpaceShip::partMap_s->end(); ++it)
-        {
-            if (it->second->getName() == name)
-            {
-                it->second->death();
+        for (const auto& mapEntry : *ModularSpaceShip::partMap_s)
+        {
+            if (mapEntry.second->getName() == name)
+            {
+                mapEntry.second->death();
                 return;
             }
@@ -193,9 +193,9 @@
     void ModularSpaceShip::killShipPart(std::string name)
     {
-        for (std::map<StaticEntity*, ShipPart*>::const_iterator it = ModularSpaceShip::partMap_.begin(); it != ModularSpaceShip::partMap_.end(); ++it)
-        {
-            if (it->second->getName() == name)
-            {
-                it->second->death();
+        for (const auto& mapEntry : ModularSpaceShip::partMap_)
+        {
+            if (mapEntry.second->getName() == name)
+            {
+                mapEntry.second->death();
                 return;
             }
@@ -212,5 +212,5 @@
     void ModularSpaceShip::addShipPart(ShipPart* part)
     {
-        OrxAssert(part != NULL, "The ShipPart cannot be NULL.");
+        OrxAssert(part != nullptr, "The ShipPart cannot be nullptr.");
         this->partList_.push_back(part);
         part->setParent(this);
@@ -222,10 +222,10 @@
         Get the i-th ShipPart of the SpaceShip.
     @return
-        Returns a pointer to the i-the ShipPart. NULL if there is no ShipPart with that index.
+        Returns a pointer to the i-the ShipPart. nullptr if there is no ShipPart with that index.
     */
     ShipPart* ModularSpaceShip::getShipPart(unsigned int index)
     {
         if(this->partList_.size() <= index)
-            return NULL;
+            return nullptr;
         else
             return this->partList_[index];
@@ -238,17 +238,17 @@
         The name of the ShipPart to be returned.
     @return
-        Pointer to the ShipPart with the given name, or NULL if not found.
+        Pointer to the ShipPart with the given name, or nullptr if not found.
     */
     ShipPart* ModularSpaceShip::getShipPartByName(std::string name)
     {
-        for(std::vector<ShipPart*>::iterator it = this->partList_.begin(); it != this->partList_.end(); ++it)
-        {
-            if(orxonox_cast<ShipPart*>(*it)->getName() == name)
-            {
-                return orxonox_cast<ShipPart*>(*it);
+        for(ShipPart* part : this->partList_)
+        {
+            if(orxonox_cast<ShipPart*>(part)->getName() == name)
+            {
+                return orxonox_cast<ShipPart*>(part);
             }
         }
         orxout(internal_warning) << "Couldn't find ShipPart with name \"" << name << "\"." << endl;
-        return NULL;
+        return nullptr;
     }
 
@@ -256,12 +256,12 @@
     @brief
         Check whether the SpaceShip has a particular Engine.
-    @param engine
+    @param search
         A pointer to the Engine to be checked.
     */
-    bool ModularSpaceShip::hasShipPart(ShipPart* part) const
-    {
-        for(unsigned int i = 0; i < this->partList_.size(); i++)
-        {
-            if(this->partList_[i] == part)
+    bool ModularSpaceShip::hasShipPart(ShipPart* search) const
+    {
+        for(ShipPart* part : this->partList_)
+        {
+            if(part == search)
                 return true;
         }
Index: code/trunk/src/orxonox/worldentities/pawns/ModularSpaceShip.h
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/ModularSpaceShip.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/ModularSpaceShip.h	(revision 11071)
@@ -109,5 +109,5 @@
             ShipPart* getPartOfEntity(StaticEntity* entity) const;
 
-            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = NULL, const btCollisionShape* cs = NULL);
+            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = nullptr, const btCollisionShape* cs = nullptr);
 
             static void killShipPartStatic(std::string name);
Index: code/trunk/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/Pawn.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/Pawn.cc	(revision 11071)
@@ -77,5 +77,5 @@
         this->shieldRechargeWaitCountdown_ = 0;
 
-        this->lastHitOriginator_ = 0;
+        this->lastHitOriginator_ = nullptr;
 
         // set damage multiplier to default value 1, meaning nominal damage
@@ -86,5 +86,5 @@
         this->aimPosition_ = Vector3::ZERO;
 
-        //this->explosionPartList_ = NULL;
+        //this->explosionPartList_ = nullptr;
 
         if (GameMode::isMaster())
@@ -94,8 +94,8 @@
         }
         else
-            this->weaponSystem_ = 0;
+            this->weaponSystem_ = nullptr;
 
         this->setRadarObjectColour(ColourValue::Red);
-        this->setRadarObjectShape(RadarViewable::Dot);
+        this->setRadarObjectShape(RadarViewable::Shape::Dot);
 
         this->registerVariables();
@@ -112,5 +112,5 @@
         else
         {
-            this->explosionSound_ = 0;
+            this->explosionSound_ = nullptr;
         }
     }
@@ -373,5 +373,5 @@
                     {
                         // delete the AIController // <-- TODO: delete? nothing is deleted here... should we delete the controller?
-                        slave->setControllableEntity(0);
+                        slave->setControllableEntity(nullptr);
 
                         // set a new master within the formation
@@ -468,5 +468,5 @@
             return this->weaponSystem_->getWeaponSlot(index);
         else
-            return 0;
+            return nullptr;
     }
 
@@ -482,5 +482,5 @@
             return this->weaponSystem_->getWeaponSet(index);
         else
-            return 0;
+            return nullptr;
     }
 
@@ -510,13 +510,5 @@
             return this->weaponSystem_->getWeaponPack(index);
         else
-            return 0;
-    }
-
-    std::vector<WeaponPack *> * Pawn::getAllWeaponPacks()
-    {
-        if (this->weaponSystem_)
-            return this->weaponSystem_->getAllWeaponPacks();
-        else
-            return 0;        
+            return nullptr;
     }
 
@@ -531,5 +523,5 @@
     Munition* Pawn::getMunitionXML() const
     {
-        return NULL;
+        return nullptr;
     }
 
@@ -541,5 +533,5 @@
         }
 
-        return NULL;
+        return nullptr;
     }
 
@@ -564,10 +556,8 @@
     bool Pawn::hasSlaves()
     {
-        for (ObjectList<FormationController>::iterator it =
-             ObjectList<FormationController>::begin();
-             it != ObjectList<FormationController>::end(); ++it )
+        for (FormationController* controller : ObjectList<FormationController>())
         {
             // checks if the pawn's controller has a slave
-            if (this->hasHumanController() && it->getMaster() == this->getPlayer()->getController())
+            if (this->hasHumanController() && controller->getMaster() == this->getPlayer()->getController())
                 return true;
         }
@@ -577,12 +567,10 @@
     // A function that returns a slave of the pawn's controller
     Controller* Pawn::getSlave(){
-        for (ObjectList<FormationController>::iterator it =
-                ObjectList<FormationController>::begin();
-                it != ObjectList<FormationController>::end(); ++it )
-        {
-            if (this->hasHumanController() && it->getMaster() == this->getPlayer()->getController())
-                return it->getController();
-        }
-        return 0;
+        for (FormationController* controller : ObjectList<FormationController>())
+        {
+            if (this->hasHumanController() && controller->getMaster() == this->getPlayer()->getController())
+                return controller->getController();
+        }
+        return nullptr;
     }
 
Index: code/trunk/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/Pawn.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/Pawn.h	(revision 11071)
@@ -63,7 +63,7 @@
             virtual ~Pawn();
 
-            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode);
-            virtual void tick(float dt);
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void XMLEventPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void tick(float dt) override;
 
             inline bool isAlive() const
@@ -71,5 +71,5 @@
 
 
-            virtual void setHealth(float health);
+            void setHealth(float health);
             inline void addHealth(float health)
                 { this->setHealth(this->health_ + health); }
@@ -89,5 +89,5 @@
                 { return this->initialHealth_; }
 
-            virtual void setShieldHealth(float shieldHealth);
+            void setShieldHealth(float shieldHealth);
 
             inline float getShieldHealth()
@@ -100,5 +100,5 @@
                 { return (this->getShieldHealth() > 0); }
 
-            virtual void setMaxShieldHealth(float maxshieldhealth);
+            void setMaxShieldHealth(float maxshieldhealth);
             inline float getMaxShieldHealth() const
                 { return this->maxShieldHealth_; }
@@ -119,9 +119,9 @@
                 { return this->shieldAbsorption_; }
 
-            virtual void setShieldRechargeRate(float shieldRechargeRate);
+            void setShieldRechargeRate(float shieldRechargeRate);
             inline float getShieldRechargeRate() const
                 { return this->shieldRechargeRate_; }
 
-            virtual void setShieldRechargeWaitTime(float shieldRechargeWaitTime);
+            void setShieldRechargeWaitTime(float shieldRechargeWaitTime);
             inline float getShieldRechargeWaitTime() const
                 { return this->shieldRechargeWaitTime_; }
@@ -133,5 +133,5 @@
                 { this->shieldRechargeWaitCountdown_ = this->getShieldRechargeWaitTime(); } // TODO: Implement in Projectile.cc
 
-            virtual void decreaseShieldRechargeCountdownTime(float dt);
+            void decreaseShieldRechargeCountdownTime(float dt);
 
             /** @brief Sets the state of the pawns vulnerability. @param bVulnerable */
@@ -157,5 +157,5 @@
             virtual void kill();
 
-            virtual void fired(unsigned int firemode);
+            virtual void fired(unsigned int firemode) override;
             virtual void postSpawn();
 
@@ -170,5 +170,4 @@
             void addWeaponPackXML(WeaponPack * wPack);
             WeaponPack * getWeaponPack(unsigned int index) const;
-            std::vector<WeaponPack *> * getAllWeaponPacks();
 
             void addMunitionXML(Munition* munition);
@@ -201,5 +200,5 @@
 
 
-            virtual void startLocalHumanControl();
+            virtual void startLocalHumanControl() override;
 
             void setAimPosition( Vector3 position )
@@ -208,20 +207,20 @@
                 { return this->aimPosition_; }
 
-            virtual const Vector3& getCarrierPosition(void) const
+            virtual const Vector3& getCarrierPosition(void) const override
                 { return this->getWorldPosition(); };
 
-            virtual void changedVisibility();
+            virtual void changedVisibility() override;
 
             void setExplosionSound(const std::string& engineSound);
             const std::string& getExplosionSound();
 
-            virtual const WeaponSystem* getWeaponSystem() const
+            inline const WeaponSystem* getWeaponSystem() const
                 { return this->weaponSystem_; }
 
         protected:
-            virtual void preDestroy();
-
-            virtual void setPlayer(PlayerInfo* player);
-            virtual void removePlayer();
+            virtual void preDestroy() override;
+
+            virtual void setPlayer(PlayerInfo* player) override;
+            virtual void removePlayer() override;
 
             virtual void death();
@@ -231,13 +230,13 @@
             virtual void spawneffect();
 
-            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = NULL, const btCollisionShape* cs = NULL);
+            virtual void damage(float damage, float healthdamage = 0.0f, float shielddamage = 0.0f, Pawn* originator = nullptr, const btCollisionShape* cs = nullptr);
 
             bool bAlive_;
             bool bVulnerable_; ///< If false the pawn may not ged damaged
 
-            virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const
+            virtual std::vector<PickupCarrier*>* getCarrierChildren(void) const override
                 { return new std::vector<PickupCarrier*>(); }
-            virtual PickupCarrier* getCarrierParent(void) const
-                { return NULL; }
+            virtual PickupCarrier* getCarrierParent(void) const override
+                { return nullptr; }
 
 
Index: code/trunk/src/orxonox/worldentities/pawns/SpaceShip.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/SpaceShip.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/SpaceShip.cc	(revision 11071)
@@ -48,5 +48,5 @@
     RegisterClass(SpaceShip);
 
-    SpaceShip::SpaceShip(Context* context) : Pawn(context), boostBlur_(NULL)
+    SpaceShip::SpaceShip(Context* context) : Pawn(context), boostBlur_(nullptr)
     {
         RegisterObject(SpaceShip);
@@ -80,5 +80,5 @@
         // SpaceShip is always a physical object per default
         // Be aware of this call: The collision type legality check will not reach derived classes!
-        this->setCollisionType(WorldEntity::Dynamic);
+        this->setCollisionType(WorldEntity::CollisionType::Dynamic);
         // Get notification about collisions
         this->enableCollisionCallback();
@@ -145,5 +145,5 @@
     bool SpaceShip::isCollisionTypeLegal(WorldEntity::CollisionType type) const
     {
-        if (type != WorldEntity::Dynamic)
+        if (type != WorldEntity::CollisionType::Dynamic)
         {
             orxout(internal_warning) << "Cannot tell a SpaceShip not to be dynamic! Ignoring." << endl;
@@ -160,6 +160,6 @@
 
         // Run the engines
-        for(std::vector<Engine*>::iterator it = this->engineList_.begin(); it != this->engineList_.end(); it++)
-            (*it)->run(dt);
+        for(Engine* engine : this->engineList_)
+            engine->run(dt);
 
         if (this->hasLocalController())
@@ -198,5 +198,5 @@
             if(this->bEnableMotionBlur_)
             {
-                if (this->boostBlur_ == NULL && this->hasLocalController() && this->hasHumanController())
+                if (this->boostBlur_ == nullptr && this->hasLocalController() && this->hasHumanController())
                 {
                     this->boostBlur_ = new Shader(this->getScene()->getSceneManager());
@@ -325,5 +325,5 @@
     void SpaceShip::addEngine(orxonox::Engine* engine)
     {
-        OrxAssert(engine != NULL, "The engine cannot be NULL.");
+        OrxAssert(engine != nullptr, "The engine cannot be nullptr.");
         this->engineList_.push_back(engine);
         engine->addToSpaceShip(this);
@@ -333,12 +333,12 @@
     @brief
         Check whether the SpaceShip has a particular Engine.
-    @param engine
+    @param search
         A pointer to the Engine to be checked.
     */
-    bool SpaceShip::hasEngine(Engine* engine) const
-    {
-        for(unsigned int i = 0; i < this->engineList_.size(); i++)
-        {
-            if(this->engineList_[i] == engine)
+    bool SpaceShip::hasEngine(Engine* search) const
+    {
+        for(Engine* engine : this->engineList_)
+        {
+            if(engine == search)
                 return true;
         }
@@ -350,10 +350,10 @@
         Get the i-th Engine of the SpaceShip.
     @return
-        Returns a pointer to the i-the Engine. NULL if there is no Engine with that index.
+        Returns a pointer to the i-the Engine. nullptr if there is no Engine with that index.
     */
     Engine* SpaceShip::getEngine(unsigned int i)
     {
         if(this->engineList_.size() >= i)
-            return NULL;
+            return nullptr;
         else
             return this->engineList_[i];
@@ -366,14 +366,14 @@
         The name of the engine to be returned.
     @return
-        Pointer to the engine with the given name, or NULL if not found.
+        Pointer to the engine with the given name, or nullptr if not found.
     */
     Engine* SpaceShip::getEngineByName(const std::string& name)
     {
-        for(size_t i = 0; i < this->engineList_.size(); ++i)
-            if(this->engineList_[i]->getName() == name)
-                return this->engineList_[i];
+        for(Engine* engine : this->engineList_)
+            if(engine->getName() == name)
+                return engine;
 
         orxout(internal_warning) << "Couldn't find Engine with name \"" << name << "\"." << endl;
-        return NULL;
+        return nullptr;
     }
 
@@ -416,6 +416,6 @@
     void SpaceShip::addSpeedFactor(float factor)
     {
-        for(unsigned int i=0; i<this->engineList_.size(); i++)
-            this->engineList_[i]->addSpeedMultiply(factor);
+        for(Engine* engine : this->engineList_)
+            engine->addSpeedMultiply(factor);
     }
 
@@ -428,6 +428,6 @@
     void SpaceShip::addSpeed(float speed)
     {
-        for(unsigned int i=0; i<this->engineList_.size(); i++)
-            this->engineList_[i]->addSpeedAdd(speed);
+        for(Engine* engine : this->engineList_)
+            engine->addSpeedAdd(speed);
     }
 
@@ -456,8 +456,8 @@
     {
         float speed=0;
-        for(unsigned int i=0; i<this->engineList_.size(); i++)
-        {
-            if(this->engineList_[i]->getMaxSpeedFront() > speed)
-                speed = this->engineList_[i]->getMaxSpeedFront();
+        for(Engine* engine : this->engineList_)
+        {
+            if(engine->getMaxSpeedFront() > speed)
+                speed = engine->getMaxSpeedFront();
         }
         return speed;
@@ -485,8 +485,8 @@
     void SpaceShip::changedEnableMotionBlur()
     {
-        if (!this->bEnableMotionBlur_ && this->boostBlur_ != NULL)
+        if (!this->bEnableMotionBlur_ && this->boostBlur_ != nullptr)
         {
             delete this->boostBlur_;
-            this->boostBlur_ = NULL;
+            this->boostBlur_ = nullptr;
         }
     }
@@ -514,5 +514,5 @@
             Camera* camera = this->getCamera();
             //Shaking Camera effect
-            if (camera != 0)
+            if (camera != nullptr)
                 camera->setOrientation(Vector3::UNIT_X, angle);
 
@@ -530,5 +530,5 @@
     {
         Camera* camera = CameraManager::getInstance().getActiveCamera();
-        if(camera != NULL)
+        if(camera != nullptr)
         {
             this->cameraOriginalPosition_ = camera->getPosition();
@@ -546,5 +546,5 @@
         {
             Camera *camera = this->getCamera();
-            if (camera == 0)
+            if (camera == nullptr)
             {
                 orxout(internal_warning) << "Failed to reset camera!" << endl;
Index: code/trunk/src/orxonox/worldentities/pawns/Spectator.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/Spectator.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/Spectator.cc	(revision 11071)
@@ -58,5 +58,5 @@
         this->localVelocity_ = Vector3::ZERO;
         this->setHudTemplate("spectatorhud");
-        this->greetingFlare_ = 0;
+        this->greetingFlare_ = nullptr;
 
         this->setDestroyWhenPlayerLeft(true);
Index: code/trunk/src/orxonox/worldentities/pawns/TeamBaseMatchBase.cc
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/TeamBaseMatchBase.cc	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/TeamBaseMatchBase.cc	(revision 11071)
@@ -51,5 +51,5 @@
         }
 
-        this->setRadarObjectShape(RadarViewable::Triangle);
+        this->setRadarObjectShape(RadarViewable::Shape::Triangle);
     }
 
@@ -80,9 +80,9 @@
 
         std::set<WorldEntity*> attachments = this->getAttachedObjects();
-        for (std::set<WorldEntity*>::iterator it = attachments.begin(); it != attachments.end(); ++it)
+        for (WorldEntity* attachment : attachments)
         {
-            if ((*it)->isA(Class(TeamColourable)))
+            if (attachment->isA(Class(TeamColourable)))
             {
-                TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
+                TeamColourable* tc = orxonox_cast<TeamColourable*>(attachment);
                 tc->setTeamColour(colour);
             }
@@ -92,6 +92,6 @@
 
         // Call this so bots stop shooting at the base after they converted it
-        for (ObjectList<ArtificialController>::iterator it = ObjectList<ArtificialController>::begin(); it != ObjectList<ArtificialController>::end(); ++it)
-            it->abandonTarget(this);
+        for (ArtificialController* controller : ObjectList<ArtificialController>())
+            controller->abandonTarget(this);
     }
 }
Index: code/trunk/src/orxonox/worldentities/pawns/TeamBaseMatchBase.h
===================================================================
--- code/trunk/src/orxonox/worldentities/pawns/TeamBaseMatchBase.h	(revision 11056)
+++ code/trunk/src/orxonox/worldentities/pawns/TeamBaseMatchBase.h	(revision 11071)
@@ -36,13 +36,10 @@
 namespace orxonox
 {
-    namespace BaseState
+    enum class BaseState
     {
-        enum Value
-        {
-            Uncontrolled,
-            ControlTeam1,
-            ControlTeam2,
-        };
-    }
+        Uncontrolled,
+        ControlTeam1,
+        ControlTeam2,
+    };
 
 
@@ -58,5 +55,5 @@
 
             // Set the state of a base to whatever the argument of the function is
-            void setState(BaseState::Value state)
+            void setState(BaseState state)
             {
                 this->state_ = state;
@@ -66,5 +63,5 @@
 
             // Get the state of a base as a return value
-            BaseState::Value getState() const
+            BaseState getState() const
             {
                 return this->state_;
@@ -75,5 +72,5 @@
             void changeTeamColour();
 
-            BaseState::Value state_;
+            BaseState state_;
     };
 }
