diff --git a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/ConstraintMenu.java b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/ConstraintMenu.java
index e242503f5f97a395b1e1f51dd6a2e07dd04e523e..877a684468fea2326c82c96034f6872bec6f61b1 100644
--- a/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/ConstraintMenu.java
+++ b/org.fortiss.tooling.kernel.ui/trunk/src/org/fortiss/tooling/kernel/ui/internal/views/ConstraintMenu.java
@@ -8,6 +8,7 @@
  +-----------------------------------------------------------------------*/
 package org.fortiss.tooling.kernel.ui.internal.views;
 
+import static org.eclipse.jface.dialogs.MessageDialog.openError;
 import static org.eclipse.jface.resource.ImageDescriptor.createFromImage;
 
 import java.util.Collections;
@@ -26,12 +27,14 @@ import org.eclipse.jface.viewers.DecorationOverlayIcon;
 import org.eclipse.jface.viewers.IDecoration;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
 import org.fortiss.tooling.kernel.model.constraints.ConstrainedWithChecksum;
 import org.fortiss.tooling.kernel.model.constraints.ErrorVerificationStatus;
 import org.fortiss.tooling.kernel.model.constraints.FailVerificationStatus;
 import org.fortiss.tooling.kernel.model.constraints.IConstrained;
 import org.fortiss.tooling.kernel.model.constraints.IConstraint;
 import org.fortiss.tooling.kernel.model.constraints.IConstraintVerificationStatus;
+import org.fortiss.tooling.kernel.model.constraints.OutdatedVerificationStatus;
 import org.fortiss.tooling.kernel.model.constraints.SuccessVerificationStatus;
 import org.fortiss.tooling.kernel.service.ICommandStackService;
 import org.fortiss.tooling.kernel.service.IConstraintVerificationService;
