Index: osgVisual/src/sky_Silverlining/skySilverLining_skyDrawable.cpp
===================================================================
--- osgVisual/src/sky_Silverlining/skySilverLining_skyDrawable.cpp	(revision 133)
+++ osgVisual/src/sky_Silverlining/skySilverLining_skyDrawable.cpp	(revision 134)
@@ -39,5 +39,5 @@
     setUseVertexBufferObjects(false);
     setUseDisplayList(false);
-	cloudLayerSlots.clear();
+	pendingNewCloudLayers.clear();
 	newCloudLayersToAdd = false;
 }
@@ -51,5 +51,5 @@
     setUseVertexBufferObjects(false);
     setUseDisplayList(false);
-	cloudLayerSlots.clear();
+	pendingNewCloudLayers.clear();
 	newCloudLayersToAdd = false;
 	sceneRoot = csn_;
@@ -223,12 +223,10 @@
 }
 
-void skySilverLining_skyDrawable::addCloudLayer(cloudLayerSlot *cloudLayerSlot_)
+void skySilverLining_skyDrawable::addCloudLayerOrder(cloudlayerOrder newCL)
 {
 	OpenThreads::ScopedLock<OpenThreads::Mutex> sLock(cloudLayersToAddMutex); 
-	cloudLayerSlots.push_back( cloudLayerSlot_ );
+	pendingNewCloudLayers.push_back( newCL );
 	newCloudLayersToAdd = true;
 }
-
-
 
 void skySilverLining_skyDrawable::seedAndAddCloudLayers(SilverLining::Atmosphere *atmosphere)
