Index: code/branches/sfxThilo/src/orxonox/MoodManager.h
===================================================================
--- code/branches/sfxThilo/src/orxonox/MoodManager.h	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/MoodManager.h	(revision 9889)
@@ -51,5 +51,5 @@
 
         private:
-            virtual void moodChanged(const std::string& mood) = 0;
+            virtual bool moodChanged(const std::string& mood) = 0;
 
             static void changedMood(const std::string& mood);
Index: code/branches/sfxThilo/src/orxonox/items/MultiStateEngine.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/items/MultiStateEngine.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/items/MultiStateEngine.cc	(revision 9889)
@@ -61,4 +61,6 @@
             this->defEngineSndNormal_->setLooping(true);
             this->defEngineSndBoost_->setLooping(true);
+            this->defEngineSndNormal_->setVolume(0.8f);
+            this->defEngineSndBoost_->setVolume(0.5f);
             this->lua_ = new LuaState();
         }
Index: code/branches/sfxThilo/src/orxonox/sound/AmbientSound.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/AmbientSound.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/AmbientSound.cc	(revision 9889)
@@ -79,11 +79,11 @@
     }
 
-    void AmbientSound::setAmbientSource(const std::string& source)
+    bool AmbientSound::setAmbientSource(const std::string& source)
     {
         this->ambientSource_ = source;
-        this->moodChanged(MoodManager::getInstance().getMood());
+        return(this->moodChanged(MoodManager::getInstance().getMood()));
     }
 
-    void AmbientSound::moodChanged(const std::string& mood)
+    bool AmbientSound::moodChanged(const std::string& mood)
     {
         if (GameMode::playsSound())
@@ -95,10 +95,17 @@
                 orxout(user_info) << "Loading ambient sound " << path << "..." << endl; // TODO: make this output internal if we implement sound streaming
                 this->setSource(path);
+
+                // all went fine
+                return true;
             }
             else
             {
                 orxout(internal_warning, context::sound) << this->ambientSource_ << ": Not a valid name! Ambient sound will not change." << endl;
+
+                // everything went southways
+                return false;
             }
         }
+        return false;
     }
 
Index: code/branches/sfxThilo/src/orxonox/sound/AmbientSound.h
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/AmbientSound.h	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/AmbientSound.h	(revision 9889)
@@ -54,5 +54,5 @@
         void pause();
 
-        void setAmbientSource(const std::string& source);
+        bool setAmbientSource(const std::string& source);
         inline const std::string& getAmbientSource() const
             { return this->ambientSource_; }
@@ -68,5 +68,5 @@
         void preDestroy();
         float getRealVolume();
-        void moodChanged(const std::string& mood);
+        bool moodChanged(const std::string& mood);
         inline void ambientSourceChanged()
             { this->setAmbientSource(this->ambientSource_); }
Index: code/branches/sfxThilo/src/orxonox/sound/BaseSound.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/BaseSound.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/BaseSound.cc	(revision 9889)
@@ -47,5 +47,5 @@
     BaseSound::BaseSound()
         : bPooling_(false)
-        , volume_(1.0)
+        , volume_(0.7)
         , bLooping_(false)
         , state_(Stopped)
Index: code/branches/sfxThilo/src/orxonox/sound/SoundManager.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/SoundManager.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/SoundManager.cc	(revision 9889)
@@ -218,5 +218,5 @@
             .description("Defines the overall volume.")
             .callback(this, &SoundManager::checkSoundVolumeValidity);
-        SetConfigValueAlias(volume_[SoundType::Music], "ambientVolume_", 1.0f)
+        SetConfigValueAlias(volume_[SoundType::Music], "ambientVolume_", 0.7f)
             .description("Defines the ambient volume.")
             .callback(this, &SoundManager::checkAmbientVolumeValidity);
Index: code/branches/sfxThilo/src/orxonox/sound/WorldAmbientSound.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/WorldAmbientSound.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/WorldAmbientSound.cc	(revision 9889)
@@ -33,7 +33,12 @@
 #include "core/XMLPort.h"
 #include "AmbientSound.h"
