Index: code/trunk/src/modules/weapons/munitions/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/weapons/munitions/CMakeLists.txt	(revision 11103)
+++ code/trunk/src/modules/weapons/munitions/CMakeLists.txt	(revision 11108)
@@ -6,4 +6,5 @@
   GravityBombMunition.cc
   IceMunition.cc
+  FlameMunition.cc
   SplitMunition.cc
   MineMunition.cc
Index: code/trunk/src/modules/weapons/munitions/FlameMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/FlameMunition.cc	(revision 11108)
+++ code/trunk/src/modules/weapons/munitions/FlameMunition.cc	(revision 11108)
@@ -0,0 +1,56 @@
+/*
+ *   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 FlameMunition.h
+    @brief Implementation of the FlameMunition class.
+*/
+
+#include "FlameMunition.h"
+#include "core/CoreIncludes.h"
+
+namespace orxonox
+{
+    RegisterClass(FlameMunition);
+
+    FlameMunition::FlameMunition(Context* context) : Munition(context)
+    {
+        RegisterObject(FlameMunition);
+
+        this->maxMunitionPerMagazine_ = 90;
+        this->maxMagazines_ = 3;
+        this->unassignedMagazines_ = 3;
+
+        this->deployment_ = MunitionDeployment::Share;
+
+        this->bAllowMunitionRefilling_ = true;
+        this->bAllowMultiMunitionRemovementUnderflow_ = false;
+
+        this->reloadTime_ = 0.5f;
+    }
+}
Index: code/trunk/src/modules/weapons/munitions/FlameMunition.h
===================================================================
--- code/trunk/src/modules/weapons/munitions/FlameMunition.h	(revision 11108)
+++ code/trunk/src/modules/weapons/munitions/FlameMunition.h	(revision 11108)
@@ -0,0 +1,58 @@
+/*
+ *   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 FlameMunition.h
+    @brief Definition of the FlameMunition class.
+*/
+
+#ifndef _FlameMunition_H__
+#define _FlameMunition_H__
+
+#include "weapons/WeaponsPrereqs.h"
+#include "weaponsystem/Munition.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        FlameMunition.
+    @author
+        Fabien Vultier
+    @ingroup WeaponsMunitions
+    */
+    class _WeaponsExport FlameMunition : public Munition
+    {
+        public:
+            FlameMunition(Context* context);
+            virtual ~FlameMunition() = default;
+    };
+}
+
+#endif /* _FlameMunition_H__ */
Index: code/trunk/src/modules/weapons/munitions/LaserMunition.cc
===================================================================
--- code/trunk/src/modules/weapons/munitions/LaserMunition.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/munitions/LaserMunition.cc	(revision 11108)
@@ -55,5 +55,5 @@
         this->replenishAmount_ = 1;
 
-        this->reloadTime_ = 0.5f;
+        this->reloadTime_ = 0.6f;
     }
 }
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();            
Index: code/trunk/src/modules/weapons/weaponmodes/CMakeLists.txt
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/CMakeLists.txt	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/CMakeLists.txt	(revision 11108)
@@ -7,4 +7,5 @@
   SplitGun.cc
   IceGun.cc
+  FlameGun.cc
   RocketFire.cc
   RocketFireOld.cc
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.cc	(revision 11108)
@@ -59,5 +59,7 @@
         this->speed_ = 750.0f;
         this->delay_ = 0.0f;
+        this->timerStarted_ = false;
         this->setMunitionName("FusionMunition");
+        this->setFireSound("sounds/Weapon_EnergyDrink.ogg");
 
         this->delayTimer_.setTimer(1.0f, false, createExecutor(createFunctor(&EnergyDrink::shot, this)));
@@ -93,5 +95,19 @@
     void EnergyDrink::fire()
     {
-        this->delayTimer_.startTimer();
+        if (!timerStarted_)
+        {
+            this->delayTimer_.startTimer();
+            this->timerStarted_ = true;
+        }
+    }
+
+    bool EnergyDrink::fire(float* reloadTime)
+    {
+        if (!timerStarted_)
+        {
+            return WeaponMode::fire(reloadTime);
+        }
+
+        return false;
     }
 
@@ -102,4 +118,6 @@
     void EnergyDrink::shot()
     {
+        this->timerStarted_ = false;
+
         // Create the projectile
         Projectile* projectile = new Projectile(this->getContext());
Index: code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/EnergyDrink.h	(revision 11108)
@@ -57,4 +57,5 @@
             virtual ~EnergyDrink() {}
 
+            virtual bool fire(float* reloadTime) override;
             virtual void fire() override;
             virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
@@ -89,4 +90,5 @@
             float delay_; //!< The firing delay.
             Timer delayTimer_; //!< The timer to delay the firing.
+            bool timerStarted_;
     };
 }
