diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings
index 371aee6c799aa16250b46133a026bc8b3bc8a21e..8a7655448780769124d78c186c4ef5945cb61f89 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/.ratings
@@ -1,9 +1,9 @@
 CurvedLinkLayoutedContentAnchorangeController.java 249629c966a1f92fc28294ef62117439799d7315 GREEN
 CurvedLinkLayoutedDiagramAnchorangeController.java de1ab32e11205435cf7a89d2dcc352683ef8b39e GREEN
-EObjectDiagramController.java 45f5b1439f33685523b035d2603e8329b647b62a GREEN
-EObjectEllipticResizableContentControllerBase.java f12e8f5a646a23fe428ed4768bf041c8b885ec81 GREEN
+EObjectDiagramController.java 4b51e73023a8e5dd7f5ae12b495b25f22c1b58bd GREEN
+EObjectEllipticResizableContentControllerBase.java 7021ae2cadf40bdd099964908cc881644ad9ffb3 GREEN
 EObjectModelChangeProvider.java f4b60cebb088a5c81ca92a41614e1a5d40030502 GREEN
-EObjectRectangularResizableContentControllerBase.java cde6c13659611d927691c03ecd2621cff2414b03 GREEN
+EObjectRectangularResizableContentControllerBase.java dbeb8371fdac0838c9a23b9dcff63f81aae1265b GREEN
 KernelServiceBasedModelChangeProviderBase.java 8d1f8ef79ecd383ff74e5a2bbcf24345aabe70af GREEN
 LayoutedContentAnchorageController.java 83f066a151dd2984c4bef64daf8165a0cd53b00f GREEN
 LayoutedCurveLinkBendPointController.java d963a5e227de7bd8ba910c733df2ac7acf4fa1fa GREEN
@@ -12,5 +12,5 @@ LayoutedEllipticResizableContentController.java 00037188773eb65866863ab89331bc98
 LayoutedLineLinkBendPointController.java 8022cc66c4d33d7bf357ceb4c9ca1694f4f2fda8 GREEN
 LayoutedLinkBendPointController.java d3f22ffb43426da62e849074a9d5a64e4d70a7ad GREEN
 LayoutedRectangularResizableContentController.java 341f4a7da0d69360d7026af6d9b3d44dfd7d9bb1 GREEN
-ModelElementFXEditorUIProviderBase.java 6bdd31d033228315e99c973b4986cdabc135ec9f GREEN
+ModelElementFXEditorUIProviderBase.java 1ab1d053029e14510ff97c84821a62ddeaf595e7 GREEN
 NamedCommentedLayoutModelChangeProvider.java 223e82c1b1cba842f6fae115182f5d0c6acb44b0 GREEN
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java
index 45f5b1439f33685523b035d2603e8329b647b62a..4b51e73023a8e5dd7f5ae12b495b25f22c1b58bd 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectDiagramController.java
@@ -85,6 +85,8 @@ public class EObjectDiagramController<T extends EObject> extends DefaultDiagramC
 		IElementCompositionContext edc = createElementCompositionContext(modelParent, x, y, true,
 				getViewer().getFeatures().getCurrentZoomFactor());
 		List<MenuItem> result = createPrototypeMenu(modelParent, edc);
+		// Adds all menu items from the context menu service.
+		result.addAll(IContextMenuService.getInstance().getFXMenuItemsForElement(modelParent, null));
 		// Adds "Display" and "Zoom" menus
 		result.addAll(super.contextMenuContributions(node, diagramLocation));
 		if(modelParent instanceof IHierarchicElement && enableAutoLayout()) {
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectEllipticResizableContentControllerBase.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectEllipticResizableContentControllerBase.java
index f12e8f5a646a23fe428ed4768bf041c8b885ec81..7021ae2cadf40bdd099964908cc881644ad9ffb3 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectEllipticResizableContentControllerBase.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectEllipticResizableContentControllerBase.java
@@ -38,6 +38,7 @@ import org.fortiss.tooling.kernel.extension.data.IElementCompositionContext;
 import org.fortiss.tooling.kernel.model.INamedCommentedElement;
 import org.fortiss.tooling.kernel.service.IElementCompositorService;
 import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
+import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
 import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
 import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
 
@@ -133,7 +134,10 @@ public abstract class EObjectEllipticResizableContentControllerBase<T extends IN
 		EObject modelParent = (EObject)getModel();
 		IElementCompositionContext edc = createElementCompositionContext(modelParent, x, y, false,
 				getViewer().getFeatures().getCurrentZoomFactor());
-		return createPrototypeMenu(modelParent, edc);
+		List<MenuItem> menuItems = createPrototypeMenu(modelParent, edc);
+		menuItems.addAll(
+				IContextMenuService.getInstance().getFXMenuItemsForElement(modelParent, null));
+		return menuItems;
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectRectangularResizableContentControllerBase.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectRectangularResizableContentControllerBase.java
index cde6c13659611d927691c03ecd2621cff2414b03..dbeb8371fdac0838c9a23b9dcff63f81aae1265b 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectRectangularResizableContentControllerBase.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/EObjectRectangularResizableContentControllerBase.java
@@ -44,6 +44,7 @@ import org.fortiss.tooling.kernel.extension.data.IElementCompositionContext;
 import org.fortiss.tooling.kernel.model.INamedCommentedElement;
 import org.fortiss.tooling.kernel.service.IElementCompositorService;
 import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
+import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
 import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
 import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
 
@@ -164,7 +165,10 @@ public abstract class EObjectRectangularResizableContentControllerBase<T extends
 		EObject modelParent = (EObject)getModel();
 		IElementCompositionContext edc = createElementCompositionContext(modelParent, x, y, false,
 				getViewer().getFeatures().getCurrentZoomFactor());
-		return createPrototypeMenu(modelParent, edc);
+		List<MenuItem> menuItems = createPrototypeMenu(modelParent, edc);
+		menuItems.addAll(
+				IContextMenuService.getInstance().getFXMenuItemsForElement(modelParent, null));
+		return menuItems;
 	}
 
 	/** {@inheritDoc} */
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/ModelElementFXEditorUIProviderBase.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/ModelElementFXEditorUIProviderBase.java
index 6bdd31d033228315e99c973b4986cdabc135ec9f..1ab1d053029e14510ff97c84821a62ddeaf595e7 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/ModelElementFXEditorUIProviderBase.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/ModelElementFXEditorUIProviderBase.java
@@ -22,6 +22,7 @@ import org.eclipse.jface.viewers.StructuredSelection;
 import org.fortiss.tooling.base.model.element.IModelElement;
 import org.fortiss.tooling.common.ui.javafx.control.treetableview.DynamicTreeTableUIProviderBase;
 import org.fortiss.tooling.kernel.ui.extension.base.FXEditorBase;
+import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
 import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
 
 import javafx.scene.Node;
@@ -60,6 +61,8 @@ public abstract class ModelElementFXEditorUIProviderBase<T extends IModelElement
 		}
 		ContextMenu contextMenu = new ContextMenu();
 		contextMenu.getItems().addAll(createPrototypeMenu(element, null));
+		contextMenu.getItems()
+				.addAll(IContextMenuService.getInstance().getFXMenuItemsForElement(element, null));
 		return contextMenu;
 	}
 
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings
index ad72377a790650658c2f3dafe4a165f41877507f..3f867cc1ad2785fb30df12d20c67c992a0f6bde7 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/.ratings
@@ -1,6 +1,6 @@
 AbstractNameEditingSupport.java c57336a0e0da18711a1610ca667dfea76728807f GREEN
 ActionUtils.java 322f43d4f92f992daef8ac88eb0f9197c840c89b GREEN
-ContextMenuUtils.java ac3ce102c5b0cf00ed6ef5d91078c91581d169de GREEN
+ContextMenuUtils.java a55ceed42f2eb88ba263a6fbcb394ddb80b1eda0 GREEN
 EllipseLayoutUIUtils.java 0af2cfc038661828b1bb8c51c0a3816d453e8313 GREEN
 FXDNDUtils.java 6ce94e239e68f9e2b3cc0524b072606f4a120076 GREEN
 FontUtils.java a167a05bdaa8da9853705cc5134f30f6d81bc9f2 GREEN
