Index: code/branches/core4/src/core/EventIncludes.h
===================================================================
--- code/branches/core4/src/core/EventIncludes.h	(revision 3238)
+++ code/branches/core4/src/core/EventIncludes.h	(revision 3239)
@@ -54,5 +54,5 @@
         this->addEventContainer(eventname, containername); \
     } \
-    event.castedOriginator_ = orxonox::orxonox_cast<subclassname>(event.originator_); \
+    event.castedOriginator_ = orxonox::orxonox_cast<subclassname*>(event.originator_); \
     containername->process(this, event)
 
@@ -66,5 +66,5 @@
         this->addEventContainer(eventname, containername); \
     } \
-    event.castedOriginator_ = orxonox::orxonox_cast<subclassname>(event.originator_); \
+    event.castedOriginator_ = orxonox::orxonox_cast<subclassname*>(event.originator_); \
     containername->process(this, event)
 
Index: code/branches/core4/src/core/Identifier.h
===================================================================
--- code/branches/core4/src/core/Identifier.h	(revision 3238)
+++ code/branches/core4/src/core/Identifier.h	(revision 3239)
@@ -483,4 +483,30 @@
     // ###      orxonox_cast       ###
     // ###############################
+    //! Helper struct to have orxonox_cast<T*> instead of orxonox_cast<T>
+    template <class T, class U>
+    struct OrxonoxCaster
+    {
+        static T* cast(U* source)
+        {
+            // If you see this function in a compiler error description, it means
+            // you were misusing orxonox_cast. You must always cast to a pointer type!
+            *****T();
+        }
+    };
+
+    //! Helper struct to have orxonox_cast<T*> instead of orxonox_cast<T*>
+    template <class T, class U>
+    struct OrxonoxCaster<T*, U>
+    {
+        FORCEINLINE static T* cast(U* source)
+        {
+#ifdef ORXONOX_COMPILER_MSVC
+            return source->template getDerivedPointer<T>(ClassIdentifier<T>::getIdentifier()->getClassID());
+#else
+            return dynamic_cast<T*>(source);
+#endif
+        }
+    };
+
     /**
     @brief
@@ -495,11 +521,7 @@
     */
     template <class T, class U>
-    FORCEINLINE T* orxonox_cast(U* source)
-    {
-#ifdef ORXONOX_COMPILER_MSVC
-        return source->template getDerivedPointer<T>(ClassIdentifier<T>::getIdentifier()->getClassID());
-#else
-        return dynamic_cast<T*>(source);
-#endif
+    FORCEINLINE T orxonox_cast(U* source)
+    {
+        return OrxonoxCaster<T, U>::cast(source);
     }
 
@@ -597,5 +619,5 @@
                 if (newObject)
                 {
-                    return orxonox_cast<T>(newObject);
+                    return orxonox_cast<T*>(newObject);
                 }
                 else
Index: code/branches/core4/src/core/Iterator.h
===================================================================
--- code/branches/core4/src/core/Iterator.h	(revision 3238)
+++ code/branches/core4/src/core/Iterator.h	(revision 3239)
@@ -240,5 +240,5 @@
             {
                 if (this->element_)
-                    return orxonox_cast<T>(this->element_->objectBase_);
+                    return orxonox_cast<T*>(this->element_->objectBase_);
                 else
                     return 0;
@@ -252,5 +252,5 @@
             {
                 if (this->element_)
-                    return orxonox_cast<T>(this->element_->objectBase_);
+                    return orxonox_cast<T*>(this->element_->objectBase_);
                 else
                     return 0;
Index: code/branches/core4/src/core/XMLPort.h
===================================================================
--- code/branches/core4/src/core/XMLPort.h	(revision 3238)
+++ code/branches/core4/src/core/XMLPort.h	(revision 3239)
@@ -565,5 +565,5 @@
                                                     newObject->setLoaderIndentation(object->getLoaderIndentation() + "  ");
 
-                                                    O* castedObject = orxonox_cast<O>(newObject);
+                                                    O* castedObject = orxonox_cast<O*>(newObject);
                                                     assert(castedObject);
 
Index: code/branches/core4/src/network/NetworkFunction.h
===================================================================
--- code/branches/core4/src/network/NetworkFunction.h	(revision 3238)
+++ code/branches/core4/src/network/NetworkFunction.h	(revision 3239)
@@ -150,30 +150,30 @@
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)));
+        (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)));
     }
     inline void call(uint32_t objectID, const MultiType& mt1)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1);
