diff --git a/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java b/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java
index 92231b327f5209fc83fe56144b436d8ed9e29482..6c2d196923b457bbaf43c2e641d1797f5a5105f6 100644
--- a/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java
+++ b/src/main/java/de/bps/olat/portal/institution/InstitutionPortletRunController.java
@@ -24,22 +24,17 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.olat.ControllerFactory;
 import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
 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.dtabs.DTab;
-import org.olat.core.gui.control.generic.dtabs.DTabs;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.UserConstants;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.repository.RepositoryEntry;
@@ -181,19 +176,8 @@ public class InstitutionPortletRunController extends BasicController {
 					if (!rm.isAllowedToLaunch(ureq, re)) {
 						getWindowControl().setWarning(translate("warn.cantlaunch"));
 					} else {
-						OLATResourceable ores = re.getOlatResource();
-						DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs();
-						DTab dt = dts.getDTab(ores);
-						if (dt == null) {
-							// does not yet exist -> create and add
-							dt = dts.createDTab(ores, re, re.getDisplayname());
-							if (dt == null) return;
-							Controller launchController = ControllerFactory.createLaunchController(ores, ureq, dt.getWindowControl(), true);
-							dt.setController(launchController);
-							dts.addDTab(ureq, dt);
-						}
-						dts.activate(ureq, dt, null); // null: do not activate a certain
-																					// view
+						WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(getWindowControl(), re);
+						NewControllerFactory.getInstance().launch(ureq, bwControl);
 					}
 				} else {
 					getWindowControl().setWarning(translate("warn.cantlaunch"));
diff --git a/src/main/java/org/olat/ControllerFactory.java b/src/main/java/org/olat/ControllerFactory.java
deleted file mode 100644
index 5417e53ffce3d8e8eb8727b6b8b49eabb6975b3b..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/ControllerFactory.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat;
-
-import java.util.Locale;
-
-import org.olat.admin.SystemAdminMainController;
-import org.olat.admin.UserAdminMainController;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.chiefcontrollers.BaseChiefController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.layout.MainLayoutController;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.Roles;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.OLATSecurityException;
-import org.olat.core.util.Util;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.course.CourseModule;
-import org.olat.course.assessment.AssessmentManager;
-import org.olat.course.nodes.ta.DropboxController;
-import org.olat.course.nodes.ta.ReturnboxController;
-import org.olat.group.BusinessGroup;
-import org.olat.group.BusinessGroupService;
-import org.olat.group.ui.BGControllerFactory;
-import org.olat.gui.demo.GUIDemoMainController;
-import org.olat.home.HomeMainController;
-import org.olat.home.InviteeHomeMainController;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoyUIFactory;
-
-
-/**
- *  Initial Date:  May 6, 2004
- *  @author gnaegi
- */
-public class ControllerFactory {
-	/**
-	 * Create a controller for a specific OLAT resource
-	 * 
-	 * @param olatResourceable The OLAT resource
-	 * @param initialViewIdentifier if null the default view will be started,
-	 *          otherwise a controllerfactory type dependant view will be
-	 *          activated (subscription subtype)
-	 * @param ureq
-	 * @param wControl
-	 * @param exceptIfNoneFound if true, then an exception will be thrown if no
-	 *          controller could be created for whatever reason. if false, the
-	 *          call will just return null.
-	 * @return the created controller
-	 */
-	public static MainLayoutController createLaunchController(OLATResourceable olatResourceable, UserRequest ureq,
-			WindowControl wControl, boolean exceptIfNoneFound) {
-		Roles roles = ureq.getUserSession().getRoles();
-		if (olatResourceable == null) {
-			// special case after login: guest will get guesthome, other user the
-			// normal home
-			if (ureq.getUserSession().getRoles().isGuestOnly()) return new HomeMainController(ureq, wControl);
-
-		} else if (OresHelper.isOfType(olatResourceable, "BGMainController")) {
-			if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a GroupMainController, but is in guest group " + roles);
-			return BGControllerFactory.getInstance().createGroupMainController(ureq, wControl);
-
-		} else if (OresHelper.isOfType(olatResourceable, BusinessGroup.class)) {
-			if (roles.isGuestOnly()) throw new OLATSecurityException("Tried to launch a BusinessGroup, but is in guest group " + roles);
-			BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
-			BusinessGroup bg = bgs.loadBusinessGroup(olatResourceable.getResourceableId());
-			// check if allowed to start (must be member or admin)
-			if (ureq.getUserSession().getRoles().isOLATAdmin() || ureq.getUserSession().getRoles().isGroupManager()
-					|| bgs.isIdentityInBusinessGroup(ureq.getIdentity(), bg)) {	
-				// only olatadmins or admins of this group can administer this group
-				return BGControllerFactory.getInstance().createRunControllerFor(ureq, wControl, bg);
-			}
-			// else skip
-
-		} else if (OresHelper.isOfType(olatResourceable, RepositoryEntry.class)) {
-			// it this is a respository type, the resourceableID is the repository
-			// entry key
-			RepositoryManager rm = RepositoryManager.getInstance();
-			RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable.getResourceableId());
-			MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);
-			if (ctrl != null) return ctrl;
-
-		} else if (OresHelper.isOfType(olatResourceable, CourseModule.class)) {
-			// gets called by subscription launcher
-			//FIXME:fj:make it clearer here: subscriptioncontext is always given by
-			// the surrounding resource, but for launching we always need the
-			// repoentry
-			// if it is a course, we also take the repository entry, since a course
-			// can only be called by a repoentry
-			RepositoryManager rm = RepositoryManager.getInstance();
-			RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable, false);
-			MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);
-			if (ctrl != null) return ctrl;
-		} else if (OresHelper.isOfType(olatResourceable, AssessmentManager.class)) {
-			// gets called by subscription launcher
-			//FIXME:fj:make it clearer here: subscriptioncontext is always given by
-			// the surrounding resource, but for launching we always need the
-			// repoentry
-			// if it is a course, we also take the repository entry, since a course
-			// can only be called by a repoentry
-			RepositoryManager rm = RepositoryManager.getInstance();
-			// launch course with view identifyer assessment tool. however notifications 
-			// publisher data provides not existing assessmentManager resource
-			OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId());
-			RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource, false);
-			MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);
-			if (ctrl != null) {
-				//TODO "assessmentTool"
-				return ctrl;
-			}
-		} else if (OresHelper.isOfType(olatResourceable, DropboxController.class)) {
-			// JumpIn-handling for task-dropbox notification 
-			RepositoryManager rm = RepositoryManager.getInstance();
-			OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId());
-			RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource,false);
-			if (re == null) {
-				return null;// found no repositoryEntry => return null
-			}
-			MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);	
-			if (ctrl != null) {
-				//TODO "assessmentTool:nodeChoose"
-				return ctrl;
-			}
-		} else if (OresHelper.isOfType(olatResourceable, ReturnboxController.class)) {
-			// JumpIn-handling for task-returnbox notification 
-			RepositoryManager rm = RepositoryManager.getInstance();
-			OLATResourceable fakedCourseResource = OresHelper.createOLATResourceableInstance(CourseModule.class, olatResourceable.getResourceableId());
-			RepositoryEntry re = rm.lookupRepositoryEntry(fakedCourseResource, false);
-			MainLayoutController ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);	
-			if (ctrl != null) return ctrl;
-		}
-		// --- home ---
-		else if (OresHelper.isOfType(olatResourceable, HomeMainController.class)) {
-			return new HomeMainController(ureq, wControl);
-		} else if (OresHelper.isOfType(olatResourceable, SystemAdminMainController.class)) {
-			if (!roles.isOLATAdmin()) throw new OLATSecurityException("Tried to launch a SystemAdminMainController, but is not in admin group " + roles);
-			return new SystemAdminMainController(ureq, wControl);
-		} else if (OresHelper.isOfType(olatResourceable, UserAdminMainController.class)) {
-			if (!roles.isUserManager()) throw new OLATSecurityException("Tried to launch a UserAdminMainController, but is not in admin group " + roles);
-			return new UserAdminMainController(ureq, wControl);
-		} else if (OresHelper.isOfType(olatResourceable, InviteeHomeMainController.class)) {
-			if (!roles.isInvitee()) throw new OLATSecurityException("Tried to launch a InviteeMainController, but is not an invitee " + roles);
-			return new InviteeHomeMainController(ureq, wControl);
-		} else if (OresHelper.isOfType(olatResourceable, GUIDemoMainController.class)) {
-			if (!roles.isOLATAdmin()) throw new OLATSecurityException("Tried to launch a GUIDemoMainController, but is not in admin group "
-					+ roles);
-			return new GUIDemoMainController(ureq, wControl);
-		} else { // ask the handlerfactory of the repository if it can handle it
-			// a repository entry ?
-			RepositoryManager rm = RepositoryManager.getInstance();
-			//OLAT-1842
-			//if the LaunchController is created from a link click in a 
-			//notification list/email then we cannot be strict in the repoentry lookup.
-			//Because the notification can live longer then the resource it is pointing to.
-			RepositoryEntry re = rm.lookupRepositoryEntry(olatResourceable, false);
-			//but now we have to handle the NULL case.
-			//from the method signature it follows that one can choose if the method
-			//should throw the "Unable to creat..." exception or to return null.
-			//Hence it follows to set the ctrl == null if no repoentry found.
-			MainLayoutController ctrl;
-			if(re == null){
-				ctrl = null;
-			} else {
-				ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);
-			}
-			if (ctrl != null) return ctrl;
-		}
-		
-		if (exceptIfNoneFound) {
-			throw new AssertException("Unable to create launch controller for resourceable: " + olatResourceable.getResourceableTypeName() + ", "
-					+ olatResourceable.getResourceableId());
-		} else {
-			return null;
-		}
-	}
-
-	/**
-	 * Translate a resourceableTypeName.
-	 * 
-	 * @param resourceableTypeName
-	 * @param locale
-	 * @return the String representing the type in the given locale
-	 */
-	public static String translateResourceableTypeName(String resourceableTypeName, Locale locale) {
-		//REVIEW:12-2007:CodeCleanup
-		//TODO: cache per locale?? -> Task for i18n manager
-		Translator trans = Util.createPackageTranslator(BaseChiefController.class, locale);
-		String tr = trans.translate(resourceableTypeName);
-		return tr;
-		//REVIEW:12-2007:CodeCleanup
-		//Localization.getInstance().getString("org.olat", resourceableTypeName, null, locale);
-	}
-
-	
-	
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/NewControllerFactory.java b/src/main/java/org/olat/NewControllerFactory.java
index fbaa4fe36db2f1f2ba65f849fb1da560753e7e91..24950097886a82197284a4ff68b3bdee17a7587e 100644
--- a/src/main/java/org/olat/NewControllerFactory.java
+++ b/src/main/java/org/olat/NewControllerFactory.java
@@ -31,8 +31,10 @@ package org.olat;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 
+import org.olat.core.commons.chiefcontrollers.BaseChiefController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Window;
@@ -40,6 +42,7 @@ import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.dtabs.DTab;
 import org.olat.core.gui.control.generic.dtabs.DTabs;
+import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.BusinessControlFactory;
@@ -49,6 +52,7 @@ import org.olat.core.id.context.TabContext;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.util.UserSession;
+import org.olat.core.util.Util;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
@@ -83,6 +87,11 @@ public class NewControllerFactory extends LogDelegator {
 	private NewControllerFactory() {
 	//
 	}
+	
+	public static String translateResourceableTypeName(String resourceableTypeName, Locale locale) {
+		Translator trans = Util.createPackageTranslator(BaseChiefController.class, locale);
+		return trans.translate(resourceableTypeName);
+	}
 
 	/**
 	 * Add a context entry controller creator for a specific key. This is used to
@@ -204,40 +213,24 @@ public class NewControllerFactory extends LogDelegator {
 			//simply return and don't throw a red screen
 			return false;
 		}
+		
+		List<ContextEntry> entries = new ArrayList<ContextEntry>(5);
+		while(bc.hasContextEntry()) {
+			entries.add(bc.popLauncherContextEntry());
+		}
+		List<ContextEntry> ces = new ArrayList<ContextEntry>(entries.size() + 1);
+		ces.add(mainCe);
+		if(entries.size() > 0) {
+			ces.addAll(entries);
+		}
 
-		//fxdiff BAKS-7 Resume function
-		String siteClassName = typeHandler.getSiteClassName(mainCe, ureq);
-			
+		TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries);
+		String siteClassName = typeHandler.getSiteClassName(ces, ureq);	
 		// open in existing site
 		if (siteClassName != null) {
-			// use special activation key to trigger the activate method
-			//fxdiff BAKS-7 Resume function
-			List<ContextEntry> entries = new ArrayList<ContextEntry>();
-			if (bc.hasContextEntry()) {
-				ContextEntry subContext = bc.popLauncherContextEntry();
-				if (subContext != null) {
-					entries.add(subContext);
-					while(bc.hasContextEntry()) {
-						entries.add(bc.popLauncherContextEntry());
-					}
-				}
-			} else if (!ceConsumed) {
-				//the olatresourceable is not in a dynamic tab but in a fix one
-				if(ores != null) {
-					entries.add(BusinessControlFactory.getInstance().createContextEntry(ores));
-				}
-			}
-
-			TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries);
 			dts.activateStatic(ureq, siteClassName, context.getContext());
 			return true;
 		} else {
-			List<ContextEntry> entries = new ArrayList<ContextEntry>();
-			while(bc.hasContextEntry()) {
-				entries.add(bc.popLauncherContextEntry());
-			}
-			TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries);
-			
 			// or create new tab
 			//String tabName = typeHandler.getTabName(mainCe, ureq);
 			// create and add Tab
@@ -248,7 +241,8 @@ public class NewControllerFactory extends LogDelegator {
 			} else {
 				WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, dt.getWindowControl());
 				usess.addToHistory(ureq, bc);
-				Controller launchC = typeHandler.createController(mainCe, ureq, bwControl);
+
+				Controller launchC = typeHandler.createController(ces, ureq, bwControl);
 				if (launchC == null) {
 					throw new AssertException("ControllerFactory could not create a controller to be launched. Please validate businesspath " 
 							+ bc.getAsString() + " for type " + typeHandler.getClass().getName() + " in advance with validateContextEntryAndShowError().");
diff --git a/src/main/java/org/olat/admin/site/AdminSite.java b/src/main/java/org/olat/admin/site/AdminSite.java
index 5088934e3a2d81c78d5656c1d6b8383456f5323c..ad149779d213b316f34d1523ad0cea3d51394d57 100644
--- a/src/main/java/org/olat/admin/site/AdminSite.java
+++ b/src/main/java/org/olat/admin/site/AdminSite.java
@@ -27,7 +27,6 @@ package org.olat.admin.site;
 
 import java.util.Locale;
 
-import org.olat.ControllerFactory;
 import org.olat.admin.SystemAdminMainController;
 import org.olat.core.commons.chiefcontrollers.BaseChiefController;
 import org.olat.core.gui.UserRequest;
@@ -48,7 +47,7 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.util.logging.activity.LoggingResourceable;
 /**
  * Description:<br>
- * TODO: Felix Jost Class Description for HomeSite
+ * Create the administration site
  * 
  * <P>
  * Initial Date:  19.07.2005 <br>
@@ -56,8 +55,6 @@ import org.olat.util.logging.activity.LoggingResourceable;
  * @author Felix Jost
  */
 public class AdminSite extends AbstractSiteInstance {
-	private static final OLATResourceable ORES_OLATADMINS = OresHelper.lookupType(SystemAdminMainController.class);
-
 	private NavElement origNavElem;
 	private NavElement curNavElem;
 
@@ -68,9 +65,7 @@ public class AdminSite extends AbstractSiteInstance {
 		curNavElem = new DefaultNavElement(origNavElem);
 	}
 
-	/**
-	 * @see org.olat.navigation.SiteInstance#getNavElement()
-	 */
+	@Override
 	public NavElement getNavElement() {
 		return curNavElem;
 	}
@@ -80,20 +75,16 @@ public class AdminSite extends AbstractSiteInstance {
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance(AdminSite.class, 0l);
 		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
 		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ureq, ores, new StateSite(this), wControl, true);
-		MainLayoutController c = ControllerFactory.createLaunchController(ORES_OLATADMINS, ureq, bwControl, true);
-		return c;
+		return new SystemAdminMainController(ureq, bwControl);
 	}
 
-	/**
-	 * @see org.olat.navigation.SiteInstance#isKeepState()
-	 */
+	@Override
 	public boolean isKeepState() {
 		return true;
 	}
-	
+
+	@Override
 	public void reset() {
 		curNavElem = new DefaultNavElement(origNavElem);
 	}
-
-}
-
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/site/UserAdminSite.java b/src/main/java/org/olat/admin/site/UserAdminSite.java
index 3736794820fd4144ddc8839bdfd1b25f2b1c46fc..3f6fd81e9af5d1b4b552c0919637c792fe04256b 100644
--- a/src/main/java/org/olat/admin/site/UserAdminSite.java
+++ b/src/main/java/org/olat/admin/site/UserAdminSite.java
@@ -27,7 +27,6 @@ package org.olat.admin.site;
 
 import java.util.Locale;
 
-import org.olat.ControllerFactory;
 import org.olat.admin.UserAdminMainController;
 import org.olat.core.commons.chiefcontrollers.BaseChiefController;
 import org.olat.core.gui.UserRequest;
@@ -49,11 +48,8 @@ import org.olat.util.logging.activity.LoggingResourceable;
 /**
  * Initial Date:  Jan 16, 2006
  * @author Florian Gnaegi
- * </pre>
  */
 public class UserAdminSite extends AbstractSiteInstance {
-	private static final OLATResourceable ORES_OLATUSERADMINS = OresHelper.lookupType(UserAdminMainController.class);
-
 	private NavElement origNavElem;
 	private NavElement curNavElem;
 
@@ -64,9 +60,7 @@ public class UserAdminSite extends AbstractSiteInstance {
 		curNavElem = new DefaultNavElement(origNavElem);
 	}
 
-	/**
-	 * @see org.olat.navigation.SiteInstance#getNavElement()
-	 */
+	@Override
 	public NavElement getNavElement() {
 		return curNavElem;
 	}
@@ -76,17 +70,15 @@ public class UserAdminSite extends AbstractSiteInstance {
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance(UserAdminSite.class, 0l);
 		ThreadLocalUserActivityLogger.addLoggingResourceInfo(LoggingResourceable.wrapBusinessPath(ores));
 		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ureq, ores, new StateSite(this), wControl, true);
-		MainLayoutController c = ControllerFactory.createLaunchController(ORES_OLATUSERADMINS, ureq, bwControl, true);
-		return c;
+		return new UserAdminMainController(ureq, bwControl);
 	}
 
-	/**
-	 * @see org.olat.navigation.SiteInstance#isKeepState()
-	 */
+	@Override
 	public boolean isKeepState() {
 		return true;
 	}
-	
+
+	@Override
 	public void reset() {
 		curNavElem = new DefaultNavElement(origNavElem);
 	}
diff --git a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java
index cbf841de28d7f7720eda6e2b01ef152c9f57d128..8b8fc95ca41b9842e17f750c5d56e9110164ab2a 100644
--- a/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/admin/user/UserAdminContextEntryControllerCreator.java
@@ -19,10 +19,10 @@
  */
 package org.olat.admin.user;
 
+import java.util.List;
+
 import org.olat.admin.site.UserAdminSite;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
 import org.olat.core.id.context.DefaultContextEntryControllerCreator;
@@ -43,35 +43,9 @@ public class UserAdminContextEntryControllerCreator extends DefaultContextEntryC
 		return this;
 	}
 
-	/**
-	 * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry,
-	 *      org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.WindowControl)
-	 */
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return null;
-	}
-
-	/**
-	 * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry)
-	 */
-	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 		// opened as site not tab
 		return UserAdminSite.class.getName();
 	}
-
-	/**
-	 * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry)
-	 */
-	@Override
-	public String getTabName(ContextEntry ce, UserRequest ureq) {
-		return null;
-	}
-
-	@Override
-	public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return true;
-	}
 }
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java
index a7492c8dadf360297383642718da0c2bdf58f4ce..af94f9a87741822a53b2eb636b32b432b28eada4 100644
--- a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksController.java
@@ -32,7 +32,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import org.olat.ControllerFactory;
 import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.services.mark.Mark;
@@ -205,7 +204,7 @@ public class BookmarksController extends BasicController {
 					return getBookmarkTitle(bm);
 				case 1:
 					String resType = bm.getDisplayrestype();
-					return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale));
+					return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale));
 				case 2:
 					String desc = bm.getDescription();
 					return (desc == null ? "n/a" : desc);
diff --git a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java
index db0860a1029c0b692475b3939ca5ac8b7e827a14..2fa864fe430d4cf1ba765d10cced8a346e3cd2ab 100644
--- a/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java
+++ b/src/main/java/org/olat/core/commons/services/mark/ui/BookmarksPortletRunController.java
@@ -34,7 +34,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import org.olat.ControllerFactory;
 import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.services.mark.Mark;
@@ -323,7 +322,7 @@ public class BookmarksPortletRunController extends AbstractPortletRunController<
 				return name;
 			case 1:
 				String resType = bookmark.getDisplayrestype();
-				return ControllerFactory.translateResourceableTypeName(resType, locale);
+				return NewControllerFactory.translateResourceableTypeName(resType, locale);
 			default:
 				return "ERROR";
 			}
@@ -379,7 +378,7 @@ public class BookmarksPortletRunController extends AbstractPortletRunController<
 					return (desc == null ? "n/a" : FilterFactory.getHtmlTagsFilter().filter(desc));
 				case 2:
 					String resType = bm.getDisplayrestype();
-					return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale));
+					return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale));
 				case 3:
 					Date date = bm.getCreationDate();
 					//return DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, getTranslator().getLocale()).format(date);
diff --git a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
index cde91316c0e6c75c5b51329a7d66835bde421f17..de0c418bbec358088fd2ce120fcb789cf9247285 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/manager/NotificationsManagerImpl.java
@@ -43,7 +43,7 @@ import javax.persistence.LockModeType;
 import javax.persistence.TypedQuery;
 
 import org.hibernate.FlushMode;
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DB;
@@ -1041,7 +1041,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 	private String getFormatedTitle(SubscriptionInfo subsInfo, Subscriber subscriber, Locale locale, String mimeType){
 		Publisher pub = subscriber.getPublisher();
 		String innerType = pub.getType();
-		String typeName = ControllerFactory.translateResourceableTypeName(innerType, locale);
+		String typeName = NewControllerFactory.translateResourceableTypeName(innerType, locale);
 		StringBuilder titleSb = new StringBuilder();
 		titleSb.append(typeName);
 		
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java
index ee7a27a712f435b8b5d1b64689aadb62b266779f..c96d5595edcfdd1889f505f6b6fb793ad5e3dad6 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/DateChooserController.java
@@ -24,7 +24,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.commons.services.notifications.Subscriber;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -176,7 +176,7 @@ public class DateChooserController extends FormBasicController {
 		
 		int count = 1;
 		for(String type:types) {
-			String typeName = ControllerFactory.translateResourceableTypeName(type, getLocale());
+			String typeName = NewControllerFactory.translateResourceableTypeName(type, getLocale());
 			typeKeys[count] = type;
 			typeValues[count++] = typeName;
 		}
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java
index 9a078129e250f60e21b2d826ce84bbd6648c1f9f..80ddbd7a46b13ffe4e361de5aed08892f475adfc 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionAndNewsFormatter.java
@@ -26,7 +26,7 @@ package org.olat.core.commons.services.notifications.ui;
 
 import java.util.Map;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.Publisher;
 import org.olat.core.commons.services.notifications.Subscriber;
@@ -57,15 +57,13 @@ public class NotificationSubscriptionAndNewsFormatter {
 	public String getType(Subscriber sub) {
 		Publisher pub = sub.getPublisher();
 		String innerType = pub.getType();
-		String typeName = ControllerFactory.translateResourceableTypeName(innerType, translator.getLocale());
-		return typeName;
+		return NewControllerFactory.translateResourceableTypeName(innerType, translator.getLocale());
 	}
 
 	public String getContainerType(Subscriber sub) {
 		Publisher pub = sub.getPublisher();
 		String containerType = pub.getResName();
-		String containerTypeTrans = ControllerFactory.translateResourceableTypeName(containerType, translator.getLocale());
-		return containerTypeTrans;
+		return NewControllerFactory.translateResourceableTypeName(containerType, translator.getLocale());
 	}
 
 	public boolean hasNews(Subscriber sub) {
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java
index 928265d387a6da43de4cf3ef17d0295737920541..7ee74ef1e66ec1b6c0f78a999d8835957e7d1861 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationSubscriptionTableDataModel.java
@@ -19,7 +19,7 @@
  */
 package org.olat.core.commons.services.notifications.ui;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.commons.services.notifications.NotificationsHandler;
 import org.olat.core.commons.services.notifications.NotificationsManager;
 import org.olat.core.commons.services.notifications.Publisher;
@@ -82,12 +82,10 @@ class NotificationSubscriptionTableDataModel extends DefaultTableDataModel<Subsc
 		switch (col) {
 			case 0:
 				String innerType = pub.getType();
-				String typeName = ControllerFactory.translateResourceableTypeName(innerType, getLocale());
-				return typeName;
+				return NewControllerFactory.translateResourceableTypeName(innerType, getLocale());
 			case 1:
 				String containerType = pub.getResName();
-				String containerTypeTrans = ControllerFactory.translateResourceableTypeName(containerType, getLocale());
-				return containerTypeTrans;
+				return NewControllerFactory.translateResourceableTypeName(containerType, getLocale());
 			case 2:
 				NotificationsHandler handler = NotificationsManager.getInstance().getNotificationsHandler(pub);
 				if(handler == null){
diff --git a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java
index 24ef05c58682c82102968b44dd52d978d5badc34..6e6e8079ca93300777b3ab717a2875a493d797ca 100644
--- a/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java
+++ b/src/main/java/org/olat/core/commons/services/notifications/ui/NotificationsPortletRunController.java
@@ -33,7 +33,6 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 
-import org.olat.ControllerFactory;
 import org.olat.NewControllerFactory;
 import org.olat.core.commons.services.notifications.NotificationHelper;
 import org.olat.core.commons.services.notifications.NotificationUIFactory;
@@ -296,8 +295,8 @@ public class NotificationsPortletRunController extends AbstractPortletRunControl
 				  } else if(sortingCriteria.getSortingTerm()==SortingCriteria.DATE_SORTING) {
 				  	comparisonResult = subscriber1.getLastModified().compareTo(subscriber1.getLastModified());
 				  } else if(sortingCriteria.getSortingTerm()==SortingCriteria.TYPE_SORTING) {
-				  	String type1 = ControllerFactory.translateResourceableTypeName(subscriber1.getPublisher().getType(), getTranslator().getLocale());
-				  	String type2 = ControllerFactory.translateResourceableTypeName(subscriber2.getPublisher().getType(), getTranslator().getLocale());
+				  	String type1 = NewControllerFactory.translateResourceableTypeName(subscriber1.getPublisher().getType(), getTranslator().getLocale());
+				  	String type2 = NewControllerFactory.translateResourceableTypeName(subscriber2.getPublisher().getType(), getTranslator().getLocale());
 				  	comparisonResult = type1.compareTo(type2);
 				  }
 				  if(!sortingCriteria.isAscending()) {
@@ -345,8 +344,7 @@ public class NotificationsPortletRunController extends AbstractPortletRunControl
 						return "";
 					case 1:					
 						String innerType = pub.getType();
-						String typeName = ControllerFactory.translateResourceableTypeName(innerType, locale);
-						return typeName;
+						return NewControllerFactory.translateResourceableTypeName(innerType, locale);
 					default:
 						return "ERROR";
 				}
@@ -399,8 +397,7 @@ public class NotificationsPortletRunController extends AbstractPortletRunControl
 					}
 					case 2:
 						String innerType = pub.getType();
-						String typeName = ControllerFactory.translateResourceableTypeName(innerType, locale);
-						return typeName;
+						return NewControllerFactory.translateResourceableTypeName(innerType, locale);
 					default:
 						return "error";
 				}
diff --git a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java
index ac9572086c8a53ea1fc8607eeffecdc67c1c1dc4..c25e329d9672a88ab7be131be04a0212f1b5ce15 100644
--- a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java
+++ b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java
@@ -222,6 +222,20 @@ public class BusinessControlFactory {
 		return wc;
 	}
 	
+	public WindowControl createBusinessWindowControl(WindowControl origWControl, OLATResourceable... ores) {
+		List<ContextEntry> ces;
+		if(ores != null && ores.length > 0) {
+			ces = new ArrayList<ContextEntry>(ores.length);
+			for(OLATResourceable o:ores) {
+				ces.add(createContextEntry(o));
+			}
+		} else {
+			ces = Collections.emptyList();
+		}
+		BusinessControl bc = createFromContextEntries(ces);
+		return createBusinessWindowControl(bc, origWControl);
+	}
+	
 	public BusinessControl getEmptyBusinessControl() {
 		// immutable, so therefore we can reuse it
 		return EMPTY;
diff --git a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java
index e654a7fa65f4d485f698d1807e9e72dd91f79c4b..90f4dd40d23812b35a9e96c62539187bc00e7ef8 100644
--- a/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/core/id/context/ContextEntryControllerCreator.java
@@ -69,7 +69,7 @@ public interface ContextEntryControllerCreator {
 	 * @param wControl
 	 * @return the controller or NULL if the context is an existing site
 	 */
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl);
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl);
 
 	/**
 	 * The class name of the site that must be activated or NULL if opened as dTab
@@ -78,7 +78,7 @@ public interface ContextEntryControllerCreator {
 	 * @return Return the class name that is used to activate an existing site or
 	 *         NULL if the target is a new dtab
 	 */
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq);
+	public String getSiteClassName(List<ContextEntry> entries, UserRequest ureq);
 	
 	/**
 	 * 
diff --git a/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java
index a3f3b4038b38ea8c55ac6869eae8f5e8aac57ad6..bf45fde82593fce876e4358518fc2327b4170f2d 100644
--- a/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/core/id/context/DefaultContextEntryControllerCreator.java
@@ -37,16 +37,17 @@ public abstract class DefaultContextEntryControllerCreator implements ContextEnt
 	public abstract ContextEntryControllerCreator clone();
 
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
 		return null;
 	}
 
+	@SuppressWarnings("unused")
 	public String getTabName(ContextEntry ce, UserRequest ureq) {
 		return null;
 	}
 
 	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 		return null;
 	}
 
diff --git a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java
index 1944c1c7c723767dad0f154138f726eb2566e691..231766646ff0e5525424ed6039b9247979a4f441 100644
--- a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java
@@ -20,9 +20,9 @@
 
 package org.olat.core.id.context;
 
+import java.util.List;
+
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.navigation.SiteInstance;
 
 /**
@@ -46,22 +46,8 @@ public class SiteContextEntryControllerCreator extends DefaultContextEntryContro
 		return this;
 	}
 
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return null;
-	}
-
 	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 		return site.getName();
 	}
-
-	@Override
-	public String getTabName(ContextEntry ce, UserRequest ureq) {
-		return null;
-	}
-
-	@Override
-	public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return true;
-	}
 }
diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java
index 2c209dfefe194f3c0911a3ddf5c4c43ff8023c16..aadae012c7fa84aab3b417017bfc6db46151d398 100644
--- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java
+++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java
@@ -27,7 +27,6 @@ import java.util.Locale;
 
 import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.core.id.context.BusinessControl;
@@ -157,24 +156,8 @@ public class MailBoxExtension extends BasicManager implements MailContextResolve
 		}
 
 		@Override
-		public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return null;
-		}
-
-		@Override
-		public String getTabName(ContextEntry ce, UserRequest ureq) {
-			// opens in home-tab
-			return null;
-		}
-
-		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 			return HomeSite.class.getName();
 		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return true;
-		}
 	}
 }
diff --git a/src/main/java/org/olat/course/CourseModule.java b/src/main/java/org/olat/course/CourseModule.java
index 63c91b266c9788eb8fc9ac9717acedfa3483f849..2d9a10b544a66b93cb1112039567624a6e0f9cd7 100644
--- a/src/main/java/org/olat/course/CourseModule.java
+++ b/src/main/java/org/olat/course/CourseModule.java
@@ -31,7 +31,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import org.olat.NewControllerFactory;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.configuration.AbstractOLATModule;
@@ -47,7 +46,6 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.course.assessment.AssessmentManager;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.environment.CourseEnvironment;
-import org.olat.course.site.CourseSiteContextEntryControllerCreator;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
 import org.olat.repository.RepositoryEntry;
@@ -146,9 +144,6 @@ public class CourseModule extends AbstractOLATModule {
 		// skip all the expensive course demo setup and deployment when we are in junit mode.
 		if (Settings.isJUnitTest()) return;
 		
-		NewControllerFactory.getInstance().addContextEntryControllerCreator(RepositoryEntry.class.getSimpleName(),
-				new CourseSiteContextEntryControllerCreator());
-		
 		logInfo("Initializing the OpenOLAT course system");		
 		
 		// Cleanup, otherwise this subjects will have problems in normal OLAT
diff --git a/src/main/java/org/olat/course/DisposedCourseRestartController.java b/src/main/java/org/olat/course/DisposedCourseRestartController.java
index 5f159096792ee88e24ffb9f26529bc9800d68068..bfbefee4953fdc3acfb93d1ddb691a6515ca687d 100644
--- a/src/main/java/org/olat/course/DisposedCourseRestartController.java
+++ b/src/main/java/org/olat/course/DisposedCourseRestartController.java
@@ -24,22 +24,20 @@
 */
 package org.olat.course;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.panel.StackedPanel;
 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.dtabs.DTab;
-import org.olat.core.gui.control.generic.dtabs.DTabs;
 import org.olat.core.gui.control.generic.messages.MessageController;
 import org.olat.core.gui.control.generic.messages.MessageUIFactory;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.repository.RepositoryEntry;
 import org.olat.resource.OLATResourceManager;
 
@@ -83,34 +81,23 @@ public class DisposedCourseRestartController extends BasicController {
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == restartLink) {
-			DTabs dts = getWindowControl().getWindowBackOffice().getWindow().getDTabs();
 			OLATResourceable ores = OLATResourceManager.getInstance().findResourceable(
-					courseRepositoryEntry.getOlatResource().getResourceableId(), courseRepositoryEntry.getOlatResource().getResourceableTypeName());
+					courseRepositoryEntry.getOlatResource().getResourceableId(),
+					courseRepositoryEntry.getOlatResource().getResourceableTypeName());
 			if(ores==null) {
 				//course was deleted!				
 				MessageController msgController = MessageUIFactory.createInfoMessage(ureq, this.getWindowControl(), translate("course.deleted.title"), translate("course.deleted.text"));
 				panel.setContent(msgController.getInitialComponent());				
 				return;
 			}
-			DTab dt = dts.getDTab(ores);
-			// remove and dispose "old course run"
-			dts.removeDTab(ureq, dt);//disposes also dt and controllers
-			/*
-			 * create new tab with "refreshed course run" and activate the course
-			 */
-			//fxdiff BAKS-7 Resume function
-			dt = dts.createDTab(ores, courseRepositoryEntry, courseRepositoryEntry.getDisplayname());
-			if (dt == null) return; // full tabs -> warning already set by
-															// dts.create...
-			Controller launchController = ControllerFactory.createLaunchController(ores, ureq, dt.getWindowControl(), true);
-			dt.setController(launchController);
-			dts.addDTab(ureq, dt);
-			dts.activate(ureq, dt, null);
+			
+			WindowControl bwControl = BusinessControlFactory.getInstance()
+					.createBusinessWindowControl(getWindowControl(), courseRepositoryEntry);
+			NewControllerFactory.getInstance().launch(ureq, bwControl);
 			/*
 			 * last but not least dispose myself - to clean up.
 			 */
 			dispose();
 		}
 	}
-
 }
diff --git a/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java b/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java
index cee86d9794068e38e18b9a67510dda3cce6f9e9b..b421434e41d9e459c941053ffd42de5d6d3f0039 100644
--- a/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java
+++ b/src/main/java/org/olat/course/assessment/EfficiencyStatementsListController.java
@@ -29,12 +29,11 @@ import java.util.Date;
 import java.util.List;
 import java.util.Locale;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.table.BooleanColumnDescriptor;
 import org.olat.core.gui.components.table.ColumnDescriptor;
@@ -51,14 +50,12 @@ 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.creator.ControllerCreator;
-import org.olat.core.gui.control.generic.dtabs.DTab;
-import org.olat.core.gui.control.generic.dtabs.DTabs;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.gui.control.generic.popup.PopupBrowserWindow;
 import org.olat.core.gui.render.Renderer;
 import org.olat.core.gui.render.StringOutput;
-import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.course.assessment.model.UserEfficiencyStatementLight;
 import org.olat.course.assessment.portfolio.EfficiencyStatementArtefact;
@@ -163,21 +160,8 @@ public class EfficiencyStatementsListController extends BasicController {
 					} else if (!rm.isAllowedToLaunch(ureq, re)) {
 						showWarning("efficiencyStatements.course.noaccess");
 					} else {
-						OLATResourceable ores = re.getOlatResource();
-						//was brasato:: DTabs dts = getWindowControl().getDTabs();
-						DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs();
-						DTab dt = dts.getDTab(ores);
-						if (dt == null) {
-							// does not yet exist -> create and add
-							//fxdiff BAKS-7 Resume function
-							dt = dts.createDTab(ores, re, efficiencyStatement.getShortTitle());
-							if (dt == null) return;
-							Controller launchController = ControllerFactory.createLaunchController(ores, ureq, dt.getWindowControl(), true);
-							dt.setController(launchController);
-							dts.addDTab(ureq, dt);
-						}
-						dts.activate(ureq, dt, null);  // null: do not activate to a certain view
-
+						WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(getWindowControl(), re);
+						NewControllerFactory.getInstance().launch(ureq, bwControl);
 					}
 				} else if (actionid.equals(CMD_DELETE)) {					
 					// show confirmation dialog
diff --git a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java
index 0dc72589ba2d2ee743db2da3caf7d1f3dce84392..340d89c82fa2616d3a9020e0fa08950f7d1387e5 100644
--- a/src/main/java/org/olat/course/nodes/CourseNodeFactory.java
+++ b/src/main/java/org/olat/course/nodes/CourseNodeFactory.java
@@ -44,7 +44,6 @@ import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.logging.AssertException;
 import org.olat.repository.RepositoryEntry;
-import org.olat.repository.controllers.RepositoryDetailsController;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
 
@@ -134,6 +133,7 @@ public class CourseNodeFactory {
 			// do nothing
 			return;
 		}
+		
 		RepositoryHandler typeToEdit = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
 		if (!typeToEdit.supportsEdit(repositoryEntry)){
 			throw new AssertException("Trying to edit repository entry which has no assoiciated editor: "+ typeToEdit);
@@ -159,7 +159,7 @@ public class CourseNodeFactory {
 			dt.setController(editorController);
 			dts.addDTab(ureq, dt);
 		}
-		List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType(RepositoryDetailsController.ACTIVATE_EDITOR);
+		List<ContextEntry> entries = BusinessControlFactory.getInstance().createCEListFromResourceType("activateEditor");
 		dts.activate(ureq, dt, entries);
 	}
 	
diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java
index 47169cb4027eedfc3439304f15e82d630fd95d35..04064f47a5610e366dc87e0805815b32bbc7506f 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java
@@ -479,8 +479,7 @@ public class IQEditController extends ActivateableTabbableDefaultController impl
 			listenTo(searchController);
 			cmc = new CloseableModalController(getWindowControl(), translate("close"), searchController.getInitialComponent(), true, translate("command.chooseRepFile"));
 			cmc.activate();
-		}
-		else if (source == changeTestButton) {//change associated test
+		} else if (source == changeTestButton) {//change associated test
 			if(type.equals(AssessmentInstance.QMD_ENTRY_TYPE_SELF)) {//selftest
 				String[] types = new String[]{TestFileResource.TYPE_NAME};
 				searchController = new ReferencableEntriesSearchController(getWindowControl(), ureq, types, translate("command.chooseTest"));
diff --git a/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java b/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java
index 4847a5ab2d58f4ce6536d4e39a66a854d87a1e39..e7b4f9762aeba30a366ecf46dc308d3d0c0dfe82 100644
--- a/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java
+++ b/src/main/java/org/olat/course/nodes/wiki/WikiEditController.java
@@ -25,6 +25,7 @@
 
 package org.olat.course.nodes.wiki;
 
+import org.olat.NewControllerFactory;
 import org.olat.core.commons.services.notifications.SubscriptionContext;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -59,7 +60,6 @@ import org.olat.modules.wiki.WikiSecurityCallbackImpl;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.controllers.ReferencableEntriesSearchController;
-import org.olat.repository.controllers.RepositoryDetailsController;
 
 /**
  * Description: <BR/>Edit controller for single page course nodes <P/> Initial
@@ -202,7 +202,8 @@ public class WikiEditController extends ActivateableTabbableDefaultController im
 				// do nothing
 				return;
 			}
-			RepositoryDetailsController.doEdit(ureq, repositoryEntry);
+			String bPath = "[RepositoryEntry:" + repositoryEntry.getKey() + "][Editor:0]";
+			NewControllerFactory.getInstance().launch(bPath, ureq, getWindowControl());
 		}
 	}
 
diff --git a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java
index a3b2afbdea23f443f0efd432bf1aa8f2ad3a64c1..ef706b7433be4e166a74100c030f93a8226f4c74 100644
--- a/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/course/site/CourseSiteContextEntryControllerCreator.java
@@ -28,6 +28,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.navigation.SiteDefinition;
 import org.olat.core.gui.control.navigation.SiteDefinitions;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.Roles;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
 import org.olat.core.id.context.DefaultContextEntryControllerCreator;
@@ -36,6 +37,8 @@ import org.olat.course.site.model.LanguageConfiguration;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.RepositoyUIFactory;
+import org.olat.repository.handlers.RepositoryHandler;
+import org.olat.repository.handlers.RepositoryHandlerFactory;
 
 /**
  * <h3>Description:</h3>
@@ -63,10 +66,26 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry
 	 *      org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		RepositoryEntry re = getRepositoryEntry(ce);
-		Controller ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);
-		return ctrl;
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
+		Controller ctrl = null;;
+		RepositoryEntry re = getRepositoryEntry(ces.get(0));
+		if(ces.size() > 1) {
+			ContextEntry subcontext = ces.get(1);
+			if("Editor".equals(subcontext.getOLATResourceable().getResourceableTypeName())) {
+				RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re);
+				if(handler != null && handler.supportsEdit(re) && isAllowedToEdit(ureq, re)) {
+					ctrl = handler.createEditorController(re, ureq, wControl);
+				}
+			}
+		}
+		
+		return ctrl == null ? RepositoyUIFactory.createLaunchController(re, ureq, wControl) : ctrl;
+	}
+	
+	private boolean isAllowedToEdit(UserRequest ureq, RepositoryEntry re) {
+		Roles roles = ureq.getUserSession().getRoles();
+		return roles.isOLATAdmin()
+				|| RepositoryManager.getInstance().isOwnerOfRepositoryEntry(ureq.getIdentity(), re);
 	}
 
 	/**
@@ -86,8 +105,8 @@ public class CourseSiteContextEntryControllerCreator extends DefaultContextEntry
 	 * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry)
 	 */
 	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
-		RepositoryEntry re = getRepositoryEntry(ce);
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
+		RepositoryEntry re = getRepositoryEntry(ces.get(0));
 		CourseSiteDef siteDef = getCourseSite(ureq, re);
 		if(siteDef != null) {
 			return siteDef.getClass().getName().replace("Def", "");
diff --git a/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java b/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java
index 58f658a33eb0cc4616b4dc6f080036d1229b1b07..32facfa20fd688f439ce7fb24b7c225dcbf05f28 100644
--- a/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/group/BusinessGroupCardContextEntryControllerCreator.java
@@ -19,6 +19,8 @@
  */
 package org.olat.group;
 
+import java.util.List;
+
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
@@ -48,8 +50,8 @@ public class BusinessGroupCardContextEntryControllerCreator extends DefaultConte
 	 *      org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		BusinessGroup bgroup = getBusinessGroup(ce);
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
+		BusinessGroup bgroup = getBusinessGroup(ces.get(0));
 		if(bgroup != null) {
 			return new GroupInfoMainController(ureq, wControl, bgroup);
 		}
diff --git a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java
index 619be44388769cd6f701620f03ca1c42f78bd118..3fc4a2fafd2f7ba75fded98a85b5f21924ba7972 100644
--- a/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/group/BusinessGroupContextEntryControllerCreator.java
@@ -20,6 +20,7 @@
 package org.olat.group;
 
 import java.util.Date;
+import java.util.List;
 
 import org.olat.basesecurity.Constants;
 import org.olat.core.CoreSpringFactory;
@@ -60,9 +61,10 @@ public class BusinessGroupContextEntryControllerCreator extends DefaultContextEn
 	 *      org.olat.core.gui.UserRequest,
 	 *      org.olat.core.gui.control.WindowControl)
 	 */
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
+	@Override
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
 		Controller ctrl = null;
-		BusinessGroup bgroup = getBusinessGroup(ce);
+		BusinessGroup bgroup = getBusinessGroup(ces.get(0));
 		if(bgroup != null && isAuthorized(ureq, bgroup)) {
 			ctrl = BGControllerFactory.getInstance().createRunControllerFor(ureq, wControl, bgroup);
 		}
diff --git a/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java b/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java
index 55c75a138e050d164eda39bce0ea5c11427019c6..480dba12aa4ec8fb3b4151121568f8f54ffc2c9e 100644
--- a/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java
+++ b/src/main/java/org/olat/gui/demo/site/GUIDemoSite.java
@@ -25,7 +25,6 @@
 
 package org.olat.gui.demo.site;
 
-import org.olat.ControllerFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.layout.MainLayoutController;
@@ -34,58 +33,43 @@ import org.olat.core.gui.control.navigation.DefaultNavElement;
 import org.olat.core.gui.control.navigation.NavElement;
 import org.olat.core.gui.control.navigation.SiteConfiguration;
 import org.olat.core.gui.control.navigation.SiteDefinition;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.resource.OresHelper;
 import org.olat.gui.demo.GUIDemoMainController;
 /**
  * 
  * Description:<br>
- * TODO: Lavinia Dumitrescu Class Description for GUIDemoSite
+ * Create the main demo controller
  * 
  * <P>
  * Initial Date:  11.09.2007 <br>
  * @author Lavinia Dumitrescu
  */
 public class GUIDemoSite extends AbstractSiteInstance {
-	private static final OLATResourceable ORES_TESTING = OresHelper.lookupType(GUIDemoMainController.class);
-	
 	private NavElement origNavElem;
 	private NavElement curNavElem;
-	/**
-	 * 
-	 */
+
 	public GUIDemoSite(SiteDefinition siteDef) {
 		super(siteDef);
 		origNavElem = new DefaultNavElement("gui_demo", "gui demo", "o_site_guidemo");
 		curNavElem = new DefaultNavElement(origNavElem);
 	}
 
-	/**
-	 * @see org.olat.navigation.SiteInstance#getNavElement()
-	 */
+	@Override
 	public NavElement getNavElement() {
 		return curNavElem;
 	}
 
 	@Override
 	protected MainLayoutController createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) {
-		MainLayoutController c = ControllerFactory.createLaunchController(ORES_TESTING, ureq, wControl, true);
-		return c;
+		return new GUIDemoMainController(ureq, wControl);
 	}
 
-	/**
-	 * @see org.olat.navigation.SiteInstance#isKeepState()
-	 */
+	@Override
 	public boolean isKeepState() {
 		return true;
 	}
 	
-	/**
-	 * @see org.olat.navigation.SiteInstance#reset()
-	 */
+	@Override
 	public void reset() {
 		curNavElem = new DefaultNavElement(origNavElem);
 	}
-
-}
-
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/home/GuestHomeSite.java b/src/main/java/org/olat/home/GuestHomeSite.java
deleted file mode 100644
index eb146e5d2063e8fed5f756aad0f29dddc04c3be1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/home/GuestHomeSite.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.home;
-
-import java.util.Locale;
-
-import org.olat.ControllerFactory;
-import org.olat.core.commons.chiefcontrollers.BaseChiefController;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.generic.layout.MainLayoutController;
-import org.olat.core.gui.control.navigation.AbstractSiteInstance;
-import org.olat.core.gui.control.navigation.DefaultNavElement;
-import org.olat.core.gui.control.navigation.NavElement;
-import org.olat.core.gui.control.navigation.SiteConfiguration;
-import org.olat.core.gui.control.navigation.SiteDefinition;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.util.Util;
-import org.olat.core.util.resource.OresHelper;
-/**
- * Initial Date:  19.07.2005 <br>
- * @author Felix Jost
- */
-public class GuestHomeSite extends AbstractSiteInstance {
-	private static final OLATResourceable ORES_GUEST = OresHelper.lookupType(GuestHomeMainController.class);
-	
-	private NavElement origNavElem;
-	private NavElement curNavElem;
-	/**
-	 * 
-	 */
-	public GuestHomeSite(SiteDefinition siteDef, Locale loc) {
-		super(siteDef);
-		Translator trans = Util.createPackageTranslator(BaseChiefController.class, loc);
-		origNavElem = new DefaultNavElement(trans.translate("topnav.guesthome"), trans.translate("topnav.guesthome.alt"), "o_site_home");		
-		curNavElem = new DefaultNavElement(origNavElem);
-	}
-
-	/**
-	 * @see org.olat.navigation.SiteInstance#getNavElement()
-	 */
-	public NavElement getNavElement() {
-		return curNavElem;
-	}
-	
-	@Override
-	protected MainLayoutController createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) {
-		MainLayoutController c = ControllerFactory.createLaunchController(ORES_GUEST, ureq, wControl, true);
-		return c;
-	}
-
-	/**
-	 * @see org.olat.navigation.SiteInstance#isKeepState()
-	 */
-	public boolean isKeepState() {
-		return true;
-	}
-	
-	public void reset() {
-		curNavElem = new DefaultNavElement(origNavElem);
-	}
-
-}
-
diff --git a/src/main/java/org/olat/home/InviteeHomeSite.java b/src/main/java/org/olat/home/InviteeHomeSite.java
index 0aed133b95bb2607ca11667c20f0d3c77b16239e..2f6e930ae8cc0e44633ad63bc298c907affb89a3 100644
--- a/src/main/java/org/olat/home/InviteeHomeSite.java
+++ b/src/main/java/org/olat/home/InviteeHomeSite.java
@@ -21,7 +21,6 @@ package org.olat.home;
 
 import java.util.Locale;
 
-import org.olat.ControllerFactory;
 import org.olat.core.commons.chiefcontrollers.BaseChiefController;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.WindowControl;
@@ -32,22 +31,19 @@ import org.olat.core.gui.control.navigation.NavElement;
 import org.olat.core.gui.control.navigation.SiteConfiguration;
 import org.olat.core.gui.control.navigation.SiteDefinition;
 import org.olat.core.gui.translator.Translator;
-import org.olat.core.id.OLATResourceable;
+import org.olat.core.logging.OLATSecurityException;
 import org.olat.core.util.Util;
-import org.olat.core.util.resource.OresHelper;
 
 /**
  * 
  * Description:<br>
- * TODO: srosse Class Description for InviteeHomeSite
+ * Create the home site for invitee
  * 
  * <P>
  * Initial Date:  7 déc. 2010 <br>
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class InviteeHomeSite extends AbstractSiteInstance {
-	private static final OLATResourceable ORES_INVITEE = OresHelper.lookupType(InviteeHomeMainController.class);
-
 	private NavElement origNavElem;
 	private NavElement curNavElem;
 
@@ -67,8 +63,10 @@ public class InviteeHomeSite extends AbstractSiteInstance {
 
 	@Override
 	protected MainLayoutController createController(UserRequest ureq, WindowControl wControl, SiteConfiguration config) {
-		MainLayoutController c = ControllerFactory.createLaunchController(ORES_INVITEE, ureq, wControl, true);
-		return c;
+		if (!ureq.getUserSession().getRoles().isInvitee()) {
+			throw new OLATSecurityException("Tried to launch a InviteeMainController, but is not an invitee " + ureq.getUserSession().getRoles());
+		}
+		return new InviteeHomeMainController(ureq, wControl);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java
index 424a9c4a7e829debdb783a8e1ac877c0def79850..d386953d343b913051452bdb2b12c024e83641e0 100644
--- a/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java
+++ b/src/main/java/org/olat/home/controllerCreators/GuestHomeCEControllerCreator.java
@@ -19,8 +19,9 @@
  */
 package org.olat.home.controllerCreators;
 
+import java.util.List;
+
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
@@ -37,10 +38,6 @@ import org.olat.home.HomeSite;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
 public class GuestHomeCEControllerCreator extends DefaultContextEntryControllerCreator {
-
-	public GuestHomeCEControllerCreator() {
-		//
-	}
 	
 	@Override
 	public ContextEntryControllerCreator clone() {
@@ -48,20 +45,10 @@ public class GuestHomeCEControllerCreator extends DefaultContextEntryControllerC
 	}
 
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return null;
-	}
-
-	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 		return HomeSite.class.getName();
 	}
 
