Index: code/branches/consolecommands3/src/libraries/core/CorePrereqs.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/CorePrereqs.h	(revision 7196)
+++ code/branches/consolecommands3/src/libraries/core/CorePrereqs.h	(revision 7197)
@@ -235,4 +235,7 @@
 }
 
+#include "FunctorPtr.h"
+#include "ExecutorPtr.h"
+
 // CppTcl
 namespace Tcl
Index: code/branches/consolecommands3/src/libraries/core/ExecutorPtr.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/ExecutorPtr.h	(revision 7196)
+++ code/branches/consolecommands3/src/libraries/core/ExecutorPtr.h	(revision 7197)
@@ -37,34 +37,14 @@
     typedef SharedPtr<Executor> ExecutorPtr;
 
-    typedef SharedPtr<ExecutorStatic> ExecutorStaticPtr;
+    typedef SharedChildPtr<ExecutorStatic, ExecutorPtr> ExecutorStaticPtr;
 
     template <class T>
-    class ExecutorMemberPtr : public SharedPtr<ExecutorMember<T> >
+    class ExecutorMemberPtr : public SharedChildPtr<ExecutorMember<T>, ExecutorPtr>
     {
         public:
-            inline ExecutorMemberPtr() : SharedPtr<ExecutorMember<T> >() {}
-            inline ExecutorMemberPtr(ExecutorMember<T>* pointer) : SharedPtr<ExecutorMember<T> >(pointer) {}
-//            inline ExecutorMemberPtr(const ExecutorMemberPtr& other) : SharedPtr<ExecutorMember<T> >(other) {}
-            template <class O>
-            inline ExecutorMemberPtr(const SharedPtr<O>& other) : SharedPtr<ExecutorMember<T> >(other) {}
-/*
-            inline const ExecutorMemberPtr& operator=(const ExecutorMemberPtr& other) { this->SharedPtr<ExecutorMember<T> >::operator=(other); return *this; }
-            template <class O>
-            inline const ExecutorMemberPtr& operator=(const SharedPtr<O>& other) { this->SharedPtr<ExecutorMember<T> >::operator=(other); return *this; }
-*/
-        private:
-//            inline ExecutorMemberPtr(ExecutorMember<T>* pointer, int* counter) : SharedPtr<ExecutorMember<T> >(pointer, counter) {}
+            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) {}
     };
-/*
-    typedef SharedChildPtr<ExecutorStatic, Executor> ExecutorStaticPtr;
-
-    template <class T>
-    class ExecutorMemberPtr : public SharedChildPtr<ExecutorMember<T>, Executor>
-    {
-        public:
-            inline ExecutorMemberPtr() : SharedChildPtr<ExecutorMember<T>, Executor>() {}
-            inline ExecutorMemberPtr(ExecutorMember<T>* pointer) : SharedChildPtr<ExecutorMember<T>, Executor>(pointer) {}
-    };
-*/
 }
 
Index: code/branches/consolecommands3/src/libraries/core/FunctorPtr.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/FunctorPtr.h	(revision 7196)
+++ code/branches/consolecommands3/src/libraries/core/FunctorPtr.h	(revision 7197)
@@ -37,22 +37,26 @@
     typedef SharedPtr<Functor> FunctorPtr;
 
-    typedef SharedPtr<FunctorStatic> FunctorStaticPtr;
+    typedef SharedChildPtr<FunctorStatic, FunctorPtr> FunctorStaticPtr;
 
     template <class T>
