Index: code/trunk/src/modules/weapons/projectiles/BasicProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/BasicProjectile.cc	(revision 11108)
@@ -54,4 +54,7 @@
         this->bDestroy_ = false;
 
+        // Default is destroying the projectile after collision
+        this->destroyAfterCollision_ = true;
+
         // Default damage must be zero, otherwise it would be above zero if no settings are made in the weaponsettings xml file.
         // same thing for all weaponmodes files
@@ -87,6 +90,10 @@
                 return false;
 
-            this->bDestroy_ = true; // If something is hit, the object is destroyed and can't hit something else.
-                                    // The projectile is destroyed by its tick()-function (in the following tick).
+            if (getDestroyAfterCollision())
+            {
+                this->bDestroy_ = true; // If something is hit, the object is destroyed and can't hit something else.
+                                        // The projectile is destroyed by its tick()-function (in the following tick).
+                                        // TODO: Use destroyLater() for this
+            }
 
             Pawn* victim = orxonox_cast<Pawn*>(otherObject); // If otherObject isn't a Pawn, then victim is nullptr
Index: code/trunk/src/modules/weapons/projectiles/BasicProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/BasicProjectile.h	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/BasicProjectile.h	(revision 11108)
@@ -119,4 +119,8 @@
             bool processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs);
             void destroyCheck(void);
+            inline void setDestroyAfterCollision(bool destroyAfterCollision)
+                { destroyAfterCollision_ = destroyAfterCollision; }
+            inline bool getDestroyAfterCollision() const
+                { return destroyAfterCollision_; }
 
         private:
@@ -130,4 +134,5 @@
 
             bool bDestroy_; //!< Boolean, to check whether a projectile should be destroyed.
+            bool destroyAfterCollision_; //!< Boolean, defines whether the projectile gets detroyed after a collision.
     };
 }
Index: code/trunk/src/modules/weapons/projectiles/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/weapons/projectiles/CMakeLists.txt	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/CMakeLists.txt	(revision 11108)
@@ -7,4 +7,5 @@
   SplitGunProjectile.cc
   IceGunProjectile.cc
+  FlameGunProjectile.cc
   Rocket.cc
   RocketOld.cc
Index: code/trunk/src/modules/weapons/projectiles/FlameGunProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/FlameGunProjectile.cc	(revision 11108)
+++ code/trunk/src/modules/weapons/projectiles/FlameGunProjectile.cc	(revision 11108)
@@ -0,0 +1,85 @@
+/*
+ *   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:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlameGunProjectile.h
+    @brief Implementation of the FlameGunProjectile class.
+*/
+
+#include "FlameGunProjectile.h"
+
+#include "core/CoreIncludes.h"
+#include "core/command/Executor.h"
+#include "util/Convert.h"
+#include "util/Math.h"
+
+namespace orxonox
+{
+    RegisterClass(FlameGunProjectile);
+
+    FlameGunProjectile::FlameGunProjectile(Context* context) : ParticleProjectile(context)
+    {
+        RegisterObject(FlameGunProjectile);
+
+        this->lifetime_ = 1.0f;
+        this->spread_ = 0.1f;
+
+        setDestroyAfterCollision(false);
+        setEffect("Orxonox/fire3");
+    }
+
+    void FlameGunProjectile::setLifetime(float lifetime)
+    {
+        if (lifetime >= 0.0)
+        {
+            this->lifetime_ = lifetime;
+            this->flameTimer_.setTimer(this->lifetime_, false, createExecutor(createFunctor(&FlameGunProjectile::destroy, this)));
+        }
+        else
+        {
+            this->lifetime_ = 0.0;
+        }
+    }
+
+    void FlameGunProjectile::setSpread(float spread)
+    {
+        spread_ = spread;
+    }
+
+    bool FlameGunProjectile::processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs)
+    {
+        bool result = ParticleProjectile::processCollision(otherObject, contactPoint, cs);
+
+        // Every projectile can only deal damage once.
+        setDamage(0.0);
+        setHealthDamage(0.0);
+        setShieldDamage(0.0);
+
+        return result;
+    }
+}
Index: code/trunk/src/modules/weapons/projectiles/FlameGunProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/FlameGunProjectile.h	(revision 11108)
+++ code/trunk/src/modules/weapons/projectiles/FlameGunProjectile.h	(revision 11108)
@@ -0,0 +1,69 @@
+/*
+ *   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:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlameGunProjectile.h
+    @brief Definition of the FlameGunProjectile class.
+*/
+
+#ifndef _FlameGunProjectile_H__
+#define _FlameGunProjectile_H__
+
+#include "weapons/WeaponsPrereqs.h"
+
+#include <string>
+#include "tools/Timer.h"
+#include "ParticleProjectile.h"
+
+namespace orxonox
+{
+
+    /**
+    @author
+        Fabien Vultier
+    @ingroup WeaponsProjectiles
+    */
+    class _WeaponsExport FlameGunProjectile : public ParticleProjectile
+    {
+        public:
+            FlameGunProjectile(Context* context);
+            virtual ~FlameGunProjectile() {}
+
+            virtual void setLifetime(float lifetime);
+            virtual void setSpread(float spread);
+        protected:
+            bool processCollision(WorldEntity* otherObject, btManifoldPoint& contactPoint, const btCollisionShape* cs);
+
+        private:            
+            float lifetime_;
+            float spread_;
+            Timer flameTimer_;
+    };
+}
+
+#endif /* _FlameGunProjectile_H__ */
Index: code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/LightningGunProjectile.cc	(revision 11108)
@@ -47,5 +47,5 @@
 
         this->textureIndex_ = 1;
-        this->setMass(2);
+        this->setMass(0.1f);
         this->setCollisionType(CollisionType::Dynamic);
         this->maxTextureIndex_ = 8;
