Index: osgVisual/src/core/visual_core.cpp
===================================================================
--- osgVisual/src/core/visual_core.cpp	(revision 143)
+++ osgVisual/src/core/visual_core.cpp	(revision 144)
@@ -34,4 +34,21 @@
 	OSG_NOTIFY( osg::ALWAYS ) << "Initialize visual_core..." << std::endl;
 
+	// Check for config file to provide it to all modules during initialization.
+	if( arguments.read("-c", configFilename) || arguments.read("--config", configFilename) )
+	{
+		if( !osgDB::fileExists(configFilename) )
+			configFilename = "";
+		else
+			OSG_ALWAYS << "Using configuration file: " << configFilename << std::endl;
+	}
+
+xmlDoc* tmpDoc;
+util::getModuleXMLConfig( configFilename, "core", tmpDoc );
+if(tmpDoc)
+{
+	xmlFreeDoc(tmpDoc); xmlCleanupParser();
+}
+
+
 	// Configure osg to use KdTrees
 	osgDB::Registry::instance()->setBuildKdTreesHint(osgDB::ReaderWriter::Options::BUILD_KDTREES);
@@ -63,5 +80,5 @@
 	// Initialize distortion
 	OSG_NOTIFY( osg::ALWAYS ) << "Using distortion." << std::endl;
-	distortion = new visual_distortion( viewer, arguments );
+	distortion = new visual_distortion( viewer, arguments, configFilename );
 	distortion->initialize( rootNode, viewer->getCamera()->getClearColor() );
 	distortedSceneGraph = distortion->getDistortedSceneGraph();
@@ -70,12 +87,12 @@
 #ifdef USE_SKY_SILVERLINING
 	// Initialize sky
-	sky = new visual_skySilverLining( viewer );
-	sky->init(distortedSceneGraph, rootNode);	// Without distortedSceneGraph=NULL
+	sky = new visual_skySilverLining( viewer, configFilename );
+	sky->init(distortedSceneGraph, rootNode);	// Without distortion: distortedSceneGraph=NULL
 #endif
 
 	// Initialize DataIO interface
-	visual_dataIO::getInstance()->init(viewer, arguments);
-
-	// Add manipulators for user interaction - after dataIO to be able to skip it in slaves.
+	visual_dataIO::getInstance()->init(viewer, arguments, configFilename);
+
+	// Add manipulators for user interaction - after dataIO to be able to skip it in slaves rendering machines.
 	addManipulators();
 
@@ -258,41 +275,29 @@
 void visual_core::parseConfigFile(osg::ArgumentParser& arguments_)
 {
-	configFileValid = false;
-
-	std::string filename;
-	if( arguments.read("-c", filename) || arguments.read("--config", filename) )
-	{
-		OSG_ALWAYS << "Using configuration file.." << std::endl;
-		if( osgDB::fileExists(filename) )
+	if( configFilename != "" )
+	{
+		xmlDoc *doc = NULL;
+		xmlNode *root_element = NULL;
+	  	
+		doc = xmlReadFile(configFilename.c_str(), NULL, 0);
+		if (doc == NULL)
 		{
-			configFileValid = false;
-			xmlDoc *doc = NULL;
-			xmlNode *root_element = NULL;
-		  	
-			doc = xmlReadFile(filename.c_str(), NULL, 0);
-			if (doc == NULL)
-			{
-				configFileValid = false;
-				OSG_ALWAYS << "visual_core::parseConfigFile() - ERROR: could not parse osgVisual config file" << filename  << std::endl;
-			}
-			else
-			{
-				//  Get the root element node
-				root_element = xmlDocGetRootElement(doc);
-
-				// Parse the XML document.
-				checkXMLNode(root_element);
-
-				// free the document
-				xmlFreeDoc(doc);;
-			}
-			// Free the global variables that may have been allocated by the parser.
-			xmlCleanupParser();
-
-			if(!configFileValid)
-				OSG_ALWAYS << "visual_core::parseConfigFile() - ERROR: XML file seems not to be a valid osgVisual configuration file!" << std::endl;
-
-		}	// IF configfile exists
-	}	// IF -c END
+			OSG_ALWAYS << "visual_core::parseConfigFile() - ERROR: could not parse osgVisual config file" << configFilename  << std::endl;
+		}
+		else
+		{
+			//  Get the root element node
+			root_element = xmlDocGetRootElement(doc);
+
+			// Parse the XML document.
+			checkXMLNode(root_element);
+
+			// free the document
+			xmlFreeDoc(doc);;
+		}
+		// Free the global variables that may have been allocated by the parser.
+		xmlCleanupParser();
+
+	}	// IF configfile exists
 }
 
