Index: branches/new_class_id/src/lib/sound/sound_buffer.cc
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer.cc	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_buffer.cc	(revision 9805)
@@ -20,12 +20,10 @@
 namespace OrxSound
 {
-  ObjectListDefinition(SoundBuffer);
   //////////////////
   /* SOUND-BUFFER */
   //////////////////
   SoundBuffer::SoundBuffer()
-  : data(new SoundBufferData)
+      : data(new SoundBufferData)
   {
-    this->registerObject(this, SoundBuffer::_objectList);
   }
   /**
@@ -34,10 +32,15 @@
    */
   SoundBuffer::SoundBuffer(const std::string& fileName)
-  : data(new SoundBufferData)
+      : data(new SoundBufferData)
   {
-    this->registerObject(this, SoundBuffer::_objectList);
-    this->setName(fileName);
-
     this->load(fileName);
   }
+
+  SoundBuffer::SoundBuffer(const SoundBuffer& buffer)
+      : data(buffer.data)
+  {  }
+
+  SoundBuffer::SoundBuffer(const SoundBufferData::Pointer& dataPointer)
+      : data(dataPointer)
+  {  };
 }
Index: branches/new_class_id/src/lib/sound/sound_buffer.h
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer.h	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_buffer.h	(revision 9805)
@@ -7,7 +7,4 @@
 #define _SOUND_BUFFER_H
 
-#include "base_object.h"
-#include "alincl.h"
-
 #include "sound_buffer_data.h"
 
@@ -15,12 +12,13 @@
 {
   //! A class that represents a datastructure to play Sounds.
-  class SoundBuffer : public BaseObject
+  class SoundBuffer
   {
-    ObjectListDeclaration(SoundBuffer);
   public:
     SoundBuffer();
-    SoundBuffer(const SoundBuffer& buffer) { this->data = buffer.data; }
-    SoundBuffer(const SoundBufferData::Pointer& dataPointer) { this->data = dataPointer; };
+    SoundBuffer(const SoundBuffer& buffer);
+    SoundBuffer(const SoundBufferData::Pointer& dataPointer);
     SoundBuffer(const std::string& fileName);
+
+    bool operator==(const SoundBuffer& buffer) const {return this->data == buffer.data; };
 
     /** @see SoundBufferData::load */
@@ -33,4 +31,5 @@
     /** @returns the ID of the buffer used in this SoundBuffer */
     inline ALuint getID() const { return this->data->getID(); }
+    inline bool loaded() const { return this->data->loaded(); }
 
     /** @returns the DataPointer */
@@ -38,6 +37,7 @@
     /** @param dataPointer the data to acquire @brief Buffer shall acquire dataPointers data */
     void acquireData(const SoundBufferData::Pointer& dataPointer)  { data = dataPointer; };
+
   private:
-    SoundBufferData::Pointer    data;
+    SoundBufferData::Pointer    data;                //!< Pointer to the Stored Data
   };
 }
Index: branches/new_class_id/src/lib/sound/sound_buffer_data.cc
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer_data.cc	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_buffer_data.cc	(revision 9805)
@@ -50,6 +50,5 @@
     this->size = 0;
     this->loop = AL_FALSE;
-
-
+    this->bLoaded = false;
   }
 
@@ -112,5 +111,8 @@
     SDL_FreeWAV(wavBuffer);
     if (SoundEngine::checkError("Could not load Wave file", __LINE__))
+    {
+      this->bLoaded = true;
       return true;
+    }
     else
       return false;
@@ -160,6 +162,6 @@
       return false;
 
+    this->bLoaded = true;
     return true ;
-
   }
 
Index: branches/new_class_id/src/lib/sound/sound_buffer_data.h
===================================================================
--- branches/new_class_id/src/lib/sound/sound_buffer_data.h	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_buffer_data.h	(revision 9805)
@@ -33,4 +33,5 @@
     /** @returns the ID of the buffer used in this SoundBuffer */
     inline ALuint getID() const { return this->bufferID; }
+    inline bool loaded() const { return bLoaded; };
 
   private:
@@ -42,4 +43,5 @@
     ALsizei       size;                 //!< The size of the Buffer.
     ALboolean     loop;                 //!< loop information.
+    bool          bLoaded;               //!< If the Sound was loaded this is true.
   };
 }
Index: branches/new_class_id/src/lib/sound/sound_engine.cc
===================================================================
--- branches/new_class_id/src/lib/sound/sound_engine.cc	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_engine.cc	(revision 9805)
@@ -26,4 +26,5 @@
 #include "util/preferences.h"
 #include "globals.h"
+#include "resource_sound_buffer.h"
 
 namespace OrxSound
@@ -119,9 +120,9 @@
   SoundSource* SoundEngine::createSource(const std::string& fileName, PNode* sourceNode)
   {
-    SoundBuffer* buffer = NULL;
+    SoundBuffer buffer;
     if (!fileName.empty())
     {
-      buffer= (SoundBuffer*)ResourceManager::getInstance()->load(fileName, WAV, RP_LEVEL);
-      if (buffer == NULL)
+      buffer = ResourceSoundBuffer(fileName);
+      if (!buffer.loaded())
         PRINTF(2)("Wav-Sound %s could not be loaded onto new Source\n", fileName.c_str());
     }
@@ -215,5 +216,5 @@
         if(play == AL_PLAYING)
         {
-	  if (likely((*sourceIT)->getNode() != NULL))
+          if (likely((*sourceIT)->getNode() != NULL))
           {
             alSource3f((*sourceIT)->getID(), AL_POSITION,
Index: branches/new_class_id/src/lib/sound/sound_source.cc
===================================================================
--- branches/new_class_id/src/lib/sound/sound_source.cc	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_source.cc	(revision 9805)
@@ -19,5 +19,4 @@
 #include "sound_engine.h"
 
-#include "alincl.h"
 #include "compiler.h"
 #include "debug.h"
@@ -29,5 +28,5 @@
   * @brief creates a SoundSource at position sourceNode with the SoundBuffer buffer
   */
-  SoundSource::SoundSource(const PNode* sourceNode, const SoundBuffer* buffer)
+  SoundSource::SoundSource(const PNode* sourceNode, const SoundBuffer& buffer)
   {
     this->registerObject(this, SoundSource::_objectList);
@@ -120,10 +119,10 @@
   void SoundSource::play()
   {
-    if (this->buffer && this->retrieveSource())
+    if (this->retrieveSource())
     {
       if (this->bPlay)
         alSourceStop(this->sourceID);
 
-      alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
+      alSourcei (this->sourceID, AL_BUFFER, this->buffer.getID());
       alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
       alSourcef (this->sourceID, AL_GAIN, 1);
@@ -141,5 +140,5 @@
   * @param buffer the buffer to play back on this Source
   */
-  void SoundSource::play(const SoundBuffer* buffer)
+  void SoundSource::play(const SoundBuffer& buffer)
   {
     if (!this->retrieveSource())
@@ -150,5 +149,5 @@
 
     alSourceStop(this->sourceID);
-    alSourcei (this->sourceID, AL_BUFFER, buffer->getID());
+    alSourcei (this->sourceID, AL_BUFFER, buffer.getID());
     alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
     alSourcef (this->sourceID, AL_GAIN, 1);
@@ -156,6 +155,6 @@
     alSourcePlay(this->sourceID);
 
-    if (unlikely(this->buffer != NULL))
-      alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
+    if (unlikely(this->buffer.getID() != 0))
+      alSourcei (this->sourceID, AL_BUFFER, this->buffer.getID());
     this->bPlay = true;
 
@@ -170,5 +169,5 @@
    * @param gain the gain of the sound buffer
   */
-  void SoundSource::play(const SoundBuffer* buffer, float gain)
+  void SoundSource::play(const SoundBuffer& buffer, float gain)
   {
     if (!this->retrieveSource())
@@ -179,5 +178,5 @@
 
     alSourceStop(this->sourceID);
-    alSourcei (this->sourceID, AL_BUFFER, buffer->getID());
+    alSourcei (this->sourceID, AL_BUFFER, buffer.getID());
     alSourcei (this->sourceID, AL_LOOPING,  AL_FALSE);
     alSourcef (this->sourceID, AL_GAIN, gain);
@@ -185,6 +184,6 @@
     alSourcePlay(this->sourceID);
 
-    if (unlikely(this->buffer != NULL))
-      alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
+    if (unlikely(this->buffer.getID() != 0))
+      alSourcei (this->sourceID, AL_BUFFER, this->buffer.getID());
     this->bPlay = true;
 
@@ -199,5 +198,5 @@
    * @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, bool loop)
   {
     if (!this->retrieveSource())
@@ -208,5 +207,5 @@
 
     alSourceStop(this->sourceID);
-    alSourcei (this->sourceID, AL_BUFFER, buffer->getID());
+    alSourcei (this->sourceID, AL_BUFFER, buffer.getID());
 
     if (loop)
@@ -219,6 +218,6 @@
     alSourcePlay(this->sourceID);
 
-    if (unlikely(this->buffer != NULL))
-      alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
+    if (unlikely(this->buffer.getID() != 0))
+      alSourcei (this->sourceID, AL_BUFFER, this->buffer.getID());
     this->bPlay = true;
 
@@ -232,5 +231,5 @@
    * @param gain the new gain value
    */
-  void SoundSource::gain(const SoundBuffer* buffer, float gain)
+  void SoundSource::gain(const SoundBuffer& buffer, float gain)
   {
     // alSourcei (this->sourceID, AL_BUFFER, buffer->getID());
@@ -347,5 +346,5 @@
   * @param duration time perios to fade in
   */
-  void SoundSource::fadein(const SoundBuffer* buffer, ALfloat duration)
+  void SoundSource::fadein(const SoundBuffer& buffer, ALfloat duration)
   {
     //if (this->buffer && this->retrieveSource())
Index: branches/new_class_id/src/lib/sound/sound_source.h
===================================================================
--- branches/new_class_id/src/lib/sound/sound_source.h	(revision 9804)
+++ branches/new_class_id/src/lib/sound/sound_source.h	(revision 9805)
@@ -8,4 +8,5 @@
 
 #include "base_object.h"
+#include "sound_buffer.h"
 #include "alincl.h"
 
@@ -14,5 +15,4 @@
 namespace OrxSound
 {
-  class SoundBuffer;
   //! A class that represents a SoundSource
   class SoundSource : public BaseObject
@@ -20,5 +20,5 @@
     ObjectListDeclaration(SoundSource);
   public:
-    SoundSource(const PNode* sourceNode = NULL, const SoundBuffer* buffer = NULL);
+    SoundSource(const PNode* sourceNode = NULL, const SoundBuffer& buffer = SoundBuffer());
     SoundSource(const SoundSource& source);
     SoundSource& operator=(const SoundSource& source);
@@ -29,14 +29,14 @@
     // user interaction
     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);
+    void play(const SoundBuffer& buffer, float gain);
+    void play(const SoundBuffer& buffer, float gain, bool loop);
 
-    void gain(const SoundBuffer* buffer, float gain);
+    void gain(const SoundBuffer& buffer, float gain);
 
     void stop();
     void pause();
     void rewind();
-    void fadein(const SoundBuffer* buffer, ALfloat duration);
+    void fadein(const SoundBuffer& buffer, ALfloat duration);
 
     // development functions
@@ -47,5 +47,5 @@
     void setSourceNode(const PNode* sourceNode);
     /** @returns the SoundBuffer of this Source */
-    inline const SoundBuffer* getBuffer() const { return this->buffer; };
+    inline const SoundBuffer& getBuffer() const { return this->buffer; };
     /** @returns the SourceNode of this Source */
     inline const PNode* getNode() const { return this->sourceNode; };
@@ -66,5 +66,5 @@
     bool                   resident;    //!< If the alSource should be resident (if true, the alSource will be returned on deletion).
     ALuint                 sourceID;    //!< The ID of the Source
-    const SoundBuffer*     buffer;      //!< The buffer to play in this source.
+    SoundBuffer            buffer;      //!< The buffer to play in this source.
     const PNode*           sourceNode;  //!< The SourceNode representing the position/velocity... of this source.
   };
