Index: code/branches/presentation2/data/gui/layouts/AudioMenu.layout
===================================================================
--- code/branches/presentation2/data/gui/layouts/AudioMenu.layout	(revision 6404)
+++ code/branches/presentation2/data/gui/layouts/AudioMenu.layout	(revision 6406)
@@ -111,6 +111,6 @@
             </Window>
             <Window Type="TaharezLook/StaticText" Name="orxonox/AudioInfo" >
-                <Property Name="Text" >Theme changes require
-a game restart.</Property>
+                <Property Name="Text" >Theme changes might take
+up to a minute.</Property>
                 <Property Name="TextColours" Value="FF4444FF" />
                 <Property Name="InheritsAlpha" Value="False" />
Index: code/branches/presentation2/data/gui/scripts/AudioMenu.lua
===================================================================
--- code/branches/presentation2/data/gui/scripts/AudioMenu.lua	(revision 6404)
+++ code/branches/presentation2/data/gui/scripts/AudioMenu.lua	(revision 6406)
@@ -45,4 +45,9 @@
         item:setSelectionBrushImage("TaharezLook", "MultiListSelectionBrush")
         CEGUI.toListbox(listboxwindow):addItem(item)
+    end
+    if orxonox.getConfig("MoodManager", "mood_") == "dnb" then
+        listboxwindow:setItemSelectState(1,true)
+    else
+        listboxwindow:setItemSelectState(0,true)
     end
 end
@@ -166,7 +171,7 @@
 function P.AudioThemeListbox_changed(e)
     if listboxwindow:isItemSelected(1) then
-        orxonox.execute("setMood dnb")
+        orxonox.config("MoodManager", "mood_", "dnb")
     else
-        orxonox.execute("setMood default")
+        orxonox.config("MoodManager", "mood_", "default")
     end
 end
Index: code/branches/presentation2/src/orxonox/MoodManager.cc
===================================================================
--- code/branches/presentation2/src/orxonox/MoodManager.cc	(revision 6404)
+++ code/branches/presentation2/src/orxonox/MoodManager.cc	(revision 6406)
@@ -29,5 +29,4 @@
 #include "MoodManager.h"
 
-#include "core/ConsoleCommand.h"
 #include "core/ConfigValueIncludes.h"
 #include "core/CoreIncludes.h"
@@ -42,9 +41,4 @@
         RegisterRootObject(MoodManager);
         this->setConfigValues();
-        CommandExecutor::addConsoleCommandShortcut(createConsoleCommand(createFunctor(&MoodManager::setMood, this), "setMood"));
-    }
-
-    MoodManager::~MoodManager()
-    {
     }
 
@@ -65,15 +59,31 @@
     }
 
-    //! Gets the current mood
-    const std::string& MoodManager::getMood()
+    void MoodManager::checkMoodValidity()
     {
-        return mood_;
+        // TODO: Insert new moods here & make this generic
+        if (mood_ != "default" && mood_ != "dnb")
+        {
+            ResetConfigValue(mood_);
+        }
+        else
+        {
+            COUT(3) << "Mood changed to " << mood_ << std::endl;
+            MoodListener::changedMood(mood_);
+        }
     }
 
-    void MoodManager::checkMoodValidity()
+
+    std::string MoodListener::mood_s;
+
+    MoodListener::MoodListener()
     {
-        if (mood_ != "default" && mood_ != "dnb") // Insert new moods here; TODO: make this generic
-            ResetConfigValue(mood_);
-        COUT(4) << "MoodManager: Mood set to " << mood_ << std::endl;
+        RegisterRootObject(MoodListener);
+    }
+
+    /*static*/ void MoodListener::changedMood(const std::string& mood)
+    {
+        mood_s = mood;
+        for (ObjectList<MoodListener>::iterator it = ObjectList<MoodListener>::begin(); it; ++it)
+            it->moodChanged(mood_s);
     }
 }
Index: code/branches/presentation2/src/orxonox/MoodManager.h
===================================================================
--- code/branches/presentation2/src/orxonox/MoodManager.h	(revision 6404)
+++ code/branches/presentation2/src/orxonox/MoodManager.h	(revision 6406)
@@ -32,40 +32,50 @@
 #include "OrxonoxPrereqs.h"
 
