diff --git a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
index 2d54269f507c4a90df60b178895eb11572594db5..717d796a5e5857bb2b97864f899d1f15085d3c67 100644
--- a/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
+++ b/src/main/java/org/olat/core/commons/fullWebApp/BaseFullWebappController.java
@@ -1230,7 +1230,7 @@ public class BaseFullWebappController extends BasicController implements DTabs,
 			}
 			doActivateDTab(dtabi);
 	
-			if(entries != null && !entries.isEmpty() && c instanceof Activateable2) {
+			if(c instanceof Activateable2) {
 				final Activateable2 activateable = ((Activateable2) c);
 				activateable.activate(ureq, entries, null);
 			}
diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index 7ef69bfcb3b2ab699b91f9996aa1ec8f310620b3..7e9b5dff8dab66a772cbcd71202e112175fe9a35 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -319,7 +319,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 		RunMainController run = getRunMainController();
 		if(run != null) {
 			addCustomCSS(ureq);
-			run.toolCtrDone(ureq);
+			run.toolCtrDone(ureq, reSecurity);
 			currentToolCtr = null;
 		}
 	}
@@ -914,6 +914,19 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
+		if(entries == null || entries.isEmpty()) {
+			if(currentToolCtr != null) {
+				addToHistory(ureq, currentToolCtr);
+			} else {
+				Controller runtimeCtrl = getRuntimeController();
+				if(runtimeCtrl instanceof Activateable2) {
+					((Activateable2)runtimeCtrl).activate(ureq, entries, state);
+				} else {
+					addToHistory(ureq, runtimeCtrl);
+				}
+			}
+			return;
+		}
 
 		entries = removeRepositoryEntry(entries);
 		if(entries != null && entries.size() > 0) {
diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java
index f587518fdfcd11fc654683b99906b60908571055..71bd7ee5c5c85e226d5c03ea234465c199ec4905 100644
--- a/src/main/java/org/olat/course/run/RunMainController.java
+++ b/src/main/java/org/olat/course/run/RunMainController.java
@@ -519,7 +519,7 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 		}
 	}
 	
-	protected void toolCtrDone(UserRequest ureq) {
+	protected void toolCtrDone(UserRequest ureq, RepositoryEntrySecurity reSecurity) {
 		if (isInEditor) {
 			isInEditor = false; // for clarity
 			if (needsRebuildAfterPublish) {
@@ -527,9 +527,7 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 				
 			  // rebuild up the running structure for this user, after publish;
 				course = CourseFactory.loadCourse(course.getResourceableId());
-				uce = new UserCourseEnvironmentImpl(ureq.getUserSession().getIdentityEnvironment(), course.getCourseEnvironment(), getWindowControl(),
-						uce.getCoachedGroups(), uce.getParticipatingGroups(), uce.getWaitingLists(),
-						null, null, null);
+				uce = loadUserCourseEnvironment(ureq, reSecurity);
 				// build score now
 				uce.getScoreAccounting().evaluateAll();
 				navHandler = new NavigationHandler(uce, treeFilter, false);
@@ -832,6 +830,11 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
 		if(entries == null || entries.isEmpty()) {
+			if(currentNodeController != null) {
+				addToHistory(ureq, currentNodeController);
+			} else {
+				addToHistory(ureq, this);
+			}
 			return;
 		}
 		
diff --git a/src/main/java/org/olat/group/ui/homepage/GroupInfoMainController.java b/src/main/java/org/olat/group/ui/homepage/GroupInfoMainController.java
index 43fb231e3925c42fb54934075227040d12c78ea1..280d59c4934e51f3bfc315ae38b00d7a72475529 100644
--- a/src/main/java/org/olat/group/ui/homepage/GroupInfoMainController.java
+++ b/src/main/java/org/olat/group/ui/homepage/GroupInfoMainController.java
@@ -117,7 +117,10 @@ public class GroupInfoMainController extends MainLayoutBasicController implement
 
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty()) return;
+		if(entries == null || entries.isEmpty()) {
+			addToHistory(ureq);
+			return;
+		}
 		
 		ContextEntry entry = entries.get(0);
 		String menuItem = entry.getOLATResourceable().getResourceableTypeName();
diff --git a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
index 2f609a6b5974d3b68553f21b3c43bb09619ca305..33d79b204b6c71afa13e5e3eb879d3dbb1f4478d 100644
--- a/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
+++ b/src/main/java/org/olat/group/ui/run/BusinessGroupMainRunController.java
@@ -903,7 +903,13 @@ public class BusinessGroupMainRunController extends MainLayoutBasicController im
 
 	@Override
 	public void activate(UserRequest ureq, List<ContextEntry> entries, StateEntry state) {
-		if(entries == null || entries.isEmpty() || needActivation) return;
+		if(needActivation) {
+			return;
+		}
+		if(entries == null || entries.isEmpty()) {
+			addToHistory(ureq);
+			return;
+		}
 		
 		// release edit lock if available
 		removeAsListenerAndDispose(bgEditCntrllr);