Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8434)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8443)
@@ -98,11 +98,11 @@
 	glFogi(GL_FOG_MODE, this->fogMode);
 	glFogfv(GL_FOG_COLOR, fogColor);
-	glFogf(GL_FOG_DENSITY, this->fogDensity);
 	glHint(GL_FOG_HINT, GL_DONT_CARE);
 	glFogf(GL_FOG_START, this->fogStart);
 	glFogf(GL_FOG_END, this->fogEnd);
-	
+
+	// glFogf(GL_FOG_DENSITY, this->fogDensity);
+
 	glEnable(GL_FOG);
-	// glClearColor(0.5, 0.5, 0.5, 1.0);
 
 	return 0;
@@ -114,4 +114,6 @@
 	PRINTF(0)("Deactivating FogEffect\n");
 
+	this->fogFadeInActivate = false;
+	this->fogFadeOutActivate = false;
 	this->fogActivate = false;
 	
@@ -124,9 +126,10 @@
 
 	// If Fog Fade In
-	if (this->fogFadeInDuration > 0 && this->localTimer < this->fogFadeInDuration)
+	if ( this->fogFadeInActivate ) {
 		glFogf(GL_FOG_DENSITY, this->fogFadeInDensity);
-
+		PRINTF(0)( "this->fogFadeInDensity: %f", this->fogFadeInDensity);
+	}
 	// If Fog Fade Out
-	else if (this->fogFadeOutDuration > 0 && this->localTimer < this->fogFadeOutDuration)
+	else if ( this->fogFadeOutActivate )
 		glFogf(GL_FOG_DENSITY, this->fogFadeOutDensity);
 
@@ -136,4 +139,5 @@
 
 }
+
 void FogEffect::tick(float dt)
 {
@@ -141,16 +145,18 @@
 		return;
 		
-	if ( this->fogFadeInDuration > 0 && this->localTimer < this->fogFadeInDuration ) {
+	if ( this->fogFadeInActivate ) {
 		this->localTimer += dt;
 		float progress = this->localTimer / this->fogFadeInDuration;
 		this->fogFadeInDensity = 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
+
+		if ( this->localTimer >= this->fogFadeOutDuration )
+			this->fogFadeInActivate = false;
+	}
+	else if ( this->fogFadeOutActivate ) {
+		this->localTimer += dt;
+		float progress = this->localTimer / this->fogFadeInDuration;
+		this->fogFadeOutDensity = 1 - progress * this->fogDensity;
+
+		if ( this->localTimer >= this->fogFadeOutDuration )
 			this->deactivate();
 	}
@@ -158,4 +164,7 @@
 
 void FogEffect::fadeInFog() {
+
+	// If Fog is already fading out, stop it
+	this->fogFadeOutActivate = false;
 
 	// If Fog is already on, turn it off first
@@ -170,4 +179,7 @@
 	this->localTimer = 0;
 
+	// set FogFadeIn activate
+	this->fogFadeInActivate = true;
+
 	// Activate Fog
 	this->activate();
@@ -177,4 +189,7 @@
 
 void FogEffect::fadeOutFog() {
+
+	// If Fog is already fading in, stop it
+	this->fogFadeInActivate = false;
 
 	// If Fog is off, turn it on first
@@ -185,4 +200,7 @@
 	if (!this->fogFadeOutDuration > 0)
 		this->fogFadeOutDuration = 20;
+
+	// set FogFadeOut activate
+	this->fogFadeOutActivate = true;
 
 	// Reset local timer
Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8434)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8443)
@@ -46,4 +46,8 @@
 
 		bool				fogActivate;
+
+		bool				fogFadeInActivate;
+		bool				fogFadeOutActivate;
+
 		GLfloat				fogFadeInDuration;
 		GLfloat				fogFadeOutDuration;
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8434)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8443)
@@ -143,5 +143,5 @@
 		RainEffect::rainParticles = new SparkParticles((int) this->rainMaxParticles);
 		RainEffect::rainParticles->setName("RainParticles");
-		RainEffect::rainParticles->precache((int)this->rainLife);
+		RainEffect::rainParticles->precache((int)this->rainLife, 30); // TODO: Why doesnt this work??
 		RainEffect::rainParticles->setLifeSpan(this->rainLife, 2);
 		RainEffect::rainParticles->setRadius(0, 0.03);
