diff --git a/modules/gui/pymod/CMakeLists.txt b/modules/gui/pymod/CMakeLists.txt
index 986a401304d365177c0cf4aebd59c833bf7caa65..d47435b61c29e2728be44b670a1bc839f3b0432e 100644
--- a/modules/gui/pymod/CMakeLists.txt
+++ b/modules/gui/pymod/CMakeLists.txt
@@ -74,6 +74,7 @@ endif()
 
 set(OST_GUI_PYMOD_MODULES
   __init__.py
+  init_context_menu.py
   init_menubar.py
   init_spacenav.py
 )
diff --git a/modules/gui/pymod/export_scene_win.cc b/modules/gui/pymod/export_scene_win.cc
index 1f32c836b226ba3801da183d6bd4cba726c413f5..f9d344bf5fc51cce35df1734e8337f83975f4ddc 100644
--- a/modules/gui/pymod/export_scene_win.cc
+++ b/modules/gui/pymod/export_scene_win.cc
@@ -16,20 +16,78 @@
 // along with this library; if not, write to the Free Software Foundation, Inc.,
 // 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 //------------------------------------------------------------------------------
+#include <QAction>
+
 #include <boost/python.hpp>
 
 #include "scene_win_proxy.hh"
 
+#include <ost/gui/scene_win/context_menu.hh>
+
 using namespace boost::python;
 using namespace ost;
 using namespace ost::gui;
 
+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);
+  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()
 {
+  enum_<ContextActionType>("ContextActionType")
+      .value("GFX_OBJECT", GFX_OBJECT)
+      .value("ENTITY", ENTITY)
+      .value("ENTITY_VIEW", ENTITY_VIEW)
+      .value("CUSTOM_VIEW", CUSTOM_VIEW)
+      .value("NOT_VISIBLE", NOT_VISIBLE)
+      .value("NOT_HIDDEN", NOT_HIDDEN)
+      .value("NOT_SCENE", NOT_SCENE)
+      .value("SINGLE", SINGLE)
+#if OST_IMG_ENABLED
+      .value("MAP", MAP)
+#endif
+      .export_values()
+      ;
+
+  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)
+  ;
+
   class_<SceneWinProxy, bases<SipHandlerBase> >("SceneWin")
     .def("Show", &SceneWinProxy::Show)
     .def("Hide", &SceneWinProxy::Hide)
+    .def("GetContextMenu", &SceneWinProxy::GetContextMenu, return_value_policy<reference_existing_object>())
   ;
+
 }
 
diff --git a/modules/gui/pymod/init_context_menu.py b/modules/gui/pymod/init_context_menu.py
new file mode 100644
index 0000000000000000000000000000000000000000..b77fbe1421961bb2dca6c9470b024ddbee5f1705
--- /dev/null
+++ b/modules/gui/pymod/init_context_menu.py
@@ -0,0 +1,37 @@
+from PyQt4 import QtCore, QtGui
+
+from ost import geom, gfx, gui
+from ost import settings
+from ost.bindings import tmtools
+  
+class AlignmentContextMenu(QtCore.QObject):
+  def __init__(self, context_menu):
+    try:
+      settings.Locate('tmalign')
+      QtCore.QObject.__init__(self, context_menu.qobject)
+
+      self.action = QtGui.QAction("Align", self)
+      QtCore.QObject.connect(self.action,QtCore.SIGNAL("triggered()"), self.Align)
+      context_menu.AddAction(self.action, gui.ContextActionType.ENTITY)
+    except FileNotFound:
+      return
+    
+  def Align(self):
+    scene_selection = gui.SceneSelection.Instance()
+    if scene_selection.GetActiveNodeCount() >= 2:
+      node = scene_selection.GetActiveNode(0)
+      if isinstance(node, gfx.Entity):
+        ref = node.view.handle
+        for i in range(1,scene_selection.GetActiveNodeCount()):
+          node = scene_selection.GetActiveNode(i)
+          if isinstance(node, gfx.Entity):
+            print tmtools.TMAlign(node.view.handle, ref)
+            node.UpdatePositions()
+          
+      
+      
+      
+
+def _InitContextMenu():
+  cm=gui.GostyApp.Instance().GetSceneWin().GetContextMenu()
+  AlignmentContextMenu(cm)
\ No newline at end of file
diff --git a/modules/gui/pymod/init_spacenav.py b/modules/gui/pymod/init_spacenav.py
index 870d7aaceb3e87feb41f8793648e63ab9e2cc7ea..5ca0f30835508dedbedad77c9b2e482937abf255 100644
--- a/modules/gui/pymod/init_spacenav.py
+++ b/modules/gui/pymod/init_spacenav.py
@@ -1,9 +1,6 @@
-from PyQt4 import QtCore, QtGui
+from PyQt4 import QtCore
 