Index: code/trunk/src/modules/weapons/weaponmodes/FlameGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FlameGun.cc	(revision 11108)
+++ code/trunk/src/modules/weapons/weaponmodes/FlameGun.cc	(revision 11108)
@@ -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:
+ *      Fabien Vultier
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+/**
+    @file FlameGun.cc
+    @brief Implementation of the FlameGun class.
+*/
+
+#include "FlameGun.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+#include "weaponsystem/Weapon.h"
+#include "weaponsystem/WeaponPack.h"
+#include "weaponsystem/WeaponSystem.h"
+#include "worldentities/pawns/Pawn.h"
+
+#include "weapons/projectiles/FlameGunProjectile.h"
+
+namespace orxonox
+{
+    RegisterClass(FlameGun);
+
+    const int FlameGun::PROJECTILES_PER_FIRE = 3;
+
+    FlameGun::FlameGun(Context* context) : WeaponMode(context)
+    {
+        RegisterObject(FlameGun);
+
+        this->reloadTime_ = 0.1f;
+        this->damage_ = 0.0f;
+        this->speed_ = 550.0f;
+        this->lifetime_ = 1.0;
+        this->sideAcceleration_ = 2000.0;
+
+        this->setMunitionName("FlameMunition");
+        this->setFireSound("sounds/Weapon_FlameGun.ogg");
+
+        hudImageString_ = "Orxonox/WSHUD_WM_FlameGun";
+    }
+
+    FlameGun::~FlameGun()
+    {
+    }
+
+    /**
+    @brief
+        XMLPort for the FlameGun. You can define how often the projectiles Flame, how many childs should be created per Flame, the spread and the time between two Flames.
+    */
+    void FlameGun::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+    {
+        SUPER(FlameGun, XMLPort, xmlelement, mode);
+
+        XMLPortParam(FlameGun, "Lifetime", setLifetime, getLifetime, xmlelement, mode);
+    }
+
+    /**
+    @brief
+        Fires the weapon. Creates a projectile and fires it.
+    */
+    void FlameGun::fire()
+    {
+        this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
+
+        Vector3 muzzleDirection = this->getMuzzleDirection();
+        Vector3 directionOffset = muzzleDirection.perpendicular();
+        directionOffset.normalise();
+        Degree angle = Degree(rnd(0,360));
+        directionOffset = Quaternion(angle, muzzleDirection.normalisedCopy()) * directionOffset;
+        directionOffset.normalise();
+
+        FlameGunProjectile* projectile = new FlameGunProjectile(this->getContext());
+
+        projectile->setOrientation(this->getMuzzleOrientation());
+        projectile->setPosition(this->getMuzzlePosition());
+        projectile->setVelocity(muzzleDirection * this->speed_);
+
+        projectile->setLifetime(getLifetime());
+
+        projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+        projectile->setDamage(this->getDamage());
+        projectile->setShieldDamage(this->getShieldDamage());
+        projectile->setHealthDamage(this->getHealthDamage());
+
+        angle = Degree(360.0/PROJECTILES_PER_FIRE);
+
+        for (int i = 0; i < PROJECTILES_PER_FIRE; ++i)
+        {
+            FlameGunProjectile* projectile = new FlameGunProjectile(this->getContext());
+
+            projectile->setOrientation(this->getMuzzleOrientation());
+            projectile->setPosition(this->getMuzzlePosition());
+            projectile->setVelocity(muzzleDirection * this->speed_);
+            projectile->setAcceleration(directionOffset*sideAcceleration_);
+
+            projectile->setLifetime(getLifetime());
+
+            projectile->setShooter(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn());
+            projectile->setDamage(this->getDamage());
+            projectile->setShieldDamage(this->getShieldDamage());
+            projectile->setHealthDamage(this->getHealthDamage());
+
+            directionOffset = Quaternion(angle, muzzleDirection.normalisedCopy()) * directionOffset;
+            directionOffset.normalise();
+        }
+
+
+
+        
+    }
+}
Index: code/trunk/src/modules/weapons/weaponmodes/FlameGun.h
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FlameGun.h	(revision 11108)
+++ code/trunk/src/modules/weapons/weaponmodes/FlameGun.h	(revision 11108)
@@ -0,0 +1,73 @@
+/*
+ *   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 FlameGun.h
+    @brief Definition of the FlameGun class.
+*/
+
+#ifndef _FlameGun_H__
+#define _FlameGun_H__
+
+#include "weapons/WeaponsPrereqs.h"
+#include "weaponsystem/WeaponMode.h"
+
+namespace orxonox
+{
+
+    /**
+    @brief
+        A WeaponMode that fires burning projectiles.
+    @author
+        Fabien Vultier
+    @ingroup WeaponsWeaponModes
+    */
+    class _WeaponsExport FlameGun : public WeaponMode
+    {
+        public:
+            FlameGun(Context* context);
+            virtual ~FlameGun();
+
+            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
+            virtual void fire() override;
+
+            inline void setLifetime(float lifetime)
+                { this->lifetime_ = lifetime; }
+            inline float getLifetime() const
+                { return this->lifetime_; }
+
+       private:
+            float speed_; //The speed of the fired projectile.
+            float lifetime_; //The lifetime of the fired projectile.
+            float sideAcceleration_;
+
+            static const int PROJECTILES_PER_FIRE;
+    };
+}
+
+#endif /* _FlameGun_H__ */
Index: code/trunk/src/modules/weapons/weaponmodes/FusionFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/FusionFire.cc	(revision 11108)
@@ -58,4 +58,5 @@
 
         this->setMunitionName("FusionMunition");