@@ -305,5 +310,5 @@
 		{
 			OSG_DEBUG << "XML node osgvisualconfiguration found" << std::endl;
-			configFileValid = true;
+
 			// Iterate to the next nodes to configure modules and scenery.
 			checkXMLNode(cur_node->children);		
@@ -352,8 +357,7 @@
 			enabled = false;
 
-		OSG_ALWAYS << "Module '" << name << "' found. Enabled = " << enabled << std::endl;
-
 		attr = attr->next; 
 	} 
+	OSG_ALWAYS << "Module '" << name << "' found. Enabled = " << enabled << std::endl;
 
 	// Pass the nodes to the corresponding modules...
@@ -412,13 +416,14 @@
 
 	// Sky settings: 	
-	sky->setTime(12,00,23);
+	sky->setTime(15,30,00);
 	sky->setVisibility(50000);
-	sky->addWindVolume( 0.0, 15000.0, 50.0, 90.0 );
+	sky->addWindVolume( 0.0, 15000.0, 25.0, 90.0 );
 	
 	//sky->addCloudLayer( 0, 20000, 20000, 600.0, 1000.0, 0.5, CUMULONIMBUS_CAPPILATUS );
 	//sky->addCloudLayer( 1, 5000000, 5000000, 600.0, 7351.0, 0.2, CIRRUS_FIBRATUS );
 	//sky->addCloudLayer( 2, 50000, 50000, 600.0, 7351.0, 0.2, CIRROCUMULUS );
-	//sky->addCloudLayer( 3, 50000, 50000, 1300.0, 700.0, 0.07, CUMULUS_CONGESTUS );
-	sky->addCloudLayer( 1, 100000, 100000, 3500.0, 2000.0, 0.60, STRATOCUMULUS );
+	///sky->addCloudLayer( 2, 100000, 100000, 600.0, 2351.0, 0.75, STRATUS );
+	sky->addCloudLayer( 3, 50000, 50000, 1300.0, 700.0, 0.07, CUMULUS_CONGESTUS );
+	//sky->addCloudLayer( 1, 100000, 100000, 3500.0, 2000.0, 0.50, STRATOCUMULUS );
 
 	//sky->setSlotPrecipitation( 1, 0.0, 0.0, 0.0, 25.0 );
Index: osgVisual/src/dataIO/visual_dataIO.cpp
===================================================================
--- osgVisual/src/dataIO/visual_dataIO.cpp	(revision 143)
+++ osgVisual/src/dataIO/visual_dataIO.cpp	(revision 144)
@@ -44,5 +44,5 @@
 };
 
