Index: trunk/src/lib/math/quaternion.cc
===================================================================
--- trunk/src/lib/math/quaternion.cc	(revision 10643)
+++ trunk/src/lib/math/quaternion.cc	(revision 10695)
@@ -79,6 +79,7 @@
  * @param yaw: the yaw in radians
  */
-Quaternion::Quaternion (float roll, float pitch, float yaw)
-{
+Quaternion::Quaternion (float attitude, float heading, float bank)
+{
+/*
   float cr, cp, cy, sr, sp, sy, cpcy, spsy;
 
@@ -99,5 +100,21 @@
   v.y = cr * sp * cy + sr * cp * sy;
   v.z = cr * cp * sy - sr * sp * cy;
-}
+*/
+  float c1, c2, c3, s1, s2, s3;
+
+  c1 = cos(heading / 2);
+  c2 = cos(attitude / 2);
+  c3 = cos(bank / 2);
+
+  s1 = sin(heading / 2);
+  s2 = sin(attitude / 2);
+  s3 = sin(bank / 2);
+
+  w = c1 * c2 * c3 - s1 * s2 * s3;
+  v.x = s1 * s2 * c3 +c1 * c2 * s3;
+  v.y = s1 * c2 * c3 + c1 * s2 * s3;
+  v.z = c1 * s2 * c3 - s1 * c2 * s3;
+}
+
 
 /**
@@ -271,4 +288,11 @@
 }
 
+/**
+ * @returns Bank, Attitude, Heading
+ */
+Vector Quaternion::getRotation() const
+{
+  return Vector(getAttitude(), getHeading(), getBank());
+}
 
 
Index: trunk/src/lib/math/quaternion.h
===================================================================
--- trunk/src/lib/math/quaternion.h	(revision 10643)
+++ trunk/src/lib/math/quaternion.h	(revision 10695)
@@ -109,4 +109,7 @@
     float getBank() const;
     Quaternion getBankQuat() const;
+
+    Vector getRotation() const;
+
     /** @returns the rotational axis of this Quaternion */
     inline Vector getSpacialAxis() const { return this->v / sin(acos(w));/*sqrt(v.x*v.x + v.y*v.y + v.z+v.z);*/ };
Index: trunk/src/lib/sound/sound_engine.cc
===================================================================
--- trunk/src/lib/sound/sound_engine.cc	(revision 10643)
+++ trunk/src/lib/sound/sound_engine.cc	(revision 10695)
@@ -317,4 +317,5 @@
       alSourcef (source, AL_PITCH,    1.0      );
       alSourcef (source, AL_GAIN,     this->getEffectsVolume() );
+      alSourcef (source, AL_ROLLOFF_FACTOR, 0.0 );
       alSourcei (source, AL_LOOPING,  AL_FALSE );
       this->ALSources.push(source);
Index: trunk/src/lib/sound/sound_source.cc
===================================================================
--- trunk/src/lib/sound/sound_source.cc	(revision 10643)
+++ trunk/src/lib/sound/sound_source.cc	(revision 10695)
@@ -126,5 +126,6 @@
       alSourcei (this->sourceID, AL_BUFFER, this->buffer.getID());
       alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
-      alSourcef (this->sourceID, AL_GAIN, 1);
+//      alSourcef (this->sourceID, AL_ROLLOFF_FACTOR, 0.0);
+      alSourcef (this->sourceID, AL_GAIN, SoundEngine::getInstance()->getEffectsVolume());
       alSourcePlay(this->sourceID);
 
@@ -151,5 +152,6 @@
     alSourcei (this->sourceID, AL_BUFFER, buffer.getID());
     alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
-    alSourcef (this->sourceID, AL_GAIN, 1);
+//    alSourcef (this->sourceID, AL_ROLLOFF_FACTOR, 0.0);
+    alSourcef (this->sourceID, AL_GAIN, SoundEngine::getInstance()->getEffectsVolume());
 
     alSourcePlay(this->sourceID);
@@ -168,6 +170,7 @@
    * @param buffer the buffer to play back on this Source
    * @param gain the gain of the sound buffer
-  */
-  void SoundSource::play(const SoundBuffer& buffer, float gain)
+   * @param rolloff the rolloff of the sound buffer
+  */
+  void SoundSource::play(const SoundBuffer& buffer, float gain, float rolloff)
   {
     if (!this->retrieveSource())
@@ -180,4 +183,5 @@
     alSourcei (this->sourceID, AL_BUFFER, buffer.getID());
     alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
+    alSourcef (this->sourceID, AL_ROLLOFF_FACTOR, rolloff);
     alSourcef (this->sourceID, AL_GAIN, gain);
 
@@ -193,10 +197,11 @@
 
   /**
-   * @brief Plays back buffer on this Source with gain and looping possibility
+   * @brief Plays back buffer on this Source with gain, rolloff and looping possibility
    * @param buffer the buffer to play back on this Source
-   *  @param gain the gain of the sound buffer
+   * @param gain the gain of the sound buffer
+   * @param rolloff the rolloff of the sound buffer
    * @param loop if true, sound gets looped
    */
-  void SoundSource::play(const SoundBuffer& buffer, float gain, bool loop)
+  void SoundSource::play(const SoundBuffer& buffer, float gain, float rolloff, bool loop)
   {
     if (!this->retrieveSource())
@@ -215,4 +220,5 @@
 
     alSourcef (this->sourceID, AL_GAIN, gain);
+    alSourcef (this->sourceID, AL_ROLLOFF_FACTOR, rolloff);
 
     alSourcePlay(this->sourceID);
@@ -226,4 +232,37 @@
   }
 
+  /**
+   * @brief Plays back buffer on this Source with looping possibility
+   * @param buffer the buffer to play back on this Source
+   * @param loop if true, sound gets looped
+   */
+  void SoundSource::play(const SoundBuffer& buffer, bool loop)
+  {
+    if (!this->retrieveSource())
+    {
+      PRINTF(3)("No more Free sources (You might consider raising the Source-Count).\n");
+      return;
+    }
+
+    alSourceStop(this->sourceID);
+    alSourcei (this->sourceID, AL_BUFFER, buffer.getID());
+
+    if (loop)
+      alSourcei (this->sourceID, AL_LOOPING,  AL_TRUE);
+    else
+      alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
+
+    alSourcef (this->sourceID, AL_GAIN, SoundEngine::getInstance()->getEffectsVolume());
+
+    alSourcePlay(this->sourceID);
+
+    if (unlikely(this->buffer.getID() != 0))
+      alSourcei (this->sourceID, AL_BUFFER, this->buffer.getID());
+    this->bPlay = true;
+
+    if (DEBUG_LEVEL >= 3)
+      SoundEngine::checkError("Play Source", __LINE__);
+  }
+  
   /**
    * @brief Changes the volume of an (active) buffer
Index: trunk/src/lib/sound/sound_source.h
===================================================================
--- trunk/src/lib/sound/sound_source.h	(revision 10643)
+++ trunk/src/lib/sound/sound_source.h	(revision 10695)
@@ -30,6 +30,7 @@
     void play();
     void play(const SoundBuffer& buffer);
-    void play(const SoundBuffer& buffer, float gain);
-    void play(const SoundBuffer& buffer, float gain, bool loop);
+    void play(const SoundBuffer& buffer, float gain, float rolloff);
+    void play(const SoundBuffer& buffer, float gain, float rolloff, bool loop);
+    void play(const SoundBuffer& buffer, bool loop);
 
     void gain(const SoundBuffer& buffer, float gain);