-	@Override
-	public String getTabName(ContextEntry ce, UserRequest ureq) {
-		return null;
-	}
-
 	@Override
 	public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
 		return ureq.getUserSession().getRoles().isGuestOnly();
diff --git a/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java b/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java
index daf50ec502740ccba4667f1978f6b02838d969b7..26911c7d5ee219d7b2e0599330dedec80cb5d7ad 100644
--- a/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/modules/coach/site/CoachContextEntryControllerCreator.java
@@ -19,8 +19,9 @@
  */
 package org.olat.modules.coach.site;
 
+import java.util.List;
+
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
 import org.olat.core.id.context.DefaultContextEntryControllerCreator;
@@ -37,12 +38,7 @@ public class CoachContextEntryControllerCreator extends DefaultContextEntryContr
 	}
 
 	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 		return CoachSite.class.getName();
 	}
-
-	@Override
-	public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return super.validateContextEntryAndShowError(ce, ureq, wControl);
-	}
 }
diff --git a/src/main/java/org/olat/modules/coach/ui/CourseController.java b/src/main/java/org/olat/modules/coach/ui/CourseController.java
index 4989046aa4888bce968f80e6023c7e7c29ec11ed..5991b6119625e412c8a2d5942a9c6b0529a1344a 100644
--- a/src/main/java/org/olat/modules/coach/ui/CourseController.java
+++ b/src/main/java/org/olat/modules/coach/ui/CourseController.java
@@ -19,7 +19,6 @@
  */
 package org.olat.modules.coach.ui;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import org.olat.NewControllerFactory;
@@ -46,7 +45,6 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
@@ -55,10 +53,9 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.modules.coach.CoachingService;
 import org.olat.modules.coach.model.CourseStatEntry;
 import org.olat.modules.coach.model.EfficiencyStatementEntry;
-import org.olat.repository.RepositoryEntry;
-
 import org.olat.modules.coach.ui.EfficiencyStatementEntryTableDataModel.Columns;
 import org.olat.modules.coach.ui.ToolbarController.Position;
+import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -332,13 +329,8 @@ public class CourseController extends BasicController implements Activateable2 {
 	}
 	
 	private void openCourse(UserRequest ureq) {
-		List<ContextEntry> ces = new ArrayList<ContextEntry>(1);
-		
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance("RepositoryEntry", courseStat.getRepoKey());
-		ces.add(BusinessControlFactory.getInstance().createContextEntry(ores));
-
-		BusinessControl bc = BusinessControlFactory.getInstance().createFromContextEntries(ces);
-	  WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl());
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(getWindowControl(), ores);
 		NewControllerFactory.getInstance().launch(ureq, bwControl);
 	}
 }
diff --git a/src/main/java/org/olat/modules/fo/ForumController.java b/src/main/java/org/olat/modules/fo/ForumController.java
index 5ce86531bd11f64ca70ad7322356cf4d8972e046..2d16ceb3ff2f98351d36f4ed19a49fb7f2983b58 100644
--- a/src/main/java/org/olat/modules/fo/ForumController.java
+++ b/src/main/java/org/olat/modules/fo/ForumController.java
@@ -35,7 +35,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.lang.StringEscapeUtils;
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.basesecurity.BaseSecurityModule;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.FolderConfig;
@@ -53,8 +53,8 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
-import org.olat.core.gui.components.panel.StackedPanel;
 import org.olat.core.gui.components.panel.SimpleStackedPanel;
+import org.olat.core.gui.components.panel.StackedPanel;
 import org.olat.core.gui.components.table.BooleanColumnDescriptor;
 import org.olat.core.gui.components.table.ColumnDescriptor;
 import org.olat.core.gui.components.table.CustomCellRenderer;
@@ -1664,18 +1664,19 @@ public class ForumController extends BasicController implements GenericEventList
    * Initial Date:  11.07.2007 <br>
    * @author Lavinia Dumitrescu
    */
-  private class StickyRenderColumnDescriptor extends CustomRenderColumnDescriptor {
+  private static class StickyRenderColumnDescriptor extends CustomRenderColumnDescriptor {
   	
   	public StickyRenderColumnDescriptor(String headerKey, int dataColumn, String action, Locale locale, int alignment,
   			CustomCellRenderer customCellRenderer) {
   		super(headerKey, dataColumn, action, locale, alignment,customCellRenderer);  		
   	}
   	
-  	/**
+  		/**
 		 * Delegates comparison to the <code>ForumHelper.compare</code>. In case the <code>ForumHelper.compare</code>
 		 * returns <code>ForumHelper.NOT_MY_JOB</code>, the comparison is executed by the superclass.
 		 * @see org.olat.core.gui.components.table.ColumnDescriptor#compareTo(int, int)
-		 */		
+		 */	
+  		@Override	
 		public int compareTo(int rowa, int rowb) {
 			ForumHelper.MessageWrapper a = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowa,getDataColumn());
 			ForumHelper.MessageWrapper b = (ForumHelper.MessageWrapper)getTable().getTableDataModel().getValueAt(rowb,getDataColumn());
@@ -1689,16 +1690,18 @@ public class ForumController extends BasicController implements GenericEventList
 		}				
   }
 	
-	class MessageIconRenderer extends CustomCssCellRenderer {
-		
+  public class MessageIconRenderer extends CustomCssCellRenderer {
+		@Override
 		protected String getHoverText(Object val) {
-			return ControllerFactory.translateResourceableTypeName((String)val, getLocale());
+			return NewControllerFactory.translateResourceableTypeName((String)val, getLocale());
 		}
-		
+
+		@Override
 		protected String getCellValue(Object val) {
 			return "";
 		}
 
+		@Override
 		protected String getCssClass(Object val) {
 			//val.toString()
 			// use small icon and create icon class for resource: o_FileResource-SHAREDFOLDER_icon
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
index 545e50185772bade5d08a03a03346f05f281aad8..a654a037c1b8c9eb6d22add77a02a9da5b2ff7e4 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -22,6 +22,7 @@ package org.olat.modules.qpool.ui;
 import java.util.Collections;
 import java.util.List;
 
+import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.gui.UserRequest;
@@ -45,6 +46,8 @@ import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
+import org.olat.core.util.resource.OresHelper;
 import org.olat.group.BusinessGroup;
 import org.olat.group.model.BusinessGroupSelectionEvent;
 import org.olat.group.ui.main.SelectBusinessGroupController;
@@ -72,7 +75,6 @@ import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 import org.olat.repository.controllers.EntryChangedEvent;
 import org.olat.repository.controllers.ReferencableEntriesSearchController;
-import org.olat.repository.controllers.RepositoryDetailsController;
 import org.olat.repository.controllers.RepositorySearchController.Can;
 import org.olat.repository.handlers.RepositoryHandler;
 import org.olat.repository.handlers.RepositoryHandlerFactory;
@@ -648,8 +650,9 @@ public class QuestionListController extends AbstractItemListController implement
 	private void doExportToRepositoryEntry(UserRequest ureq, Long repoEntryKey) {
 		RepositoryEntry re = repositoryManager.lookupRepositoryEntry(repoEntryKey, false);
 		if(re != null) {
-			//open editor
-			RepositoryDetailsController.doEdit(ureq, re);
+			WindowControl wControl = BusinessControlFactory.getInstance()
+					.createBusinessWindowControl(getWindowControl(), re, OresHelper.createOLATResourceableType("Editor"));
+			NewControllerFactory.getInstance().launch(ureq, wControl);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java
index 3c31636dbaf79477d488b829974c603f06be128c..a10097a40dd8c4fac7e50f16710fb2160b080176 100644
--- a/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/modules/webFeed/portfolio/LiveBlogContextEntryControllerCreator.java
@@ -20,6 +20,8 @@
 
 package org.olat.modules.webFeed.portfolio;
 
+import java.util.List;
+
 import org.olat.NewControllerFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.gui.UserRequest;
@@ -70,8 +72,8 @@ public class LiveBlogContextEntryControllerCreator  {
 		}
 
 		@Override
-		public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			OLATResourceable ores = ce.getOLATResourceable();
+		public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
+			OLATResourceable ores = ces.get(0).getOLATResourceable();
 			Feed feed = feedManager.getFeed(ores);
 			boolean isOwner = feed.getAuthor() != null && ureq.getIdentity() != null && feed.getAuthor().equals(ureq.getIdentity().getName());
 			FeedSecurityCallback secCallback = new FeedResourceSecurityCallback(isOwner, isOwner);
@@ -86,11 +88,6 @@ public class LiveBlogContextEntryControllerCreator  {
 			return feed.getTitle();
 		}
 
-		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
-			return null;
-		}
-
 		@Override
 		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
 			try {
diff --git a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
index 0e71254327486630f03249df19f2012fa8ef74eb..d7d415517414b8fa3046e46317a08f1e91937e12 100644
--- a/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
+++ b/src/main/java/org/olat/modules/webFeed/ui/ItemsController.java
@@ -27,6 +27,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringEscapeUtils;
+import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.controllers.navigation.Dated;
 import org.olat.core.commons.controllers.navigation.NavigationEvent;
@@ -36,7 +37,6 @@ import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityC
 import org.olat.core.commons.services.commentAndRating.CommentAndRatingService;
 import org.olat.core.commons.services.commentAndRating.ui.UserCommentsAndRatingsController;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.Windows;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.date.DateComponentFactory;
 import org.olat.core.gui.components.form.flexible.elements.FileElement;
@@ -51,12 +51,9 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
 import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.control.generic.dtabs.DTab;
-import org.olat.core.gui.control.generic.dtabs.DTabs;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.StateEntry;
@@ -71,9 +68,6 @@ import org.olat.modules.webFeed.models.Feed;
 import org.olat.modules.webFeed.models.Item;
 import org.olat.modules.webFeed.models.ItemPublishDateComparator;
 import org.olat.portfolio.EPUIFactory;
-import org.olat.user.HomePageConfigManager;
-import org.olat.user.HomePageConfigManagerImpl;
-import org.olat.user.UserInfoMainController;
 import org.olat.user.UserManager;
 import org.olat.util.logging.activity.LoggingResourceable;
 
@@ -505,20 +499,8 @@ public class ItemsController extends BasicController implements Activateable2 {
 			Object userObject = userLink.getUserObject();
 			if (userObject instanceof Identity) {
 				Identity chosenIdentity = (Identity) userObject;
-				HomePageConfigManager hpcm = HomePageConfigManagerImpl.getInstance();
-				OLATResourceable ores = hpcm.loadConfigFor(chosenIdentity.getName());
-				DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs();
-				// was brasato:: DTabs dts = getWindowControl().getDTabs();
-				DTab dt = dts.getDTab(ores);
-				if (dt == null) {
-					// does not yet exist -> create and add
-					dt = dts.createDTab(ores, chosenIdentity.getName());
-					if (dt == null) return;
-					UserInfoMainController uimc = new UserInfoMainController(ureq, dt.getWindowControl(), chosenIdentity);
-					dt.setController(uimc);
-					dts.addDTab(ureq, dt);
-				}
-				dts.activate(ureq, dt, null);
+				String bPath = "[HomePage:" + chosenIdentity.getKey() + "]";
+				NewControllerFactory.getInstance().launch(bPath, ureq, getWindowControl());
 			}
 		}
 		
diff --git a/src/main/java/org/olat/note/NoteListTableDataModel.java b/src/main/java/org/olat/note/NoteListTableDataModel.java
index 0a0aa52173e5bd647dc1a2cfb6495344929f4240..572eade7483b75e5d4dedf7000e68d753b9b7b59 100644
--- a/src/main/java/org/olat/note/NoteListTableDataModel.java
+++ b/src/main/java/org/olat/note/NoteListTableDataModel.java
@@ -28,7 +28,7 @@ package org.olat.note;
 import java.util.List;
 import java.util.Locale;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.gui.components.table.DefaultTableDataModel;
 
 /**
@@ -39,7 +39,7 @@ import org.olat.core.gui.components.table.DefaultTableDataModel;
 
 class NoteListTableDataModel extends DefaultTableDataModel<Note> {
 
-	private Locale locale;
+	private final Locale locale;
 	
 	/**
 	 * @param objects
@@ -50,9 +50,7 @@ class NoteListTableDataModel extends DefaultTableDataModel<Note> {
 		this.locale = locale;
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int)
-	 */
+	@Override
 	public final Object getValueAt(int row, int col) {
 		Note n = getObject(row);
 		switch (col) {
@@ -60,15 +58,13 @@ class NoteListTableDataModel extends DefaultTableDataModel<Note> {
 			  return n.getNoteTitle();
 			case 1 :
 				String resType = n.getResourceTypeName();
-				return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale));
+				return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale));
 			default :
 				return "error";
 		}
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.table.TableDataModel#getColumnCount()
-	 */
+	@Override
 	public int getColumnCount() {
 		return 2;
 	}
diff --git a/src/main/java/org/olat/note/NotesPortletRunController.java b/src/main/java/org/olat/note/NotesPortletRunController.java
index 663948d19c60799c893fa3f95ee297ac7473178a..9ceb636bed6cf5cd6f002eff74978e78a16f6708 100644
--- a/src/main/java/org/olat/note/NotesPortletRunController.java
+++ b/src/main/java/org/olat/note/NotesPortletRunController.java
@@ -33,7 +33,6 @@ import java.util.List;
 import java.util.Locale;
 
 import org.apache.commons.lang.StringEscapeUtils;
-import org.olat.ControllerFactory;
 import org.olat.NewControllerFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
 import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
@@ -319,10 +318,8 @@ public class NotesPortletRunController extends AbstractPortletRunController<Note
 			super(objects, 2);
 			this.locale = locale;
 		}
-		
-		/**
-		 * @see org.olat.core.gui.components.table.TableDataModel#getValueAt(int, int)
-		 */
+
+		@Override
 		public final Object getValueAt(int row, int col) {				
 			Note note = getObject(row).getValue();
 			switch (col) {
@@ -330,7 +327,7 @@ public class NotesPortletRunController extends AbstractPortletRunController<Note
 					return note.getNoteTitle();
 				case 1:								
 					String resType = note.getResourceTypeName();
-					return (resType == null ? "n/a" : ControllerFactory.translateResourceableTypeName(resType, locale));
+					return (resType == null ? "n/a" : NewControllerFactory.translateResourceableTypeName(resType, locale));
 				default:
 					return "error";
 			}
diff --git a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java
index 97a0b95ce2b172ddb320f430bb597f4ef21840bd..84096a5642e8a0324b9feee530358eb878fdbdb4 100644
--- a/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java
+++ b/src/main/java/org/olat/portfolio/EPArtefactPoolExtension.java
@@ -24,7 +24,6 @@ import java.util.List;
 
 import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.id.context.BusinessControlFactory;
@@ -51,7 +50,7 @@ public class EPArtefactPoolExtension {
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(AbstractArtefact.class.getSimpleName(), new ArtefactContextEntryControllerCreator());	
 	}
 	
-	private static class ArtefactContextEntryControllerCreator extends DefaultContextEntryControllerCreator{
+	private static class ArtefactContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
 
 		@Override
 		public ContextEntryControllerCreator clone() {
@@ -59,15 +58,10 @@ public class EPArtefactPoolExtension {
 		}
 
 		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 			return HomeSite.class.getName();
 		}
 
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return true;
-		}
-
 		@Override
 		public TabContext getTabContext(UserRequest ureq, OLATResourceable ores, ContextEntry mainEntry, List<ContextEntry> entries) {
 			Identity identity = ureq.getIdentity();
diff --git a/src/main/java/org/olat/portfolio/EPMapExtension.java b/src/main/java/org/olat/portfolio/EPMapExtension.java
index 015119d39e45a727af9ba7dda7c95161cd7f38b2..4851d9c963c591e9f2b97db328942f67c31ae54b 100644
--- a/src/main/java/org/olat/portfolio/EPMapExtension.java
+++ b/src/main/java/org/olat/portfolio/EPMapExtension.java
@@ -64,7 +64,7 @@ public class EPMapExtension {
 		}
 
 		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 			return HomeSite.class.getName();
 		}
 
diff --git a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java
index e588789eef9bbd2a0a40c0a20359d913d57fe450..75c921bb70ad09a16af63f7db167aab1e727985a 100644
--- a/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java
+++ b/src/main/java/org/olat/portfolio/EPMapOnInvitationExtension.java
@@ -19,6 +19,8 @@
  */
 package org.olat.portfolio;
 
+import java.util.List;
+
 import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
@@ -55,12 +57,12 @@ public class EPMapOnInvitationExtension {
 		}
 
 		@Override
-		public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
+		public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
 			if(!ureq.getUserSession().getRoles().isInvitee()) {
 				return null;
 			}
 			
-			PortfolioStructureMap map = getMapFromContext(ce);
+			PortfolioStructureMap map = getMapFromContext(ces.get(0));
 			EPSecurityCallback secCallback = new EPSecurityCallbackImpl(false, true);
 			Controller epCtr = EPUIFactory.createMapViewController(ureq, wControl, map, secCallback);
 			
@@ -75,11 +77,6 @@ public class EPMapOnInvitationExtension {
 			return map.getTitle();
 		}
 
-		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
-			return null;
-		}
-
 		@Override
 		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
 			if(!ureq.getUserSession().getRoles().isInvitee()) {
diff --git a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java
index 8fdc690b26209a89adc19a3d769db9f7dad07d02..0b2b913dd38e90c771f7c84170cbc830e1c48033 100644
--- a/src/main/java/org/olat/portfolio/EPMyMapsExtension.java
+++ b/src/main/java/org/olat/portfolio/EPMyMapsExtension.java
@@ -19,9 +19,10 @@
  */
 package org.olat.portfolio;
 
+import java.util.List;
+
 import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
@@ -53,18 +54,7 @@ public class EPMyMapsExtension {
 		}
 
 		@Override
-		public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return null;
-		}
-
-		@Override
-		public String getTabName(ContextEntry ce, UserRequest ureq) {
-			// opens in home-tab
-			return null;
-		}
-
-		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 			return HomeSite.class.getName();
 		}
 
diff --git a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java
index 00b515f3cabd589b35d51c9a26dab1c556748209..8079b3d91b8cbbc35f91f29548758a03cb9f4584 100644
--- a/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java
+++ b/src/main/java/org/olat/portfolio/EPMyStructuredMapsExtension.java
@@ -19,10 +19,10 @@
  */
 package org.olat.portfolio;
 
+import java.util.List;
+
 import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
 import org.olat.core.id.context.DefaultContextEntryControllerCreator;
@@ -53,24 +53,8 @@ public class EPMyStructuredMapsExtension {
 		}
 
 		@Override
-		public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return null;
-		}
-
-		@Override
-		public String getTabName(ContextEntry ce, UserRequest ureq) {
-			// opens in home-tab
-			return null;
-		}
-
-		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 			return HomeSite.class.getName();
 		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return true;
