diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/generic/HierarchicalNameComparator.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/generic/HierarchicalNameComparator.java
index 54892a51a171420b70b1b23b8d6dc0bb541d323a..0b248d4bd66cca7e5c4d30f708f1d060ad12707e 100644
--- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/generic/HierarchicalNameComparator.java
+++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/generic/HierarchicalNameComparator.java
@@ -22,6 +22,7 @@ import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.fortiss.tooling.base.model.element.IModelElement;
 import org.fortiss.tooling.base.ui.annotation.AnnotationEntry;
+import org.fortiss.tooling.kernel.model.IIdLabeled;
 import org.fortiss.tooling.kernel.model.INamedElement;
 
 /**
@@ -30,6 +31,34 @@ import org.fortiss.tooling.kernel.model.INamedElement;
  */
 public class HierarchicalNameComparator extends ViewerComparator {
 
+	/**
+	 * Compare two {@link Object}s by
+	 * <ul>
+	 * <li>name (if the are {@link INamedElement}s)</li>
+	 * <li>Id (if they are {@link IIdLabeled} elements)</li>
+	 * <li>Hash code (otherwise)</li>
+	 * </ul>
+	 */
+	private int compareFallback(Object e1, Object o2) {
+		// ... and compare them by name...
+		if(e1 instanceof INamedElement && o2 instanceof INamedElement) {
+			// Elements are at the same level -> compare by name
+			int rval = (((INamedElement)e1).getName().compareTo(((INamedElement)o2).getName()));
+			if(rval != 0) {
+				return rval;
+			}
+		}
+
+		// int Integer.compare(int x, int y) requires JDK 1.7 which is not available
+		// on the build server
+		if(e1 instanceof IIdLabeled && o2 instanceof IIdLabeled) {
+			return new Integer(((IIdLabeled)e1).getId()).compareTo(((IIdLabeled)o2).getId());
+		}
+
+		return new Integer(e1.hashCode()).compareTo(o2.hashCode());
+
+	}
+
 	/** {@inheritDoc} */
 	@Override
 	public int compare(Viewer viewer, Object o1, Object o2) {
@@ -80,16 +109,10 @@ public class HierarchicalNameComparator extends ViewerComparator {
 				e2 = e2.eContainer();
 			} while(true);
 
-			// ... and compare them by name...
-			if(e1 instanceof INamedElement && e2 instanceof INamedElement) {
-				// Elements are at the same level -> compare by name
-				return(((INamedElement)e1).getName().compareTo(((INamedElement)e2).getName()));
-			}
+			// ... and compare them
+			return compareFallback(e1, e2);
 		}
 
-		// ... or hash code (as a fallback ordering)
-		// int Integer.compare(int x, int y) requires JDK 1.7 which is not available
-		// on the build server
-		return new Integer(o1.hashCode()).compareTo(o2.hashCode());
+		return compareFallback(o1, o2);
 	}
 }