+#include "core/command/ConsoleCommand.h"
+#include <exception>
+
 
 namespace orxonox
 {
+	SetConsoleCommand("WorldAmbientSound", "nextsong",      &WorldAmbientSound::nextSong);
+
     RegisterClass(WorldAmbientSound);
 
@@ -44,6 +49,15 @@
         this->ambientSound_ = new AmbientSound();
         this->registerVariables();
+        soundList_.push_back("Earth.ogg");
+        soundList_.push_back("Jupiter.ogg");
+        soundList_.push_back("Mars.ogg");
+        soundList_.push_back("allgorythm-lift_up.ogg");
+        soundList_.push_back("allgorythm-resonance_blaster.ogg");
+        soundList_.push_back("AlphaCentauri.ogg");
+        soundList_.push_back("Asteroid_rocks.ogg");
+        soundList_.push_back("Ganymede.ogg");
+        soundList_.push_back("luke_grey_-_hypermode.ogg");
+
     }
-
     WorldAmbientSound::~WorldAmbientSound()
     {
@@ -51,4 +65,5 @@
         {
             this->ambientSound_->destroy();
+            WorldAmbientSound::soundList_.clear();
         }
     }
@@ -94,3 +109,17 @@
             this->ambientSound_->stop();
     }
+
+    void WorldAmbientSound::nextSong()
+    {
+
+    	//HACK: Assuption - there is only one WorldAmbientSound in a level and only one level is used.
+    	for (ObjectList<WorldAmbientSound>::iterator it = ObjectList<WorldAmbientSound>::begin();
+    	     it != ObjectList<WorldAmbientSound>::end(); ++it)
+    	{
+    		while(it->ambientSound_->setAmbientSource(WorldAmbientSound::soundList_[WorldAmbientSound::soundNumber_]) == false){
+    			WorldAmbientSound::soundNumber_ = (WorldAmbientSound::soundNumber_ + 1) % WorldAmbientSound::soundList_.size();
+    		}
+    		WorldAmbientSound::soundNumber_ = (WorldAmbientSound::soundNumber_ + 1) % WorldAmbientSound::soundList_.size();
+    	}
+    }
 }
Index: code/branches/sfxThilo/src/orxonox/sound/WorldAmbientSound.h
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/WorldAmbientSound.h	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/WorldAmbientSound.h	(revision 9889)
@@ -34,4 +34,7 @@
 #include "core/BaseObject.h"
 #include "network/synchronisable/Synchronisable.h"
+#include <string>
+#include <vector>
+
 
 namespace orxonox
@@ -54,9 +57,29 @@
             void play();
 
+            //This function changes the current ambient song.
+            //You can call nextSong() active in the level
+            //by pressing the key 'M'.
+            static void nextSong();
+
         private:
             void registerVariables();
 
+            //Vector with the diffrent available level sounds.
+            //The sound names are pushed in the WorldAmbientSound-constructor.
+            static std::vector<std::string> soundList_;
+
+            // This value will be initialized below, don't make this into
+            // a const, since we want to change it in nextSong().
+            static int soundNumber_;
+
+
             AmbientSound* ambientSound_;
     };
+
+    // This is an initialization for the soundnumber variable. Since it is
+    // static, we have to initialize it this way.
+    int WorldAmbientSound::soundNumber_ = 0;
+    std::vector<std::string> WorldAmbientSound::soundList_;
+
 }
 
Index: code/branches/sfxThilo/src/orxonox/sound/WorldSound.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/sound/WorldSound.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/sound/WorldSound.cc	(revision 9889)
@@ -81,5 +81,5 @@
             alSourcef(this->audioSource_, AL_REFERENCE_DISTANCE, refDist);
             // TODO: 500 is very magical here. Derive something better
-            alSourcef(this->audioSource_, AL_MAX_DISTANCE, refDist * 500);
+            alSourcef(this->audioSource_, AL_MAX_DISTANCE, refDist * 20);
         }
         this->tick(0); // update position, orientation and velocity
