diff --git a/src/main/java/org/olat/admin/AdminModule.java b/src/main/java/org/olat/admin/AdminModule.java
index 858985a12ff948988de4cdd2f6b1cff5c6a1555c..4ee6f59e2a0c1c4f51771b04f7775320f2cdcf00 100644
--- a/src/main/java/org/olat/admin/AdminModule.java
+++ b/src/main/java/org/olat/admin/AdminModule.java
@@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.RandomStringUtils;
 import org.olat.NewControllerFactory;
+import org.olat.admin.site.AdminSite;
 import org.olat.admin.user.UserAdminContextEntryControllerCreator;
 import org.olat.basesecurity.AuthHelper;
 import org.olat.core.commons.fullWebApp.util.GlobalStickyMessage;
@@ -37,6 +38,7 @@ import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.configuration.AbstractOLATModule;
 import org.olat.core.configuration.PersistedProperties;
 import org.olat.core.id.User;
+import org.olat.core.id.context.SiteContextEntryControllerCreator;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.UserSession;
 import org.olat.instantMessaging.rosterandchat.ChangePresenceJob;
@@ -234,6 +236,9 @@ public class AdminModule extends AbstractOLATModule {
 				new UserAdminContextEntryControllerCreator());
 		NewControllerFactory.getInstance().addContextEntryControllerCreator("NewIdentityCreated",
 				new UserAdminContextEntryControllerCreator());
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(AdminSite.class.getSimpleName(),
+				new SiteContextEntryControllerCreator(AdminSite.class));
+		
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java
index 78c654cc32e1011577ff9951db2f2291906f969a..691d7d27dd45d68312171ae7b927820d5c167ec1 100644
--- a/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java
+++ b/src/main/java/org/olat/commons/calendar/CalendarNotificationHandler.java
@@ -28,11 +28,11 @@ import org.olat.commons.calendar.model.KalendarEvent;
 import org.olat.commons.calendar.ui.CalendarController;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
-import org.olat.core.util.notifications.NotificationHelper;
 import org.olat.core.util.notifications.NotificationsHandler;
 import org.olat.core.util.notifications.NotificationsManager;
 import org.olat.core.util.notifications.Publisher;
@@ -145,7 +145,7 @@ public class CalendarNotificationHandler extends LogDelegator implements Notific
 							}
 							String desc = translator.translate("cal.notifications.entry", new String[] { subject, dateStr, location, author });
 							String businessPath = bPath + "[path=" + kalendarEvent.getID() + ":0]";
-							String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath);
+							String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath);
 							SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, modDate, CSS_CLASS_CALENDAR_ICON);
 							si.addSubscriptionListItem(subListItem);
 						}
diff --git a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
index 31102722d5fd055afb42b417dc8f32edd69986ab..8aa5091115280219b4b966d2f1d8982a522117fd 100644
--- a/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
+++ b/src/main/java/org/olat/commons/calendar/ui/WeeklyCalendarController.java
@@ -58,9 +58,13 @@ 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.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.id.UserConstants;
+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.activity.ILoggingAction;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.CodeHelper;
@@ -75,7 +79,7 @@ import org.olat.util.logging.activity.LoggingResourceable;
 import de.bps.olat.util.notifications.SubscriptionProvider;
 import de.bps.olat.util.notifications.SubscriptionProviderImpl;
 
-public class WeeklyCalendarController extends BasicController implements CalendarController, GenericEventListener {
+public class WeeklyCalendarController extends BasicController implements Activateable2, CalendarController, GenericEventListener {
 
 	private static final String CMD_PREVIOUS_WEEK = "pw";
 	private static final String CMD_NEXT_WEEK = "nw";
@@ -505,6 +509,20 @@ public class WeeklyCalendarController extends BasicController implements Calenda
 			}
 		}
 	}
+	
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries == null || entries.isEmpty()) return;
+		
+		String dateEntry = entries.get(0).getOLATResourceable().getResourceableTypeName();
+		if(dateEntry.startsWith("date")) {
+			Date gotoDate = BusinessControlFactory.getInstance().getDateFromContextEntry(entries.get(0));
+			if(gotoDate != null) {
+				weeklyCalendar.setDate(gotoDate);
+				setWeekYearInVelocityPage(vcMain, weeklyCalendar);
+			}
+		}
+	}
 
 	/**
 	 * @param ureq
diff --git a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java
index 08981e68f515107e60ff9dccedd3cc9cc7376800..f26e083438058df0c6e389fe271fdecd3a41e2b4 100644
--- a/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java
+++ b/src/main/java/org/olat/commons/info/notification/InfoMessageNotificationHandler.java
@@ -28,6 +28,7 @@ import org.olat.commons.info.manager.InfoMessageManager;
 import org.olat.commons.info.model.InfoMessage;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.util.Util;
 import org.olat.core.util.notifications.NotificationHelper;
@@ -87,7 +88,7 @@ public class InfoMessageNotificationHandler extends LogDelegator implements Noti
 					String desc = info.getTitle();
 					String tooltip = info.getMessage();
 					String infoBusinessPath = info.getBusinessPath() + "[InfoMessage:" + info.getKey() + "]";
-					String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, infoBusinessPath);
+					String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(infoBusinessPath);
 					Date dateInfo = info.getModificationDate() == null ? info.getCreationDate() : info.getModificationDate();
 					SubscriptionListItem subListItem = new SubscriptionListItem(desc, tooltip, urlToSend, dateInfo, CSS_CLASS_ICON);
 					si.addSubscriptionListItem(subListItem);
diff --git a/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java b/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java
index 65c59b53df29c13b1e0e9171d3248c8059de2f73..bb3a756637a16d054dd2e664175210559f465b7a 100644
--- a/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java
+++ b/src/main/java/org/olat/commons/info/portlet/InfoMessagePortletRunController.java
@@ -19,8 +19,6 @@
  */
 package org.olat.commons.info.portlet;
 
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
@@ -194,14 +192,13 @@ public class InfoMessagePortletRunController extends AbstractPortletRunControlle
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if(source == showAllLink) {
-			DateFormat format = new SimpleDateFormat("yyyyMMdd");
 			Calendar cal = Calendar.getInstance();
 			cal.setTime(new Date());
 			cal.add(Calendar.MONTH, -1);
 			// fxdiff activate homes tab in top navigation and activate the correct
 			// menu item
 			String resourceUrl = "[HomeSite:" + ureq.getIdentity().getKey() + "][notifications:0][type=" + InfoMessage.class.getSimpleName()
-					+ ":0][date=" + format.format(cal.getTime()) + ":0]";
+					+ ":0]" + BusinessControlFactory.getInstance().getContextEntryStringForDate(cal.getTime());
 			BusinessControl bc = BusinessControlFactory.getInstance().createFromString(resourceUrl);
 			WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl());
 			NewControllerFactory.getInstance().launch(ureq, bwControl);
