diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java
index d64f8f9..99c9a95 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java
@@ -17,14 +17,14 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.view.outline.IScoutExplorerPart;
 import org.eclipse.scout.sdk.ui.view.outline.pages.IPage;
 import org.eclipse.scout.sdk.util.type.TypeUtility;
 import org.eclipse.scout.sdk.workspace.IScoutBundle;
 import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.handlers.HandlerUtil;
 
 public abstract class AbstractScoutHandler extends AbstractHandler implements IScoutHandler {
   private String m_label;
@@ -137,21 +137,23 @@
   @SuppressWarnings("unchecked")
   @Override
   public final Object execute(ExecutionEvent event) throws ExecutionException {
-    ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection();
-    if (selection instanceof IStructuredSelection) {
-      Shell shell = HandlerUtil.getActiveShell(event);
-      IStructuredSelection strucSelection = (IStructuredSelection) selection;
+    IScoutExplorerPart explorer = ScoutSdkUi.getExplorer(false);
+    if (explorer != null) {
+      IStructuredSelection selection = explorer.getSelection();
+      if (selection != null && explorer.getSite() != null) {
+        Shell shell = explorer.getSite().getShell();
 
-      IPage[] selectedPages = new IPage[strucSelection.size()];
+        IPage[] selectedPages = new IPage[selection.size()];
 
-      // iterator can only contain IPage's. this is ensured by the MenuVisibilityTester class
-      Iterator<IPage> it = strucSelection.iterator();
-      int index = 0;
-      while (it.hasNext()) {
-        selectedPages[index++] = it.next();
+        // iterator can only contain IPage's. this is ensured by the MenuVisibilityTester class
+        Iterator<IPage> it = selection.iterator();
+        int index = 0;
+        while (it.hasNext()) {
+          selectedPages[index++] = it.next();
+        }
+
+        return execute(shell, selectedPages, event);
       }
-
-      return execute(shell, selectedPages, event);
     }
     return null;
   }
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java
index 49648b8..11e0e5a 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java
@@ -91,6 +91,8 @@
             IScoutHandler currentMenu = ScoutMenuContributionItemFactory.getMenuInstance(currentMenuClass);
             if (currentMenu == null) return false; // no instance could be created -> do not show the menu
 
+            cmd.setHandler(currentMenu);
+
             // check for multi select
             if (!currentMenu.isMultiSelectSupported() && selectedNodes.length > 1) return false;
 
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java
index 7f32a00..1ec76db 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java
@@ -12,13 +12,25 @@
 
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.scout.sdk.ui.view.outline.pages.IPage;
+import org.eclipse.ui.IWorkbenchPartSite;
 
 /**
- * <h3>IScoutExplorerPart</h3> ...
+ * <h3>IScoutExplorerPart</h3>
  */
 public interface IScoutExplorerPart {
 
   /**
+   * Returns the site for this workbench part. The site can be <code>null</code> while the workbench part is being
+   * initialized. After
+   * the initialization is complete, this value must be non-<code>null</code> for the remainder of the part's life
+   * cycle.
+   * 
+   * @return The part site; this value may be <code>null</code> if the part
+   *         has not yet been initialized
+   */
+  IWorkbenchPartSite getSite();
+
+  /**
    * gets the current selection of the scout explorer tree.
    * 
    * @return The structured selection of the tree.
