Index: /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc
===================================================================
--- /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 7645)
+++ /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 7646)
@@ -17,7 +17,8 @@
 #include "util/loading/load_param.h"
 #include "util/loading/factory.h"
+#include "util/loading/resource_manager.h"
 
 #include "glincl.h"
-#include "debug.h"
+// #include "debug.h"
 
 #include "state.h"
@@ -40,4 +41,11 @@
   if (root != NULL)
     this->loadParams(root);
+
+  // this->soundSource.setSourceNode(this);
+
+  //load sound
+  if (this->rainBuffer != NULL)
+    ResourceManager::getInstance()->unload(this->rainBuffer);
+  this->rainBuffer = (SoundBuffer*)ResourceManager::getInstance()->load("sound/rain.wav", WAV);
 
   this->init();
@@ -65,4 +73,5 @@
 {
   this->emitter = new PlaneEmitter(this->rainSize);
+
 }
 
@@ -79,23 +88,26 @@
 		RainEffect::rainParticles->setName("RainParticles");
 		RainEffect::rainParticles->setLifeSpan(2, 2);
-		RainEffect::rainParticles->setRadius(0.05, 0.05);
+		RainEffect::rainParticles->setRadius(0.02, 0.02);
+		RainEffect::rainParticles->setRadius(0.01, 0.01);
+		RainEffect::rainParticles->setRadius(0.03, 0.03);
 		RainEffect::rainParticles->setRadius(0.04, 0.04);
-		RainEffect::rainParticles->setRadius(0.03, 0.03);
-		RainEffect::rainParticles->setColor(0, 0, 0, 1, .3);
-		RainEffect::rainParticles->setColor(0.5, 0.5, 0.5, 1, 0.2);
-		RainEffect::rainParticles->setColor(0.8, 0.8, 0.2, 0.3, 0.3);
-		RainEffect::rainParticles->setColor(1, 0.5, 0.5, 1, 0);
+		RainEffect::rainParticles->setColor(0.7, 0.3, 0.3, 0.5, 0.2); // grey blue 1
+		RainEffect::rainParticles->setColor(1, 0.4, 0.4, 0.5, 0.1); // grey blue 2
+		RainEffect::rainParticles->setColor(0.5, 0.7, 0.7, 0.7, 0); // light grey
 	}
 
 	this->emitter->setSystem(RainEffect::rainParticles);
 
-	RainEffect::rainParticles->debug();
+	// RainEffect::rainParticles->debug();
 
 	this->emitter->setRelCoor(this->rainCoord);
 
 	this->emitter->setEmissionRate(this->rainRate);
-	this->emitter->setEmissionVelocity(-this->rainVelocity);
+	this->emitter->setEmissionVelocity(this->rainVelocity);
 
-	this->emitter->setSpread(0, .3);
+	this->emitter->setSpread(0, .2);
+
+	this->soundSource.loop(this->rainBuffer);
+	PRINTF(0)( "Playing RainSound\n" );
 }
 
@@ -107,2 +119,7 @@
   this->emitter->setSystem(NULL);
 }
+
+void RainEffect::tick (float dt)
+{
+
+}
Index: /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h
===================================================================
--- /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 7645)
+++ /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 7646)
@@ -16,4 +16,7 @@
 #include "weather_effect.h"
 
+#include "sound_buffer.h"
+#include "sound_source.h"
+
 
 class RainEffect : public WeatherEffect
@@ -30,8 +33,10 @@
     virtual bool deactivate();
 
+    virtual void tick(float dt);
+
     inline void setRainCoord(float x, float y, float z) { this->rainCoord = Vector(x, y, z); }
     inline void setRainSize(float x, float y) { this->rainSize = Vector2D(x, y); }
     inline void setRainRate(float rate) { this->rainRate = rate;}
-    inline void setRainVelocity(float velocity) { this->rainVelocity = velocity; }
+    inline void setRainVelocity(float velocity) { this->rainVelocity = -velocity; }
 
   private:
@@ -43,4 +48,7 @@
     GLfloat                           rainRate;
     GLfloat                           rainVelocity;
+
+    SoundSource                       soundSource;
+    SoundBuffer*                      rainBuffer;
 };
 
Index: /branches/atmospheric_engine/src/lib/sound/sound_source.cc
===================================================================
--- /branches/atmospheric_engine/src/lib/sound/sound_source.cc	(revision 7645)
+++ /branches/atmospheric_engine/src/lib/sound/sound_source.cc	(revision 7646)
@@ -122,5 +122,5 @@
       alSourceStop(this->sourceID);
     alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
-      alSourcePlay(this->sourceID);
+    alSourcePlay(this->sourceID);
 
     if (DEBUG >= 3)
@@ -153,4 +153,31 @@
   if (DEBUG >= 3)
     SoundEngine::checkError("Play Source", __LINE__);
+}
+
+
+/**
+ * @brief Plays back buffer on this Source and loops it
+ * @param buffer the buffer to play back on this Source
+ */
+void SoundSource::loop(const SoundBuffer* buffer)
+{
+  if (!this->retrieveSource())
+  {
+    PRINTF(2)("No more Free sources (You might consider raising the Source-Count).\n");
+    return;
+  }
+
+  alSourceStop(this->sourceID);
+  alSourcei (this->sourceID, AL_BUFFER, buffer->getID());
+  alSourcei (this->sourceID, AL_LOOPING,  AL_TRUE  );
+
+  alSourcePlay(this->sourceID);
+
+  if (unlikely(this->buffer != NULL))
+    alSourcei (this->sourceID, AL_BUFFER, this->buffer->getID());
+  this->bPlay = true;
+
+  if (DEBUG >= 3)
+    SoundEngine::checkError("Play LoopSource", __LINE__);
 }
 
Index: /branches/atmospheric_engine/src/lib/sound/sound_source.h
===================================================================
--- /branches/atmospheric_engine/src/lib/sound/sound_source.h	(revision 7645)
+++ /branches/atmospheric_engine/src/lib/sound/sound_source.h	(revision 7646)
@@ -28,4 +28,5 @@
     void play();
     void play(const SoundBuffer* buffer);
+    void loop(const SoundBuffer* buffer);
     void stop();
     void pause();
