Index: /branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc
===================================================================
--- /branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8433)
+++ /branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8434)
@@ -123,8 +123,15 @@
 void FogEffect::draw() const {
 
+	// If Fog Fade In
 	if (this->fogFadeInDuration > 0 && this->localTimer < this->fogFadeInDuration)
-		glFogf(GL_FOG_DENSITY, this->fogFadeDensity);
-	//else
-	//	glFogf(GL_FOG_DENSITY, this->fogDensity);
+		glFogf(GL_FOG_DENSITY, this->fogFadeInDensity);
+
+	// If Fog Fade Out
+	else if (this->fogFadeOutDuration > 0 && this->localTimer < this->fogFadeOutDuration)
+		glFogf(GL_FOG_DENSITY, this->fogFadeOutDensity);
+
+	// Normal Fog activate
+	else
+		glFogf(GL_FOG_DENSITY, this->fogDensity);
 
 }
@@ -134,13 +141,17 @@
 		return;
 		
-	if (this->fogFadeInDuration > 0 && this->localTimer < this->fogFadeInDuration) {
+	if ( this->fogFadeInDuration > 0 && this->localTimer < this->fogFadeInDuration ) {
 		this->localTimer += dt;
 		float progress = this->localTimer / this->fogFadeInDuration;
-		this->fogFadeDensity = progress * this->fogDensity;
+		this->fogFadeInDensity = 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;
+	else if ( this->fogFadeOutDuration > 0 ) {
+		if ( this->localTimer < this->fogFadeOutDuration ) {
+			this->localTimer += dt;
+			float progress = this->localTimer / this->fogFadeInDuration;
+			this->fogFadeOutDensity = 1 - progress * this->fogDensity;
+		}
+		else
+			this->deactivate();
 	}
 }
@@ -148,11 +159,16 @@
 void FogEffect::fadeInFog() {
 
+	// If Fog is already on, turn it off first
 	if (this->fogActivate)
 		this->deactivate();
 
+	// If no manual FadeIn value was set, set a default value
 	if (!this->fogFadeInDuration > 0)
 		this->fogFadeInDuration = 20;
 
+	// Reset local timer
 	this->localTimer = 0;
+
+	// Activate Fog
 	this->activate();
 
@@ -162,12 +178,15 @@
 void FogEffect::fadeOutFog() {
 
-	if (this->fogActivate)
-		this->deactivate();
-
+	// If Fog is off, turn it on first
+	if (!this->fogActivate)
+		this->activate();
+
+	// If no manual FadeOut value was set, set a default value
 	if (!this->fogFadeOutDuration > 0)
 		this->fogFadeOutDuration = 20;
 
+	// Reset local timer
 	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 8433)
+++ /branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8434)
@@ -53,5 +53,6 @@
 		GLint				fogMode;
 		GLfloat				fogDensity;
-		GLfloat				fogFadeDensity;
+		GLfloat				fogFadeInDensity;
+		GLfloat				fogFadeOutDensity;
 
 		GLfloat				fogStart;
Index: /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc
===================================================================
--- /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8433)
+++ /branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8434)
@@ -38,5 +38,12 @@
 CREATE_FACTORY(RainEffect, CL_RAIN_EFFECT);
 
-// TODO: Dim Light with Rain, Finish preCaching, check out if multiple rain emitters work,  Think about what happens with building poss. to hang movewithcam off, benchmark, possible to activate lightening, turn off visibility when in a building, variable emitter size depending on playable, also rain velocity
+/* TODO:
+	- preCaching
+	- test multiple rain emitters
+	- Think about what happens with building poss. to hang movewithcam off
+	- Possible to activate lightening
+	- turn off visibility when in a building
+	- variable emitter size depending on playable
+*/
 
 RainEffect::RainEffect(const TiXmlElement* root)
@@ -158,5 +165,6 @@
 	if (this->rainWindForce != 0) this->soundSource.loop(this->windBuffer, 0.1f * this->rainWindForce);
 
-	lightMan->setAmbientColor(.1,.1,.1);
+	if (this->rainFadeInDuration == 0)
+		lightMan->setAmbientColor(.1,.1,.1);
 
 	return 0;
@@ -195,5 +203,5 @@
 
 		// Dim Light
-		lightMan->setAmbientColor(1.1 - progress, 1.1 - progress, 1.1 - progress);
+		lightMan->setAmbientColor(1 - progress * 0.9, 1 - progress * 0.9, 1 - progress * 0.9);
 
 		// use alpha in color to fade in
@@ -210,23 +218,27 @@
 		// 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);
+	else if ( this->rainFadeOutDuration != 0 ) {
+		if ( this->localTimer < this->rainFadeOutDuration ) {
+			this->localTimer += dt;
+			float progress = 1 - (this->localTimer / this->rainFadeOutDuration);
+	
+			// Fade In Light
+			lightMan->setAmbientColor(1 - progress * 0.9, 1 - progress * 0.9, 1 - progress * 0.9);
+
+			// use alpha in color to fade out
+			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
+	
+			// decrease radius
+			RainEffect::rainParticles->setRadius(0, 0.03 * progress);
+			RainEffect::rainParticles->setRadius(0.2, 0.02 * progress);
+			RainEffect::rainParticles->setRadius(1, 0.01 * progress);
+	
+			// decrease sound volume
+			// this->soundSource.fadeout(this->rainBuffer, 10);
+		}
+		else
+			this->deactivate();
 	}
 	
@@ -242,4 +254,5 @@
 
 	this->localTimer = 0;
+
 	this->activate();
 
@@ -248,6 +261,6 @@
 void RainEffect::stopRaining() {
 
-	if (this->rainActivate)
-		this->deactivate();
+	if (!this->rainActivate)
+		this->activate();
 
 	if (!this->rainFadeOutDuration > 0)
@@ -255,5 +268,4 @@
 
 	this->localTimer = 0;
-	this->activate();
-
-}
+
+}
