diff --git a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
index 0cf943c6e4fa4f78488c5e2268263c854bd6707f..f10fbede193db5151eab379f14de878d6f1c1977 100644
--- a/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
+++ b/src/main/java/org/olat/core/gui/components/stack/BreadcrumbedStackedPanel.java
@@ -417,7 +417,26 @@ public class BreadcrumbedStackedPanel extends Panel implements StackedPanel, Bre
 		pushController(displayName, iconLeftCss, null, uobject);
 	}
 
+	/**
+	 * Push the controller in the stack. If the breadcrumb has no controller, the method
+	 * prevent the last breadcrumb to be the same has the new one and be same, it's mean
+	 * the same uobject.
+	 * 
+	 * @param displayName
+	 * @param iconLeftCss
+	 * @param controller
+	 * @param uobject
+	 */
 	public void pushController(String displayName, String iconLeftCss, Controller controller, Object uobject) {
+		//deduplicate last crumb
+		if(uobject != null && controller == null && stack.size() > 0) {
+			Link lastLink = stack.get(stack.size() - 1);
+			BreadCrumb lastCrumb = (BreadCrumb)lastLink.getUserObject();
+			if(lastCrumb.getController() == null && lastCrumb.getUserObject() != null && lastCrumb.getUserObject().equals(uobject)) {
+				stack.remove(lastLink);
+			}
+		}
+
 		Link link = LinkFactory.createLink("crumb_" + stack.size(), (Translator)null, this);
 		link.setCustomDisplayText(StringHelper.escapeHtml(displayName));
 		if(StringHelper.containsNonWhitespace(iconLeftCss)) {