diff --git a/modules/gfx/pymod/__init__.py b/modules/gfx/pymod/__init__.py
index bd5750d32178c50d2ce7758af2a053dd2ea4c0f1..eb3c91a168a46ac1b0b4cee671277f10b068762d 100644
--- a/modules/gfx/pymod/__init__.py
+++ b/modules/gfx/pymod/__init__.py
@@ -329,3 +329,60 @@ def _entity_reset(self,*args,**kwargs):
     self._reset3(eh,qr,qf)
 
 Entity.Reset=_entity_reset
+
+def _scene_export(self,*args,**kwargs):
+  """
+  scene.Export(Exporter)
+  scene.Export("file.png")
+  scene.Export("file.png",(width,height),samples=0,transparency=False)
+  deprecated:
+  scene.Export("file.png",width,height,samples=0,transparency=False)
+  scene.Export("file.png",width,height,transparency) 
+  """
+  scene=Scene()
+  tp=False
+  sa=0
+  if "tp" in kwargs:
+    tp=int(kwargs["tp"])
+  if "transparency" in kwargs:
+    tp=int(kwargs["transparency"])
+  if "samples" in kwargs:
+    sa=int(kwargs["samples"])
+
+  if len(args)==1:
+    if isinstance(args[0],Exporter):
+      scene._export_via_exporter(args[0])
+      return
+    elif type(args[0])==type(""):
+      scene._export_screen(args[0],tp)
+      return
+  elif len(args)==2:
+    if type(args[0]==type("")):
+      # assume second argument is a dimension
+      width=int(args[1][0])
+      height=int(args[1][1])
+      scene._export_buffer(args[0],width,height,sa,tp)
+      return
+  elif len(args)==3:
+    if type(args[0]==type("")):
+      width=int(args[1])
+      height=int(args[2])
+      scene._export_buffer(args[0],width,height,sa,tp)
+      return
+  elif len(args)==4:
+    if type(args[0]==type("")):
+      width=int(args[1])
+      height=int(args[2])
+      tp=int(args[3])
+      scene._export_buffer(args[0],width,height,sa,tp)
+      return
+  # getting here indicates an error
+  raise RuntimeError("""invalid arguments to scene.Export; expected one of
+  Export(gfx.Exporter)
+  Export('file.png')
+  Export('file.png',(width,height),samples=0, transparency=False)
+  Export('file.png',width,height,samples=0, transparency=False) -> deprecated
+  Export('file.png',width,height,transparency) -> deprecated
+  """)
+
+SceneSingleton.Export=_scene_export
diff --git a/modules/gfx/pymod/export_scene.cc b/modules/gfx/pymod/export_scene.cc
index 5a8a5929d29a788468f907ba90534f7f79aeac10..59098ea93c962890101edd9598b2618e9fb9aba0 100644
--- a/modules/gfx/pymod/export_scene.cc
+++ b/modules/gfx/pymod/export_scene.cc
@@ -82,14 +82,14 @@ void export_Scene()
   void (Scene::* set_light_prop1)(const Color&,const Color&,const Color&) = &Scene::SetLightProp;
   void (Scene::* set_light_prop2)(float,float,float) = &Scene::SetLightProp;
 
-  void (Scene::* export1)(const String&, uint, uint, bool) = &Scene::Export;
-  void (Scene::* export2)(const String&, uint, uint, int, bool) = &Scene::Export;
-  void (Scene::* export3)(const String&, bool) = &Scene::Export;
-  void (Scene::* export4)(Exporter*) const = &Scene::Export;
+  void (Scene::* export_buffer)(const String&, uint, uint, int, bool) = &Scene::Export;
+  void (Scene::* export_screen)(const String&, bool) = &Scene::Export;
+  void (Scene::* export_via_exporter)(Exporter*) const = &Scene::Export;
   void (Scene::*remove1)(const GfxNodeP&) = &Scene::Remove;
   void (Scene::*remove2)(const String&) = &Scene::Remove;
   void (Scene::*center_on1)(const String&) = &Scene::CenterOn;
   void (Scene::*center_on2)(const GfxObjP&) = &Scene::CenterOn;
+  bool (Scene::*start_offscreen_mode1)(unsigned int, unsigned int) = &Scene::StartOffscreenMode;  
   bool (Scene::*start_offscreen_mode2)(unsigned int, unsigned int, int) = &Scene::StartOffscreenMode;  
   class_<Viewport>("Viewport", init<>())
     .def_readwrite("x", &Viewport::x)
@@ -196,10 +196,9 @@ void export_Scene()
     .def("SetLightProp",set_light_prop1)
     .def("SetLightProp",set_light_prop2)
     .def("Apply", apply)
-    .def("Export",export1, arg("transparent")=false)
-    .def("Export",export2, arg("transparent")=false)
-    .def("Export",export3, arg("transparent")=false)
-    .def("Export",export4)
+    .def("_export_screen",export_screen)
+    .def("_export_buffer",export_buffer)
+    .def("_export_via_exporter",export_via_exporter)
     .def("ExportPov",&Scene::ExportPov,
          scene_export_pov_overloads())
     .def("PushView",&Scene::PushView)