-void visual_dataIO::init(osgViewer::Viewer* viewer_, osg::ArgumentParser& arguments_)
+void visual_dataIO::init(osgViewer::Viewer* viewer_, osg::ArgumentParser& arguments_, std::string configFileName)
 {
 	OSG_NOTIFY( osg::ALWAYS ) << "visual_dataIO init()" << std::endl;
Index: osgVisual/src/sky_Silverlining/skySilverLining_skyDrawable.cpp
===================================================================
--- osgVisual/src/sky_Silverlining/skySilverLining_skyDrawable.cpp	(revision 143)
+++ osgVisual/src/sky_Silverlining/skySilverLining_skyDrawable.cpp	(revision 144)
@@ -164,11 +164,4 @@
 			atmosphere->SetRightVector(-0.201185, 0.979553, 0.0);
 
-			/** \todo  :not working!! what is wrong? */
-			// override the some options of the configuration file with the required settings to make silverlining upgrades easier
-			OSG_ALWAYS << "atmosphere from space before : " << atmosphere->GetConfigOptionBoolean("enable-atmosphere-from-space") << std::endl;
-			atmosphere->SetConfigOption("enable-atmosphere-from-space", "yes");
-			atmosphere->SetConfigOption("draw-sun-below-horizon", "yes");
-			OSG_ALWAYS << "atmosphere from space after: " << atmosphere->GetConfigOptionBoolean("enable-atmosphere-from-space") << std::endl;
-
             // Set our location (change this to your own latitude and longitude)
             SilverLining::Location loc;
@@ -256,5 +249,5 @@
 			cloudLayer_->SetLayerPosition( 0.0, 0.0 );
 			cloudLayer_->GenerateShadowMaps(false);
-			cloudLayer_->SetIsInfinite( true );
+			//cloudLayer_->SetIsInfinite( true );
 
 
Index: osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp
===================================================================
--- osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp	(revision 143)
+++ osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp	(revision 144)
@@ -19,5 +19,5 @@
 using namespace osgVisual;
 
-visual_skySilverLining::visual_skySilverLining(osgViewer::Viewer* viewer_)
+visual_skySilverLining::visual_skySilverLining(osgViewer::Viewer* viewer_, std::string configFileName)
 {
 	OSG_NOTIFY( osg::ALWAYS ) << "Initialize visual_skySilverlining..." << std::endl;
Index: osgVisual/src/util/visual_util.cpp
===================================================================
--- osgVisual/src/util/visual_util.cpp	(revision 143)
+++ osgVisual/src/util/visual_util.cpp	(revision 144)
@@ -25,4 +25,79 @@
 util::~util(void)
 {
+}
+
+xmlNode* util::getModuleXMLConfig(std::string configFilename, std::string moduleName, xmlDoc*& doc)
+{
+	doc = NULL;
+	xmlNode *root_element = NULL;
+
+	// Check for valid parameters
+	if(configFilename == "")
+	{
+		OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : Invalid Configuration Filename!" << std::endl;
+		return NULL;
+	}
+	if(moduleName == "")
+	{
+		OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : Invalid Module Filename!" << std::endl;
+		return NULL;
+	}
+
+	// It is a valid XML document?
+	doc = xmlReadFile(configFilename.c_str(), NULL, 0);	
+	if (doc == NULL)
+	{
+		OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : " << configFilename << " is not a valid XML file!" << std::endl;
+		return NULL;
+	}
+
+	//  Get the root element node
+	root_element = xmlDocGetRootElement(doc);
+
+	// Check if it is an osgVisual configuration file
+	std::string node_name=reinterpret_cast<const char*>(root_element->name);
+	if(!(root_element->type == XML_ELEMENT_NODE && node_name == "osgvisualconfiguration"))
+	{
+		OSG_ALWAYS << "ERROR - util::getModuleXMLConfig() : " << configFilename << " is not an osgVisual configuration file!" << std::endl;
+		return NULL;
+	}
+
+	// If file is a valid osgVisual config file, check all the root xml node and all of it's children of osgvisualconfiguration for the specified module
+	xmlNode* tmpNode = checkXMLNodeChildrenForModule(root_element, moduleName);
+
+	if( !tmpNode ) // if no valid node was found: clena up. Otherwise: the caller has to clean up.
+	{
+		xmlFreeDoc(doc);	// free the document
+		xmlCleanupParser();	// Free the global variables that may have been allocated by the parser.
+		return NULL;
+	}
+	else
+		return tmpNode;
+
+}
+
+xmlNode* util::checkXMLNodeChildrenForModule(xmlNode* node, std::string moduleName)
+{
+	for (xmlNode *cur_node = node; cur_node; cur_node = cur_node->next)	// iterate through all elements 
+	{
+		// Is the node the one we are searching for?
+		if (cur_node->type == XML_ELEMENT_NODE)
+		{
+			std::string node_name=reinterpret_cast<const char*>(cur_node->name);
+			if (node_name == "module")
+			{
+				OSG_DEBUG << "XML node module found" << std::endl;
+				return cur_node;
+			}
+			else	// Otherwise: check its children..
+			{
+				xmlNode* tmp_XmlNode = checkXMLNodeChildrenForModule(cur_node->children, moduleName);
+				if(tmp_XmlNode)
+					return tmp_XmlNode;
+			}
+		}	// IF NODE TYPE = ELEMENT END
+
+		// Proceed with next node in this loop.
+	}
 }
 