Index: code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/ParticleProjectile.cc	(revision 11108)
@@ -43,20 +43,11 @@
     RegisterClass(ParticleProjectile);
 
-    ParticleProjectile::ParticleProjectile(Context* context) : BillboardProjectile(context)
+    ParticleProjectile::ParticleProjectile(Context* context) : Projectile(context)
     {
         RegisterObject(ParticleProjectile);
 
-        if (GameMode::showsGraphics())
-        {
-            // Create the particles.
-            this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), "Orxonox/shot3_small", LODParticle::Normal);
-            this->attachOgreObject(this->particles_->getParticleSystem());
-            this->particles_->setKeepParticlesInLocalSpace(0);
+        this->particles_ = nullptr;
 
-            for (unsigned int i = 0; i < this->particles_->getNumEmitters(); ++i)
-                this->particles_->getEmitter(i)->setDirection(-WorldEntity::FRONT);
-        }
-        else
-            this->particles_ = nullptr;
+        //setEffect("Orxonox/sparks2");
     }
 
@@ -82,3 +73,29 @@
             this->particles_->setEnabled(this->isVisible());
     }
+
+    void ParticleProjectile::setEffect(const std::string& effect)
+    {
+        // If we already have a particle interface, delete it
+        if (this->particles_)
+        {
+            this->detachOgreObject(this->particles_->getParticleSystem());
+            delete this->particles_;
+            this->particles_ = nullptr;
+        }
+
+        if (GameMode::showsGraphics())
+        {
+            // Create the particles.
+            this->particles_ = new ParticleInterface(this->getScene()->getSceneManager(), effect, LODParticle::Normal);
+            this->attachOgreObject(this->particles_->getParticleSystem());
+            this->particles_->setKeepParticlesInLocalSpace(0);
+
+            for (unsigned int i = 0; i < this->particles_->getNumEmitters(); ++i)
+                this->particles_->getEmitter(i)->setDirection(-WorldEntity::FRONT);
+        }
+        else
+        {
+            this->particles_ = nullptr;
+        }
+    }
 }
Index: code/trunk/src/modules/weapons/projectiles/ParticleProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/ParticleProjectile.h	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/ParticleProjectile.h	(revision 11108)
@@ -48,5 +48,5 @@
     @ingroup WeaponsProjectiles
     */
-    class _WeaponsExport ParticleProjectile : public BillboardProjectile
+    class _WeaponsExport ParticleProjectile : public Projectile
     {
         public:
@@ -54,4 +54,5 @@
             virtual ~ParticleProjectile();
             virtual void changedVisibility() override;
+            virtual void setEffect(const std::string& effect);
 
         private:
Index: code/trunk/src/modules/weapons/projectiles/Projectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/Projectile.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/Projectile.cc	(revision 11108)
@@ -54,5 +54,5 @@
         if (GameMode::isMaster())
         {
-            this->setMass(1.0f);
+            this->setMass(0.1f);
             this->enableCollisionCallback();
             this->setCollisionResponse(false);
Index: code/trunk/src/modules/weapons/projectiles/SplitGunProjectile.cc
===================================================================
--- code/trunk/src/modules/weapons/projectiles/SplitGunProjectile.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/SplitGunProjectile.cc	(revision 11108)
@@ -52,4 +52,18 @@
         this->spread_ = 0.2f;
         this->damageReduction_ = 1.0f;
+        this->splitSound_ = nullptr;
+
+        this->setSplitSound("sounds/Weapon_SplitGun.ogg", 0.8);
+    }
+
+    SplitGunProjectile::~SplitGunProjectile()
+    {
+        if (this->isInitialized())
+        {
+            if (splitSound_)
+            {
+                splitSound_->destroy();
+            }
+        }
     }
 
@@ -158,5 +172,23 @@
 
             numberOfSplits_ = 0;
+
+            if (splitSound_)
+            {
+                splitSound_->play();
+            }
         }
     }
+
+    void SplitGunProjectile::setSplitSound(const std::string& soundPath, const float soundVolume)
+    {
+        if (!splitSound_)
+        {
+            this->splitSound_ = new WorldSound(this->getContext());
+            this->splitSound_->setLooping(false);
+            this->attach(splitSound_);
+        }
+
+        this->splitSound_->setSource(soundPath);
+        this->splitSound_->setVolume(soundVolume);
+    }
 }
Index: code/trunk/src/modules/weapons/projectiles/SplitGunProjectile.h
===================================================================
--- code/trunk/src/modules/weapons/projectiles/SplitGunProjectile.h	(revision 11103)
+++ code/trunk/src/modules/weapons/projectiles/SplitGunProjectile.h	(revision 11108)
@@ -28,5 +28,5 @@
 
 /**
-    @file IceGunProjectile.h
+    @file SplitGunProjectile.h
     @brief Definition of the SplitGunProjectile class.
 */
@@ -40,4 +40,5 @@
 #include "tools/Timer.h"
 #include "BillboardProjectile.h"
+#include "sound/WorldSound.h"
 
 namespace orxonox
@@ -55,5 +56,5 @@
         public:
             SplitGunProjectile(Context* context);
-            virtual ~SplitGunProjectile() {}
+            virtual ~SplitGunProjectile();
 
             virtual void setNumberOfSplits(int numberOfSplits);
@@ -62,4 +63,5 @@
             virtual void setSpread(float spread);
             virtual void setDamageReduction(float damageReduction);
+            virtual void setSplitSound(const std::string& soundPath, const float soundVolume = 1.0);
 
         private:            
@@ -70,4 +72,5 @@
             float damageReduction_; //The damage of a child projectile is reduced by this factor
             Timer splitTimer_;
+            WorldSound* splitSound_; //Sound played if the projectile splits
 
             virtual void split();            
