diff --git a/modules/gui/pymod/export_gosty.cc b/modules/gui/pymod/export_gosty.cc
index 0dc3d1889a5cbd83e4d21b31c2383b4cc82fb9d6..170afd97239f1aa6ab64b816f539ef51a59aa636 100644
--- a/modules/gui/pymod/export_gosty.cc
+++ b/modules/gui/pymod/export_gosty.cc
@@ -25,6 +25,7 @@ using namespace boost::python;
 
 #include <ost/gui/gl_win.hh>
 #include <ost/gui/perspective.hh>
+#include <ost/gui/scene_win/scene_win.hh>
 #include <ost/gui/tools/tool_options_win.hh>
 #include <ost/gui/python_shell/python_shell.hh>
 
@@ -32,7 +33,6 @@ using namespace boost::python;
 #include "sip_handler.hh"
 
 #include "tool_options_win_proxy.hh"
-#include "scene_win_proxy.hh"
 #include "sequence_viewer_proxy.hh"
 #if OST_IMG_ENABLED
 #include "data_viewer_proxy.hh"
@@ -49,11 +49,6 @@ ToolOptionsWinProxy app_get_tool_options_win(GostyApp* app)
   return ToolOptionsWinProxy(app->GetToolOptionsWin());
 }
 
-SceneWinProxy app_get_scene_win(GostyApp* app)
-{
-  return SceneWinProxy(app->GetSceneWin());
-}
-
 SequenceViewerProxy app_get_seq_viewer(GostyApp* app)
 {
   return SequenceViewerProxy(app->GetSequenceViewer());
@@ -103,8 +98,10 @@ void export_Gosty()
         return_value_policy<reference_existing_object>())
     .add_property("gl_win", make_function(&GostyApp::GetGLWin,
         return_value_policy<reference_existing_object>()))
-    .def("GetSceneWin", &app_get_scene_win)
-    .add_property("scene_win", &app_get_scene_win)                                
+    .def("GetSceneWin", &GostyApp::GetSceneWin,
+        return_value_policy<reference_existing_object>())
+    .add_property("scene_win", make_function(&GostyApp::GetSceneWin,
+        return_value_policy<reference_existing_object>()))
     .def("GetSequenceViewer", &app_get_seq_viewer)
     .add_property("seq_viewer", &app_get_seq_viewer)
     .def("GetToolOptionsWin", &app_get_tool_options_win)
diff --git a/modules/gui/pymod/export_scene_win.cc b/modules/gui/pymod/export_scene_win.cc
index 1ded4aea89ebdefd026b6a71db7cf15e540ce4b3..766a676f4db85cfe1afa954264eb7cd87ac86e66 100644
--- a/modules/gui/pymod/export_scene_win.cc
+++ b/modules/gui/pymod/export_scene_win.cc
@@ -22,6 +22,8 @@
 
 #include "scene_win_proxy.hh"
 
+#include "sip_handler.hh"
+
 #include <ost/gui/scene_win/context_menu.hh>
 
 using namespace boost::python;
@@ -32,32 +34,13 @@ namespace {
 
 void context_menu_add_action(ContextMenu* cm, object action, int types)
 {
-  static object sip_module=import("sip");
-  static object gui_module=import("ost.gui");
-  static object pyqt4_module=import("PyQt4.QtCore");
-
-  unsigned long addr = extract<unsigned long>(sip_module.attr("unwrapinstance")(action));
-  QAction* act = reinterpret_cast<QAction*>(addr);
+  QAction* act = get_cpp_qobject<QAction>(action);
   if(act){
     ContextActionTypes type = ContextActionTypes(types);
     cm->AddAction(act,type);
   }
 }
 
-object context_menu_get_qobject(ContextMenu* cm)
-{
-  static object sip_module=import("sip");
-  static object pyqt4_module=import("PyQt4.QtCore");
-  size_t addr = reinterpret_cast<size_t>(cm);
-  object obj(addr);
-  object sip_handle=obj;
-  object qobject = pyqt4_module.attr("QObject");
-  object object = sip_module.attr("wrapinstance")(sip_handle, qobject);
-
-  return object;
-}
-
-
 }
 
 void export_SceneWin()
