Index: branches/atmospheric_engine/src/lib/graphics/effects/cloud_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/cloud_effect.cc	(revision 8242)
+++ branches/atmospheric_engine/src/lib/graphics/effects/cloud_effect.cc	(revision 8247)
@@ -155,11 +155,11 @@
 
 	// glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
-	glShadeModel(GL_SMOOTH);
-	glEnable(GL_DEPTH_TEST);
-	glEnable(GL_CULL_FACE);
-	glCullFace(GL_BACK);
-	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
-	
-	glLineWidth(3.0f);
+	// glShadeModel(GL_SMOOTH);
+	// glEnable(GL_DEPTH_TEST);
+	// glEnable(GL_CULL_FACE);
+	// glCullFace(GL_BACK);
+	// glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+	
+	// glLineWidth(3.0f);
 
 	static float time = 0.0f;
Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8242)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.cc	(revision 8247)
@@ -38,6 +38,6 @@
 		this->loadParams(root);
 
-  if( this->fogActivate )
-	 this->activate();
+	if (this->fogActivate)
+		this->activate();
 }
 
@@ -57,5 +57,10 @@
 	LoadParam(root, "range", this, FogEffect, setFogRange);
 	LoadParam(root, "color", this, FogEffect, setFogColor);
-  LoadParam(root, "option", this, FogEffect, setFogOption);
+
+	LOAD_PARAM_START_CYCLE(root, element);
+	{
+		LoadParam_CYCLE(element, "option", this, FogEffect, setFogOption);
+	}
+	LOAD_PARAM_END_CYCLE(element);
 }
 
@@ -63,12 +68,11 @@
 {
 	//default values
-  this->fogActivate = false;
+	this->fogActivate = false;
 	this->fogMode = GL_EXP2;
 	this->fogDensity = 0.001;
 	this->fogStart = 0;
 	this->fogEnd = 5000;
-  this->colorVector = Vector(0.7, 0.7, 0.7);
+	this->colorVector = Vector(0.7, 0.7, 0.7);
 }
-
 
 
@@ -76,4 +80,6 @@
 {
 	PRINTF(0)( "Enabling FogEffect, mode: %i, density: %f, start: %f, end: %f, color %f, %f, %f\n", this->fogMode, this->fogDensity, this->fogStart, this->fogEnd, this->colorVector.x, this->colorVector.y, this->colorVector.z);
+
+	this->fogActivate = true;
 
 	glEnable(GL_FOG);
@@ -95,4 +101,7 @@
 {
 	PRINTF(0)("Deactivating FogEffect\n");
+
+	this->fogActivate = false;
+	
 	glDisable(GL_FOG);
 }
Index: branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8242)
+++ branches/atmospheric_engine/src/lib/graphics/effects/fog_effect.h	(revision 8247)
@@ -22,7 +22,7 @@
 		virtual bool activate();
 		virtual bool deactivate();
-    
-    void activateFog() { this->activate(); }
-    void deactivateFog() { this->deactivate(); }
+
+		void activateFog() { this->activate(); }
+		void deactivateFog() { this->deactivate(); }
 
 		inline void setFogMode(const std::string& mode) { this->fogMode = this->stringToFogMode(mode); }
@@ -30,16 +30,16 @@
 		inline void setFogRange(float start, float end) { this->fogStart = start; this->fogEnd = end; }
 		inline void setFogColor(float r, float g, float b) { this->colorVector = Vector(r, g, b); }
-    inline void setFogOption(const std::string& option) { if (option == "activate") this->fogActivate = true; }
+		inline void setFogOption(const std::string& option) { if (option == "activate") this->fogActivate = true; }
 
 	private:
 		GLint stringToFogMode(const std::string& mode);
 
-	private:
-		GLint                   fogMode;
-		GLfloat                 fogDensity;
-		GLfloat                 fogStart;
-		GLfloat                 fogEnd;
-		Vector                  colorVector;
-    bool                     fogActivate;
+		bool				fogActivate;
+
+		GLint				fogMode;
+		GLfloat				fogDensity;
+		GLfloat				fogStart;
+		GLfloat				fogEnd;
+		Vector				colorVector;
 };
 
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8242)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.cc	(revision 8247)
@@ -116,4 +116,5 @@
 
 	lightMan = LightManager::getInstance();
+	this->rainAmbient = lightMan->getAmbientColor();
 }
 
@@ -163,7 +164,10 @@
 	this->rainActivate = false;
 	this->emitter->setSystem(NULL);
