Index: code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/BillboardProjectile.cc
===================================================================
--- code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/BillboardProjectile.cc	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/BillboardProjectile.cc	(revision 2497)
@@ -32,4 +32,5 @@
 #include <OgreBillboardSet.h>
 
+#include "core/Core.h"
 #include "core/CoreIncludes.h"
 #include "objects/Scene.h"
@@ -43,15 +44,18 @@
         RegisterObject(BillboardProjectile);
 
-        assert(this->getScene()->getSceneManager()); // getScene() was already checked by WorldEntity
+        if (Core::showsGraphics())
+        {
+            assert(this->getScene()->getSceneManager()); // getScene() was already checked by WorldEntity
+            this->billboard_.setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(0.5, 0.5, 0.7, 0.8), 1);
+            this->attachOgreObject(this->billboard_.getBillboardSet());
+        }
 
-        this->billboard_.setBillboardSet(this->getScene()->getSceneManager(), "Examples/Flare", ColourValue(0.5, 0.5, 0.7, 0.8), 1);
-        this->attachOgreObject(this->billboard_.getBillboardSet());
-        this->scale(0.2);
+        this->setScale(0.2);
     }
 
     BillboardProjectile::~BillboardProjectile()
     {
-        //if (this->isInitialized() && this->owner_)
-            //this->detachObject(this->billboard_.getBillboardSet());
+        if (this->isInitialized() && Core::showsGraphics() && this->billboard_.getBillboardSet())
+            this->detachOgreObject(this->billboard_.getBillboardSet());
     }
 
@@ -64,4 +68,5 @@
     {
         SUPER(BillboardProjectile, changedVisibility);
+
         this->billboard_.setVisible(this->isVisible());
     }
Index: code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc
===================================================================
--- code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.cc	(revision 2497)
@@ -33,5 +33,5 @@
 #include <OgreParticleEmitter.h>
 
-#include "../../worldentities/pawns/SpaceShip.h"
+#include "core/Core.h"
 #include "core/CoreIncludes.h"
 #include "core/ConfigValueIncludes.h"
@@ -46,20 +46,14 @@
         RegisterObject(ParticleProjectile);
 
-        this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot3_small", LODParticle::normal);
-        this->attachOgreObject(this->particles_->getParticleSystem());
-        this->particles_->setKeepParticlesInLocalSpace(0);
+        if (Core::showsGraphics())
+        {
+            this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot3_small", LODParticle::normal);
+            this->attachOgreObject(this->particles_->getParticleSystem());
+            this->particles_->setKeepParticlesInLocalSpace(0);
 
-        this->particles_->getAllEmitters()->setDirection(-WorldEntity::FRONT);
-        /*
-        if (this->owner_)
-        {
+            this->particles_->getAllEmitters()->setDirection(-WorldEntity::FRONT);
         }
-//        else
-//        {
-//            this->particles_ = 0;
-//        }
-        */
-
-        this->setConfigValues();
+        else
+            this->particles_ = 0;
     }
 
@@ -73,13 +67,10 @@
     }
 
-    void ParticleProjectile::setConfigValues()
-    {
-        //SetConfigValue(speed_, 5000.0).description("The speed of a projectile in units per second").callback((Projectile*)this, &ParticleProjectile::speedChanged);
-    }
-
     void ParticleProjectile::changedVisibility()
     {
         SUPER(ParticleProjectile, changedVisibility);
-        this->particles_->setEnabled(this->isVisible());
+
+        if (this->particles_)
+            this->particles_->setEnabled(this->isVisible());
     }
 }
Index: code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.h
===================================================================
--- code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.h	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/ParticleProjectile.h	(revision 2497)
@@ -44,5 +44,4 @@
             virtual ~ParticleProjectile();
             virtual void changedVisibility();
-            void setConfigValues();
 
         private:
Index: code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc
===================================================================
--- code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.cc	(revision 2497)
@@ -40,5 +40,4 @@
 #include "objects/worldentities/Model.h"
 #include "objects/worldentities/ParticleSpawner.h"
-#include "objects/worldentities/pawns/Pawn.h"
 #include "objects/collisionshapes/SphereCollisionShape.h"
 #include "core/Core.h"
@@ -63,5 +62,5 @@
         this->attachCollisionShape(shape);
 
-        if(!Core::isClient()) //only if not on client
+        if(Core::isMaster())
           this->destroyTimer_.setTimer(this->lifetime_, false, this, createExecutor(createFunctor(&Projectile::destroyObject)));
     }
@@ -91,16 +90,13 @@
     void Projectile::destroyObject()
     {
-        delete this;
+        if (Core::isMaster())
+            delete this;
     }
 
     bool Projectile::collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint)
     {
-        if (!this->bDestroy_)
+        if (!this->bDestroy_ && Core::isMaster())
         {
             this->bDestroy_ = true;
-            Pawn* victim = dynamic_cast<Pawn*>(otherObject);
-            if (victim)
-                victim->damage(this->damage_, this->owner_);
-
 
             if (this->owner_)
@@ -123,6 +119,16 @@
                 }
             }
+
+            Pawn* victim = dynamic_cast<Pawn*>(otherObject);
+            if (victim)
+                victim->damage(this->damage_, this->owner_);
         }
         return false;
     }
+
+    void Projectile::destroyedPawn(Pawn* pawn)
+    {
+        if (this->owner_ == pawn)
+            this->owner_ = 0;
+    }
 }
Index: code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.h
===================================================================
--- code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.h	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/weaponSystem/projectiles/Projectile.h	(revision 2497)
@@ -33,9 +33,10 @@
 
 #include "objects/worldentities/MovableEntity.h"
+#include "objects/worldentities/pawns/Pawn.h"
 #include "tools/Timer.h"
 
 namespace orxonox
 {
-    class _OrxonoxExport Projectile : public MovableEntity
+    class _OrxonoxExport Projectile : public MovableEntity, public PawnListener
     {
         public:
@@ -48,4 +49,5 @@
             virtual void tick(float dt);
             virtual bool collidesAgainst(WorldEntity* otherObject, btManifoldPoint& contactPoint);
+            virtual void destroyedPawn(Pawn* pawn);
 
             inline void setOwner(Pawn* owner)
Index: code/branches/presentation/src/orxonox/objects/worldentities/Camera.cc
===================================================================
--- code/branches/presentation/src/orxonox/objects/worldentities/Camera.cc	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/worldentities/Camera.cc	(revision 2497)
@@ -112,5 +112,5 @@
             this->cameraNode_->translate(coeff * offset);
 
-            this->cameraNode_->setOrientation(Quaternion::Slerp(coeff, this->cameraNode_->getWorldOrientation(), this->getWorldOrientation(), false));
+            this->cameraNode_->setOrientation(Quaternion::Slerp(coeff, this->cameraNode_->getWorldOrientation(), this->getWorldOrientation(), true));
             //this->cameraNode_->setOrientation(this->getWorldOrientation());
         }
Index: code/branches/presentation/src/orxonox/objects/worldentities/ParticleEmitter.cc
===================================================================
--- code/branches/presentation/src/orxonox/objects/worldentities/ParticleEmitter.cc	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/worldentities/ParticleEmitter.cc	(revision 2497)
@@ -102,5 +102,8 @@
     {
         if (this->particles_)
+        {
             delete this->particles_;
+            this->particles_ = 0;
+        }
 
         if (this->getScene() && this->getScene()->getSceneManager())
@@ -119,6 +122,4 @@
             }
         }
-        else
-            this->particles_ = 0;
     }
 
Index: code/branches/presentation/src/orxonox/objects/worldentities/WorldEntity.cc
===================================================================
--- code/branches/presentation/src/orxonox/objects/worldentities/WorldEntity.cc	(revision 2495)
+++ code/branches/presentation/src/orxonox/objects/worldentities/WorldEntity.cc	(revision 2497)
@@ -104,15 +104,13 @@
             this->node_->removeAllChildren();
 
+            if (this->physicalBody_)
+            {
+                this->deactivatePhysics();
+                delete this->physicalBody_;
+            }
+            delete this->collisionShape_;
+
             if (this->getScene()->getSceneManager())
                 this->getScene()->getSceneManager()->destroySceneNode(this->node_->getName());
-
-            // TODO: Detach from parent and detach all children.
-
-            if (this->physicalBody_)
-            {
-                this->deactivatePhysics();
-                delete this->physicalBody_;
-            }
-            delete this->collisionShape_;
         }
     }