diff --git a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
index ac3ce102c5b0cf00ed6ef5d91078c91581d169de..a55ceed42f2eb88ba263a6fbcb394ddb80b1eda0 100644
--- a/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/utils/ContextMenuUtils.java
@@ -21,9 +21,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.action.ActionContributionItem;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IContributionItem;
 import org.fortiss.tooling.base.dnd.ElementDropContext;
 import org.fortiss.tooling.base.layout.IAutoLayouter;
 import org.fortiss.tooling.base.layout.KielerAutoLayouter;
@@ -36,8 +33,6 @@ import org.fortiss.tooling.kernel.service.ICommandStackService;
 import org.fortiss.tooling.kernel.service.IElementCompositorService;
 import org.fortiss.tooling.kernel.service.IPrototypeService;
 import org.fortiss.tooling.kernel.ui.extension.IModelEditor;
-import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
-import org.fortiss.tooling.kernel.ui.service.IContextMenuService;
 import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
 
 import javafx.scene.control.Menu;
@@ -96,6 +91,7 @@ public final class ContextMenuUtils {
 		if(!newMenu.getItems().isEmpty()) {
 			result.add(newMenu);
 		}
+
 		return result;
 	}
 
@@ -154,36 +150,4 @@ public final class ContextMenuUtils {
 		Point loc = createPoint((int)x, (int)y, "CompositionPoint");
 		return new ElementDropContext(target, loc, isRoot, zoom);
 	}
-
-	/**
-	 * Creates javafx context {@link MenuItem}s for the given 'target' {@link EObject}, using the
-	 * {@link IContextMenuService}.
-	 * 
-	 * @param target
-	 *            The {@link EObject} to create context {@link MenuItem}s.
-	 * @param contextProvider
-	 *            The {@link ContextMenuContextProvider} to provide for the
-	 *            {@link IContextMenuService}.
-	 * @return A {@link List} of {@link MenuItem}s for the given 'target'
-	 */
-	public static List<MenuItem> createContextMenuEntriesFromService(EObject target,
-			ContextMenuContextProvider contextProvider) {
-		List<MenuItem> ret = new ArrayList<MenuItem>();
-
-		List<IContributionItem> contributions = IContextMenuService.getInstance()
-				.getContextMenuContributions(target, contextProvider);
-		for(IContributionItem c : contributions) {
-			if(c instanceof ActionContributionItem) {
-				IAction action = ((ActionContributionItem)c).getAction();
-
-				MenuItem menuItem = new MenuItem(action.getText());
-				menuItem.setOnAction(evt -> {
-					action.run();
-				});
-				ret.add(menuItem);
-			}
-		}
-
-		return ret;
-	}
 }
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings
index 54e34439bd2d91deb8ae767d830deabb7088d647..fdb866d1694b6cdb55edc61c1dc9832229c8fb44 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/.ratings
@@ -6,6 +6,6 @@ DefaultDiagramController.java 3f60229b2e0fe0b6ac40c617858cc5a0685a59eb GREEN
 DelegatingContentAnchorageController.java 1889628a346a2183082ffe213978f9d15a949494 GREEN
 DragControllerBase.java b15ff874304f679fe494d85f57cc8cbe4d0d1d15 GREEN
 DraggingUtils.java 95117e2ea4c36b6c6a31f8088bb95b484e0e6612 GREEN
