diff --git a/src/Main/fg_init.cxx b/src/Main/fg_init.cxx
index 8de7deda1..cdba3a144 100644
--- a/src/Main/fg_init.cxx
+++ b/src/Main/fg_init.cxx
@@ -1022,14 +1022,15 @@ void fgStartNewReset()
     globals->set_renderer(render);
     render->init();
     render->setViewer(viewer.get());
+
     viewer->getDatabasePager()->setUpThreads(1, 1);
+    
+    // must do this before splashinit for Rembrandt
+    flightgear::CameraGroup::buildDefaultGroup(viewer.get());
     render->splashinit();
     
-    flightgear::CameraGroup::buildDefaultGroup(viewer.get());
-
     fgOSResetProperties();
 
-    
 // init some things manually
 // which do not follow the regular init pattern
     
diff --git a/src/Viewer/renderer.cxx b/src/Viewer/renderer.cxx
index d982056e0..098ffe960 100644
--- a/src/Viewer/renderer.cxx
+++ b/src/Viewer/renderer.cxx
@@ -433,9 +433,9 @@ FGRenderer::~FGRenderer()
     }
     
     // replace the viewer's scene completely
-    if (getViewer())
+    if (getViewer()) {
         getViewer()->setSceneData(new osg::Group);
-    
+    }
     
 #ifdef FG_JPEG_SERVER
    jpgRenderFrame = NULL;
@@ -448,11 +448,15 @@ FGRenderer::~FGRenderer()
 // critical parts of the scene graph in addition to the splash screen.
 void
 FGRenderer::splashinit( void )
-      {
+{
+    // important that we reset the viewer sceneData here, to ensure the reference
+    // time for everything is in sync; otherwise on reset the Viewer and
+    // GraphicsWindow clocks are out of sync.
     osgViewer::Viewer* viewer = getViewer();
     viewer->setName("osgViewer");
-    _viewerSceneRoot = dynamic_cast<osg::Group*>(viewer->getSceneData());
+    _viewerSceneRoot = new osg::Group;
     _viewerSceneRoot->setName("viewerSceneRoot");
+    viewer->setSceneData(_viewerSceneRoot);
     
     ref_ptr<Node> splashNode = fgCreateSplashNode();
     if (_classicalRenderer) {
@@ -470,7 +474,8 @@ FGRenderer::splashinit( void )
         }
     }
     
-    _frameStamp = viewer->getFrameStamp();
+    _frameStamp = new osg::FrameStamp;
+    viewer->setFrameStamp(_frameStamp.get());
     // Scene doesn't seem to pass the frame stamp to the update
     // visitor automatically.
     _updateVisitor->setFrameStamp(_frameStamp.get());