diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java
index 16e7b121aa3d94441492fce50a19fe7220f929cb..8ab4ff662decf4cea53c47c50d5bbece3232061f 100644
--- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java
+++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/editor/gef/GraphicalViewerEditorBase.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import org.conqat.ide.commons.gef.editpart.EditPartUtils;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.gef.EditDomain;
 import org.eclipse.gef.EditPartFactory;
@@ -40,7 +41,11 @@ import org.eclipse.gef.ui.actions.ZoomInAction;
 import org.eclipse.gef.ui.actions.ZoomOutAction;
 import org.eclipse.gef.ui.parts.ScrollingGraphicalViewer;
 import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.IPostSelectionProvider;
 import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IActionBars;
@@ -49,8 +54,10 @@ import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.ISelectionListener;
 import org.eclipse.ui.IWorkbenchPart;
 import org.eclipse.ui.PartInitException;
+import org.fortiss.tooling.base.ui.ToolingBaseUIActivator;
 import org.fortiss.tooling.base.ui.action.ModelElementsActionBase;
 import org.fortiss.tooling.base.ui.dnd.DropTargetListener;
+import org.fortiss.tooling.base.ui.editpart.figure.EVisualStyle;
 import org.fortiss.tooling.kernel.ui.services.IEditPartFactoryService;
 
 /**
@@ -63,10 +70,11 @@ import org.fortiss.tooling.kernel.ui.services.IEditPartFactoryService;
  * @version $Rev$
  * @ConQAT.Rating YELLOW Hash: 63FF468A2D042586A22495828A0798EF
  */
-public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T> {
+public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
+		implements IPostSelectionProvider {
 
 	/** Stores the viewer. */
-	EditPartViewer viewer = new ScrollingGraphicalViewer();
+	protected EditPartViewer viewer = new ScrollingGraphicalViewer();
 
 	/** Actions which need update upon selection changes. */
 	private final List<String> selectionActions = new ArrayList<String>();
@@ -105,11 +113,61 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
 	/** {@inheritDoc} */
 	@Override
 	public void createPartControl(Composite parent) {
-		// action support
+		viewer.createControl(parent);
+
+		getEditDomain().addViewer(viewer);
+
+		viewer.setEditPartFactory(createEditPartFactory());
+		viewer.setContents(getViewerContentObject());
+		// TODO (FH): add context menu support
+		// MenuManager contextMenu = getContextMenuManager();
+		// if (contextMenu != null) {
+		// viewer.setContextMenu(contextMenu);
+		// }
+
+		getSite().setSelectionProvider(this);
+		ToolingBaseUIActivator.getDefault().getPreferenceStore()
+				.addPropertyChangeListener(propertyChangeListener);
+
 		createActions();
 		updateActions(propertyActions);
 
-		// zoom support
+		createZoomSupport();
+
+		// drag and drop
+		viewer.addDropTargetListener(new DropTargetListener(viewer));
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void dispose() {
+		ToolingBaseUIActivator.getDefault().getPreferenceStore()
+				.removePropertyChangeListener(propertyChangeListener);
+		super.dispose();
+	}
+
+	/**
+	 * Returns the root object used as content root. Sub-classes may override to
+	 * provide a different content root object. The default implementation uses
+	 * {@link EditorBase#getEditedObject()}
+	 */
+	protected Object getViewerContentObject() {
+		return getEditedObject();
+	}
+
+	/** Listener used to refresh on editor preference changes. */
+	private final IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
+
+		@Override
+		public void propertyChange(PropertyChangeEvent event) {
+			if (event.getProperty().equals(EVisualStyle.ID)) {
+				EditPartUtils.fullRefresh(viewer.getRootEditPart());
+			}
+		}
+	};
+
+	/** Installs zoom suport for this graphical viewer. */
+	private void createZoomSupport() {
 		RootEditPart rootPart = viewer.getRootEditPart();
 		if (rootPart instanceof ScalableFreeformRootEditPart) {
 			zoomManager = ((ScalableFreeformRootEditPart) rootPart)
@@ -123,9 +181,6 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
 			registerZoomAction();
 		}
 		zoomContribution = new ZoomComboContributionItem(getSite().getPage());
-
-		// drag and drop
-		viewer.addDropTargetListener(new DropTargetListener(viewer));
 	}
 
 	/** Registers and returns the id of the given action. */
@@ -223,4 +278,46 @@ public class GraphicalViewerEditorBase<T extends EObject> extends EditorBase<T>
 	public void setFocus() {
 		viewer.getControl().setFocus();
 	}
+
+	// The following methods are necessary in order to avoid Eclipse Helios SR2
+	// bug #339360
+
+	/** {@inheritDoc} */
+	@Override
+	public void addPostSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		viewer.addSelectionChangedListener(listener);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void removePostSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		viewer.removeSelectionChangedListener(listener);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {
+		viewer.addSelectionChangedListener(listener);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public ISelection getSelection() {
+		return viewer.getSelection();
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {
+		viewer.removeSelectionChangedListener(listener);
+	}
+
+	/** {@inheritDoc} */
+	@Override
+	public void setSelection(ISelection selection) {
+		viewer.setSelection(selection);
+	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/schema/editPartFactory.exsd b/org.fortiss.tooling.kernel.ui/trunk/schema/editPartFactory.exsd
index f430745ce3c9ca6182869b6f846cb483bacf1b10..83e4a91e684f68ae47c1a996027a73a1fe86f7ce 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/schema/editPartFactory.exsd
+++ b/org.fortiss.tooling.kernel.ui/trunk/schema/editPartFactory.exsd
@@ -52,7 +52,7 @@
    <element name="editPartFactory">
       <complexType>
          <sequence>
-            <element ref="modelElementClass"/>
+            <element ref="modelElementClass" minOccurs="1" maxOccurs="unbounded"/>
          </sequence>
          <attribute name="factory" type="string" use="required">
             <annotation>
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/base/NamedCommentedModelElementHandlerBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/base/NamedCommentedModelElementHandlerBase.java
index 34cbca88b914f0a951851bdd889ec659c96ed367..5f2e112aa17bcff8686a0aac39a3882dec6f7e5b 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/base/NamedCommentedModelElementHandlerBase.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/base/NamedCommentedModelElementHandlerBase.java
@@ -35,12 +35,18 @@ public abstract class NamedCommentedModelElementHandlerBase<T extends INamedComm
 	/** {@inheritDoc} */
 	@Override
 	public String getName(T element) {
+		if (element.getName() == null) {
+			return "";
+		}
 		return element.getName();
 	}
 
 	/** {@inheritDoc} */
 	@Override
 	public String getDescription(T element) {
+		if (element.getComment() == null) {
+			return "";
+		}
 		return element.getComment();
 	}
 }