@@ -238,15 +236,63 @@
 	{
 		OpenThreads::ScopedLock<OpenThreads::Mutex> sLock(cloudLayersToAddMutex); 
-		for ( unsigned int i=0; cloudLayerSlots.size() > 0; i++)
+
+		for ( unsigned int i=0; i<pendingNewCloudLayers.size(); i++)	// Configure & Seed cloudLayer
 		{
-			// Seed cloudLayer
-			cloudLayerSlots.back()->cloudLayerPointer->SeedClouds(*atmosphere);
-
-			// add cloudLayer to atmosphere
-			cloudLayerSlots.back()->cloudLayerHandle = atmosphere->GetConditions()->AddCloudLayer( cloudLayerSlots.back()->cloudLayerPointer );
-
-			// Delete this cloudLayer from the ToDo list.
-			cloudLayerSlots.pop_back();
+			// Calculation earth radius on specified lat lon position
+			double radius;
+			cloudlayerOrder newCL = pendingNewCloudLayers[i];
+			if ( !util::calculateEarthRadiusAtWGS84Coordinate(newCL.lat, newCL.lon, sceneRoot, radius) )
+			{
+				OSG_ALWAYS << "ERROR: skySilverLining_skyDrawable::seedAndAddCloudLayers() - Unable to deterine earth radius for lat=" <<newCL.lat<< " lon="<<newCL.lat<<std::endl;
+				return;
+			}
+			OSG_NOTIFY(osg::ALWAYS) << "lat:" << newCL.lat << std::endl;
+			OSG_NOTIFY(osg::ALWAYS) << "lon:" << newCL.lon << std::endl;
+			OSG_NOTIFY(osg::ALWAYS) << "radius:" << radius << std::endl;
+
+			// generate Cloud Layer
+			SilverLining::CloudLayer *cloudLayer_;
+			cloudLayer_ = SilverLining::CloudLayerFactory::Create(newCL.cloudtype);
+			cloudLayer_->SetBaseAltitude( newCL.baseHeight + radius);
+			cloudLayer_->SetThickness(newCL.thickness);
+			cloudLayer_->SetBaseLength(newCL.baseLength);
+			cloudLayer_->SetBaseWidth(newCL.baseWidth);
+			cloudLayer_->SetDensity(newCL.density);
+			cloudLayer_->SetLayerPosition( 0.0, 0.0 );
+			cloudLayer_->GenerateShadowMaps(false);
+
+			//Save cloudlayer information into SLOT
+			newCL.assocCloudLayerSlot->used = true;
+			newCL.assocCloudLayerSlot->enabled = true;
+			newCL.assocCloudLayerSlot->cloudLayerPointer = cloudLayer_;
+			switch(newCL.cloudtype)
+			{
+			case 0: newCL.assocCloudLayerSlot->typeName = "CIRROCUMULUS";				// High planar cloud puffs		
+				break;
+			case 1: newCL.assocCloudLayerSlot->typeName = "CIRRUS_FIBRATUS";			// High, thicker and fibrous clouds that signal changing weather
+				break;
+			case 2: newCL.assocCloudLayerSlot->typeName = "STRATUS";					// Low clouds represented as a slab
+				break;
+			case 3: newCL.assocCloudLayerSlot->typeName = "CUMULUS_MEDIOCRIS";          // Low, puffy clouds on fair days
+				break;
+			case 4: newCL.assocCloudLayerSlot->typeName = "CUMULUS_CONGESTUS";          // Large cumulus clouds that could turn into a thunderhead
+				break;
+			case 5: newCL.assocCloudLayerSlot->typeName = "CUMULONIMBUS_CAPPILATUS";    // Big storm clouds.
+				break;
+			case 6: newCL.assocCloudLayerSlot->typeName = "STRATOCUMULUS";				// Low, dense, puffy clouds with some sun breaks between them.
+				break;
+			default: OSG_NOTIFY( osg::FATAL ) << "skySilverLining_skyDrawable::seedAndAddCloudLayers() - Invalid cloud type." << std::cout;
+				 break;
+			};
+
+			// Seed Cloudlayer
+			cloudLayer_->SeedClouds(*atmosphere);
+	
+			// Add cloudLayer to atmosphere
+			newCL.assocCloudLayerSlot->cloudLayerHandle = atmosphere->GetConditions()->AddCloudLayer( cloudLayer_ );
 		}
+
+		//Clear the ToDo List
+		pendingNewCloudLayers.clear();
 
 		// Note nothing to do.
Index: osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp
===================================================================
--- osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp	(revision 133)
+++ osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp	(revision 134)
@@ -432,48 +432,19 @@
 	if (isInitialized() && slot_ >= 0 && slot_ < MAX_CLOUDLAYER_SLOTS)
 	{
-		// Calculation earth radius on current lat lon position
-		double radius;
-		if ( util::calculateEarthRadiusAtWGS84Coordinate(lat, lon, sceneRoot, radius) )
-		{
-			OSG_NOTIFY(osg::ALWAYS) << "radius:" << radius << std::endl;
-			// generate Cloud Layer
-			SilverLining::CloudLayer *cloudLayer_;
-			cloudLayer_ = SilverLining::CloudLayerFactory::Create(cloudtype_);
-			cloudLayer_->SetBaseAltitude( baseHeight_ + radius);
-						
-			cloudLayer_->SetThickness(thickness_);
-			cloudLayer_->SetBaseLength(baseLength_);
-			cloudLayer_->SetBaseWidth(baseWidth_);
-			cloudLayer_->SetDensity(density_);
-			cloudLayer_->SetLayerPosition( 0.0, 0.0 );
-			cloudLayer_->GenerateShadowMaps(false);
-
-			//Save cloudlayer information into SLOT
-			cloudLayerSlots[slot_].used = true;
-			cloudLayerSlots[slot_].enabled = true;
-			cloudLayerSlots[slot_].cloudLayerPointer = cloudLayer_;
-			switch(cloudtype_)
-			{
-			case 0: cloudLayerSlots[slot_].typeName = "CIRROCUMULUS";				// High planar cloud puffs		
-				break;
-			case 1: cloudLayerSlots[slot_].typeName = "CIRRUS_FIBRATUS";			// High, thicker and fibrous clouds that signal changing weather
-    			break;
-			case 2: cloudLayerSlots[slot_].typeName = "STRATUS";					// Low clouds represented as a slab
-    			break;
-			case 3: cloudLayerSlots[slot_].typeName = "CUMULUS_MEDIOCRIS";          // Low, puffy clouds on fair days
-    			break;
-			case 4: cloudLayerSlots[slot_].typeName = "CUMULUS_CONGESTUS";          // Large cumulus clouds that could turn into a thunderhead
-    			break;
-			case 5: cloudLayerSlots[slot_].typeName = "CUMULONIMBUS_CAPPILATUS";    // Big storm clouds.
-    			break;
-			case 6: cloudLayerSlots[slot_].typeName = "STRATOCUMULUS";				// Low, dense, puffy clouds with some sun breaks between them.
-				break;
-			default: OSG_NOTIFY( osg::FATAL ) << "visual_skySilverlining::addCloudLayer - Invalid cloud type." << std::cout;
-				 break;
-			};
+		// create cloudlayer order and pass to skyDrawable to instantiate.
+		cloudlayerOrder newCL;
+		newCL.slot = slot_;
+		newCL.lat = lat;
+		newCL.lon = lon;
+		newCL.baseLength = baseLength_;
+		newCL.baseWidth = baseWidth_;
+		newCL.thickness = thickness_;
+		newCL.baseHeight = baseHeight_;
+		newCL.density = density_;
+		newCL.cloudtype = cloudtype_;
+		newCL.assocCloudLayerSlot = &cloudLayerSlots[slot_];
 		
-			// Pass cloudlayer for seeding and adding to sky framework to the render thread
-			skyDrawable->addCloudLayer( &cloudLayerSlots[slot_] );
-		} // If valid radius END
+		skyDrawable->addCloudLayerOrder( newCL );
+
 	}	 // If isInitialized() END
 }
