diff --git a/src/main/java/de/bps/course/nodes/den/DENManager.java b/src/main/java/de/bps/course/nodes/den/DENManager.java
index 2e2ed6fbf885daceab38916529521d81058e2a5c..32cdfd033332339b9a5c9dbfbaa6d66c06561b11 100644
--- a/src/main/java/de/bps/course/nodes/den/DENManager.java
+++ b/src/main/java/de/bps/course/nodes/den/DENManager.java
@@ -38,6 +38,7 @@ import org.olat.commons.calendar.model.KalendarEvent;
 import org.olat.commons.calendar.model.KalendarEventLink;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.EscapeMode;
 import org.olat.core.gui.components.table.BooleanColumnDescriptor;
 import org.olat.core.gui.components.table.DefaultColumnDescriptor;
 import org.olat.core.gui.components.table.TableController;
@@ -608,11 +609,15 @@ public class DENManager {
 		tableCntrl.addColumnDescriptor(new StrongColumnDescriptor("dates.table.location", 3, null, ureq.getLocale()));
 		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.duration", 2, null, ureq.getLocale()));
 		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.comment", 4, null, ureq.getLocale()));
-		tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.participant.name", 5, null, ureq.getLocale()));
+		DefaultColumnDescriptor dcd = new DefaultColumnDescriptor("dates.table.participant.name", 5, null, ureq.getLocale());
+		dcd.setEscapeHtml(EscapeMode.none);
+		tableCntrl.addColumnDescriptor(dcd);
 		
 		boolean isAdministrativeUser = CoreSpringFactory.getImpl(BaseSecurityModule.class).isUserAllowedAdminProps(ureq.getUserSession().getRoles());
 		if(isAdministrativeUser) {
-			tableCntrl.addColumnDescriptor(new DefaultColumnDescriptor("dates.table.participant.username", 6, null, ureq.getLocale()));
+			DefaultColumnDescriptor ucd = new DefaultColumnDescriptor("dates.table.participant.username", 6, null, ureq.getLocale());
+			ucd.setEscapeHtml(EscapeMode.none);
+			tableCntrl.addColumnDescriptor(ucd);
 		}
 		
 		tableCntrl.addColumnDescriptor(new BooleanColumnDescriptor("participants", 7, DENListTableDataModel.CHANGE_ACTION,
diff --git a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep02.java b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep02.java
index c8aa8a7f5827dc5c6b35931a77cc331fb7e6e423..94bb648a27bd55f59e25bb4b6b0bf5f8187613e7 100644
--- a/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep02.java
+++ b/src/main/java/org/olat/admin/user/bulkChange/UserBulkChangeStep02.java
@@ -37,14 +37,17 @@ import org.olat.basesecurity.Constants;
 import org.olat.basesecurity.SecurityGroup;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.EscapeMode;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.impl.Form;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelImpl;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.TextFlexiCellRenderer;
 import org.olat.core.gui.components.table.TableDataModel;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
@@ -246,22 +249,23 @@ class UserBulkChangeStep02 extends BasicStep {
 				// add each user:
 				mergedDataChanges.add(userDataArray);
 			}
-
+			
+			TextFlexiCellRenderer textRenderer = new TextFlexiCellRenderer(EscapeMode.none);
 			FlexiTableColumnModel tableColumnModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
 			// fixed fields:
 			int colPos = 0;
 			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.user.login", colPos++));
 			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("form.name.pwd", colPos++));
-			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("form.name.language", colPos++));
+			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, "form.name.language", colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
 			for (int j = 0; j < userPropertyHandlers.size(); j++) {
 				UserPropertyHandler userPropertyHandler = userPropertyHandlers.get(j);
-				tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos++));
+				tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
 			}