-LinkControllerBase.java b59796a87ac5d5e054c332d0867d5e3d308d9936 GREEN
+LinkControllerBase.java 0fc15aa254831d741b6819d8b41a92e16e69141d GREEN
 MoveControllerBase.java 38d632e31f5e27d112ecdd4933e3a331378180d0 GREEN
 ResizableContentControllerBase.java 898500d389b035f8138308d496d2d24be501c719 GREEN
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/LinkControllerBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/LinkControllerBase.java
index b59796a87ac5d5e054c332d0867d5e3d308d9936..0fc15aa254831d741b6819d8b41a92e16e69141d 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/LinkControllerBase.java
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/lwfxef/controller/base/LinkControllerBase.java
@@ -138,14 +138,16 @@ public abstract class LinkControllerBase extends MVCBundlePartBase implements IC
 			@Override
 			public Change secondaryClick(MouseEvent event, Node node,
 					DiagramCoordinate locationOnNode) {
+				DiagramViewer viewer = getViewer();
 				if(event.isControlDown()) {
 					// link must be primary selected
-					DiagramViewer viewer = getViewer();
+
 					if(viewer.isPrimarySelected(getMVCBundle())) {
 						// control+right-click deletes the link
 						return () -> deleteLink();
 					}
 				}
+				viewer.showContextMenu(node, locationOnNode, getMVCBundle());
 				return null;
 			}
 		};
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/.ratings
index b76afd02c52eee68b89b4849bf72c4f5910a142e..de54d9f9f3313ce99f1e2b8f6d4c73d05018e281 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/.ratings
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/.ratings
@@ -7,4 +7,4 @@ ITutorialStepUI.java b8aee2b95857484ab6ad9ecd55b5de9f0ea158e5 GREEN
 ITutorialUIProvider.java aa0ff5db4d7ba0953e34edeb99f3e8279567e18f GREEN
 ITutorialUIWhitelistProvider.java d703c1531c6ae7677c2d94cbc95d498dfa4a7e9b GREEN
 ModelEditorNotAvailableBinding.java ba0ea0fe9004cf16579d053d0ddf7eb3f35ed101 GREEN
-RevealMenu.java e1c1a36da89ab3dac6e85c0d99425b4753a3da62 GREEN
+RevealMenu.java 9a6ea3ec03ca9d9e762d7f7beee23d2a43991ea9 GREEN
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/RevealMenu.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/RevealMenu.java
index e1c1a36da89ab3dac6e85c0d99425b4753a3da62..9a6ea3ec03ca9d9e762d7f7beee23d2a43991ea9 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/RevealMenu.java
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/RevealMenu.java
@@ -30,6 +30,7 @@ import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
 import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider;
 import org.fortiss.tooling.kernel.ui.service.IModelEditorBindingService;
 import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
+import org.fortiss.tooling.kernel.ui.service.INavigatorService;
 
 /**
  * Context menu entry to reveal an element in its editor.
@@ -101,7 +102,7 @@ public class RevealMenu implements IContextMenuContributor {
 			ContextMenuContextProvider contextProvider) {
 
 		EObject element = openModelElementRequest(selection);
-		if(element == null) {
+		if(element == null || !INavigatorService.getInstance().isNavigatorView(contextProvider)) {
 			return emptyList();
 		}
 		Object parent = treeNavigatorTreeContentProvider.getParent(selection);
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings
index 473d4378f0755d6597fb8c8a5f1baff1cb642eb7..47adba827d5c28212dc3ce96cf08e5762b4c7a17 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/.ratings
@@ -1,5 +1,5 @@
 ActionService.java e29126b5947c9fd2f1d82bb87001b9d0ead50c3b GREEN
-ContextMenuService.java 16b469599cb8723a433bc97b88dc4a558b25568e GREEN
+ContextMenuService.java 752ecb95721c4ff31583095bdb06b71ef28c4dcf GREEN
 MarkerService.java 0bfe2c67638db4e506ea5dc7680765f2a8d632e1 GREEN
 ModelEditorBindingService.java f304addb514cd2de443997e0b52cef7a3a9897bf GREEN
 ModelElementHandlerService.java 34adeef844bf98c69f1b9a7252f34d0a2b741b54 GREEN
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ContextMenuService.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ContextMenuService.java
index 16b469599cb8723a433bc97b88dc4a558b25568e..752ecb95721c4ff31583095bdb06b71ef28c4dcf 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ContextMenuService.java
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/internal/ContextMenuService.java
@@ -15,20 +15,27 @@
 +--------------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.ui.internal;
 
+import static java.util.Arrays.asList;
 import static java.util.Collections.emptyList;
+import static javafx.embed.swt.SWTFXUtils.toFXImage;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 import org.eclipse.core.runtime.IConfigurationElement;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.fortiss.tooling.kernel.ToolingKernelActivator;
 import org.fortiss.tooling.kernel.introspection.IIntrospectionDetailsItem;
@@ -48,6 +55,11 @@ import org.fortiss.tooling.kernel.utils.ExtensionPointUtils;
 import org.fortiss.tooling.kernel.utils.LoggingUtils;
 import org.osgi.framework.Bundle;
 
+import javafx.scene.control.MenuItem;
+import javafx.scene.control.SeparatorMenuItem;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+
 /**
  * This class implements the {@link IContextMenuService} interface.
  * 
@@ -73,8 +85,13 @@ public class ContextMenuService implements IContextMenuService, IIntrospectiveKe
 	private static final String HANDLER_CLASS_ATTRIBUTE_NAME = "contributor";
 
 	/** Stores the registered context menu contributors. */