+        this->setFireSound("sounds/Weapon_FusionFire.ogg");
 
         hudImageString_ = "Orxonox/WSHUD_WM_FusionFire";
Index: code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/GravityBombFire.cc	(revision 11108)
@@ -30,5 +30,5 @@
 
         this->setMunitionName("GravityBombMunition");
-        this->setDefaultSoundWithVolume("sounds/Rocket_launch.ogg",0.8);    ///< sets sound of the bomb as it is fired.
+        this->setFireSound("sounds/Rocket_launch.ogg",0.8);    ///< sets sound of the bomb as it is fired.
 
         hudImageString_ = "Orxonox/WSHUD_WM_GravityBombFire";
Index: code/trunk/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/HsW01.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/HsW01.cc	(revision 11108)
@@ -62,5 +62,4 @@
         this->setMunitionName("LaserMunition");
         this->mesh_ = "laserbeam.mesh";
-        this->sound_ = "sounds/Weapon_HsW01.ogg";
 
 
@@ -68,5 +67,6 @@
         this->delayTimer_.stopTimer();
 
-        this->setDefaultSound(this->sound_);
+        this->setFireSound("sounds/Weapon_HsW01.ogg");
+        this->setReloadSound("sounds/Reload_HsW01.ogg", 0.5);
 
         hudImageString_ = "Orxonox/WSHUD_WM_HsW01";
Index: code/trunk/src/modules/weapons/weaponmodes/IceGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/IceGun.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/IceGun.cc	(revision 11108)
@@ -60,5 +60,6 @@
 
         this->setMunitionName("IceMunition");
-        this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+        this->setFireSound("sounds/Weapon_LightningGun.ogg");
+        this->setReloadSound("sounds/Reload_IceGun.ogg", 0.4);
 
         hudImageString_ = "Orxonox/WSHUD_WM_IceGun";
Index: code/trunk/src/modules/weapons/weaponmodes/LaserFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/LaserFire.cc	(revision 11108)
@@ -41,5 +41,5 @@
 #include "worldentities/pawns/Pawn.h"
 
-#include "weapons/projectiles/ParticleProjectile.h"
+#include "weapons/projectiles/BillboardProjectile.h"
 
 namespace orxonox
@@ -56,4 +56,6 @@
 
         this->setMunitionName("LaserMunition");
+        this->setFireSound("sounds/Weapon_LaserFire.ogg");
+        this->setReloadSound("sounds/Reload_LaserFire.ogg", 0.8);
 
         hudImageString_ = "Orxonox/WSHUD_WM_LaserFire";
@@ -66,5 +68,5 @@
     void LaserFire::fire()
     {
-        ParticleProjectile* projectile = new ParticleProjectile(this->getContext());
+        BillboardProjectile* projectile = new BillboardProjectile(this->getContext());
 
         this->computeMuzzleParameters(this->getWeapon()->getWeaponPack()->getWeaponSystem()->getPawn()->getAimPosition());
Index: code/trunk/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 11108)
@@ -55,5 +55,5 @@
 
         this->setMunitionName("LightningMunition");
-        this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+        this->setFireSound("sounds/Weapon_LightningGun.ogg");
 
         hudImageString_ = "Orxonox/WSHUD_WM_LightningGun";
Index: code/trunk/src/modules/weapons/weaponmodes/MineGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/MineGun.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/MineGun.cc	(revision 11108)
@@ -57,5 +57,5 @@
 
         this->setMunitionName("MineMunition");
-        this->setDefaultSound("sounds/mineactivate.ogg");
+        this->setFireSound("sounds/mineactivate.ogg");
 
         hudImageString_ = "Orxonox/WSHUD_WM_MineGun";
Index: code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/SimpleRocketFire.cc	(revision 11108)
@@ -62,5 +62,5 @@
 
         this->setMunitionName("RocketMunition");
-        this->setDefaultSoundWithVolume("sounds/Rocket_launch.ogg",0.4f);
+        this->setFireSound("sounds/Rocket_launch.ogg",0.4f);
         // The firing sound of the Rocket is played in Rocket.cc (because of OpenAl sound positioning)
 
Index: code/trunk/src/modules/weapons/weaponmodes/SplitGun.cc
===================================================================
--- code/trunk/src/modules/weapons/weaponmodes/SplitGun.cc	(revision 11103)
+++ code/trunk/src/modules/weapons/weaponmodes/SplitGun.cc	(revision 11108)
@@ -61,5 +61,6 @@
 
         this->setMunitionName("SplitMunition");
-        this->setDefaultSound("sounds/Weapon_LightningGun.ogg");
+        this->setFireSound("sounds/Weapon_SplitGun.ogg", 0.5);
+        this->setReloadSound("sounds/Reload_SplitGun.ogg", 0.8);
 
         hudImageString_ = "Orxonox/WSHUD_WM_SplitGun";