@@ -52,7 +55,7 @@ import org.fortiss.tooling.kernel.ui.service.IModelElementHandlerService;
  * @author hoelzl
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: B817A3E9DF60439556DDA0454A6E1010
+ * @ConQAT.Rating YELLOW Hash: 6B633E486D2B054E8398EF36F0420AFB
  */
 public class ConstraintMenu implements IContextMenuContributor {
 
@@ -78,16 +81,23 @@ public class ConstraintMenu implements IContextMenuContributor {
 	 */
 	private IContributionItem constraintToAction(IConstraint c, IConstrained elt) {
 		IConstraintVerificationStatus status = c.getVerificationStatus();
+		ConstraintSubMenuBase m;
 		if(status instanceof FailVerificationStatus) {
-			CheckFailingConstraintAction m = new CheckFailingConstraintAction(c, elt);
-			return m.getItems().length != 0 ? m : new ActionContributionItem(new FailedAction(c));
+			m = new CheckFailingConstraintAction(c, elt);
 		} else if(status instanceof ErrorVerificationStatus) {
-			CheckErrorConstraintAction m = new CheckErrorConstraintAction(c, elt);
-			return m.getItems().length != 0 ? m : new ActionContributionItem(new ErrorAction(c));
+			m = new CheckErrorConstraintAction(c, elt);
 		} else {
-			CheckOutdatedConstraintAction m = new CheckOutdatedConstraintAction(c, elt);
-			return m.getItems().length != 0 ? m : new ActionContributionItem(new OutdatedAction(c));
+			m = new CheckOutdatedConstraintAction(c, elt);
 		}
+		if(m.getItems().length > 1) {
+			return m;
+		}
+		IAction uniqueAction = m.getTopActionContribution().getAction();
+		String txt = m.getMenuText();
+		String newText = txt.substring(0, txt.length() - 1) + " -> " + uniqueAction.getText();
+		uniqueAction.setText(newText);
+		uniqueAction.setImageDescriptor(m.getImageDescriptor());
+		return m.getTopActionContribution();
 	}
 
 	/** {@inheritDoc} */
@@ -119,70 +129,6 @@ public class ConstraintMenu implements IContextMenuContributor {
 		}
 	}
 
-	/********************************************************************************************
-	 * Simple actions: no submenus. Normally should not be used: every constraint verifier should
-	 * provide sufficient information to populate the menu with decent information. But this
-	 * provides at least a default.
-	 */
-
-	/** Base class. */
-	private class InformationAsAction extends Action {
-
-		/** Constructor. */
-		public InformationAsAction(IConstraint c, String prefix, ImageDescriptor overlay) {
-			super(getName(c, prefix), getIcon(c, overlay));
-		}
-	}
-
-	/** Information action for outdated constraints. */
-	private class OutdatedAction extends InformationAsAction {
-
-		/** Constructor. */
-		public OutdatedAction(IConstraint c) {
-			super(c, "Outdated constraint: ", ESharedImages.WARNING_OVERLAY.getImageDescriptor());
-		}
-
-		/** {@inheritDoc} */
-		@Override
-		public void run() {
-			MessageDialog.openWarning(Display.getDefault().getActiveShell(), "Outdated constraint",
-					this.getText());
-		}
-	}
-
-	/** Information action for failing constraints. */
-	private class FailedAction extends InformationAsAction {
-
-		/** Constructor. */
-		public FailedAction(IConstraint c) {
-			super(c, "Unsatisfied constraint: ", ESharedImages.ERROR_OVERLAY.getImageDescriptor());
-		}
-
-		/** {@inheritDoc} */
-		@Override
-		public void run() {
-			MessageDialog.openError(Display.getDefault().getActiveShell(),
-					"Unsatisfied constraint", this.getText());
-		}
-	}
-
-	/** Information action for failing constraints. */
-	private class ErrorAction extends InformationAsAction {
-
-		/** Constructor. */
-		public ErrorAction(IConstraint c) {
-			super(c, "Error while checking constraint: ", ESharedImages.ERROR_OVERLAY
-					.getImageDescriptor());
-		}
-
-		/** {@inheritDoc} */
-		@Override
-		public void run() {
-			MessageDialog.openError(Display.getDefault().getActiveShell(),
-					"Error while checking constraint", this.getText());
-		}
-	}
-
 	/** Get the icon of the prototype. */
 	public static String getName(IConstraint c, String prefix) {
 		String name = IModelElementHandlerService.INSTANCE.getName(c);
@@ -200,10 +146,6 @@ public class ConstraintMenu implements IContextMenuContributor {
 		return new DecorationOverlayIcon(img, descriptors);
 	}
 
-	/********************************************************************************************
-	 * Submenus.
-	 */
-
 	/** Action for creating a new prototype. */
 	private static class ConstraintSubMenuBase extends MenuManager {
 
@@ -223,10 +165,8 @@ public class ConstraintMenu implements IContextMenuContributor {
 				ImageDescriptor overlay) {
 			super(getName(c, prefix), getIcon(c, overlay), null);
 			this.c = c;
-			if(IConstraintVerificationUIService.INSTANCE.canOpen(c.getVerificationStatus())) {
-				moreInfoAction = new ActionContributionItem(new OpenStatusAction());
-				this.add(moreInfoAction);
-			}
+			moreInfoAction = new ActionContributionItem(new OpenStatusAction());
+			this.add(moreInfoAction);
 			for(ConstrainedWithChecksum cwc : c.getConstrainedsWithChecksum()) {
 				if(!selectedElt.equals(cwc.getConstrained())) {
 					this.add(new ActionContributionItem(new GoToConstrained(cwc.getConstrained())));
@@ -234,6 +174,14 @@ public class ConstraintMenu implements IContextMenuContributor {
 			}
 		}
 
+		/**
+		 * @return The top action contribution. Useful in case we get aware that there is only one
+		 *         contribution and we therefore want to present it without going through a submenu.
+		 */
+		public ActionContributionItem getTopActionContribution() {
+			return moreInfoAction;
+		}
+
 		/** Action to update a constraint. */
 		protected class OpenStatusAction extends Action {
 
@@ -246,14 +194,40 @@ public class ConstraintMenu implements IContextMenuContributor {
 			/** {@inheritDoc} */
 			@Override
 			public void run() {
-				ICommandStackService.INSTANCE.runAsCommand(c, new Runnable() {
-
-					@Override
-					public void run() {
-						IConstraintVerificationUIService.INSTANCE.openStatus(c
-								.getVerificationStatus());
+				IConstraintVerificationStatus status = c.getVerificationStatus();
+				if(c.getVerificationStatus() instanceof OutdatedVerificationStatus &&
+						IConstraintVerificationUIService.INSTANCE.canOpen(status)) {
+					ICommandStackService.INSTANCE.runAsCommand(c, new Runnable() {
+						@Override
+						public void run() {
+							IConstraintVerificationUIService.INSTANCE.openStatus(status);
+						}
+					});
+					return;
+				}
+				if(IConstraintVerificationUIService.INSTANCE.canOpen(status)) {
+					IConstraintVerificationUIService.INSTANCE.openStatus(status);
+				} else {
+					// In the very rare cases where the status cannot be open (if the defaults are
+					// used, this should not happen), we provide some defaults.
+					Shell sh = Display.getCurrent().getActiveShell();
+					String name = IModelElementHandlerService.INSTANCE.getName(c);
+					String fullName = name == null ? "constraint" : name;
+					if(status instanceof FailVerificationStatus) {
+						String msg = (name == null ? "The " : fullName);
+						msg += " is not satisfied.";
+						MessageDialog.openInformation(sh, "Unsatisfied constraint", msg);
+					} else if(status instanceof ErrorVerificationStatus) {
+						String msg = "There was an error while verifying ";
+						msg += (name == null ? "the " : "") + fullName + ".";
+						openError(sh, "Error while verifying constraint", msg);
 					}
-				});
+					if(status instanceof OutdatedVerificationStatus) {
+						String msg = (name == null ? "The " : fullName) + " is outdated.";
+						MessageDialog.openWarning(sh, "Outdated constraint", msg);
+					}
+				}
+
 			}
 		}
 	}