-	private final List<IContextMenuContributor> contextMenuContributorList =
-			new ArrayList<IContextMenuContributor>();
+	private final List<IContextMenuContributor> contextMenuContributorList = new ArrayList<>();
+
+	/** An ordered list of all menu sections from top to bottom. */
+	private static final String[] MENU_SECTIONS = {TOP_MOST_MENU_SECTION_ID,
+			BEFORE_GLOBAL_MENU_SECTION_ID, ActionService.GLOBAL_DEFAULT_MENU_SECTION_ID,
+			AFTER_GLOBAL_MENU_SECTION_ID, REPOSITORY_MENU_SECTION_ID,
+			IWorkbenchActionConstants.MB_ADDITIONS, BOTTOM_MOST_MENU_SECTION_ID};
 
 	/** Initializes the service. */
 	public void initializeService() {
@@ -149,25 +166,20 @@ public class ContextMenuService implements IContextMenuService, IIntrospectiveKe
 			if(!menu.isEmpty()) {
 				return;
 			}
-			addVisibleSectionSeparator(menu, TOP_MOST_MENU_SECTION_ID);
-			addVisibleSectionSeparator(menu, BEFORE_GLOBAL_MENU_SECTION_ID);
-			addVisibleSectionSeparator(menu, ActionService.GLOBAL_DEFAULT_MENU_SECTION_ID);
-			addVisibleSectionSeparator(menu, AFTER_GLOBAL_MENU_SECTION_ID);
-			addVisibleSectionSeparator(menu, REPOSITORY_MENU_SECTION_ID);
-			addVisibleSectionSeparator(menu, IWorkbenchActionConstants.MB_ADDITIONS);
-			addVisibleSectionSeparator(menu, BOTTOM_MOST_MENU_SECTION_ID);
+			for(String section : MENU_SECTIONS) {
+				addVisibleSectionSeparator(menu, section);
+			}
 
 			addContributions(menu, contextProvider);
 
+			IActionService as = IActionService.getInstance();
 			if(!ITutorialService.getInstance().isTutorialActive()) {
-				IActionService.getInstance().addGlobalDefaultActionSectionToMenu(menu);
+				as.addGlobalDefaultActionSectionToMenu(menu);
 			} else {
-
-				IActionService.getInstance().addGlobalEditingActionsToMenu(menu,
-						ITutorialUIService.getInstance().globalCopyPasteActionsVisible(),
-						ITutorialUIService.getInstance().globalDeleteActionVisible(),
-						ITutorialUIService.getInstance().globalRenameActionVisible(),
-						ITutorialUIService.getInstance().globalSelectAllActionVisible());
+				ITutorialUIService tsUI = ITutorialUIService.getInstance();
+				as.addGlobalEditingActionsToMenu(menu, tsUI.globalCopyPasteActionsVisible(),
+						tsUI.globalDeleteActionVisible(), tsUI.globalRenameActionVisible(),
+						tsUI.globalSelectAllActionVisible());
 			}
 		}
 	}
