Index: /trunk/src/lib/sound/sound_engine.cc
===================================================================
--- /trunk/src/lib/sound/sound_engine.cc	(revision 7317)
+++ /trunk/src/lib/sound/sound_engine.cc	(revision 7318)
@@ -124,10 +124,17 @@
  * @param sourceNode The sourceNode to bind this SoundSource to.
  * @returns The newly created SoundSource
-
-   acctualy this is nothing more than a wrapper around the ResourceManager.
+ *
+ * acctualy this is nothing more than a wrapper around the ResourceManager.
 */
 SoundSource* SoundEngine::createSource(const std::string& fileName, PNode* sourceNode)
 {
-  return new SoundSource(sourceNode, (SoundBuffer*)ResourceManager::getInstance()->load(fileName, WAV, RP_LEVEL));
+  SoundBuffer* buffer = NULL;
+  if (!fileName.empty())
+  {
+     buffer= (SoundBuffer*)ResourceManager::getInstance()->load(fileName, WAV, RP_LEVEL);
+     if (buffer == NULL)
+       PRINTF(2)("Wav-Sound %s could not be loaded onto new Source\n", fileName.c_str());
+  }
+    return new SoundSource(sourceNode, buffer);
 }
 
@@ -151,8 +158,7 @@
  * @param source the Source to fill with the Value.
  */
-bool SoundEngine::popALSource(ALuint& source)
+void SoundEngine::popALSource(ALuint& source)
 {
   assert (source == 0);
-
   /// @TODO try to create more sources if needed
   if (!this->ALSources.empty())
@@ -162,8 +168,5 @@
     this->ALSources.pop();
     SDL_mutexV(this->sourceMutex);
-    return true;
-  }
-  else
-    return false;
+  }
 }
 
Index: /trunk/src/lib/sound/sound_engine.h
===================================================================
--- /trunk/src/lib/sound/sound_engine.h	(revision 7317)
+++ /trunk/src/lib/sound/sound_engine.h	(revision 7318)
@@ -49,5 +49,5 @@
 
   // administrative
-    bool popALSource(ALuint& source);
+    void popALSource(ALuint& source);
     void pushALSource(ALuint& source);
 
Index: /trunk/src/lib/sound/sound_source.cc
===================================================================
--- /trunk/src/lib/sound/sound_source.cc	(revision 7317)
+++ /trunk/src/lib/sound/sound_source.cc	(revision 7318)
@@ -117,7 +117,11 @@
 void SoundSource::play()
 {
-  if (this->retrieveSource())
-  {
-    alSourcePlay(this->sourceID);
+  if (this->buffer && this->retrieveSource())
+  {
+    if (this->bPlay)
+      alSourceStop(this->sourceID);
+    alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
+      alSourcePlay(this->sourceID);
+
     if (DEBUG >= 3)
       SoundEngine::checkError("Play Source", __LINE__);
Index: /trunk/src/story_entities/simple_game_menu.cc
===================================================================
--- /trunk/src/story_entities/simple_game_menu.cc	(revision 7317)
+++ /trunk/src/story_entities/simple_game_menu.cc	(revision 7318)
@@ -35,5 +35,6 @@
 #include "graphics_engine.h"
 #include "object_manager.h"
-
+#include "sound_engine.h"
+#include "sound_source.h"
 
 #include "cd_engine.h"
@@ -62,4 +63,5 @@
   this->layerIndex = 0;
   this->menuSelectedIndex = 0;
+  this->selectorSource = NULL;
 
   if (root != NULL)
@@ -134,5 +136,8 @@
   if (this->dataXML != NULL)
   {
+    LoadParam(dataXML, "selector-sound", this, SimpleGameMenu, setSelectorSound);
+
     TiXmlElement* element = this->dataXML->FirstChildElement("Elements");
+
 
     if( element == NULL)
@@ -237,4 +242,13 @@
 }
 
+/**
+ * @brief set the Sound to play when switching menu entry.
+ * @param selectorSound the sound to load.
+ */
+void SimpleGameMenu::setSelectorSound(const std::string& selectorSound)
+{
+  this->selectorSource = SoundEngine::getInstance()->createSource(selectorSound, NULL);
+  printf("=============== %s\n", selectorSound.c_str());
+}
 
 ErrorMessage SimpleGameMenu::unloadData()
@@ -257,4 +271,8 @@
   }
 
+  // delete the SoundSource.
+  if (this->selectorSource != NULL)
+    delete this->selectorSource;
+  this->selectorSource = NULL;
 
   GameWorld::unloadData();
@@ -375,4 +393,6 @@
       this->menuSelected = this->menuLayers[this->layerIndex].menuList[++this->menuSelectedIndex];
       this->sliderTo(this->menuSelected, 5.0f);
+      if (this->selectorSource != NULL)
+        this->selectorSource->play();
 
       if( this->layerIndex == 1)
@@ -389,4 +409,6 @@
       this->menuSelected = this->menuLayers[this->layerIndex].menuList[--this->menuSelectedIndex];
       this->sliderTo(this->menuSelected, 5.0f);
+      if (this->selectorSource != NULL)
+        this->selectorSource->play();
 
       if( this->layerIndex == 1)
Index: /trunk/src/story_entities/simple_game_menu.h
===================================================================
--- /trunk/src/story_entities/simple_game_menu.h	(revision 7317)
+++ /trunk/src/story_entities/simple_game_menu.h	(revision 7318)
@@ -20,4 +20,5 @@
 class TiXmlElement;
 class ImageEntity;
+class SoundSource;
 
 
@@ -70,4 +71,5 @@
     void switchMenuLayer(int layer1, int layer2);
     void sliderTo(const Element2D* element, float bias = 0.0f);
+    void setSelectorSound(const std::string& selectorSound);
 
 
@@ -86,4 +88,6 @@
 
     Vector                            cameraVector;
+
+    SoundSource*                      selectorSource;
 };
 