-			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.role.useradmin", colPos++));
-			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.role.groupadmin", colPos++));
-			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.role.author", colPos++));
-			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.role.admin", colPos++));
-			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel("table.role.status", colPos++));
+			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, "table.role.useradmin", colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
+			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, "table.role.groupadmin", colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
+			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, "table.role.author", colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
+			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, "table.role.admin", colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
+			tableColumnModel.addFlexiColumnModel(new DefaultFlexiColumnModel(true, "table.role.status", colPos++, false, null, FlexiColumnModel.ALIGNMENT_LEFT, textRenderer));
 
 			FlexiTableDataModel<List<String>> tableDataModel = new FlexiTableDataModelImpl<List<String>>(new OverviewModel(mergedDataChanges, colPos), tableColumnModel);
 			uifactory.addTableElement(ureq, getWindowControl(), "newUsers", tableDataModel, formLayoutVertical);
diff --git a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java
index 816e04167459bc98c83bb63b292aa71fa3e4f443..8458a6bf2dec2e49d6ab4f068cf1f08de9f9df42 100644
--- a/src/main/java/org/olat/core/util/mail/MailBoxExtension.java
+++ b/src/main/java/org/olat/core/util/mail/MailBoxExtension.java
@@ -126,7 +126,7 @@ public class MailBoxExtension extends BasicManager implements MailContextResolve
 			mailManager.delete(inMail, identity, true);
 		}
 
-		Collection<DBMailLight> outbox = new HashSet<DBMailLight>(mailManager.getOutbox(identity, 0, 0));
+		Collection<DBMailLight> outbox = new HashSet<DBMailLight>(mailManager.getOutbox(identity, 0, 0, false));
 		for(DBMailLight outMail:outbox) {
 			mailManager.delete(outMail, identity, true);
 		}