-		}
 	}
 }
diff --git a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java
index 1cc67529c7a96595bb4dbc5ea3ebaf7f373a0fc5..9a96ef4c971d6b7525454c1c676f945c8592888f 100644
--- a/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java
+++ b/src/main/java/org/olat/portfolio/EPOtherMapsExtension.java
@@ -19,10 +19,10 @@
  */
 package org.olat.portfolio;
 
+import java.util.List;
+
 import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
 import org.olat.core.id.context.DefaultContextEntryControllerCreator;
@@ -52,24 +52,8 @@ public class EPOtherMapsExtension {
 		}
 
 		@Override
-		public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return null;
-		}
-
-		@Override
-		public String getTabName(ContextEntry ce, UserRequest ureq) {
-			// opens in home-tab
-			return null;
-		}
-
-		@Override
-		public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+		public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 			return HomeSite.class.getName();
 		}
-
-		@Override
-		public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-			return true;
-		}
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java
index b4a65e948900693ba12afd9195644730efc7f487..ec7c4cf4b714a2d8684f3ad841714effe3546eee 100644
--- a/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/repository/CatalogContextEntryControllerCreator.java
@@ -20,8 +20,9 @@
 
 package org.olat.repository;
 
+import java.util.List;
+
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.context.ContextEntry;
 import org.olat.core.id.context.ContextEntryControllerCreator;
@@ -48,14 +49,9 @@ public class CatalogContextEntryControllerCreator extends DefaultContextEntryCon
 	public ContextEntryControllerCreator clone() {
 		return this;
 	}
-	
-	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return null;
-	}
 
 	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
 		if(repositoryModule.isCatalogSiteEnabled()) {
 			return CatalogSite.class.getName();
 		} else {
@@ -63,14 +59,8 @@ public class CatalogContextEntryControllerCreator extends DefaultContextEntryCon
 		}
 	}
 
-	@Override
-	public String getTabName(ContextEntry ce, UserRequest ureq) {
-		return null;
-	}
-
 	@Override
 	public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
 		return repositoryModule.isCatalogEnabled();
 	}
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/DetailsReadOnlyForm.java b/src/main/java/org/olat/repository/DetailsReadOnlyForm.java
index 7e0bc7e09a8548c95a8ec859c129d1896726c215..b1f561fbaaeafeb29a5f1c49729486309a9a3268 100644
--- a/src/main/java/org/olat/repository/DetailsReadOnlyForm.java
+++ b/src/main/java/org/olat/repository/DetailsReadOnlyForm.java
@@ -25,7 +25,7 @@
 
 package org.olat.repository;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.SelectionElement;
@@ -81,7 +81,7 @@ public class DetailsReadOnlyForm extends FormBasicController {
 			typeDisplayText.append("<span class=\"b_with_small_icon_left ");
 			typeDisplayText.append(RepositoyUIFactory.getIconCssClass(entry));
 			typeDisplayText.append("\">");
-			String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale());
+			String tName = NewControllerFactory.translateResourceableTypeName(typeName, getLocale());
 			typeDisplayText.append(tName);
 			typeDisplayText.append("</span>"); 
 		} else {
diff --git a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java b/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java
deleted file mode 100644
index aa600b1e7fb0e3618fac30ed0700252019c736f6..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/RepositoryContextEntryControllerCreator.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/**
- * <a href="http://www.openolat.org">
- * OpenOLAT - Online Learning and Training</a><br>
- * <p>
- * Licensed under the Apache License, Version 2.0 (the "License"); <br>
- * you may not use this file except in compliance with the License.<br>
- * You may obtain a copy of the License at the
- * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
- * <p>
- * Unless required by applicable law or agreed to in writing,<br>
- * software distributed under the License is distributed on an "AS IS" BASIS, <br>
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
- * See the License for the specific language governing permissions and <br>
- * limitations under the License.
- * <p>
- * Initial code contributed and copyrighted by<br>
- * frentix GmbH, http://www.frentix.com
- * <p>
- */
-package org.olat.repository;
-
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.control.Controller;
-import org.olat.core.gui.control.WindowControl;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.ContextEntryControllerCreator;
-import org.olat.core.id.context.DefaultContextEntryControllerCreator;
-
-/**
- * <h3>Description:</h3>
- * <p>
- * This class can create run controllers for repository entries in the given
- * context
- * <p>
- * Initial Date: 19.08.2009 <br>
- * 
- * @author gnaegi, gnaegi@frentix.com, www.frentix.com
- */
-public class RepositoryContextEntryControllerCreator extends DefaultContextEntryControllerCreator {
-
-	private RepositoryEntry repoEntry;
-	
-	@Override
-	public ContextEntryControllerCreator clone() {
-		return new RepositoryContextEntryControllerCreator();
-	}
-
-	/**
-	 * @see org.olat.core.id.context.ContextEntryControllerCreator#createController(org.olat.core.id.context.ContextEntry,
-	 *      org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.WindowControl)
-	 */
-	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		RepositoryEntry re = getRepositoryEntry(ce);
-		Controller ctrl = RepositoyUIFactory.createLaunchController(re, ureq, wControl);
-		return ctrl;
-	}
-
-	/**
-	 * @see org.olat.core.id.context.ContextEntryControllerCreator#getTabName(org.olat.core.id.context.ContextEntry)
-	 */
-	@Override
-	public String getTabName(ContextEntry ce, UserRequest ureq) {
-		RepositoryEntry re = getRepositoryEntry(ce);
-		return re.getDisplayname();
-	}
-	
-	/**
-	 * @see org.olat.core.id.context.ContextEntryControllerCreator#getSiteClassName(org.olat.core.id.context.ContextEntry)
-	 */
-	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
-		return null;
-	}
-
-	@Override
-	public boolean validateContextEntryAndShowError(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		return getRepositoryEntry(ce) != null;
-	}
-	
-	private RepositoryEntry getRepositoryEntry(ContextEntry ce) {
-		if(repoEntry == null) {
-			if(ce.getOLATResourceable() instanceof RepositoryEntry) {
-				repoEntry = (RepositoryEntry)ce.getOLATResourceable();
-			} else {
-				OLATResourceable ores = ce.getOLATResourceable();
-				RepositoryManager rm = RepositoryManager.getInstance();
-				repoEntry = rm.lookupRepositoryEntry(ores.getResourceableId());
-			}
-		}
-		return repoEntry;
-	}
-}
diff --git a/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java b/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java
index 7ab1ac363c54dec231aae670e5112cdf852fe445..3aa00a0d6f0a5866eb67c8644def5f64cb10e809 100644
--- a/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java
+++ b/src/main/java/org/olat/repository/RepositoryEntryIconRenderer.java
@@ -21,7 +21,7 @@ package org.olat.repository;
 
 import java.util.Locale;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.gui.components.table.CustomCssCellRenderer;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.i18n.I18nModule;
@@ -101,12 +101,12 @@ public class RepositoryEntryIconRenderer extends CustomCssCellRenderer {
 		if(val instanceof RepositoryEntry) {
 			RepositoryEntry re = (RepositoryEntry) val;
 			String typeName = re.getOlatResource().getResourceableTypeName();
-			return ControllerFactory.translateResourceableTypeName(typeName, locale);
+			return NewControllerFactory.translateResourceableTypeName(typeName, locale);
 		}
 		if(val instanceof RepositoryEntryShort) {
 			RepositoryEntryShort re = (RepositoryEntryShort) val;
 			String typeName = re.getResourceType();
-			return ControllerFactory.translateResourceableTypeName(typeName, locale);
+			return NewControllerFactory.translateResourceableTypeName(typeName, locale);
 		}
 		return "n/a";
 	}
diff --git a/src/main/java/org/olat/repository/RepositoryModule.java b/src/main/java/org/olat/repository/RepositoryModule.java
index 5837b45f30303465be722eb6e2cdd744f9ee443e..73ea0d0aa609a5c52fedc87ca51ac2f15c813fea 100644
--- a/src/main/java/org/olat/repository/RepositoryModule.java
+++ b/src/main/java/org/olat/repository/RepositoryModule.java
@@ -26,6 +26,7 @@ import org.olat.core.configuration.PersistedProperties;
 import org.olat.core.id.Roles;
 import org.olat.core.id.context.SiteContextEntryControllerCreator;
 import org.olat.core.util.StringHelper;
+import org.olat.course.site.CourseSiteContextEntryControllerCreator;
 import org.olat.group.BusinessGroupModule;
 import org.olat.repository.site.RepositorySite;
 