-#include <cassert>
-#include <list>
 #include <string>
-
 #include "util/Singleton.h"
 #include "core/OrxonoxClass.h"
 
-// tolua_begin
 namespace orxonox
 {
-    class _OrxonoxExport MoodManager
-    // tolua_end
-        : public Singleton<MoodManager>, public OrxonoxClass
-    { // tolua_export
+    class _OrxonoxExport MoodListener : virtual public OrxonoxClass
+    {
+        friend class MoodManager;
+
+        protected:
+            MoodListener();
+            virtual ~MoodListener() {}
+
+            const std::string& getMood() const { return mood_s; }
+
+        private:
+            virtual void moodChanged(const std::string& mood) = 0;
+
+            static void changedMood(const std::string& mood);
+            static std::string mood_s;
+    };
+
+    class _OrxonoxExport MoodManager : public Singleton<MoodManager>, public OrxonoxClass
+    {
             friend class Singleton<MoodManager>;
         public:
             MoodManager();
-            ~MoodManager();
 
             void setConfigValues();
 
             void setMood(const std::string& mood);
-            const std::string& getMood();
+            inline const std::string& getMood() const { return this->mood_; }
 
-            static MoodManager& getInstance() { return Singleton<MoodManager>::getInstance(); } // tolua_export
+            static MoodManager& getInstance() { return Singleton<MoodManager>::getInstance(); }
 
         private:
+            ~MoodManager() {}
             void checkMoodValidity();
 
             // config values
             std::string mood_;
-            std::string moodOld_;
 
             static MoodManager* singletonPtr_s;
-    }; // tolua_export
-} // tolua_export
+    };
+}
 
 #endif /* _MoodManager_H__ */
Index: code/branches/presentation2/src/orxonox/sound/AmbientSound.cc
===================================================================
--- code/branches/presentation2/src/orxonox/sound/AmbientSound.cc	(revision 6404)
+++ code/branches/presentation2/src/orxonox/sound/AmbientSound.cc	(revision 6406)
@@ -35,5 +35,4 @@
 #include "core/XMLPort.h"
 #include "SoundManager.h"
-#include "MoodManager.h"
 
 namespace orxonox
@@ -111,12 +110,17 @@
     {
         this->ambientSource_ = source;
+        this->moodChanged(this->getMood());
+    }
+
+    void AmbientSound::moodChanged(const std::string& mood)
+    {
         if (GameMode::playsSound())
         {
-            const std::string& path = "ambient/" + MoodManager::getInstance().getMood() + '/' + source;
+            const std::string& path = "ambient/" + MoodManager::getInstance().getMood() + '/' + this->ambientSource_;
             shared_ptr<ResourceInfo> fileInfo = Resource::getInfo(path);
             if (fileInfo != NULL)
                 this->setSource(path);
             else
-                COUT(3) << "Sound: " << source << ": Not a valid name! Ambient sound will not change." << std::endl;
+                COUT(3) << "Sound: " << this->ambientSource_ << ": Not a valid name! Ambient sound will not change." << std::endl;
         }
     }
Index: code/branches/presentation2/src/orxonox/sound/AmbientSound.h
===================================================================
--- code/branches/presentation2/src/orxonox/sound/AmbientSound.h	(revision 6404)
+++ code/branches/presentation2/src/orxonox/sound/AmbientSound.h	(revision 6406)
@@ -34,6 +34,7 @@
 
 #include "core/BaseObject.h"
-#include "sound/BaseSound.h"
 #include "network/synchronisable/Synchronisable.h"
+#include "BaseSound.h"
+#include "MoodManager.h"
 
 namespace orxonox
@@ -44,5 +45,5 @@
      *
      */
-    class _OrxonoxExport AmbientSound : public BaseSound, public BaseObject, public Synchronisable
+    class _OrxonoxExport AmbientSound : public BaseSound, public BaseObject, public Synchronisable, public MoodListener
     {
         friend class SoundManager;
@@ -74,4 +75,5 @@
         void registerVariables();
         float getRealVolume();
+        void moodChanged(const std::string& mood);
         inline void ambientSourceChanged()
             { this->setAmbientSource(this->ambientSource_); }