Index: code/branches/sfxThilo/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/weaponsystem/WeaponMode.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/weaponsystem/WeaponMode.cc	(revision 9889)
@@ -79,4 +79,5 @@
             this->defSndWpnFire_ = new WorldSound(this->getContext());
             this->defSndWpnFire_->setLooping(false);
+            this->defSndWpnFire_->setVolume(0.8f);
             this->bSoundAttached_ = false;
         }
Index: code/branches/sfxThilo/src/orxonox/worldentities/pawns/Pawn.cc
===================================================================
--- code/branches/sfxThilo/src/orxonox/worldentities/pawns/Pawn.cc	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/worldentities/pawns/Pawn.cc	(revision 9889)
@@ -46,4 +46,5 @@
 #include "weaponsystem/WeaponPack.h"
 #include "weaponsystem/WeaponSet.h"
+#include "sound/WorldSound.h"
 
 #include "controllers/FormationController.h"
@@ -100,4 +101,14 @@
 
         this->setSyncMode(ObjectDirection::Bidirectional); // needed to synchronise e.g. aimposition
+
+        if (GameMode::isMaster())
+        {
+            this->explosionSound_ = new WorldSound(this->getContext());
+            this->explosionSound_->setVolume(1.0f);
+        }
+        else
+        {
+            this->explosionSound_ = 0;
+        }
     }
 
@@ -109,4 +120,5 @@
                 this->weaponSystem_->destroy();
         }
+
     }
 
@@ -135,6 +147,9 @@
         XMLPortParam(Pawn, "reloadwaittime", setReloadWaitTime, getReloadWaitTime, xmlelement, mode).defaultValues(1.0f);
 
+        XMLPortParam(Pawn, "explosionSound",  setExplosionSound,  getExplosionSound,  xmlelement, mode);
+
         XMLPortParam ( RadarViewable, "radarname", setRadarName, getRadarName, xmlelement, mode );
     }
+
 
     void Pawn::registerVariables()
@@ -290,5 +305,5 @@
     void Pawn::kill()
     {
-        this->damage(this->health_);
+    	this->damage(this->health_);
         this->death();
     }
@@ -314,5 +329,6 @@
         if (this->getGametype() && this->getGametype()->allowPawnDeath(this, this->lastHitOriginator_))
         {
-            // Set bAlive_ to false and wait for PawnManager to do the destruction
+            explosionSound_->play();
+        	// Set bAlive_ to false and wait for PawnManager to do the destruction
             this->bAlive_ = false;
 
@@ -527,4 +543,21 @@
 
 
+    void Pawn::setExplosionSound(const std::string &explosionSound)
+    {
+        if(explosionSound_ )
+            explosionSound_->setSource(explosionSound);
+        else
+            assert(0); // This should never happen, because soundpointer is only available on master
+    }
+
+    const std::string& Pawn::getExplosionSound()
+    {
+        if( explosionSound_ )
+            return explosionSound_->getSource();
+        else
+            assert(0);
+        return BLANKSTRING;
+    }
+
 
 }
Index: code/branches/sfxThilo/src/orxonox/worldentities/pawns/Pawn.h
===================================================================
--- code/branches/sfxThilo/src/orxonox/worldentities/pawns/Pawn.h	(revision 9720)
+++ code/branches/sfxThilo/src/orxonox/worldentities/pawns/Pawn.h	(revision 9889)
@@ -36,4 +36,5 @@
 #include "interfaces/RadarViewable.h"
 #include "worldentities/ControllableEntity.h"
+
 
 namespace orxonox // tolua_export
@@ -178,4 +179,7 @@
             virtual void changedVisibility();
 
+            void setExplosionSound(const std::string& engineSound);
+            const std::string& getExplosionSound();
+
         protected:
             virtual void preDestroy();
@@ -231,4 +235,7 @@
 
             Vector3 aimPosition_;
+
+            WorldSound* explosionSound_;
+
     }; // tolua_export
 } // tolua_export