-    class FunctorMemberPtr : public SharedPtr<FunctorMember<T> >
+    class FunctorMemberPtr : public SharedChildPtr<FunctorMember<T>, FunctorPtr>
     {
         public:
-            inline FunctorMemberPtr() : SharedPtr<FunctorMember<T> >() {}
-            inline FunctorMemberPtr(FunctorMember<T>* pointer) : SharedPtr<FunctorMember<T> >(pointer) {}
-//            inline FunctorMemberPtr(const FunctorMemberPtr& other) : SharedPtr<FunctorMember<T> >(other) {}
+            inline FunctorMemberPtr() : SharedChildPtr<FunctorMember<T>, FunctorPtr>() {}
+            inline FunctorMemberPtr(FunctorMember<T>* pointer) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(pointer) {}
+//            inline FunctorMemberPtr(const FunctorMemberPtr& other) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(other) {}
+//            template <class O>
+//            inline FunctorMemberPtr(const SharedPtr<O>& other) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(other) {}
+//            template <class O>
+//            inline FunctorMemberPtr(const SharedChildPtr<O, FunctorMember<T> >& other) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(other) {}
+            inline FunctorMemberPtr(const SharedPtr<FunctorMember<T> >& other) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(other) {}
+
+/*
+            inline const FunctorMemberPtr& operator=(const FunctorMemberPtr& other) { this->SharedChildPtr<FunctorMember<T>, FunctorPtr>::operator=(other); return *this; }
             template <class O>
-            inline FunctorMemberPtr(const SharedPtr<O>& other) : SharedPtr<FunctorMember<T> >(other) {}
-/*
-            inline const FunctorMemberPtr& operator=(const FunctorMemberPtr& other) { this->SharedPtr<FunctorMember<T> >::operator=(other); return *this; }
-            template <class O>
-            inline const FunctorMemberPtr& operator=(const SharedPtr<O>& other) { this->SharedPtr<FunctorMember<T> >::operator=(other); return *this; }
+            inline const FunctorMemberPtr& operator=(const SharedPtr<O>& other) { this->SharedChildPtr<FunctorMember<T>, FunctorPtr>::operator=(other); return *this; }
 */
         private:
-//            inline FunctorMemberPtr(FunctorMember<T>* pointer, int* counter) : SharedPtr<FunctorMember<T> >(pointer, counter) {}
+//            inline FunctorMemberPtr(FunctorMember<T>* pointer, int* counter) : SharedChildPtr<FunctorMember<T>, FunctorPtr>(pointer, counter) {}
     };
 /*
Index: code/branches/consolecommands3/src/libraries/core/SharedPtr.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/SharedPtr.h	(revision 7196)
+++ code/branches/consolecommands3/src/libraries/core/SharedPtr.h	(revision 7197)
@@ -32,4 +32,5 @@
 #include "CorePrereqs.h"
 #include <algorithm>
+#include <cassert>
 
 namespace orxonox
@@ -168,17 +169,22 @@
             SharedPtrDestroyer* destroyer_;
     };
-/*
+
     template <class T, class Parent>
-    class SharedChildPtr : public SharedPtr<Parent>
+    class SharedChildPtr : public Parent
     {
         public:
-            inline SharedChildPtr() : SharedPtr<Parent>() {}
-            inline SharedChildPtr(T* pointer) : SharedPtr<Parent>(pointer) {}
-            inline SharedChildPtr(const SharedChildPtr& other) : SharedPtr<Parent>(other) {}
-            inline const SharedChildPtr& operator=(const SharedChildPtr& other) { SharedPtr<Parent>::operator=(other); return *this; }
-            inline T* operator->() const { return static_cast<T*>(SharedPtr<Parent>::operator->()); }
-            inline T& operator*() const { return *static_cast<T*>(SharedPtr<Parent>::operator->()); }
+            inline SharedChildPtr() : Parent() {}
+            inline SharedChildPtr(T* pointer) : Parent(pointer) {}
+//            inline SharedChildPtr(const SharedChildPtr& other) : Parent(other) {}
+//            template <class O>
+//            inline SharedChildPtr(const SharedChildPtr<O, T>& other) : Parent(other) {}
+            inline SharedChildPtr(const SharedPtr<T>& other) : Parent(other) {}
+
+//            inline const SharedChildPtr& operator=(const SharedChildPtr& other) { Parent::operator=(other); return *this; }
+
+            inline T* operator->() const { return static_cast<T*>(Parent::operator->()); }
+            inline T& operator*() const { return *static_cast<T*>(Parent::operator->()); }
     };
-*/
+
 }
 
