Index: code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.cc	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/objects/GlobalShader.cc	(revision 2414)
@@ -44,7 +44,7 @@
 
         if (!this->getScene())
-            ThrowException(AbortLoading, "Can't create Camera, no scene given.");
+            ThrowException(AbortLoading, "Can't create GlobalShader, no scene given.");
         if (!this->getScene()->getSceneManager())
-            ThrowException(AbortLoading, "Can't create Camera, no scene manager given.");
+            ThrowException(AbortLoading, "Can't create GlobalShader, no scene manager given.");
 
         this->shader_.setSceneManager(this->getScene()->getSceneManager());
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/Backlight.cc	(revision 2414)
@@ -61,9 +61,9 @@
         {
             if (!this->getScene())
-                ThrowException(AbortLoading, "Can't create Camera, no scene given.");
+                ThrowException(AbortLoading, "Can't create Backlight, no scene given.");
             if (!this->getScene()->getSceneManager())
-                ThrowException(AbortLoading, "Can't create Camera, no scene manager given.");
+                ThrowException(AbortLoading, "Can't create Backlight, no scene manager given.");
             if (!this->getScene()->getRootSceneNode())
-                ThrowException(AbortLoading, "Can't create Camera, no root scene node given.");
+                ThrowException(AbortLoading, "Can't create Backlight, no root scene node given.");
 
             this->ribbonTrail_ = this->getScene()->getSceneManager()->createRibbonTrail(this->getNode()->getName());
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/CMakeLists.txt
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/CMakeLists.txt	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/CMakeLists.txt	(revision 2414)
@@ -8,4 +8,5 @@
   Billboard.cc
   BlinkingBillboard.cc
+  ExplosionChunk.cc
   FadingBillboard.cc
   Light.cc
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.cc	(revision 2414)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.cc	(revision 2414)
@@ -0,0 +1,136 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#include "OrxonoxStableHeaders.h"
+#include "ExplosionChunk.h"
+
+#include "core/CoreIncludes.h"
+#include "core/Executor.h"
+#include "objects/Scene.h"
+#include "tools/ParticleInterface.h"
+#include "util/Exception.h"
+
+namespace orxonox
+{
+    CreateFactory(ExplosionChunk);
+
+    ExplosionChunk::ExplosionChunk(BaseObject* creator) : MovableEntity(creator)
+    {
+        RegisterObject(ExplosionChunk);
+
+        if (!this->getScene() || !this->getScene()->getSceneManager())
+            ThrowException(AbortLoading, "Can't create ExplosionChunk, no scene or no scene manager given.");
+
+        this->LOD_ = LODParticle::normal;
+
+        try
+        {
+            this->fire_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/fire4", this->LOD_);
+            this->fire_->addToSceneNode(this->getNode());
+            this->smoke_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/smoke7", this->LOD_);
+            this->smoke_->addToSceneNode(this->getNode());
+        }
+        catch (...)
+        {
+            COUT(1) << "Error: Couln't load particle effect in ExplosionChunk." << std::endl;
+            this->fire_ = 0;
+            this->smoke_ = 0;
+        }
+
+        Vector3 velocity(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1));
+        velocity.normalise();
+        velocity *= rnd(40, 60);
+        this->setVelocity(velocity);
+
+        this->destroyTimer_.setTimer(rnd(1, 2), false, this, createExecutor(createFunctor(&ExplosionChunk::stop)));
+
+        this->registerVariables();
+    }
+
+    ExplosionChunk::~ExplosionChunk()
+    {
+        if (this->isInitialized())
+        {
+            if (this->fire_)
+                delete this->fire_;
+            if (this->smoke_)
+                delete this->smoke_;
+        }
+    }
+
+    void ExplosionChunk::registerVariables()
+    {
+        REGISTERDATA(this->LOD_, direction::toclient, new NetworkCallback<ExplosionChunk>(this, &ExplosionChunk::LODchanged));
+    }
+
+    void ExplosionChunk::LODchanged()
+    {
+        if (this->fire_)
+            this->fire_->setDetailLevel(this->LOD_);
+        if (this->smoke_)
+            this->smoke_->setDetailLevel(this->LOD_);
+    }
+
+    void ExplosionChunk::stop()
+    {
+        if (this->fire_)
+            this->fire_->setEnabled(false);
+        if (this->smoke_)
+            this->smoke_->setEnabled(false);
+
+        this->destroyTimer_.setTimer(1.0f, false, this, createExecutor(createFunctor(&ExplosionChunk::destroy)));
+    }
+
+    void ExplosionChunk::destroy()
+    {
+        delete this;
+    }
+
+    void ExplosionChunk::tick(float dt)
+    {
+        static const unsigned int CHANGES_PER_SECOND = 5;
+
+        if (rnd() < dt*CHANGES_PER_SECOND)
+        {
+            float length = this->getVelocity().length();
+
+            Vector3 change(rnd(-1, 1), rnd(-1, 1), rnd(-1, 1));
+            change.normalise();
+            change *= rnd(0.4, 0.8);
+            Vector3 velocity = this->getVelocity();
+            velocity.normalise();
+            velocity += change;
+            velocity.normalise();
+            velocity *= length * rnd(0.8, 1.0);
+
+            this->setVelocity(velocity);
+        }
+
+        SUPER(ExplosionChunk, tick, dt);
+    }
+}
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.h	(revision 2414)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ExplosionChunk.h	(revision 2414)
@@ -0,0 +1,65 @@
+/*
+ *   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:
+ *      ...
+ *
+ */
+
+#ifndef _ExplosionChunk_H__
+#define _ExplosionChunk_H__
+
+#include "OrxonoxPrereqs.h"
+
+#include "MovableEntity.h"
+#include "tools/Timer.h"
+
+namespace orxonox
+{
+    class _OrxonoxExport ExplosionChunk : public MovableEntity
+    {
+        public:
+            ExplosionChunk(BaseObject* creator);
+            virtual ~ExplosionChunk();
+
+            virtual void tick(float dt);
+            void registerVariables();
+
+            inline void setLOD(LODParticle::LOD level)
+                { this->LOD_ = level; this->LODchanged(); }
+            inline LODParticle::LOD getLOD() const
+                { return this->LOD_; }
+
+        private:
+            void LODchanged();
+            void stop();
+            void destroy();
+
+            ParticleInterface*    fire_;
+            ParticleInterface*    smoke_;
+            LODParticle::LOD      LOD_;
+            Timer<ExplosionChunk> destroyTimer_;
+    };
+}
+
+#endif /* _ExplosionChunk_H__ */
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ParticleEmitter.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ParticleEmitter.cc	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/ParticleEmitter.cc	(revision 2414)
@@ -51,5 +51,5 @@
 
         if (!this->getScene() || !this->getScene()->getSceneManager())
