diff --git a/src/main/java/org/olat/core/gui/components/link/Link.java b/src/main/java/org/olat/core/gui/components/link/Link.java
index c988841d391db33163040a70290ba037079ddb41..2167531581132caadeafa611350ec25730af924e 100644
--- a/src/main/java/org/olat/core/gui/components/link/Link.java
+++ b/src/main/java/org/olat/core/gui/components/link/Link.java
@@ -26,8 +26,14 @@
 
 package org.olat.core.gui.components.link;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.Logger;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.AbstractComponent;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.ComponentCollection;
 import org.olat.core.gui.components.ComponentEventListener;
 import org.olat.core.gui.components.ComponentRenderer;
 import org.olat.core.gui.components.badge.Badge;
@@ -36,7 +42,6 @@ import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Event;
 import org.olat.core.logging.AssertException;
-import org.apache.logging.log4j.Logger;
 import org.olat.core.logging.Tracing;
 
 /**
@@ -47,7 +52,7 @@ import org.olat.core.logging.Tracing;
  * 
  * @author Alexander Schneider, Patrick Brunner
  */
-public class Link extends AbstractComponent {
+public class Link extends AbstractComponent implements ComponentCollection {
 	private static final Logger log = Tracing.createLoggerFor(Link.class);
 	//single renderer for all users, lazy creation upon first object creation of this class.
 	private static final ComponentRenderer RENDERER = new LinkRenderer();
@@ -111,6 +116,7 @@ public class Link extends AbstractComponent {
 	private boolean forceFlexiDirtyFormWarning = false;
 
 	private Badge badge;
+	private Component innerComponent;
 	private boolean newWindow;
 	private LinkPopupSettings popup;
 
@@ -316,6 +322,37 @@ public class Link extends AbstractComponent {
 		return flexiLink;
 	}
 	
+	public Component getInnerComponent() {
+		return innerComponent;
+	}
+	
+	public void setInnerComponent(Component component) {
+		this.innerComponent = component;
+	}
+	
+	@Override
+	public Component getComponent(String name) {
+		if(badge != null && badge.getComponentName().equals(name)) {
+			return badge;
+		}
+		if(innerComponent != null && innerComponent.getComponentName().equals(name)) {
+			return innerComponent;
+		}
+		return null;
+	}
+
+	@Override
+	public Iterable<Component> getComponents() {
+		List<Component> components = new ArrayList<>(2);
+		if(badge != null) {
+			components.add(badge);
+		}
+		if(innerComponent != null) {
+			components.add(innerComponent);
+		}
+		return components;
+	}
+
 	MouseEvent getMouseEvent() {
 		return mouseEvent;
 	}
diff --git a/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java b/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java
index 231037ffe79079328cb33cfe9a975ce7c477b213..61c939fcf682d2c1a10eeb8e2ddf6f177d4dbf28 100644
--- a/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/link/LinkRenderer.java
@@ -259,7 +259,10 @@ public class LinkRenderer extends DefaultComponentRenderer {
 				sb.append(" class='").append(link.getLabelCSS()).append("'");
 			}
 			sb.append(">");
-			if (customDisplayText != null) {
+			
+			if(link.getInnerComponent() != null) {
+				renderer.render(link.getInnerComponent(), sb, args);
+			} else if (customDisplayText != null) {
 				//link is not translated but has custom text
 				sb.append(customDisplayText);
 			}	else if (nontranslated) {