diff --git a/src/main/java/org/olat/course/member/MembersOverviewController.java b/src/main/java/org/olat/course/member/MembersOverviewController.java
index d8529a0547f02c9b361e1f93f49b82ce0af286be..a541e6c79abacb33c8f051b036dc12d7ccab68b9 100644
--- a/src/main/java/org/olat/course/member/MembersOverviewController.java
+++ b/src/main/java/org/olat/course/member/MembersOverviewController.java
@@ -55,6 +55,7 @@ import org.olat.core.util.mail.MailPackage;
 import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.mail.MailerResult;
 import org.olat.core.util.resource.OresHelper;
+import org.olat.course.member.wizard.ImportMembersContext;
 import org.olat.course.member.wizard.ImportMember_1a_LoginListStep;
 import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep;
 import org.olat.course.run.userview.UserCourseEnvironment;
@@ -90,8 +91,17 @@ public class MembersOverviewController extends BasicController implements Activa
 	private static final String SEG_WAITING_MEMBERS = "Waiting";
 	private static final String SEG_SEARCH_MEMBERS = "Search";
 	
-	private Link overrideLink, unOverrideLink;
-	private final Link allMembersLink, ownersLink, tutorsLink, participantsLink, waitingListLink, searchLink;
+	private Link overrideLink;
+	private Link unOverrideLink;
+	private final Link dedupLink;
+	private final Link addMemberLink;
+	private final Link importMemberLink;
+	private final Link ownersLink;
+	private final Link tutorsLink;
+	private final Link searchLink;
+	private final Link allMembersLink;
+	private final Link waitingListLink;
+	private final Link participantsLink;
 	private final SegmentViewComponent segmentView;
 	private final VelocityContainer mainVC;
 	private final TooledStackedPanel toolbarPanel;
@@ -103,7 +113,6 @@ public class MembersOverviewController extends BasicController implements Activa
 	private AbstractMemberListController waitingCtrl;
 	private AbstractMemberListController selectedCtrl;
 	private AbstractMemberListController searchCtrl;
-	private final Link importMemberLink, addMemberLink, dedupLink;
 
 	private CloseableModalController cmc;
 	private StepsMainRunController importMembersWizard;
@@ -354,7 +363,8 @@ public class MembersOverviewController extends BasicController implements Activa
 	private void doChooseMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1b_ChooseMemberStep(ureq, repoEntry, null, null, overrideManaged);
+		ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, overrideManaged);
+		Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(uureq, runContext);
 			return StepsMainRunController.DONE_MODIFIED;
@@ -369,7 +379,8 @@ public class MembersOverviewController extends BasicController implements Activa
 	private void doImportMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1a_LoginListStep(ureq, repoEntry, null, null, overrideManaged);
+		ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, overrideManaged);
+		Step start = new ImportMember_1a_LoginListStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(uureq, runContext);
 			if(runContext.containsKey("notFounds")) {
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java b/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java
index 6b6d4678d3d8b30281b3646d5525332a810ddaed..8b7e6b391e482cb3bf748274dd221a4789795d3d 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMemberPermissionChoiceController.java
@@ -27,11 +27,8 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.wizard.StepFormBasicController;
 import org.olat.core.gui.control.generic.wizard.StepsEvent;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.group.BusinessGroup;
 import org.olat.group.ui.main.EditMembershipController;
 import org.olat.group.ui.main.MemberPermissionChangeEvent;
-import org.olat.modules.curriculum.Curriculum;
-import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -41,11 +38,10 @@ public class ImportMemberPermissionChoiceController extends StepFormBasicControl
 	private EditMembershipController permissionCtrl;
 
 	public ImportMemberPermissionChoiceController(UserRequest ureq, WindowControl wControl,
-			RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, boolean overrideManaged,
-			Form rootForm, StepsRunContext runContext) {
+			ImportMembersContext membersContext, Form rootForm, StepsRunContext runContext) {
 		super(ureq, wControl, rootForm, runContext, LAYOUT_BAREBONE, null);
 		
-		permissionCtrl = new EditMembershipController(ureq, getWindowControl(), null, repoEntry, group, curriculum, overrideManaged, rootForm);
+		permissionCtrl = new EditMembershipController(ureq, getWindowControl(), null, membersContext, rootForm);
 		listenTo(permissionCtrl);
 
 		initForm (ureq);
@@ -65,10 +61,9 @@ public class ImportMemberPermissionChoiceController extends StepFormBasicControl
 		fireEvent (ureq, StepsEvent.ACTIVATE_NEXT);
 	}
 
-
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
-		boolean allOk = true;
+		boolean allOk = super.validateFormLogic(ureq);
 		
 		MemberPermissionChangeEvent e = new MemberPermissionChangeEvent(null);
 		permissionCtrl.collectRepoChanges(e);
@@ -82,7 +77,7 @@ public class ImportMemberPermissionChoiceController extends StepFormBasicControl
 			allOk &= false;
 		}
 
-		return allOk & super.validateFormLogic(ureq);
+		return allOk;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java
index fa3312fe47fa31b68fb6ea93c7d5d8c269322e8b..0bab04951ee700d550174ad2203af754f3e10f8a 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMember_1a_LoginListStep.java
@@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep;
 import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
 import org.olat.core.gui.control.generic.wizard.StepFormController;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.group.BusinessGroup;
-import org.olat.modules.curriculum.Curriculum;
-import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -36,9 +33,9 @@ import org.olat.repository.RepositoryEntry;
  */
 public class ImportMember_1a_LoginListStep extends BasicStep {
 	
-	public ImportMember_1a_LoginListStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, boolean overrideManaged) {
+	public ImportMember_1a_LoginListStep(UserRequest ureq, ImportMembersContext membersContext) {
 		super(ureq);
-		setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, repoEntry, group, curriculum, overrideManaged));
+		setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, membersContext));
 		setI18nTitleAndDescr("import.import.title", "import.import.title");
 	}
 
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java
index 7778c52a7bbd103814c95c8222c8bb17b030cb0c..2d75e589e4913ec1e66ab42179cb2a5183eb6076 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMember_1b_ChooseMemberStep.java
@@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep;
 import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
 import org.olat.core.gui.control.generic.wizard.StepFormController;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.group.BusinessGroup;
-import org.olat.modules.curriculum.Curriculum;
-import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -36,9 +33,9 @@ import org.olat.repository.RepositoryEntry;
  */
 public class ImportMember_1b_ChooseMemberStep extends BasicStep {
 	
-	public ImportMember_1b_ChooseMemberStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum, boolean overrideManaged) {
+	public ImportMember_1b_ChooseMemberStep(UserRequest ureq, ImportMembersContext membersContext) {
 		super(ureq);
-		setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, repoEntry, group, curriculum, overrideManaged));
+		setNextStep(new ImportMember_2_ConfirmMemberChoiceStep(ureq, membersContext));
 		setI18nTitleAndDescr("import.choose.title", "import.choose.title");
 	}
 
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java
index 571d33f1121fbc8b5114d0c2fce9726b230588ef..988a3cd07a7a8945c1b0ff3ec40d3dc881409b47 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMember_2_ConfirmMemberChoiceStep.java
@@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep;
 import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
 import org.olat.core.gui.control.generic.wizard.StepFormController;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.group.BusinessGroup;
-import org.olat.modules.curriculum.Curriculum;
-import org.olat.repository.RepositoryEntry;
 
 /**
  * 
@@ -36,10 +33,9 @@ import org.olat.repository.RepositoryEntry;
  */
 public class ImportMember_2_ConfirmMemberChoiceStep extends BasicStep {
 	
-	public ImportMember_2_ConfirmMemberChoiceStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group,
-			Curriculum curriculum, boolean overrideManaged) {
+	public ImportMember_2_ConfirmMemberChoiceStep(UserRequest ureq, ImportMembersContext membersContext) {
 		super(ureq);
-		setNextStep(new ImportMember_3_ChoosePermissionStep(ureq, repoEntry, group, curriculum, overrideManaged));
+		setNextStep(new ImportMember_3_ChoosePermissionStep(ureq, membersContext));
 		setI18nTitleAndDescr("import.confirm.title", "import.confirm.title");
 	}
 
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java b/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java
index 2f9729af7c8da4337e0d12d579516bb542d53086..6ee64ef025a7791c4d5c57d65922aced8d5bfa39 100644
--- a/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java
+++ b/src/main/java/org/olat/course/member/wizard/ImportMember_3_ChoosePermissionStep.java
@@ -26,9 +26,6 @@ import org.olat.core.gui.control.generic.wizard.BasicStep;
 import org.olat.core.gui.control.generic.wizard.PrevNextFinishConfig;
 import org.olat.core.gui.control.generic.wizard.StepFormController;
 import org.olat.core.gui.control.generic.wizard.StepsRunContext;
-import org.olat.group.BusinessGroup;
-import org.olat.modules.curriculum.Curriculum;
-import org.olat.repository.RepositoryEntry;
 
 
 /**
@@ -37,19 +34,12 @@ import org.olat.repository.RepositoryEntry;
  */
 public class ImportMember_3_ChoosePermissionStep extends BasicStep {
 
-	private final BusinessGroup group;
-	private final RepositoryEntry repoEntry;
-	private final Curriculum curriculum;
-	private final boolean overrideManaged;
+	private final ImportMembersContext membersContext;
 	
-	public ImportMember_3_ChoosePermissionStep(UserRequest ureq, RepositoryEntry repoEntry, BusinessGroup group,
-			Curriculum curriculum, boolean overrideManaged) {
+	public ImportMember_3_ChoosePermissionStep(UserRequest ureq, ImportMembersContext membersContext) {
 		super(ureq);
-		this.group = group;
-		this.repoEntry = repoEntry;
-		this.curriculum = curriculum;
-		this.overrideManaged = overrideManaged;
-		setNextStep(new ImportMember_4_MailStep(ureq, repoEntry));
+		this.membersContext = membersContext;
+		setNextStep(new ImportMember_4_MailStep(ureq, membersContext.getRepoEntry()));
 		setI18nTitleAndDescr("import.permission.title", "import.permission.title");
 	}
 
@@ -60,6 +50,6 @@ public class ImportMember_3_ChoosePermissionStep extends BasicStep {
 
 	@Override
 	public StepFormController getStepController(UserRequest ureq, WindowControl wControl, StepsRunContext runContext, Form form) {
-		return new ImportMemberPermissionChoiceController(ureq, wControl, repoEntry, group, curriculum, overrideManaged, form, runContext);
+		return new ImportMemberPermissionChoiceController(ureq, wControl, membersContext, form, runContext);
 	}
 }
diff --git a/src/main/java/org/olat/course/member/wizard/ImportMembersContext.java b/src/main/java/org/olat/course/member/wizard/ImportMembersContext.java
new file mode 100644
index 0000000000000000000000000000000000000000..6269123e758313ab75821f60d687f06e22bcac39
--- /dev/null
+++ b/src/main/java/org/olat/course/member/wizard/ImportMembersContext.java
@@ -0,0 +1,81 @@
+/**
+ * <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.course.member.wizard;
+
+import org.olat.group.BusinessGroup;
+import org.olat.modules.curriculum.Curriculum;
+import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.repository.RepositoryEntry;
+
+/**
+ * 
+ * Initial date: 1 avr. 2020<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class ImportMembersContext {
+	
+	private final BusinessGroup group;
+	private final Curriculum curriculum;
+	private final boolean overrideManaged;
+	private final RepositoryEntry repoEntry;
+	private final CurriculumElement rootCurriculumElement;
+	
+	private ImportMembersContext(RepositoryEntry repoEntry, BusinessGroup group, Curriculum curriculum,
+			CurriculumElement rootCurriculumElement, boolean overrideManaged) {
+		this.repoEntry = repoEntry;
+		this.group = group;
+		this.curriculum = curriculum;
+		this.overrideManaged = overrideManaged;
+		this.rootCurriculumElement = rootCurriculumElement;
+	}
+	
+	public static ImportMembersContext valueOf(BusinessGroup businessGroup) {
+		return new ImportMembersContext(null, businessGroup, null, null, false);
+	}
+	
+	public static ImportMembersContext valueOf(RepositoryEntry repoEntry, boolean overrideManaged) {
+		return new ImportMembersContext(repoEntry, null, null, null, overrideManaged);
+	}
+	
+	public static ImportMembersContext valueOf(Curriculum curriculum, CurriculumElement rootCurriculumElement, boolean overrideManaged) {
+		return new ImportMembersContext(null, null, curriculum, rootCurriculumElement, overrideManaged);
+	}
+
+	public BusinessGroup getGroup() {
+		return group;
+	}
+
+	public Curriculum getCurriculum() {
+		return curriculum;
+	}
+
+	public CurriculumElement getRootCurriculumElement() {
+		return rootCurriculumElement;
+	}
+
+	public boolean isOverrideManaged() {
+		return overrideManaged;
+	}
+
+	public RepositoryEntry getRepoEntry() {
+		return repoEntry;
+	}
+}
diff --git a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java
index 65ff3c11527e1896b016abbf5225accfbc8d520a..2c392fff77a120dd3bc48ebbd030324ccf6ed085 100644
--- a/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java
+++ b/src/main/java/org/olat/group/ui/edit/BusinessGroupMembersController.java
@@ -41,6 +41,7 @@ import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.mail.MailHelper;
 import org.olat.core.util.mail.MailPackage;
 import org.olat.core.util.mail.MailTemplate;
+import org.olat.course.member.wizard.ImportMembersContext;
 import org.olat.course.member.wizard.ImportMember_1a_LoginListStep;
 import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep;
 import org.olat.group.BusinessGroup;
@@ -58,12 +59,13 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class BusinessGroupMembersController extends BasicController {
 	
+	private final Link addMemberLink;
+	private final Link importMemberLink;
 	private final VelocityContainer mainVC;
 
 	private final DisplayMemberSwitchForm dmsForm;
 	private final MembershipConfigurationForm configForm;
 	private MemberListController membersController;
-	private final Link importMemberLink, addMemberLink;
 	private StepsMainRunController importMembersWizard;
 	
 	private BusinessGroup businessGroup;
@@ -142,7 +144,7 @@ public class BusinessGroupMembersController extends BasicController {
 		boolean hasWaitingList = businessGroup.getWaitingListEnabled().booleanValue();	
 		Boolean waitingFlag = (Boolean)mainVC.getContext().get("hasWaitingGrp");
 		if(waitingFlag == null || waitingFlag.booleanValue() != hasWaitingList) {
-			mainVC.contextPut("hasWaitingGrp", new Boolean(hasWaitingList));
+			mainVC.contextPut("hasWaitingGrp", Boolean.valueOf(hasWaitingList));
 			dmsForm.setWaitingListVisible(hasWaitingList);
 		}
 		
@@ -200,7 +202,8 @@ public class BusinessGroupMembersController extends BasicController {
 	private void doChooseMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1b_ChooseMemberStep(ureq, null, businessGroup, null, false);
+		ImportMembersContext membersContext = ImportMembersContext.valueOf(businessGroup);
+		Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(runContext);
 			return StepsMainRunController.DONE_MODIFIED;
@@ -215,16 +218,14 @@ public class BusinessGroupMembersController extends BasicController {
 	private void doImportMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1a_LoginListStep(ureq, null, businessGroup, null, false);
-		StepRunnerCallback finish = new StepRunnerCallback() {
-			@Override
-			public Step execute(UserRequest uureq, WindowControl wControl, StepsRunContext runContext) {
-				addMembers(runContext);
-				if(runContext.containsKey("notFounds")) {
-					showWarning("user.notfound", runContext.get("notFounds").toString());
-				}
-				return StepsMainRunController.DONE_MODIFIED;
+		ImportMembersContext membersContext = ImportMembersContext.valueOf(businessGroup);
+		Step start = new ImportMember_1a_LoginListStep(ureq, membersContext);
+		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
+			addMembers(runContext);
+			if(runContext.containsKey("notFounds")) {
+				showWarning("user.notfound", runContext.get("notFounds").toString());
 			}
+			return StepsMainRunController.DONE_MODIFIED;
 		};
 		
 		importMembersWizard = new StepsMainRunController(ureq, getWindowControl(), start, finish, null,
diff --git a/src/main/java/org/olat/group/ui/main/EditMembershipController.java b/src/main/java/org/olat/group/ui/main/EditMembershipController.java
index 363f38a0f478cfe098ee0b697984bc05294657de..0315c67d4febdf51856d45a15715ed12096e85e2 100644
--- a/src/main/java/org/olat/group/ui/main/EditMembershipController.java
+++ b/src/main/java/org/olat/group/ui/main/EditMembershipController.java
@@ -27,6 +27,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import org.olat.basesecurity.GroupRoles;
 import org.olat.core.gui.UserRequest;
@@ -66,6 +67,7 @@ import org.olat.core.util.StringHelper;
 import org.olat.course.member.PermissionHelper;
 import org.olat.course.member.PermissionHelper.BGPermission;
 import org.olat.course.member.PermissionHelper.RepoPermission;
+import org.olat.course.member.wizard.ImportMembersContext;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupManagedFlag;
 import org.olat.group.BusinessGroupMembership;
@@ -105,7 +107,7 @@ public class EditMembershipController extends FormBasicController {
 	private EditGroupMembershipTableDataModel groupTableDataModel;
 	private EditCurriculumMembershipTableDataModel curriculumTableDataModel;
 	
-	private static final String[] repoRightsKeys = {"owner", "tutor", "participant"};
+	private static final String[] repoRightsKeys = { "owner", "tutor", "participant" };
 	
 	private final Identity member;
 	private final List<Identity> members;
@@ -118,6 +120,7 @@ public class EditMembershipController extends FormBasicController {
 	private final BusinessGroup businessGroup;
 	private final RepositoryEntry repoEntry;
 	private final Curriculum curriculum;
+	private final CurriculumElement rootCurriculumElement;
 	
 	@Autowired
 	private RepositoryManager repositoryManager;
@@ -136,7 +139,8 @@ public class EditMembershipController extends FormBasicController {
 		this.members = null;
 		this.repoEntry = repoEntry;
 		this.businessGroup = businessGroup;
-		this.curriculum = null;
+		curriculum = null;
+		rootCurriculumElement = null;
 		this.withButtons = true;
 		this.overrideManaged = overrideManaged;
 		
@@ -172,7 +176,8 @@ public class EditMembershipController extends FormBasicController {
 		this.members = (members == null ? null : new ArrayList<>(members));
 		this.repoEntry = repoEntry;
 		this.businessGroup = businessGroup;
-		this.curriculum = null;
+		curriculum = null;
+		rootCurriculumElement = null;
 		this.withButtons = true;
 		this.overrideManaged = overrideManaged;
 		
@@ -183,16 +188,17 @@ public class EditMembershipController extends FormBasicController {
 	}
 	
 	public EditMembershipController(UserRequest ureq, WindowControl wControl, List<Identity> members,
-			RepositoryEntry repoEntry, BusinessGroup businessGroup, Curriculum curriculum, boolean overrideManaged, Form rootForm) {
+			ImportMembersContext membersContext, Form rootForm) {
 		super(ureq, wControl, LAYOUT_CUSTOM, "edit_member", rootForm);
 		
-		this.member = null;
+		member = null;
 		this.members = (members == null ? null : new ArrayList<>(members));
-		this.repoEntry = repoEntry;
-		this.businessGroup = businessGroup;
-		this.curriculum = curriculum;
+		repoEntry = membersContext.getRepoEntry();
+		businessGroup = membersContext.getGroup();
+		curriculum = membersContext.getCurriculum();
+		rootCurriculumElement = membersContext.getRootCurriculumElement();
 		this.withButtons = false;
-		this.overrideManaged = overrideManaged;
+		overrideManaged = membersContext.isOverrideManaged();
 		
 		memberships = Collections.emptyList();
 
@@ -257,16 +263,7 @@ public class EditMembershipController extends FormBasicController {
 		groupTableDataModel.setObjects(options);
 		groupTableEl.setVisible(!options.isEmpty());
 		
-		List<CurriculumElement> curriculumElements;
-		if(curriculum != null) {
-			curriculumElements = curriculumService.getCurriculumElements(curriculum, CurriculumElementStatus.notDeleted());
-			curriculumElements = orderCurriculumElements(curriculumElements);
-		} else if (repoEntry != null) {
-			curriculumElements = curriculumService.getCurriculumElements(repoEntry);
-		} else {
-			curriculumElements = Collections.emptyList();
-		}
-	
+		List<CurriculumElement> curriculumElements = loadCurriculumElements();
 		List<CurriculumElement> editableElements = curriculumService.filterElementsWithoutManagerRole(curriculumElements, roles);
 		curriculumElementMemberships = memberToLoad == null ? Collections.emptyList() :
 				 curriculumService.getCurriculumElementMemberships(curriculumElements, memberToLoad);
@@ -289,6 +286,21 @@ public class EditMembershipController extends FormBasicController {
 		curriculumTableEl.setVisible(!curriculumOptions.isEmpty());
 	}
 	
+	private List<CurriculumElement> loadCurriculumElements() {
+		List<CurriculumElement> curriculumElements;
+		if(curriculum != null) {
+			curriculumElements = curriculumService.getCurriculumElements(curriculum, CurriculumElementStatus.notDeleted());
+			curriculumElements = orderCurriculumElements(curriculumElements);
+		} else if (repoEntry != null) {
+			curriculumElements = curriculumService.getCurriculumElements(repoEntry);
+		} else {
+			curriculumElements = Collections.emptyList();
+		}
+		return curriculumElements;
+	}
+
+
+	
 	private List<CurriculumElement> orderCurriculumElements(List<CurriculumElement> curriculumElements) {
 		try {
 			List<CurriculumElementRow> rows = new ArrayList<>(curriculumElements.size());
@@ -305,6 +317,9 @@ public class EditMembershipController extends FormBasicController {
 				}
 			}
 			
+			if(rootCurriculumElement != null) {
+				rows = filterCurriculumElements(rows);
+			}
 			Collections.sort(rows, new CurriculumElementTreeRowComparator(getLocale()));
 			
 			List<CurriculumElement> orderedElements = new ArrayList<>(rows.size());
@@ -318,6 +333,36 @@ public class EditMembershipController extends FormBasicController {
 		}
 	}
 	
+	private List<CurriculumElementRow> filterCurriculumElements(List<CurriculumElementRow> rows) {
+		for(CurriculumElementRow row:rows) {
+			if(row != null) {
+				boolean hasRoot = hasRootCurriculumElementInParentLine(row);
+				row.setAcceptedByFilter(hasRoot);
+			}
+		}
+		
+		for(CurriculumElementRow row:rows) {
+			if(row.isAcceptedByFilter()) {
+				for(CurriculumElementRow parent=row.getParent(); parent != null; parent=parent.getParent()) {
+					parent.setAcceptedByFilter(true);
+				}
+			}
+		}
+		
+		return rows.stream()
+				.filter(CurriculumElementRow::isAcceptedByFilter)
+				.collect(Collectors.toList());
+	}
+	
+	private boolean hasRootCurriculumElementInParentLine(CurriculumElementRow curriculumElement) {
+		for(CurriculumElementRow parentElement=curriculumElement; parentElement != null; parentElement = parentElement.getParent()) {
+			if(parentElement.getCurriculumElement().equals(rootCurriculumElement)) {
+				return true;
+			}	
+		}
+		return false;
+	}
+	
 	private MultipleSelectionElement createSelection(boolean selected, boolean enabled, String role) {
 		String name = "cb" + UUID.randomUUID().toString().replace("-", "");
 		MultipleSelectionElement selection = new MultipleSelectionElementImpl(name, Layout.horizontal);
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
index 30c20612ce27d482f6cf0dc7d7813099d32671f9..7417a532809ffe0030d935bf3bcd8b1b600af42e 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
@@ -72,6 +72,7 @@ import org.olat.core.id.context.StateEntry;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.resource.OresHelper;
+import org.olat.course.member.wizard.ImportMembersContext;
 import org.olat.course.member.wizard.ImportMember_1a_LoginListStep;
 import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep;
 import org.olat.group.ui.main.MemberPermissionChangeEvent;
@@ -565,7 +566,10 @@ public class CurriculumComposerController extends FormBasicController implements
 	private void doChooseMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1b_ChooseMemberStep(ureq, null, null, curriculum, overrideManaged);
+		CurriculumElementRow focusedRow = tableModel.getFocusedCurriculumElementRow();
+		CurriculumElement focusedElement = focusedRow == null ? null : focusedRow.getCurriculumElement();
+		ImportMembersContext membersContext= ImportMembersContext.valueOf(curriculum, focusedElement, overrideManaged);
+		Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(uureq, runContext);
 			return StepsMainRunController.DONE_MODIFIED;
@@ -580,7 +584,10 @@ public class CurriculumComposerController extends FormBasicController implements
 	private void doImportMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1a_LoginListStep(ureq, null, null, curriculum, overrideManaged);
+		CurriculumElementRow focusedRow = tableModel.getFocusedCurriculumElementRow();
+		CurriculumElement focusedElement = focusedRow == null ? null : focusedRow.getCurriculumElement();
+		ImportMembersContext membersContext= ImportMembersContext.valueOf(curriculum, focusedElement, overrideManaged);
+		Step start = new ImportMember_1a_LoginListStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(uureq, runContext);
 			if(runContext.containsKey("notFounds")) {
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java
index 8b0979c4139b7679f9bf27909fec1f670e50c52b..81e266c3e0f0a57cdd3c2b0fee785837b9be7abc 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java
@@ -152,6 +152,10 @@ public class CurriculumComposerTableModel extends DefaultFlexiTreeTableDataModel
 		return accept;
 	}
 	
+	public CurriculumElementRow getFocusedCurriculumElementRow() {
+		return focusedNode;
+	}
+	
 	public CurriculumElementRow getCurriculumElementRowByKey(Long elementKey) {
 		List<CurriculumElementRow> rows = new ArrayList<>(backupRows);
 		for(CurriculumElementRow row:rows) {
diff --git a/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java b/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java
index dc0ef06569d9106a9bb35193cbe0ee53f4366082..53f8c4dd1bea96d4413bbe95a94f2e37a077378c 100644
--- a/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java
+++ b/src/main/java/org/olat/repository/ui/author/RepositoryMembersController.java
@@ -43,6 +43,7 @@ import org.olat.core.util.mail.MailHelper;
 import org.olat.core.util.mail.MailPackage;
 import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.mail.MailerResult;
+import org.olat.course.member.wizard.ImportMembersContext;
 import org.olat.course.member.wizard.ImportMember_1a_LoginListStep;
 import org.olat.course.member.wizard.ImportMember_1b_ChooseMemberStep;
 import org.olat.group.BusinessGroupService;
@@ -144,7 +145,8 @@ public class RepositoryMembersController extends AbstractMemberListController {
 	private void doChooseMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1b_ChooseMemberStep(ureq, repoEntry, null, null, false);
+		ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, false);
+		Step start = new ImportMember_1b_ChooseMemberStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(uureq, runContext);
 			return StepsMainRunController.DONE_MODIFIED;
@@ -159,7 +161,8 @@ public class RepositoryMembersController extends AbstractMemberListController {
 	private void doImportMembers(UserRequest ureq) {
 		removeAsListenerAndDispose(importMembersWizard);
 
-		Step start = new ImportMember_1a_LoginListStep(ureq, repoEntry, null, null, false);
+		ImportMembersContext membersContext = ImportMembersContext.valueOf(repoEntry, false);
+		Step start = new ImportMember_1a_LoginListStep(ureq, membersContext);
 		StepRunnerCallback finish = (uureq, wControl, runContext) -> {
 			addMembers(uureq, runContext);
 			if(runContext.containsKey("notFounds")) {