diff --git a/src/main/java/org/olat/admin/user/delete/BulkDeleteController.java b/src/main/java/org/olat/admin/user/delete/BulkDeleteController.java
index 22f8838d81d86e035a7f87682202d1f32633c75d..f97fdc5e2d745684e3a3b7bd45248d4ded487c11 100644
--- a/src/main/java/org/olat/admin/user/delete/BulkDeleteController.java
+++ b/src/main/java/org/olat/admin/user/delete/BulkDeleteController.java
@@ -133,22 +133,24 @@ public class BulkDeleteController extends BasicController {
 	 * Send the mail with informations: who deletes, when, list of deleted users
 	 * list of not deleted users, reason for deletion
 	 */
-	public void sendMail(UserRequest ureq) {
-		
+	public void sendMail() {
 		String recipient = WebappHelper.getMailConfig("mailDeleteUser");
-		
 		if (recipient.equals("disabled")) {
 			return;
 		}
 		
-		StringBuffer loginsFound = new StringBuffer();
-		for(String login : lstLoginsFound) loginsFound.append(login + "\n");
-		StringBuffer loginsNotfound = new StringBuffer();
-		for(String login : lstLoginsNotfound) loginsNotfound.append(login + "\n");
-		DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, ureq.getLocale());
+		StringBuilder loginsFound = new StringBuilder();
+		for(String login : lstLoginsFound) {
+			loginsFound.append(login + "\n");
+		}
+		StringBuilder loginsNotfound = new StringBuilder();
+		for(String login : lstLoginsNotfound) {
+			loginsNotfound.append(login + "\n");
+		}
+		DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, getLocale());
 		
 		String[] bodyArgs = new String[] {
-				ureq.getIdentity().getName(),
+				getIdentity().getName(),
 				loginsFound.toString(),
 				loginsNotfound.toString(),
 				reason,
@@ -157,7 +159,7 @@ public class BulkDeleteController extends BasicController {
 
 		ContactList cl = new ContactList(recipient);
 		cl.add(recipient);
-		cl.add(ureq.getIdentity());
+		cl.add(getIdentity());
 
 		try {
 			MailBundle bundle = new MailBundle();
diff --git a/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java b/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java
index 22446db130f611a18c50f1c9396f5803cd1f0968..5c502e618aa21a7b90fc4c4870f644a2a493321e 100644
--- a/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java
+++ b/src/main/java/org/olat/admin/user/delete/DirectDeleteController.java
@@ -122,8 +122,9 @@ public class DirectDeleteController extends BasicController {
 		} else if (sourceController == deleteConfirmController) {
 			if (DialogBoxUIFactory.isOkEvent(event)) {
 				deleteIdentities(toDelete);
-				if (bdc != null)
-					bdc.sendMail(ureq);
+				if (bdc != null) {
+					bdc.sendMail();
+				}
 				
 				initializeUserSearchController(ureq);
 				initializeUserListForm(ureq);
diff --git a/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java b/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
index dbb3d2aa3b00600059152348589abb26b678d0a2..fa3181cf2c6ec4b476febe2cbd21d8e47fd98d8d 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQConfigurationController.java
@@ -218,7 +218,13 @@ public class IQConfigurationController extends BasicController {
 		if(re == null) {
 			myContent.remove("iqeditform");
 		} else if(ImsQTI21Resource.TYPE_NAME.equals(re.getOlatResource().getResourceableTypeName())) {
-			boolean needManualCorrection = needManualCorrectionQTI21(re);
+			boolean needManualCorrection = false;
+			try {// in case of an unreadable test
+				needManualCorrection = needManualCorrectionQTI21(re);
+			} catch (Exception e) {
+				logError("Test cannot be read: " + re, e);
+				showError("error.resource.corrupted");
+			}
 			if(replacedTest) {// set some default settings in case the user don't save the next panel
 				moduleConfiguration.setStringValue(IQEditController.CONFIG_CORRECTION_MODE, needManualCorrection ? "manual" : "auto");
 				fireEvent(ureq, NodeEditController.NODECONFIG_CHANGED_EVENT);
diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
index 9e7538794fc1c06e23c0dc52c059b590859c6d14..b00c921e47400324e8c13b2638811cda2d21728d 100644
--- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
+++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
@@ -571,7 +571,10 @@ public class QTI21AssessmentRunController extends BasicController implements Gen
 		displayCtrl = new AssessmentTestDisplayController(ureq, bwControl, this, testEntry, courseRe, courseNode.getIdent(),
 				deliveryOptions, overrideOptions, true, false, false);
 		listenTo(displayCtrl);
-		if(displayCtrl.isEnded()) {
+		if(displayCtrl.getAssessmentTest() == null) {
+			logError("Test cannot be read: " + testEntry + " in course: " + courseRe + " element: " + courseNode.getIdent() , null);
+			showError("error.resource.corrupted");
+		} else if(displayCtrl.isEnded()) {
 			if(!displayCtrl.isResultsVisible()) {
 				doExitAssessment(ureq, null, true);
 				initAssessment(ureq);
diff --git a/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java b/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java
index b7555a2520cd3c3dc3005a857e218daf06c4fded..dda27b3f1c230a8398a74e8403ab5674a19b33eb 100644
--- a/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java
+++ b/src/main/java/org/olat/course/nodes/pf/manager/PFManager.java
@@ -408,7 +408,9 @@ public class PFManager {
 		SubscriptionContext nodefolderSubContext = CourseModule.createSubscriptionContext(courseEnv, pfNode);
 		RepositoryEntry re = courseEnv.getCourseGroupManager().getCourseEntry();
 		List<Identity> participants =  repositoryEntryRelationDao.getMembers(re, 
-				RepositoryEntryRelationType.both, GroupRoles.participant.name());		
+				RepositoryEntryRelationType.both, GroupRoles.participant.name());
+		participants = new ArrayList<>(new HashSet<>(participants));
+		
 		String path = courseEnv.getCourseBaseContainer().getRelPath() + "/" + FILENAME_PARTICIPANTFOLDER;
 		VFSContainer courseElementBaseContainer = new OlatRootFolderImpl(path, null);
 		VirtualContainer namedCourseFolder = new VirtualContainer(translator.translate("participant.folder"));
diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
index e692d83dd0ad6f59c71ba0abf4735c833f102385..2252347e63ea62093d2e996768c730ff90d132e7 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentTestDisplayController.java
@@ -396,6 +396,13 @@ public class AssessmentTestDisplayController extends BasicController implements
 		CoordinatorManager.getInstance().getCoordinator().getEventBus().deregisterFor(this, sessionOres);
 	}
 	
+	/**
+	 * @return The assessment test if the test cab be read or null.
+	 */
+	public AssessmentTest getAssessmentTest() {
+		return resolvedAssessmentTest == null ? null : resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful();
+	}
+	
 	/**
 	 * @return true if the termination time is set.
 	 */
diff --git a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
index 7d24952f4142aca4a9f71583ca1f7cde0a212cfc..38686720b53e63c39122077b972d0885278eabbf 100644
--- a/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
+++ b/src/main/java/org/olat/modules/qpool/ui/QuestionListController.java
@@ -532,8 +532,12 @@ public class QuestionListController extends AbstractItemListController implement
 		ItemRow nextRow = getModel().getNextObject(row);
 		if(nextRow != null) {
 			QuestionItem nextItem = qpoolService.loadItemById(nextRow.getKey());
-			stackPanel.popUpToRootController(ureq);
-			doSelect(ureq, nextItem, nextRow.isEditable());
+			if(nextItem != null) {
+				stackPanel.popUpToRootController(ureq);
+				doSelect(ureq, nextItem, nextRow.isEditable());
+			} else {
+				getItemsTable().reset(true, true, true);
+			}
 		}
 	}
 	
@@ -542,8 +546,12 @@ public class QuestionListController extends AbstractItemListController implement
 		ItemRow previousRow = getModel().getPreviousObject(row);
 		if(previousRow != null) {
 			QuestionItem previousItem = qpoolService.loadItemById(previousRow.getKey());
-			stackPanel.popUpToRootController(ureq);
-			doSelect(ureq, previousItem, previousRow.isEditable());
+			if(previousItem != null) {
+				stackPanel.popUpToRootController(ureq);
+				doSelect(ureq, previousItem, previousRow.isEditable());
+			} else {
+				getItemsTable().reset(true, true, true);
+			}
 		}
 	}