Index: /code/branches/presentation2/src/modules/weapons/weaponmodes/HsW01.cc
===================================================================
--- /code/branches/presentation2/src/modules/weapons/weaponmodes/HsW01.cc	(revision 6306)
+++ /code/branches/presentation2/src/modules/weapons/weaponmodes/HsW01.cc	(revision 6307)
@@ -41,6 +41,4 @@
 #include "worldentities/WorldEntity.h"
 #include "worldentities/pawns/Pawn.h"
-
-#include "sound/WorldSound.h"
 
 namespace orxonox
Index: /code/branches/presentation2/src/modules/weapons/weaponmodes/LightningGun.cc
===================================================================
--- /code/branches/presentation2/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 6306)
+++ /code/branches/presentation2/src/modules/weapons/weaponmodes/LightningGun.cc	(revision 6307)
@@ -36,6 +36,4 @@
 #include "worldentities/pawns/Pawn.h"
 
-#include "sound/WorldSound.h"
-
 namespace orxonox
 {
Index: /code/branches/presentation2/src/modules/weapons/weaponmodes/RocketFire.cc
===================================================================
--- /code/branches/presentation2/src/modules/weapons/weaponmodes/RocketFire.cc	(revision 6306)
+++ /code/branches/presentation2/src/modules/weapons/weaponmodes/RocketFire.cc	(revision 6307)
@@ -38,6 +38,4 @@
 #include "worldentities/pawns/Pawn.h"
 
-#include "sound/WorldSound.h"
-
 namespace orxonox
 {
Index: /code/branches/presentation2/src/orxonox/sound/AmbientSound.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/AmbientSound.cc	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/sound/AmbientSound.cc	(revision 6307)
@@ -42,5 +42,5 @@
 
     AmbientSound::AmbientSound(BaseObject* creator)
-        : BaseObject(creator)
+        : BaseObject(creator), Synchronisable(creator)
     {
         RegisterObject(AmbientSound);
@@ -48,8 +48,19 @@
         // Ambient sounds always fade in
         this->setVolume(0);
+        this->registerVariables();
     }
 
     AmbientSound::~AmbientSound()
     {
+    }
+    
+    void AmbientSound::registerVariables()
+    {
+        registerVariable(volume_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::volumeChanged));
+//         registerVariable(source_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::sourceChanged));
+        registerVariable(ambientSource_, ObjectDirection::ToClient, new NetworkCallback<AmbientSound>(this, &AmbientSound::ambientSourceChanged));
+        registerVariable(bLooping_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::loopingChanged));
+        registerVariable(pitch_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::pitchChanged));
+        registerVariable((int&)(BaseSound::state_), ObjectDirection::ToClient);
     }
 
Index: /code/branches/presentation2/src/orxonox/sound/AmbientSound.h
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/AmbientSound.h	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/sound/AmbientSound.h	(revision 6307)
@@ -35,4 +35,5 @@
 #include "core/BaseObject.h"
 #include "sound/BaseSound.h"
+#include "network/synchronisable/Synchronisable.h"
 
 namespace orxonox
@@ -43,5 +44,5 @@
      *
      */
-    class _OrxonoxExport AmbientSound : public BaseSound, public BaseObject
+    class _OrxonoxExport AmbientSound : public BaseSound, public BaseObject, public Synchronisable
     {
         friend class SoundManager;
@@ -63,4 +64,5 @@
         virtual void setAmbientSource(const std::string& source);
         const std::string& getAmbientSource() const { return this->ambientSource_; }
+        inline void ambientSourceChanged(){ this->setAmbientSource(this->ambientSource_); }
 
     private:
@@ -68,4 +70,6 @@
         void doStop();
         void doPause();
+        
+        void registerVariables();
 
         std::string ambientSource_; //!< Analogous to source_, but mood independent
Index: /code/branches/presentation2/src/orxonox/sound/BaseSound.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/BaseSound.cc	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/sound/BaseSound.cc	(revision 6307)
@@ -46,5 +46,5 @@
         , bPooling_(false)
         , volume_(1.0)
-        , bLoop_(false)
+        , bLooping_(false)
         , state_(Stopped)
         , pitch_ (1.0)
@@ -151,5 +151,5 @@
     void BaseSound::setLooping(bool val)
     {
-        this->bLoop_ = val;
+        this->bLooping_ = val;
         if (GameMode::playsSound() && alIsSource(this->audioSource_))
             alSourcei(this->audioSource_, AL_LOOPING, (val ? AL_TRUE : AL_FALSE));
@@ -204,5 +204,5 @@
         if (ALuint error = alGetError())
         {
-            COUT(1) << "Sound Error: Could not load file \"" << source << "\": " << SoundManager::getALErrorString << std::endl;
+            COUT(1) << "Sound Error: Could not load file \"" << source << "\": " << SoundManager::getALErrorString(error) << std::endl;
             return;
         }
Index: /code/branches/presentation2/src/orxonox/sound/BaseSound.h
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/BaseSound.h	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/sound/BaseSound.h	(revision 6307)
@@ -68,27 +68,24 @@
         virtual void setSource(const std::string& source);
         virtual const std::string& getSource() const { return this->source_; }
+        inline void sourceChanged(){ this->setSource(this->source_); }
 
         void setVolume(float vol);
         float getVolume() const { return this->volume_; }
+        inline void volumeChanged(){ this->setVolume(this->volume_); }
         
         virtual float getVolumeGain();
         void updateVolume(void);
 
-        bool getLooping() const   { return this->bLoop_; }
+        bool getLooping() const   { return this->bLooping_; }
         void setLooping(bool val);
+        inline void loopingChanged(){ this->setLooping(this->bLooping_); }
 
         float getPitch() const   { return this->pitch_; }
         void setPitch(float pitch);
+        inline void pitchChanged(){ this->setPitch(this->pitch_); }
 
         //ALuint getALAudioSource(void);
 
     protected:
-        ALint getSourceState() const;
-
-        ALuint          audioSource_;
-        bool            bPooling_;
-        shared_ptr<SoundBuffer> soundBuffer_;
-
-    private:
         enum State
         {
@@ -97,10 +94,16 @@
             Paused
         };
+        ALint getSourceState() const;
 
+        ALuint          audioSource_;
+        bool            bPooling_;
+        shared_ptr<SoundBuffer> soundBuffer_;
         std::string     source_;
         float           volume_;
-        bool            bLoop_;
+        bool            bLooping_;
         State           state_;
         float           pitch_;
+
+    private:
         DataStreamPtr   dataStream_;
     };
Index: /code/branches/presentation2/src/orxonox/sound/WorldSound.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/WorldSound.cc	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/sound/WorldSound.cc	(revision 6307)
@@ -36,4 +36,5 @@
 #include "core/XMLPort.h"
 #include "SoundManager.h"
+#include <core/ConsoleCommandCompilation.h>
 
 namespace orxonox
@@ -47,8 +48,18 @@
         // WorldSound buffers should be pooled when they're not used anymore
         this->bPooling_ = true;
+        this->registerVariables();
     }
 
     WorldSound::~WorldSound()
     {
+    }
+    
+    void WorldSound::registerVariables()
+    {
+        registerVariable(volume_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::volumeChanged));
+        registerVariable(source_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::sourceChanged));
+        registerVariable(bLooping_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::loopingChanged));
+        registerVariable((int&)(BaseSound::state_), ObjectDirection::ToClient);
+        registerVariable(pitch_, ObjectDirection::ToClient, new NetworkCallback<BaseSound>(static_cast<BaseSound*>(this), &BaseSound::pitchChanged));
     }
 
Index: /code/branches/presentation2/src/orxonox/sound/WorldSound.h
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/WorldSound.h	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/sound/WorldSound.h	(revision 6307)
@@ -57,4 +57,5 @@
 
     private:
+        void registerVariables();
     };
 }
Index: /code/branches/presentation2/src/orxonox/weaponsystem/WeaponMode.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/weaponsystem/WeaponMode.cc	(revision 6306)
+++ /code/branches/presentation2/src/orxonox/weaponsystem/WeaponMode.cc	(revision 6307)
@@ -71,7 +71,12 @@
         this->muzzleOrientation_ = Quaternion::IDENTITY;
 
-        this->defSndWpnFire_ = new WorldSound(this);
-        this->defSndWpnFire_->setLooping(false);
-        this->bSoundAttached_ = false;
+        if( GameMode::isMaster() )
+        {
+            this->defSndWpnFire_ = new WorldSound(this);
+            this->defSndWpnFire_->setLooping(false);
+            this->bSoundAttached_ = false;
+        }
+        else
+            this->defSndWpnFire_ = 0;
     }
 
@@ -80,5 +85,6 @@
         if(this->isInitialized())
         {
-            delete this->defSndWpnFire_;
+            if( this->defSndWpnFire_ )
+                delete this->defSndWpnFire_;
         }
     }
@@ -106,5 +112,5 @@
     {
         (*reloadTime) = this->reloadTime_;
-        if( !this->bSoundAttached_ )
+        if( !this->bSoundAttached_ && GameMode::isMaster() )
         {
             assert(this->getWeapon() && this->getWeapon()->getWeaponSlot());
@@ -130,5 +136,5 @@
             this->reloadTimer_.startTimer();
 
-            if(!(this->defSndWpnFire_->isPlaying()))
+            if( this->defSndWpnFire_ && !(this->defSndWpnFire_->isPlaying()))
             {
                 this->defSndWpnFire_->play();
@@ -222,5 +228,5 @@
     void WeaponMode::reloaded()
     {
-        if(this->defSndWpnFire_->isPlaying())
+        if( this->defSndWpnFire_ && this->defSndWpnFire_->isPlaying())
         {
             this->defSndWpnFire_->stop();
@@ -257,10 +263,14 @@
     void WeaponMode::setDefaultSound(const std::string& soundPath)
     {
-        this->defSndWpnFire_->setSource(soundPath);
+        if( this->defSndWpnFire_ )
+            this->defSndWpnFire_->setSource(soundPath);
     }
 
     const std::string& WeaponMode::getDefaultSound()
     {
-        return this->defSndWpnFire_->getSource();
+        if( this->defSndWpnFire_ )
+            return this->defSndWpnFire_->getSource();
+        else
+            return std::string();
     }
 }