@@ -229,6 +228,7 @@ void export_Scene()
     .add_property("ao_quality",&Scene::GetAmbientOcclusionQuality,&Scene::SetAmbientOcclusionQuality)
     .add_property("ao_size",&Scene::GetAmbientOcclusionSize,&Scene::SetAmbientOcclusionSize)
     .def("AttachObserver",&Scene::AttachObserver)
+    .def("StartOffscreenMode",start_offscreen_mode1)
     .def("StartOffscreenMode",start_offscreen_mode2)
     .def("StopOffscreenMode",&Scene::StopOffscreenMode)
     .def("SetShadingMode",&Scene::SetShadingMode)
diff --git a/modules/gfx/src/impl/glx_offscreen_buffer.cc b/modules/gfx/src/impl/glx_offscreen_buffer.cc
index 6b934d1155ce89a69e88bc7b66dfdf0b7e0cea6b..41bca43a363a7c873f0ee719e2ca68c0859a893b 100644
--- a/modules/gfx/src/impl/glx_offscreen_buffer.cc
+++ b/modules/gfx/src/impl/glx_offscreen_buffer.cc
@@ -29,6 +29,16 @@
 
 namespace ost { namespace gfx {
 
+namespace {
+  Display* get_dpy() {
+    static Display* dpy=0;
+    if(not dpy) {
+      dpy=XOpenDisplay(getenv("DISPLAY"));
+    }
+    return dpy;
+  }
+}
+
 OffscreenBuffer::OffscreenBuffer(unsigned int width, unsigned int height, const OffscreenBufferFormat& f, bool shared):
   width_(width), height_(height), valid_(false), active_(false)
 {
@@ -39,7 +49,7 @@ OffscreenBuffer::OffscreenBuffer(unsigned int width, unsigned int height, const
   }
 
   LOG_DEBUG("offscreen buffer: XOpenDisplay");
-  dpy_ = XOpenDisplay(getenv("DISPLAY"));
+  dpy_ = get_dpy();
   if(dpy_==NULL) {
     LOG_ERROR("error creating offscreen rendering context: XOpenDisplay failed");
     return;
@@ -84,7 +94,6 @@ OffscreenBuffer::OffscreenBuffer(unsigned int width, unsigned int height, const
       search_multisample=false;
     } else {
       LOG_ERROR("error creating offscreen rendering context: glXChooseFBConfig failed");
-      XCloseDisplay(dpy_);
       return;
     }
   }
@@ -129,7 +138,6 @@ OffscreenBuffer::OffscreenBuffer(unsigned int width, unsigned int height, const
   if(!pbuffer_) {
     LOG_ERROR("error creating offscreen rendering context: glXCreatePBuffer failed");
     XFree(fbconfig_);
-    XCloseDisplay(dpy_);
     return;
   }
 
@@ -148,7 +156,6 @@ OffscreenBuffer::OffscreenBuffer(unsigned int width, unsigned int height, const
     LOG_ERROR("error creating offscreen rendering context: glXCreateNewContext failed");
     glXDestroyPbuffer(dpy_, pbuffer_);
     XFree(fbconfig_);
-    XCloseDisplay(dpy_);
     return;
   }
 
@@ -163,9 +170,7 @@ OffscreenBuffer::~OffscreenBuffer()
     LOG_DEBUG("offscreen buffer: glXDestroyPbuffer()");
     glXDestroyPbuffer(dpy_, pbuffer_);
     LOG_DEBUG("offscreen buffer: XFree(fbconfig_list)");
-    XFree(fbconfig_);
-    LOG_DEBUG("offscreen buffer: XCloseDisplay()");
-    XCloseDisplay(dpy_);
+    //XFree(fbconfig_);
   }
 }
 
diff --git a/modules/gfx/src/scene.cc b/modules/gfx/src/scene.cc
index 724482a79e1d6e0df4e9333abbc1441f93570020..f61b0ed1edd96d165615ac7a7e25b7f8435ef75f 100644
--- a/modules/gfx/src/scene.cc
+++ b/modules/gfx/src/scene.cc
@@ -1584,6 +1584,10 @@ uint Scene::GetSelectionMode() const
   return selection_mode_;
 }
 
+bool Scene::StartOffscreenMode(unsigned int width, unsigned int height) {
+  return StartOffscreenMode(width,height,2);
+}
+
 bool Scene::StartOffscreenMode(unsigned int width, unsigned int height, int max_samples)
 {
   LOG_DEBUG("Scene: starting offscreen rendering mode " << width << "x" << height);
diff --git a/modules/gfx/src/scene.hh b/modules/gfx/src/scene.hh
index 477b160ca58b0b97c266f4fa25b132921ecdc5e2..972d2587c70c687a5bf223d82005a3db88f15719 100644
--- a/modules/gfx/src/scene.hh
+++ b/modules/gfx/src/scene.hh
@@ -479,6 +479,8 @@ class DLLEXPORT_OST_GFX Scene {
 
   */
   bool StartOffscreenMode(unsigned int w, unsigned int h, int max_samples);
+  bool StartOffscreenMode(unsigned int w, unsigned int h);
+
   /// \brief stops offline rendering in interactive mode
   void StopOffscreenMode();