Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8327)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8356)
@@ -24,5 +24,7 @@
 SHELL_COMMAND(activate, FogEffect, activateFog);
 SHELL_COMMAND(deactivate, FogEffect, deactivateFog);
-SHELL_COMMAND(startfogging, FogEffect, startFogging);
+SHELL_COMMAND(fadein, FogEffect, fadeInFog);
+SHELL_COMMAND(fadeout, FogEffect, fadeOutFog);
+
 
 using namespace std;
@@ -137,7 +139,12 @@
 		this->fogFadeDensity = progress * this->fogDensity;
 	}
+	else if (this->fogFadeOutDuration > 0 && this->localTimer < this->fogFadeOutDuration) {
+		this->localTimer += dt;
+		float progress = this->localTimer / this->fogFadeInDuration;
+		this->fogFadeDensity = 1 - progress * this->fogDensity;
+	}
 }
 
-void FogEffect::startFogging() {
+void FogEffect::fadeInFog() {
 
 	if (this->fogActivate)
@@ -150,4 +157,17 @@
 	this->activate();
 
+}
+
+
+void FogEffect::fadeOutFog() {
+
+	if (this->fogActivate)
+		this->deactivate();
+
+	if (!this->fogFadeOutDuration > 0)
+		this->fogFadeOutDuration = 20;
+
+	this->localTimer = 0;
+	this->activate();
 }
 
Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8327)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8356)
@@ -38,5 +38,7 @@
 		inline void setFogOption(const std::string& option) { if (option == "activate") this->fogActivate = true; }
 
-		void startFogging();
+		void fadeInFog();
+		void fadeOutFog();
+
 
 	private:
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8327)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8356)
@@ -31,6 +31,6 @@
 SHELL_COMMAND(activate, RainEffect, activateRain);
 SHELL_COMMAND(deactivate, RainEffect, deactivateRain);
-
-SHELL_COMMAND(startRaining, RainEffect, startRaining);
+SHELL_COMMAND(startraining, RainEffect, startRaining);
+SHELL_COMMAND(stopraining, RainEffect, stopRaining);
 
 using namespace std;
@@ -210,4 +210,24 @@
 		// this->soundSource.fadein(this->rainBuffer, 10);
 	}
+	else if (this->rainFadeOutDuration != 0 && this->localTimer < this->rainFadeOutDuration) {
+		this->localTimer += dt;
+		float progress = 1 - (this->localTimer / this->rainFadeOutDuration);
+
+		// Dim Light
+		lightMan->setAmbientColor(1.1 - progress, 1.1 - progress, 1.1 - progress);
+
+		// use alpha in color to fade in
+		RainEffect::rainParticles->setColor(0,   0.3, 0.3, 0.5, 0.2 * progress); // grey blue 1
+		RainEffect::rainParticles->setColor(0.5, 0.4, 0.4, 0.5, 0.2 * progress); // grey blue 2
+		RainEffect::rainParticles->setColor(1,   0.7, 0.7, 0.7, 0.2 * progress); // light grey
+
+		// increase radius for more "heavy" rain
+		RainEffect::rainParticles->setRadius(0, 0.03 * progress);
+		RainEffect::rainParticles->setRadius(0.2, 0.02 * progress);
+		RainEffect::rainParticles->setRadius(1, 0.01 * progress);
+
+		// increase sound volume
+		// this->soundSource.fadein(this->rainBuffer, 10);
+	}
 	
 }
@@ -225,2 +245,15 @@
 
 }
+
+void RainEffect::stopRaining() {
+
+	if (this->rainActivate)
+		this->deactivate();
+
+	if (!this->rainFadeOutDuration > 0)
+		this->rainFadeOutDuration = 20;
+
+	this->localTimer = 0;
+	this->activate();
+
+}
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 8327)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 8356)
@@ -35,9 +35,11 @@
 		virtual bool deactivate();
 
+		inline void activateRain() { this->activate(); }
+		inline void deactivateRain() { this->deactivate(); }
+
 		virtual void tick(float dt);
 
-		inline void activateRain() { this->activate(); }
-		inline void deactivateRain() { this->deactivate(); }
 		void startRaining();
+		void stopRaining();
 
 		inline void setRainCoord(float x, float y, float z) { this->rainCoord = Vector(x, y, z); }
@@ -47,9 +49,7 @@
 		inline void setRainLife(float life) { this->rainLife = life; }
 		inline void setRainWind(int force) { this->rainWindForce = force; }
-		inline void setRainStart(float duration) { this->rainFadeInDuration = duration; }
 
 		inline void setRainFadeIn(float fadein) { this->rainFadeInDuration = fadein; }
 		inline void setRainFadeOut(float fadeout) { this->rainFadeOutDuration = fadeout; }
-
 
 		inline void setRainOption(const std::string& option) {