diff --git a/src/main/java/org/olat/core/util/mail/MailManager.java b/src/main/java/org/olat/core/util/mail/MailManager.java
index 3e66f60f61ef29483c36387fae1a7b0a770da778..95766d2ba10f484f92c1ddfb6c91155a4931f68f 100644
--- a/src/main/java/org/olat/core/util/mail/MailManager.java
+++ b/src/main/java/org/olat/core/util/mail/MailManager.java
@@ -113,7 +113,7 @@ public interface MailManager {
 	 * @param maxResults
 	 * @return
 	 */
-	public List<DBMailLight> getOutbox(Identity from, int firstResult, int maxResults);
+	public List<DBMailLight> getOutbox(Identity from, int firstResult, int maxResults, boolean fetchRecipients);
 	
 	public List<DBMailLight> getEmailsByMetaId(String metaId);
 	
diff --git a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
index 3a7952f128dbdadacb400e78eb21902736c3bfb7..39824cb575ca0da5874b86312b978498d7ac6009 100644
--- a/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
+++ b/src/main/java/org/olat/core/util/mail/manager/MailManagerImpl.java
@@ -507,13 +507,13 @@ public class MailManagerImpl extends BasicManager implements MailManager {
 	 * @return
 	 */
 	@Override
-	public List<DBMailLight> getOutbox(Identity from, int firstResult, int maxResults) {
+	public List<DBMailLight> getOutbox(Identity from, int firstResult, int maxResults, boolean fetchRecipients) {
 		StringBuilder sb = new StringBuilder();
 		sb.append("select distinct(mail) from ").append(DBMailLightImpl.class.getName()).append(" mail")
 			.append(" inner join fetch mail.from fromRecipient")
 			.append(" inner join fromRecipient.recipient fromRecipientIdentity")
-			.append(" inner join mail.recipients recipient")
-			.append(" inner join recipient.recipient recipientIdentity")
+			.append(" inner join ").append(fetchRecipients ? "fetch" : "").append(" mail.recipients recipient")
+			.append(" inner join ").append(fetchRecipients ? "fetch" : "").append(" recipient.recipient recipientIdentity")
 			.append(" where fromRecipientIdentity.key=:fromKey and fromRecipient.deleted=false and recipientIdentity.key!=:fromKey")
 			.append(" order by mail.creationDate desc");
 
diff --git a/src/main/java/org/olat/core/util/mail/ui/MailListController.java b/src/main/java/org/olat/core/util/mail/ui/MailListController.java
index c8b4068a1bd2b2226c1cdf0ecd33d75c9cd77032..fa3dd38abc9b22d21245fe6b0542b52056d0bd95 100644
--- a/src/main/java/org/olat/core/util/mail/ui/MailListController.java
+++ b/src/main/java/org/olat/core/util/mail/ui/MailListController.java
@@ -234,7 +234,7 @@ public class MailListController extends BasicController implements Activateable2
 			if(StringHelper.containsNonWhitespace(metaId)) {
 				mails = mailManager.getEmailsByMetaId(metaId);
 			} else {
-				mails = mailManager.getOutbox(getIdentity(), 0, -1);
+				mails = mailManager.getOutbox(getIdentity(), 0, -1, true);
 			}
 			
 			//strip meta emails
diff --git a/src/main/java/org/olat/course/nodes/en/ENRunController.java b/src/main/java/org/olat/course/nodes/en/ENRunController.java
index 8bbee772a671b05ed2f076e898bfa2bb5db5a60d..e1e38b9aa2c4f4ddca6933f0fdf1eb8043dbd12a 100644
--- a/src/main/java/org/olat/course/nodes/en/ENRunController.java
+++ b/src/main/java/org/olat/course/nodes/en/ENRunController.java
@@ -30,6 +30,7 @@ import java.util.List;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.EscapeMode;
 import org.olat.core.gui.components.table.BooleanColumnDescriptor;
 import org.olat.core.gui.components.table.DefaultColumnDescriptor;
 import org.olat.core.gui.components.table.Table;
@@ -277,7 +278,9 @@ public class ENRunController extends BasicController implements GenericEventList
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("grouplist.table.desc", 1, null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("grouplist.table.partipiciant", 2, null, ureq.getLocale()));
 		tableCtr.addColumnDescriptor(hasAnyWaitingList,new DefaultColumnDescriptor("grouplist.table.waitingList", 3, null, ureq.getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("grouplist.table.state", 4, null, ureq.getLocale()));
+		DefaultColumnDescriptor stateColdEsc = new DefaultColumnDescriptor("grouplist.table.state", 4, null, ureq.getLocale());
+		stateColdEsc.setEscapeHtml(EscapeMode.none);
+		tableCtr.addColumnDescriptor(stateColdEsc);
 		BooleanColumnDescriptor columnDesc = new BooleanColumnDescriptor("grouplist.table.enroll", 5, CMD_ENROLL_IN_GROUP,
 		  	translate(CMD_ENROLL_IN_GROUP), translate("grouplist.table.no_action"));
 		columnDesc.setSortingAllowed(false);
diff --git a/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java b/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java
index f86ea8094f856fb35f1cab9cb86392cfdba5f7f7..7c59346826d82440b837acf2ccff51aa8a3ad5ce 100644
--- a/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java
+++ b/src/main/java/org/olat/repository/ui/RepositoryEntryAccessColumnDescriptor.java
@@ -52,29 +52,30 @@ public class RepositoryEntryAccessColumnDescriptor implements CustomCellRenderer
 		//fxdiff VCRP-1,2: access control of resources
 			if(re.isMembersOnly()) {
 				sb.append(translator.translate("table.header.access.membersonly")); 
-			}
-			switch (re.getAccess()) {
-				case RepositoryEntry.ACC_OWNERS:
-					sb.append(translator.translate("table.header.access.owner"));
-					break;
-				case RepositoryEntry.ACC_OWNERS_AUTHORS:
-					sb.append(translator.translate("table.header.access.author"));
-					break;
-				case RepositoryEntry.ACC_USERS:
-					sb.append(translator.translate("table.header.access.user"));
-					break;
-				case RepositoryEntry.ACC_USERS_GUESTS: {
-					if(!guestLoginEnabled) {
+			} else {
+				switch (re.getAccess()) {
+					case RepositoryEntry.ACC_OWNERS:
+						sb.append(translator.translate("table.header.access.owner"));
+						break;
+					case RepositoryEntry.ACC_OWNERS_AUTHORS:
+						sb.append(translator.translate("table.header.access.author"));
+						break;
+					case RepositoryEntry.ACC_USERS:
 						sb.append(translator.translate("table.header.access.user"));
-					} else {
-						sb.append(translator.translate("table.header.access.guest"));
+						break;
+					case RepositoryEntry.ACC_USERS_GUESTS: {
+						if(!guestLoginEnabled) {
+							sb.append(translator.translate("table.header.access.user"));
+						} else {
+							sb.append(translator.translate("table.header.access.guest"));
+						}
+						break;
 					}
-					break;
+					default:						
+						// OLAT-6272 in case of broken repo entries with no access code
+						// return error instead of nothing
+						sb.append("ERROR");
 				}
-				default:						
-					// OLAT-6272 in case of broken repo entries with no access code
-					// return error instead of nothing
-					sb.append("ERROR");
 			}
 		}
 	}
diff --git a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
index e9d3379b5d8d21bf6ead14fbb253f9e8dae0d420..7d01b6feb7e2238de682bf8e1a82db53c86d3bd3 100644
--- a/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
+++ b/src/main/java/org/olat/restapi/repository/course/CoursesWebService.java
@@ -210,9 +210,9 @@ public class CoursesWebService {
 	@PUT
 	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
 	public Response createEmptyCourse(@QueryParam("shortTitle") String shortTitle, @QueryParam("title") String title,
-			@QueryParam("softKey") String softKey, @QueryParam("externalId") String externalId,
-			@QueryParam("externalRef") String externalRef, @QueryParam("managedFlags") String managedFlags,
-			@QueryParam("sharedFolderSoftKey") String sharedFolderSoftKey,
+			@QueryParam("softKey") String softKey, @QueryParam("access") Integer access, @QueryParam("membersOnly") Boolean membersOnly, 
+			@QueryParam("externalId") String externalId, @QueryParam("externalRef") String externalRef,
+			@QueryParam("managedFlags") String managedFlags, @QueryParam("sharedFolderSoftKey") String sharedFolderSoftKey,
 			@QueryParam("copyFrom") Long copyFrom,
 			@Context HttpServletRequest request) {
 		if(!isAuthor(request)) {
@@ -221,12 +221,15 @@ public class CoursesWebService {
 		CourseConfigVO configVO = new CourseConfigVO();
 		configVO.setSharedFolderSoftKey(sharedFolderSoftKey);
 		
+		int accessInt = (access == null ? RepositoryEntry.ACC_OWNERS : access.intValue());
+		boolean membersOnlyBool = (membersOnly == null ? false : membersOnly.booleanValue());
+		
 		ICourse course;
 		UserRequest ureq = getUserRequest(request);
 		if(copyFrom != null) {
-			course = copyCourse(copyFrom, ureq, shortTitle, title, softKey, externalId, externalRef, managedFlags, configVO);
+			course = copyCourse(copyFrom, ureq, shortTitle, title, softKey, accessInt, membersOnlyBool, externalId, externalRef, managedFlags, configVO);
 		} else {
-			course = createEmptyCourse(ureq.getIdentity(), shortTitle, title, softKey, externalId, externalRef, managedFlags, configVO);
+			course = createEmptyCourse(ureq.getIdentity(), shortTitle, title, softKey, accessInt, membersOnlyBool, externalId, externalRef, managedFlags, configVO);
 		}
 		CourseVO vo = ObjectFactory.get(course);
 		return Response.ok(vo).build();
@@ -255,8 +258,9 @@ public class CoursesWebService {
 
 		CourseConfigVO configVO = new CourseConfigVO();
 		ICourse course = createEmptyCourse(ureq.getIdentity(), courseVo.getTitle(),
-				courseVo.getTitle(), courseVo.getSoftKey(), courseVo.getExternalId(),
-				courseVo.getExternalRef(), courseVo.getManagedFlags(), configVO);
+				courseVo.getTitle(), courseVo.getSoftKey(), RepositoryEntry.ACC_OWNERS, false,
+				courseVo.getExternalId(), courseVo.getExternalRef(), courseVo.getManagedFlags(),
+				configVO);
 		CourseVO vo = ObjectFactory.get(course);
 		return Response.ok(vo).build();
 	}
@@ -287,9 +291,11 @@ public class CoursesWebService {
 			if(length > 0) {
 				Long accessRaw = partsReader.getLongValue("access");
 				int access = accessRaw != null ? accessRaw.intValue() : RepositoryEntry.ACC_OWNERS;
+				String membersOnlyRaw = partsReader.getValue("membersOnly");
+				boolean membersonly = "true".equals(membersOnlyRaw);
 				String softKey = partsReader.getValue("softkey");
 				String displayName = partsReader.getValue("displayname");
-				ICourse course = importCourse(ureq, identity, tmpFile, displayName, softKey, access);
+				ICourse course = importCourse(ureq, identity, tmpFile, displayName, softKey, access, membersonly);
 				CourseVO vo = ObjectFactory.get(course);
 				return Response.ok(vo).build();
 			}
@@ -305,7 +311,7 @@ public class CoursesWebService {
 	}
 	
 	public static ICourse importCourse(UserRequest ureq, Identity identity, File fCourseImportZIP,
-			String displayName, String softKey, int access) {
+			String displayName, String softKey, int access, boolean membersOnly) {
 		
 		log.info("REST Import course " + displayName + " START");
 		
@@ -344,7 +350,7 @@ public class CoursesWebService {
 
 		//make the repository
 		RepositoryEntry re = createCourseRepositoryEntry(identity, displayName, softKey, null, null, null, newCourseResource);
-		prepareSecurityGroup(identity, re, access);
+		prepareSecurityGroup(identity, re, access, membersOnly);
 		
 		//update tree
 		course.getRunStructure().getRootNode().setShortTitle(Formatter.truncateOnly(course.getCourseTitle(), 25)); //do not use truncate!
@@ -418,16 +424,25 @@ public class CoursesWebService {
 	}
 	
 	public static ICourse copyCourse(Long copyFrom, UserRequest ureq, String name, String longTitle,
-			String softKey, String externalId, String externalRef, String managedFlags, CourseConfigVO courseConfigVO) {
+			String softKey, int access, boolean membersOnly, String externalId, String externalRef, String managedFlags,
+			CourseConfigVO courseConfigVO) {
 		String shortTitle = name;
 		//String learningObjectives = name + " (Example of creating a new course)";
 		
 		OLATResourceable originalOresTrans = OresHelper.createOLATResourceableInstance(CourseModule.class, copyFrom);
 		RepositoryEntry src = RepositoryManager.getInstance().lookupRepositoryEntry(originalOresTrans, false);
+		if(src == null) {
+			src = RepositoryManager.getInstance().lookupRepositoryEntry(copyFrom, false);
+		}
 		OLATResource originalOres = OLATResourceManager.getInstance().findResourceable(src.getOlatResource());
 		boolean isAlreadyLocked = RepositoryHandlerFactory.getInstance().getRepositoryHandler(src).isLocked(originalOres);
 		LockResult lockResult = RepositoryHandlerFactory.getInstance().getRepositoryHandler(src).acquireLock(originalOres, ureq.getIdentity());
 		
+		//check range of access
+		if(access < 1 || access > RepositoryEntry.ACC_USERS_GUESTS) {
+			access = RepositoryEntry.ACC_OWNERS;
+		}
+		
 		if(lockResult == null || (lockResult != null && lockResult.isSuccess()) && !isAlreadyLocked) {
 
 			//create new repo entry
@@ -469,7 +484,7 @@ public class CoursesWebService {
 			OLATResource ores = OLATResourceManager.getInstance().findOrPersistResourceable(newResourceable);
 			preparedEntry.setOlatResource(ores);
 			// create security group
-			prepareSecurityGroup(ureq.getIdentity(), preparedEntry, RepositoryEntry.ACC_OWNERS);
+			prepareSecurityGroup(ureq.getIdentity(), preparedEntry, access, membersOnly);
 			// copy image if available
 			RepositoryManager.getInstance().copyImage(src, preparedEntry);
 			
@@ -490,7 +505,7 @@ public class CoursesWebService {
 	 * @return
 	 */
 	public static ICourse createEmptyCourse(Identity initialAuthor, String shortTitle, String longTitle, CourseConfigVO courseConfigVO) {
-		return createEmptyCourse(initialAuthor, shortTitle, longTitle, null, null, null, null, courseConfigVO);
+		return createEmptyCourse(initialAuthor, shortTitle, longTitle, null, RepositoryEntry.ACC_OWNERS, false, null, null, null, courseConfigVO);
 	}
 	
 	/**
@@ -506,7 +521,7 @@ public class CoursesWebService {
 	 * @return
 	 */
 	public static ICourse createEmptyCourse(Identity initialAuthor, String shortTitle, String longTitle,
-			String softKey, String externalId, String externalRef, String managedFlags, CourseConfigVO courseConfigVO) {
+			String softKey, int access, boolean membersOnly, String externalId, String externalRef, String managedFlags, CourseConfigVO courseConfigVO) {
 		String learningObjectives = shortTitle + " (Example of creating a new course)";
 
 		try {
@@ -515,7 +530,7 @@ public class CoursesWebService {
 			RepositoryEntry addedEntry = createCourseRepositoryEntry(initialAuthor, shortTitle,  softKey, externalId, externalRef, managedFlags, oresable);
 			// create an empty course
 			CourseFactory.createEmptyCourse(oresable, shortTitle, longTitle, learningObjectives);
-			prepareSecurityGroup(initialAuthor, addedEntry, RepositoryEntry.ACC_OWNERS);
+			prepareSecurityGroup(initialAuthor, addedEntry, access, membersOnly);
 			return prepareCourse(addedEntry, courseConfigVO);
 		} catch (Exception e) {
 			throw new WebApplicationException(e);
@@ -550,7 +565,7 @@ public class CoursesWebService {
 		return addedEntry;//!!!no update at this point
 	}
 	
-	private static void prepareSecurityGroup(Identity identity, RepositoryEntry addedEntry, int access) {
+	private static void prepareSecurityGroup(Identity identity, RepositoryEntry addedEntry, int access, boolean membersOnly) {
 		// create security group
 		BaseSecurity securityManager = BaseSecurityManager.getInstance();
 		SecurityGroup newGroup = securityManager.createAndPersistSecurityGroup();
@@ -579,7 +594,14 @@ public class CoursesWebService {
 		securityManager.createAndPersistPolicy(participantGroup, Constants.PERMISSION_HASROLE, Constants.ORESOURCE_PARTICIPANT);
 		addedEntry.setParticipantGroup(participantGroup);
 		// Do set access for owner at the end, because unfinished course should be invisible
-		addedEntry.setAccess(access);
+		
+		if(membersOnly) {
+			addedEntry.setMembersOnly(true);
+			addedEntry.setAccess(RepositoryEntry.ACC_OWNERS);
+		} else {
+			addedEntry.setAccess(access);
+		}
+		
 		RepositoryManager.getInstance().saveRepositoryEntry(addedEntry);
 	}
 	
diff --git a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java
index ed76cc82270cbe8cb893003f0ed73188969ac1be..c95348ae332d2c7952e6e702b5de3046c89aab4b 100644
--- a/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java
+++ b/src/test/java/org/olat/core/util/mail/manager/MailManagerTest.java
@@ -133,14 +133,21 @@ public class MailManagerTest extends OlatTestCase {
 		Assert.assertEquals(MailerResult.OK, result.getReturnCode());
 		dbInstance.commitAndCloseSession();
 		
-		//retrieve the inbox of toId
-		List<DBMailLight> sendedMails = mailManager.getOutbox(fromId, 0, -1);
+		//retrieve the outbox of toId (with lazy loading)
+		List<DBMailLight> sendedMails = mailManager.getOutbox(fromId, 0, -1, false);
 		Assert.assertNotNull(sendedMails);
 		Assert.assertEquals(1, sendedMails.size());
 		
 		DBMailLight sendedMail = sendedMails.get(0);
 		Assert.assertNotNull(sendedMail);
 		Assert.assertEquals("Hello outbox", sendedMail.getSubject());
+		
+		dbInstance.commitAndCloseSession();
+		
+		//retrieve the outbox of toId (with fetch)
+		List<DBMailLight> sendedMailsWithFetch = mailManager.getOutbox(fromId, 0, -1, true);
+		Assert.assertNotNull(sendedMailsWithFetch);
+		Assert.assertEquals(1, sendedMailsWithFetch.size());
 	}
 	
 	@Test
@@ -260,7 +267,7 @@ public class MailManagerTest extends OlatTestCase {
 		List<DBMailLight> deletedMails_3 = mailManager.getInbox(toId_3, null, null, null, 0, -1);
 		Assert.assertNotNull(deletedMails_3);
 		Assert.assertTrue(deletedMails_3.isEmpty());
-		List<DBMailLight> deletedMails_4 = mailManager.getOutbox(fromId, 0, -1);
+		List<DBMailLight> deletedMails_4 = mailManager.getOutbox(fromId, 0, -1, true);
 		Assert.assertNotNull(deletedMails_4);
 		Assert.assertTrue(deletedMails_4.isEmpty());
 		//check mail by meta id
diff --git a/src/test/java/org/olat/restapi/CoursesTest.java b/src/test/java/org/olat/restapi/CoursesTest.java
index 4a9c6bfadf17f0b700743e5a998c29cc58f7737c..da25c3396196590a9f0b7ecf9b5dc14358f50a0f 100644
--- a/src/test/java/org/olat/restapi/CoursesTest.java
+++ b/src/test/java/org/olat/restapi/CoursesTest.java
@@ -103,16 +103,16 @@ public class CoursesTest extends OlatJerseyTestCase {
 		try {
 			// create course and persist as OLATResourceImpl
 			admin = BaseSecurityManager.getInstance().findIdentityByName("administrator");
-			course1 = CoursesWebService.createEmptyCourse(admin, "courses1", "courses1 long name", null, null, null, null, null);
+			course1 = CoursesWebService.createEmptyCourse(admin, "courses1", "courses1 long name", null, RepositoryEntry.ACC_OWNERS, false, null, null, null, null);
 			
 			externalId = UUID.randomUUID().toString();
 			externalRef = UUID.randomUUID().toString();
-			course2 = CoursesWebService.createEmptyCourse(admin, "courses2", "courses2 long name", null, externalId, externalRef, "all", null);
+			course2 = CoursesWebService.createEmptyCourse(admin, "courses2", "courses2 long name", null, RepositoryEntry.ACC_OWNERS, false, externalId, externalRef, "all", null);
 			
 			dbInstance.commitAndCloseSession();
 
 			externalId3 = UUID.randomUUID().toString();
-			course3 = CoursesWebService.createEmptyCourse(admin, "courses3", "courses3 long name", null, externalId3, null, "all", null);
+			course3 = CoursesWebService.createEmptyCourse(admin, "courses3", "courses3 long name", null, RepositoryEntry.ACC_OWNERS, false, externalId3, null, "all", null);
 			RepositoryEntry re3 = repositoryManager.lookupRepositoryEntry(course3, false);
 			RepositoryEntryLifecycle lifecycle3 = reLifecycleDao.create("course3 lifecycle", UUID.randomUUID().toString(), true, new Date(), new Date());
 			dbInstance.commit();