-            ThrowException(AbortLoading, "Can't create Camera, no scene or no scene manager given.");
+            ThrowException(AbortLoading, "Can't create ParticleEmitter, no scene or no scene manager given.");
 
         this->particles_ = 0;
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.cc	(revision 2414)
@@ -37,4 +37,6 @@
 #include "objects/gametypes/Gametype.h"
 #include "objects/weaponSystem/WeaponSystem.h"
+#include "objects/worldentities/ParticleSpawner.h"
+#include "objects/worldentities/ExplosionChunk.h"
 
 namespace orxonox
@@ -56,4 +58,6 @@
         this->lastHitOriginator_ = 0;
         this->weaponSystem_ = 0;
+
+        this->spawnparticleduration_ = 3.0f;
 
         /*
@@ -87,4 +91,7 @@
         XMLPortParam(Pawn, "maxhealth", setMaxHealth, getMaxHealth, xmlelement, mode).defaultValues(200);
         XMLPortParam(Pawn, "initialhealth", setInitialHealth, getInitialHealth, xmlelement, mode).defaultValues(100);
+        XMLPortParam(Pawn, "spawnparticlesource", setSpawnParticleSource, getSpawnParticleSource, xmlelement, mode);
+        XMLPortParam(Pawn, "spawnparticleduration", setSpawnParticleDuration, getSpawnParticleDuration, xmlelement, mode).defaultValues(3.0f);
+        XMLPortParam(Pawn, "explosionchunks", setExplosionChunks, getExplosionChunks, xmlelement, mode).defaultValues(7);
     }
 
@@ -133,7 +140,16 @@
     }
 
-    void Pawn::spawn()
+    void Pawn::spawneffect()
     {
         // play spawn effect
+        if (this->spawnparticlesource_ != "")
+        {
+            ParticleSpawner* effect = new ParticleSpawner(this);
+            effect->setPosition(this->getPosition());
+            effect->setOrientation(this->getOrientation());
+            effect->setDestroyAfterLife(true);
+            effect->setSource(this->spawnparticlesource_);
+            effect->setLifetime(this->spawnparticleduration_);
+        }
     }
 
@@ -151,5 +167,40 @@
             this->getPlayer()->stopControl(this);
 
+        this->deatheffect();
+    }
+
+    void Pawn::deatheffect()
+    {
         // play death effect
+        {
+            ParticleSpawner* effect = new ParticleSpawner(this);
+            effect->setPosition(this->getPosition());
+            effect->setOrientation(this->getOrientation());
+            effect->setDestroyAfterLife(true);
+            effect->setSource("Orxonox/explosion2");
+            effect->setLifetime(4.0f);
+        }
+        {
+            ParticleSpawner* effect = new ParticleSpawner(this);
+            effect->setPosition(this->getPosition());
+            effect->setOrientation(this->getOrientation());
+            effect->setDestroyAfterLife(true);
+            effect->setSource("Orxonox/smoke6");
+            effect->setLifetime(4.0f);
+        }
+        {
+            ParticleSpawner* effect = new ParticleSpawner(this);
+            effect->setPosition(this->getPosition());
+            effect->setOrientation(this->getOrientation());
+            effect->setDestroyAfterLife(true);
+            effect->setSource("Orxonox/sparks");
+            effect->setLifetime(4.0f);
+        }
+        for (unsigned int i = 0; i < this->numexplosionchunks_; ++i)
+        {
+            ExplosionChunk* chunk = new ExplosionChunk(this);
+            chunk->setPosition(this->getPosition());
+
+        }
     }
 
@@ -163,5 +214,5 @@
     {
         this->setHealth(this->initialHealth_);
-        this->spawn();
+        this->spawneffect();
     }
 
Index: code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/objects/worldentities/pawns/Pawn.h	(revision 2414)
@@ -82,7 +82,23 @@
                 { return (WorldEntity*)this; }
 
+            inline void setSpawnParticleSource(const std::string& source)
+                { this->spawnparticlesource_ = source; }
+            inline const std::string& getSpawnParticleSource() const
+                { return this->spawnparticlesource_; }
+
+            inline void setSpawnParticleDuration(float duration)
+                { this->spawnparticleduration_ = duration; }
+            inline float getSpawnParticleDuration() const
+                { return this->spawnparticleduration_; }
+
+            inline void setExplosionChunks(unsigned int chunks)
+                { this->numexplosionchunks_ = chunks; }
+            inline unsigned int getExplosionChunks() const
+                { return this->numexplosionchunks_; }
+
         protected:
-            virtual void spawn();
             virtual void death();
+            virtual void deatheffect();
+            virtual void spawneffect();
 
             bool bAlive_;
@@ -95,4 +111,8 @@
 
             WeaponSystem* weaponSystem_;
+
+            std::string spawnparticlesource_;
+            float spawnparticleduration_;
+            unsigned int numexplosionchunks_;
     };
 
Index: code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.cc
===================================================================
--- code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.cc	(revision 2413)
+++ code/branches/objecthierarchy2/src/orxonox/tools/ParticleInterface.cc	(revision 2414)
@@ -63,4 +63,5 @@
         this->bVisible_ = true;
         this->bAllowedByLOD_ = true;
+        this->speedFactor_ = 1.0f;
 
         if (Core::showsGraphics())
