Index: code/branches/presentation2/src/modules/weapons/projectiles/Rocket.cc
===================================================================
--- code/branches/presentation2/src/modules/weapons/projectiles/Rocket.cc	(revision 6382)
+++ code/branches/presentation2/src/modules/weapons/projectiles/Rocket.cc	(revision 6383)
@@ -115,19 +115,11 @@
         {
             if (GameMode::isMaster() && this->player_)
-            {
                 this->player_->stopTemporaryControl();
-            }
+
             if ( this->defSndWpnEngine_ )
-            {
-                if ( this->defSndWpnEngine_->isPlaying() )
-                    this->defSndWpnEngine_->stop();
                 this->defSndWpnEngine_->destroy();
-            }
+
             if ( this->defSndWpnLaunch_ )
-            {
-                if ( this->defSndWpnLaunch_->isPlaying())
-                    this->defSndWpnLaunch_->stop();
                 this->defSndWpnLaunch_->destroy();
-            }
         }
     }
Index: code/branches/presentation2/src/orxonox/sound/BaseSound.cc
===================================================================
--- code/branches/presentation2/src/orxonox/sound/BaseSound.cc	(revision 6382)
+++ code/branches/presentation2/src/orxonox/sound/BaseSound.cc	(revision 6383)
@@ -77,5 +77,5 @@
             if (!alIsSource(this->audioSource_))
             {
-                this->audioSource_ = SoundManager::getInstance().getSoundSource();
+                this->audioSource_ = SoundManager::getInstance().getSoundSource(this);
                 if (!alIsSource(this->audioSource_))
                     return;
Index: code/branches/presentation2/src/orxonox/sound/SoundManager.cc
===================================================================
--- code/branches/presentation2/src/orxonox/sound/SoundManager.cc	(revision 6382)
+++ code/branches/presentation2/src/orxonox/sound/SoundManager.cc	(revision 6383)
@@ -145,5 +145,5 @@
         alGenSources(1, &source);
         if (!alGetError() && alIsSource(source))
-            this->soundSources_.push_back(source);
+            this->availableSoundSources_.push_back(source);
         else
             ThrowException(InitialisationFailed, "Sound Error: Could not even create a single source");
@@ -153,5 +153,5 @@
         while (alIsSource(source) && !alGetError() && count <= this->maxSources_)
         {
-            this->soundSources_.push_back(source);
+            this->availableSoundSources_.push_back(source);
             alGenSources(1, &source);
             ++count;
@@ -195,4 +195,16 @@
     {
         this->processCrossFading(time.getDeltaTime());
+
+        // Check whether a sound object has stopped playing
+        for (unsigned int i = 0; i < this->usedSoundSources_.size(); ++i)
+        {
+            ALint state;
+            alGetSourcei(this->usedSoundSources_[i].first, AL_SOURCE_STATE, &state);
+            if (state == AL_STOPPED)
+            {
+                this->usedSoundSources_[i].second->stop();
+                --i;
+            }
+        }
     }
 
@@ -536,10 +548,11 @@
     }
 
-    ALuint SoundManager::getSoundSource()
-    {
-        if (!this->soundSources_.empty())
-        {
-            ALuint source = this->soundSources_.back();
-            this->soundSources_.pop_back();
+    ALuint SoundManager::getSoundSource(BaseSound* object)
+    {
+        if (!this->availableSoundSources_.empty())
+        {
+            ALuint source = this->availableSoundSources_.back();
+            this->availableSoundSources_.pop_back();
+            this->usedSoundSources_.push_back(std::make_pair(source, object));
             return source;
         }
@@ -556,8 +569,17 @@
     {
 #ifndef NDEBUG
-        for (std::vector<ALuint>::const_iterator it = this->soundSources_.begin(); it != this->soundSources_.end(); ++it)
+        for (std::vector<ALuint>::const_iterator it = this->availableSoundSources_.begin(); it != this->availableSoundSources_.end(); ++it)
             assert((*it) != source);
 #endif
-        this->soundSources_.push_back(source);
+        this->availableSoundSources_.push_back(source);
+        for (std::vector<std::pair<ALuint, BaseSound*> >::iterator it = this->usedSoundSources_.begin();
+            it != this->usedSoundSources_.end(); ++it)
+        {
+            if (it->first == source)
+            {
+                this->usedSoundSources_.erase(it);
+                break;
+            }
+        }
     }
 }
Index: code/branches/presentation2/src/orxonox/sound/SoundManager.h
===================================================================
--- code/branches/presentation2/src/orxonox/sound/SoundManager.h	(revision 6382)
+++ code/branches/presentation2/src/orxonox/sound/SoundManager.h	(revision 6383)
@@ -102,5 +102,5 @@
         void releaseSoundBuffer(const shared_ptr<SoundBuffer>& buffer, bool bPoolBuffer);
 
-        ALuint getSoundSource();
+        ALuint getSoundSource(BaseSound* object);
         void releaseSoundSource(ALuint source);
 
@@ -147,5 +147,6 @@
         // Sound source related
         unsigned int maxSources_;
-        std::vector<ALuint> soundSources_;
+        std::vector<ALuint> availableSoundSources_;
+        std::vector<std::pair<ALuint, BaseSound*> > usedSoundSources_;
 
         static SoundManager* singletonPtr_s;
