diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties
index 60a1ad7e864586bdc8c0baa3638c40ad5c0d2598..ad8436dafb2cadfbd711e36c8354ead0e8ec1e0d 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_de.properties
@@ -127,6 +127,6 @@ warn.header=Achtung
 warn.notdispatched=Diese Seite wurde ver\u00E4ndert. Bitte beachten Sie allf\u00E4llige Meldungen.
 warn.reload=Bitte benutzen Sie nicht den `Neu Laden` oder `Zur\u00FCck` Button Ihres Browsers.
 warning.invalid.csrf=CSRF mismatch
-warning.multi.window=Sie haben mehrmals die gleiche Fenster ge\u00F6ffnet.
+warning.multi.window=Sie haben mehrmals das gleiche Fenster ge\u00F6ffnet.
 welcome=Willkommen
 yes=Ja
diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties
index 1d8c26e971993a58575531a57ce5311700275057..6fb9e80e52a05e350da0cc3c584661af714c0c8c 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_en.properties
@@ -127,6 +127,6 @@ warn.header=Warning
 warn.notdispatched=This page has been modified. Please consider any new messages.
 warn.reload=Please do not use the `Reload` or `Back` button of your browser.
 warning.invalid.csrf=CSRF mismatch
-warning.multi.window=You have opened several same windows.
+warning.multi.window=You have opened the same window several times.
 welcome=Welcome
 yes=Yes
diff --git a/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties
index c9b5eb3a591fa9c8e0b9836c7ed1f18309301bb1..979b29746bd6d3b8b368c76a5962a1cd512864da 100644
--- a/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/core/_i18n/LocalStrings_fr.properties
@@ -125,8 +125,8 @@ user.guest=invit\u00E9
 warn.beta.feature=Attention\! Cette fonction se trouve dans la phase d'essai. Veuillez noter que des erreurs peuvent appara\u00EEtre si cette fonction est utilis\u00E9e.
 warn.header=Attention
 warn.notdispatched=Cette page a \u00E9t\u00E9 modifi\u00E9e. Veuillez tenir compte d'\u00E9ventuels messages.
-warn.reload=Veuillez ne pas cliquer sur `Actualiser` ou `Pr\u00E9c\u00E9dent` de votre navigateur.
+warn.reload=Veuillez ne pas cliquer sur "Actualiser" ou "Pr\u00E9c\u00E9dent" de votre navigateur.
 warning.invalid.csrf=CSRF mismatch
-warning.multi.window=Vous avez ouvert plusieurs fen\u00EAtres.
+warning.multi.window=Vous avez ouvert plusieurs fois la m\u00EAme fen\u00EAtre.
 welcome=Bienvenue
 yes=Oui
diff --git a/src/main/java/org/olat/course/disclaimer/CourseDisclaimerManager.java b/src/main/java/org/olat/course/disclaimer/CourseDisclaimerManager.java
index 32978bf8ec866ae81310ea56e3d14e51a25e40c9..84b9e7c5bd4175a616ab721228d048e9b48a03a0 100644
--- a/src/main/java/org/olat/course/disclaimer/CourseDisclaimerManager.java
+++ b/src/main/java/org/olat/course/disclaimer/CourseDisclaimerManager.java
@@ -23,6 +23,7 @@ import java.util.List;
 
 import org.olat.basesecurity.IdentityRef;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryRef;
 