@@ -175,90 +187,145 @@ public class ContextMenuService implements IContextMenuService, IIntrospectiveKe
 	/** Adds registered contributions to the given menu. */
 	private void addContributions(IMenuManager menu, ContextMenuContextProvider contextProvider) {
 		List<EObject> selection = contextProvider.getSelectedModelElementList();
-		if(selection == null) {
-			// do nothing
-		} else if(selection.size() == 1) {
-			singleSelectionElementContributions(menu, contextProvider);
-		} else if(selection.size() > 1) {
-			addMultiSelectionContributions(menu, contextProvider, selection);
-		}
-	}
 
-	/** Populates the menu with contributions to a single model element selection. */
-	private void singleSelectionElementContributions(IMenuManager menu,
-			ContextMenuContextProvider contextProvider) {
-		EObject selectionElem = contextProvider.getSelectedModelElement();
-		for(IContextMenuContributor contributor : contextMenuContributorList) {
-			if(!INavigatorService.getInstance().isExpertViewActive() &&
-					contributor.hiddenInNonExpertView()) {
+		Map<String, List<IContributionItem>> contributions =
+				getContributionsForElements(selection, contextProvider);
+
+		for(String menuSectionID : contributions.keySet()) {
+			List<IContributionItem> items = contributions.get(menuSectionID);
+			if(items == null) {
 				continue;
 			}
 
-			String menuSectionID = contributor.getMenuSectionID();
-			if(menuSectionID == null) {
-				menuSectionID = IWorkbenchActionConstants.MB_ADDITIONS;
+			// populate menu
+			for(IContributionItem item : items) {
+				menu.appendToGroup(menuSectionID, item);
 			}
+		}
+	}
 
-			// get contributions from contributor
-			List<IContributionItem> items =
-					contributor.getContributedItems(selectionElem, contextProvider);
-			if(items == null) {
+	/** {@inheritDoc} */
+	@Override
+	public List<MenuItem> getFXMenuItemsForElements(List<EObject> elements,
+			ContextMenuContextProvider contextProvider) {
+		List<MenuItem> ret = new ArrayList<MenuItem>();
+
+		Map<String, List<IContributionItem>> contributions =
+				getContributionsForElements(elements, contextProvider);
+
+		// Create menu items for all sections
+		for(String menuID : MENU_SECTIONS) {
+			List<IContributionItem> menuItems = contributions.get(menuID);
+			if(menuItems == null) {
 				continue;
 			}
 
-			// active tutorial may filter contributions
-			if(ITutorialService.getInstance().isTutorialActive()) {
-				ITutorialUIService service = ITutorialUIService.getInstance();
-				Predicate<? super IContributionItem> isVisible =
-						i -> service.contextMenuContributionVisible(selectionElem, i);
-				items = items.stream().filter(isVisible).collect(Collectors.toList());
-			}
-			if(items == null) {
-				continue;
+			for(IContributionItem c : menuItems) {
+				if(c instanceof ActionContributionItem) {
+					IAction action = ((ActionContributionItem)c).getAction();
+
+					// Create a wrapper MenuItem for the jface Action
+					MenuItem menuItem = new MenuItem(action.getText());
+					menuItem.setOnAction(evt -> {
+						action.run();
+					});
+
+					// Add Icon
+					ImageDescriptor imageDescriptor = action.getImageDescriptor();
+					if(imageDescriptor != null) {
+						Image fxImage =
+								toFXImage(imageDescriptor.createImage().getImageData(), null);
+						ImageView icon = new ImageView(fxImage);
+
+						menuItem.setGraphic(icon);
+					}
+
+					ret.add(menuItem);
+				}
 			}
 
-			// populate menu
-			for(IContributionItem item : items) {
-				menu.appendToGroup(menuSectionID, item);
+			// Add a separator after non-empty sections.
+			if(menuItems.size() > 0) {
+				ret.add(new SeparatorMenuItem());
 			}
 		}
+
+		// If the last menu item is a separator, it can be removed.
+		int retLastIndex = ret.size() - 1;
+		if(retLastIndex > 0 && ret.get(retLastIndex) instanceof SeparatorMenuItem) {
+			ret.remove(retLastIndex);
+		}
+
+		return ret;
 	}
 
-	/** Populates the menu with contributions to multiple model element selection. */
-	private void addMultiSelectionContributions(IMenuManager menu,
-			ContextMenuContextProvider contextProvider, List<EObject> selection) {
+	/** {@inheritDoc} */
+	@Override
+	public List<MenuItem> getFXMenuItemsForElement(EObject element,
+			ContextMenuContextProvider contextProvider) {
+		return getFXMenuItemsForElements(asList(element), contextProvider);
+	}
+
+	/**
+	 * Retrieves a map from menu section ids to a list {@link IContributionItem}s for the given
+	 * selectedElements.
+	 */
+	private Map<String, List<IContributionItem>> getContributionsForElements(
+			List<EObject> selectedElements, ContextMenuContextProvider contextProvider) {
+		Map<String, List<IContributionItem>> ret = new HashMap<String, List<IContributionItem>>();
+
 		for(IContextMenuContributor contributor : contextMenuContributorList) {
-			if(contributor instanceof IContextMenuMultiSelectionContributor) {
-				if(!INavigatorService.getInstance().isExpertViewActive() &&
-						contributor.hiddenInNonExpertView()) {
+			if(!INavigatorService.getInstance().isExpertViewActive() &&
+					contributor.hiddenInNonExpertView()) {
+				continue;
+			}
+
+			// get contributions from contributor
+			List<IContributionItem> items = null;
+			boolean isTutorialActive = ITutorialService.getInstance().isTutorialActive();
+			if(selectedElements.size() == 1) {
+				// Size checked.
+				EObject selectedElement = selectedElements.get(0);
+				items = contributor.getContributedItems(selectedElement, contextProvider);
+
+				// active tutorial may filter contributions
+				if(isTutorialActive) {
+					ITutorialUIService service = ITutorialUIService.getInstance();
+					Predicate<? super IContributionItem> isVisible =
+							i -> service.contextMenuContributionVisible(selectedElement, i);
+					items = items.stream().filter(isVisible).collect(Collectors.toList());
+				}
+			} else if(selectedElements.size() > 1 &&
+					contributor instanceof IContextMenuMultiSelectionContributor) {
+				// active tutorial does not support multiple selections
+				if(isTutorialActive) {
 					continue;
 				}
 
-				IContextMenuMultiSelectionContributor multicontributor =
+				IContextMenuMultiSelectionContributor multiContributor =
 						(IContextMenuMultiSelectionContributor)contributor;
-				String menuSectionID = contributor.getMenuSectionID();
-				if(menuSectionID == null) {
-					menuSectionID = IWorkbenchActionConstants.MB_ADDITIONS;
-				}
+				items = multiContributor.getContributedItems(selectedElements, contextProvider);
+			}
 
-				// get contributions from contributor
-				List<IContributionItem> items =
-						multicontributor.getContributedItems(selection, contextProvider);
-				if(items == null) {
-					continue;
-				}
+			if(items == null) {
+				continue;
+			}
 
-				// active tutorial does not support multiple selections
-				if(ITutorialService.getInstance().isTutorialActive()) {
-					continue;
-				}
+			String menuSectionID = contributor.getMenuSectionID();
+			if(menuSectionID == null) {
+				menuSectionID = IWorkbenchActionConstants.MB_ADDITIONS;
+			}
 
-				// populate menu
-				for(IContributionItem item : items) {
-					menu.appendToGroup(menuSectionID, item);
-				}
+			List<IContributionItem> sectionItems = ret.get(menuSectionID);
+			if(sectionItems == null) {
+				sectionItems = new ArrayList<IContributionItem>();
+				ret.put(menuSectionID, sectionItems);
 			}
+
+			sectionItems.addAll(items);
 		}
+
+		return ret;
 	}
 
 	/** Adds a visible section separator. */
@@ -291,22 +358,4 @@ public class ContextMenuService implements IContextMenuService, IIntrospectiveKe
 	public IIntrospectionDetailsItem getDetailsItem() {
 		return new ContextMenuKISSDetailsItem(contextMenuContributorList);
 	}
-
-	/** {@inheritDoc} */
-	@Override
-	public List<IContributionItem> getContextMenuContributions(EObject element,
-			ContextMenuContextProvider contextProvider) {
-		List<IContributionItem> ret = new ArrayList<IContributionItem>();
-
-		// Iterate all ContextMenuContributors to collect menu items.
-		for(IContextMenuContributor contributor : contextMenuContributorList) {
-			List<IContributionItem> contributions =
-					contributor.getContributedItems(element, contextProvider);
-			if(contributions != null) {
-				ret.addAll(contributions);
-			}
-		}
-
-		return ret;
-	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/.ratings
index 7b0c011d7d961e617bd33493159f8f7038cfa48a..d8e3a77f855d815aff3fcccb73ed5abc1745b7a2 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/.ratings
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/.ratings
@@ -1,5 +1,5 @@
 IActionService.java 22eafafc8708cbff7f855f7b1b9bef042c127f25 GREEN
-IContextMenuService.java b28f2b7e7375901a88b420654317c61d3d58d02c GREEN
+IContextMenuService.java 10fdd339b5e902c99578caa98d631f2d551a6e29 GREEN
 IMarkerService.java 82486a5656cd907926fcdf1ca1ab801290f8514c GREEN
 IModelEditorBindingService.java ce2ae1957e2232bb0fac1d1d262103f9adfc5266 GREEN
 IModelElementHandlerService.java 23353de6b85af0e9d44a1c926174fa4ed5152af0 GREEN
diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/IContextMenuService.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/IContextMenuService.java
index b28f2b7e7375901a88b420654317c61d3d58d02c..10fdd339b5e902c99578caa98d631f2d551a6e29 100644
--- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/IContextMenuService.java
+++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/service/IContextMenuService.java
@@ -18,7 +18,6 @@ package org.fortiss.tooling.kernel.ui.service;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.action.IContributionItem;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.ui.IWorkbenchActionConstants;
 import org.fortiss.tooling.kernel.ui.extension.IContextMenuContributor;
@@ -26,6 +25,8 @@ import org.fortiss.tooling.kernel.ui.extension.data.ContextMenuContextProvider;
 import org.fortiss.tooling.kernel.ui.internal.ActionService;
 import org.fortiss.tooling.kernel.ui.internal.ContextMenuService;
 
+import javafx.scene.control.MenuItem;
+
 /**
  * The context menu service allows registration for model element specific
  * context menus. The context menu consists of a stack of separated sections
@@ -80,17 +81,26 @@ public interface IContextMenuService {
 	void registerContextMenuContributor(IContextMenuContributor contributor);
 
 	/**
-	 * Retrieves all context menu {@link IContributionItem}s for the given 'element' and the given
-	 * 'ContextProvider'.
+	 * Retrieves JavaFX {@link MenuItem}s for the given elements.
+	 * 
+	 * @param elements
+	 *            A {@link List} of {@link EObject}s to get context menu entries for.
+	 * @param contextProvider
+	 *            The {@link ContextMenuContextProvider} to be used.
+	 * @return A {@link List} of {@link MenuItem}s.
+	 */
+	public List<MenuItem> getFXMenuItemsForElements(List<EObject> elements,
+			ContextMenuContextProvider contextProvider);
+
+	/**
+	 * Retrieves JavaFX {@link MenuItem}s for the given element.
 	 * 
 	 * @param element
-	 *            The {@link EObject} to get the menu contributions for.
+	 *            An {@link EObject}s to get context menu entries for.
 	 * @param contextProvider
-	 *            The {@link ContextMenuContextProvider} to adhere when getting the context menu
-	 *            contibutions.
-	 * @return A {@link List} if {@link IContributionItem} for the given 'element' and the given
-	 *         'contentProvider'.
+	 *            The {@link ContextMenuContextProvider} to be used.
+	 * @return A {@link List} of {@link MenuItem}s.
 	 */
-	public List<IContributionItem> getContextMenuContributions(EObject element,
+	public List<MenuItem> getFXMenuItemsForElement(EObject element,
 			ContextMenuContextProvider contextProvider);
 }