@@ -63,7 +64,7 @@ public class RepositoryModule extends AbstractOLATModule {
 	public void init() {
 		// Add controller factory extension point to launch groups
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(RepositoryEntry.class.getSimpleName(),
-				new RepositoryContextEntryControllerCreator());
+				new CourseSiteContextEntryControllerCreator());
 		
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(CatalogEntry.class.getSimpleName(),
 				new CatalogContextEntryControllerCreator(this));
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java b/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java
deleted file mode 100644
index 42cf954202de9efbcba1f545ab3770b70e91d5ca..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/repository/controllers/RepositoryDetailsController.java
+++ /dev/null
@@ -1,1106 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.repository.controllers;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Locale;
-
-import org.olat.ControllerFactory;
-import org.olat.NewControllerFactory;
-import org.olat.admin.restapi.RestapiAdminController;
-import org.olat.basesecurity.BaseSecurity;
-import org.olat.basesecurity.Group;
-import org.olat.basesecurity.GroupRoles;
-import org.olat.basesecurity.IdentityShort;
-import org.olat.basesecurity.ui.GroupController;
-import org.olat.catalog.ui.CatalogEntryAddController;
-import org.olat.catalog.ui.RepoEntryCategoriesTableController;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.commons.services.mark.Mark;
-import org.olat.core.commons.services.mark.MarkManager;
-import org.olat.core.dispatcher.DispatcherModule;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.Windows;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.image.ImageComponent;
-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.CloseableModalController;
-import org.olat.core.gui.control.generic.dtabs.Activateable2;
-import org.olat.core.gui.control.generic.dtabs.DTab;
-import org.olat.core.gui.control.generic.dtabs.DTabs;
-import org.olat.core.gui.control.generic.modal.DialogBoxController;
-import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.gui.control.generic.tool.ToolController;
-import org.olat.core.gui.control.generic.tool.ToolFactory;
-import org.olat.core.gui.media.MediaResource;
-import org.olat.core.gui.translator.Translator;
-import org.olat.core.helpers.Settings;
-import org.olat.core.id.Identity;
-import org.olat.core.id.OLATResourceable;
-import org.olat.core.id.Roles;
-import org.olat.core.id.context.BusinessControlFactory;
-import org.olat.core.id.context.ContextEntry;
-import org.olat.core.id.context.StateEntry;
-import org.olat.core.logging.AssertException;
-import org.olat.core.logging.OLATRuntimeException;
-import org.olat.core.logging.OLATSecurityException;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.Formatter;
-import org.olat.core.util.StringHelper;
-import org.olat.core.util.Util;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.coordinate.LockResult;
-import org.olat.core.util.event.GenericEventListener;
-import org.olat.core.util.filter.FilterFactory;
-import org.olat.core.util.i18n.I18nManager;
-import org.olat.core.util.resource.OresHelper;
-import org.olat.core.util.vfs.VFSContainer;
-import org.olat.core.util.vfs.VFSContainerMapper;
-import org.olat.core.util.vfs.VFSLeaf;
-import org.olat.course.CorruptedCourseException;
-import org.olat.course.CourseFactory;
-import org.olat.course.CourseModule;
-import org.olat.course.run.RunMainController;
-import org.olat.repository.DisplayCourseInfoForm;
-import org.olat.repository.DisplayInfoForm;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryEntryManagedFlag;
-import org.olat.repository.RepositoryEntryStatus;
-import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoryModule;
-import org.olat.repository.RepositoryService;
-import org.olat.repository.RepositoyUIFactory;
-import org.olat.repository.handlers.CourseHandler;
-import org.olat.repository.handlers.RepositoryHandler;
-import org.olat.repository.handlers.RepositoryHandlerFactory;
-import org.olat.repository.model.RepositoryEntryLifecycle;
-import org.olat.resource.OLATResource;
-import org.olat.resource.OLATResourceManager;
-import org.olat.resource.accesscontrol.ACService;
-import org.olat.resource.accesscontrol.ui.OrdersAdminController;
-import org.olat.resource.references.ReferenceManager;
-import org.olat.user.UserManager;
-
-
-/**
- * Description: <br>
- * 
- * @author Felix Jost
- */
-public class RepositoryDetailsController extends BasicController implements GenericEventListener, Activateable2 {
-	OLog log = Tracing.createLoggerFor(this.getClass());
-
-	private static final String ACTION_CLOSE = "cmd.close";
-	private static final String ACTION_DOWNLOAD = "dl";
-	private static final String ACTION_DOWNLOAD_BACKWARD_COMPAT = "dlcompat";
-	private static final String ACTION_LAUNCH = "lch";
-	private static final String ACTION_COPY = "cp";
-	private static final String ACTION_BOOKMARK = "bm";
-	private static final String ACTION_EDIT = "edt";
-	private static final String ACTION_DETAILSEDIT = "dtedt";
-	private static final String ACTION_ADD_CATALOG = "add.cat";
-	private static final String ACTION_DELETE = "del";
-	private static final String ACTION_CLOSE_RESSOURCE = "close.ressource";
-	private static final String ACTION_MEMBERS = "members";
-	
-	private static final String ACTION_ORDERS = "orders";
-	private static final String ACTION_EDITDESC = "chdesc";
-	private static final String ACTION_EDITPROP = "chprop";
-
-	private static final String TOOL_BOOKMARK = "b";
-	private static final String TOOL_COPY = "c";
-	private static final String TOOL_DOWNLOAD = "d";
-	private static final String TOOL_ORDERS = "orders";
-	private static final String TOOL_DOWNLOAD_BACKWARD_COMPAT = "dcompat";
-	private static final String TOOL_EDIT = "e";
-	private static final String TOOL_DELETE = "del";
-	private static final String TOOL_CATALOG = "cat";
-	private static final String TOOL_CHDESC = "chd";
-	private static final String TOOL_CHPROP = "chp";
-	private static final String TOOL_LAUNCH = "l";
-	private static final String TOOL_CLOSE_RESSOURCE = "cr";
-	
-	private VelocityContainer main;
-	private Link downloadButton;
-	private Link backLink;
-	private Link launchButton;
-	private Link loginLink;
-	
-	private GroupController groupController;
-	private RepositoryMembersController membersEditController;
-	private OrdersAdminController ordersController;
-	private ToolController detailsToolC;
-	private RepositoryEditDescriptionController repositoryEditDescriptionController;
-	private RepoEntryCategoriesTableController repoEntryCategoriesTableController;
-	private CloseableModalController closeableModalController;
-	private DialogBoxController deleteDialogController;
-	private Controller catalogAdddController;
-	private Controller detailsForm;
-
-	private RepositoryEntry repositoryEntry;
-	private boolean isOwner;
-	private boolean isAuthor;
-	private boolean isOlatAdmin;
-	private boolean isGuestOnly = false;
-	private boolean corrupted;
-	public static final String ACTIVATE_EDITOR = "activateEditor";
-	
-	private DisplayCourseInfoForm courseInfoForm;
-	private DisplayInfoForm displayInfoForm;
-	
-	private LockResult lockResult;
-	private WizardCloseResourceController wc;
-	private CloseableModalController cmc;
-	
-	//different instances for "copy" and "settings change", since it is important to know what triggered the CLOSE_MODAL_EVENT
-	private CloseableModalController copyCloseableModalController;
-	private CloseableModalController settingsCloseableModalController;
-	//fxdiff FXOLAT-128: back/resume function
-	public static final Event LAUNCHED_EVENT = new Event("lr-launched");
-	
-	private final ACService acService;
-	private final BaseSecurity securityManager;
-	private final UserManager userManager;
-	private final MarkManager markManager;
-	private final RepositoryModule repositoryModule;
-	private final RepositoryService repositoryService;
-
-	/**
-	 * Controller displaying details of a given repository entry.
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param mainPanel
-	 */
-	public RepositoryDetailsController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		//sets velocity root and translator to RepositoryManager package 
-		setBasePackage(RepositoryManager.class);
-		securityManager = CoreSpringFactory.getImpl(BaseSecurity.class);
-		userManager = CoreSpringFactory.getImpl(UserManager.class);
-		markManager = CoreSpringFactory.getImpl(MarkManager.class);
-		acService = CoreSpringFactory.getImpl(ACService.class);
-		repositoryModule = CoreSpringFactory.getImpl(RepositoryModule.class);
-		repositoryService = CoreSpringFactory.getImpl(RepositoryService.class);
-		
-		if (log.isDebug()){
-			log.debug("Constructing ReposityMainController using velocity root " + velocity_root);
-		}
-		// main component layed out in panel
-		main = createVelocityContainer("details");
-		
-		downloadButton = LinkFactory.createButton("details.download", main, this);
-		downloadButton.setElementCssClass("o_sel_repo_download_button");
-		LinkFactory.markDownloadLink(downloadButton);
-		launchButton = LinkFactory.createButton("details.launch", main, this);
-		launchButton.setElementCssClass("o_sel_repo_launch_button");
-		
-		backLink = LinkFactory.createLinkBack(main, this);
-		backLink.setElementCssClass("o_sel_repo_back_button");
-		loginLink = LinkFactory.createLink("repo.login", main, this);
-		loginLink.setElementCssClass("o_sel_repo_login_button");
-		
-		putInitialPanel(main);
-	}
-
-	/**
-	 * @param ureq
-	 */
-	private void checkSecurity(UserRequest ureq) {
-		if (ureq.getUserSession().getRoles().isOLATAdmin()) {
-			isOwner = true;
-			isAuthor = true;
-			isOlatAdmin = true;
-		} else {
-			// load repositoryEntry again because the hibenate object is 'detached'.Otherwise you become an exception when you check owner-group.
-			Identity identity = ureq.getIdentity();
-			Roles roles = ureq.getUserSession().getRoles();
-			boolean isInstitutionalResourceManager = !roles.isGuestOnly()
-					&& RepositoryManager.getInstance().isInstitutionalRessourceManagerFor(identity, roles, repositoryEntry);
-			isOwner = repositoryService.hasRole(ureq.getIdentity(), repositoryEntry, GroupRoles.owner.name())
-					| isInstitutionalResourceManager;
-			isAuthor = roles.isAuthor() | isInstitutionalResourceManager;
-			isGuestOnly = roles.isGuestOnly();
-			isOlatAdmin = false;
-		}
-	}
-
-	/**
-	 * @param ureq
-	 */
-	private void updateRepositoryEntryView(UserRequest ureq) {
-
-		main.contextPut("isOwner", new Boolean(isOwner));
-		main.contextPut("isAuthor", new Boolean(isAuthor));
-		main.contextPut("isOlatAdmin", new Boolean(isOlatAdmin));
-		main.contextPut("launchableTyp", new Boolean(checkIsRepositoryEntryTypeLaunchable()));
-		String url = Settings.getServerContextPathURI() + "/url/RepositoryEntry/" + repositoryEntry.getKey();
-		main.contextPut("extlink", url);
-		
-		String displayName = getDisplayName(ureq.getLocale());
-		main.contextPut("title", displayName);
-
-		boolean isLaunchable = checkIsRepositoryEntryLaunchable(ureq);
-		launchButton.setEnabled(isLaunchable);
-		launchButton.setTextReasonForDisabling(translate("launch.noaccess"));
-		downloadButton.setEnabled(repositoryEntry.getCanDownload());
-		downloadButton.setTextReasonForDisabling(translate("disabledexportreason"));
-		
-		//reset cycle datas
-		main.contextPut("lfStart", null);
-		main.contextPut("lfEnd", null);
-		main.contextPut("lfLabel", null);
-		main.contextPut("lfSoftKey", null);
-		main.contextPut("showLf", Boolean.FALSE);
-		
-		//fill cycle datas if needed
-		RepositoryEntryLifecycle cycle = repositoryEntry.getLifecycle();
-		if(cycle != null) {
-			Formatter format = Formatter.getInstance(getLocale());
-			if(cycle.getValidFrom() != null) {
-				main.contextPut("lfStart", format.formatDate(cycle.getValidFrom()));
-			}
-			if(cycle.getValidTo() != null) {
-				main.contextPut("lfEnd", format.formatDate(cycle.getValidTo()));
-			}
-			if(!cycle.isPrivateCycle()) {
-				String label = cycle.getLabel();
-				String softKey = cycle.getSoftKey();
-				main.contextPut("lfLabel", label);
-				main.contextPut("lfSoftKey", softKey);
-			}
-			main.contextPut("showLf", Boolean.TRUE);
-		} else if("CourseModule".equals(repositoryEntry.getOlatResource().getResourceableTypeName())) {
-			main.contextPut("showLf", Boolean.TRUE);
-		}
-		
-		if (repositoryEntry.getDescription() != null) {
-			String description = repositoryEntry.getDescription();
-			
-			RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
-			VFSContainer mediaContainer = handler.getMediaContainer(repositoryEntry);
-			if(mediaContainer != null) {
-				String basePath = registerMapper(ureq, new VFSContainerMapper(mediaContainer.getParentContainer()));
-				description = FilterFactory.getBaseURLToMediaRelativeURLFilter(basePath)
-						.filter(description);
-			}
-			main.contextPut("description", Formatter.formatLatexFormulas(description));
-		}
-		
-		VFSLeaf image = repositoryService.getIntroductionImage(repositoryEntry);
-		if (image != null) {
-			// display only within 600x300 - everything else looks ugly
-			ImageComponent ic = new ImageComponent(ureq.getUserSession(), "image");
-			ic.setMedia(image);
-			ic.setMaxWithAndHeightToFitWithin(600, 300);
-			main.put("image", ic);
-			main.contextPut("hasImage", Boolean.TRUE);
-		} else {
-			main.contextPut("hasImage", Boolean.FALSE);
-		}
-		
-		VFSLeaf video = repositoryService.getIntroductionMovie(repositoryEntry);
-		if (video != null) {
-			// display only within 600x300 - everything else looks ugly
-			ImageComponent ic = new ImageComponent(ureq.getUserSession(), "video");
-			ic.setMedia(video);
-			ic.setMaxWithAndHeightToFitWithin(600, 300);
-			main.put("video", ic);
-			main.contextPut("hasVideo", Boolean.TRUE);
-		} else {
-			main.contextPut("hasVideo", Boolean.FALSE);
-		}
-
-		main.contextPut("id", repositoryEntry.getResourceableId());
-		main.contextPut("ores_id", repositoryEntry.getOlatResource().getResourceableId());
-		main.contextPut("softkey", repositoryEntry.getSoftkey());
-		
-		boolean managed = StringHelper.containsNonWhitespace(repositoryEntry.getExternalId())
-				|| StringHelper.containsNonWhitespace(repositoryEntry.getExternalRef())
-				|| repositoryEntry.getManagedFlags().length > 0;
-		
-		if(managed) {
-			main.contextPut("externalId",
-					repositoryEntry.getExternalId() == null ? "" : repositoryEntry.getExternalId());
-			main.contextPut("externalRef",
-					repositoryEntry.getExternalRef() == null ? "" : repositoryEntry.getExternalRef());
-		}
-		
-		//add the list of owners
-		List<Identity> authors = repositoryService.getMembers(repositoryEntry, GroupRoles.owner.name());
-		List<String> authorLinkNames = new ArrayList<String>(authors.size());
-		int counter = 0;
-		for(Identity author:authors) {
-			String authorName = userManager.getUserDisplayName(author);
-			Link authorLink = LinkFactory.createLink("author_" + counter++, main, this);
-			authorLink.setCustomDisplayText(StringHelper.escapeHtml(authorName));
-			authorLink.setUserObject(author);
-			authorLinkNames.add(authorLink.getComponentName());
-		}
-		main.contextPut("authorlinknames", authorLinkNames);
-		
-		//add the initial author
-		String initialAuthorName = repositoryEntry.getInitialAuthor();
-		List<IdentityShort> initialAuthors = securityManager.findShortIdentitiesByName(Collections.singletonList(initialAuthorName));
-		if(!initialAuthors.isEmpty()) {
-			String authorName = userManager.getUserDisplayName(initialAuthors.get(0));
-			Link authorLink = LinkFactory.createLink("author_" + counter++, main, this);
-			authorLink.setCustomDisplayText(StringHelper.escapeHtml(authorName));
-			authorLink.setUserObject(initialAuthors.get(0));
-			main.contextPut("initialauthorlinkename", authorLink.getComponentName());
-		}
-		
-		main.contextPut("userlang", I18nManager.getInstance().getLocaleKey(ureq.getLocale()));
-		main.contextPut("isGuestAllowed", (repositoryEntry.getAccess() >= RepositoryEntry.ACC_USERS_GUESTS ? Boolean.TRUE	: Boolean.FALSE));
-		main.contextPut("isGuest", Boolean.valueOf(ureq.getUserSession().getRoles().isGuestOnly()));
-
-		String typeName = repositoryEntry.getOlatResource().getResourceableTypeName();
-		StringBuilder typeDisplayText = new StringBuilder(100);
-		if (typeName != null) { // add image and typename code
-			typeDisplayText.append("<span class=\"b_with_small_icon_left ");
-			typeDisplayText.append(RepositoyUIFactory.getIconCssClass(repositoryEntry));
-			typeDisplayText.append("\">");
-			String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale());
-			typeDisplayText.append(tName);
-			if (repositoryEntry != null && RepositoryManager.getInstance().createRepositoryEntryStatus(repositoryEntry.getStatusCode()).isClosed()) {
-				Translator pT = Util.createPackageTranslator(RepositoryEntryStatus.class, ureq.getLocale());
-				typeDisplayText.append(" " + "(" + pT.translate("title.prefix.closed") + ")");
-			}
-			typeDisplayText.append("</span>");
-		} else {
-			typeDisplayText.append(translate("cif.type.na"));
-		}
-		main.contextPut("type", typeDisplayText.toString());
-
-		VelocityContainer infopanelVC = createVelocityContainer("infopanel");
-		// use fallback translator from REST admin package to import managed flags context help strings
-		infopanelVC.setTranslator(Util.createPackageTranslator(RepositoryManager.class, ureq.getLocale(), Util.createPackageTranslator(RestapiAdminController.class, ureq.getLocale())));
-		// show how many users are currently using this resource
-		String numUsers;
-		OLATResourceable ores = repositoryEntry.getOlatResource();
-		int cnt = 0;
-		OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, repositoryEntry.getOlatResource().getResourceableId());
-		if (ores != null) cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
-		numUsers = String.valueOf(cnt);
-		infopanelVC.contextPut("numUsers", numUsers);
-	
-		removeAsListenerAndDispose(displayInfoForm);
-		displayInfoForm = new DisplayInfoForm(ureq, getWindowControl(), repositoryEntry);
-		listenTo(displayInfoForm);
-		main.put("displayform", displayInfoForm.getInitialComponent());
-		
-		infopanelVC.contextPut("isAuthor", Boolean.valueOf(isAuthor));
-		infopanelVC.contextPut("isOwner", Boolean.valueOf(isOwner));
-		// init handler details
-		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
-		infopanelVC.contextPut("iscourse", new Boolean(handler instanceof CourseHandler));
-		main.contextPut("iscourse", new Boolean(handler instanceof CourseHandler));
-		//brasato:: review why such a type check was necessary
-		
-		setCorrupted(false);
-		if (handler instanceof CourseHandler) {
-			try {
-				removeAsListenerAndDispose(courseInfoForm);
-				courseInfoForm = new DisplayCourseInfoForm(ureq, getWindowControl(), CourseFactory.loadCourse(repositoryEntry.getOlatResource()));
-				listenTo(courseInfoForm);
-				infopanelVC.put("CourseInfoForm", courseInfoForm.getInitialComponent());
-			} catch(CorruptedCourseException e) {
-				log.error("", e);
-				setCorrupted(true);
-			}
-		}
-		
-		if(managed && StringHelper.containsNonWhitespace(repositoryEntry.getManagedFlagsString())) {
-			infopanelVC.contextPut("managedflags", repositoryEntry.getManagedFlagsString().trim().split(","));
-		}
-		
-		removeAsListenerAndDispose(detailsForm);
-		detailsForm = handler.createDetailsForm(ureq, getWindowControl(), repositoryEntry.getOlatResource());
-		if (detailsForm != null) { // push handler specific details view
-			listenTo(detailsForm);
-			infopanelVC.contextPut("hasHandlerDetails", Boolean.valueOf("true"));
-			infopanelVC.put("handlerDetails", detailsForm.getInitialComponent());
-		} else {
-			infopanelVC.contextRemove("hasHandlerDetails");
-		}
-		// init reference usage
-		// Where is it in use
-		String referenceDetails = ReferenceManager.getInstance().getReferencesToSummary(repositoryEntry.getOlatResource(), ureq.getLocale());
-		if (referenceDetails != null) {
-			infopanelVC.contextPut("referenceDetails", referenceDetails);
-		} else {
-			infopanelVC.contextRemove("referenceDetails");
-		}
-
-		// Number of launches
-		String numLaunches = String.valueOf(repositoryEntry.getStatistics().getLaunchCounter());
-		infopanelVC.contextPut("numLaunches", numLaunches);
-
-		// Number of downloads
-		String numDownloads;
-		if (repositoryEntry.getCanDownload()) {
-			numDownloads = String.valueOf(repositoryEntry.getStatistics().getDownloadCounter());
-		} else {
-			numDownloads = translate("cif.canDownload.na");
-		}
-
-		infopanelVC.contextPut("numDownloads", numDownloads);
-
-		if (repositoryEntry.getStatistics().getLastUsage() != null) {
-			infopanelVC.contextPut("lastUsage", repositoryEntry.getStatistics().getLastUsage());
-		} else {
-			infopanelVC.contextPut("lastUsage", translate("cif.lastUsage.na"));
-		}
-
-		main.put(infopanelVC.getComponentName(), infopanelVC);
-
-		removeAsListenerAndDispose(groupController);
-		Group group = repositoryService.getDefaultGroup(repositoryEntry);
-		groupController = new GroupController(ureq, getWindowControl(), false, true, false, false, true, false, group, GroupRoles.owner.name());
-		listenTo(groupController);
-		
-		main.put("ownertable", groupController.getInitialComponent());
-	}
-	
-	public void setCorrupted(boolean corrupted) {
-		this.corrupted = corrupted;
-		downloadButton.setEnabled(!corrupted);
-		launchButton.setEnabled(!corrupted);
-		main.contextPut("corrupted", new Boolean(corrupted));
-	}
-
-	/**
-	 * @param ureq
-	 * @param newToolController
-	 */
-	private void updateView(UserRequest ureq) {
-		checkSecurity(ureq);
-		updateRepositoryEntryView(ureq);
-		updateDetailsToolC(ureq);
-		updateCategoriesTableC(ureq);
-	}
-
-	
-	private void updateCategoriesTableC(UserRequest ureq) {		
-		// load category links
-		removeAsListenerAndDispose(repoEntryCategoriesTableController);
-		repoEntryCategoriesTableController = new RepoEntryCategoriesTableController(ureq, getWindowControl(), this.repositoryEntry, (isOlatAdmin || isOwner));
-		listenTo(repoEntryCategoriesTableController);
-		main.put("repoEntryCategoriesTable", repoEntryCategoriesTableController.getInitialComponent());
-	}
-	/**
-	 * @param newToolController
-	 */
-	private void updateDetailsToolC(UserRequest ureq) {
-		boolean isNewController = false;
-		if (detailsToolC == null) {
-			detailsToolC = ToolFactory.createToolController(getWindowControl());
-			listenTo(detailsToolC);
-			isNewController = true;
-		}
-		// init handler details
-		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
-		if (isNewController) {
-			detailsToolC.addHeader(translate("tools.details.header"));
-			detailsToolC.addLink(ACTION_LAUNCH, translate("details.launch"), TOOL_LAUNCH, null, "o_sel_repo_launch", false);
-		}
-		detailsToolC.setEnabled(TOOL_LAUNCH, checkIsRepositoryEntryLaunchable(ureq) && !corrupted);
-		if (!isGuestOnly) {
-			if (isNewController) {
-				//mark as download link
-				detailsToolC.addLink(ACTION_DOWNLOAD, translate("details.download"), TOOL_DOWNLOAD, null, "o_sel_repo_download", true);
-				detailsToolC.addLink(ACTION_DOWNLOAD_BACKWARD_COMPAT, translate("details.download.compatible"), TOOL_DOWNLOAD_BACKWARD_COMPAT,
-						null, "o_sel_repo_download_backward", true);
-				//bookmark
-				boolean marked = markManager.isMarked(repositoryEntry, getIdentity(), null);
-				String css = marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE;
-				detailsToolC.addLink(ACTION_BOOKMARK, translate("details.bookmark"), TOOL_BOOKMARK, css);
-			}
-			boolean canDownload = repositoryEntry.getCanDownload() && handler.supportsDownload(repositoryEntry);
-			// disable download for courses if not author or owner
-			if (repositoryEntry.getOlatResource().getResourceableTypeName().equals(CourseModule.getCourseTypeName())
-				&& !(isOwner || isAuthor)) canDownload = false;
-			// always enable download for owners
-			if (isOwner && handler.supportsDownload(repositoryEntry)) {
-				canDownload = true;
-			}
-			detailsToolC.setEnabled(TOOL_DOWNLOAD, canDownload && !corrupted);
-			detailsToolC.setEnabled(TOOL_DOWNLOAD_BACKWARD_COMPAT, canDownload && !corrupted
-					&& "CourseModule".equals(repositoryEntry.getOlatResource().getResourceableTypeName()));
-			detailsToolC.setEnabled(TOOL_BOOKMARK, !corrupted);
-		}
-		//fxdiff VCRP-1 : moved some things around here to split large toolbox into smaller pieces
-		if (isNewController)
-			detailsToolC.addLink(ACTION_CLOSE, translate("details.close"), null, "b_toolbox_close");
-
-		if (isAuthor || isOwner) {
-			if (isNewController) {
-				detailsToolC.addHeader(translate("edit"));
-			}
-			boolean canCopy = repositoryEntry.getCanCopy();
-			if (isOwner) {
-				if (isNewController) {
-					detailsToolC.addLink(ACTION_EDIT, translate("details.openeditor"), TOOL_EDIT, null, "o_sel_repo_open_editor", false);
-					detailsToolC.addLink(ACTION_EDITDESC, translate("details.chdesc"), TOOL_CHDESC, null, "o_sel_repo_edit_descritpion", false);
-					detailsToolC.addLink(ACTION_EDITPROP, translate("details.chprop"), TOOL_CHPROP, null, "o_sel_repor_edit_properties", false);
-					if(repositoryModule.isCatalogEnabled()) {
-						detailsToolC.addLink(ACTION_ADD_CATALOG, translate("details.catadd"), TOOL_CATALOG, null, "o_sel_repo_add_to_catalog", false);
-					}
-					detailsToolC.addHeader(translate("table.action"));
-
-					boolean closeManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.close);
-					if ((OresHelper.isOfType(repositoryEntry.getOlatResource(), CourseModule.class))
-							&& !closeManaged
-							&& (!RepositoryManager.getInstance().createRepositoryEntryStatus(repositoryEntry.getStatusCode()).isClosed())) {
-						detailsToolC.addLink(ACTION_CLOSE_RESSOURCE, translate("details.close.ressoure"), TOOL_CLOSE_RESSOURCE, null, "o_sel_repo_close_resource", false);
-						if(corrupted) {
-							detailsToolC.setEnabled(TOOL_CLOSE_RESSOURCE, false);
-						}
-					}
-				}
-				// update catalog link
-				if(repositoryModule.isCatalogEnabled()) {
-					boolean addCatalogEnabled = !corrupted &&
-							(repositoryEntry.getAccess() >= RepositoryEntry.ACC_USERS ||
-							repositoryEntry.isMembersOnly());
-					detailsToolC.setEnabled(TOOL_CATALOG, addCatalogEnabled);
-				}
-			}
-			if (isNewController) {
-				if(isAuthor) {
-					detailsToolC.addLink(ACTION_COPY, translate("details.copy"), TOOL_COPY, null, "o_sel_repo_copy", false);
-				}
-			}
-			if (isOwner) {
-				if (isNewController) {
-					detailsToolC.addLink(ACTION_DELETE, translate("details.delete"), TOOL_DELETE, null, "o_sel_repo_delete", false);
-					detailsToolC.addHeader(translate("details.members"));
-					detailsToolC.addLink(ACTION_MEMBERS, translate("details.members"), null, null, "o_sel_repo_members", false);
-					detailsToolC.addLink(ACTION_ORDERS, translate("details.orders"), TOOL_ORDERS, null, "o_sel_repo_booking", false);
-				}
-				
-				if(detailsToolC.hasTool(TOOL_DELETE)) {
-					boolean deleteManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.delete);
-					detailsToolC.setEnabled(TOOL_DELETE, !deleteManaged);
-				}
-				
-				if(detailsToolC.hasTool(TOOL_ORDERS)) {
-					boolean booking = acService.isResourceAccessControled(repositoryEntry.getOlatResource(), null);
-					detailsToolC.setEnabled(TOOL_ORDERS, booking);
-				}
-				
-				// enable
-				boolean editManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.editcontent);
-				detailsToolC.setEnabled(TOOL_EDIT, handler.supportsEdit(repositoryEntry) && !corrupted && !editManaged);
-				detailsToolC.setEnabled(TOOL_CHDESC, !corrupted);
-				detailsToolC.setEnabled(TOOL_CHPROP, !corrupted);
-				
-				canCopy = true;
-			}
-			if(isAuthor) {
-				boolean copyManaged = RepositoryEntryManagedFlag.isManaged(repositoryEntry, RepositoryEntryManagedFlag.copy);
-				detailsToolC.setEnabled(TOOL_COPY, canCopy && !corrupted && !copyManaged);
-			}
-		}
-	}
-
-	/**
-	 * Sets a repository entry for this details controller. Returns a
-	 * corresponding tools controller
-	 * 
-	 * @param entry
-	 * @param ureq
-	 * @return A tool controller representing available tools for the given entry.
-	 */
-	public ToolController setEntry(RepositoryEntry entry, UserRequest ureq) {
-		this.corrupted = false;//reset the flag
-		if (repositoryEntry != null) {
-			// The controller has already a repository-entry => do de-register it
-			CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, repositoryEntry);
-		}
-		repositoryEntry = entry;
-		CoordinatorManager.getInstance().getCoordinator().getEventBus().registerFor(this, ureq.getIdentity(), repositoryEntry);
-		checkSecurity(ureq);
-		removeAsListenerAndDispose(detailsToolC);
-		detailsToolC = null; // force recreation of tool controller
-		updateView(ureq);
-		return detailsToolC;
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Component source, Event event) {
-		String cmd = event.getCommand();
-
-		if (source == main) {
-			if (cmd.equals(ACTION_DETAILSEDIT)) {
-				// detailsForm.setDisplayOnly(false);
-				main.contextPut("enableEdit", Boolean.valueOf(false)); // disable edit
-			} else if (cmd.equals(ACTION_CLOSE)) { // close details
-				doCloseDetailView(ureq);
-			} else if (cmd.equals(ACTION_LAUNCH)) { // launch resource
-
-			}
-		} else if (source instanceof Link) {
-			Link sourceLink = (Link)source;
-			if (sourceLink == backLink){
-				doCloseDetailView(ureq);
-				return;
-			} else if (sourceLink == downloadButton){
-				doDownload(ureq, repositoryEntry, false);
-			} else if (sourceLink == launchButton){
-				doLaunch(ureq, repositoryEntry);
-			} else if (sourceLink == loginLink){
-				DispatcherModule.redirectToDefaultDispatcher(ureq.getHttpResp());
-			} else if (sourceLink.getUserObject() instanceof IdentityShort) {
-				IdentityShort author = (IdentityShort)sourceLink.getUserObject();
-				String businessPath = "[Identity:" + author.getKey() + "]";
-				NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
-			}
-		}
-	}
-
-	@Override
-	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
-		
-	}
-
-	private void doCloseDetailView(UserRequest ureq) {
-		doLaunch(ureq, repositoryEntry);
-	}
-
-	void deleteRepositoryEntry(UserRequest ureq, WindowControl wControl, RepositoryEntry entry) {
-		if (RepositoryManager.getInstance().deleteRepositoryEntryWithAllData( ureq, wControl, repositoryEntry ) ) {
-			fireEvent(ureq, new EntryChangedEvent(entry, EntryChangedEvent.DELETED));
-			showInfo("info.entry.deleted");
-		} else {
-			showInfo("info.could.not.delete.entry");
-		}
-	}
-	
-	/**
-	 * Get displayname of a repository entry. If repository entry a course 
-	 * and is this course closed then add a prefix to the title.
-	 */
-	private String getDisplayName(Locale locale) {
-		// load repositoryEntry again because the hibernate object is 'detached'. 
-		// Otherwise you become an exception when you check owner-group.
-		repositoryEntry = (RepositoryEntry) DBFactory.getInstance().loadObject(repositoryEntry);
-		String displayName = repositoryEntry.getDisplayname();
-		if (repositoryEntry != null && RepositoryManager.getInstance().createRepositoryEntryStatus(repositoryEntry.getStatusCode()).isClosed()) {
-			Translator pT = Util.createPackageTranslator(RepositoryEntryStatus.class, locale);
-			displayName = "[" + pT.translate("title.prefix.closed") + "] ".concat(displayName);
-		}
-		
-		return displayName;
-	}
-
-	/**
-	 * Also used by RepositoryMainController
-	 * 
-	 * @param ureq
-	 */
-	boolean doLaunch(UserRequest ureq, RepositoryEntry re) {
-		RepositoryHandler typeToLaunch = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re);
-		if (typeToLaunch == null){
-			StringBuilder sb = new StringBuilder(translate("error.launch"));
-			sb.append(": No launcher for repository entry: ");
-			sb.append(re.getKey());
-			throw new OLATRuntimeException(RepositoryDetailsController.class,sb.toString(), null);
-		}
-		if (RepositoryManager.getInstance().lookupRepositoryEntry(re.getKey()) == null) {
-			showInfo("info.entry.deleted");
-			return false;
-		}
-		
-		try {
-			String businessPath = "[RepositoryEntry:" + re.getKey() + "]";
-			boolean ok = NewControllerFactory.getInstance().launch(businessPath, ureq, getWindowControl());
-			if(ok) {
-				fireEvent(ureq, LAUNCHED_EVENT);
-			}
-			return ok;
-		} catch (CorruptedCourseException e) {
-			logError("Corrupted course: " + re, e);
-			return false;
-		}
-	}
-
-	private boolean checkIsRepositoryEntryLaunchable(UserRequest ureq) {
-		RepositoryHandler type = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
-		RepositoryManager rm = RepositoryManager.getInstance();
-
-		if (rm.isAllowedToLaunch(ureq, repositoryEntry) || (type.supportsLaunch(repositoryEntry) && ureq.getUserSession().getRoles().isOLATAdmin())) {
-			return true;
-		}
-		return false;
-	}
-
-	private boolean checkIsRepositoryEntryTypeLaunchable() {
-		RepositoryHandler handler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
-		return handler.supportsLaunch(repositoryEntry);
-	}
-
-	/**
-	 * Activates the closeableModalController with the input controller's component, if not null
-	 * @param ureq
-	 * @param contentController
-	 */
-	private void doEditSettings(UserRequest ureq, Controller contentController, String title) {
-	  if (!isAuthor && !isOwner) {
-		  throw new OLATSecurityException("Trying to edit properties , but user is not author: user = " + ureq.getIdentity());
-	  }
-	 
-	  Component component = contentController.getInitialComponent();
-	  
-	  if(component!=null) {
-	  	removeAsListenerAndDispose(settingsCloseableModalController);
-	    settingsCloseableModalController = new CloseableModalController(getWindowControl(), translate("close"),
-			  contentController.getInitialComponent(), true, title);
-	    listenTo(settingsCloseableModalController);
-	    
-	    settingsCloseableModalController.activate();
-	  }
-	  return;
-	}
-
-	/**
-	 * Also used by RepositoryMainController
-	 * 
-	 * @param ureq
-	 */
-	void doDownload(UserRequest ureq, RepositoryEntry re, boolean backwardsCompatible) {
-		RepositoryHandler typeToDownload = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re);
-
-		if (typeToDownload == null){
-			StringBuilder sb = new StringBuilder(translate("error.download"));
-			sb.append(": No download handler for repository entry: ");
-			sb.append(re.getKey());
-			throw new OLATRuntimeException(RepositoryDetailsController.class, sb.toString(), null);
-		}
-		OLATResource ores = OLATResourceManager.getInstance().findResourceable(re.getOlatResource());
-		if (ores == null) {
-			showError("error.download");
-			return;
-		}		
-		boolean isAlreadyLocked = typeToDownload.isLocked(ores);
-		try {			
-		  lockResult = typeToDownload.acquireLock(ores, ureq.getIdentity());
-		  if(lockResult==null || (lockResult!=null && lockResult.isSuccess() && !isAlreadyLocked)) {
-		    MediaResource mr = typeToDownload.getAsMediaResource(ores, backwardsCompatible);
-		    if(mr!=null) {
-		      repositoryService.incrementDownloadCounter(re);
-		      ureq.getDispatchResult().setResultingMediaResource(mr);
-		    } else {
-			    showError("error.export");
-			    fireEvent(ureq, Event.FAILED_EVENT);			
-		    }
-		  } else if(lockResult!=null && lockResult.isSuccess() && isAlreadyLocked) {
-		  	String fullName = userManager.getUserDisplayName(lockResult.getOwner());
-		  	showInfo("warning.course.alreadylocked.bySameUser", fullName);
-		  	lockResult = null; //invalid lock, it was already locked
-		  } else {
-		  	String fullName = userManager.getUserDisplayName(lockResult.getOwner());
-		  	showInfo("warning.course.alreadylocked", fullName);
-		  }
-		}
-		finally {	
-			if((lockResult!=null && lockResult.isSuccess() && !isAlreadyLocked)) {
-			  typeToDownload.releaseLock(lockResult);		
-			  lockResult = null;
-			}
-		}
-	}
-	
-
-	/**
-	 * Also used by RepositoryMainController
-	 * 
-	 * @param ureq
-	 */
-	void doEdit(UserRequest ureq) {
-		if (!isOwner) throw new OLATSecurityException("Trying to launch editor, but not allowed: user = " + ureq.getIdentity());
-		doEdit(ureq, repositoryEntry);
-	}
-		
-	public static void doEdit(UserRequest ureq, RepositoryEntry re) {
-		RepositoryHandler typeToEdit = RepositoryHandlerFactory.getInstance().getRepositoryHandler(re);
-		if (!typeToEdit.supportsEdit(re)){
-			throw new AssertException("Trying to edit repository entry which has no assoiciated editor: "+ typeToEdit);
-		}
-
-		OLATResourceable ores = re.getOlatResource();
-		BusinessControlFactory bcFactory = BusinessControlFactory.getInstance();
-		
-		//was brasato:: DTabs dts = getWindowControl().getDTabs();
-		DTabs dts = Windows.getWindows(ureq).getWindow(ureq).getDTabs();
-		DTab dt = dts.getDTab(ores);
-		if (dt == null) {
-			// does not yet exist -> create and add
-			dt = dts.createDTab(ores, re, re.getDisplayname());
-			if (dt == null){
-				//null means DTabs are full -> warning is shown
-				return;
-			}
-			//user activity logger is set by course factory
-			ContextEntry entry = bcFactory.createContextEntry(re);
-			WindowControl swControl = bcFactory.createBusinessWindowControl(entry, dt.getWindowControl());
-			Controller editorController = typeToEdit.createEditorController(re, ureq, swControl);
-			if(editorController == null){
-				//editor could not be created -> warning is shown
-				return;
-			}
-			dt.setController(editorController);
-			dts.addDTab(ureq, dt);
-		}
-		List<ContextEntry> entries = bcFactory.createCEListFromResourceType(RepositoryDetailsController.ACTIVATE_EDITOR);
-		dts.activate(ureq, dt, entries);
-	}
-
-
-	/**
-	 * Internal helper to initiate the add to catalog workflow
-	 * @param ureq
-	 */
-	private void doAddCatalog(UserRequest ureq) {
-		removeAsListenerAndDispose(catalogAdddController);
-		removeAsListenerAndDispose(closeableModalController);
-		
-		catalogAdddController = new CatalogEntryAddController(ureq, getWindowControl(),
-				repositoryEntry, true, false);
-		listenTo(catalogAdddController);
-		closeableModalController = new CloseableModalController(getWindowControl(), "close",
-				catalogAdddController.getInitialComponent(), true, translate("details.catadd"));
-		listenTo(closeableModalController);
-		closeableModalController.activate();
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
-	public void event(UserRequest ureq, Controller source, Event event) {
-		if (repositoryEntry != null) {
-			repositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(repositoryEntry.getKey());
-		}
-		String cmd = event.getCommand();
-		if (source == ordersController) {
-			//
-		} else if (source == detailsToolC) {
-			if (cmd.equals(ACTION_DOWNLOAD)) { // download
-				doDownload(ureq, repositoryEntry, false);
-				return;
-			} else if (cmd.equals(ACTION_DOWNLOAD_BACKWARD_COMPAT)) {
-				doDownload(ureq, repositoryEntry, true);
-			} else if (cmd.equals(ACTION_LAUNCH)) { // launch resource
-				doLaunch(ureq, repositoryEntry);
-				return;
-			} else if (cmd.equals(ACTION_EDIT)) { // start editor
-				doEdit(ureq);
-				return;
-			} else if (cmd.equals(ACTION_EDITDESC)) { // change description
-				removeAsListenerAndDispose(repositoryEditDescriptionController);
-				repositoryEditDescriptionController = new RepositoryEditDescriptionController(ureq, getWindowControl(), repositoryEntry, false);
-				listenTo(repositoryEditDescriptionController);
-				String title = translate("properties.for", new String[]{ repositoryEntry.getDisplayname() });
-				doEditSettings(ureq, repositoryEditDescriptionController, title);
-				return;
-			} else if (cmd.equals(ACTION_ADD_CATALOG)) { // start add to catalog workflow
-				if(repositoryModule.isCatalogEnabled()) {
-					doAddCatalog(ureq);
-				}
-				return;
-			} else if (cmd.equals(ACTION_CLOSE)) {
-				doCloseDetailView(ureq);
-				return;
-			} else if (cmd.equals(ACTION_BOOKMARK)) {
-				boolean marked = markManager.isMarked(repositoryEntry, getIdentity(), null);
-				if(marked) {
-					markManager.removeMark(repositoryEntry, getIdentity(), null);
-				} else {
-					String businessPath = "[RepositoryEntry:" + repositoryEntry.getKey() + "]";
-					markManager.setMark(repositoryEntry, getIdentity(), null, businessPath);
-				}
-				String css = marked ? Mark.MARK_CSS_LARGE : Mark.MARK_ADD_CSS_LARGE;
-				detailsToolC.setCssClass(TOOL_BOOKMARK, css);
-			} else if (cmd.equals(ACTION_MEMBERS)) { // membership
-				if (!isOwner) throw new OLATSecurityException("Trying to access groupmanagement, but not allowed: user = " + ureq.getIdentity());
-				removeAsListenerAndDispose(cmc);
-				removeAsListenerAndDispose(membersEditController);
-				
-				membersEditController = new RepositoryMembersController(ureq, getWindowControl(), repositoryEntry);
-				listenTo(membersEditController);
-				CloseableModalController cmc = new CloseableModalController(getWindowControl(), translate("close"),
-						membersEditController.getInitialComponent(), true, translate("details.members"));
-				listenTo(cmc);
-				cmc.activate();
-				return;
-			} else if (cmd.equals(ACTION_ORDERS)) {
-				doOrders(ureq);
-				return;
-			} else if (cmd.equals(ACTION_CLOSE_RESSOURCE)) {
-				doCloseResource(ureq);
-				return;
-			} else if (cmd.equals(ACTION_DELETE)) { // delete
-				if (!isOwner) throw new OLATSecurityException("Trying to delete, but not allowed: user = " + ureq.getIdentity());
-				doDelete(ureq);
-				return;
-			}
-		} else if (source == wc) {
-			if (event == Event.CANCELLED_EVENT) {
-				cmc.deactivate();
-				
-			} else if (event == Event.DONE_EVENT) {
-				cmc.deactivate();
-				
-				removeAsListenerAndDispose(detailsToolC);
-				detailsToolC = null; // force recreation of tool controller
-				repositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(repositoryEntry.getKey());
-				
-				updateView(ureq);
-				fireEvent(ureq, Event.CHANGED_EVENT);
-			}
-		} else if (source == repositoryEditDescriptionController) {
-			if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) {
-				// RepositoryEntry changed
-				RepositoryEntry re = repositoryEditDescriptionController.getRepositoryEntry();
-				repositoryEntry = RepositoryManager.getInstance().setDescriptionAndName(repositoryEntry,
-						re.getDisplayname(), re.getAuthors(), re.getDescription(),
-						re.getObjectives(), re.getRequirements(), re.getCredits(),
-						re.getMainLanguage(), re.getExpenditureOfWork(), re.getLifecycle());
-				// do not close upon save/upload image closeableModalController.deactivate();
-				updateView(ureq);
-			} else if (event == Event.CANCELLED_EVENT) {
-				removeAsListenerAndDispose(repositoryEditDescriptionController);
-				repositoryEntry = repositoryEditDescriptionController.getRepositoryEntry();
-			}
-			settingsCloseableModalController.deactivate();
-		} else if (source == deleteDialogController){
-			if (DialogBoxUIFactory.isYesEvent(event)){
-				deleteRepositoryEntry(ureq, getWindowControl(), this.repositoryEntry);
-			}	
-		} else if (source == catalogAdddController) {
-			// finish modal dialog and reload categories list controller
-			closeableModalController.deactivate();
-			updateCategoriesTableC(ureq);
-		}
-	}
-	
-	private void doOrders(UserRequest ureq) {
-		removeAsListenerAndDispose(ordersController);
-
-		ordersController = new OrdersAdminController(ureq, getWindowControl(), repositoryEntry.getOlatResource());
-		listenTo(ordersController);
-
-		removeAsListenerAndDispose(cmc);
-		CloseableModalController cmc = new CloseableModalController(getWindowControl(), translate("close"), ordersController.getInitialComponent());
-		listenTo(cmc);
-		
-		cmc.activate();
-	}
-
-	/**
-	 * @param ureq
-	 */
-	private void doCloseResource(UserRequest ureq) {
-		RepositoryHandler repoHandler = RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry);
-
-		removeAsListenerAndDispose(wc);
-		wc = repoHandler.createCloseResourceController(ureq, getWindowControl(), repositoryEntry);
-		listenTo(wc);
-		
-		wc.startWorkflow();
-		
-		removeAsListenerAndDispose(cmc);
-		cmc = new CloseableModalController(getWindowControl(), translate("close"), wc.getInitialComponent());
-		listenTo(cmc);
-		
-		cmc.activate();
-	}
-	
-	private void doDelete(UserRequest ureq) {
-		//show how many users are currently using this resource
-
-		String dialogTitle = translate("del.header", repositoryEntry.getDisplayname());
-		OLATResourceable courseRunOres = OresHelper.createOLATResourceableInstance(RunMainController.ORES_TYPE_COURSE_RUN, repositoryEntry.getOlatResource().getResourceableId());
-		int cnt = CoordinatorManager.getInstance().getCoordinator().getEventBus().getListeningIdentityCntFor(courseRunOres);
-		
-		String dialogText = translate(corrupted ? "del.confirm.corrupted" : "del.confirm", String.valueOf(cnt));
-		deleteDialogController = activateYesNoDialog(ureq, dialogTitle, dialogText, deleteDialogController);
-	}
-
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose(boolean)
-	 */
-	protected void doDispose() {
-		if(lockResult!=null) {
-			//the lock it is assumed to be released after export/copy operation, but release it anyway in case it failed to release
-			if (repositoryEntry != null) {
-			  RepositoryHandlerFactory.getInstance().getRepositoryHandler(repositoryEntry).releaseLock(lockResult);
-			}  
-			lockResult = null;
-		}
-		if (repositoryEntry != null) {
-			CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, repositoryEntry);
-		}
-		if(copyCloseableModalController!=null) {
-			copyCloseableModalController.dispose();
-			copyCloseableModalController = null;
-		}
-		if(settingsCloseableModalController!=null) {
-			settingsCloseableModalController.dispose();
-			settingsCloseableModalController = null;
-		}		
-	}
-
-	public void event(Event event) {
-		if (event instanceof EntryChangedEvent) {
-			repositoryEntry = RepositoryManager.getInstance().lookupRepositoryEntry(repositoryEntry.getKey());
-		}
-	}
-
-	/**
-	 *
-	 * @return
-	 */
-	public ToolController getDetailsToolController() {
-		return detailsToolC;
-	}
-
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java b/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java
index 7f9c7fc3427ab4518ec0b4e98e2a531bcc66b373..4a5fabb5da2bf276614ac8ad44d8110925835b91 100644
--- a/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java
+++ b/src/main/java/org/olat/repository/controllers/RepositoryEditDescriptionController.java
@@ -32,7 +32,7 @@ import java.util.List;
 import java.util.Set;
 import java.util.UUID;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -163,7 +163,7 @@ public class RepositoryEditDescriptionController extends FormBasicController {
 			typeDisplayText.append("<span class=\"b_with_small_icon_left ");
 			typeDisplayText.append(RepositoyUIFactory.getIconCssClass(repositoryEntry));
 			typeDisplayText.append("\">");
-			String tName = ControllerFactory.translateResourceableTypeName(typeName, getLocale());
+			String tName = NewControllerFactory.translateResourceableTypeName(typeName, getLocale());
 			typeDisplayText.append(tName);
 			typeDisplayText.append("</span>");
 		} else {
diff --git a/src/main/java/org/olat/repository/handlers/WikiHandler.java b/src/main/java/org/olat/repository/handlers/WikiHandler.java
index c24e37a3e07eb1027b3944996e028f92047ed1ed..7c3e6b66e787c40ee52d0988cd935cf6738fa44e 100644
--- a/src/main/java/org/olat/repository/handlers/WikiHandler.java
+++ b/src/main/java/org/olat/repository/handlers/WikiHandler.java
@@ -219,7 +219,7 @@ public class WikiHandler implements RepositoryHandler {
 
 	@Override
 	public boolean supportsEdit(RepositoryEntry repoEntry) {
-		return false;
+		return true;
 	}
 	
 	@Override
@@ -281,8 +281,7 @@ public class WikiHandler implements RepositoryHandler {
 
 	@Override
 	public Controller createEditorController(RepositoryEntry re, UserRequest ureq, WindowControl wControl) {
-		//edit is always part of a wiki
-		return null;
+		return createLaunchController(re, ureq, wControl);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java
index cf8f2f32dba67e240b3289d4cfa7360ed16e5bac..872adee214a39c735cc60948b54667d930eba549 100644
--- a/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java
+++ b/src/main/java/org/olat/repository/ui/author/AuthoringEntryDetailsController.java
@@ -26,7 +26,6 @@ import org.olat.NewControllerFactory;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.catalog.CatalogEntry;
 import org.olat.catalog.CatalogManager;
-import org.olat.catalog.ui.CatalogEntryAddController;
 import org.olat.core.commons.services.commentAndRating.CommentAndRatingDefaultSecurityCallback;
 import org.olat.core.commons.services.commentAndRating.CommentAndRatingSecurityCallback;
 import org.olat.core.commons.services.commentAndRating.ui.UserCommentsController;
@@ -116,11 +115,11 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme
 	private CloseableModalController cmc;
 	private WizardCloseResourceController wc;
 	private OrdersAdminController ordersCtlr;
-	private Controller catalogAdddController;
 	private UserCommentsController commentsCtrl;
 	private DialogBoxController deleteDialogCtrl;
-	private AuthoringEditEntrySettingsController editCtrl;
+	private CatalogSettingsController catalogCtlr;
 	private CopyRepositoryEntryController copyCtrl;
+	private AuthoringEditEntrySettingsController editCtrl;
 	private RepositoryMembersController membersEditController;
 	
 	private final TooledStackedPanel stackPanel;
@@ -225,7 +224,7 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme
 				editSettingsLink.setEnabled(!corrupted);
 
 				if(repositoryModule.isCatalogEnabled()) {
-					catalogLink = LinkFactory.createToolLink("cat", translate("details.catadd"), this, "o_sel_repo_add_to_catalog");
+					catalogLink = LinkFactory.createToolLink("cat", translate("details.categoriesheader"), this, "o_sel_repo_add_to_catalog");
 					catalogLink.setEnabled(!corrupted && (entry.getAccess() >= RepositoryEntry.ACC_USERS || entry.isMembersOnly()));
 				}
 
@@ -454,9 +453,6 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme
 			if (DialogBoxUIFactory.isYesEvent(event)){
 				deleteRepositoryEntry(ureq, getWindowControl());
 			}	
-		} else if (source == catalogAdddController) {
-			// finish modal dialog and reload categories list controller
-			cmc.deactivate();
 		} else if(copyCtrl == source) {
 			cmc.deactivate();
 			if (event == Event.DONE_EVENT) {
@@ -501,17 +497,17 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme
 	}
 
 	private void cleanUp() {
-		removeAsListenerAndDispose(catalogAdddController);
 		removeAsListenerAndDispose(membersEditController);
 		removeAsListenerAndDispose(deleteDialogCtrl);
 		removeAsListenerAndDispose(commentsCtrl);
+		removeAsListenerAndDispose(catalogCtlr);
 		removeAsListenerAndDispose(ordersCtlr);
 		removeAsListenerAndDispose(editCtrl);
 		removeAsListenerAndDispose(cmc);
 		removeAsListenerAndDispose(wc);
-		catalogAdddController = null;
 		deleteDialogCtrl = null;
 		commentsCtrl = null;
+		catalogCtlr = null;
 		ordersCtlr = null;
 		editCtrl = null;
 		cmc = null;
@@ -696,14 +692,8 @@ public class AuthoringEntryDetailsController extends FormBasicController impleme
 	 * @param ureq
 	 */
 	private void doAddCatalog(UserRequest ureq) {
-		if(catalogAdddController != null) return;
-
-		catalogAdddController = new CatalogEntryAddController(ureq, getWindowControl(), entry, true, false);
-		listenTo(catalogAdddController);
-		cmc = new CloseableModalController(getWindowControl(), "close",
-				catalogAdddController.getInitialComponent(), true, translate("details.catadd"));
-		listenTo(cmc);
-		cmc.activate();
+		catalogCtlr = new CatalogSettingsController(ureq, getWindowControl(), stackPanel, entry);
+		listenTo(catalogCtlr);
 	}
 	
 	private void deleteRepositoryEntry(UserRequest ureq, WindowControl wControl) {
diff --git a/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java b/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java
new file mode 100644
index 0000000000000000000000000000000000000000..f83e1013e90fff92e6e7ba9248f2857dfa6b00e6
--- /dev/null
+++ b/src/main/java/org/olat/repository/ui/author/CatalogSettingsController.java
@@ -0,0 +1,129 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.repository.ui.author;
+
+import org.olat.catalog.ui.CatalogEntryAddController;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.stack.TooledStackedPanel;
+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.generic.closablewrapper.CloseableModalController;
+import org.olat.core.util.Util;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryService;
+
+/**
+ * 
+ * Initial date: 09.05.2014<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class CatalogSettingsController extends FormBasicController {
+	
+	private Link addToCatalogLink;
+
+	private CloseableModalController cmc;
+	private Controller catalogAdddController;
+	
+	private RepositoryEntry entry;
+	
+	public CatalogSettingsController(UserRequest ureq, WindowControl wControl,
+			TooledStackedPanel stackPanel, RepositoryEntry entry) {
+		super(ureq, wControl);
+		setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator()));
+		this.entry = entry;
+		
+		initForm(ureq);
+		
+		stackPanel.pushController(translate("details.categoriesheader"), this);
+		addToCatalogLink = LinkFactory.createToolLink("addtocat", "", this);
+		
+		addToCatalogLink = LinkFactory.createToolLink("cat", translate("details.catadd"), this, "o_sel_repo_add_to_catalog");
+		addToCatalogLink.setEnabled((entry.getAccess() >= RepositoryEntry.ACC_USERS || entry.isMembersOnly()));
+		stackPanel.addTool(addToCatalogLink);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		//
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	public void event(UserRequest ureq, Component source, Event event) {
+		if(addToCatalogLink == source) {
+			doAddCatalog(ureq);
+		}
+		super.event(ureq, source, event);
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if(cmc == source) {
+			cleanUp();
+		} else if(catalogAdddController == source) {
+			cmc.deactivate();
+			
+			cleanUp();
+		}
+		super.event(ureq, source, event);
+	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(catalogAdddController);
+		removeAsListenerAndDispose(cmc);
+		catalogAdddController = null;
+		cmc = null;
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+	
+	/**
+	 * Internal helper to initiate the add to catalog workflow
+	 * @param ureq
+	 */
+	private void doAddCatalog(UserRequest ureq) {
+		removeAsListenerAndDispose(catalogAdddController);
+		removeAsListenerAndDispose(cmc);
+		
+		catalogAdddController = new CatalogEntryAddController(ureq, getWindowControl(), entry, true, false);
+		listenTo(catalogAdddController);
+		cmc = new CloseableModalController(getWindowControl(), "close",
+				catalogAdddController.getInitialComponent(), true, translate("details.catadd"));
+		listenTo(cmc);
+		cmc.activate();
+	}
+	
+	
+
+}
diff --git a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
index b4a372b8971bed86533a1637be65e67f5c2a8fea..9b300111dfac7c551ddba2937993e2cbaa2d623e 100644
--- a/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
+++ b/src/main/java/org/olat/repository/ui/author/CreateRepositoryEntryController.java
@@ -19,7 +19,7 @@
  */
 package org.olat.repository.ui.author;
 
-import org.olat.ControllerFactory;
+import org.olat.NewControllerFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
@@ -95,7 +95,7 @@ public class CreateRepositoryEntryController extends FormBasicController {
 			typeDisplayText.append("<span class=\"b_with_small_icon_left ");
 			typeDisplayText.append(RepositoyUIFactory.getIconCssClass(type));
 			typeDisplayText.append("\">");
-			String tName = ControllerFactory.translateResourceableTypeName(type, getLocale());
+			String tName = NewControllerFactory.translateResourceableTypeName(type, getLocale());
 			typeDisplayText.append(tName);
 			typeDisplayText.append("</span>");
 		} else {
diff --git a/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java b/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java
index 3c853851e6f13bbe9943793c507a92c0ab9a8942..52e3cf97b8197fe3955987dcf19ee3fa99fdf9bc 100644
--- a/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/user/HomePageContextEntryControllerCreator.java
@@ -19,6 +19,8 @@
  */
 package org.olat.user;
 
+import java.util.List;
+
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
@@ -56,16 +58,10 @@ public class HomePageContextEntryControllerCreator extends DefaultContextEntryCo
 	 *      org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		Identity identity = extractIdentity(ce);
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
+		Identity identity = extractIdentity(ces.get(0));
 		if (identity == null) return null;
-		UserInfoMainController uimc = new UserInfoMainController(ureq, wControl, identity);
-		return uimc;
-	}
-
-	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
-		return null;
+		return new UserInfoMainController(ureq, wControl, identity);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java
index 0e6cac31526467bf44f17eaba8e91d60caa00ad6..0eeb4a1ce8a8e56a4132acd097271fe2a211df70 100644
--- a/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java
+++ b/src/main/java/org/olat/user/IdentityContextEntryControllerCreator.java
@@ -19,6 +19,8 @@
  */
 package org.olat.user;
 
+import java.util.List;
+
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.Controller;
@@ -58,16 +60,15 @@ public class IdentityContextEntryControllerCreator extends DefaultContextEntryCo
 	 *      org.olat.core.gui.control.WindowControl)
 	 */
 	@Override
-	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
-		Identity identity = getIdentity(ce);
+	public Controller createController(List<ContextEntry> ces, UserRequest ureq, WindowControl wControl) {
+		Identity identity = getIdentity(ces.get(0));
 		if (identity == null) return null;
-		UserInfoMainController uimc = new UserInfoMainController(ureq, wControl, identity);
-		return uimc;
+		return new UserInfoMainController(ureq, wControl, identity);
 	}
 
 	@Override
-	public String getSiteClassName(ContextEntry ce, UserRequest ureq) {
-		Long resId = ce.getOLATResourceable().getResourceableId();
+	public String getSiteClassName(List<ContextEntry> ces, UserRequest ureq) {
+		Long resId = ces.get(0).getOLATResourceable().getResourceableId();
 		if(resId != null && resId.equals(ureq.getIdentity().getKey())) {
 			return HomeSite.class.getName();
 		}
diff --git a/src/main/java/org/olat/user/UserModule.java b/src/main/java/org/olat/user/UserModule.java
index 2d301c45a0242f93cd151891f92a916b38b673dd..f6fb888a296b2208e9a96ffdf4b7aa55a12b5852 100644
--- a/src/main/java/org/olat/user/UserModule.java
+++ b/src/main/java/org/olat/user/UserModule.java
@@ -192,21 +192,19 @@ public class UserModule extends AbstractOLATModule {
 		
 		
 		// Append AfterLoginControllers if any configured
-			if (afterLoginConfig != null) {
-				afterLoginInterceptionManager.addAfterLoginControllerConfig(afterLoginConfig);
-			}
+		if (afterLoginConfig != null) {
+			afterLoginInterceptionManager.addAfterLoginControllerConfig(afterLoginConfig);
+		}
 	}
 
 	@Override
 	protected void initDefaultProperties() {
-		// TODO Auto-generated method stub
-		
+		//
 	}
 
 	@Override
 	protected void initFromChangedProperties() {
-		// TODO Auto-generated method stub
-		
+		//
 	}
 
 	private void checkMandatoryUserProperty(String userPropertyIdentifyer) {