@@ -80,14 +63,16 @@ void export_SceneWin()
 
   class_<ContextMenu, boost::noncopyable>("ContextMenu", no_init)
     .def("AddAction", &context_menu_add_action)
-    .def("GetQObject", &context_menu_get_qobject)
-    .add_property("qobject",&context_menu_get_qobject)
+    .def("GetQObject",&get_py_qobject<ContextMenu>)
+    .add_property("qobject", &get_py_qobject<ContextMenu>)
   ;
 
-  class_<SceneWinProxy, bases<SipHandlerBase> >("SceneWin")
-    .def("Show", &SceneWinProxy::Show)
-    .def("Hide", &SceneWinProxy::Hide)
-    .def("GetContextMenu", &SceneWinProxy::GetContextMenu, return_value_policy<reference_existing_object>())
+  class_<SceneWin, boost::noncopyable>("SceneWin", no_init)
+    .def("Show", &SceneWin::show)
+    .def("Hide", &SceneWin::hide)
+    .def("GetContextMenu", &SceneWin::GetContextMenu, return_value_policy<reference_existing_object>())
+    .def("GetQObject",&get_py_qobject<SceneWin>)
+    .add_property("qobject", &get_py_qobject<SceneWin>)
   ;
 
 }
diff --git a/modules/gui/pymod/init_context_menu.py b/modules/gui/pymod/init_context_menu.py
index 43f2231018e7d5324b593aa2f4e1cd71a3831404..e2d68d1ce3fa7cf7584dafdf688647c31ef2538d 100644
--- a/modules/gui/pymod/init_context_menu.py
+++ b/modules/gui/pymod/init_context_menu.py
@@ -147,6 +147,6 @@ class AlignmentContextMenu(QtCore.QObject):
       ShowResultDialog(ent_list, res_list).exec_()
       
     
-def _InitContextMenu():
-  cm=gui.GostyApp.Instance().GetSceneWin().GetContextMenu()
+def _InitContextMenu(app):
+  cm=app.scene_win.GetContextMenu()
   AlignmentContextMenu(cm)
\ No newline at end of file
diff --git a/modules/gui/pymod/init_menubar.py b/modules/gui/pymod/init_menubar.py
index 6c253aa3e453f17bbaf0d62b4216bd39112dfadb..360b02b1b692ead1983d5962ae4aac83328b6dcc 100644
--- a/modules/gui/pymod/init_menubar.py
+++ b/modules/gui/pymod/init_menubar.py
@@ -77,8 +77,8 @@ class InitMenuBar(QtCore.QObject):
   def OpenDocs(self):
     QtGui.QDesktopServices.openUrl(QtCore.QUrl("http://www.openstructure.org/docs/index.html"))
     
-def _InitMenuBar(menu_bar):
-  InitMenuBar(menu_bar)
+def _InitMenuBar(app):
+  InitMenuBar(app.perspective.menubar)
   
 ## \example menubar_example.py
 #
diff --git a/modules/gui/pymod/init_spacenav.py b/modules/gui/pymod/init_spacenav.py
index 5ca0f30835508dedbedad77c9b2e482937abf255..df8bf383b3efa580d385196d57a6a515a38fe2a5 100644
--- a/modules/gui/pymod/init_spacenav.py
+++ b/modules/gui/pymod/init_spacenav.py
@@ -33,10 +33,11 @@ class SpacenavControl(QtCore.QObject):
       self.rot = not self.rot
       print "Rotation Enabled:",self.rot
       
-def _InitSpaceNav(parent):
+def _InitSpaceNav(app):
   try:
     spnav = gui.SpnavInput.GetQThread()
     spnav.start()
+    parent = app.gl_win.qobject
     SpacenavControl(spnav,parent)
   except AttributeError:
     pass
\ No newline at end of file
diff --git a/modules/gui/pymod/scene/init_inspector.py b/modules/gui/pymod/scene/init_inspector.py
index 74801269192122bb16a95e6758725d4c056345d1..3009a57ca9031e450b99c1095b92f1b60cc59866 100644
--- a/modules/gui/pymod/scene/init_inspector.py
+++ b/modules/gui/pymod/scene/init_inspector.py
@@ -41,8 +41,7 @@ class InitInspectorMenu(QtCore.QObject):
   def Toggle(self):
     self.inspector_.setVisible(self.show_.isChecked())
     
-def _InitInspector():
-  app=gui.GostyApp.Instance()
+def _InitInspector(app):
   mywidget = InspectorDialog(app.gl_win.qobject)
   mywidget.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.Tool)
   mywidget.show()
diff --git a/modules/gui/pymod/scene/inspector_widget.py b/modules/gui/pymod/scene/inspector_widget.py
index b23f0bb7f0f5e0393855393eb180b548ae2906ae..68215c66169164a1b4fa5a4cd384fe1bb9edb025 100644
--- a/modules/gui/pymod/scene/inspector_widget.py
+++ b/modules/gui/pymod/scene/inspector_widget.py
@@ -47,10 +47,8 @@ class InspectorWidget(ToolBarOptionsWidget):
     self.obs = SceneObserverImpl()
     self.obs.AttachObserver(self)
     ost.scene.AttachObserver(self.obs)    
-    app=gui.GostyApp.Instance()
     self.scene_selection_ = gui.SceneSelection.Instance()
-    scenewin = sip.wrapinstance(app.GetSceneWin().GetSipHandle(),QtGui.QWidget)
-    QtCore.QObject.connect(scenewin,QtCore.SIGNAL("ActiveNodesChanged()"),
+    QtCore.QObject.connect(app.scene_win.qobject,QtCore.SIGNAL("ActiveNodesChanged()"),
                            self.ActiveNodesChanged)     
     
     self.setMinimumSize(250,215)
diff --git a/scripts/init.py b/scripts/init.py
index 1fcf39cb82137ee91e176d3ce6c8a73a1cee6c3d..e892e1838d1eed87919b40e36a3783c3c92443ec 100644
--- a/scripts/init.py
+++ b/scripts/init.py
@@ -29,7 +29,8 @@ def _InitRuleBasedBuilder():
 # switch to rule-based builder for high fidelity if compounds.chemlib is 
 # available
 _InitRuleBasedBuilder()
-def _InitPanels(app, panels):
+def _InitPanels(app):
+  panels = app.perspective.panels
   panels.AddWidgetToPool('ost.gui.FileBrowser', -1)
   panels.AddWidgetToPool('ost.gui.PythonShell', 1)
   panels.AddWidgetToPool('ost.gui.RemoteLoader', -1)
@@ -48,17 +49,17 @@ def _InitFrontEnd():
   app=gui.GostyApp.Instance()
   app.SetAppTitle("DNG")
   main_area=app.perspective.main_area
-  _InitPanels(app, app.perspective.panels)
-  _InitMenuBar(app.perspective.menubar)
-  _InitSpaceNav(app.perspective.panels.qobject)
-  _InitContextMenu()
+  _InitPanels(app)
+  _InitMenuBar(app)
+  _InitSpaceNav(app)
+  _InitContextMenu(app)
   main_area.AddPersistentWidget("3D Scene", "gl_win" , app.gl_win.qobject, int(QtCore.Qt.WindowMaximized))
   app.perspective.Restore()
   additional_modules=getattr(__main__, 'ADDITIONAL_GUI_MODULES', [])
   for module_name in additional_modules:
     __import__(module_name)
   app.ProcessEvents()
-  _InitInspector()
+  _InitInspector(app)
 
 def _load_files():
   for pdb_id in options.pdb_ids: