diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java
index f7faf95adee91cbed35b57b7bb77d343e42d8437..0412ec45445a8d789752f8bf23e866ebbd921d99 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/IModelElementHandler.java
@@ -25,6 +25,7 @@ import org.eclipse.swt.graphics.Image;
 import org.fortiss.tooling.kernel.service.base.IEObjectAware;
 import org.fortiss.tooling.kernel.ui.extension.base.ModelElementHandlerBase;
 import org.fortiss.tooling.kernel.ui.extension.base.NamedCommentedModelElementHandlerBase;
+import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider;
 import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
 
 /**
@@ -38,10 +39,9 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating GREEN Hash: 72BE2424E9C7B59DA7457943B0B416A8
+ * @ConQAT.Rating YELLOW Hash: 6CF99CF5089E03E8E60B1019F9D93A78
  */
-public interface IModelElementHandler<T extends EObject> extends
-		IEObjectAware<T> {
+public interface IModelElementHandler<T extends EObject> extends IEObjectAware<T> {
 
 	/** Returns the name of the model element (if any). */
 	String getName(T element);
@@ -105,4 +105,12 @@ public interface IModelElementHandler<T extends EObject> extends
 	 * than this, but MUST NOT return <code>null</code>.
 	 */
 	EObject getPropertySectionRetargetElement(T element);
+
+	/**
+	 * Returns the list of categories to be inserted after the model element in the navigator view.
+	 * Model element handlers may provide categories here in order to structure its content
+	 * elements. If they do not need this feature this method must return {@code null}.
+	 */
+	List<NavigatorTreeContentProvider.NavigatorContentCategory<? extends EObject>>
+			getCategoryNodes(EObject parentElement);
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java
index d6a5dbcc137e94b46a9f3483c35309ac4038bf06..ef26584fc77c6ac0d1946ca378b399ecf2e52290 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/extension/base/ModelElementHandlerBase.java
@@ -24,6 +24,7 @@ import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.resource.ImageDescriptor;
 import org.eclipse.swt.graphics.Image;
 import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
+import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider.NavigatorContentCategory;
 
 /**
  * Base implementation for {@link IModelElementHandler}s.
@@ -36,10 +37,9 @@ import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating GREEN Hash: 64CAFB384824A059BE1CB86F084DEE1D
+ * @ConQAT.Rating YELLOW Hash: 9673BF0EB3582152AEE991F632CFDA09
  */
-public abstract class ModelElementHandlerBase<T extends EObject> implements
-		IModelElementHandler<T> {
+public abstract class ModelElementHandlerBase<T extends EObject> implements IModelElementHandler<T> {
 
 	/**
 	 * Stores the icon image. Use singleton to save the limited image buffers.
@@ -55,9 +55,9 @@ public abstract class ModelElementHandlerBase<T extends EObject> implements
 	/** {@inheritDoc} */
 	@Override
 	public final Image getIcon() {
-		if (iconImage == null) {
+		if(iconImage == null) {
 			ImageDescriptor descr = getIconImageDescriptor();
-			if (descr != null) {
+			if(descr != null) {
 				iconImage = descr.createImage();
 			}
 		}
@@ -111,4 +111,15 @@ public abstract class ModelElementHandlerBase<T extends EObject> implements
 	public EObject getPropertySectionRetargetElement(T element) {
 		return element;
 	}
+
+	/**
+	 * {@inheritDoc}
+	 * <P>
+	 * The base implementation returns {@code null}.
+	 */
+	@Override
+	public List<NavigatorContentCategory<? extends EObject>>
+			getCategoryNodes(EObject parentElement) {
+		return null;
+	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java
index eca23c6ce5d2e7c11c08bb9f8bde83082dfc20e6..3e07270931a577eefa15c6c80462735c78369538 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/NavigatorTreeContentProvider.java
@@ -24,6 +24,7 @@ import java.util.List;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.graphics.Image;
 import org.fortiss.tooling.kernel.extension.data.ITopLevelElement;
 import org.fortiss.tooling.kernel.service.IPersistencyService;
 import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
@@ -35,7 +36,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
  * @author hoelzlf
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating GREEN Hash: AF1815BF663456271E6585863FEC15B4
+ * @ConQAT.Rating YELLOW Hash: 7D46EA19284C59D9804C13C434446A57
  */
 public class NavigatorTreeContentProvider implements ITreeContentProvider {
 
@@ -48,8 +49,7 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 		// delegate to the top-level element contexts of the persistency service
 		List<EObject> result = new LinkedList<EObject>();
 
-		for (ITopLevelElement context : IPersistencyService.INSTANCE
-				.getTopLevelElements()) {
+		for(ITopLevelElement context : IPersistencyService.INSTANCE.getTopLevelElements()) {
 			result.add(context.getRootModelElement());
 		}
 		return result.toArray();
@@ -59,16 +59,20 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 	@Override
 	public Object[] getChildren(Object parent) {
 		// delegate to the model element handlers
-		if (parent instanceof EObject) {
-			EObject parentElement = (EObject) parent;
-			IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
-					.getModelElementHandler(parentElement);
-			if (handler != null) {
+		if(parent instanceof EObject) {
+			EObject parentElement = (EObject)parent;
+			IModelElementHandler<EObject> handler =
+					IModelElementHandlerService.INSTANCE.getModelElementHandler(parentElement);
+			if(handler != null) {
+				List<NavigatorContentCategory<? extends EObject>> categories =
+						handler.getCategoryNodes(parentElement);
+				if(categories != null) {
+					return categories.toArray();
+				}
+				// the default returns sub nodes and specifications
 				List<EObject> children = new ArrayList<EObject>();
-				children.addAll(filterExpertElements(handler
-						.getSubnodes(parentElement)));
-				children.addAll(filterExpertElements(handler
-						.getSpecifications(parentElement)));
+				children.addAll(filterExpertElements(handler.getSubnodes(parentElement)));
+				children.addAll(filterExpertElements(handler.getSpecifications(parentElement)));
 				return children.toArray();
 			}
 		}
@@ -80,12 +84,12 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 	 * according to {@link IModelElementHandler#hiddenInNonExpertView()}
 	 */
 	private List<EObject> filterExpertElements(List<EObject> elements) {
-		if (!expertViewActive) {
+		if(!expertViewActive) {
 			List<EObject> filtered = new ArrayList<EObject>();
-			for (EObject current : elements) {
-				IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
-						.getModelElementHandler(current);
-				if (!handler.hiddenInNonExpertView())
+			for(EObject current : elements) {
+				IModelElementHandler<EObject> handler =
+						IModelElementHandlerService.INSTANCE.getModelElementHandler(current);
+				if(!handler.hiddenInNonExpertView())
 					filtered.add(current);
 			}
 			return filtered;
@@ -96,9 +100,8 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 	/** {@inheritDoc} */
 	@Override
 	public Object getParent(Object element) {
-		if (element instanceof EObject
-				&& IPersistencyService.INSTANCE
-						.isTopLevelElement((EObject) element)) {
+		if(element instanceof EObject &&
+				IPersistencyService.INSTANCE.isTopLevelElement((EObject)element)) {
 			// delegate to persistency service
 			return IPersistencyService.INSTANCE;
 		}
@@ -131,4 +134,30 @@ public class NavigatorTreeContentProvider implements ITreeContentProvider {
 	public void toggleExpertView() {
 		expertViewActive = !expertViewActive;
 	}
+
+	/**
+	 * Class for navigator content objects, which allow {@link IModelElementHandler} to provide
+	 * sub-elements in different categories.
+	 */
+	public abstract class NavigatorContentCategory<T extends EObject> {
+		/** The parent object of the category. */
+		protected T parent;
+		/** A model element handler that provided this element. */
+		protected IModelElementHandler<T> handler;
+
+		/** Constructor. */
+		protected NavigatorContentCategory(T parent, IModelElementHandler<T> handler) {
+			this.parent = parent;
+			this.handler = handler;
+		}
+
+		/** Returns the sub-nodes for this category. */
+		public abstract List<EObject> getSubNodes();
+
+		/** Returns the category name. */
+		public abstract String getName();
+
+		/** Returns the category icon. */
+		public abstract Image getIcon();
+	}
 }
diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java
index 051ffe60440fad4462d6c6aa933ecdcfb1f737ca..4bb809618b25c1a033c5ca47293d5f8048719a36 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/presentation/ModelElementLabelProvider.java
@@ -26,6 +26,7 @@ import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.swt.graphics.Image;
 import org.fortiss.tooling.kernel.model.INamedElement;
 import org.fortiss.tooling.kernel.ui.extension.IModelElementHandler;
+import org.fortiss.tooling.kernel.ui.internal.views.NavigatorTreeContentProvider.NavigatorContentCategory;
 import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
 import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
 
@@ -35,29 +36,32 @@ import org.fortiss.tooling.kernel.ui.util.EObjectSelectionUtils;
  * @author mou
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating GREEN Hash: A10454849AA7D7BF9679F8CCAF5FA027
+ * @ConQAT.Rating YELLOW Hash: 53BE9186639ED93437E9D62E129DF460
  */
+@SuppressWarnings("rawtypes")
 public class ModelElementLabelProvider extends LabelProvider {
 	/** {@inheritDoc} */
 	@Override
 	public String getText(Object element) {
-		if (element instanceof EObject) {
-			IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
-					.getModelElementHandler((EObject) element);
+		if(element instanceof EObject) {
+			IModelElementHandler<EObject> handler =
+					IModelElementHandlerService.INSTANCE.getModelElementHandler((EObject)element);
 
-			if (handler != null)
-				return handler.getName((EObject) element);
+			if(handler != null)
+				return handler.getName((EObject)element);
 			// try to fall back on INamedElementModel
-			if (element instanceof INamedElement) {
-				return ((INamedElement) element).getName();
+			if(element instanceof INamedElement) {
+				return ((INamedElement)element).getName();
 			}
 			error(getDefault(),
-					"Missing model element handler of non-INamedElement EObject of class "
-							+ element.getClass());
+					"Missing model element handler of non-INamedElement EObject of class " +
+							element.getClass());
 		}
-		if (element instanceof IStructuredSelection) {
-			return getText(EObjectSelectionUtils
-					.getFirstElement((IStructuredSelection) element));
+		if(element instanceof NavigatorContentCategory) {
+			return ((NavigatorContentCategory)element).getName();
+		}
+		if(element instanceof IStructuredSelection) {
+			return getText(EObjectSelectionUtils.getFirstElement((IStructuredSelection)element));
 		}
 		return super.getText(element);
 	}
@@ -65,13 +69,16 @@ public class ModelElementLabelProvider extends LabelProvider {
 	/** {@inheritDoc} */
 	@Override
 	public Image getImage(Object element) {
-		if (element instanceof EObject) {
-			IModelElementHandler<EObject> handler = IModelElementHandlerService.INSTANCE
-					.getModelElementHandler((EObject) element);
+		if(element instanceof EObject) {
+			IModelElementHandler<EObject> handler =
+					IModelElementHandlerService.INSTANCE.getModelElementHandler((EObject)element);
 
-			if (handler != null)
+			if(handler != null)
 				return handler.getIcon();
 		}
+		if(element instanceof NavigatorContentCategory) {
+			return ((NavigatorContentCategory)element).getIcon();
+		}
 		return super.getImage(element);
 	}
 }