+
+	// Stop Sound
 	this->soundSource.stop();
 
-	lightMan->setAmbientColor(1,1,1);
+	// Restore Light Ambient
+	lightMan->setAmbientColor(this->rainAmbient, this->rainAmbient, this->rainAmbient);
 }
 
@@ -182,5 +186,6 @@
 		float progress = this->localTimer / this->rainStartDuration;
 
-		// PRINTF(0)("Progress %f: \n", progress);
+		// Dim Light
+		lightMan->setAmbientColor(1.1 - progress, 1.1 - progress, 1.1 - progress);
 
 		// use alpha in color to fade in
Index: branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 8242)
+++ branches/atmospheric_engine/src/lib/graphics/effects/rain_effect.h	(revision 8247)
@@ -78,5 +78,7 @@
 		float					soundRainVolume;
 
-		LightManager* lightMan;
+		LightManager*				lightMan;
+		GLfloat					rainAmbient;
+
 };
 
Index: branches/atmospheric_engine/src/lib/graphics/light.h
===================================================================
--- branches/atmospheric_engine/src/lib/graphics/light.h	(revision 8242)
+++ branches/atmospheric_engine/src/lib/graphics/light.h	(revision 8247)
@@ -1,9 +1,9 @@
 /*!
- * @file light.h
-  *  Handles Lights.
+* @file light.h
+*  Handles Lights.
 
-    A Light is one of the more important things in a 3D-environment,
-    without it one sees nothing :)
-    It is here for diffuse-, specular- and Bump-Mappings.
+A Light is one of the more important things in a 3D-environment,
+without it one sees nothing :)
+It is here for diffuse-, specular- and Bump-Mappings.
 */
 
@@ -25,98 +25,100 @@
 class Light : public PNode
 {
- public:
-  Light(const TiXmlElement* root = NULL);
-  virtual ~Light();
-
-  virtual void loadParams(const TiXmlElement* root);
-
-  void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b);
-  void setSpecularColor(GLfloat r, GLfloat g, GLfloat b);
-  void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation);
-  void setSpotDirection(const Vector& direction);
-  void setSpotDirection(float x, float y, float z) { setSpotDirection(Vector(x,y,z)); };
-  void setSpotCutoff(GLfloat cutoff);
-
-  /** @returns the lightNumber*/
-  int getLightNumber() const {return this->lightNumber;}
-
-  virtual void draw() const;
-
-  void debug() const;
-
-  // attributes
- private:
-  int              lightNumber;               //!< The number of this Light.
-  GLfloat          diffuseColor[4];           //!< The Diffuse Color this Light emmits.
-  GLfloat          specularColor[4];          //!< The specular Color of this Light.
-  float            constantAttenuation;       //!< The Factor of the the Constant Attenuation.
-  float            linearAttenuation;         //!< The Factor of the the Linear Attenuation.
-  float            quadraticAttenuation;      //!< The Factor of the the Quadratic Attenuation.
-  GLfloat          spotDirection[4];          //!< The direction of the Spot Light.
-  GLfloat          spotCutoff;                //!< The cutoff Angle of the Light Source
+	public:
+		Light(const TiXmlElement* root = NULL);
+		virtual ~Light();
+		
+		virtual void loadParams(const TiXmlElement* root);
+		
+		void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b);
+		void setSpecularColor(GLfloat r, GLfloat g, GLfloat b);
+		void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation);
+		void setSpotDirection(const Vector& direction);
+		void setSpotDirection(float x, float y, float z) { setSpotDirection(Vector(x,y,z)); };
+		void setSpotCutoff(GLfloat cutoff);
+		
+		/** @returns the lightNumber*/
+		int getLightNumber() const {return this->lightNumber;}
+		
+		virtual void draw() const;
+		
+		void debug() const;
+	
+	// attributes
+	private:
+		int              lightNumber;               //!< The number of this Light.
+		GLfloat          diffuseColor[4];           //!< The Diffuse Color this Light emmits.
+		GLfloat          specularColor[4];          //!< The specular Color of this Light.
+		float            constantAttenuation;       //!< The Factor of the the Constant Attenuation.
+		float            linearAttenuation;         //!< The Factor of the the Linear Attenuation.
+		float            quadraticAttenuation;      //!< The Factor of the the Quadratic Attenuation.
+		GLfloat          spotDirection[4];          //!< The direction of the Spot Light.
+		GLfloat          spotCutoff;                //!< The cutoff Angle of the Light Source
 };