+        (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2);
+        (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3);
+        (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4);
+        (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4);
     }
     inline void call(uint32_t objectID, const MultiType& mt1, const MultiType& mt2, const MultiType& mt3, const MultiType& mt4, const MultiType& mt5)
     { 
       if ( Synchronisable::getSynchronisable(objectID)!=0 )
-        (*this->functor_)(orxonox_cast<T>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4, mt5);
+        (*this->functor_)(orxonox_cast<T*>(Synchronisable::getSynchronisable(objectID)), mt1, mt2, mt3, mt4, mt5);
     }
     
Index: code/branches/core4/src/network/synchronisable/Synchronisable.cc
===================================================================
--- code/branches/core4/src/network/synchronisable/Synchronisable.cc	(revision 3238)
+++ code/branches/core4/src/network/synchronisable/Synchronisable.cc	(revision 3239)
@@ -73,5 +73,5 @@
     if (creator)
     {
-        Synchronisable* synchronisable_creator = orxonox_cast<Synchronisable>(creator);
+        Synchronisable* synchronisable_creator = orxonox_cast<Synchronisable*>(creator);
         if (synchronisable_creator && synchronisable_creator->objectMode_)
         {
@@ -161,10 +161,10 @@
       }
       else
-        creator = orxonox_cast<BaseObject>(synchronisable_creator);
+        creator = orxonox_cast<BaseObject*>(synchronisable_creator);
     }
     assert(getSynchronisable(header.getObjectID())==0);   //make sure no object with this id exists
     BaseObject *bo = id->fabricate(creator);
     assert(bo);
-    Synchronisable *no = orxonox_cast<Synchronisable>(bo);
+    Synchronisable *no = orxonox_cast<Synchronisable*>(bo);
     assert(no);
     no->objectID=header.getObjectID();
Index: code/branches/core4/src/orxonox/objects/Level.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/Level.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/Level.cc	(revision 3239)
@@ -121,5 +121,5 @@
 std::cout << "Load Gametype: " << this->gametype_ << std::endl;
 
-        Gametype* rootgametype = orxonox_cast<Gametype>(identifier->fabricate(this));
+        Gametype* rootgametype = orxonox_cast<Gametype*>(identifier->fabricate(this));
         this->setGametype(rootgametype);
 
Index: code/branches/core4/src/orxonox/objects/Scene.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/Scene.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/Scene.cc	(revision 3239)
@@ -326,7 +326,7 @@
         // get the WorldEntity pointers
         WorldEntity* object0 = (WorldEntity*)colObj0->getUserPointer();
-        assert(orxonox_cast<WorldEntity>(object0));
+        assert(orxonox_cast<WorldEntity*>(object0));
         WorldEntity* object1 = (WorldEntity*)colObj1->getUserPointer();
-        assert(orxonox_cast<WorldEntity>(object1));
+        assert(orxonox_cast<WorldEntity*>(object1));
 
         // false means that bullet will assume we didn't modify the contact
Index: code/branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/collisionshapes/CollisionShape.cc	(revision 3239)
@@ -85,10 +85,10 @@
         // Parent can either be a WorldEntity or a CompoundCollisionShape. The reason is that the
         // internal collision shape (which is compound) of a WE doesn't get synchronised.