@@ -53,7 +54,7 @@ public interface CourseDisclaimerManager {
 	 * @param disc1Accepted
 	 * @param disc2Accepted
 	 */
-	public void acceptDisclaimer(RepositoryEntry repositoryEntry, Identity identity, boolean disc1Accepted, boolean disc2Accepted);
+	public void acceptDisclaimer(RepositoryEntry repositoryEntry, Identity identity, Roles roles, boolean disc1Accepted, boolean disc2Accepted);
 	
 	/**
 	 * Deletes all disclaimer consent database entries related to a repository entry and a list of users
@@ -86,7 +87,7 @@ public interface CourseDisclaimerManager {
 	 * @param identityRef
 	 * @return boolean
 	 */
-	public boolean isAccessGranted(RepositoryEntry repositoryEntry, IdentityRef identityRef);
+	public boolean isAccessGranted(RepositoryEntry repositoryEntry, IdentityRef identityRef, Roles roles);
 	
 	/**
 	 * Returns whether any disclaimer has been accepted yet 
diff --git a/src/main/java/org/olat/course/disclaimer/manager/CourseDisclaimerManagerImpl.java b/src/main/java/org/olat/course/disclaimer/manager/CourseDisclaimerManagerImpl.java
index f8f172fe1f1e4a3386f3d89f1dc7e9a0da9c754f..a3792fcac5a8c56303caaa68c4928711023e4e3b 100644
--- a/src/main/java/org/olat/course/disclaimer/manager/CourseDisclaimerManagerImpl.java
+++ b/src/main/java/org/olat/course/disclaimer/manager/CourseDisclaimerManagerImpl.java
@@ -26,6 +26,7 @@ import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
 import org.olat.core.logging.Tracing;
 import org.olat.course.CourseFactory;
 import org.olat.course.config.CourseConfig;
@@ -72,8 +73,8 @@ public class CourseDisclaimerManagerImpl implements CourseDisclaimerManager, Use
 	}
 
 	@Override
-	public void acceptDisclaimer(RepositoryEntry repositoryEntry, Identity identitiy, boolean disc1Accepted, boolean disc2Accepted) {
-		if (baseSecurityManager.getRoles(identitiy).isGuestOnly()) {
+	public void acceptDisclaimer(RepositoryEntry repositoryEntry, Identity identitiy, Roles roles, boolean disc1Accepted, boolean disc2Accepted) {
+		if (roles.isGuestOnly()) {
 			return;
 		}
 
@@ -94,7 +95,7 @@ public class CourseDisclaimerManagerImpl implements CourseDisclaimerManager, Use
 	}
 
 	@Override
-	public boolean isAccessGranted(RepositoryEntry repositoryEntry, IdentityRef identitiyRef) {
+	public boolean isAccessGranted(RepositoryEntry repositoryEntry, IdentityRef identitiyRef, Roles roles) {
 		CourseConfig courseConfig = CourseFactory.loadCourse(repositoryEntry.getOlatResource().getResourceableId()).getCourseConfig();
 		boolean accessGranted = true;
 		
@@ -115,7 +116,7 @@ public class CourseDisclaimerManagerImpl implements CourseDisclaimerManager, Use
 					accessGranted &= false;
 				}
 			}
-			if (baseSecurityManager.getRoles(identitiyRef).isGuestOnly()) {
+			if (roles.isGuestOnly()) {
 				accessGranted &= false;
 			}
 		}
diff --git a/src/main/java/org/olat/course/disclaimer/ui/CourseDisclaimerConsentController.java b/src/main/java/org/olat/course/disclaimer/ui/CourseDisclaimerConsentController.java
index e2cbbcebee53014aed42d320c69ce9f5a9679d9e..d09692bc14bd06aac600a278e05e55b9da67a736 100644
--- a/src/main/java/org/olat/course/disclaimer/ui/CourseDisclaimerConsentController.java
+++ b/src/main/java/org/olat/course/disclaimer/ui/CourseDisclaimerConsentController.java
@@ -68,7 +68,7 @@ public class CourseDisclaimerConsentController extends FormBasicController {
 
 	@Override
 	protected void formOK(UserRequest ureq) {
-		disclaimerManager.acceptDisclaimer(repositoryEntry, getIdentity(), courseConfig.isDisclaimerEnabled(1), courseConfig.isDisclaimerEnabled(2));
+		disclaimerManager.acceptDisclaimer(repositoryEntry, getIdentity(), ureq.getUserSession().getRoles(), courseConfig.isDisclaimerEnabled(1), courseConfig.isDisclaimerEnabled(2));
 
 		fireEvent(ureq, Event.DONE_EVENT);
 	}
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
index 2eb94cb2e5e7eb8f8b1c10292b42501ec6a66897..0fd9a0a92ab5edb6c3bac7c7bf0108a138ef1146 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
@@ -347,6 +347,7 @@ upload.document=Dokument hochladen
 uploaded.by=hochgeladen von {0}
 user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
 user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
+user.visibility.hidden.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.hidden.tooltip
 user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.visible.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.visible.tooltip
 wait.for.solutions=Die Musterl\u00F6sung wird zum angegebenen Zeitpunkt freigegeben.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
index 38a71a66152f789ce832234b4d34ab9b2368c36b..6c00ad7e2f8fd30fe6b37b5df9b0d601b87033b0 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
@@ -347,6 +347,7 @@ upload.document=Upload document
 uploaded.by=uploaded by {0}
 user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
 user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
+user.visibility.hidden.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.hidden.tooltip
 user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.visible.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.visible.tooltip
 wait.for.solutions=The sample solution will be displayed at the date specified above.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
index 267aa1ab54c1b93934ba74a37da4472e449bc2b3..402c47b46f0838139847829744d74d9ec1ca9196 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
@@ -347,6 +347,7 @@ upload.document=T\u00E9l\u00E9charger un document
 uploaded.by=t\u00E9l\u00E9charg\u00E9 par {0}
 user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
 user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
+user.visibility.hidden.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.hidden.tooltip
 user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.visible.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.visible.tooltip
 wait.for.solutions=Les solutions mod\u00E8les seront visible apr\u00E8s l'heure sp\u00E9cifi\u00E9e.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties
index ab36d3925d62ee87b406e282130f888ff296312d..eb2606dcd243385db1f2b1cb97da917292867e59 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties
@@ -259,6 +259,7 @@ upload.document=Caricare un documento
 uploaded.by=caricato da {0}
 user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
 user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
+user.visibility.hidden.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.hidden.tooltip
 user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.visible.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.visible.tooltip
 wait.for.solutions=I modelli di soluzione saranno visibili alla data sopra indicata.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties
index d6bd3a4b6e183769845a402fe9e09797d5c97993..94b6603184196743af3b1ca693481db79f85c0e9 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties
@@ -167,7 +167,8 @@ task.type.title=Typ zadania
 upload.document=Prze\u015Blij dokument
 uploaded.by=przes\u0142any przez {0}
 user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
-user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
+user.visibility.hidden.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.hidden.tooltip
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.visible.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.visible.tooltip
 warning.tasks.in.process.delete.title=$\:warning.tasks.in.process.title
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
index a26605df01ae38565025b9c2f64aab52bf0f7b9c..5d92109246ec5a1739d83d4bbc6d45b91d58fe2d 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
@@ -347,6 +347,7 @@ upload.document=Enviar documento
 uploaded.by=enviado por
 user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
 user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
+user.visibility.hidden.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.hidden.tooltip
 user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
 user.visibility.visible.tooltip=$org.olat.course.assessment.ui.tool\:user.visibility.visible.tooltip
 wait.for.solutions=A solu\u00E7\u00E3o de amostra ser\u00E1 exibida na data especificada acima.
diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_de.properties
index ec18426e0831abafcaf0814cf156be39d05b167a..f9af36069f982e5a154305f5cf848342d037abfd 100644
--- a/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_de.properties
@@ -1,6 +1,6 @@
-config.desc.roles=Sie erhalten alle Serien/Videos der Rollen '{0}'.
-config.desc.select=W\u00e4hlen Sie eine Serie oder ein Video aus, indem sie im Feld unten nach seinem Titel suchen.
-config.desc.user=Sie erhalten alle Serien/Videos f\u00fcr den Benutzer '{0}'.
+config.desc.roles=Sie erhalten alle Serien / Videos der Rollen '{0}'.
+config.desc.select=W\u00e4hlen Sie eine Serie oder ein Video aus, indem Sie im Feld unten nach seinem Titel suchen. Geben Sie * ein, um alle Ihre Serien / Videos zu Auswahl anzuzeigen.
+config.desc.user=Sie erhalten alle Serien / Videos f\u00fcr den Benutzer '{0}'.
 config.display=Anzeige
 config.display.event=Video
 config.display.series=Serie
diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_en.properties
index 2e16549c2d909bdca831bba1820bcba53d850e0a..4f2d4a4c9982b0543361a981c0406678a96d0530 100644
--- a/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_en.properties
@@ -1,6 +1,6 @@
-config.desc.roles=You will get all series/videos of roles '{0}'.
-config.desc.select=Select a series or a video by searching for its title in the field below.
-config.desc.user=You will get all series/videos of user '{0}'.
+config.desc.roles=You will get all series / videos of roles '{0}'.
+config.desc.select=Select a series or a video by searching for its title in the field below. Enter * to display all your series / videos for selection.
+config.desc.user=You will get all series / videos of user '{0}'.
 config.display=Display
 config.display.event=Video
 config.display.series=Series
diff --git a/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_fr.properties
index 3a295909d9af4a5cf4fdc281ba6053e69c1bd615..ed1659fa88e2b17af3357971695ea1307b18b235 100644
--- a/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/opencast/ui/_i18n/LocalStrings_fr.properties
@@ -1,6 +1,6 @@
 #Thu Aug 20 15:06:38 CEST 2020
 config.desc.roles=Vous recevez toutes les s\u00E9ries et vid\u00E9os des r\u00F4les "{0}".
-config.desc.select=S\u00E9lectionnez une s\u00E9rie ou une vid\u00E9o en cherchant son titre dans le champ de texte ci-dessus.
+config.desc.select=S\u00E9lectionnez une s\u00E9rie ou une vid\u00E9o en cherchant son titre dans le champ de texte ci-dessus. Saisissez * pour afficher toutes vos s\u00E9ries / vid\u00E9os pour la s\u00E9lection.
 config.desc.user=Vous recevrez toutes les s\u00E9ries et vid\u00E9os de l'utilisateur "{0}".
 config.display=Affichage
 config.display.event=Vid\u00E9o
diff --git a/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java b/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java
index d275c6a389ab356e27f15aa3394d7e52339c2a76..97c1a0913353d58d7aa7296ee54c839c2cb80daa 100644
--- a/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java
+++ b/src/main/java/org/olat/course/nodes/pf/ui/PFCoachController.java
@@ -157,9 +157,9 @@ public class PFCoachController extends FormBasicController implements Controller
 					pfManager.uploadFileToDropBox(pfFileUploadCtr.getUpLoadFile(),
 							pfFileUploadCtr.getUploadFileName(), 4, courseEnv, pfNode, getIdentity());
 				}
-				cmc.deactivate();
-				cleanUpCMC();
-			}			
+			}
+			cmc.deactivate();
+			cleanUpCMC();
 		} else if (source == cmc) {
 			cleanUpCMC();
 		}
diff --git a/src/main/java/org/olat/course/nodes/pf/ui/PFFileUploadController.java b/src/main/java/org/olat/course/nodes/pf/ui/PFFileUploadController.java
index d936e2a6249e26d7c368fdff445b120d06eb37e3..56b376e4a91453f73704bd95eba287ec6c0b74a0 100644
--- a/src/main/java/org/olat/course/nodes/pf/ui/PFFileUploadController.java
+++ b/src/main/java/org/olat/course/nodes/pf/ui/PFFileUploadController.java
@@ -24,7 +24,6 @@ import java.io.File;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.FileElement;
-import org.olat.core.gui.components.form.flexible.elements.StaticTextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
@@ -39,11 +38,10 @@ import org.olat.core.gui.control.WindowControl;
 public class PFFileUploadController extends FormBasicController {
 	
 	private FileElement uploadFileEl;
-	private StaticTextElement typeEl;
 	
 	private File uploadFile;
 	private String uploadFileName;
-	private boolean uploadToAll;
+	private final boolean uploadToAll;
 
 	public PFFileUploadController(UserRequest ureq, WindowControl wControl, boolean uploadToall) {
 		super(ureq, wControl);
@@ -54,32 +52,32 @@ public class PFFileUploadController extends FormBasicController {
 
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
-
 		uploadFileEl = uifactory.addFileElement(getWindowControl(), "upload", "textfield.upload", formLayout);
 		uploadFileEl.addActionListener(FormEvent.ONCHANGE);
 		
-		
-		typeEl = uifactory.addStaticTextElement("video.mime.type", "video.mime.type", "", formLayout);
-		typeEl.setVisible(false);		
-	
 		FormLayoutContainer buttonGroupLayout = FormLayoutContainer.createButtonLayout("buttons", getTranslator());
 		formLayout.add(buttonGroupLayout);
+		uifactory.addFormCancelButton("cancel", buttonGroupLayout, ureq, getWindowControl());
 		uifactory.addFormSubmitButton("submit", "upload.link", buttonGroupLayout);
 	}
+	
+	@Override
+	protected void formCancelled(UserRequest ureq) {
+		fireEvent(ureq, Event.CANCELLED_EVENT);
+	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
 		if (uploadFileEl.isUploadSuccess()) {
-			this.uploadFile = uploadFileEl.getUploadFile();
-			this.uploadFileName = uploadFileEl.getUploadFileName();
-			this.fireEvent(ureq, Event.DONE_EVENT);	
+			uploadFile = uploadFileEl.getUploadFile();
+			uploadFileName = uploadFileEl.getUploadFileName();
+			fireEvent(ureq, Event.DONE_EVENT);	
 		}
-		
 	}
 
 	@Override
 	protected void doDispose() {
-
+		//
 	}
 	
 	protected File getUpLoadFile () {
@@ -93,5 +91,4 @@ public class PFFileUploadController extends FormBasicController {
 	protected boolean isUploadToAll () {
 		return uploadToAll;
 	}
-
 }
diff --git a/src/main/java/org/olat/course/nodes/pf/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/pf/ui/_i18n/LocalStrings_fr.properties
index dfa94c53a446107451b41cca9d3831643591fda7..ddaa14c8ae7f1f1c14767e80924acaa94fc588f1 100644
--- a/src/main/java/org/olat/course/nodes/pf/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/pf/ui/_i18n/LocalStrings_fr.properties
@@ -49,6 +49,6 @@ table.no.selection=Vous n'avez pas s\u00E9lectionn\u00E9 d'utilisateur.
 textfield.upload=T\u00E9l\u00E9charger un fichier
 time.frame=Limiter la p\u00E9riode de t\u00E9l\u00E9chargement
 timeframe.error=V\u00E9rifier que l'intervalle de temps sont correct.
-upload.link=T\u00E9l\u00E9charger en masse
+upload.link=T\u00E9l\u00E9verser en masse
 upload.success=Des fichiers ont \u00E9t\u00E9 t\u00E9l\u00E9charg\u00E9s
 valid.date=Entrez s'il vous pla\u00EEt une date valide.
diff --git a/src/main/java/org/olat/course/run/RunMainController.java b/src/main/java/org/olat/course/run/RunMainController.java
index a3627ed18f874aa4f778d93bf42992212d6d9a30..9ab3b232cb993383ce0b25df76ab28e8c160b210 100644
--- a/src/main/java/org/olat/course/run/RunMainController.java
+++ b/src/main/java/org/olat/course/run/RunMainController.java
@@ -282,7 +282,7 @@ public class RunMainController extends MainLayoutBasicController implements Gene
 		
 		// if a disclaimer is enabled, show it first
 		if (courseModule.isDisclaimerEnabled() && course.getCourseEnvironment().getCourseConfig().isDisclaimerEnabled() && 
-				!disclaimerManager.isAccessGranted(courseRepositoryEntry, getIdentity())) {
+				!disclaimerManager.isAccessGranted(courseRepositoryEntry, getIdentity(), ureq.getUserSession().getRoles())) {
 			disclaimerController = new CourseDisclaimerConsentController(ureq, getWindowControl(), courseRepositoryEntry);
 			listenTo(disclaimerController);
 			coursemain.put("coursemain", disclaimerController.getInitialComponent());
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 32abb966e8a32758ce1a3281dd196a861c47ee9b..355dd3d714cd12dbc5a5e4414dd13be341cb3807 100644
--- a/src/main/java/org/olat/course/run/navigation/NavigationHandler.java
+++ b/src/main/java/org/olat/course/run/navigation/NavigationHandler.java
@@ -62,7 +62,9 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.xml.XStreamHelper;
 import org.olat.course.condition.additionalconditions.AdditionalConditionManager;
 import org.olat.course.editor.EditorMainController;
+import org.olat.course.learningpath.manager.LearningPathNodeAccessProvider;
 import org.olat.course.nodeaccess.NodeAccessService;
+import org.olat.course.nodeaccess.NodeAccessType;
 import org.olat.course.nodes.AbstractAccessableCourseNode;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.nodes.CourseNodeFactory;
@@ -330,12 +332,18 @@ public class NavigationHandler implements Disposable {
 						controller.addControllerListener(listeningController);
 					}
 				} else {
-					// NOTE: we do not take into account what node caused the non-access by
-					// being !isAtLeastOneAccessible, but always state the
-					// NoAccessExplanation of the Node originally called by the user
-					String explan = courseNode.getNoAccessExplanation();
-					String sExplan = (explan == null ? "" : Formatter.formatLatexFormulas(explan));
-					 controller = MessageUIFactory.createInfoMessage(ureq, wControl, null, sExplan);
+					String sExplan;
+					if (LearningPathNodeAccessProvider.TYPE.equals(NodeAccessType.of(userCourseEnv).getType())) {
+						Translator translator = Util.createPackageTranslator(EditorMainController.class, ureq.getLocale());
+						sExplan = translator.translate("form.noAccessExplanation.default");
+					} else {
+						// NOTE: we do not take into account what node caused the non-access by
+						// being !isAtLeastOneAccessible, but always state the
+						// NoAccessExplanation of the Node originally called by the user
+						String explan = courseNode.getNoAccessExplanation();
+						sExplan = (explan == null ? "" : Formatter.formatLatexFormulas(explan));
+					}
+					controller = MessageUIFactory.createInfoMessage(ureq, wControl, null, sExplan);
 					// write log information
 					ThreadLocalUserActivityLogger.log(CourseLoggingAction.COURSE_NAVIGATION_NODE_NO_ACCESS, getClass(),
 							LoggingResourceable.wrap(courseNode));
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
index 3e3a21dc0c491cc081de866e849ee734e9873aad..e0831e8678f87897dff4d70187b72ec61fac7c8a 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_de.properties
@@ -123,7 +123,7 @@ error.input.extendedText.max=Erstellen Sie einen Text mit maximal {0} Worten.
 error.input.extendedText.min=Erstellen Sie einen Text mit mindestens {0} Worten.
 error.input.extendedText.min.max=Erstellen Sie einen Text mit mindestens {0} und maximal {1} Worten.
 error.integer=Falsches Zahlenformat. Beispiele\: 15, 5, 1
-error.item.ended=Die Frage wurde schon geantwortet.
+error.item.ended=Die Frage wurde schon beantwortet.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
 error.reload.question=Ein unerwarteter Fehler ist aufgetreten. Bitte pr\u00FCfen Sie die Antwort Ihrer Frage und speichern Sie erneut.
 error.required.format=Ihre Eingabe entspricht nicht dem erforderlichen Format.
@@ -300,7 +300,7 @@ warning.assignment.inProcess=Dieser Test befindet sich bereits in Korrektur. Wir
 warning.download.log=Es gibt leider kein Logdatei f\u00FCr diesen Test.
 warning.reset.assessmenttest.data=Die Test-Resultate wurden von einem Administrator oder Kursbesitzer zur\u00FCckgesetzt. Sie k\u00F6nnen den Test nicht fortsetzen und m\u00FCssen ihn erneut starten.
 warning.reset.test.data.nobody=Es gibt kein Teilnehmer zu zur\u00FCcksetzen
-warning.suspended.ended.assessmenttest=Sie haben schon den Test unterbrochen oder beendet, wahrscheinlich in einem anderen Fenster. Bitte, diese Fenster jetzt schliessen.
+warning.suspended.ended.assessmenttest=Sie haben den Test schon unterbrochen oder beendet, wahrscheinlich in einem anderen Fenster. Bitte schlie\u00DFen Sie dieses Fenster jetzt.
 warning.xml.signature.notok=Unterschrift und Datei konnte nicht validiert werden.
 warning.xml.signature.session.not.found=Die Resultaten konnte nicht gefunden werden.
 
diff --git a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
index 15fd21fdf051b84bee32c58938557083291fe71f..a01131509619dc5b1640b884cc00e0fcc37a88b8 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/_i18n/LocalStrings_en.properties
@@ -123,7 +123,7 @@ error.input.extendedText.max=Write a text with at the most {0} words.
 error.input.extendedText.min=Write a text with at least {0} words.
 error.input.extendedText.min.max=Write a text with at least  {0} and at the most {1} words.
 error.integer=Need to be an integer. Example\: 15, 5, 1
-error.item.ended=The question was already answered.
+error.item.ended=The question has already been answered.
 error.mimetype=$org.olat.core.commons.modules.bc\:WrongMimeType
 error.reload.question=An unexpected error occurred. Please check the answer to your question and save it again.
 error.required.format=Your input is not of the required format.
@@ -299,7 +299,7 @@ warning.assignment.done=The grading of this test has already been completed. If
 warning.assignment.inProcess=The grading of the test has already started. If this test session is marked as invalid, all existing corrections will be lost.
 warning.download.log=There is not a log file for this test.
 warning.reset.assessmenttest.data=The test results were reset by an administrator or course owner. You cannot continue the test and have to restart it.
-warning.suspended.ended.assessmenttest=You have already suspended or ended this test, probably in an other window. Please close this window.
+warning.suspended.ended.assessmenttest=You have already interrupted or finished the test, probably in another window. Please close this window now.
 warning.reset.test.data.nobody=There isn't any participant which data can be reseted.
 warning.xml.signature.notok=Signature and results cannot be validate each other.
 warning.xml.signature.session.not.found=Tests results cannot be found.
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
index 4817155cdc0be19487c49796857d5326b9ebf491..7968a56c092e4513bac622ebaae74c7e963d4449 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_de.properties
@@ -57,7 +57,7 @@ error.missing.hottext=Die Frage mussen mindestens einen Hottext enthalten.
 error.missing.section=Sie m\u00FCssen mindestens eine Sektion im Test oder Test Part haben.
 error.need.correct.answer=Sie m\u00FCssen mindestens eine Antwort als korrekt markieren.
 error.positive.double=Falsches Zahlenformat, nur positive Nummer sind erlaubt. Beispiele\: 15.0, 5.5, 10
-error.singlechoice=Genau ein ausw\u00E4hlen
+error.singlechoice=Genau eine Antwort ausw\u00E4hlen
 error.upper.tolerance=Die obere Schranke muss gr\u00F6sser - gleich als die L\u00F6sung sein.
 essay.expectedLength=Anzahl Buchstaben
 essay.max.strings=Max Anzahl W\u00F6rter
@@ -86,8 +86,8 @@ fib.tolerance.mode.absolute.help=Die Schranke stellt eine absolute Zahl dar. Bei
 fib.tolerance.mode.exact=Genau
 fib.tolerance.mode.exact.help=Die L\u00F6sung entspricht exakt der eingegebenen L\u00F6sung unter "L\u00F6sung"
 fib.tolerance.mode.relative=Relativ
-fib.tolerance.mode.relative.low.example=Prozent Abweichung nach unten, example 15
-fib.tolerance.mode.relative.up.example=Prozent Abweichung nach oben, example 15
+fib.tolerance.mode.relative.low.example=Prozent Abweichung nach unten, zum Beispiel 15
+fib.tolerance.mode.relative.up.example=Prozent Abweichung nach oben, zum Beispiel 15
 fib.tolerance.mode.relative.help=Die Schranke stellt eine relative Zahl in Prozent dar.\u2028Beispiel\: L\u00F6sung 20, Untere Schranke 10, Obere Schranke 10 → Alle L\u00F6sungen zwischen 18 und 22 sind g\u00FCltig, denn die untere Schranke bedeutet minus 10% (20-2) und die obere Schranke plus 10% (20+2).
 fib.tolerance.up=Obere Schranke
 file=Datei
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
index 0681fa493498f830c81279bb384110a1371830a2..4d437c8b38fb3c0a18d0cc3b47bed4934c82c3b1 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_en.properties
@@ -57,7 +57,7 @@ error.missing.hottext=The question need at least a hottext.
 error.missing.section=You must have at least one section in your test or test part.
 error.need.correct.answer=You need a least one correct answer.
 error.positive.double=Only positive number are allowed. Example\: 15.0, 5.5, 10
-error.singlechoice=Choose exactly one
+error.singlechoice=Choose exactly one answer
 error.upper.tolerance=The upper bound need to be bigger than or equal to the solution.
 essay.expectedLength=Number of letters
 essay.max.strings=Max. words
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties
index a7e39153e2bc8dcbdba2df136b8744392e995dd1..7344dd0ce88d6eccaa306f5a0e2c7510886d0dfc 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/_i18n/LocalStrings_fr.properties
@@ -58,7 +58,7 @@ error.missing.hottext=La question doit contenir au moins un hottext.
 error.missing.section=Vous devez avoir au moins une section dans un test ou une partie de test.
 error.need.correct.answer=Vous devez s\u00E9lectionner au moins une r\u00E9ponse comme correcte.
 error.positive.double=Seul des nombres positives sont permis. Par exemple\: 15.0, 5.5, 10
-error.singlechoice=En s\u00E9lectionner exactement une
+error.singlechoice=En s\u00E9lectionner exactement une r\u00E9ponse
 error.upper.tolerance=La limite sup\u00E9rieure doit \u00EAtre plus grande ou \u00E9gale \u00E0 la solution.
 essay.expectedLength=Nombre de lettres
 essay.max.strings=Nombre de mots max.
diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
index 2856073e7882a677c0fcf1407f116384d0107a63..9b1bd25ceb1495676ea35363da2315b840e7747c 100644
--- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
+++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
@@ -175,6 +175,9 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, AuthenticationPro
 		LdapContext ctx = bindSystem();
 		if(ctx != null) {
 			String userDN = ldapDao.searchUserForLogin(name, ctx);
+			if(userDN == null) {
+				userDN = ldapDao.searchUserDNByUid(name, ctx);
+			}
 			if(StringHelper.containsNonWhitespace(userDN)) {
 				Authentication currentAuth = authenticationDao.getAuthentication(name, LDAPAuthenticationController.PROVIDER_LDAP);
 				if(currentAuth == null || currentAuth.getIdentity().equals(identity)) {
@@ -414,6 +417,9 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, AuthenticationPro
 		try {
 			LdapContext ctx = bindSystem();
 			String dn = ldapDao.searchUserDNByUid(uid, ctx);
+			if(dn == null) {
+				dn = ldapDao.searchUserForLogin(uid, ctx);
+			}
 
 			List<ModificationItem> modificationItemList = new ArrayList<>();
 			if(ldapLoginModule.isActiveDirectory()) {
@@ -435,8 +441,8 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, AuthenticationPro
 
 				//active directory need the password enquoted and unicoded (but little-endian)
 				String quotedPassword = "\"" + pwd + "\"";
-				char unicodePwd[] = quotedPassword.toCharArray();
-				byte pwdArray[] = new byte[unicodePwd.length * 2];
+				char[] unicodePwd = quotedPassword.toCharArray();
+				byte[] pwdArray = new byte[unicodePwd.length * 2];
 				for (int i=0; i<unicodePwd.length; i++) {
 					pwdArray[i*2 + 1] = (byte) (unicodePwd[i] >>> 8);
 					pwdArray[i*2 + 0] = (byte) (unicodePwd[i] & 0xff);
diff --git a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_it.properties
index ba0ccd72418f0f172212ffe32192e99f41895c1a..085bb014c3656eef5ce7769ac5837246dea18450 100644
--- a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_it.properties
@@ -23,7 +23,7 @@ rubric.report.avg.title=Media
 rubric.report.end.lable.title=
 rubric.report.figure.title=Dati
 rubric.report.median.abrev=m
-rubric.report.median.title=Media
+rubric.report.median.title=Mediano
 rubric.report.number.responses.title=Numero di risposte
 rubric.report.total=Totale {0}
 rubric.report.sdtdev.abrev=\u03C3
diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties
index 823a3fb953cd79c49ef5c0d7f4efb2e966cfb8c2..b60279a2cf95ad4928363ceb8e36199548d6ff9d 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_de.properties
@@ -33,7 +33,7 @@ convert.format=Format
 convert.item=Konvertieren
 convert.item.long=In QTI 2.1 konvertieren
 convert.item.msg=Wollen sie diese {0} Fragen in das folgende Format konvertieren?
-convert.item.not.possible=Sie haben keine Frage gew\u00E4hlt dass Sie konvertieren k\u00F6nnen.
+convert.item.not.possible=Sie haben keine Frage gew\u00E4hlt, die Sie konvertieren k\u00F6nnen.
 convert.item.successful={0} Frage(n) wurde erfolgreich konvertiert.
 convert.item.warning={0} Frage(n) konnte nicht konvertiert werden.
 convert.qti21.hint=Informationen zum Konvertieren von QTI 1.2 zu QTI 2.1 finden Sie im Handbuch
diff --git a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties
index 725275af04e3457aa7dc77d7c7e2a50be5cd8d81..b4a43717cc0b91a433ae831754e0b97e92227d90 100644
--- a/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/qpool/ui/_i18n/LocalStrings_en.properties
@@ -33,7 +33,7 @@ convert.format=Format
 convert.item=Convert
 convert.item.long=Convert to QTI 2.1
 convert.item.msg=Do you want to convert the {0} question(s) in the following format?
-convert.item.not.possible=You haven't selected any question you can convert.
+convert.item.not.possible=You have not selected a question that you can convert.
 convert.item.successful={0} question(s) successfully converted.
 convert.item.warning={0} was not converted.
 convert.qti21.hint=You will find information about the conversion from QTI 1.2 to QTI 2.1 in the manual
diff --git a/src/main/java/org/olat/search/service/indexer/repository/CourseIndexer.java b/src/main/java/org/olat/search/service/indexer/repository/CourseIndexer.java
index 25a9e5fc9c3d59e65f9174541cbf0105b17ac6d7..762c76b79139b80bb8d9fa77347fb247b23b2f98 100644
--- a/src/main/java/org/olat/search/service/indexer/repository/CourseIndexer.java
+++ b/src/main/java/org/olat/search/service/indexer/repository/CourseIndexer.java
@@ -199,7 +199,8 @@ public class CourseIndexer extends AbstractHierarchicalIndexer {
 
 		CourseNodeIndexer courseNodeIndexer = getCourseNodeIndexer(courseNode);
 		bcContextEntry.setTransientState(new CourseNodeEntry(courseNode));
-		return courseNodeIndexer.checkAccess(bcContextEntry, businessControl, identity, roles)
+		return courseNodeIndexer != null
+				&& courseNodeIndexer.checkAccess(bcContextEntry, businessControl, identity, roles)
 				&& super.checkAccess(bcContextEntry, businessControl, identity, roles);
 	}
 	
diff --git a/src/test/java/org/olat/course/disclaimer/CourseDisclaimerManagerTest.java b/src/test/java/org/olat/course/disclaimer/CourseDisclaimerManagerTest.java
index ca84ca6dcb6d1947122a5e5b1ce140b62e171c38..a4ce814d847b255847b481a7b767b300205f14e7 100644
--- a/src/test/java/org/olat/course/disclaimer/CourseDisclaimerManagerTest.java
+++ b/src/test/java/org/olat/course/disclaimer/CourseDisclaimerManagerTest.java
@@ -32,10 +32,12 @@ import java.util.List;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.OrganisationService;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
 import org.olat.core.id.Organisation;
+import org.olat.core.id.Roles;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
@@ -67,7 +69,9 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 	private String disclaimer2Label2 = "Course 2 Label 2";
 	
 	private Identity id1;
+	private Roles roles1;
 	private Identity id2;
+	private Roles roles2;
 
 	private RepositoryEntry repositoryEntry;
 	private ICourse course;
@@ -84,6 +88,8 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 	private OLATResourceManager resourceManager;
 	@Autowired
 	private RepositoryService repositoryService;
+	@Autowired
+	private BaseSecurityManager baseSecurityManager;
 	
 	
 	@Before
@@ -98,7 +104,9 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 				"Test custom course disclaimer");
 		
 		id1 = JunitTestHelper.createAndPersistIdentityAsUser("id1");
+		roles1 = baseSecurityManager.getRoles(id1);
 		id2 = JunitTestHelper.createAndPersistIdentityAsUser("id2");
+		roles2 = baseSecurityManager.getRoles(id2);
 		
 		dbInstance.commitAndCloseSession();
 	}
@@ -155,13 +163,13 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 		
 		Assert.assertFalse(courseDisclaimerManager.hasAnyConsent(repositoryEntry));
 		
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, true, true);
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, true, false);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, roles1, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, roles2, true, false);
 		
 		dbInstance.commitAndCloseSession();
 		
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1));
-		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2));
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1, roles1));
+		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2, roles2));
 		
 		assertThat(courseDisclaimerManager.getConsents(repositoryEntry)).hasSize(2);
 	}
@@ -170,28 +178,28 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 	public void revokeAllConsents() {
 		initDisclaimer();
 		
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, true, true);
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, roles1, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, roles2, true, true);
 		
 		dbInstance.commitAndCloseSession();
 		
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1));
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2));
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1, roles1));
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2, roles2));
 		
 		courseDisclaimerManager.revokeAllConsents(repositoryEntry);
 		
 		dbInstance.commitAndCloseSession();
 		
-		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1));
-		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2));
+		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1, roles1));
+		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2, roles2));
 	}
 	
 	@Test
 	public void removeConsents() {
 		initDisclaimer();
 		
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, true, true);
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, roles1, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, roles2, true, true);
 		
 		dbInstance.commitAndCloseSession();
 		
@@ -210,13 +218,13 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 	public void revokeConsents() {
 		initDisclaimer();
 		
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, true, true);
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, roles1, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, roles2, true, true);
 		
 		dbInstance.commitAndCloseSession();
 		
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1));
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2));
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1, roles1));
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2, roles2));
 		
 		List<Long> identitiesToRevoke = new ArrayList<>();
 		identitiesToRevoke.add(id1.getKey());
@@ -224,8 +232,8 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 		
 		dbInstance.commitAndCloseSession();
 		
-		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1));
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2));
+		Assert.assertFalse(courseDisclaimerManager.isAccessGranted(repositoryEntry, id1, roles1));
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(repositoryEntry, id2, roles2));
 		assertThat(courseDisclaimerManager.getConsents(repositoryEntry)).hasSize(2);
 	}
 	
@@ -235,8 +243,8 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 		
 		Assert.assertFalse(courseDisclaimerManager.hasAnyEntry(repositoryEntry));
 		
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, true, true);
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, roles1, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, roles2, true, true);
 		
 		dbInstance.commitAndCloseSession();
 		
@@ -250,8 +258,8 @@ public class CourseDisclaimerManagerTest extends OlatTestCase {
 		
 		Assert.assertFalse(courseDisclaimerManager.hasAnyConsent(repositoryEntry));
 		
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, true, true);
-		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id1, roles1, true, true);
+		courseDisclaimerManager.acceptDisclaimer(repositoryEntry, id2, roles2, true, true);
 		
 		dbInstance.commitAndCloseSession();
 		
diff --git a/src/test/java/org/olat/user/manager/lifecycle/UserLifecycleManagerTest.java b/src/test/java/org/olat/user/manager/lifecycle/UserLifecycleManagerTest.java
index f8766c3b0d05eba730c852a0bb4dd8a2a297d587..fab1608f7ddbd6326777abce7719d943f57f216e 100644
--- a/src/test/java/org/olat/user/manager/lifecycle/UserLifecycleManagerTest.java
+++ b/src/test/java/org/olat/user/manager/lifecycle/UserLifecycleManagerTest.java
@@ -412,6 +412,7 @@ public class UserLifecycleManagerTest extends OlatTestCase {
 		user.setProperty(UserConstants.INSTITUTIONALNAME, "Del-23");
 		user.setProperty(UserConstants.INSTITUTIONALUSERIDENTIFIER, "Del-24");
 		Identity identity = securityManager.createAndPersistIdentityAndUser(null, username, null, user, BaseSecurityModule.getDefaultAuthProviderIdentifier(), username, "secret");
+		Roles roles = securityManager.getRoles(identity);
 		dbInstance.commitAndCloseSession();
 		// add some stuff
 		
@@ -431,9 +432,9 @@ public class UserLifecycleManagerTest extends OlatTestCase {
 		CourseFactory.saveCourse(courseOres.getResourceableId());
 		CourseFactory.closeCourseEditSession(courseOres.getResourceableId(), true);
 		//a consent to the disclaimer
-		courseDisclaimerManager.acceptDisclaimer(course, identity, true, true);
+		courseDisclaimerManager.acceptDisclaimer(course, identity, roles, true, true);
 		
-		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(course, identity));		
+		Assert.assertTrue(courseDisclaimerManager.isAccessGranted(course, identity, roles));
 		Assert.assertEquals(identity.getName(), course.getInitialAuthor());
 		Assert.assertTrue(repositoryService.hasRoleExpanded(identity, GroupRoles.owner.name()));
 		assertThat(courseDisclaimerManager.getConsents(course)).hasSize(1);