diff --git a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java
index 7a1c65650326ba64e439d5d6372efc85662e1208..2fe2403e12ea68afbf12927201d38a80565f8091 100644
--- a/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java
+++ b/src/main/java/org/olat/ims/cp/ui/CPEditMainController.java
@@ -170,7 +170,7 @@ public class CPEditMainController extends MainLayoutBasicController {
 				String newIdentifier = treeCtr.addNewHTMLPage();
 				contentCtr.displayPageWithMetadataEditor(ureq, newIdentifier);
 			} else if (event instanceof NewCPPageEvent) {
-				contentCtr.displayPage(ureq, ((NewCPPageEvent) event).getCPPage().getIdentifier());
+				contentCtr.displayPageWithMetadataEditor(ureq, ((NewCPPageEvent) event).getCPPage().getIdentifier());
 			}
 		} else if (source == contentCtr) {
 			// event from contentController
diff --git a/src/main/java/org/olat/ims/cp/ui/CPTreeController.java b/src/main/java/org/olat/ims/cp/ui/CPTreeController.java
index 9126acd9ee6ceb907eed2474efa70cd61077e1ca..7eaa6876e7526a8519d7b9874e183711f5ca05a1 100644
--- a/src/main/java/org/olat/ims/cp/ui/CPTreeController.java
+++ b/src/main/java/org/olat/ims/cp/ui/CPTreeController.java
@@ -98,6 +98,7 @@ public class CPTreeController extends BasicController {
 		treeCtr.setDropEnabled(true);
 		treeCtr.setDropSiblingEnabled(true);
 		treeCtr.setDndAcceptJSMethod("treeAcceptDrop_notWithChildren");
+		treeCtr.setExpandSelectedNode(false);
 		treeCtr.addListener(this);
 
 		setLinks();
@@ -248,10 +249,7 @@ public class CPTreeController extends BasicController {
 		String nodeIdentifier = treeModel.getIdentifierForNodeID(nodeId);
 		CPPage page = new CPPage(nodeIdentifier, cp);
 		page.setTitle(title);
-		if (page.isOrgaPage()) {
-			updateTree();
-		}
-		updatePage(page);
+		updatePage(page); // will update also tree
 	}
 
 	/**
@@ -372,17 +370,17 @@ public class CPTreeController extends BasicController {
 				uploadCtr = null;
 			}
 		} else if (source == uploadCtr) {
-			if (event instanceof NewCPPageEvent) {
-				// TODO:GW Is it necessary to set component dirty?
-				// getInitialComponent().setDirty(true);
-				fireEvent(ureq, event);
-			}
-			// Dispose the cmc and the podcastFormCtr.
+			// Dispose the cmc and the podcastFormCtr first so modal dialog is free for metadata dialog
 			cmc.deactivate();
 			removeAsListenerAndDispose(cmc);
 			cmc = null;
 			removeAsListenerAndDispose(uploadCtr);
 			uploadCtr = null;
+			// Forward event to main controller
+			if (event instanceof NewCPPageEvent) {
+				fireEvent(ureq, event);
+				updateTree();
+			}
 		} else if (source == dialogCtr) {
 			// event from dialog (really-delete-dialog)
 			if (event != Event.CANCELLED_EVENT) {