diff --git a/src/Viewer/WindowBuilder.cxx b/src/Viewer/WindowBuilder.cxx
index d7113d17d..586cdbce0 100644
--- a/src/Viewer/WindowBuilder.cxx
+++ b/src/Viewer/WindowBuilder.cxx
@@ -65,13 +65,10 @@ WindowBuilder::makeDefaultTraits(bool stencil)
         traits->screenNum = 0;
 
     int bpp = fgGetInt("/sim/rendering/bits-per-pixel");
-    bool alpha = fgGetBool("/sim/rendering/clouds3d-enable");
     int cbits = (bpp <= 16) ?  5 :  8;
     int zbits = (bpp <= 16) ? 16 : 24;
     traits->red = traits->green = traits->blue = cbits;
     traits->depth = zbits;
-    if (alpha)
-        traits->alpha = 8;
 
     if (stencil)
         traits->stencil = 8;
diff --git a/src/Viewer/renderer.cxx b/src/Viewer/renderer.cxx
index 944d598b5..9728f0f72 100644
--- a/src/Viewer/renderer.cxx
+++ b/src/Viewer/renderer.cxx
@@ -401,7 +401,10 @@ FGRenderer::FGRenderer() :
     _root->setName("fakeRoot");
 
     _updateVisitor = new SGUpdateVisitor;
-    _root = new osg::Group;
+  
+  // when Rembrandt is enabled, we use this group to access the whole
+  // scene. Since the only child is the _viewerSceneRoot, we could
+  // simply copy the reference, we don't need the additional group.
     _deferredRealRoot = new osg::Group;
     
    _numCascades = 4;
@@ -1389,6 +1392,46 @@ CameraInfo* FGRenderer::buildCameraFromRenderingPipeline(FGRenderingPipeline* rp
     return info;
 }
 
+void FGRenderer::setupRoot()
+{
+    osg::StateSet* stateSet = _root->getOrCreateStateSet();
+    
+    stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
+    
+    stateSet->setAttribute(new osg::Depth(osg::Depth::LESS));
+    stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
+    
+    stateSet->setAttribute(new osg::BlendFunc);
+    stateSet->setMode(GL_BLEND, osg::StateAttribute::OFF);
+    
+    stateSet->setMode(GL_FOG, osg::StateAttribute::OFF);
+    
+    // this will be set below
+    stateSet->setMode(GL_NORMALIZE, osg::StateAttribute::OFF);
+    
+    osg::Material* material = new osg::Material;
+    stateSet->setAttribute(material);
+    
+    stateSet->setTextureAttribute(0, new osg::TexEnv);
+    stateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF);
+    
+    osg::Hint* hint = new osg::Hint(GL_FOG_HINT, GL_DONT_CARE);
+    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/fog"));
+    stateSet->setAttribute(hint);
+    hint = new osg::Hint(GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE);
+    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/polygon-smooth"));
+    stateSet->setAttribute(hint);
+    hint = new osg::Hint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
+    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/line-smooth"));
+    stateSet->setAttribute(hint);
+    hint = new osg::Hint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE);
+    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/point-smooth"));
+    stateSet->setAttribute(hint);
+    hint = new osg::Hint(GL_PERSPECTIVE_CORRECTION_HINT, GL_DONT_CARE);
+    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/perspective-correction"));
+    stateSet->setAttribute(hint);
+}
+                                    
 void
 FGRenderer::setupView( void )
 {
@@ -1401,6 +1444,8 @@ FGRenderer::setupView( void )
     osg::PolygonOffset::setUnitsMultiplier(1);
     osg::PolygonOffset::setFactorMultiplier(1);
 
+    setupRoot();
+  
 // build the sky    
     // The sun and moon diameters are scaled down numbers of the
     // actual diameters. This was needed to fit both the sun and the
@@ -1419,55 +1464,7 @@ FGRenderer::setupView( void )
     viewer->getCamera()
         ->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
     
-    osg::StateSet* stateSet = _root->getOrCreateStateSet();
-
-    stateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
-    
-    stateSet->setAttribute(new osg::Depth(osg::Depth::LESS));
-    stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
-
-    stateSet->setAttribute(new osg::AlphaFunc(osg::AlphaFunc::GREATER, 0.01));
-    stateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::OFF);
-    stateSet->setAttribute(new osg::BlendFunc);
-    stateSet->setMode(GL_BLEND, osg::StateAttribute::OFF);
-
-    stateSet->setMode(GL_FOG, osg::StateAttribute::OFF);
-    
-    // this will be set below
-    stateSet->setMode(GL_NORMALIZE, osg::StateAttribute::OFF);
-
-    osg::Material* material = new osg::Material;
-    stateSet->setAttribute(material);
-    
-    stateSet->setTextureAttribute(0, new osg::TexEnv);
-    stateSet->setTextureMode(0, GL_TEXTURE_2D, osg::StateAttribute::OFF);
-
-    osg::Hint* hint = new osg::Hint(GL_FOG_HINT, GL_DONT_CARE);
-    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/fog"));
-    stateSet->setAttribute(hint);
-    hint = new osg::Hint(GL_POLYGON_SMOOTH_HINT, GL_DONT_CARE);
-    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/polygon-smooth"));
-    stateSet->setAttribute(hint);
-    hint = new osg::Hint(GL_LINE_SMOOTH_HINT, GL_DONT_CARE);
-    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/line-smooth"));
-    stateSet->setAttribute(hint);
-    hint = new osg::Hint(GL_POINT_SMOOTH_HINT, GL_DONT_CARE);
-    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/point-smooth"));
-    stateSet->setAttribute(hint);
-    hint = new osg::Hint(GL_PERSPECTIVE_CORRECTION_HINT, GL_DONT_CARE);
-    hint->setUpdateCallback(new FGHintUpdateCallback("/sim/rendering/perspective-correction"));
-    stateSet->setAttribute(hint);
-
-    osg::Group* sceneGroup = new osg::Group;
-    sceneGroup->setName("rendererScene");
-    sceneGroup->addChild(globals->get_scenery()->get_scene_graph());
-    sceneGroup->setNodeMask(~simgear::BACKGROUND_BIT);
-
-    //sceneGroup->addChild(thesky->getCloudRoot());
-
-    stateSet = sceneGroup->getOrCreateStateSet();
-    stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
-
+  
     // need to update the light on every frame
     // OSG LightSource objects are rather confusing. OSG only supports
     // the 10 lights specified by OpenGL itself; if more than one
@@ -1478,7 +1475,7 @@ FGRenderer::setupView( void )
     // has the corresponding OpenGL light enabled: a LightSource will
     // affect geometry anywhere in the scene graph that has its light
     // number enabled in a state set. 
-    LightSource* lightSource = new LightSource;
+    osg::ref_ptr<LightSource> lightSource = new LightSource;
     lightSource->setName("FGLightSource");
     lightSource->getLight()->setDataVariance(Object::DYNAMIC);
     // relative because of CameraView being just a clever transform node
@@ -1488,7 +1485,7 @@ FGRenderer::setupView( void )
     _viewerSceneRoot->addChild(lightSource);
     
     // we need a white diffuse light for the phase of the moon
-    osg::LightSource* sunLight = new osg::LightSource;
+    osg::ref_ptr<LightSource> sunLight = new osg::LightSource;
     sunLight->setName("sunLightSource");
     sunLight->getLight()->setDataVariance(Object::DYNAMIC);
     sunLight->getLight()->setLightNum(1);
@@ -1498,20 +1495,22 @@ FGRenderer::setupView( void )
     
     // Hang a StateSet above the sky subgraph in order to turn off
     // light 0
-    Group* skyGroup = new Group;
-    skyGroup->setName("rendererSkyParent");
+    Group* skyGroup = _sky->getPreRoot();
     StateSet* skySS = skyGroup->getOrCreateStateSet();
     skySS->setMode(GL_LIGHT0, StateAttribute::OFF);
-    skyGroup->addChild(_sky->getPreRoot());
     sunLight->addChild(skyGroup);
     
-    _root->addChild(sceneGroup);
-    if ( _classicalRenderer )
+    if ( _classicalRenderer ) {
         _root->addChild(sunLight);
-    
-    // Clouds are added to the scene graph later
-    stateSet = globals->get_scenery()->get_scene_graph()->getOrCreateStateSet();
-    stateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON);
+    }
+  
+    osg::Group* sceneGroup = globals->get_scenery()->get_scene_graph();
+    sceneGroup->setName("rendererScene");
+    sceneGroup->setNodeMask(~simgear::BACKGROUND_BIT);
+    _root->addChild(sceneGroup);
+  
+    // setup state-set for main scenery (including models and aircraft)
+    osg::StateSet* stateSet = sceneGroup->getOrCreateStateSet();
     stateSet->setMode(GL_LIGHTING, osg::StateAttribute::ON);
     stateSet->setMode(GL_DEPTH_TEST, osg::StateAttribute::ON);
 
@@ -1553,10 +1552,11 @@ FGRenderer::setupView( void )
     // The clouds are attached directly to the scene graph root
     // because, in theory, they don't want the same default state set
     // as the rest of the scene. This may not be true in practice.
-	if ( _classicalRenderer ) {
-		_viewerSceneRoot->addChild(_sky->getCloudRoot());
-		_viewerSceneRoot->addChild(FGCreateRedoutNode());
-	}
+    if ( _classicalRenderer ) {
+      _viewerSceneRoot->addChild(_sky->getCloudRoot());
+      _viewerSceneRoot->addChild(FGCreateRedoutNode());
+    }
+  
     // Attach empty program to the scene root so that shader programs
     // don't leak into state sets (effects) that shouldn't have one.
     stateSet = _viewerSceneRoot->getOrCreateStateSet();
diff --git a/src/Viewer/renderer.hxx b/src/Viewer/renderer.hxx
index 0e9152067..6f5606724 100644
--- a/src/Viewer/renderer.hxx
+++ b/src/Viewer/renderer.hxx
@@ -184,6 +184,8 @@ protected:
     void addChangeListener(SGPropertyChangeListener* l, const char* path);
     
     void updateSky();
+  
+    void setupRoot();
 };
 
 bool fgDumpSceneGraphToFile(const char* filename);