Index: /trunk/src/lib/sound/ogg_player.cc
===================================================================
--- /trunk/src/lib/sound/ogg_player.cc	(revision 7298)
+++ /trunk/src/lib/sound/ogg_player.cc	(revision 7299)
@@ -102,9 +102,10 @@
     return false;
   }
+  this->state |= FileOpened;
 
   // acquiring the vorbis-properties.
   vorbisInfo = ov_info(&oggStream, -1);
   vorbisComment = ov_comment(&oggStream, -1);
-  this->state |= FileOpened;
+
   if(vorbisInfo->channels == 1)
     format = AL_FORMAT_MONO16;
@@ -129,5 +130,4 @@
 void OggPlayer::release()
 {
-  this->printState();
   if (this->state & SourceAllocated)
   {
Index: /trunk/src/lib/sound/ogg_player.h
===================================================================
--- /trunk/src/lib/sound/ogg_player.h	(revision 7298)
+++ /trunk/src/lib/sound/ogg_player.h	(revision 7299)
@@ -19,5 +19,5 @@
 
 
-#define BUFFER_SIZE (8096 * 16)
+#define BUFFER_SIZE (8096 * 2)
 
 
Index: /trunk/src/lib/sound/sound_engine.cc
===================================================================
--- /trunk/src/lib/sound/sound_engine.cc	(revision 7298)
+++ /trunk/src/lib/sound/sound_engine.cc	(revision 7299)
@@ -36,5 +36,5 @@
 //////////////////
 /**
- *  standard constructor
+ * @brief standard constructor
 */
 SoundEngine::SoundEngine ()
@@ -59,10 +59,10 @@
 
 /**
- *  the singleton reference to this class
+ * @brief the singleton reference to this class
 */
 SoundEngine* SoundEngine::singletonRef = NULL;
 
 /**
- *  standard deconstructor
+ * @brief standard destructor
  */
 SoundEngine::~SoundEngine ()
@@ -105,5 +105,5 @@
 
 /**
- * loads the settings of the SoundEngine from an ini-file
+ * @brief loads the settings of the SoundEngine from an ini-file
  */
 void SoundEngine::loadSettings()
@@ -120,5 +120,5 @@
 
 /**
- *  creates a new SoundSource.
+ * @brief creates a new SoundSource.
  * @param fileName The Name to load the SoundBuffer from
  * @param sourceNode The sourceNode to bind this SoundSource to.
@@ -133,5 +133,5 @@
 
 /**
- *  Sets the doppler values of openAL
+ * @brief Sets the doppler values of openAL
  * @param dopplerFactor the extent of the doppler-effect
  * @param dopplerVelocity the Speed the sound travels
@@ -147,4 +147,8 @@
 
 
+/**
+ * @brief retrieves an OpenAL Source from the availiable Sources.
+ * @param source the Source to fill with the Value.
+ */
 void SoundEngine::popALSource(ALuint& source)
 {
@@ -158,8 +162,12 @@
     this->ALSources.pop();
     SDL_mutexV(this->sourceMutex);
-    printf("Retrieve Source %d\n", source);
-  }
-}
-
+  }
+}
+
+
+/**
+ * @brief Pushes an OpenAL Source back into the Stack of known sources
+ * @param source the Source to push onto the top of the SourceStack
+ */
 void SoundEngine::pushALSource(ALuint& source)
 {
@@ -174,6 +182,6 @@
 
 /**
- *  updates all The positions, Directions and Velocities of all Sounds
-*/
+ * @brief updates all The positions, Directions and Velocities of all Sounds
+ */
 void SoundEngine::update()
 {
@@ -239,57 +247,4 @@
 }
 
-/**
- *  Removes all the Buffers that are not anymore needed by any Sources
-*/
-void SoundEngine::flushUnusedBuffers()
-{
-  /// FIXME
-  /*  if(this->sourceList && this->bufferList)
-    {
-      tIterator<BaseObject>* bufferIterator = this->bufferList->getIterator();
-      SoundBuffer* enumBuffer = (SoundBuffer*)bufferIterator->firstElement();
-      while (enumBuffer)
-      {
-        tIterator<BaseObject>* sourceIterator = this->sourceList->getIterator();
-        SoundSource* enumSource = (SoundSource*)sourceIterator->firstElement();
-        while (enumSource)
-        {
-          if (enumBuffer == enumSource->getBuffer())
-            break;
-          enumSource = (SoundSource*)sourceIterator->nextElement();
-        }
-        delete sourceIterator;
-        if (enumSource == NULL)
-          ResourceManager::getInstance()->unload(enumBuffer);
-        enumBuffer = (SoundBuffer*)bufferIterator->nextElement();
-      }
-      delete bufferIterator;
-  }*/ /// FIXME
-}
-
-/**
- * flushes all the Buffers
- * deletes them from the BufferList, and also removes them via the ResourceManager.
- */
-void SoundEngine::flushAllBuffers()
-{
-  if (this->bufferList)
-  {
-    while (this->bufferList->size() > 0)
-      ResourceManager::getInstance()->unload(static_cast<SoundBuffer*>(this->bufferList->front()), RP_LEVEL);
-  }
-}
-
-/**
- * deletes all the Sources.
- */
-void SoundEngine::flushAllSources()
-{
-  if (this->sourceList)
-  {
-    while(this->sourceList->size() > 0)
-      delete this->sourceList->front();
-  }
-}
 
 /**
@@ -378,4 +333,9 @@
 }
 
+/**
+ * @brief checks for an OpenAL error
+ * @param error the ErrorMessage to display
+ * @param line on what line did the error occure.
+ */
 bool SoundEngine::checkError(const std::string& error, unsigned int line)
 {
@@ -390,4 +350,9 @@
 }
 
+/**
+ * @brief check for an ALC error.
+ * @brief error the Error-String to display
+ * @param line on that line, the error occured (debugging mode).
+ */
 bool SoundEngine::checkALCError(const std::string& error, unsigned int line)
 {
Index: /trunk/src/lib/sound/sound_engine.h
===================================================================
--- /trunk/src/lib/sound/sound_engine.h	(revision 7298)
+++ /trunk/src/lib/sound/sound_engine.h	(revision 7299)
@@ -52,7 +52,4 @@
     void pushALSource(ALuint& source);
 
-    void flushUnusedBuffers();
-    void flushAllBuffers();
-    void flushAllSources();
 
     bool initAudio();
Index: /trunk/src/lib/sound/sound_source.cc
===================================================================
--- /trunk/src/lib/sound/sound_source.cc	(revision 7298)
+++ /trunk/src/lib/sound/sound_source.cc	(revision 7299)
@@ -31,6 +31,4 @@
   this->setClassID(CL_SOUND_SOURCE, "SoundSource");
 
-  ALenum result;
-
   // adding the Source to the SourcesList of the SoundEngine
   this->buffer = buffer;
@@ -39,4 +37,59 @@
   this->sourceID = 0;
   this->bPlay = false;
+}
+
+/**
+ * @brief construct a SoundSource out of the another soundSource
+ * @param source the Source to create this source from.
+ *
+ * Copies the buffer from source to this Source.
+ * Acquires a new SourceID if source is Playing.
+ */
+SoundSource::SoundSource(const SoundSource& source)
+{
+  this->setClassID(CL_SOUND_SOURCE, "SoundSource");
+
+  // adding the Source to the SourcesList of the SoundEngine
+  this->buffer = source.buffer;
+  this->sourceNode = source.sourceNode;
+
+  this->sourceID = 0;
+  if (source.bPlay == true)
+  {
+    this->bPlay = true;
+    SoundEngine::getInstance()->popALSource(this->sourceID);
+  }
+  else
+    this->bPlay = false;
+}
+
+/**
+ * @brief paste a copy of the source into this Source.
+ * @param source the SoundSource to paste into this one.
+ * @returns a Reference to this Source.
+ *
+ */
+SoundSource& SoundSource::operator=(const SoundSource& source)
+{
+  this->buffer = source.buffer;
+  this->sourceNode = sourceNode;
+
+  if (source.bPlay)
+    this->play();
+  else
+    this->stop();
+}
+
+/**
+ * @brief compares two Sources with each other.
+ * @param source the Source to compare against this One.
+ * Two Sources are the same, if the PNodes match, and the Sound Played are the same.
+ * The alSource must not match, because no two Sources can have the same alSource.
+ */
+bool SoundSource::operator==(const SoundSource& source)
+{
+  return (this->buffer == source.buffer &&
+          this->bPlay == source.bPlay &&
+          this->sourceNode == source.sourceNode);
 }
 
@@ -77,5 +130,5 @@
     }
   }
-//  assert (this->sourceID != 0);
+  //  assert (this->sourceID != 0);
 
   alSourceStop(this->sourceID);
Index: /trunk/src/lib/sound/sound_source.h
===================================================================
--- /trunk/src/lib/sound/sound_source.h	(revision 7298)
+++ /trunk/src/lib/sound/sound_source.h	(revision 7299)
@@ -19,4 +19,8 @@
   public:
     SoundSource(const PNode* sourceNode = NULL, const SoundBuffer* buffer = NULL);
+    SoundSource(const SoundSource& source);
+    SoundSource& operator=(const SoundSource& source);
+    bool operator==(const SoundSource& source);
+
     virtual ~SoundSource();
 
Index: /trunk/src/story_entities/game_world_data.cc
===================================================================
--- /trunk/src/story_entities/game_world_data.cc	(revision 7298)
+++ /trunk/src/story_entities/game_world_data.cc	(revision 7299)
@@ -345,7 +345,4 @@
     this->setSoundTrack("");
   this->music = NULL;
-  /* stop the sound eninge */
-  SoundEngine::getInstance()->flushAllBuffers();
-  SoundEngine::getInstance()->flushAllSources();
 
   /* unload the shaders */
