Index: /osgVisual/src/core/visual_core.cpp
===================================================================
--- /osgVisual/src/core/visual_core.cpp	(revision 135)
+++ /osgVisual/src/core/visual_core.cpp	(revision 136)
@@ -416,9 +416,9 @@
 	//addWindVolume( 0.0, 15000.0, 300.0, 90.0 );
 	
-	sky->addCloudLayer( 0, 20000, 20000, 600.0, 1000.0, 0.5, CUMULONIMBUS_CAPPILATUS );
+	//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, 100000, 100000, 1300.0, 100.0, 0.07, CUMULUS_CONGESTUS );
-	sky->addCloudLayer( 1, 50000, 50000, 3500.0, 2000.0, 0.90, STRATOCUMULUS );
+	sky->addCloudLayer( 3, 50000, 50000, 1300.0, 700.0, 0.07, CUMULUS_CONGESTUS );
+	//sky->addCloudLayer( 1, 50000, 50000, 3500.0, 2000.0, 0.90, STRATOCUMULUS );
 
 	//cloudLayerSlots[1].cloudLayerPointer->SetPrecipitation(SilverLining::CloudLayer::SLEET, 25.0 );
Index: /osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp
===================================================================
--- /osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp	(revision 135)
+++ /osgVisual/src/sky_Silverlining/visual_skySilverLining.cpp	(revision 136)
@@ -251,40 +251,71 @@
 void visual_skySilverLining::updateUpVector()
 {
-	// Allowed deltaLat and deltaLon between Updating the upvector
-	double deltaLatToUpdate = osg::DegreesToRadians( 0.1 );	// 0.5 deg
-	double deltaLonToUpdate = osg::DegreesToRadians( 0.1 ); // 0.5 deg
-
-	if ( fabs(lat-upVectorLat) > deltaLatToUpdate || fabs(lon-upVectorLon) > deltaLonToUpdate )
-	{
-		// Get ellipsoid model
-		osg::EllipsoidModel* ellipsoid = sceneRoot->getEllipsoidModel();
-		if ( !ellipsoid )
-			return;
-
-		//OSG_NOTIFY( osg::ALWAYS ) << "update Upvector.." << std::endl;
-
-		// Calculate up vector
-		double x,y,z;
-		util::getXYZofCamera(sceneCamera, x, y, z);
-		osg::Vec3d upVector = ellipsoid->computeLocalUpVector( x, y, z );
-		upVector.normalize();
-		
-		// Calculate side vector
-		osg::Matrixd localToWorld;
-		ellipsoid->computeLocalToWorldTransformFromLatLongHeight(lat, lon, height, localToWorld);
-
-		osg::Vec3d sideVector(localToWorld(0, 0), localToWorld(0, 1), localToWorld(0, 2));
-		sideVector.normalize();
-
-		// Update silverlining vectors
-		//std::cout << "upVector: X: " << upVector.x() << ", Y: "<<  upVector.y() << ", Z: "<< upVector.z() << std::endl;
-		//std::cout << "sideVector: X: " << sideVector.x() << ", Y: "<<  sideVector.y() << ", Z: "<< sideVector.z() << std::endl;
-		atmosphere->SetUpVector( upVector.x(), upVector.y(), upVector.z() );
-		atmosphere->SetRightVector( sideVector.x(), sideVector.y(), sideVector.z() );
-
-		// Note new upvector lat/lon
-		upVectorLon = lon;
-		upVectorLat = lat;
-	}	// If update requiered END
+	//// Allowed deltaLat and deltaLon between Updating the upvector
+	//double deltaLatToUpdate = osg::DegreesToRadians( 0.1 );	// 0.5 deg
+	//double deltaLonToUpdate = osg::DegreesToRadians( 0.1 ); // 0.5 deg
+
+	//if ( fabs(lat-upVectorLat) > deltaLatToUpdate || fabs(lon-upVectorLon) > deltaLonToUpdate )
+	//{
+	//	// Get ellipsoid model
+	//	osg::EllipsoidModel* ellipsoid = sceneRoot->getEllipsoidModel();
+	//	if ( !ellipsoid )
+	//		return;
+
+	//	//OSG_NOTIFY( osg::ALWAYS ) << "update Upvector.." << std::endl;
+
+	//	// Calculate up vector
+	//	double x,y,z;
+	//	util::getXYZofCamera(sceneCamera, x, y, z);
+	//	osg::Vec3d upVector = ellipsoid->computeLocalUpVector( x, y, z );
+	//	upVector.normalize();
+	//	
+	//	// Calculate side vector
+	//	osg::Matrixd localToWorld;
+	//	ellipsoid->computeLocalToWorldTransformFromLatLongHeight(lat, lon, height, localToWorld);
+
+	//	osg::Vec3d sideVector(localToWorld(0, 0), localToWorld(0, 1), localToWorld(0, 2));
+	//	sideVector.normalize();
+
+	//	// Update silverlining vectors
+	//	//std::cout << "upVector: X: " << upVector.x() << ", Y: "<<  upVector.y() << ", Z: "<< upVector.z() << std::endl;
+	//	//std::cout << "sideVector: X: " << sideVector.x() << ", Y: "<<  sideVector.y() << ", Z: "<< sideVector.z() << std::endl;
+	//	atmosphere->SetUpVector( upVector.x(), upVector.y(), upVector.z() );
+	//	atmosphere->SetRightVector( sideVector.x(), sideVector.y(), sideVector.z() );
+
+	//	// Note new upvector lat/lon
+	//	upVectorLon = lon;
+	//	upVectorLat = lat;
+	//}	// If update requiered END
+
+	double x,y,z;
+    util::getXYZofCamera(sceneCamera, x, y, z);
+
+    osg::Vec3d up(x, y, z);
+
+    up.normalize();
+    osg::Vec3d north(0, 0, 1);	// Z is north
+    osg::Vec3d east = north ^ up;	// Cross product
+    east.normalize();
+
+    atmosphere->SetUpVector(up.x(), up.y(), up.z());
+    atmosphere->SetRightVector(east.x(), east.y(), east.z());
+
+    osg::Matrixd view = sceneCamera->getViewMatrix();
+    osg::Matrixd proj = sceneCamera->getProjectionMatrix();
+
+    double dView[16], dProj[16];
+
+    int i = 0;
+    for (int row = 0; row < 4; row++)
+    {
+        for (int col = 0; col < 4; col++)
+        {
+            dView[i] = view(row, col);
+            dProj[i] = proj(row, col);
+            i++;
+        }
+    }
+    atmosphere->SetCameraMatrix(dView);
+    atmosphere->SetProjectionMatrix(dProj);
 }
 