diff --git a/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java b/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java
index 87a2b9b930d7d7760435fe864fb8a8f35527a522..82193108d66021a419db4dbf47a8786350eba7ff 100644
--- a/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java
+++ b/src/main/java/org/olat/core/commons/modules/bc/notifications/FolderNotificationsHandler.java
@@ -37,6 +37,7 @@ import org.olat.core.commons.modules.bc.meta.MetaInfo;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.gui.util.CSSHelper;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Util;
@@ -109,7 +110,7 @@ public class FolderNotificationsHandler implements NotificationsHandler {
 					String desc = translator.translate("notifications.entry", new String[] { title, NotificationHelper.getFormatedName(ident) });
 					String urlToSend = null;
 					if(p.getBusinessPath() != null) {
-						urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath + fi.getRelPath() + "]");
+						urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath + fi.getRelPath() + "]");
 					}
 					subListItem = new SubscriptionListItem(desc, urlToSend, modDate, iconCssClass);
 					si.addSubscriptionListItem(subListItem);
diff --git a/src/main/java/org/olat/core/extensions/ExtManager.java b/src/main/java/org/olat/core/extensions/ExtManager.java
index ca2938e648586c0e0e39dd0c1ed0717a2a79b2e7..787fa310187e30c355bca09cb25e319349554992 100644
--- a/src/main/java/org/olat/core/extensions/ExtManager.java
+++ b/src/main/java/org/olat/core/extensions/ExtManager.java
@@ -56,7 +56,7 @@ public class ExtManager extends LogDelegator {
 	
   private Map<Long,Extension> idExtensionlookup;
 	
-  private Map<String,GenericActionExtension> navKeyGAExtensionlookup;
+  private Map<ExtensionPointKeyPair,GenericActionExtension> navKeyGAExtensionlookup;
   
 	/**
 	 * @return the instance
@@ -112,8 +112,11 @@ public class ExtManager extends LogDelegator {
 	 * @param navKey
 	 * @return the GenericActionExtension or null
 	 */
-	public GenericActionExtension getActionExtensioByNavigationKey(String navKey) {
-		if (navKeyGAExtensionlookup.containsKey(navKey)) return navKeyGAExtensionlookup.get(navKey);
+	public GenericActionExtension getActionExtensioByNavigationKey(String extensionPoint, String navKey) {
+		ExtensionPointKeyPair key = new ExtensionPointKeyPair(extensionPoint, navKey);
+		if (navKeyGAExtensionlookup.containsKey(key)) {
+			return navKeyGAExtensionlookup.get(key);
+		}
 		return null;
 	}
 	
@@ -138,21 +141,12 @@ public class ExtManager extends LogDelegator {
 	public long getTimeOfExtensionStartup() {
 		return timeOfExtensionStartup;
 	}
-
-	/**
-	 * @param extensionPoint
-	 * @param anExt
-	 * @param addInfo additional info to log
-	 */
-	public void inform(Class extensionPoint, Extension anExt, String addInfo) {
-		//Tracing.logAudit(this.getClass(), info: "+addInfo);		// TODO Auto-generated method stub		
-	}
 	
 	private void initExtentions() {
 		logInfo("****** start loading extensions *********");
 		Map<Integer, Extension> orderKeys = new HashMap<Integer, Extension>();
 		idExtensionlookup = new HashMap<Long, Extension>();
-		navKeyGAExtensionlookup = new HashMap<String, GenericActionExtension>();
+		navKeyGAExtensionlookup = new HashMap<ExtensionPointKeyPair, GenericActionExtension>();
 		
 		extensions = new ArrayList<Extension>();
 		Map<String, Object> extensionMap = CoreSpringFactory.getBeansOfType(CoreBeanTypes.extension);
@@ -194,14 +188,18 @@ public class ExtManager extends LogDelegator {
 				idExtensionlookup.put(uid, extension);
 				if (extension instanceof GenericActionExtension) {
 					GenericActionExtension gAE = (GenericActionExtension) extension;
-					if (StringHelper.containsNonWhitespace(gAE.getNavigationKey())) {
-						if (!navKeyGAExtensionlookup.containsKey(gAE.getNavigationKey())) {
-							navKeyGAExtensionlookup.put(gAE.getNavigationKey(), gAE);
-						} else {
-							count_duplnavkey++;
-							logInfo(
+					if (StringHelper.containsNonWhitespace(gAE.getNavigationKey()) && gAE.getExtensionPoints() != null) {
+						List<String>extensionPoints = gAE.getExtensionPoints();
+						for(String extensionPoint:extensionPoints) {
+							ExtensionPointKeyPair key = new ExtensionPointKeyPair(extensionPoint, gAE.getNavigationKey());
+							if (navKeyGAExtensionlookup.containsKey(key)) {
+								count_duplnavkey++;
+								logInfo(
 									"Devel-Info :: duplicate navigation-key for extension :: " + gAE.getNavigationKey() + " [ [" + idExtensionlookup.get(uid)
-											+ "]  and [" + extension + "] ]", null);
+									+ "]  and [" + extension + "] ]", null);
+							} else {
+									navKeyGAExtensionlookup.put(key, gAE);
+							}
 						}
 					}
 				}
@@ -211,5 +209,33 @@ public class ExtManager extends LogDelegator {
 		logInfo("Devel-Info :: initExtensions done. :: "+count_disabled+" disabled Extensions, "+count_duplid+" extensions with duplicate ids, "+count_duplnavkey+ " extensions with duplicate navigationKeys");
 		Collections.sort(extensions);
 	}
+	
+	private class ExtensionPointKeyPair {
+		private String extensionPoint;
+		private String navigationKey;
+		
+		public ExtensionPointKeyPair(String extensionPoint, String navigationKey) {
+			this.extensionPoint = extensionPoint;
+			this.navigationKey = navigationKey;
+		}
+		@Override
+		public int hashCode() {
+			return (extensionPoint  == null ? 9967811 : extensionPoint.hashCode()) + 
+					(navigationKey == null ? 8544 : navigationKey.hashCode());
+		}
+		@Override
+		public boolean equals(Object obj) {
+			if(this == obj) {
+				return true;
+			}
+			if(obj instanceof ExtensionPointKeyPair) {
+				ExtensionPointKeyPair pair = (ExtensionPointKeyPair)obj;
+				return extensionPoint != null && extensionPoint.equals(pair.extensionPoint)
+						&& navigationKey != null && navigationKey.equals(pair.navigationKey);
+			}
+			
+			return false;
+		}
+	}
 
 }
diff --git a/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java b/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java
index f5cd585d6e7ebf75f36d51a3f4a105bdc9201229..36bd09815be82250c5841e8c3411f15ad4577b19 100644
--- a/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java
+++ b/src/main/java/org/olat/core/extensions/action/GenericActionExtension.java
@@ -201,6 +201,10 @@ public class GenericActionExtension extends AbstractExtension implements ActionE
 	public void setNavigationKey(String navKey) {
 		this.navigationKey = navKey;
 	}
+	
+	public List<String> getExtensionPoints() {
+		return extensionPoints;
+	}
 
 	public void setExtensionPoints(List<String> extensionPoints) {
 		this.extensionPoints = extensionPoints;
diff --git a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java
index 38c19e5b5512a0a0c340523bb8a89732395357dd..c14e2d7c9cde02ec771ee67ff4876190d1d746d4 100644
--- a/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java
+++ b/src/main/java/org/olat/core/gui/control/generic/layout/GenericMainController.java
@@ -51,7 +51,6 @@ import org.olat.core.id.context.StateEntry;
 import org.olat.core.logging.AssertException;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.StringHelper;
-import org.olat.core.util.nodes.INode;
 import org.olat.core.util.resource.OresHelper;
 
 /**
@@ -400,7 +399,7 @@ public abstract class GenericMainController extends MainLayoutBasicController {
 			if(vwindex >= 0){
 				naviKey = viewIdentifier.substring(0,viewIdentifier.indexOf(':'));
 			}
-			ae = ExtManager.getInstance().getActionExtensioByNavigationKey(naviKey);
+			ae = ExtManager.getInstance().getActionExtensioByNavigationKey(className, naviKey);
 			if(ae == null){
 				// this happens, if someone uses a navigation key, that no actionExtension uses...
 				logWarn("couldn't find an ActionExtension for  navigationKey '"+naviKey+"' . I suggest adjusting spring configuration for GenericMainController.." , null);
@@ -450,7 +449,7 @@ public abstract class GenericMainController extends MainLayoutBasicController {
 			}
 		} else {
 			// maybe the node is a GAE-NavigationKey ?
-			GenericActionExtension gAE = ExtManager.getInstance().getActionExtensioByNavigationKey(node);
+			GenericActionExtension gAE = ExtManager.getInstance().getActionExtensioByNavigationKey(className, node);
 			if (gAE != null) {
 				activateTreeNodeByActionExtension(ureq, gAE);
 				if (entries.size() >= 1) {
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 c942b2c572ad27b472cb1fa36dd5af611dce6aa2..ebd288063d42ec27b553d4b2191d6de70226218b 100644
--- a/src/main/java/org/olat/core/id/context/BusinessControlFactory.java
+++ b/src/main/java/org/olat/core/id/context/BusinessControlFactory.java
@@ -30,8 +30,12 @@ package org.olat.core.id.context;
 
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -42,7 +46,9 @@ import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.AssertException;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.StringHelper;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.servlets.URLEncoder;
 
@@ -57,10 +63,13 @@ import org.olat.core.util.servlets.URLEncoder;
  */
 public class BusinessControlFactory {
 	
+	private static final OLog log = Tracing.createLoggerFor(BusinessControlFactory.class);
+	
 	private static final BusinessControlFactory INSTANCE = new BusinessControlFactory();
 	final BusinessControl EMPTY; // for performance
 	
 	private static final Pattern PAT_CE = Pattern.compile("\\[([^\\]]*)\\]");
+	private static final DateFormat ceDateFormat = new SimpleDateFormat("yyyyMMdd");
 
 	private BusinessControlFactory() {
 		// singleton
@@ -93,10 +102,6 @@ public class BusinessControlFactory {
 				return false;
 			}
 
-			public int getStackedCount() {
-				return 0;
-			}
-
 			@Override
 			public ContextEntry getCurrentContextEntry() {
 				return null;
@@ -231,10 +236,8 @@ public class BusinessControlFactory {
 	
 	public BusinessControl createFromString(String businessControlString) {
 		final List<ContextEntry> ces = createCEListFromString(businessControlString);
-		
-		ContextEntry rootEntry = null;
-		if (ces.isEmpty() || ((rootEntry = ces.get(0))==null)) {
-			Tracing.logWarn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty. string is "+businessControlString, new Exception("stacktrace"), getClass());
+		if (ces.isEmpty() || ces.get(0) ==null) {
+			log.warn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty. string is "+businessControlString, new Exception("stacktrace"));
 		}
 		return createFromContextEntries(ces);
 	}
@@ -243,7 +246,7 @@ public class BusinessControlFactory {
 	public BusinessControl createFromContextEntries(final List<ContextEntry> ces) {
 		ContextEntry rootEntry = null;
 		if (ces.isEmpty() || ((rootEntry = ces.get(0))==null)) {
-			Tracing.logWarn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty.", new Exception("stacktrace"), getClass());
+			log.warn("OLAT-4103, OLAT-4047, empty or invalid business controll string. list is empty.", new Exception("stacktrace"));
 		}
 		
 		//Root businessControl with RootContextEntry which must be defined (i.e. not null)
@@ -294,7 +297,7 @@ public class BusinessControlFactory {
 					Long key = Long.parseLong(keyS);
 					ores = OresHelper.createOLATResourceableInstanceWithoutCheck(type, key);
 				} catch (NumberFormatException e) {
-					Tracing.logWarn("Cannot parse business path:" + businessControlString, e, BusinessControlFactory.class);
+					log.warn("Cannot parse business path:" + businessControlString, e);
 					return Collections.emptyList();
 				}
 			}
@@ -356,6 +359,41 @@ public class BusinessControlFactory {
 		return retVal.substring(0, retVal.length()-1);
 	}
 	
+	/**
+	 * Return the standard format for date: [date=20120223:0]
+	 * @param date
+	 * @return
+	 */
+	public String getContextEntryStringForDate(Date date) {
+		StringBuilder sb = new StringBuilder("[date=");
+		synchronized(ceDateFormat) {//DateFormat isn't thread safe but costly to create, we reuse it
+			sb.append(ceDateFormat.format(date));
+		}
+		sb.append(":0]");
+		return sb.toString();
+	}
+	
+	public Date getDateFromContextEntry(ContextEntry entry) {
+		String dateEntry = entry.getOLATResourceable().getResourceableTypeName();
+		
+		Date date = null;
+		if(dateEntry.startsWith("date=")) {
+			try {
+				int sepIndex = dateEntry.indexOf(':');
+				int lastIndex = (sepIndex > 0 ? sepIndex : dateEntry.length());
+				if(lastIndex > 0) {
+					String dateStr = dateEntry.substring("date=".length(), lastIndex);
+					synchronized(ceDateFormat) {//DateFormat isn't thread safe but costly to create, we reuse it
+						date = ceDateFormat.parse(dateStr);
+					}
+				}
+			} catch (ParseException e) {
+				log.warn("Error parsing the date after activate: " + dateEntry, e);
+			}
+		}
+		return date;
+	}
+	
 	//fxdiff BAKS-7 Resume function
 	public String getPath(ContextEntry entry) {
 		String path = entry.getOLATResourceable().getResourceableTypeName();
@@ -374,7 +412,6 @@ public class BusinessControlFactory {
 			if(ceStr.startsWith("[path")) {
 				//the %2F make a problem on browsers.
 				//make the change only for path which is generally used
-				//TODO: find a better method or a better separator as |
 				ceStr = ceStr.replace("%2F", "~~");
 			}
 			ceStr = ceStr.replace(':', '/');
@@ -385,6 +422,23 @@ public class BusinessControlFactory {
 		return retVal.substring(0, retVal.length()-1);
 	}
 	
+	public String getURLFromBusinessPathString(String bPathString){
+		if(!StringHelper.containsNonWhitespace(bPathString)) {
+			return null;
+		}
+		
+		try {
+			BusinessControlFactory bCF = BusinessControlFactory.getInstance(); 
+			List<ContextEntry> ceList = bCF.createCEListFromString(bPathString);
+			String busPath = getBusinessPathAsURIFromCEList(ceList); 
+			
+			return Settings.getServerContextPathURI()+"/url/"+busPath;
+		} catch(Exception e) {
+			log.error("Error with business path: " + bPathString, e);
+			return null;
+		}
+	}
+	
 	public String formatFromURI(String restPart) {
 		try {
 			restPart = URLDecoder.decode(restPart, "UTF8");
diff --git a/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java
new file mode 100644
index 0000000000000000000000000000000000000000..866bf605f4b3d90cf8d44282dd7365c46082b908
--- /dev/null
+++ b/src/main/java/org/olat/core/id/context/SiteContextEntryControllerCreator.java
@@ -0,0 +1,60 @@
+/**
+ * <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.core.id.context;
+
+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;
+
+/**
+ * 
+ * Description:<br>
+ * 
+ * <P>
+ * Initial Date:  18 janv. 2012 <br>
+ *
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
+public class SiteContextEntryControllerCreator implements ContextEntryControllerCreator {
+	private final Class<? extends SiteInstance> site;
+	
+	public SiteContextEntryControllerCreator(Class<? extends SiteInstance> site) {
+		this.site = site;
+	}
+
+	public Controller createController(ContextEntry ce, UserRequest ureq, WindowControl wControl) {
+		return null;
+	}
+
+	public String getSiteClassName(ContextEntry ce) {
+		return site.getName();
+	}
+
+	public String getTabName(ContextEntry ce) {
+		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/manager/MailNotificationsHandler.java b/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java
index c49a871ce52c5e1fd5fd9e439e44ca8c2a28dba8..046ff6b81077a9c8d19d54c1cfad461bdf239ce8 100644
--- a/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java
+++ b/src/main/java/org/olat/core/util/mail/manager/MailNotificationsHandler.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Locale;
 
 import org.olat.core.gui.translator.Translator;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
@@ -97,7 +98,7 @@ public class MailNotificationsHandler extends LogDelegator implements Notificati
 					for (DBMail mail : inbox) {
 						String subject = mail.getSubject();
 						String businessPath = "[Inbox:" + mail.getKey() + "]";
-						String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath);
+						String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath);
 						SubscriptionListItem subListItem = new SubscriptionListItem(subject, urlToSend, mail.getCreationDate(), "o_co_icon");
 						si.addSubscriptionListItem(subListItem);
 					}
diff --git a/src/main/java/org/olat/core/util/notifications/NotificationHelper.java b/src/main/java/org/olat/core/util/notifications/NotificationHelper.java
index 7cb9b303c2a6603c50b08647f6b9f268e98a04c1..1324d1c36d24a75cf32c824aa68ffd9bb98dc4b6 100644
--- a/src/main/java/org/olat/core/util/notifications/NotificationHelper.java
+++ b/src/main/java/org/olat/core/util/notifications/NotificationHelper.java
@@ -93,45 +93,6 @@ public class NotificationHelper {
 		return subToSubInfo;
 	}
 	
-	public static String getURLFromBusinessPathString(Publisher p, String bPathString){
-		if(!StringHelper.containsNonWhitespace(bPathString)) {
-			log.error("Publisher without businesspath: " + p.getKey() + " resName:" + p.getResName() + " subidentifier:" + p.getSubidentifier() + " data:" + p.getData());
-			return null;//TODO remove after the upgrade 
-		}
-		
-		try {
-			BusinessControlFactory bCF = BusinessControlFactory.getInstance(); 
-			List<ContextEntry> ceList = bCF.createCEListFromString(bPathString);
-			String busPath = getBusPathStringAsURIFromCEList(ceList); 
-			
-			return Settings.getServerContextPathURI()+"/url/"+busPath;
-		} catch(Exception e) {
-			log.error("Error with publisher: " + p.getKey() + " resName:" + p.getResName() + " subidentifier:" + p.getSubidentifier() + " data:" + p.getData() + " businessPath:" + p.getBusinessPath(), e);
-			return null;
-		}
-	}
-	
-	public static String getBusPathStringAsURIFromCEList(List<ContextEntry> ceList){
-		if(ceList == null || ceList.isEmpty()) return "";
-		
-		StringBuilder retVal = new StringBuilder();
-		//see code in JumpInManager, cannot be used, as it needs BusinessControl-Elements, not the path
-		for (ContextEntry contextEntry : ceList) {
-			String ceStr = contextEntry != null ? contextEntry.toString() : "NULL_ENTRY";
-			if(ceStr.startsWith("[path")) {
-				//the %2F make a problem on browsers.
-				//make the change only for path which is generally used
-				//TODO: find a better method or a better separator as |
-				ceStr = ceStr.replace("%2F", "~~");
-			}
-			ceStr = ceStr.replace(':', '/');
-			ceStr = ceStr.replaceFirst("\\]", "/");
-			ceStr= ceStr.replaceFirst("\\[", "");
-			retVal.append(ceStr);
-		}
-		return retVal.substring(0, retVal.length()-1);
-	}
-	
 	/**
 	 * returns "firstname lastname" or a translated "user unknown" for a given
 	 * identity
diff --git a/src/main/java/org/olat/course/archiver/ArchiverMainController.java b/src/main/java/org/olat/course/archiver/ArchiverMainController.java
index 4549c577d830e37cb6e67e346c3ab97303fe2649..d7571bfb380d19aefc5429e4c1848b2118c04fb0 100644
--- a/src/main/java/org/olat/course/archiver/ArchiverMainController.java
+++ b/src/main/java/org/olat/course/archiver/ArchiverMainController.java
@@ -260,7 +260,6 @@ public class ArchiverMainController extends MainLayoutBasicController {
 				// inform only once
 				if (!extensionLogged) {
 					extensionLogged = true;
-					extm.inform(extensionPointMenu, anExt, "added menu entry (for locale " + locale.toString() + " '" + menuText + "'");
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java b/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java
index ace22b95c2afee58adc9217d69a81d4d0f6b6ae0..aca32be118ca72b4ccf62a2cfda54177b852f1df 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentNotificationsHandler.java
@@ -39,6 +39,7 @@ import org.olat.basesecurity.Constants;
 import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
@@ -381,7 +382,7 @@ public class AssessmentNotificationsHandler implements NotificationsHandler {
 								String urlToSend = null;
 								if(p.getBusinessPath() != null) {
 									String businessPath = p.getBusinessPath() + "[assessmentTool:0][Identity:" + assessedIdentity.getKey() + "][CourseNode:" + test.getIdent() + "]";
-									urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath);
+									urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath);
 								}
 								
 								SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, modDate, CSS_CLASS_USER_ICON);
diff --git a/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java b/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java
index cc418635fbba1f24af221f1fe075dc4b05725e88..a3013443d524f101e7538a6e4e286a1453d65ecc 100644
--- a/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java
+++ b/src/main/java/org/olat/course/nodes/info/SendMailFormatterForCourse.java
@@ -31,7 +31,6 @@ import org.olat.core.helpers.Settings;
 import org.olat.core.id.UserConstants;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.id.context.ContextEntry;
-import org.olat.core.util.notifications.NotificationHelper;
 
 /**
  * 
@@ -69,7 +68,7 @@ public class SendMailFormatterForCourse implements MailFormatter {
 	public String getBody(InfoMessage msg) {
 		BusinessControlFactory bCF = BusinessControlFactory.getInstance(); 
 		List<ContextEntry> ceList = bCF.createCEListFromString(businessPath);
-		String busPath = NotificationHelper.getBusPathStringAsURIFromCEList(ceList); 
+		String busPath = BusinessControlFactory.getInstance().getBusinessPathAsURIFromCEList(ceList); 
 
 		String author =	msg.getAuthor().getUser().getProperty(UserConstants.FIRSTNAME, null) + " " + msg.getAuthor().getUser().getProperty(UserConstants.LASTNAME, null);
 		String date = DateFormat.getDateInstance(DateFormat.MEDIUM, translator.getLocale()).format(msg.getCreationDate());
diff --git a/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java b/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java
index 3e31c79683ded15a1aed3e0e6d72bc0b6d2b9968..8a46581080c1a6f962f96e90b40ffe016c7b01ad 100644
--- a/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java
+++ b/src/main/java/org/olat/course/nodes/ta/AbstractTaskNotificationHandler.java
@@ -38,6 +38,7 @@ import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.logging.OLog;
 import org.olat.core.util.Util;
@@ -99,7 +100,7 @@ public abstract class AbstractTaskNotificationHandler extends LogDelegator {
 							
 							Date modDate = fi.getLastModified();
 							String desc = translator.translate(getNotificationEntryKey(), new String[] { filePath, fullUserName }); 
-							String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, p.getBusinessPath());
+							String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(p.getBusinessPath());
 							
 							String iconCssClass =  null;
 							if (metaInfo != null) {
diff --git a/src/main/java/org/olat/group/BusinessGroupModule.java b/src/main/java/org/olat/group/BusinessGroupModule.java
index 7d459876b876a2de6d5fe9f676e1f528e5d65bb7..4a1e0a3d3c119bcd347359fad9227bdbc630d78b 100644
--- a/src/main/java/org/olat/group/BusinessGroupModule.java
+++ b/src/main/java/org/olat/group/BusinessGroupModule.java
@@ -22,6 +22,9 @@ package org.olat.group;
 import org.olat.NewControllerFactory;
 import org.olat.core.configuration.AbstractOLATModule;
 import org.olat.core.configuration.PersistedProperties;
+import org.olat.core.id.context.SiteContextEntryControllerCreator;
+import org.olat.group.site.GroupsManagementSite;
+import org.olat.group.site.GroupsSite;
 
 /**
  * Description:<br>
@@ -49,6 +52,11 @@ public class BusinessGroupModule extends AbstractOLATModule {
 		// Add controller factory extension point to launch groups
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(BusinessGroup.class.getSimpleName(),
 				new BusinessGroupContextEntryControllerCreator());
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(GroupsSite.class.getSimpleName(),
+				new SiteContextEntryControllerCreator(GroupsSite.class));
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(GroupsManagementSite.class.getSimpleName(),
+				new SiteContextEntryControllerCreator(GroupsManagementSite.class));
+		
 	}
 
 	/**
diff --git a/src/main/java/org/olat/home/HomeCalendarController.java b/src/main/java/org/olat/home/HomeCalendarController.java
index 86fc57b1e366e13874102d319ef20575f6164b0e..343ab005a2f929ccaaba5e897d1391be7de957d3 100644
--- a/src/main/java/org/olat/home/HomeCalendarController.java
+++ b/src/main/java/org/olat/home/HomeCalendarController.java
@@ -47,7 +47,10 @@ 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.Activateable;
+import org.olat.core.gui.control.generic.dtabs.Activateable2;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.ContextEntry;
+import org.olat.core.id.context.StateEntry;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.UserSession;
@@ -67,7 +70,7 @@ import org.olat.group.BusinessGroupManagerImpl;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
 
-public class HomeCalendarController extends BasicController implements Activateable, GenericEventListener {
+public class HomeCalendarController extends BasicController implements Activateable, Activateable2, GenericEventListener {
 
 	OLog log = Tracing.createLoggerFor(this.getClass());
 	
@@ -105,6 +108,13 @@ public class HomeCalendarController extends BasicController implements Activatea
 		calendarController.setFocus(cal.getTime());
 	}
 
+	@Override
+	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries != null && !entries.isEmpty() && calendarController instanceof Activateable2) {
+			((Activateable2)calendarController).activate(ureq, entries, state);
+		}
+	}
+
 	public static List<KalendarRenderWrapper> getListOfCalendarWrappers(UserRequest ureq, WindowControl wControl) {
 		List<KalendarRenderWrapper> calendars = new ArrayList<KalendarRenderWrapper>();
 		
diff --git a/src/main/java/org/olat/home/HomeModule.java b/src/main/java/org/olat/home/HomeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5bf96d56521fb408484afa868f261f77659ed08
--- /dev/null
+++ b/src/main/java/org/olat/home/HomeModule.java
@@ -0,0 +1,65 @@
+/**
+ * <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.home;
+
+import org.olat.NewControllerFactory;
+import org.olat.core.configuration.AbstractOLATModule;
+import org.olat.core.configuration.PersistedProperties;
+import org.olat.core.id.context.SiteContextEntryControllerCreator;
+import org.olat.home.controllerCreators.GuestHomeCEControllerCreator;
+
+/**
+ * 
+ * Description:<br>
+ * 
+ * <P>
+ * Initial Date:  18 janv. 2012 <br>
+ *
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
+public class HomeModule extends AbstractOLATModule {
+
+	@Override
+	public void init() {
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(HomeSite.class.getSimpleName(),
+				new SiteContextEntryControllerCreator(HomeSite.class));
+		
+		NewControllerFactory.getInstance().addContextEntryControllerCreator("Guest",
+				new GuestHomeCEControllerCreator());
+		
+	}
+
+	@Override
+	protected void initDefaultProperties() {
+		//
+	}
+
+	@Override
+	protected void initFromChangedProperties() {
+		//
+	}
+	
+	@Override
+	public void setPersistedProperties(PersistedProperties persistedProperties) {
+		this.moduleConfigProperties = persistedProperties;
+	}
+
+}
diff --git a/src/main/java/org/olat/home/_spring/homeContext.xml b/src/main/java/org/olat/home/_spring/homeContext.xml
index 42d34b7a8b79a666658359d0684fc065be7c0795..547edd99b3d8fb27782c94a857fabd8dadefd908 100644
--- a/src/main/java/org/olat/home/_spring/homeContext.xml
+++ b/src/main/java/org/olat/home/_spring/homeContext.xml
@@ -3,6 +3,9 @@
 	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 	xsi:schemaLocation="http://www.springframework.org/schema/beans 
                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd ">
+                        
+                        
+	<bean class="org.olat.home.HomeModule" init-method="init"/>
 
 	<!-- The Default Home-tab (navigation-tree) Setting -->
 	<!--  the "portal"  (notifications + subscriptions + news ) -->
diff --git a/src/main/java/org/olat/login/AuthBFWCParts.java b/src/main/java/org/olat/login/AuthBFWCParts.java
index 8949a0adbfcb45bc3c660721400876485f1528a8..3f33befde14346f83b53ab6efbd12d88c807a988 100644
--- a/src/main/java/org/olat/login/AuthBFWCParts.java
+++ b/src/main/java/org/olat/login/AuthBFWCParts.java
@@ -123,7 +123,6 @@ public class AuthBFWCParts implements BaseFullWebappControllerParts {
 					SiteDefinition sdef = (SiteDefinition) it_extsites.next();
 					SiteInstance si = sdef.createSite(ureq, wControl);
 					sites.add(si);
-					extm.inform(extensionPointSites, anExt, "added sitedefinition " + sdef.getClass().getName());
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/login/GuestBFWCParts.java b/src/main/java/org/olat/login/GuestBFWCParts.java
index 0bf744340a63985171f8493f404101a0a5b9cf5a..e2a58527eeb373f480a26dd7c8032c94b9f17ec2 100644
--- a/src/main/java/org/olat/login/GuestBFWCParts.java
+++ b/src/main/java/org/olat/login/GuestBFWCParts.java
@@ -136,7 +136,6 @@ public class GuestBFWCParts implements BaseFullWebappControllerParts {
 					SiteDefinition sdef = (SiteDefinition) it_extsites.next();
 					SiteInstance si = sdef.createSite(ureq, wControl);
 					sites.add(si);
-					extm.inform(extensionPointSites, anExt, "added sitedefinition " + sdef.getClass().getName());
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java b/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java
index c45dae0411401ff47ad103492c17f3ef5c968351..66c1625ebd0893c6cc4d194efb67947a8d506599 100644
--- a/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java
+++ b/src/main/java/org/olat/modules/dialog/FileUploadNotificationHandler.java
@@ -33,6 +33,7 @@ import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.gui.util.CSSHelper;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Util;
@@ -98,7 +99,7 @@ public class FileUploadNotificationHandler implements NotificationsHandler {
 						Date modDate = element.getDate();
 
 						String desc = translator.translate("notifications.entry", new String[] { filename, NotificationHelper.getFormatedName(ident) });
-						String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, p.getBusinessPath());
+						String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(p.getBusinessPath());
 						String cssClass = CSSHelper.createFiletypeIconCssClassFor(filename);
 
 						subListItem = new SubscriptionListItem(desc, urlToSend, modDate, cssClass);
diff --git a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
index b86d4cbab17a343d927644870f76ee25bd306628..b04894f60fea34ec69ed1aac5a8827aa03fd0e89 100644
--- a/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
+++ b/src/main/java/org/olat/modules/fo/ForumNotificationsHandler.java
@@ -31,6 +31,7 @@ import java.util.Locale;
 
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
@@ -103,7 +104,7 @@ public class ForumNotificationsHandler extends LogDelegator implements Notificat
 					final String desc = translator.translate(descKey, new String[] { title, name });
 					String urlToSend = null;
 					if(p.getBusinessPath() != null) {
-						urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessControlString + mInfo.getKey().toString() + "]");
+						urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessControlString + mInfo.getKey().toString() + "]");
 					}
 					
 					SubscriptionListItem subListItem = new SubscriptionListItem(desc, urlToSend, modDate, ForumHelper.CSS_ICON_CLASS_MESSAGE);
diff --git a/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java b/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java
index 8fe0a26b21cfd7c04cb98d3f3155193d81625c16..d659461c30de52260dd1d8d732b35a970f320858 100644
--- a/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java
+++ b/src/main/java/org/olat/modules/wiki/WikiPageChangeOrCreateNotificationHandler.java
@@ -34,6 +34,7 @@ import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.LogDelegator;
 import org.olat.core.util.Util;
 import org.olat.core.util.notifications.NotificationHelper;
@@ -143,7 +144,7 @@ public class WikiPageChangeOrCreateNotificationHandler extends LogDelegator impl
 								String bControlString = businessControlString + element.getPageName() + "]";						
 								String urlToSend = null;
 								if(p.getBusinessPath() != null) {
-									urlToSend = NotificationHelper.getURLFromBusinessPathString(p, bControlString);
+									urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(bControlString);
 								}
 								
 								// string[] gets filled into translation key by adding {0...n} to
diff --git a/src/main/java/org/olat/notifications/NotificationNewsController.java b/src/main/java/org/olat/notifications/NotificationNewsController.java
index cfa5cba8b2f70716f50b5db783fa6c371c281c1e..f16b85e179f70456a8b93c2984d1bf0a8734489c 100644
--- a/src/main/java/org/olat/notifications/NotificationNewsController.java
+++ b/src/main/java/org/olat/notifications/NotificationNewsController.java
@@ -164,7 +164,7 @@ class NotificationNewsController extends BasicController implements Activateable
 	}
 
 	/**
-	 * Can set type and date of the controller: identifier in the ofrm of [type=Type:0][date=yyyymmdd:0]
+	 * Can set type and date of the controller: identifier in the ofrm of [type=Type:0][date=yyyyMMdd:0]
 	 * @see org.olat.core.gui.control.generic.dtabs.Activateable#activate(org.olat.core.gui.UserRequest, java.lang.String)
 	 */
 	@Override
diff --git a/src/main/java/org/olat/notifications/NotificationsManagerImpl.java b/src/main/java/org/olat/notifications/NotificationsManagerImpl.java
index 2676ee44ae2761959f3e626a4e2bdc10dc98b176..70bb4acdfb5d625b9ff256fbecaf10514203e1c5 100644
--- a/src/main/java/org/olat/notifications/NotificationsManagerImpl.java
+++ b/src/main/java/org/olat/notifications/NotificationsManagerImpl.java
@@ -49,6 +49,7 @@ import org.olat.core.commons.persistence.DBQuery;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
@@ -1024,7 +1025,7 @@ public class NotificationsManagerImpl extends NotificationsManager implements Us
 			itemLink = subsInfo.getCustomUrl();
 		}
 		if(itemLink == null && pub.getBusinessPath() != null) {
-			itemLink = NotificationHelper.getURLFromBusinessPathString(pub, pub.getBusinessPath());
+			itemLink = BusinessControlFactory.getInstance().getURLFromBusinessPathString(pub.getBusinessPath());
 		}
 		
 		String description = subsInfo.getSpecificInfo(mimeTypeContent, locale);
diff --git a/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java b/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java
index d2c9d57b0b14e0108847220994c2571dc090657f..01f5efc053eb3022739b52d1b4c568f571b98e16 100644
--- a/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java
+++ b/src/main/java/org/olat/portal/calendar/CalendarPortletRunController.java
@@ -26,7 +26,6 @@
 package org.olat.portal.calendar;
 
 import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
@@ -40,7 +39,6 @@ import org.olat.commons.calendar.CalendarUtils;
 import org.olat.commons.calendar.model.KalendarEvent;
 import org.olat.commons.calendar.ui.components.KalendarRenderWrapper;
 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;
@@ -57,12 +55,10 @@ 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.DTabs;
 import org.olat.core.id.context.BusinessControl;
 import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.home.HomeCalendarController;
-import org.olat.home.HomeSite;
 
 /**
  * 
@@ -184,11 +180,12 @@ public class CalendarPortletRunController extends BasicController {
 				if (actionid.equals(CMD_LAUNCH)) {
 					int rowid = te.getRowId();
 					KalendarEvent kalendarEvent = (KalendarEvent)((DefaultTableDataModel)tableController.getTableDataModel()).getObject(rowid);
-					Date startDate = kalendarEvent.getBegin();
-					String activationCmd = "cal." + new SimpleDateFormat("yyyy.MM.dd").format(startDate);
-					DTabs dts = (DTabs)Windows.getWindows(ureq).getWindow(ureq).getAttribute("DTabs");
-					//was brasato:: getWindowControl().getDTabs().activateStatic(ureq, HomeSite.class.getName(), activationCmd);
-					dts.activateStatic(ureq, HomeSite.class.getName(), activationCmd);
+					String resourceUrl = "[HomeSite:" + ureq.getIdentity().getKey() + "][calendar:0]"
+							+ BusinessControlFactory.getInstance().getContextEntryStringForDate(kalendarEvent.getBegin());
+					BusinessControl bc = BusinessControlFactory.getInstance().createFromString(resourceUrl);
+					WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, getWindowControl());
+					NewControllerFactory.getInstance().launch(ureq, bwControl);
+					
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/repository/RepositoryModule.java b/src/main/java/org/olat/repository/RepositoryModule.java
index 7501f575ce7d97150b4c829efa4b86fe7dbb31b7..9d7fb9bf8962c58f0203019700e97c597fbdc686 100644
--- a/src/main/java/org/olat/repository/RepositoryModule.java
+++ b/src/main/java/org/olat/repository/RepositoryModule.java
@@ -23,6 +23,8 @@ import org.olat.NewControllerFactory;
 import org.olat.catalog.CatalogEntry;
 import org.olat.core.configuration.AbstractOLATModule;
 import org.olat.core.configuration.PersistedProperties;
+import org.olat.core.id.context.SiteContextEntryControllerCreator;
+import org.olat.repository.site.RepositorySite;
 
 /**
  * Description:<br>
@@ -45,6 +47,10 @@ public class RepositoryModule extends AbstractOLATModule {
 		
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(CatalogEntry.class.getSimpleName(),
 				new CatalogContextEntryControllerCreator());
+		
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(RepositorySite.class.getSimpleName(),
+				new SiteContextEntryControllerCreator(RepositorySite.class));
+		
 	}
 
 	/**
diff --git a/src/main/java/org/olat/user/UserModule.java b/src/main/java/org/olat/user/UserModule.java
index 1d8503125b3067c244b91bafe137e45c519745f2..4a041715c6012846722ef1664510a2a77bde855a 100644
--- a/src/main/java/org/olat/user/UserModule.java
+++ b/src/main/java/org/olat/user/UserModule.java
@@ -32,6 +32,8 @@ import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
 import org.olat.NewControllerFactory;
+import org.olat.admin.site.UserAdminSite;
+import org.olat.admin.user.UserAdminContextEntryControllerCreator;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.Constants;
@@ -186,6 +188,11 @@ public class UserModule extends AbstractOLATModule {
 		// Add controller factory extension point to launch user profile controller
 		NewControllerFactory.getInstance().addContextEntryControllerCreator(Identity.class.getSimpleName(),
 				new IdentityContextEntryControllerCreator());
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(User.class.getSimpleName(),
+				new UserAdminContextEntryControllerCreator());
+		NewControllerFactory.getInstance().addContextEntryControllerCreator(UserAdminSite.class.getSimpleName(),
+				new UserAdminContextEntryControllerCreator());
+		
 		
 		// Append AfterLoginControllers if any configured
 			if (afterLoginConfig != null) {
diff --git a/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java b/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java
index 6fbc924700c386f15c0a7f4507a2d1765204aea6..5b885fee89c4523a9a4b4ca5accb905d2618c37f 100644
--- a/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java
+++ b/src/main/java/org/olat/user/notification/NewUsersNotificationHandler.java
@@ -26,6 +26,7 @@ import java.util.Locale;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.gui.util.CSSHelper;
 import org.olat.core.id.Identity;
+import org.olat.core.id.context.BusinessControlFactory;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.Util;
@@ -72,7 +73,7 @@ public class NewUsersNotificationHandler implements NotificationsHandler {
 					for (Identity newUser : identities) {
 						String desc = translator.translate("notifications.entry", new String[] { NotificationHelper.getFormatedName(newUser) });
 						String businessPath = "[Identity:" + newUser.getKey() + "]";
-						String urlToSend = NotificationHelper.getURLFromBusinessPathString(p, businessPath);
+						String urlToSend = BusinessControlFactory.getInstance().getURLFromBusinessPathString(businessPath);
 						Date modDate = newUser.getCreationDate();
 						subListItem = new SubscriptionListItem(desc, urlToSend, modDate, CSSHelper.CSS_CLASS_USER);
 						si.addSubscriptionListItem(subListItem);