Index: /code/branches/presentation2/data/levels/templates/spaceship_assff.oxt
===================================================================
--- /code/branches/presentation2/data/levels/templates/spaceship_assff.oxt	(revision 6201)
+++ /code/branches/presentation2/data/levels/templates/spaceship_assff.oxt	(revision 6202)
@@ -64,4 +64,6 @@
    speedupdown    =  50
 
+   defEngineSndNormal = "sounds/Engine_low.ogg"
+
    accelerationfront     = 500
    accelerationbrake     = 500
@@ -81,5 +83,5 @@
     </EffectContainer>
     <EffectContainer condition="normal or brake">
-      <WorldSound mainstate="activity" source="sounds/Engine_low.ogg" loop=1 active=false/>
+      <!-- WorldSound mainstate="activity" source="sounds/Engine_low.ogg" loop=1 active=false -->
     </EffectContainer>
     <EffectContainer condition="normal or boost">
Index: /code/branches/presentation2/src/orxonox/items/MultiStateEngine.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/items/MultiStateEngine.cc	(revision 6201)
+++ /code/branches/presentation2/src/orxonox/items/MultiStateEngine.cc	(revision 6202)
@@ -41,8 +41,11 @@
 #include "worldentities/EffectContainer.h"
 #include "worldentities/pawns/SpaceShip.h"
+#include "sound/WorldSound.h"
 
 namespace orxonox
 {
     static const float FORWARD_EFFECT_VELOCITY_THRESHOLD = 20;
+    static const float MAX_VELOCITY_NORMAL = 111;
+    static const float MAX_VELOCITY_BOOST = 221;
 
     CreateFactory(MultiStateEngine);
@@ -51,4 +54,7 @@
     {
         RegisterObject(MultiStateEngine);
+
+        defEngineSndNormal_ = new WorldSound(this);
+        defEngineSndNormal_->setLooping(true);
 
         this->lua_ = new LuaState();
@@ -66,4 +72,5 @@
                 for (std::vector<WorldEntity*>::const_iterator it2 = (*it)->getEffectsBegin(); it2 != (*it)->getEffectsBegin(); ++it2)
                     (*it2)->destroy();
+            delete this->defEngineSndNormal_;
             delete this->lua_;
         }
@@ -74,4 +81,5 @@
         SUPER(MultiStateEngine, XMLPort, xmlelement, mode);
         XMLPortObject(MultiStateEngine, EffectContainer, "",  addEffectContainer,  getEffectContainer,  xmlelement, mode);
+        XMLPortParam(MultiStateEngine, "defEngineSndNormal",  setDefEngSndNormal,  getDefEngSndNormal,  xmlelement, mode);
     }
 
@@ -92,11 +100,24 @@
                 const Vector3& velocity = this->getShip()->getLocalVelocity();
 
+                float pitch = velocity.length();
                 bool forward = (direction.z < 0 && velocity.z < -FORWARD_EFFECT_VELOCITY_THRESHOLD);
 
                 int newState = 0;
                 if (this->getShip()->getBoost() && forward)
+                {
                     newState = Boost;
+                    pitch = pitch/MAX_VELOCITY_BOOST + 1;
+                    pitch = pitch > 2 ? 2 : pitch;
+                    pitch = pitch < 0.5 ? 0.5 : pitch;
+                    defEngineSndNormal_->setPitch(pitch);
+                }
                 else if (forward && !newState) // newState == Boost
+                {
                     newState = Normal;
+                    pitch = pitch/MAX_VELOCITY_NORMAL + 1;
+                    pitch = pitch > 2 ? 2 : pitch;
+                    pitch = pitch < 0.5 ? 0.5 : pitch;
+                    defEngineSndNormal_->setPitch(pitch);
+                }
                 else if (direction.z > 0 && velocity.z < 0)
                     newState = Brake;
@@ -116,4 +137,12 @@
                         lua_pushboolean(this->lua_->getInternalLuaState(), newState & Normal);
                         lua_setglobal(this->lua_->getInternalLuaState(), "normal");
