diff --git a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java
index 3316ec3c825e283eac95d8c4f658f3c189d223c5..97abe2954304ae54890554bd92b0e9e12c2990e0 100644
--- a/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/vfs/manager/VFSRepositoryServiceImpl.java
@@ -479,7 +479,11 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
 
 		data = dbInstance.getCurrentEntityManager().getReference(VFSMetadataImpl.class, data.getKey());
 		metadataDao.removeMetadata(data);
-		dbInstance.commit();
+		if(children.isEmpty()) {
+			dbInstance.commit();
+		} else {
+			dbInstance.commitAndCloseSession();
+		}
 		
 		deleted++;
 		return deleted;
diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java
index 17224307e8735df623123d9167c35fcb94aa567c..a232cd5e439e1d5ebb1476183f883ee7c7c5f819 100644
--- a/src/main/java/org/olat/course/CourseFactory.java
+++ b/src/main/java/org/olat/course/CourseFactory.java
@@ -72,7 +72,6 @@ import org.olat.core.id.context.ContextEntry;
 import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.logging.Tracing;
-import org.olat.core.util.CodeHelper;
 import org.olat.core.util.ExportUtil;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.Formatter;
@@ -440,11 +439,11 @@ public class CourseFactory {
 
 		// delete course directory
 		VFSContainer fCourseBasePath = getCourseBaseContainer(res.getResourceableId());
-		long start4 = System.nanoTime();
 		VFSStatus status = fCourseBasePath.deleteSilently();
-		CodeHelper.printMilliSecondTime(start4, "Delete all files");
+		DBFactory.getInstance().commitAndCloseSession();
 		boolean deletionSuccessful = (status == VFSConstants.YES || status == VFSConstants.SUCCESS);
-		log.info("deleteCourse: finished deletion. res="+res+", deletion successful: "+deletionSuccessful+", duration: "+(System.currentTimeMillis()-start)+" ms.");
+		log.info("deleteCourse: finished deletion. res={}, deletion successful: {}, duration: {} ms.",
+				res, deletionSuccessful, (System.currentTimeMillis()-start));
 	}
 
 	/**
@@ -767,6 +766,7 @@ public class CourseFactory {
 		course.getCourseEnvironment().getCourseGroupManager().archiveCourseGroups(exportDirectory);
 
 		CoreSpringFactory.getImpl(ChatLogHelper.class).archive(course, exportDirectory);
+		DBFactory.getInstance().commitAndCloseSession();
 
 	}
 
diff --git a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
index 0e4e59800985fa5b930b6556df8509c8f04a41ef..9c4f7b409e01f5a2df841784cd06a9e401944e16 100644
--- a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
+++ b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
@@ -41,10 +41,10 @@ import java.util.Set;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.logging.log4j.Logger;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.core.CoreSpringFactory;
+import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.IdentityEnvironment;
@@ -118,6 +118,7 @@ public class ScoreAccountingHelper {
 						}
 					}
 				}
+				DBFactory.getInstance().commitAndCloseSession();
 			}
 		}
 	}
@@ -134,8 +135,15 @@ public class ScoreAccountingHelper {
 	 * @param bos The output stream (which will be closed at the end, if you use a zip stream don't forget to shield it).
 	 */
 	public static void createCourseResultsOverviewXMLTable(List<Identity> identities, List<CourseNode> myNodes, ICourse course, Locale locale, OutputStream bos) {
+		try(OpenXMLWorkbook workbook = new OpenXMLWorkbook(bos, 1)) {
+			createCourseResultsOverviewXMLTable(identities, myNodes, course, locale, workbook);
+		} catch(Exception e) {
+			log.error("", e);
+		}
+	}
+	
+	private static void createCourseResultsOverviewXMLTable(List<Identity> identities, List<CourseNode> myNodes, ICourse course, Locale locale, OpenXMLWorkbook workbook) {
 		CourseAssessmentService courseAssessmentService = CoreSpringFactory.getImpl(CourseAssessmentService.class);
-		OpenXMLWorkbook workbook = new OpenXMLWorkbook(bos, 1);
 		OpenXMLWorksheet sheet = workbook.nextWorksheet();
 		sheet.setHeaderRows(2);
 		
@@ -348,6 +356,7 @@ public class ScoreAccountingHelper {
 					}
 				}
 			}
+			DBFactory.getInstance().commitAndCloseSession();
 		}
 
 		//min. max. informations
@@ -397,8 +406,6 @@ public class ScoreAccountingHelper {
 			cutRow.addCell(2, "cutValue");
 			cutRow.addCell(3, cutVal);
 		}
-		
-		IOUtils.closeQuietly(workbook);
 	}
 	
 	
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 aab3658eaa86506050eef816a6e02976c2517164..de0e01b59ba1a56434000dc574e35158e27fa0e9 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
@@ -358,7 +358,7 @@ warning.no.task.choosed=Wie es scheint, war es Ihnen aufgrund von \u00C4nderunge
 warning.no.task.choosed.coach=Wie es scheint, war es der Assignee aufgrund von \u00C4nderungen am Kurselement nicht m\u00F6glich, eine Aufgabe f\u00FCr dieses Aufgabenelement auszuw\u00E4hlen.
 warning.reopen=Wenn Sie das Abgabedatum verl\u00E4ngern, wird diese Aufgabe neu er\u00F6ffnet. 
 warning.submit.documents.edited=Sie k\u00F6nnen die Aufgabe nicht abgeben, da das Dokument "{1}" noch von "{0}" bearbeitet wird.