-        CompoundCollisionShape* parentCCS = orxonox_cast<CompoundCollisionShape>(parent);
+        CompoundCollisionShape* parentCCS = orxonox_cast<CompoundCollisionShape*>(parent);
         if (parentCCS)
             parentCCS->attach(this);
         else
         {
-            WorldEntity* parentWE = orxonox_cast<WorldEntity>(parent);
+            WorldEntity* parentWE = orxonox_cast<WorldEntity*>(parent);
             if (parentWE)
                 parentWE->attachCollisionShape(this);
@@ -103,5 +103,5 @@
         this->parent_ = newParent;
 
-        WorldEntityCollisionShape* parentWECCS = orxonox_cast<WorldEntityCollisionShape>(newParent);
+        WorldEntityCollisionShape* parentWECCS = orxonox_cast<WorldEntityCollisionShape*>(newParent);
         if (parentWECCS)
             this->parentID_ = parentWECCS->getWorldEntityOwner()->getObjectID();
Index: code/branches/core4/src/orxonox/objects/controllers/ArtificialController.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/controllers/ArtificialController.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/controllers/ArtificialController.cc	(revision 3239)
@@ -181,5 +181,5 @@
         if (entity1->getXMLController())
         {
-            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController>(entity1->getXMLController());
+            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController*>(entity1->getXMLController());
             if (wpc)
                 team1 = wpc->getTeam();
@@ -187,10 +187,10 @@
         if (entity2->getXMLController())
         {
-            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController>(entity2->getXMLController());
+            WaypointPatrolController* wpc = orxonox_cast<WaypointPatrolController*>(entity2->getXMLController());
             if (wpc)
                 team2 = wpc->getTeam();
         }
 
-        TeamDeathmatch* tdm = orxonox_cast<TeamDeathmatch>(gametype);
+        TeamDeathmatch* tdm = orxonox_cast<TeamDeathmatch*>(gametype);
         if (tdm)
         {
@@ -203,5 +203,5 @@
 
         TeamBaseMatchBase* base = 0;
-        base = orxonox_cast<TeamBaseMatchBase>(entity1);
+        base = orxonox_cast<TeamBaseMatchBase*>(entity1);
         if (base)
         {
@@ -219,5 +219,5 @@
             }
         }
-        base = orxonox_cast<TeamBaseMatchBase>(entity2);
+        base = orxonox_cast<TeamBaseMatchBase*>(entity2);
         if (base)
         {
Index: code/branches/core4/src/orxonox/objects/controllers/HumanController.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/controllers/HumanController.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/controllers/HumanController.cc	(revision 3239)
@@ -161,5 +161,5 @@
         if (HumanController::localController_s && HumanController::localController_s->controllableEntity_)
         {
-            Pawn* pawn = orxonox_cast<Pawn>(HumanController::localController_s->controllableEntity_);
+            Pawn* pawn = orxonox_cast<Pawn*>(HumanController::localController_s->controllableEntity_);
             if (pawn)
                 pawn->kill();
@@ -196,5 +196,5 @@
     {
         if (HumanController::localController_s)
-            return orxonox_cast<Pawn>(HumanController::localController_s->getControllableEntity());
+            return orxonox_cast<Pawn*>(HumanController::localController_s->getControllableEntity());
         else
             return NULL;
Index: code/branches/core4/src/orxonox/objects/gametypes/Pong.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/gametypes/Pong.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/gametypes/Pong.cc	(revision 3239)
@@ -144,5 +144,5 @@
         if (player && player->getController() && player->getController()->isA(Class(PongAI)))
         {
-            PongAI* ai = orxonox_cast<PongAI>(player->getController());
+            PongAI* ai = orxonox_cast<PongAI*>(player->getController());
             ai->setPongBall(this->ball_);
         }
Index: code/branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/gametypes/TeamBaseMatch.cc	(revision 3239)
@@ -54,5 +54,5 @@
     bool TeamBaseMatch::allowPawnDeath(Pawn* victim, Pawn* originator)
     {
-        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase>(victim);
+        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase*>(victim);
         if (base)
         {
@@ -87,5 +87,5 @@
     bool TeamBaseMatch::allowPawnDamage(Pawn* victim, Pawn* originator)
     {
-        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase>(victim);
+        TeamBaseMatchBase* base = orxonox_cast<TeamBaseMatchBase*>(victim);
         if (base)
         {
Index: code/branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/gametypes/TeamDeathmatch.cc	(revision 3239)
@@ -126,5 +126,5 @@
             if ((*it)->isA(Class(TeamSpawnPoint)))
             {
-                TeamSpawnPoint* tsp = orxonox_cast<TeamSpawnPoint>(*it);
+                TeamSpawnPoint* tsp = orxonox_cast<TeamSpawnPoint*>(*it);
                 if (tsp && (int)tsp->getTeamNumber() != desiredTeamNr)
                 {
@@ -171,5 +171,5 @@
                     if ((*it)->isA(Class(TeamColourable)))
                     {
-                        TeamColourable* tc = orxonox_cast<TeamColourable>(*it);
+                        TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
                         tc->setTeamColour(this->teamcolours_[it_player->second]);
                     }
Index: code/branches/core4/src/orxonox/objects/infos/PlayerInfo.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/infos/PlayerInfo.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/infos/PlayerInfo.cc	(revision 3239)
@@ -186,5 +186,5 @@
         {
             Synchronisable* temp = Synchronisable::getSynchronisable(this->controllableEntityID_);
-            ControllableEntity* entity = orxonox_cast<ControllableEntity>(temp);
+            ControllableEntity* entity = orxonox_cast<ControllableEntity*>(temp);
             this->startControl(entity);
         }
@@ -199,5 +199,5 @@
         if (this->gtinfoID_ != OBJECTID_UNKNOWN)
         {
-            this->gtinfo_ = orxonox_cast<GametypeInfo>(Synchronisable::getSynchronisable(this->gtinfoID_));
+            this->gtinfo_ = orxonox_cast<GametypeInfo*>(Synchronisable::getSynchronisable(this->gtinfoID_));
 
             if (!this->gtinfo_)
Index: code/branches/core4/src/orxonox/objects/items/Engine.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/items/Engine.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/items/Engine.cc	(revision 3239)
@@ -138,5 +138,5 @@
             Synchronisable* object = Synchronisable::getSynchronisable(this->shipID_);
             if (object)
-                this->addToSpaceShip(orxonox_cast<SpaceShip>(object));
+                this->addToSpaceShip(orxonox_cast<SpaceShip*>(object));
         }
     }
Index: code/branches/core4/src/orxonox/objects/pickup/PickupCollection.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/pickup/PickupCollection.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/pickup/PickupCollection.cc	(revision 3239)
@@ -66,5 +66,5 @@
             Identifier* ident = Class(UsableItem);
             if(this->currentUsable_ == NULL && item->isA(ident))
-                this->currentUsable_ = orxonox_cast<UsableItem>(item);
+                this->currentUsable_ = orxonox_cast<UsableItem*>(item);
 
             this->items_.insert( std::pair<std::string, BaseItem*> (item->getPickupIdentifier(), item) );
@@ -336,5 +336,5 @@
         {
             if ((*it).second->isA(ident))
-                ret.push_back(orxonox_cast<EquipmentItem>((*it).second));
+                ret.push_back(orxonox_cast<EquipmentItem*>((*it).second));
         }
 
@@ -353,5 +353,5 @@
         {
             if ((*it).second->isA(ident))
-                ret.push_back(orxonox_cast<PassiveItem>((*it).second));
+                ret.push_back(orxonox_cast<PassiveItem*>((*it).second));
         }
 
@@ -370,5 +370,5 @@
         {
             if ((*it).second->isA(ident))
-                ret.push_back(orxonox_cast<UsableItem>((*it).second));
+                ret.push_back(orxonox_cast<UsableItem*>((*it).second));
         }
 
Index: code/branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/pickup/PickupSpawner.cc	(revision 3239)
@@ -86,5 +86,5 @@
         //  = less delays while running
         BaseObject* newObject = this->itemTemplate_->getBaseclassIdentifier()->fabricate(this);
-        BaseItem* asItem = orxonox_cast<BaseItem>(newObject);
+        BaseItem* asItem = orxonox_cast<BaseItem*>(newObject);
         if (asItem)
         {
@@ -154,5 +154,5 @@
         {
             BaseObject* newObject = this->itemTemplate_->getBaseclassIdentifier()->fabricate(this);
-            BaseItem* asItem = orxonox_cast<BaseItem>(newObject);
+            BaseItem* asItem = orxonox_cast<BaseItem*>(newObject);
             if (asItem)
             {
Index: code/branches/core4/src/orxonox/objects/quest/QuestManager.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/quest/QuestManager.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/quest/QuestManager.cc	(revision 3239)
@@ -239,5 +239,5 @@
             return NULL;
         }
-        player = orxonox_cast<PlayerInfo>(obj);
+        player = orxonox_cast<PlayerInfo*>(obj);
     
         QuestContainer* root = NULL;
Index: code/branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/weaponsystem/projectiles/Projectile.cc	(revision 3239)
@@ -126,5 +126,5 @@
                 dmg = this->owner_->getPickups().processModifiers(ModifierType::Damage, dmg, false);
 
-            Pawn* victim = orxonox_cast<Pawn>(otherObject);
+            Pawn* victim = orxonox_cast<Pawn*>(otherObject);
             if (victim)
                 victim->damage(dmg, this->owner_);
Index: code/branches/core4/src/orxonox/objects/worldentities/Attacher.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/Attacher.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/Attacher.cc	(revision 3239)
@@ -111,5 +111,5 @@
             return;
 
-        WorldEntity* entity = orxonox_cast<WorldEntity>(object);
+        WorldEntity* entity = orxonox_cast<WorldEntity*>(object);
         if (entity && entity->getName() == this->targetname_)
         {
Index: code/branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/BigExplosion.cc	(revision 3239)
@@ -99,37 +99,37 @@
         Identifier* idDE1 = Class(MovableEntity);
         BaseObject* oDE1 = idDE1->fabricate(this);
-        this->debrisEntity1_ = orxonox_cast<MovableEntity>(oDE1);
+        this->debrisEntity1_ = orxonox_cast<MovableEntity*>(oDE1);
 
         Identifier* idDE2 = Class(MovableEntity);
         BaseObject* oDE2 = idDE2->fabricate(this);
-        this->debrisEntity2_ = orxonox_cast<MovableEntity>(oDE2);
+        this->debrisEntity2_ = orxonox_cast<MovableEntity*>(oDE2);
 
         Identifier* idDE3 = Class(MovableEntity);
         BaseObject* oDE3 = idDE3 ->fabricate(this);
-        this->debrisEntity3_ = orxonox_cast<MovableEntity>(oDE3);
+        this->debrisEntity3_ = orxonox_cast<MovableEntity*>(oDE3);
 
         Identifier* idDE4 = Class(MovableEntity);
         BaseObject* oDE4 = idDE4->fabricate(this);
-        this->debrisEntity4_ = orxonox_cast<MovableEntity>(oDE4);
+        this->debrisEntity4_ = orxonox_cast<MovableEntity*>(oDE4);
 
         Identifier* idD1 = Class(Model);
         BaseObject* oD1 = idD1->fabricate(this);
-        this->debris1_ = orxonox_cast<Model>(oD1);
+        this->debris1_ = orxonox_cast<Model*>(oD1);
 
         Identifier* idD2 = Class(Model);
         BaseObject* oD2 = idD2->fabricate(this);
-        this->debris2_ = orxonox_cast<Model>(oD2);
+        this->debris2_ = orxonox_cast<Model*>(oD2);
 
         Identifier* idD3 = Class(Model);
         BaseObject* oD3 = idD3->fabricate(this);
-        this->debris3_ = orxonox_cast<Model>(oD3);
+        this->debris3_ = orxonox_cast<Model*>(oD3);
 
         Identifier* idD4 = Class(Model);
         BaseObject* oD4 = idD4->fabricate(this);
-        this->debris4_ = orxonox_cast<Model>(oD4);
+        this->debris4_ = orxonox_cast<Model*>(oD4);
 
         Identifier* id6 = Class(StaticEntity);
         BaseObject* object4 = id6->fabricate(this);
-        this->explosion_ = orxonox_cast<StaticEntity>(object4);
+        this->explosion_ = orxonox_cast<StaticEntity*>(object4);
 
         this->debrisSmoke1_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/smoke7", this->LOD_);
@@ -202,18 +202,18 @@
             Identifier* idf1 = Class(Model);
             BaseObject* obj1 = idf1->fabricate(this);
-            Model* part1 = orxonox_cast<Model>(obj1);
+            Model* part1 = orxonox_cast<Model*>(obj1);
 
 
             Identifier* idf2 = Class(Model);
             BaseObject* obj2 = idf2->fabricate(this);
-            Model* part2 = orxonox_cast<Model>(obj2);
+            Model* part2 = orxonox_cast<Model*>(obj2);
 
             Identifier* idf3 = Class(MovableEntity);
             BaseObject* obj3 = idf3->fabricate(this);
-            MovableEntity* partEntity1 = orxonox_cast<MovableEntity>(obj3);
+            MovableEntity* partEntity1 = orxonox_cast<MovableEntity*>(obj3);
 
             Identifier* idf4 = Class(MovableEntity);
             BaseObject* obj4 = idf4->fabricate(this);
-            MovableEntity* partEntity2 = orxonox_cast<MovableEntity>(obj4);
+            MovableEntity* partEntity2 = orxonox_cast<MovableEntity*>(obj4);
 
             partEntity1->setVelocity(Vector3(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1))*rnd(10,100));
Index: code/branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/ControllableEntity.cc	(revision 3239)
@@ -267,5 +267,5 @@
         if (this->playerID_ != OBJECTID_UNKNOWN)
         {
-            this->player_ = orxonox_cast<PlayerInfo>(Synchronisable::getSynchronisable(this->playerID_));
+            this->player_ = orxonox_cast<PlayerInfo*>(Synchronisable::getSynchronisable(this->playerID_));
             if (this->player_ && (this->player_->getControllableEntity() != this))
                 this->player_->startControl(this);
Index: code/branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/MovableEntity.cc	(revision 3239)
@@ -76,5 +76,5 @@
         if (GameMode::isMaster() && enableCollisionDamage_)
         {
-            Pawn* victim = orxonox_cast<Pawn>(otherObject);
+            Pawn* victim = orxonox_cast<Pawn*>(otherObject);
             if (victim)
             {
Index: code/branches/core4/src/orxonox/objects/worldentities/PongBall.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/PongBall.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/PongBall.cc	(revision 3239)
@@ -231,7 +231,7 @@
             this->bat_ = new PongBat*[2];
         if (this->batID_[0] != OBJECTID_UNKNOWN)
-            this->bat_[0] = orxonox_cast<PongBat>(Synchronisable::getSynchronisable(this->batID_[0]));
+            this->bat_[0] = orxonox_cast<PongBat*>(Synchronisable::getSynchronisable(this->batID_[0]));
         if (this->batID_[1] != OBJECTID_UNKNOWN)
-            this->bat_[1] = orxonox_cast<PongBat>(Synchronisable::getSynchronisable(this->batID_[1]));
+            this->bat_[1] = orxonox_cast<PongBat*>(Synchronisable::getSynchronisable(this->batID_[1]));
     }
 }
Index: code/branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/PongCenterpoint.cc	(revision 3239)
@@ -73,5 +73,5 @@
         if (this->getGametype() && this->getGametype()->isA(Class(Pong)))
         {
-            Pong* pong_gametype = orxonox_cast<Pong>(this->getGametype());
+            Pong* pong_gametype = orxonox_cast<Pong*>(this->getGametype());
             pong_gametype->setCenterpoint(this);
         }
Index: code/branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/WorldEntity.cc	(revision 3239)
@@ -210,5 +210,5 @@
         if (this->parentID_ != OBJECTID_UNKNOWN)
         {
-            WorldEntity* parent = orxonox_cast<WorldEntity>(Synchronisable::getSynchronisable(this->parentID_));
+            WorldEntity* parent = orxonox_cast<WorldEntity*>(Synchronisable::getSynchronisable(this->parentID_));
             if (parent)
                 this->attachToParent(parent);
Index: code/branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/pawns/Destroyer.cc	(revision 3239)
@@ -40,5 +40,5 @@
         RegisterObject(Destroyer);
 
-        UnderAttack* gametype = orxonox_cast<UnderAttack>(this->getGametype());
+        UnderAttack* gametype = orxonox_cast<UnderAttack*>(this->getGametype());
         if (gametype)
         {
Index: code/branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/pawns/SpaceShip.cc	(revision 3239)
@@ -198,5 +198,5 @@
                 {
                     BaseObject* object = identifier->fabricate(this);
-                    this->engine_ = orxonox_cast<Engine>(object);
+                    this->engine_ = orxonox_cast<Engine*>(object);
 
                     if (this->engine_)
Index: code/branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/pawns/TeamBaseMatchBase.cc	(revision 3239)
@@ -45,5 +45,5 @@
         this->state_ = BaseState::uncontrolled;
 
-        TeamBaseMatch* gametype = orxonox_cast<TeamBaseMatch>(this->getGametype());
+        TeamBaseMatch* gametype = orxonox_cast<TeamBaseMatch*>(this->getGametype());
         if (gametype)
         {
@@ -58,5 +58,5 @@
         this->fireEvent();
 
-        TeamDeathmatch* gametype = orxonox_cast<TeamDeathmatch>(this->getGametype());
+        TeamDeathmatch* gametype = orxonox_cast<TeamDeathmatch*>(this->getGametype());
         if (!gametype)
             return;
@@ -84,5 +84,5 @@
             if ((*it)->isA(Class(TeamColourable)))
             {
-                TeamColourable* tc = orxonox_cast<TeamColourable>(*it);
+                TeamColourable* tc = orxonox_cast<TeamColourable*>(*it);
                 tc->setTeamColour(colour);
             }
Index: code/branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/triggers/CheckPoint.cc	(revision 3239)
@@ -85,5 +85,5 @@
         DistanceTrigger::triggered(bIsTriggered);
 
-        Asteroids* gametype = orxonox_cast<Asteroids>(this->getGametype());
+        Asteroids* gametype = orxonox_cast<Asteroids*>(this->getGametype());
         if (gametype)
         {
Index: code/branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc
===================================================================
--- code/branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/objects/worldentities/triggers/DistanceTrigger.cc	(revision 3239)
@@ -120,5 +120,5 @@
     for (ClassTreeMaskObjectIterator it = this->targetMask_.begin(); it != this->targetMask_.end(); ++it)
     {
-      WorldEntity* entity = orxonox_cast<WorldEntity>(*it);
+      WorldEntity* entity = orxonox_cast<WorldEntity*>(*it);
       if (!entity)
         continue;
@@ -131,5 +131,5 @@
         if(this->isForPlayer())
         {
-          Pawn* player = orxonox_cast<Pawn>(entity);
+          Pawn* player = orxonox_cast<Pawn*>(entity);
           this->setTriggeringPlayer(player);
         }
Index: code/branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/AnnounceMessage.cc	(revision 3239)
@@ -56,5 +56,5 @@
         SUPER(AnnounceMessage, changedOwner);
 
-        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/DeathMessage.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/DeathMessage.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/DeathMessage.cc	(revision 3239)
@@ -56,5 +56,5 @@
         SUPER(DeathMessage, changedOwner);
 
-        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/GametypeStatus.cc	(revision 3239)
@@ -86,5 +86,5 @@
         SUPER(GametypeStatus, changedOwner);
 
-        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/HUDHealthBar.cc	(revision 3239)
@@ -94,5 +94,5 @@
         SUPER(HUDHealthBar, changedOwner);
 
-        this->owner_ = orxonox_cast<Pawn>(this->getOwner());
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
     }
 
Index: code/branches/core4/src/orxonox/overlays/hud/HUDRadar.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/HUDRadar.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/HUDRadar.cc	(revision 3239)
@@ -164,5 +164,5 @@
         SUPER(HUDRadar, changedOwner);
 
-        this->owner_ = orxonox_cast<Pawn>(this->getOwner());
+        this->owner_ = orxonox_cast<Pawn*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/HUDSpeedBar.cc	(revision 3239)
@@ -65,5 +65,5 @@
         SUPER(HUDSpeedBar, changedOwner);
 
-        this->owner_ = orxonox_cast<SpaceShip>(this->getOwner());
+        this->owner_ = orxonox_cast<SpaceShip*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/HUDTimer.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/HUDTimer.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/HUDTimer.cc	(revision 3239)
@@ -68,5 +68,5 @@
         SUPER(HUDTimer, changedOwner);
 
-        this->owner_ = orxonox_cast<ControllableEntity>(this->getOwner());
+        this->owner_ = orxonox_cast<ControllableEntity*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/KillMessage.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/KillMessage.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/KillMessage.cc	(revision 3239)
@@ -56,5 +56,5 @@
         SUPER(KillMessage, changedOwner);
 
-        this->owner_ = orxonox_cast<PlayerInfo>(this->getOwner());
+        this->owner_ = orxonox_cast<PlayerInfo*>(this->getOwner());
     }
 }
Index: code/branches/core4/src/orxonox/overlays/hud/PongScore.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/PongScore.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/PongScore.cc	(revision 3239)
@@ -133,5 +133,5 @@
 
         if (this->getOwner() && this->getOwner()->getGametype())
-            this->owner_ = orxonox_cast<Pong>(this->getOwner()->getGametype());
+            this->owner_ = orxonox_cast<Pong*>(this->getOwner()->getGametype());
         else
             this->owner_ = 0;
Index: code/branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/TeamBaseMatchScore.cc	(revision 3239)
@@ -118,5 +118,5 @@
 
         if (this->getOwner() && this->getOwner()->getGametype())
-            this->owner_ = orxonox_cast<TeamBaseMatch>(this->getOwner()->getGametype());
+            this->owner_ = orxonox_cast<TeamBaseMatch*>(this->getOwner()->getGametype());
         else
             this->owner_ = 0;
Index: code/branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/hud/UnderAttackHealthBar.cc	(revision 3239)
@@ -73,10 +73,10 @@
         SUPER(UnderAttackHealthBar, changedOwner);
 
-        PlayerInfo* player = orxonox_cast<PlayerInfo>(this->getOwner());
+        PlayerInfo* player = orxonox_cast<PlayerInfo*>(this->getOwner());
         if (player)
         {
             this->owner_ = player;
 
-            UnderAttack* ua = orxonox_cast<UnderAttack>(player->getGametype());
+            UnderAttack* ua = orxonox_cast<UnderAttack*>(player->getGametype());
             if (ua)
             {
Index: code/branches/core4/src/orxonox/overlays/map/Map.cc
===================================================================
--- code/branches/core4/src/orxonox/overlays/map/Map.cc	(revision 3238)
+++ code/branches/core4/src/orxonox/overlays/map/Map.cc	(revision 3239)
@@ -359,5 +359,5 @@
         //COUT(0) << "shipptr" << this->getOwner()->getReverseCamera() << std::endl;
 
-        ControllableEntity* entity = orxonox_cast<ControllableEntity>(this->getOwner());
+        ControllableEntity* entity = orxonox_cast<ControllableEntity*>(this->getOwner());
         if(entity && entity->getReverseCamera())
         {
