diff --git a/src/main/java/org/olat/admin/landingpages/ui/LandingPagesAdminController.java b/src/main/java/org/olat/admin/landingpages/ui/LandingPagesAdminController.java
index d87a2d8228123724a5e60c809ff2d297155e99ec..121a46731bee8b17b9604b2e32f31d12986c3644 100644
--- a/src/main/java/org/olat/admin/landingpages/ui/LandingPagesAdminController.java
+++ b/src/main/java/org/olat/admin/landingpages/ui/LandingPagesAdminController.java
@@ -36,7 +36,7 @@ import org.olat.admin.landingpages.model.Rules;
 import org.olat.admin.landingpages.ui.RulesDataModel.RCols;
 import org.olat.basesecurity.BaseSecurityModule;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.dropdown.DropdownItem;
+import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
@@ -46,6 +46,7 @@ import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
+import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
@@ -54,8 +55,13 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionE
 import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiColumnModel;
 import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowController;
 import org.olat.core.util.Util;
 import org.olat.user.UserManager;
 import org.olat.user.propertyhandlers.UserPropertyHandler;
@@ -80,6 +86,10 @@ public class LandingPagesAdminController extends FormBasicController {
 	private final String[] attrKeys;
 	private final String[] attrValues;
 
+	private FormSubmit saveButton;
+	private ChooserController chooserCtrl;
+	private CloseableCalloutWindowController chooserCalloutCtrl;
+
 	@Autowired
 	private UserManager userManager;
 	@Autowired
@@ -157,7 +167,7 @@ public class LandingPagesAdminController extends FormBasicController {
 		
 		FormLayoutContainer buttonLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
 		formLayout.add("buttons", buttonLayout);
-		uifactory.addFormSubmitButton("save", buttonLayout);
+		saveButton = uifactory.addFormSubmitButton("save", buttonLayout);
 	}
 	
 	@Override
@@ -197,23 +207,13 @@ public class LandingPagesAdminController extends FormBasicController {
 		landingPageEl.setValue(rule.getLandingPath());
 		wrapper.setLandingPageEl(landingPageEl);
 		formLayout.add(landingPageEl);
-		
-		DropdownItem chooser = new DropdownItem("chooser-" + i, RCols.landingPageChooser.i18nKey(), getTranslator());
-		chooser.setButton(true);
-		chooser.setEmbbeded(true);
-		fillChooser(wrapper, chooser, formLayout);
+
+		FormLink chooser = uifactory.addFormLink("chooser-" + i, "chooser", RCols.landingPageChooser.i18nKey(), null, formLayout, Link.BUTTON);
+		chooser.setIconRightCSS("o_icon o_icon_caret");
+		chooser.setUserObject(wrapper);
 		wrapper.setLandingPageChooser(chooser);
 		return wrapper;
 	}
-	
-	private void fillChooser(RuleWrapper rule, DropdownItem chooser, FormItemContainer formLayout) {
-		int i = counter.incrementAndGet();
-		for(LandingPages lp:LandingPages.values()) {
-			FormLink link = uifactory.addFormLink(lp.name() + "-" + i, lp.name(), lp.i18nKey(), null, formLayout, Link.LINK);
-			link.setUserObject(rule);
-			chooser.addElement(link);
-		}
-	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
@@ -249,18 +249,53 @@ public class LandingPagesAdminController extends FormBasicController {
 		} else if(source instanceof FormLink && source.getUserObject() instanceof RuleWrapper) {
 			RuleWrapper rule = (RuleWrapper)source.getUserObject();
 			String cmd = ((FormLink)source).getCmd();
-			if("catalog".equals(cmd)) {
-				//do choose catalog
-			} else if("repo".equals(cmd)) {
-				
-			} else {
-				LandingPages lp = LandingPages.landingPageFromCmd(cmd);
+			if("chooser".equals(cmd)) {
+				FormLink link = (FormLink)source;
+				openChooser(ureq, rule, link);
+			}
+			saveButton.getComponent().setDirty(false);
+			source.getComponent().setDirty(false);
+			tableEl.getComponent().setDirty(false);
+			flc.setDirty(false);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if(chooserCtrl == source) {
+			if(event == Event.DONE_EVENT) {
+				LandingPages lp = chooserCtrl.getSelectedLandingPage();
+				RuleWrapper rule = chooserCtrl.getRow();
 				if(lp != null) {
 					rule.getLandingPageEl().setValue(lp.businessPath());
+					saveButton.getComponent().setDirty(true);
 				}
 			}
+			chooserCalloutCtrl.deactivate();
+			cleanUp();
 		}
-		super.formInnerEvent(ureq, source, event);
+		super.event(ureq, source, event);
+	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(chooserCtrl);
+		removeAsListenerAndDispose(chooserCalloutCtrl);
+		chooserCtrl = null;
+		chooserCalloutCtrl = null;
+	}
+
+	private void openChooser(UserRequest ureq, RuleWrapper row, FormLink link) {
+		removeAsListenerAndDispose(chooserCtrl);
+		removeAsListenerAndDispose(chooserCalloutCtrl);
+
+		chooserCtrl = new ChooserController(ureq, getWindowControl(), row);
+		listenTo(chooserCtrl);
+
+		chooserCalloutCtrl = new CloseableCalloutWindowController(ureq, getWindowControl(),
+				chooserCtrl.getInitialComponent(), link.getFormDispatchId(), "", true, "");
+		listenTo(chooserCalloutCtrl);
+		chooserCalloutCtrl.activate();
 	}
 	
 	private void addRow(RuleWrapper row) {
@@ -312,4 +347,53 @@ public class LandingPagesAdminController extends FormBasicController {
 		}
 		return rows;
 	}
+	
+	private class ChooserController extends BasicController {
+		
+		private final RuleWrapper row;
+		private LandingPages selectedLandingPage;
+		
+		public ChooserController(UserRequest ureq, WindowControl wControl, RuleWrapper row) {
+			super(ureq, wControl);
+			this.row = row;
+			VelocityContainer mainVC = createVelocityContainer("chooser");
+			
+			int i = counter.incrementAndGet();
+			List<String> links = new ArrayList<>();
+			for(LandingPages lp:LandingPages.values()) {
+				String name = lp.name() + "-" + i;
+				Link link = LinkFactory.createLink(name, lp.name(), getTranslator(), mainVC, this, Link.LINK | Link.NONTRANSLATED);
+				link.setCustomDisplayText(translate(lp.i18nKey()));
+				link.setUserObject(lp);
+				mainVC.put(name, link);
+				links.add(name);
+			}
+			mainVC.contextPut("links", links);
+			putInitialPanel(mainVC);
+		}
+		
+		public RuleWrapper getRow() {
+			return row;
+		}
+		
+		public LandingPages getSelectedLandingPage() {
+			return selectedLandingPage;
+		}
+
+		@Override
+		protected void event(UserRequest ureq, Component source, Event event) {
+			if(source instanceof Link) {
+				Link link = (Link)source;
+				if(link.getUserObject() instanceof LandingPages) {
+					selectedLandingPage = (LandingPages)link.getUserObject();
+				}
+			}
+			fireEvent(ureq, Event.DONE_EVENT);
+		}
+
+		@Override
+		protected void doDispose() {
+			//
+		}
+	}
 }
diff --git a/src/main/java/org/olat/admin/landingpages/ui/RuleWrapper.java b/src/main/java/org/olat/admin/landingpages/ui/RuleWrapper.java
index 385d57981ebc19ab9c82318fed5062ca1c42dc39..f80b597ee4f796096609b6e6efabe3f2711bcfa5 100644
--- a/src/main/java/org/olat/admin/landingpages/ui/RuleWrapper.java
+++ b/src/main/java/org/olat/admin/landingpages/ui/RuleWrapper.java
@@ -20,7 +20,7 @@
 package org.olat.admin.landingpages.ui;
 
 import org.olat.admin.landingpages.model.Rule;
-import org.olat.core.gui.components.dropdown.DropdownItem;
+import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 
@@ -39,7 +39,7 @@ public class RuleWrapper {
 	private SingleSelection attrNameEl;
 	private TextElement attrValueEl;
 	private TextElement landingPageEl;
-	private DropdownItem landingPageChooser;
+	private FormLink landingPageChooser;
 	
 	public RuleWrapper(Rule rule) {
 		this.rule = rule;
@@ -89,11 +89,11 @@ public class RuleWrapper {
 		this.landingPageEl = landingPageEl;
 	}
 	
-	public DropdownItem getLandingPageChooser() {
+	public FormLink getLandingPageChooser() {
 		return landingPageChooser;
 	}
 
-	public void setLandingPageChooser(DropdownItem landingPageChooser) {
+	public void setLandingPageChooser(FormLink landingPageChooser) {
 		this.landingPageChooser = landingPageChooser;
 	}
 
diff --git a/src/main/java/org/olat/admin/landingpages/ui/_content/chooser.html b/src/main/java/org/olat/admin/landingpages/ui/_content/chooser.html
new file mode 100644
index 0000000000000000000000000000000000000000..f020b64cc075f11f0dbaa0ce3b95aa902df3e3c4
--- /dev/null
+++ b/src/main/java/org/olat/admin/landingpages/ui/_content/chooser.html
@@ -0,0 +1,5 @@
+<ul class="list-unstyled">
+#foreach($link in $links)
+	<li>$r.render($link)</li>
+#end
+</ul>
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/components/link/LinkFactory.java b/src/main/java/org/olat/core/gui/components/link/LinkFactory.java
index 35e3de027c96dd1ac35837b991bfb4f0fdc629b4..c8f0a821068c0666020b104b5784e8a53ce3b9b2 100644
--- a/src/main/java/org/olat/core/gui/components/link/LinkFactory.java
+++ b/src/main/java/org/olat/core/gui/components/link/LinkFactory.java
@@ -127,6 +127,12 @@ public class LinkFactory {
 		return link;
 	}
 	
+	public static Link createLink(String name, String cmd, Translator translator, VelocityContainer vc, ComponentEventListener listener, int presentation) {
+		Link link = new Link(name, cmd, name, presentation, vc, listener);
+		link.setTranslator(translator);
+		return link;
+	}
+	
 	/**
 	 * add a link to the <code>vc</code> Velocity Container and make the <code>listeningController</code> listen to this link.<p>
 	 * Follow these instructions to show the link and catch its events: