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 33125106f4c061e50d0941a6ae8195d2d1a98822..0ed31f29d67cb44b3d3629d109dbe94cd18e28cd 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,15 +1,16 @@
 ContextMenuUtil.java 405387151d45b09dffb3b6ba44f980313c8edcaf GREEN
 CurvedLinkLayoutedContentAnchorangeController.java 67c20e31ddb82fe2fd499117193353b0545839a0 GREEN
-EObjectDiagramController.java 9af59e8e586c8251d174108a2ce2fcdee5e75782 GREEN
+EObjectDiagramController.java 9af59e8e586c8251d174108a2ce2fcdee5e75782 YELLOW
 EObjectEllipticResizableContentControllerBase.java 3494d4f0dcdff5eb35f22f0e21d04df81b32e494 GREEN
-EObjectModelChangeProvider.java f4b60cebb088a5c81ca92a41614e1a5d40030502 GREEN
-EObjectRectangularResizableContentControllerBase.java f4a967591a60fadb20550ec3eaabccf240c9ec0d GREEN
-KernelServiceBasedModelChangeProviderBase.java 8d1f8ef79ecd383ff74e5a2bbcf24345aabe70af GREEN
-LayoutModelChangeProvider.java b5449d02eaf39086909720c43e21bd061005fc9e GREEN
-LayoutedContentAnchorageController.java 9fc513a7404277514c730f7702d45588f2d81878 GREEN
+EObjectModelChangeProvider.java f4b60cebb088a5c81ca92a41614e1a5d40030502 YELLOW
+EObjectRectangularResizableContentControllerBase.java f4a967591a60fadb20550ec3eaabccf240c9ec0d YELLOW
+KernelServiceBasedModelChangeProviderBase.java 8d1f8ef79ecd383ff74e5a2bbcf24345aabe70af YELLOW
+LayoutModelChangeProvider.java b5449d02eaf39086909720c43e21bd061005fc9e YELLOW
+LayoutedContentAnchorageController.java 73b103c06edcbf1762654e71a3e524f43c0c50c0 YELLOW
 LayoutedCurveLinkBendPointController.java 54d7c294c4afaeadb6787408fbfe2ca1958c2de0 GREEN
-LayoutedDiagramAnchorageController.java 32d7d77daf252d021458c39ebcfe502f26f29a98 GREEN
+LayoutedDiagramAnchorageController.java 32d7d77daf252d021458c39ebcfe502f26f29a98 YELLOW
 LayoutedEllipticResizableContentController.java 93bdeb7ecd5f7386724a9d7df5fff3174ab8ce10 GREEN
 LayoutedLineLinkBendPointController.java f5fac4fe8e4b4c0259407acb6bfc80dbe9c3a1fb GREEN
-LayoutedLinkBendPointController.java 3203d946de233274934dca1bcd47bbdc1d0a3b13 GREEN
-LayoutedRectangularResizableContentController.java 3232d423572924363702898cf8ba240ce7042b65 GREEN
+LayoutedLinkBendPointController.java 6d5de856f513ca82eab805a0ad9cda8194be011d YELLOW
+LayoutedRectangularResizableContentController.java 3232d423572924363702898cf8ba240ce7042b65 YELLOW
+ModelElementFXEditorUIProviderBase.java b81bf7fc945d40f1f842876f07ba70799ab65f6d GREEN
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
new file mode 100644
index 0000000000000000000000000000000000000000..b81bf7fc945d40f1f842876f07ba70799ab65f6d
--- /dev/null
+++ b/org.fortiss.tooling.base.ui/src/org/fortiss/tooling/base/ui/editor/fx/controller/ModelElementFXEditorUIProviderBase.java
@@ -0,0 +1,73 @@
+/*-------------------------------------------------------------------------+
+| Copyright 2020 fortiss GmbH                                              |
+|                                                                          |
+| Licensed under the Apache License, Version 2.0 (the "License");          |
+| you may not use this file except in compliance with the License.         |
+| You may obtain a copy of the License at                                  |
+|                                                                          |
+|    http://www.apache.org/licenses/LICENSE-2.0                            |
+|                                                                          |
+| Unless required by applicable law or agreed to in writing, software      |
+| distributed under the License is distributed on an "AS IS" BASIS,        |
+| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
+| See the License for the specific language governing permissions and      |
+| limitations under the License.                                           |
++--------------------------------------------------------------------------*/
+package org.fortiss.tooling.base.ui.editor.fx.controller;
+
+import static org.fortiss.tooling.base.ui.editor.fx.controller.ContextMenuUtil.createPrototypeMenu;
+
+import org.eclipse.jface.viewers.IStructuredSelection;
+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.IModelElementHandlerService;
+
+import javafx.scene.Node;
+import javafx.scene.control.ContextMenu;
+
+/**
+ * Base implementation for FX UIProvider for ModelElements.
+ * 
+ * @author bayha
+ */
+public abstract class ModelElementFXEditorUIProviderBase<T extends IModelElement>
+		extends DynamicTreeTableUIProviderBase<T> {
+
+	/** The editor used to post selection changes. */
+	protected final FXEditorBase<?> editor;
+
+	/** Constructor. */
+	public ModelElementFXEditorUIProviderBase(FXEditorBase<?> editor) {
+		this.editor = editor;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public Node getIconNode(IModelElement element, int column) {
+		if(element == null) {
+			return null;
+		}
+		return IModelElementHandlerService.getInstance().getFXIcon(element);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public ContextMenu createContextMenu(IModelElement element, int column) {
+		if(element == null || column != 0) {
+			return null;
+		}
+		ContextMenu contextMenu = new ContextMenu();
+		contextMenu.getItems().addAll(createPrototypeMenu(element, null));
+		return contextMenu;
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void select(IModelElement oldValue, IModelElement newValue) {
+		IStructuredSelection selection =
+				newValue == null ? StructuredSelection.EMPTY : new StructuredSelection(newValue);
+		editor.getSite().getSelectionProvider().setSelection(selection);
+	}
+}
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings
index 4850e6d5cc854062f8760986309dc09fbbc41974..b20ef590312b799f4a45fdfe316378b5a6958198 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/.ratings
@@ -1,8 +1,8 @@
 DynamicTreeContentProviderBase.java e801da995a1b6e5a1b757247c1638bafb6073e6d GREEN
 DynamicTreeItem.java 75dc5534b119ffdb3c10a65810c2a0f330b7955e GREEN
 DynamicTreeTableUIProviderBase.java 7bfc1395283d3dc10026aff5e2e65df88d25f3a7 GREEN
-DynamicTreeTableViewer.java 43757359b3071192ae79710bcbc0e9577bb6f62d GREEN
+DynamicTreeTableViewer.java 9e800c69eaea556d38cbbcc086d0f5edfed74b57 GREEN
 DynamicTreeUIProviderBase.java 56fe4df4577b35f1e5e6e4c4be189b706c852d52 GREEN
-DynamicTreeViewer.java da5e24ae57777a482d8e12c8262513d8143bfa93 GREEN
-DynamicTreeViewerBase.java 47124c847de322a0ae26eb7a114f85ce4bd02d7e GREEN
+DynamicTreeViewer.java 73f331c931532c1e3a85ea1464876021ac5a4c6e GREEN
+DynamicTreeViewerBase.java a2013538b62d86f6a09efdf2cd78babac2072484 GREEN
 IDoubleClickHandler.java 447f7769dead9a106b3ea3139ef0da51eb0b9a89 GREEN
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java
index 43757359b3071192ae79710bcbc0e9577bb6f62d..9e800c69eaea556d38cbbcc086d0f5edfed74b57 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeTableViewer.java
@@ -15,6 +15,8 @@
  *******************************************************************************/
 package org.fortiss.tooling.common.ui.javafx.control.treetableview;
 
+import static java.lang.Integer.MAX_VALUE;
+
 import javafx.beans.property.SimpleObjectProperty;
 import javafx.scene.control.SelectionMode;
 import javafx.scene.control.TreeItem;
@@ -43,7 +45,7 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
 	public DynamicTreeTableViewer(TreeTableView<T> view, T root, boolean showRoot, int revealLevel,
 			DynamicTreeContentProviderBase<T> contentProvider,
 			DynamicTreeTableUIProviderBase<T> uiProvider) {
-		super(contentProvider);
+		super(view, contentProvider);
 		this.uiProvider = uiProvider;
 		// construct view
 		this.view = view;
@@ -91,6 +93,16 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
 		}
 	}
 
+	/** Expands all items on all levels. */
+	public void expandAllItems() {
+		TreeItem<T> root = view.getRoot();
+		if(root == null) {
+			return;
+		}
+
+		expandItem(root, MAX_VALUE);
+	}
+
 	/**
 	 * Adds a column to the table part of the view. The labels, context menus and icons are shown as
 	 * defined in the {@link DynamicTreeTableUIProviderBase}.
@@ -126,4 +138,12 @@ public final class DynamicTreeTableViewer<T> extends DynamicTreeViewerBase<T> {
 	public TreeTableView<T> getControl() {
 		return view;
 	}
+
+	/** {@inheritDoc} */
+	@Override
+	protected T getSelectedObject() {
+		T value = view.getSelectionModel().getSelectedItem().getValue();
+
+		return value;
+	}
 }
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java
index da5e24ae57777a482d8e12c8262513d8143bfa93..73f331c931532c1e3a85ea1464876021ac5a4c6e 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewer.java
@@ -16,15 +16,10 @@
 package org.fortiss.tooling.common.ui.javafx.control.treetableview;
 
 import javafx.beans.value.ChangeListener;
-import javafx.event.Event;
-import javafx.event.EventDispatchChain;
-import javafx.event.EventDispatcher;
 import javafx.scene.control.ContextMenu;
 import javafx.scene.control.TreeCell;
 import javafx.scene.control.TreeItem;
 import javafx.scene.control.TreeView;
-import javafx.scene.input.MouseButton;
-import javafx.scene.input.MouseEvent;
 
 /**
  * A JavaFX {@link TreeView} based on a {@link DynamicTreeContentProviderBase} and a
@@ -40,14 +35,12 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
 	private final DynamicTreeUIProviderBase<T> uiProvider;
 	/** The selection change listener. */
 	private ChangeListener<Object> selectionChangeListener = null;
-	/** The double click handler. */
-	private IDoubleClickHandler doubleClickHandler;
 
 	/** Constructor. */
 	public DynamicTreeViewer(TreeView<T> view, T root, boolean showRoot, int revealLevel,
 			DynamicTreeContentProviderBase<T> contentProvider,
 			DynamicTreeUIProviderBase<T> uiProvider) {
-		super(contentProvider);
+		super(view, contentProvider);
 		this.uiProvider = uiProvider;
 		// construct view
 		this.view = view;
@@ -119,11 +112,6 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
 		this.selectionChangeListener = listener;
 	}
 
-	/** Sets the double click handler. */
-	public void setDoubleClickHandler(IDoubleClickHandler handler) {
-		this.doubleClickHandler = handler;
-	}
-
 	/** Configures the cell factory for the viewer. */
 	private void configureCellFactory() {
 		view.setCellFactory(param -> {
@@ -134,8 +122,6 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
 					ContextMenu menu = null;
 					if(!empty && item != null) {
 						menu = uiProvider.createContextMenu(item);
-						EventDispatcher original = this.getEventDispatcher();
-						this.setEventDispatcher(new DoubleClickEventDispatcher(original));
 						this.setText(uiProvider.getLabel(item));
 						this.setGraphic(uiProvider.getIconNode(item));
 					} else {
@@ -179,37 +165,15 @@ public final class DynamicTreeViewer<T> extends DynamicTreeViewerBase<T> {
 		return uiProvider;
 	}
 
-	/**
-	 * Customized event dispatcher to fix double-click behavior. This prevents opening/closing of
-	 * tree items with double click listeners assigned.
-	 */
-	private class DoubleClickEventDispatcher implements EventDispatcher {
-		/** The original event dispatcher. */
-		private final EventDispatcher original;
-
-		/** Constructor. */
-		public DoubleClickEventDispatcher(EventDispatcher original) {
-			this.original = original;
-		}
+	/** {@inheritDoc} */
+	@Override
+	protected Object getSelectedObject() {
+		DynamicTreeItem<T> item = (DynamicTreeItem<T>)view.getSelectionModel().getSelectedItem();
 
-		/** {@inheritDoc} */
-		@Override
-		public Event dispatchEvent(Event event, EventDispatchChain tail) {
-			if(event instanceof MouseEvent) {
-				MouseEvent mevt = (MouseEvent)event;
-				if(mevt.getButton() == MouseButton.PRIMARY && mevt.getClickCount() >= 2) {
-					if(mevt.getEventType().equals(MouseEvent.MOUSE_CLICKED) &&
-							doubleClickHandler != null) {
-						DynamicTreeItem<T> item =
-								(DynamicTreeItem<T>)view.getSelectionModel().getSelectedItem();
-						if(item != null) {
-							doubleClickHandler.doubleClicked(item.getValue());
-						}
-					}
-					event.consume();
-				}
-			}
-			return original.dispatchEvent(event, tail);
+		if(item != null) {
+			return item.getValue();
 		}
+
+		return null;
 	}
 }
diff --git a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java
index 47124c847de322a0ae26eb7a114f85ce4bd02d7e..a2013538b62d86f6a09efdf2cd78babac2072484 100644
--- a/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java
+++ b/org.fortiss.tooling.common.ui/src/org/fortiss/tooling/common/ui/javafx/control/treetableview/DynamicTreeViewerBase.java
@@ -15,20 +15,91 @@
  *******************************************************************************/
 package org.fortiss.tooling.common.ui.javafx.control.treetableview;
 
+import javafx.event.Event;
+import javafx.event.EventDispatchChain;
+import javafx.event.EventDispatcher;
+import javafx.scene.control.Control;
+import javafx.scene.control.TreeItem;
+import javafx.scene.input.MouseButton;
+import javafx.scene.input.MouseEvent;
+
 /**
  * Base class for {@link DynamicTreeViewer} and {@link DynamicTreeTableViewer}.
  */
 abstract class DynamicTreeViewerBase<T> {
+	/** The double click handler. */
+	private IDoubleClickHandler doubleClickHandler;
+
+	/** The double click event dispatcher. */
+	protected DoubleClickEventDispatcher doubleClickEventDispatcher;
+
 	/** The content provider implementation. */
 	private final DynamicTreeContentProviderBase<T> contentProvider;
 
 	/** Constructor. */
-	public DynamicTreeViewerBase(DynamicTreeContentProviderBase<T> contentProvider) {
+	public DynamicTreeViewerBase(Control control,
+			DynamicTreeContentProviderBase<T> contentProvider) {
 		this.contentProvider = contentProvider;
+
+		setupEventDispatcher(control);
+	}
+
+	/** Creates and installs the EventDispatcher. Might be overwritten to change behavior. */
+	protected void setupEventDispatcher(Control control) {
+		EventDispatcher original = control.getEventDispatcher();
+		control.setEventDispatcher(new DoubleClickEventDispatcher(original));
 	}
 
 	/** Returns the content provider. */
 	public final DynamicTreeContentProviderBase<T> getContentProvider() {
 		return contentProvider;
 	}
+
+	/**
+	 * Customized event dispatcher to fix double-click behavior. This prevents opening/closing of
+	 * tree items with double click listeners assigned.
+	 */
+	private class DoubleClickEventDispatcher implements EventDispatcher {
+		/** The original event dispatcher. */
+		private final EventDispatcher original;
+
+		/** Constructor. */
+		public DoubleClickEventDispatcher(EventDispatcher original) {
+			this.original = original;
+		}
+
+		/** {@inheritDoc} */
+		@Override
+		public Event dispatchEvent(Event event, EventDispatchChain tail) {
+			if(event instanceof MouseEvent) {
+				MouseEvent mevt = (MouseEvent)event;
+				if(mevt.getButton() == MouseButton.PRIMARY && mevt.getClickCount() >= 2) {
+					if(mevt.getEventType().equals(MouseEvent.MOUSE_CLICKED) &&
+							doubleClickHandler != null) {
+						Object item = getSelectedObject();
+						if(item != null) {
+							doubleClickHandler.doubleClicked(item);
+						}
+					}
+					event.consume();
+				}
+			}
+			return original.dispatchEvent(event, tail);
+		}
+	}
+
+	/** Sets the double click handler. */
+	public void setDoubleClickHandler(IDoubleClickHandler handler) {
+		this.doubleClickHandler = handler;
+	}
+
+	/**
+	 * Retrieves the currently selected {@link Object} from this viewer.
+	 * 
+	 * Note: This usually is not e.g. the {@link TreeItem} or similar, but the model object, that is
+	 * represented by it. Usually this will be some EObject.
+	 * 
+	 * @return The currently selected {@link Object}.
+	 */
+	protected abstract Object getSelectedObject();
 }