-warning.tasks.in.process.delete.text=Wollen Sie wirklich dieser Aufgabe l\u00F6schen? <strong>Es gibt bereits Benutzer die den Aufgabenprozess gestartet haben. Das kann f\u00FCr diese Benutzer zu Problemen f\u00FChren.</strong>
+warning.tasks.in.process.delete.text=Wollen Sie diese Aufgabe wirklich l\u00F6schen? <strong>Es gibt bereits Benutzer, die mit der Aufgabe begonnen haben. Das kann f\u00FCr diese Benutzer zu Problemen f\u00FChren.</strong>
 warning.tasks.in.process.delete.title=$\:warning.tasks.in.process.title
 warning.tasks.in.process.text=Es gibt bereits Benutzer die den Aufgabenprozess gestartet haben. \u00C4nderungen an der Workflow-Konfiguration kann f\u00FCr diese Benutzer zu Problemen f\u00FChren. Informationen dazu finden Sie im <a href\="{0}" target\="_blank"><i class\='o_icon o_icon_help'> </i> Handbuch</a>.
 warning.tasks.in.process.title=Aufgabenprozess bereits gestartet
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java
index 64315c67ec84b941916b0397ff009700e836bf55..a8b54f5d2b3bd4343ce392511153c807d26634cf 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/FeedbacksEditorController.java
@@ -355,7 +355,7 @@ public class FeedbacksEditorController extends FormBasicController implements Sy
 				helpText += ".single";
 			}
 			textEl.setHelpTextKey(helpText + ".help", null);
-			textEl.setHelpUrlForManualPage("Test editor QTI 2.1 in detail#details_testeditor_feedback");
+			textEl.setHelpUrlForManualPage("Configure test questions#_tab_feedback");
 			textEl.setElementCssClass("o_sel_assessment_item_" + feedbackType.name() + "_feedback");
 			RichTextConfiguration richTextConfig2 = textEl.getEditorConfiguration();
 			richTextConfig2.setFileBrowserUploadRelPath("media");// set upload dir to the media dir
@@ -475,7 +475,7 @@ public class FeedbacksEditorController extends FormBasicController implements Sy
 			textEl.setEnabled(!readOnly);
 			textEl.setVisible(!readOnly);
 			textEl.setHelpTextKey("feedback." + feedbackType.name() + ".help", null);
-			textEl.setHelpUrlForManualPage("Test editor QTI 2.1 in detail#details_testeditor_feedback");
+			textEl.setHelpUrlForManualPage("Configure test questions#_tab_feedback");
 			textEl.setElementCssClass("o_sel_assessment_item_" + feedbackType.name() + "_feedback");
 			RichTextConfiguration richTextConfig2 = textEl.getEditorConfiguration();
 			richTextConfig2.setFileBrowserUploadRelPath("media");// set upload dir to the media dir
diff --git a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
index 20b419e5d79de69cf52906fa599b8ab3e4f218df..a4544a30d6eb1f00b6874316ef1db0fc2a377397 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryServiceImpl.java
@@ -516,7 +516,7 @@ public class RepositoryServiceImpl implements RepositoryService, OrganisationDat
 			return errors;
 		}
 
-		if(debug) log.debug("deleteRepositoryEntry after load entry=" + entry);
+		log.info(Tracing.M_AUDIT, "deleteRepositoryEntry after load entry={}", entry);
 		RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(entry);
 		OLATResource resource = entry.getOlatResource();
 		//delete old context
@@ -562,21 +562,23 @@ public class RepositoryServiceImpl implements RepositoryService, OrganisationDat
 		if (handler != null) {
 			handler.cleanupOnDelete(entry, resource);
 		}
-		dbInstance.commit();
+		dbInstance.commitAndCloseSession();
 
 		//delete all test sessions
 		assessmentTestSessionDao.deleteAllUserTestSessionsByCourse(entry);
+		dbInstance.commit();
 		//nullify the reference
 		assessmentEntryDao.removeEntryForReferenceEntry(entry);
 		assessmentEntryDao.deleteEntryForRepositoryEntry(entry);
+		dbInstance.commit();
 		repositoryEntryToOrganisationDao.delete(entry);
 		repositoryEntryToTaxonomyLevelDao.deleteRelation(entry);
 		dbInstance.commit();
 
-		if(debug) log.debug("deleteRepositoryEntry after reload entry=" + entry);
+		if(debug) log.debug("deleteRepositoryEntry after reload entry={}", entry);
 		deleteRepositoryEntryAndBaseGroups(entry);
 
-		if(debug) log.debug("deleteRepositoryEntry Done");
+		log.info(Tracing.M_AUDIT, "deleteRepositoryEntry Done");
 		return errors;
 	}
 
diff --git a/src/main/resources/serviceconfig/olat.properties b/src/main/resources/serviceconfig/olat.properties
index 3a24d1c759643d9c31287a6aa57a39db58e5ca41..74a3972c88259f3a6d7798c91c29bc615fe270e8 100644
--- a/src/main/resources/serviceconfig/olat.properties
+++ b/src/main/resources/serviceconfig/olat.properties
@@ -1343,8 +1343,8 @@ ldap.learningResourceManagerRoleValue=
 # Build properties
 #####
 application.name=OpenOlat
-build.version=15.2.2
-build.identifier=openolat1522-dev
+build.version=15.2.4
+build.identifier=openolat1524-dev
 build.repo.revision=local-devel
 
 #####