diff --git a/src/main/java/org/olat/course/nodes/CPCourseNode.java b/src/main/java/org/olat/course/nodes/CPCourseNode.java
index 33abbeaecf0bc5b058290a6fa44f0d09abe5d639..cb35bdd8f134e8005dfa4991cc85ea726927f865 100644
--- a/src/main/java/org/olat/course/nodes/CPCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/CPCourseNode.java
@@ -100,12 +100,10 @@ public class CPCourseNode extends AbstractAccessableCourseNode {
 	@Override
 	public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, WindowControl wControl,
 			UserCourseEnvironment userCourseEnv, NodeEvaluation ne, String nodecmd) {
-		NodeRunConstructionResult ncr;
 		updateModuleConfigDefaults(false);
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance(ICourse.class, userCourseEnv.getCourseEnvironment().getCourseResourceableId());
 		CPRunController cprunC = new CPRunController(getModuleConfiguration(), ureq, wControl, this, nodecmd, ores);
-		ncr = cprunC.createNodeRunConstructionResult(ureq);
-		return ncr;
+		return cprunC.createNodeRunConstructionResult(ureq, null);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/course/nodes/cp/CPRunController.java b/src/main/java/org/olat/course/nodes/cp/CPRunController.java
index 2fc80ad44e268b39dae0009e1cbc8d99338a485d..c01e42c400aac2d753243d05a76e6157d3e38ad1 100644
--- a/src/main/java/org/olat/course/nodes/cp/CPRunController.java
+++ b/src/main/java/org/olat/course/nodes/cp/CPRunController.java
@@ -47,6 +47,7 @@ import org.olat.core.id.context.StateEntry;
 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.vfs.LocalFolderImpl;
 import org.olat.course.editor.NodeEditController;
@@ -243,11 +244,14 @@ public class CPRunController extends BasicController implements ControllerEventL
 		}
 	}
 
-	public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq) {
+	public NodeRunConstructionResult createNodeRunConstructionResult(UserRequest ureq, String selectedNodeId) {
 		NodeRunConstructionResult ncr;
 		if (isExternalMenuConfigured()) {
 			// integrate it into the olat menu
 			Controller ctrl = TitledWrapperHelper.getWrapper(ureq, getWindowControl(), this, cpNode, "o_cp_icon");
+			if(StringHelper.containsNonWhitespace(selectedNodeId) && treeModel.getNodeById(selectedNodeId) != null) {
+				selNodeId = selectedNodeId;
+			}
 			ncr = new NodeRunConstructionResult(ctrl, treeModel, selNodeId, treeNodeClickListener);
 		} else { // no menu to integrate
 			Controller ctrl = TitledWrapperHelper.getWrapper(ureq, getWindowControl(), this, cpNode, "o_cp_icon");
diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java
index 612c9bd5a4682427beafd1c189dd11773f355576..1f5eb5fc2c94d258adb2d3d9d7621d81bcb7c8d1 100644
--- a/src/main/java/org/olat/course/run/RunMainController.java
+++ b/src/main/java/org/olat/course/run/RunMainController.java
@@ -32,7 +32,6 @@ import java.util.Set;
 
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.fullWebApp.LayoutMain3ColsController;
-import org.olat.core.commons.services.mark.MarkManager;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
 import org.olat.core.gui.components.htmlsite.OlatCmdEvent;
@@ -76,7 +75,6 @@ import org.olat.course.DisposedCourseRestartController;
 import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentChangedEvent;
 import org.olat.course.assessment.AssessmentMode;
-import org.olat.course.assessment.EfficiencyStatementManager;
 import org.olat.course.assessment.manager.UserCourseInformationsManager;
 import org.olat.course.config.CourseConfig;
 import org.olat.course.editor.PublishEvent;
@@ -91,15 +89,12 @@ import org.olat.course.run.userview.TreeFilter;
 import org.olat.course.run.userview.UserCourseEnvironmentImpl;
 import org.olat.course.run.userview.VisibleTreeFilter;
 import org.olat.group.BusinessGroup;
-import org.olat.group.BusinessGroupService;
 import org.olat.group.ui.edit.BusinessGroupModifiedEvent;
 import org.olat.modules.cp.TreeNodeEvent;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
-import org.olat.repository.RepositoryService;
 import org.olat.repository.model.RepositoryEntrySecurity;
 import org.olat.util.logging.activity.LoggingResourceable;
-import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * Description: <br>
@@ -139,15 +134,6 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 	private Link nextLink, previousLink;
 	private GlossaryMarkupItemController glossaryMarkerCtr;
 	
-	@Autowired
-	private MarkManager markManager;
-	@Autowired
-	private RepositoryService repositoryService;
-	@Autowired
-	private BusinessGroupService businessGroupService;
-	@Autowired
-	private EfficiencyStatementManager efficiencyStatementManager;
-	
 	/**
 	 * Constructor for the run main controller
 	 * 
diff --git a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java
index 7545e69148b86de63132bc581fd046634a884fb9..a8f2c60dbcb21d36461b37859c982b67de45233f 100644
--- a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java
+++ b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java
@@ -197,7 +197,7 @@ public class NavigationHandler implements Disposable {
 				}
 				if(subtreemodelListener != currentNodeController) {
 					if(subtreemodelListener instanceof CPRunController) {
-						nrcr =  ((CPRunController)subtreemodelListener).createNodeRunConstructionResult(ureq);
+						nrcr =  ((CPRunController)subtreemodelListener).createNodeRunConstructionResult(ureq, selTN.getIdent());
 					} else {
 						nrcr = new NodeRunConstructionResult((Controller)subtreemodelListener);
 					}
@@ -213,18 +213,28 @@ public class NavigationHandler implements Disposable {
 			treeEvent = new TreeEvent(treeEvent.getCommand(), treeEvent.getSubCommand(), selTN.getIdent());
 
 			boolean dispatch = true;
+			String selectedNodeId = null;
 			if(userObject instanceof String) {
+				String sObject = (String)userObject;
 				if(MenuTree.COMMAND_TREENODE_CLICKED.equals(treeEvent.getCommand()) && treeEvent.getSubCommand() == null) {
-					openCourseNodeIds.add((String)userObject);
-					openTreeNodeIds.add((String)userObject);
+					openCourseNodeIds.add(sObject);
+					if(!openTreeNodeIds.contains(sObject)) {
+						openTreeNodeIds.add(sObject);
+					}
+					selectedNodeId = selTN.getIdent();
 				} else if(TreeEvent.COMMAND_TREENODE_OPEN.equals(treeEvent.getSubCommand())) {
-					openCourseNodeIds.add((String)userObject);
-					openTreeNodeIds.add((String)userObject);
+					openCourseNodeIds.add(sObject);
+					if(!openTreeNodeIds.contains(sObject)) {
+						openTreeNodeIds.add(sObject);
+					}
+					selectedNodeId = selTN.getIdent();
 					dispatch = false;
 				} else if(TreeEvent.COMMAND_TREENODE_CLOSE.equals(treeEvent.getSubCommand())) {
 					removeChildrenFromOpenNodes(selTN);
-					openCourseNodeIds.remove(userObject);
-					openTreeNodeIds.remove(userObject);
+					openCourseNodeIds.remove(sObject);
+					openTreeNodeIds.remove(sObject);
+					openCourseNodeIds.remove(selTN.getIdent());
+					openTreeNodeIds.remove(selTN.getIdent());
 					dispatch = false;
 				}
 			}
@@ -234,7 +244,7 @@ public class NavigationHandler implements Disposable {
 				subtreemodelListener.dispatchEvent(ureq, null, treeEvent);
 				// no node construction result indicates handled
 			}
-			ncr = new NodeClickedRef(treeModel, true, selTN.getIdent(), openTreeNodeIds, internCourseNode, nrcr, true);
+			ncr = new NodeClickedRef(treeModel, true, selectedNodeId, openTreeNodeIds, internCourseNode, nrcr, true);
 		} else {
 			// normal dispatching to a coursenode.
 			// get the courseNode that was called
diff --git a/src/main/java/org/olat/modules/cp/CPDisplayController.java b/src/main/java/org/olat/modules/cp/CPDisplayController.java
index 14c83bbf632526c1fa214ea90116be5440024728..f3831b9d52f3e770a02106e27d65279c8093da84 100644
--- a/src/main/java/org/olat/modules/cp/CPDisplayController.java
+++ b/src/main/java/org/olat/modules/cp/CPDisplayController.java
@@ -297,7 +297,6 @@ public class CPDisplayController extends BasicController implements Activateable
 				// adjust the tree selection to the current choice if found
 				selectTreeNode(ureq, nue.getNewUri());
 			}
-		//fxdiff VCRP-13: cp navigation
 		} else if (source == nextLink) {
 			TreeNode nextUri = (TreeNode)nextLink.getUserObject();
 			switchToPage(ureq, nextUri);
@@ -305,7 +304,6 @@ public class CPDisplayController extends BasicController implements Activateable
 				cpTree.setSelectedNode(nextUri);
 			}
 			fireEvent(ureq, new TreeNodeEvent(nextUri));
-		//fxdiff VCRP-13: cp navigation
 		} else if (source == previousLink) {
 			TreeNode previousUri = (TreeNode)previousLink.getUserObject();
 			if(cpTree != null) {
@@ -313,7 +311,6 @@ public class CPDisplayController extends BasicController implements Activateable
 			}
 			switchToPage(ureq, previousUri);
 			fireEvent(ureq, new TreeNodeEvent(previousUri));
-		//fxdiff VCRP-14: print cp
 		} else if (source == printLink) {
 			selectPagesToPrint(ureq);
 		}
@@ -331,13 +328,11 @@ public class CPDisplayController extends BasicController implements Activateable
 					selectTreeNode(ureq, nue.getNewUri());
 				}// else ignore (e.g. misplaced olatcmd event (inner olat link found in a
 					// contentpackaging file)
-			//fxdiff VCRP-14: print cp
 			} else if (source == printPopup) {
 				removeAsListenerAndDispose(printPopup);
 				removeAsListenerAndDispose(printController);
 				printController = null;
 				printPopup = null;
-			//fxdiff VCRP-14: print cp
 			} else if (source == printController) {
 				if(Event.DONE_EVENT == event) {
 					List<String> nodeToPrint = printController.getSelectedNodeIdentifiers();
@@ -377,8 +372,7 @@ public class CPDisplayController extends BasicController implements Activateable
 		printMapper.setSelectedNodeIds(selectedNodeIds);
 		getWindowControl().getWindowBackOffice().sendCommandTo(new JSCommand(sb.toString()));
 	}
-		
-	//fxdiff VCRP-14: print cp
+
 	private void selectPagesToPrint(UserRequest ureq) {
 		removeAsListenerAndDispose(printController);
 		removeAsListenerAndDispose(printPopup);