-from ost import geom, gfx, gui
-
-import sys, random
-import sip
+from ost import gfx, gui
 
 class SpacenavControl(QtCore.QObject):
   def __init__(self, spnav,
diff --git a/modules/gui/pymod/scene_win_proxy.hh b/modules/gui/pymod/scene_win_proxy.hh
index 5ef13f63da16b0e07869d9af8379ce4ecd8d5511..58c5d5a3f8463ef3f982da121641e9f8a90b6e51 100644
--- a/modules/gui/pymod/scene_win_proxy.hh
+++ b/modules/gui/pymod/scene_win_proxy.hh
@@ -40,6 +40,11 @@ public:
   {
     return Me()->hide();
   }
+
+  ContextMenu* GetContextMenu()
+  {
+    return Me()->GetContextMenu();
+  }
 };
 
 }}
diff --git a/modules/gui/src/scene_win/scene_win.cc b/modules/gui/src/scene_win/scene_win.cc
index fb9045babfade67498a804cf8d8e58dcd2f895c5..213582ff632aa1e697fbd193e528a1caccfbf7b3 100644
--- a/modules/gui/src/scene_win/scene_win.cc
+++ b/modules/gui/src/scene_win/scene_win.cc
@@ -122,6 +122,9 @@ void SceneWin::AddView(gfx::EntityP entity, mol::EntityView view){
 
 }
 
+ContextMenu* SceneWin::GetContextMenu(){
+  return context_menu_;
+}
 
 SceneWin::~SceneWin() {
 }
diff --git a/modules/gui/src/scene_win/scene_win.hh b/modules/gui/src/scene_win/scene_win.hh
index 05706c5b676bc1029b973ad0a3f800bd1c6de1c6..9761bb1f1924d01adafc8862c7b1fb0c7566bf2e 100644
--- a/modules/gui/src/scene_win/scene_win.hh
+++ b/modules/gui/src/scene_win/scene_win.hh
@@ -55,6 +55,8 @@ public:
 
   void AddView(gfx::EntityP entity, mol::EntityView view);
 
+  ContextMenu* GetContextMenu();
+
 public slots:
   void OnSelectionChange(const QItemSelection& sel, const QItemSelection& desel);
 
diff --git a/scripts/init.py b/scripts/init.py
index f3549c69a6898944f6cafdb2f175972594c13e12..2856501fddd9196e19cfe97eaae5d9d148557d83 100644
--- a/scripts/init.py
+++ b/scripts/init.py
@@ -17,6 +17,7 @@ from PyQt4 import QtGui, QtCore
 from ost.gui.scene.init_inspector import _InitInspector
 from ost.gui.init_menubar import _InitMenuBar
 from ost.gui.init_spacenav import _InitSpaceNav
+from ost.gui.init_context_menu import _InitContextMenu
 
 def _InitRuleBasedBuilder():
   compound_lib_path=os.path.join(ost.GetSharedDataPath(), 'compounds.chemlib')
@@ -51,6 +52,7 @@ def _InitFrontEnd():
   _InitPanels(app, app.perspective.panels)
   _InitMenuBar(app.perspective.GetMenuBar())
   _InitSpaceNav(app.perspective.panels.qwidget)
+  _InitContextMenu()
   main_area.AddPersistentWidget("3D Scene", "gl_win" , app.gl_win, int(QtCore.Qt.WindowMaximized))
   app.perspective.Restore()
   additional_modules=getattr(__main__, 'ADDITIONAL_GUI_MODULES', [])