diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc
index 06e81223e147400c3d803e379cbef5667684d867..ba8274d371d4981ab04d63f3ae278df4464fa940 100644
--- a/modules/gfx/pymod/export_scene.cc
+++ b/modules/gfx/pymod/export_scene.cc
@@ -87,6 +87,9 @@ void scene_set_hemi_p(Scene* s, tuple p)
 
 } // anon ns
 
+void clear_scene() {
+  Scene::Instance().RemoveAll();
+}
 
 void export_Scene()
 {
@@ -264,4 +267,16 @@ void export_Scene()
     .add_property("show_export_aspect",&Scene::GetShowExportAspect,&Scene::SetShowExportAspect)
     .add_property("hemi_params",scene_get_hemi_p,scene_set_hemi_p)
   ;
+
+  // we need to make sure there are no pending references to Python objects
+  // tied to the scene singleton. The destructor of 
+  // scene may be called after Python is shutdown which results
+  // in a segfault.
+  scope().attr("__dict__")["atexit"]=handle<>(PyImport_ImportModule("atexit"));
+
+  def("_clear_scene", &clear_scene);
+  object r=scope().attr("_clear_scene");
+  scope().attr("atexit").attr("register")(r);
+
 }
+