-
-
-
+	
+	
+	
 //! A class that handles Lights
 /**
-   A Light is a source that emits light rays (photons)
+A Light is a source that emits light rays (photons)
 
-   <b>Usage:</b>\n
-   First you have to get the Light Manager up and running by using LightManager::getInstance().
-   This automatically initiates the GL_LIGHTING, and sets some default stuff about the light.\n
-   Then you will create a new light using:
-   \li new Light();
+<b>Usage:</b>\n
+First you have to get the Light Manager up and running by using LightManager::getInstance().
+This automatically initiates the GL_LIGHTING, and sets some default stuff about the light.\n
+Then you will create a new light using:
+\li new Light();
 
-   if you want to operate on this Light just apply the following functions onto it.
-       (You can also optain the Light-pointer with LightManager::getInstance()->getLight(lightNumber))
+if you want to operate on this Light just apply the following functions onto it.
+(You can also optain the Light-pointer with LightManager::getInstance()->getLight(lightNumber))
 
-   now you can operate on the light as follows:
-   \li void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b);
-   \li void setSpecularColor(GLfloat r, GLfloat g, GLfloat b);
-   \li void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation);
-   \li void setSpotDirection(Vector direction);
-   \li void setSpotCutoff(GLfloat cutoff);
-   \li all PNode stuff also works
+now you can operate on the light as follows:
+\li void setDiffuseColor(GLfloat r, GLfloat g, GLfloat b);
+\li void setSpecularColor(GLfloat r, GLfloat g, GLfloat b);
+\li void setAttenuation(float constantAttenuation, float linearAttenuation, float quadraticAttenuation);
+\li void setSpotDirection(Vector direction);
+\li void setSpotCutoff(GLfloat cutoff);
+\li all PNode stuff also works
 
-   To redraw the light use
-   \li void draw() const; (this is automatically done by the LightManager)
+To redraw the light use
+\li void draw() const; (this is automatically done by the LightManager)
 
-   for some nice output just use:
-   \li void debug() const; (either on LightManager for a resume or on any Light for single information.)
+for some nice output just use:
+\li void debug() const; (either on LightManager for a resume or on any Light for single information.)
 */
 class LightManager : public BaseObject
-{
-  friend class Light;
+	{
+	friend class Light;
 
- public:
-  virtual ~LightManager();
-  /** @returns a Pointer to the only object of this Class */
-  inline static LightManager* getInstance() { if (!singletonRef) singletonRef = new LightManager();  return singletonRef; };
+	public:
+		virtual ~LightManager();
+		/** @returns a Pointer to the only object of this Class */
+		inline static LightManager* getInstance() { if (!singletonRef) singletonRef = new LightManager();  return singletonRef; };
 
-  virtual void loadParams(const TiXmlElement* root);
-  void loadLights(const TiXmlElement* root);
+		virtual void loadParams(const TiXmlElement* root);
+		void loadLights(const TiXmlElement* root);
 
-  void setAmbientColor(GLfloat r, GLfloat g, GLfloat b);
+		void setAmbientColor(GLfloat r, GLfloat g, GLfloat b);
+		// HACK: Assuming r = g = b values
+		inline GLfloat getAmbientColor() {  return this->ambientColor[0]; }
 
-  Light* getLight(int lightNumber) const;
-  inline Light* getLight() const { return this->currentLight; };
+		Light* getLight(int lightNumber) const;
+		inline Light* getLight() const { return this->currentLight; };
 
-  void draw() const;
+		void draw() const;
 
-  void debug() const;
+		void debug() const;
 
- private:
-  LightManager();
+	private:
+		LightManager();
 
-  int  registerLight(Light* light);
-  void unregisterLight(Light* light);
+		int  registerLight(Light* light);
+		void unregisterLight(Light* light);
 
- private:
-  static LightManager*    singletonRef;       //!< This is the LightHandlers Reference.
-  GLfloat                 ambientColor[4];    //!< The ambient Color of the scene.
+	private:
+		static LightManager*    singletonRef;       //!< This is the LightHandlers Reference.
+		GLfloat                 ambientColor[4];    //!< The ambient Color of the scene.
 
-  Light**                 lights;             //!< An array of Lenght NUMBEROFLIGHTS, that holds pointers to all LightValues.
-  Light*                  currentLight;       //!< The current Light, we are working with.
+		Light**                 lights;             //!< An array of Lenght NUMBEROFLIGHTS, that holds pointers to all LightValues.
+		Light*                  currentLight;       //!< The current Light, we are working with.
 
 };