+                        if(newState & Normal)
+                        {
+                            defEngineSndNormal_->play();
+                        }
+                        else
+                        {
+                            defEngineSndNormal_->stop();
+                        }
                     }
                     if (changes & Brake)
@@ -150,4 +179,6 @@
         if (!ship)
             return;
+
+        this->getShip()->attach(defEngineSndNormal_);
 
         for (std::vector<EffectContainer*>::const_iterator it = this->effectContainers_.begin(); it != this->effectContainers_.end(); ++it)
@@ -179,3 +210,13 @@
         return NULL;
     }
+
+    void MultiStateEngine::setDefEngSndNormal(const std::string &engineSound)
+    {
+        defEngineSndNormal_->setSource(engineSound);
+    }
+
+    const std::string& MultiStateEngine::getDefEngSndNormal()
+    {
+        return defEngineSndNormal_->getSource();
+    }
 }
Index: /code/branches/presentation2/src/orxonox/items/MultiStateEngine.h
===================================================================
--- /code/branches/presentation2/src/orxonox/items/MultiStateEngine.h	(revision 6201)
+++ /code/branches/presentation2/src/orxonox/items/MultiStateEngine.h	(revision 6202)
@@ -64,4 +64,6 @@
             void addEffectContainer(EffectContainer* effect);
             EffectContainer* getEffectContainer(unsigned int index) const;
+            void setDefEngSndNormal(const std::string& engineSound);
+            const std::string& getDefEngSndNormal();
 
         private:
@@ -69,4 +71,5 @@
             LuaState* lua_;
             std::vector<EffectContainer*> effectContainers_;
+            WorldSound* defEngineSndNormal_;
     };
 }
Index: /code/branches/presentation2/src/orxonox/sound/BaseSound.cc
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/BaseSound.cc	(revision 6201)
+++ /code/branches/presentation2/src/orxonox/sound/BaseSound.cc	(revision 6202)
@@ -50,4 +50,7 @@
         RegisterRootObject(BaseSound);
 
+        this->volume_ = 1;
+        this->pitch_ = 1;
+
         if (GameMode::playsSound())
         {
@@ -129,4 +132,17 @@
         if (GameMode::playsSound())
             alSourcei(this->audioSource_, AL_LOOPING, (val ? AL_TRUE : AL_FALSE));
+    }
+
+    void BaseSound::setPitch(float pitch)
+    {
+        if (pitch > 2 || pitch < 0.5)
+        {
+            COUT(2) << "Sound warning: pitch out of range, cropping value." << std::endl;
+            pitch = pitch > 2 ? 2 : pitch;
+            pitch = pitch < 0.5 ? 0.5 : pitch;
+        }        
+        this->pitch_ = pitch;
+        if (GameMode::playsSound())
+            alSourcei(this->audioSource_, AL_PITCH, pitch);
     }
 
@@ -194,4 +210,5 @@
         alSource3f(this->audioSource_, AL_POSITION,  0, 0, 0);
         this->updateVolume();
+        this->setPitch(this->getPitch());
         alSourcei (this->audioSource_, AL_LOOPING, (this->bLoop_ ? AL_TRUE : AL_FALSE));
         if (this->isPlaying() || this->isPaused())
Index: /code/branches/presentation2/src/orxonox/sound/BaseSound.h
===================================================================
--- /code/branches/presentation2/src/orxonox/sound/BaseSound.h	(revision 6201)
+++ /code/branches/presentation2/src/orxonox/sound/BaseSound.h	(revision 6202)
@@ -74,4 +74,7 @@
         void setLooping(bool val);
 
+        float getPitch() const   { return this->pitch_; }
+        void setPitch(float pitch);
+
         //ALuint getALAudioSource(void);
 
@@ -92,4 +95,5 @@
         std::string     source_;
         float           volume_;
+        float           pitch_;
         bool            bLoop_;
         State           state_;
