diff --git a/src/main/java/org/olat/admin/layout/LayoutModule.java b/src/main/java/org/olat/admin/layout/LayoutModule.java
index 9e1b4e6c04a8f69a0f827529d15d1aa2f620d532..0d1836f0c9ae2eb86c1271e75ff81a979098c678 100644
--- a/src/main/java/org/olat/admin/layout/LayoutModule.java
+++ b/src/main/java/org/olat/admin/layout/LayoutModule.java
@@ -25,6 +25,7 @@ import java.nio.file.Paths;
 import org.olat.core.configuration.AbstractSpringModule;
 import org.olat.core.dispatcher.mapper.GlobalMapperRegistry;
 import org.olat.core.id.OLATResourceable;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.coordinate.CoordinatorManager;
@@ -159,16 +160,16 @@ public class LayoutModule extends AbstractSpringModule  {
 	public void removeLogo() {
 		File logo = getLogo();
 		if(logo != null && logo.exists()) {
-			logo.delete();
+			FileUtils.deleteFile(logo);
 		}
 		File dir = getLogoDirectory();
 		File logo1x = new File(dir, "oo-logo@1x.png");
 		if(logo1x.exists()) {
-			logo1x.delete();
+			FileUtils.deleteFile(logo1x);
 		}
 		File logo2x = new File(dir, "oo-logo@2x.png");
 		if(logo2x.exists()) {
-			logo2x.delete();
+			FileUtils.deleteFile(logo2x);
 		}
 		setLogoFilename("");
 	}
diff --git a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
index 5ded8166554d286bedfeed4f08fccafc57c1f26c..c5d5b30b658addd9fdd6484a0420b5735cb2441c 100644
--- a/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
+++ b/src/main/java/org/olat/commons/memberlist/ui/MembersMailController.java
@@ -450,9 +450,9 @@ public class MembersMailController extends FormBasicController {
 	
 	private void doDeleteAttachment(Attachment attachment) {
 		attachmentSize -= attachment.getFile().length();
-		attachment.getFile().delete();
+		FileUtils.deleteFile(attachment.getFile());
 		attachments.remove(attachment);
-		uploadCont.setVisible(attachments.size() > 0);
+		uploadCont.setVisible(!attachments.isEmpty());
 		uploadCont.setDirty(true);
 	}
 	
diff --git a/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java b/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java
index 4bf3c4fa194e56ce97d0ef0a47c07de701e0fe6c..fe2487ecf9a426c45098dadea1b99bcbf71b0d5b 100644
--- a/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java
+++ b/src/main/java/org/olat/core/commons/portlets/iframe/IframePortletRunController.java
@@ -127,15 +127,15 @@ public class IframePortletRunController extends BasicController {
 		File editFile = new File(editFilePath);
 		File parent = editFile.getParentFile();
 		if(parent == null){
-			log.warn("initEditButton: no parent folder for "+editFilePath);
+			log.warn("initEditButton: no parent folder for {}", editFilePath);
 			return false;
 		}
 		if (!editFile.getParentFile().exists()) {
-			log.warn("editFilePath is wrong, not even parent dir exists::" + editFile.getParentFile().getAbsolutePath()); 
+			log.warn("editFilePath is wrong, not even parent dir exists: {}", editFile.getParentFile().getAbsolutePath()); 
 			return false;
 		}
 		if ( ! editFile.canWrite()) {
-			log.warn("Can not write to file::" + editFile.getAbsolutePath()); 
+			log.warn("Can not write to file: {}", editFile); 
 			return false;
 		}
 		
@@ -145,11 +145,13 @@ public class IframePortletRunController extends BasicController {
 		 */
 		
 		
-		if (! editFile.exists()) {
+		if (!editFile.exists()) {
 			try {
-				editFile.createNewFile();
+				if(!editFile.createNewFile()) {
+					log.warn("Cannot create file: {}", editFile);
+				}
 			} catch (IOException e) {
-				log.error("Cannot create file::" + editFile.getAbsolutePath()); 
+				log.error("Cannot create file: {}", editFile); 
 				return false;
 			}
 		}
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java
index 18a719c4f6a32f355cd76ce40a3d2389e5d7be3d..052f9bcfdd20648f6754fa0c47764106f004df83 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/Form.java
@@ -63,6 +63,7 @@ import org.olat.core.logging.AssertException;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.ArrayHelper;
 import org.olat.core.util.CodeHelper;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.ValidationStatus;
@@ -422,7 +423,9 @@ public class Form {
 	private void doClearRequestParameterAndMultipartData() {
 		for (Entry<String, File> entry : requestMultipartFiles.entrySet()) {
 			File tmpFile = entry.getValue();
-			if (tmpFile.exists()) tmpFile.delete();
+			if (tmpFile.exists()) {
+				FileUtils.deleteFile(tmpFile);
+			}
 		}
 		requestMultipartFiles.clear();
 		requestMultipartFileNames.clear();
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java
index c5c7e15113ec48d33e516d1705bb586779f97a8a..756786fb63ce2530f3d192a73ac46c69877ace69 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/FileElementImpl.java
@@ -148,7 +148,7 @@ public class FileElementImpl extends FormItemImpl
 		if (keys.size() > 0 && keys.contains(component.getFormDispatchId())) {
 			// Remove old files first
 			if (tempUploadFile != null && tempUploadFile.exists()) {
-				tempUploadFile.delete();
+				FileUtils.deleteFile(tempUploadFile);
 			}
 			// Move file from a temporary request scope location to a location
 			// with a
@@ -238,7 +238,7 @@ public class FileElementImpl extends FormItemImpl
 	@Override
 	public void reset() {
 		if (tempUploadFile != null && tempUploadFile.exists()) {
-			tempUploadFile.delete();
+			FileUtils.deleteFile(tempUploadFile);
 		}
 		tempUploadFile = null;
 		if (previewEl != null) {
@@ -247,7 +247,7 @@ public class FileElementImpl extends FormItemImpl
 				previewEl.setMedia(media);
 				previewEl.setMaxWithAndHeightToFitWithin(300, 200);
 				previewEl.setVisible(true);
-			} else if (previewEl != null) {
+			} else {
 				previewEl.setVisible(false);
 			}
 		}
@@ -573,13 +573,12 @@ public class FileElementImpl extends FormItemImpl
 				try {
 					success = VFSManager.copyContent(tempUploadFile, leaf);
 				} catch (Exception e) {
-					log.error("Error while copying content from temp file::"
-							+ (tempUploadFile == null ? "NULL" : tempUploadFile.getAbsolutePath()), e);
+					log.error("Error while copying content from temp file: {}", tempUploadFile, e);
 				}
 				if (success) {
 					// Delete original temp file after copy to simulate move
 					// behavior
-					tempUploadFile.delete();
+					FileUtils.deleteFile(tempUploadFile);
 					targetLeaf = leaf;
 				}
 			}
@@ -605,7 +604,7 @@ public class FileElementImpl extends FormItemImpl
 	@Override
 	public void dispose() {
 		if (tempUploadFile != null && tempUploadFile.exists()) {
-			tempUploadFile.delete();
+			FileUtils.deleteFile(tempUploadFile);
 		}
 	}
 
diff --git a/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java b/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java
index ba9ed00f483d06f57d89f74a6d2be144badc252d..dea0c9e5c47fba5bf8e6245d1441dc95e2e2e43a 100644
--- a/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java
+++ b/src/main/java/org/olat/core/gui/media/CleanupAfterDeliveryFileMediaResource.java
@@ -28,6 +28,8 @@ package org.olat.core.gui.media;
 
 import java.io.File;
 
+import org.olat.core.util.FileUtils;
+
 /**
  * This media resource deletes the file as soon as it is delivered to the
  * client. The file is delivered as attachment.
@@ -51,11 +53,8 @@ public class CleanupAfterDeliveryFileMediaResource extends FileMediaResource {
 		return false;
 	}
 
-	/**
-	 * @see org.olat.core.gui.media.MediaResource#release()
-	 */
 	@Override
 	public void release() {
-		file.delete();
+		FileUtils.deleteFile(file);
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java b/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java
index 1d3f80b99350c9a687e71909fcf9f2066586ea0e..8b0ad40ceaf6e1edaf751976b336922dc6e62543 100644
--- a/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java
+++ b/src/main/java/org/olat/core/gui/media/NamedFileMediaResource.java
@@ -28,6 +28,7 @@ import java.io.File;
 
 import javax.servlet.http.HttpServletResponse;
 
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
 
@@ -69,18 +70,14 @@ public class NamedFileMediaResource extends FileMediaResource {
 		this.deleteAfterDelivery = deleteAfterDelivery;
 	}
 	
-	/**
-	 * @see org.olat.core.gui.media.MediaResource#getContentType()
-	 */
+	@Override
 	public String getContentType() {
 		String mimeType = WebappHelper.getMimeType(fileName);
 		if (mimeType == null) mimeType = "application/octet-stream";
 		return mimeType;
 	}
 
-	/**
-	 * @see org.olat.core.gui.media.MediaResource#prepare(javax.servlet.http.HttpServletResponse)
-	 */
+	@Override
 	public void prepare(HttpServletResponse hres) {
 		// encode filename in ISO8859-1; does not really help but prevents from filename not being displayed at all
 		// if it contains non-US-ASCII characters which are not allowed in header fields.
@@ -88,14 +85,10 @@ public class NamedFileMediaResource extends FileMediaResource {
 		hres.setHeader("Content-Description", StringHelper.urlEncodeUTF8(fileDescription));
 	}
 
-
-	/**
-	 * @see org.olat.core.gui.media.MediaResource#release()
-	 */
+	@Override
 	public void release() {
 		if (deleteAfterDelivery && file.exists()) {
-			file.delete();
+			FileUtils.deleteFile(file);
 		}
 	}
-
 }
diff --git a/src/main/java/org/olat/core/util/FileUtils.java b/src/main/java/org/olat/core/util/FileUtils.java
index 9ac62ae7b73f5094b0a1418f7d04e1ac13c53e08..3923a777b3be96b891b450982bfd8cdd0a5fc2e0 100644
--- a/src/main/java/org/olat/core/util/FileUtils.java
+++ b/src/main/java/org/olat/core/util/FileUtils.java
@@ -558,7 +558,7 @@ public class FileUtils {
 			}
 			deleted = Files.deleteIfExists(file.toPath());
 		} catch (IOException e) {
-			log.error("", e);
+			log.error("Cannot delete file: {}", file, e);
 			deleted = false;
 		}
 		return deleted;
diff --git a/src/main/java/org/olat/core/util/WebappHelper.java b/src/main/java/org/olat/core/util/WebappHelper.java
index 665ae10cf03acf0e7a0c42efbed7682736a4ed4c..14dbbc7713fe4c0706be86db1108cd1e1967cf61 100644
--- a/src/main/java/org/olat/core/util/WebappHelper.java
+++ b/src/main/java/org/olat/core/util/WebappHelper.java
@@ -31,6 +31,7 @@ package org.olat.core.util;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
@@ -452,10 +453,16 @@ public class WebappHelper implements Initializable, Destroyable, ServletContextA
 		File writeFile = new File(tmpDir, "UTF-8 test läsÖiç-首页f新");
 		if (writeFile.exists()) {
 			// remove exising files first
-			writeFile.delete();
+			try {
+				Files.deleteIfExists(writeFile.toPath());
+			} catch (IOException e) {
+				log.warn("Cannot delete test file for UTF-8 file system.", e);
+			}
 		}
 		try {
-			writeFile.createNewFile();
+			if(!writeFile.createNewFile()) {
+				log.warn("No UTF-8 capable filesystem found! Error while writing testfile to filesystem");
+			}
 		} catch (IOException e) {
 			log.warn("No UTF-8 capable filesystem found! Error while writing testfile to filesystem", e);
 		}
@@ -483,7 +490,11 @@ public class WebappHelper implements Initializable, Destroyable, ServletContextA
 					+ System.getProperty("file.encoding") + " (the one configured)");
 		}
 		// try to delete file anyway
-		writeFile.delete();
+		try {
+			Files.deleteIfExists(writeFile.toPath());
+		} catch (IOException e) {
+			log.warn("Cannot delete test file for UTF-8 file system.", e);
+		}
 		
 		if (!foundUtf8File && WebappHelper.enforceUtf8Filesystem) {
 			throw new BeanInitializationException(
diff --git a/src/main/java/org/olat/core/util/i18n/I18nManager.java b/src/main/java/org/olat/core/util/i18n/I18nManager.java
index 4b24d4dc7a09ef0a972ce339c997afad8183a05b..f339fe47188854ae99c68753f63178a61faa0e0f 100644
--- a/src/main/java/org/olat/core/util/i18n/I18nManager.java
+++ b/src/main/java/org/olat/core/util/i18n/I18nManager.java
@@ -34,6 +34,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.file.Files;
 import java.text.DecimalFormat;
 import java.text.MessageFormat;
 import java.text.NumberFormat;
@@ -1056,7 +1057,11 @@ public class I18nManager {
 			return;// nothing to do
 		}
 		File f = getPropertiesFile(locale, bundleName, baseDir);
-		if (f.exists()) f.delete();
+		try {
+			Files.deleteIfExists(f.toPath());
+		} catch (IOException e) {
+			log.error("Cannot delete: {}", f);
+		}
 		// 3) Check if for this bundle any other language file exists, if
 		// not remove
 		// the bundle from the list of translatable bundles
@@ -1705,9 +1710,7 @@ public class I18nManager {
 		if (!i18nModule.isTransToolEnabled()) {
 			throw new AssertException("Programming error - can only copy i18n files from a language pack to the source when in translation mode");
 		}
-		JarFile jar = null;
-		try {
-			jar = new JarFile(jarFile);
+		try(JarFile jar = new JarFile(jarFile)) {
 			Enumeration<JarEntry> jarEntries = jar.entries();
 			while (jarEntries.hasMoreElements()) {
 				JarEntry jarEntry = jarEntries.nextElement();
@@ -1729,11 +1732,11 @@ public class I18nManager {
 						Properties props = new Properties();
 						props.load(new FileInputStream(targetFile));
 						if (props.size() == 0) {
-							targetFile.delete();
+							Files.deleteIfExists(targetFile.toPath());
 							// Delete empty parent dirs recursively
 							File parent = targetFile.getParentFile();
 							while (parent != null && parent.list() != null && parent.list().length == 0) {
-								parent.delete();
+								Files.deleteIfExists(parent.toPath());
 								parent = parent.getParentFile();
 							}
 						}
@@ -1744,8 +1747,6 @@ public class I18nManager {
 			}
 		} catch (IOException e) {
 			throw new OLATRuntimeException("Error when copying up i18n files from a jar::" + jarFile.getAbsolutePath(), e);
-		} finally {
-			IOUtils.closeQuietly(jar);
 		}
 	}
 
diff --git a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java
index 79ed3f875106c65191359357c4d21182d270ecc5..b47dc576e5a0945d6831f430a2750e2fbe57ff14 100644
--- a/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java
+++ b/src/main/java/org/olat/core/util/i18n/devtools/TranslationDevManager.java
@@ -25,6 +25,7 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -687,7 +688,7 @@ public class TranslationDevManager {
 			}			
 		}
 		
-		log.info("found " + doupList.size() + " douplicated keys");		
+		log.info("found {} duplicated keys", doupList.size());		
 		return doupList;
 	}
 	
@@ -714,18 +715,22 @@ public class TranslationDevManager {
 			}			
 		}
 		
-		log.info("found " + doupList.size() + " douplicated values in keys");		
+		log.info("found {} douplicated values in keys", doupList.size());
 		return doupList;
 	}
 	
 	public void deletePackage(String bundleName) {
-		File path = getBundlePath(bundleName);
-		if (path.exists()) {
-			File[] files = path.listFiles();
-			for (int i = 0; i < files.length; i++) {
-				files[i].delete();
+		try {
+			File path = getBundlePath(bundleName);
+			if (path != null && path.exists()) {
+				File[] files = path.listFiles();
+				for (int i = 0; i < files.length; i++) {
+					Files.deleteIfExists(files[i].toPath());
+				}
+				Files.delete(path.toPath());
 			}
-			path.delete();
+		} catch (IOException e) {
+			log.error("Cannot delete bundle: {}", bundleName);
 		}
 	}
 
@@ -752,8 +757,12 @@ public class TranslationDevManager {
 
 	private void copyFile(File source, File dest) throws IOException {
 		if (!dest.exists()) {
-			if (!dest.getParentFile().exists()) dest.getParentFile().mkdirs();
-			dest.createNewFile();
+			if (!dest.getParentFile().exists()) {
+				dest.getParentFile().mkdirs();
+			}
+			if(!dest.createNewFile()) {
+				log.error("File cannot be created at: {}", dest);
+			}
 		}
 		
 		try(InputStream in = new FileInputStream(source);
diff --git a/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java b/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java
index 30308eea9c30edcc6abd77c3ccbf67279bac90f8..bc4654b7a4b97e88b8c24cecb886672b5e04569b 100644
--- a/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java
+++ b/src/main/java/org/olat/core/util/i18n/ui/I18nConfigSubDeletePackageController.java
@@ -25,6 +25,8 @@
 package org.olat.core.util.i18n.ui;
 
 import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
 import java.util.Collection;
 
 import org.olat.core.gui.UserRequest;
@@ -97,13 +99,10 @@ class I18nConfigSubDeletePackageController extends FormBasicController {
 		submitButton.setEnabled(false); // enable as soon as something is checked
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#formOK(org.olat.core.gui.UserRequest)
-	 */
 	@Override
 	protected void formOK(UserRequest ureq) {
 		Collection<String> toDelete = deleteLangPackSelection.getSelectedKeys();
-		if (toDelete.size() == 0) {
+		if (toDelete.isEmpty()) {
 			// should not happen since button disabled
 			return;
 		}
@@ -111,26 +110,12 @@ class I18nConfigSubDeletePackageController extends FormBasicController {
 				"configuration.management.package.delete.confirm", toDelete.toString()), dialogCtr);
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.control.Controller, org.olat.core.gui.control.Event)
-	 */
+	@Override
 	public void event(UserRequest ureq, Controller source, Event event) {
 		if (source == dialogCtr) {
 			if (DialogBoxUIFactory.isYesEvent(event)) {
-				// Yes case, delete now
-				for (String deleteLangPack : deleteLangPackSelection.getSelectedKeys()) {
-					File file = new File(i18nModule.getLangPacksDirectory(), deleteLangPack);
-					if (file.exists()) file.delete();
-					logAudit("Deleted language pack::" + deleteLangPack);
-				}
-				// Reset i18n system
-				i18nModule.reInitializeAndFlushCache();
-				// wow, everything worked fine
-				showInfo("configuration.management.package.delete.success", deleteLangPackSelection.getSelectedKeys().toString());
+				doDelete();
 				fireEvent(ureq, Event.DONE_EVENT);
-			} else {
-				// No case, do nothing.
 			}
 		}
 	}
@@ -143,20 +128,32 @@ class I18nConfigSubDeletePackageController extends FormBasicController {
 			showInfo("configuration.management.package.delete.cancel");
 
 		} else if (source == deleteLangPackSelection) {
-			if (deleteLangPackSelection.getSelectedKeys().size() == 0) {
+			if (deleteLangPackSelection.getSelectedKeys().isEmpty()) {
 				submitButton.setEnabled(false);
 			} else {
 				submitButton.setEnabled(true);
 			}
 		}
 	}
+	
+	private void doDelete() {
+		try {
+			for (String deleteLangPack : deleteLangPackSelection.getSelectedKeys()) {
+				File file = new File(i18nModule.getLangPacksDirectory(), deleteLangPack);
+				Files.deleteIfExists(file.toPath());
+				logAudit("Deleted language pack::" + deleteLangPack);
+			}
+			// Reset i18n system
+			i18nModule.reInitializeAndFlushCache();
+			// wow, everything worked fine
+			showInfo("configuration.management.package.delete.success", deleteLangPackSelection.getSelectedKeys().toString());
+		} catch (IOException e) {
+			logError("", e);
+		}
+	}
 
-	/**
-	 * @see org.olat.core.gui.components.form.flexible.impl.FormBasicController#doDispose()
-	 */
 	@Override
 	protected void doDispose() {
-	// nothing to dispose
+		// nothing to dispose
 	}
-
 }
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 47ef44323af4456772b017ab7a93f379710fb601..095f35dba89ff098c9120fb127edc1075fb22176 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
@@ -615,13 +615,7 @@ public class MailManagerImpl implements MailManager, InitializingBean  {
 	public void deleteCustomMailTemplate() {
 		File baseFolder = new File(WebappHelper.getUserDataRoot(), MAIL_TEMPLATE_FOLDER);
 		File customTemplate = new File(baseFolder, "mail_template.html");
-		if (customTemplate.exists()) {
-			try {
-				customTemplate.delete();
-			} catch (Exception e) {
-				log.error("", e);
-			}
-		}
+		org.olat.core.util.FileUtils.deleteFile(customTemplate);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
index 3ee376efc64152c8357c1c0bb36a6e27ce2b49a4..e35ad6c7477a1b7abbc1e2fc94744547917a2ff0 100644
--- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
@@ -174,7 +174,7 @@ public class CourseAssessmentManagerImpl implements AssessmentManager {
 
 		//node log
 		UserNodeAuditManager am = course.getCourseEnvironment().getAuditManager();
-		am.appendToUserNodeLog(courseNode, identity, assessedIdentity, "ATTEMPTS set to: " + String.valueOf(attempts), by);
+		am.appendToUserNodeLog(courseNode, identity, assessedIdentity, "ATTEMPTS set to: " + attempts, by);
 
 		// notify about changes
 		AssessmentChangedEvent ace = new AssessmentChangedEvent(AssessmentChangedEvent.TYPE_ATTEMPTS_CHANGED, assessedIdentity);
@@ -253,7 +253,7 @@ public class CourseAssessmentManagerImpl implements AssessmentManager {
 	@Override
 	public void removeIndividualAssessmentDocument(CourseNode courseNode, Identity identity, Identity assessedIdentity, File document) {
 		if(document != null && document.exists()) {
-			document.delete();
+			FileUtils.deleteFile(document);
 			
 			//update counter
 			ICourse course = CourseFactory.loadCourse(cgm.getCourseEntry());
diff --git a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java
index fb697d1d50ab4403d79ad878ee4e8bf35a7cdad4..d96b6bc3275339f02e2e652b0e7ca547de42c5e3 100644
--- a/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java
+++ b/src/main/java/org/olat/course/certificate/manager/CertificatePhantomWorker.java
@@ -27,7 +27,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.io.Writer;
-import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Date;
@@ -43,6 +43,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.id.User;
 import org.olat.core.id.UserConstants;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.Formatter;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.i18n.I18nManager;
@@ -144,7 +145,7 @@ public class CertificatePhantomWorker {
 		VelocityContext context = getContext();
 		boolean result = false;
 		File htmlCertificate = new File(templateFile.getParent(), "c" + UUID.randomUUID() + ".html");
-		try(Reader in = Files.newBufferedReader(templateFile.toPath(), Charset.forName("UTF-8"));
+		try(Reader in = Files.newBufferedReader(templateFile.toPath(), StandardCharsets.UTF_8);
 			Writer output = new FileWriter(htmlCertificate)) {
 			result = certificatesManager.getVelocityEngine().evaluate(context, output, "mailTemplate", in);
 			output.flush();
@@ -371,7 +372,7 @@ public class CertificatePhantomWorker {
 				destroyProcess();
 			} finally {
 				if(htmlCertificateFile != null) {
-					htmlCertificateFile.delete();
+					FileUtils.deleteFile(htmlCertificateFile);
 				}
 			}
 		}
@@ -406,14 +407,14 @@ public class CertificatePhantomWorker {
 			}
 			
 			if(log.isDebugEnabled()) {
-				log.debug("Error: " + errors.toString());
-				log.debug("Output: " + output.toString());
+				log.debug("Error: {}", errors.toString());
+				log.debug("Output: {}", output.toString());
 			}
 
 			try {
 				exitValue = proc.waitFor();
 				if (exitValue != 0) {
-					log.warn("Problem with PhantomJS? " + exitValue);
+					log.warn("Problem with PhantomJS? {}", exitValue);
 				}
 			} catch (InterruptedException e) {
 				log.warn("Takes too long");
diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
index eecf5e079bec6f1ba57afb6b97d8789e39fa81ec..5d965201af06794d663914a7d4e5e2394dd16b26 100644
--- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
@@ -118,48 +118,48 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode {
 	private static final long serialVersionUID = -8177448874150049173L;
 	private static final Logger log = Tracing.createLoggerFor(ProjectBrokerCourseNode.class);
 
-	private transient static final String PACKAGE_PROJECTBROKER = Util.getPackageName(ProjectListController.class);
-	private transient static final String PACKAGE = Util.getPackageName(ProjectBrokerCourseNode.class);
+	private static final transient String PACKAGE_PROJECTBROKER = Util.getPackageName(ProjectListController.class);
+	private static final transient String PACKAGE = Util.getPackageName(ProjectBrokerCourseNode.class);
 
-	public transient static final String TYPE = "projectbroker";
+	public static final transient String TYPE = "projectbroker";
 
 	// NLS support:
 
-	private transient static final String NLS_GUESTNOACCESS_TITLE = "guestnoaccess.title";
-	private transient static final String NLS_GUESTNOACCESS_MESSAGE = "guestnoaccess.message";
-	private transient static final String NLS_ERROR_MISSINGSCORECONFIG_SHORT = "error.missingscoreconfig.short";
-	private transient static final String NLS_WARN_NODEDELETE = "warn.nodedelete";
+	private static final transient String NLS_GUESTNOACCESS_TITLE = "guestnoaccess.title";
+	private static final transient String NLS_GUESTNOACCESS_MESSAGE = "guestnoaccess.message";
+	private static final transient String NLS_ERROR_MISSINGSCORECONFIG_SHORT = "error.missingscoreconfig.short";
+	private static final transient String NLS_WARN_NODEDELETE = "warn.nodedelete";
 
 	// MUST BE NON TRANSIENT
 	private static final int CURRENT_CONFIG_VERSION = 3;
 
 	/** CONF_DROPBOX_ENABLED configuration parameter key. */
-	public transient static final String CONF_DROPBOX_ENABLED = "dropbox_enabled";
+	public static final transient String CONF_DROPBOX_ENABLED = "dropbox_enabled";
 	/** CONF_DROPBOX_ENABLEMAIL configuration parameter key. */
-	public transient static final String CONF_DROPBOX_ENABLEMAIL = "dropbox_enablemail";
+	public static final transient String CONF_DROPBOX_ENABLEMAIL = "dropbox_enablemail";
 	/** CONF_DROPBOX_CONFIRMATION configuration parameter key. */
-	public transient static final String CONF_DROPBOX_CONFIRMATION = "dropbox_confirmation";
+	public static final transient String CONF_DROPBOX_CONFIRMATION = "dropbox_confirmation";
 
 	/** CONF_SCORING_ENABLED configuration parameter key. */
-	public transient static final String CONF_SCORING_ENABLED = "scoring_enabled";
+	public static final transient String CONF_SCORING_ENABLED = "scoring_enabled";
 
 	/** ACCESS_SCORING configuration parameter key. */
-	public transient static final String ACCESS_SCORING = "scoring";
+	public static final transient String ACCESS_SCORING = "scoring";
 	/** ACCESS_DROPBOX configuration parameter key. */
-	public transient static final String ACCESS_DROPBOX = "dropbox";
-	public transient static final String ACCESS_RETURNBOX = "returnbox";
-	public transient static final String ACCESS_PROJECTBROKER = "projectbroker";
+	public static final transient String ACCESS_DROPBOX = "dropbox";
+	public static final transient String ACCESS_RETURNBOX = "returnbox";
+	public static final transient String ACCESS_PROJECTBROKER = "projectbroker";
 
 	/** CONF_TASK_PREVIEW configuration parameter key used for task-form. */
-	public transient static final String CONF_TASK_PREVIEW = "task_preview";
+	public static final transient String CONF_TASK_PREVIEW = "task_preview";
 
-	public transient static final String CONF_RETURNBOX_ENABLED = "returnbox_enabled";
+	public static final transient String CONF_RETURNBOX_ENABLED = "returnbox_enabled";
 
-	public transient static final String CONF_ACCOUNTMANAGER_GROUP_KEY = "config_accountmanager_group_id";
+	public static final transient String CONF_ACCOUNTMANAGER_GROUP_KEY = "config_accountmanager_group_id";
 
-	public transient static final String CONF_PROJECTBROKER_KEY = "conf_projectbroker_id";
+	public static final transient String CONF_PROJECTBROKER_KEY = "conf_projectbroker_id";
 
-	public transient static final String CONF_NODE_SHORT_TITLE_KEY = "conf_node_short_title";
+	public static final transient String CONF_NODE_SHORT_TITLE_KEY = "conf_node_short_title";
 
 	// MUST BE NON TRANSIENT
 	private Condition conditionDrop, conditionScoring, conditionReturnbox;
@@ -582,7 +582,9 @@ public class ProjectBrokerCourseNode extends AbstractAccessableCourseNode {
 						Base64.encodeBase64String(project.getAttachmentFileName().getBytes()));
 				try {
 					attachmentFolder.mkdirs();
-					attachment.createNewFile();
+					if(!attachment.createNewFile()) {
+						log.error("Cannot create attachment file: {}", attachment);
+					}
 					FileOutputStream attachmentOutputStream = new FileOutputStream(attachment);
 					InputStream leafInputStream = itemLeaf.getInputStream();
 					FileUtils.copy(leafInputStream, attachmentOutputStream);
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java b/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java
index c50c21665c3d46653bcbc6e6bee42975d8c16a1b..f8073df4e78c1af29bbe6eb1281c9d0a6041208d 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/EditSolutionController.java
@@ -156,7 +156,7 @@ public class EditSolutionController extends FormBasicController {
 			if(replaceFile && StringHelper.containsNonWhitespace(solution.getFilename())) {
 				File currentFile = new File(solutionDir, solution.getFilename());
 				if(currentFile.exists()) {
-					currentFile.delete();
+					FileUtils.deleteFile(currentFile);
 				}
 			}
 
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java b/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java
index ec6e83ac11d374b56e1766c592922fa8a3d03749..ecce7f80c938596cffcdf564b41a7a0e982efe91 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/EditTaskController.java
@@ -179,7 +179,7 @@ public class EditTaskController extends FormBasicController {
 				if(usage == 1) {
 					File currentFile = new File(taskContainer, task.getFilename());
 					if(currentFile.exists()) {
-						currentFile.delete();
+						FileUtils.deleteFile(currentFile);
 					}
 				}
 			}
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
index 1b10c63bd6a62fd3cbe5d08f331698375e9a61a1..e592d98c3b66454cdb216e4f5f6c3de910f36171 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/SubmitDocumentsController.java
@@ -59,6 +59,7 @@ import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
 import org.olat.core.gui.control.winmgr.CommandFactory;
 import org.olat.core.util.CodeHelper;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.io.SystemFileFilter;
 import org.olat.core.util.vfs.VFSConstants;
 import org.olat.core.util.vfs.VFSContainer;
@@ -398,9 +399,7 @@ class SubmitDocumentsController extends FormBasicController {
 
 	private void doDelete(UserRequest ureq, SubmittedSolution solution) {
 		File document = solution.getFile();
-		if(document.exists()) {
-			document.delete();
-		}
+		FileUtils.deleteFile(document);
 		updateModel(ureq);
 		updateWarnings();
 	}
@@ -433,9 +432,7 @@ class SubmitDocumentsController extends FormBasicController {
 	
 	private void doReplace(UserRequest ureq, SubmittedSolution solution, File file, String filename) {
 		File document = solution.getFile();
-		if(document.exists()) {
-			document.delete();
-		}
+		FileUtils.deleteFile(document);
 		doUpload(ureq, file, filename);
 	}
 	
diff --git a/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java b/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java
index d8df87492694d6db87b2834a68fb1611c181e95d..e4a7254b2a55dc28eeb8d2d4308b73ac4aa6a0d6 100644
--- a/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java
+++ b/src/main/java/org/olat/gui/demo/guidemo/GuiDemoFlexiForm.java
@@ -38,6 +38,7 @@ import org.olat.core.gui.components.form.flexible.impl.elements.FormSubmit;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.WebappHelper;
 
 /**
@@ -78,9 +79,9 @@ public class GuiDemoFlexiForm extends FormBasicController {
 
 	@Override
 	protected void doDispose() {
-		// cleanup tempt files
-		if (tmpFile != null && tmpFile.exists()) {
-			tmpFile.delete();
+		// cleanup temp files
+		if (tmpFile != null) {
+			FileUtils.deleteFile(tmpFile);
 		}
 	}
 
@@ -99,7 +100,7 @@ public class GuiDemoFlexiForm extends FormBasicController {
 		personData.setReadOnly(true);
 
 		// get file and store it in temporary location
-		tmpFile = new File(WebappHelper.getTmpDir() + "/" + fileElement.getUploadFileName());
+		tmpFile = new File(WebappHelper.getTmpDir(), fileElement.getUploadFileName());
 		fileElement.moveUploadFileTo(tmpFile);
 		personData.setFile(tmpFile);
 		
diff --git a/src/main/java/org/olat/ims/cp/CPManagerImpl.java b/src/main/java/org/olat/ims/cp/CPManagerImpl.java
index cd18fa46f46e081ddf5fafa35c08b3741de13704..d96798c8ccf96a905f9969837931d0293e6de1c8 100644
--- a/src/main/java/org/olat/ims/cp/CPManagerImpl.java
+++ b/src/main/java/org/olat/ims/cp/CPManagerImpl.java
@@ -114,9 +114,7 @@ public class CPManagerImpl implements CPManager {
 		File reFolder = frm.getFileResourceRoot(ores);
 		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
 		if(config == null) {
-			if(configXml.exists()) {
-				configXml.delete();
-			}
+			FileUtils.deleteFile(configXml);
 		} else {
 			try(OutputStream out = new FileOutputStream(configXml)) {
 				configXstream.toXML(config, out);
diff --git a/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java b/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java
index 1898f50112477b5f08c66aa71057fc2874ffe9a8..2092c7a06fa948b6fe0065d6ac745f8966c98c29 100644
--- a/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java
+++ b/src/main/java/org/olat/ims/qti/editor/QTIEditorPackageImpl.java
@@ -185,6 +185,7 @@ public class QTIEditorPackageImpl implements QTIEditorPackage {
 	 * Return the media base URL for delivering media of this package.
 	 * @return Complete media base URL.
 	 */
+	@Override
 	public String getMediaBaseURL() {
 		return WebappHelper.getServletContextPath() + "/secstatic/qtieditor/" + packageSubDir;
 	}
@@ -204,8 +205,7 @@ public class QTIEditorPackageImpl implements QTIEditorPackage {
 			localDir.setLocalSecurityCallback(secCallback);
 		}
 		String dirName = translator.translate("qti.basedir.displayname");
-		NamedContainerImpl namedBaseDir = new NamedContainerImpl(dirName, localDir);
-		return namedBaseDir;
+		return new NamedContainerImpl(dirName, localDir);
 	}
 	
 	/**
@@ -266,14 +266,16 @@ public class QTIEditorPackageImpl implements QTIEditorPackage {
 		// move file from temp to repository root and rename
 		File fRepositoryZip = frm.getFileResource(fileResource);
 		if (!FileUtils.moveFileToDir(tmpZipFile, frm.getFileResourceRoot(fileResource))) {
-			tmpZipFile.delete();
+			FileUtils.deleteFile(tmpZipFile);
 			return false;
 		}
-		fRepositoryZip.delete();
-		new File(frm.getFileResourceRoot(fileResource), tmpZipFile.getName()).renameTo(fRepositoryZip);
+		FileUtils.deleteFile(fRepositoryZip);
+		if(!new File(frm.getFileResourceRoot(fileResource), tmpZipFile.getName()).renameTo(fRepositoryZip)) {
+			log.error("Cannot rename: {}", fRepositoryZip);
+		}
 		// delete old unzip content. If the repository entry gets called in the meantime,
 		// the package will get unzipped again.
-		tmpZipFile.delete();
+		FileUtils.deleteFile(tmpZipFile);
 		frm.deleteUnzipContent(fileResource);
 		// to be prepared for the next start, unzip right now.
 		return (frm.unzipFileResource(fileResource) != null);
diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
index 3a98891a7a997c4ba6552ea7929dd8ecb8c6c977..1631bb85cea4056af13f17a05a92ee9532dc48f0 100644
--- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
+++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
@@ -316,9 +316,7 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia
 		File reFolder = frm.getFileResourceRoot(testEntry.getOlatResource());
 		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
 		if(options == null) {
-			if(configXml.exists()) {
-				configXml.delete();
-			}
+			FileUtils.deleteFile(configXml);
 		} else {
 			try (OutputStream out = new FileOutputStream(configXml)) {
 				configXstream.toXML(options, out);
@@ -1156,11 +1154,9 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia
         final File resultFile = getAssessmentResultFile(candidateSession);
 
 		testSessionDao.deleteTestSession(candidateSession);
-		if(sessionState != null && sessionState.exists()) {
-			sessionState.delete();
-		}
-		if(resultFile != null && resultFile.exists()) {
-			resultFile.delete();
+		FileUtils.deleteFile(sessionState);
+		if(resultFile != null) {
+			FileUtils.deleteFile(resultFile);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java b/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java
index 3b2fb1722474dd884c435ec38fab35c04837a2fe..7e837f6d0fdb20c67b32deba6bf1cf56e43220b3 100644
--- a/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java
+++ b/src/main/java/org/olat/ims/qti21/repository/handlers/CopyAndConvertVisitor.java
@@ -45,6 +45,7 @@ import javax.xml.stream.XMLStreamWriter;
 import org.apache.logging.log4j.Logger;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.WebappHelper;
 import org.olat.core.util.xml.XMLFactories;
 import org.olat.fileresource.types.ImsQTI21Resource;
@@ -149,13 +150,10 @@ class CopyAndConvertVisitor extends SimpleFileVisitor<Path> {
 				fileInfos.setVersion(infos.getVersion());
 			}
 			if(onyx38Family(fileInfos)) {
-				validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), xtw -> {
-					return new Onyx38ToQtiWorksHandler(xtw);
-				});
+				validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), Onyx38ToQtiWorksHandler::new);
 			} else if(onyxWebFamily(fileInfos)) {
-				validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), xtw -> {
-					return new OnyxToQtiWorksHandler(xtw, infos);
-				});
+				validated = convertXmlFile(inputFile, outputFile, fileInfos.getType(), xtw ->
+					 new OnyxToQtiWorksHandler(xtw, infos));
 				
 				if(validated && fileInfos.getType() == InputType.assessmentItem) {
 					//check templateVariables
@@ -218,9 +216,7 @@ class CopyAndConvertVisitor extends SimpleFileVisitor<Path> {
 			log.error("", e1);
 			return false;
 		} finally {
-			if(tmpFile.exists()) {
-				tmpFile.delete();
-			}
+			FileUtils.deleteFile(tmpFile);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/modules/co/ContactForm.java b/src/main/java/org/olat/modules/co/ContactForm.java
index 464d5bbfaaa284f15b95de77833bd9e859623249..1f8b17fa8834652c36c22102ba1792162bf08ae6 100644
--- a/src/main/java/org/olat/modules/co/ContactForm.java
+++ b/src/main/java/org/olat/modules/co/ContactForm.java
@@ -419,7 +419,7 @@ public class ContactForm extends FormBasicController {
 			File uploadedFile = (File)source.getUserObject();
 			if(uploadedFile != null && uploadedFile.exists()) {
 				attachmentSize -= uploadedFile.length();
-				uploadedFile.delete();
+				FileUtils.deleteFile(uploadedFile);
 			}
 			attachmentLinks.remove(source);
 			uploadCont.remove(source);
diff --git a/src/main/java/org/olat/modules/fo/ui/MessageEditController.java b/src/main/java/org/olat/modules/fo/ui/MessageEditController.java
index c6e8abfe19ef777b8eb3997af1b2b706f753fb09..ab119a4ea6ddf19e969f26283f24be8d5b44a8a5 100644
--- a/src/main/java/org/olat/modules/fo/ui/MessageEditController.java
+++ b/src/main/java/org/olat/modules/fo/ui/MessageEditController.java
@@ -60,6 +60,7 @@ import org.olat.core.id.Identity;
 import org.olat.core.logging.DBRuntimeException;
 import org.olat.core.logging.activity.ThreadLocalUserActivityLogger;
 import org.olat.core.util.CodeHelper;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.Util;
 import org.olat.core.util.WebappHelper;
@@ -630,7 +631,7 @@ public class MessageEditController extends FormBasicController {
 
 					if (fileExists) {
 						fileUpload.setErrorKey("attachments.error.file.exists", null);
-						fileUpload.getUploadFile().delete();
+						FileUtils.deleteFile(fileUpload.getUploadFile());
 						fileUpload.showError(true);
 					} else {
 						// files got stored in an extra tempFolder, to use the same
@@ -644,7 +645,7 @@ public class MessageEditController extends FormBasicController {
 					}
 				} else {
 					fileUpload.setErrorKey("attachments.too.big", new String[] { Long.toString((fileUpload.getMaxUploadSizeKB() / 1024)) });
-					fileUpload.getUploadFile().delete();
+					FileUtils.deleteFile(fileUpload.getUploadFile());
 					fileUpload.showError(true);
 				}
 			}
diff --git a/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java b/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java
index a0e8c97f2ea362bd7f8134bc914fc2973ae5c43e..223ba838c5e63cd31b623c16de60df3242b1e824 100644
--- a/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java
+++ b/src/main/java/org/olat/modules/library/manager/LibraryManagerImpl.java
@@ -42,6 +42,7 @@ import org.olat.core.gui.control.Event;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.event.GenericEventListener;
@@ -302,23 +303,23 @@ public class LibraryManagerImpl implements LibraryManager, InitializingBean, Gen
 	public void lockFolderAndPreventDoubleIndexing() {
 		File lockFile = new File(getSharedFolder().getBasefile(), NO_FOLDER_INDEXING_LOCKFILE);
 		try {
-			lockFile.createNewFile();
+			if(!lockFile.createNewFile()) {
+				log.error("Cannot create lock file: {}", lockFile);
+			}
 		} catch (IOException e) {
 			log.error("could not create lock-file in shared folder for library.", e);
 		}
 	}
 
 	/**
-	 * Remove old lockfile before changing linked resource folder
+	 * Remove old lock file before changing linked resource folder
 	 */
 	@Override
 	public void removeExistingLockFile(){
 		LocalFolderImpl folder = getSharedFolder();
 		if(folder != null && folder.exists()) {
 			File lockFile = new File(folder.getBasefile(), NO_FOLDER_INDEXING_LOCKFILE);
-			if (lockFile.exists()) {
-				lockFile.delete();
-			}
+			FileUtils.deleteFile(lockFile);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
index 75b00155f91e762c3906e87a650386345f2fed6c..986afdbe895fa94a1dc5a35a663c9d75329b769d 100644
--- a/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
+++ b/src/main/java/org/olat/modules/portfolio/manager/PortfolioServiceImpl.java
@@ -349,9 +349,7 @@ public class PortfolioServiceImpl implements PortfolioService {
 		File reFolder = frm.getFileResourceRoot(resource);
 		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
 		if(options == null) {
-			if(configXml.exists()) {
-				configXml.delete();
-			}
+			FileUtils.deleteFile(configXml);
 		} else {
 			try (OutputStream out = new FileOutputStream(configXml)) {
 				configXstream.toXML(options, out);
@@ -1090,9 +1088,7 @@ public class PortfolioServiceImpl implements PortfolioService {
 		if(StringHelper.containsNonWhitespace(imagePath)) {
 			File bcroot = portfolioFileStorage.getRootDirectory();
 			File file = new File(bcroot, imagePath);
-			if(file.exists()) {
-				file.delete();
-			}
+			FileUtils.deleteFile(file);
 		}
 	}
 
diff --git a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java
index b0980b007849dd8de0e0e1fde585fec1a550f7f0..bf02738105c29e18b5104ef7d5316431bfe2da80 100644
--- a/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java
+++ b/src/main/java/org/olat/modules/portfolio/ui/AssignmentEditController.java
@@ -549,7 +549,7 @@ public class AssignmentEditController extends FormBasicController {
 
 		if (fileExists) {
 			documentUploadEl.setErrorKey("attachments.error.file.exists", null);
-			documentUploadEl.getUploadFile().delete();
+			FileUtils.deleteFile(documentUploadEl.getUploadFile());
 			documentUploadEl.showError(true);
 		} else {
 			// files got stored in an extra tempFolder, to use the same
diff --git a/src/main/java/org/olat/modules/quality/manager/QualityMailing.java b/src/main/java/org/olat/modules/quality/manager/QualityMailing.java
index c5a1145b415eb123e3d09032a151bd6496878c47..524599010983b82e43b87b61573c5900639d452c 100644
--- a/src/main/java/org/olat/modules/quality/manager/QualityMailing.java
+++ b/src/main/java/org/olat/modules/quality/manager/QualityMailing.java
@@ -471,7 +471,7 @@ class QualityMailing {
 			if (reportPdf.length() > 0) {
 				return reportPdf;
 			}
-			reportPdf.delete();
+			FileUtils.deleteFile(reportPdf);
 		}
 		return null;
 	}
diff --git a/src/main/java/org/olat/modules/scorm/ScormMainManager.java b/src/main/java/org/olat/modules/scorm/ScormMainManager.java
index a857220ebffd195b7a10d3ffdc78b02ff07f80ba..28fd8973994544325f7d1de4883cf0ea8aa4ff53 100644
--- a/src/main/java/org/olat/modules/scorm/ScormMainManager.java
+++ b/src/main/java/org/olat/modules/scorm/ScormMainManager.java
@@ -35,6 +35,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.generic.iframe.DeliveryOptions;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.xml.XStreamHelper;
 import org.olat.fileresource.FileResourceManager;
 import org.springframework.stereotype.Service;
@@ -87,9 +88,7 @@ public class ScormMainManager {
 		File reFolder = frm.getFileResourceRoot(ores);
 		File configXml = new File(reFolder, PACKAGE_CONFIG_FILE_NAME);
 		if(config == null) {
-			if(configXml.exists()) {
-				configXml.delete();
-			}
+			FileUtils.deleteFile(configXml);
 		} else {
 			try(OutputStream out = new FileOutputStream(configXml)) {
 				configXstream.toXML(config, out);
diff --git a/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java b/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java
index 40d4a08a877b45ca9a3aaa8c476fb456d8d2ab70..606b55de625bb9a3286cc15bc609a5c4121a0f15 100644
--- a/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java
+++ b/src/main/java/org/olat/modules/scorm/archiver/ScormExportManager.java
@@ -135,7 +135,7 @@ public class ScormExportManager {
 					document.loadDocument(((LocalFileImpl)file).getBasefile());
 				}
 				else {
-					logger.warn("Cannot use this type of VSFItem to load a SCO Datamodel: " + file.getClass().getName());
+					logger.warn("Cannot use this type of VSFItem to load a SCO Datamodel: {}", file.getClass().getName());
 					continue;
 				}
 
diff --git a/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java b/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java
index 9f04ea61c9c0c9903806e8e69c12e87d5d855bf3..82f6902cb8405407339283482d961d86a4bc4474 100644
--- a/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java
+++ b/src/main/java/org/olat/modules/scorm/server/servermodels/ScoDocument.java
@@ -71,7 +71,7 @@ public class ScoDocument extends XMLDocument {
 	 * split intot part_a and part_b so we can insert 'n' number of <objective>
 	 * nodes if the sco creates them during a session
 	 */
-	public static String[] _cmivalues_a = { "cmi.core.student_id", "cmi.core.student_name", "cmi.core.lesson_location", "cmi.core.credit",
+	private static String[] _cmivalues_a = { "cmi.core.student_id", "cmi.core.student_name", "cmi.core.lesson_location", "cmi.core.credit",
 			"cmi.core.lesson_status", "cmi.core.entry", "cmi.core.score.raw", "cmi.core.score.max", "cmi.core.score.min", "cmi.core.total_time",
 			"cmi.core.lesson_mode", "cmi.core.exit", "cmi.core.session_time", "cmi.suspend_data", "cmi.launch_data", "cmi.comments",
 			"cmi.comments_from_lms", };
@@ -79,7 +79,7 @@ public class ScoDocument extends XMLDocument {
 	/**
 	 * <objective> nodes go between part_a and part_b
 	 */
-	public static String[] _cmivalues_b = { "cmi.student_data.mastery_score", "cmi.student_data.max_time_allowed",
+	private static String[] _cmivalues_b = { "cmi.student_data.mastery_score", "cmi.student_data.max_time_allowed",
 			"cmi.student_data.time_limit_action", "cmi.student_preference.audio", "cmi.student_preference.language",
 			"cmi.student_preference.speed", "cmi.student_preference.text", };
 
diff --git a/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java b/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java
index a380709153249a2e47b952267385a21ac33e82e2..107d1c1e2fa23930e5e08b5559698f3639b9b164 100644
--- a/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java
+++ b/src/main/java/org/olat/modules/video/ui/VideoPosterUploadForm.java
@@ -32,6 +32,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormLayoutContainer;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.Quota;
 import org.olat.core.util.vfs.VFSContainer;
@@ -47,7 +48,6 @@ import org.olat.resource.OLATResource;
 public class VideoPosterUploadForm extends FormBasicController {
 	private OLATResource videoResource;
 	private long remainingSpace;
-	private VFSContainer videoResourceFileroot;
 	private VFSContainer metaDataFolder;
 	private FileElement posterField;
 
@@ -69,7 +69,7 @@ public class VideoPosterUploadForm extends FormBasicController {
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		remainingSpace = Quota.UNLIMITED;
-		videoResourceFileroot = new LocalFolderImpl(FileResourceManager.getInstance().getFileResourceRootImpl(videoResource).getBasefile());
+		VFSContainer videoResourceFileroot = new LocalFolderImpl(FileResourceManager.getInstance().getFileResourceRootImpl(videoResource).getBasefile());
 		metaDataFolder = VFSManager.getOrCreateContainer(videoResourceFileroot, "media");
 
 		posterField = uifactory.addFileElement(getWindowControl(), "poster", "video.config.poster", formLayout);
@@ -92,8 +92,7 @@ public class VideoPosterUploadForm extends FormBasicController {
 			if (remainingSpace != -1) {
 				if (posterField.getUploadFile().length() / 1024 > remainingSpace) {
 					posterField.setErrorKey("QuotaExceeded", null);
-					posterField.getUploadFile().delete();
-					return;
+					FileUtils.deleteFile(posterField.getUploadFile());
 				}
 			} else {
 				fireEvent(ureq, new FolderEvent(FolderEvent.UPLOAD_EVENT, posterField.moveUploadFileTo(metaDataFolder)));
diff --git a/src/main/java/org/olat/repository/ui/author/SendMailController.java b/src/main/java/org/olat/repository/ui/author/SendMailController.java
index 13828cf30f8cafc920e0f1e7730c60d54655bec8..376ff3d078ebda9e5d1f7a537d8d8337eabdd61d 100644
--- a/src/main/java/org/olat/repository/ui/author/SendMailController.java
+++ b/src/main/java/org/olat/repository/ui/author/SendMailController.java
@@ -78,7 +78,8 @@ public class SendMailController extends FormBasicController {
 	private RichTextElement bodyEl;
 	private FileElement attachmentEl;
 	private TextElement subjectEl;
-	private MultipleSelectionElement contactEl, copyFromEl;
+	private MultipleSelectionElement contactEl;
+	private MultipleSelectionElement copyFromEl;
 	private FormLayoutContainer uploadCont;
 	
 	private int counter = 0;
@@ -155,7 +156,7 @@ public class SendMailController extends FormBasicController {
 	
 	@Override
 	protected boolean validateFormLogic(UserRequest ureq) {
-		boolean allOk = true;
+		boolean allOk = super.validateFormLogic(ureq);
 		
 		subjectEl.clearError();
 		if(!StringHelper.containsNonWhitespace(subjectEl.getValue())) {
@@ -175,7 +176,7 @@ public class SendMailController extends FormBasicController {
 			allOk &= false;
 		}
 		
-		return allOk & super.validateFormLogic(ureq);
+		return allOk;
 	}
 	
 	private File[] getAttachments() {
@@ -190,7 +191,8 @@ public class SendMailController extends FormBasicController {
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(source == attachmentEl) {
 			doUploadAttachement();
-		} if(source instanceof FormLink) {
+		}
+		if(source instanceof FormLink) {
 			FormLink link = (FormLink)source;
 			String cmd = link.getCmd();
 			if("delete".equals(cmd)) {
@@ -203,9 +205,9 @@ public class SendMailController extends FormBasicController {
 	
 	private void doDeleteAttachment(Attachment attachment) {
 		attachmentSize -= attachment.getFile().length();
-		attachment.getFile().delete();
+		FileUtils.deleteFile(attachment.getFile());
 		attachments.remove(attachment);
-		uploadCont.setVisible(attachments.size() > 0);
+		uploadCont.setVisible(!attachments.isEmpty());
 		uploadCont.setDirty(true);
 	}
 	
diff --git a/src/main/java/org/olat/restapi/support/MultipartReader.java b/src/main/java/org/olat/restapi/support/MultipartReader.java
index 57e7eb2f10df7ff323a73a356234e63ed520afb6..0aaccafa4ecb3b00b1969401c4d450f85c39c77d 100644
--- a/src/main/java/org/olat/restapi/support/MultipartReader.java
+++ b/src/main/java/org/olat/restapi/support/MultipartReader.java
@@ -21,6 +21,7 @@ package org.olat.restapi.support;
 
 import java.io.File;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.UUID;
@@ -131,7 +132,11 @@ public class MultipartReader {
 
 	public void close() {
 		if (file != null) {
-			file.delete();
+			try {
+				Files.deleteIfExists(file.toPath());
+			} catch (IOException e) {
+				log.error("", e);
+			}
 		}
 		fields.clear();
 	}
diff --git a/src/main/java/org/olat/restapi/system/StatusWebservice.java b/src/main/java/org/olat/restapi/system/StatusWebservice.java
index 1b393508bd45a1b566f230569e6210f4110830f3..235e66831f7e37664039e460e5d8548db4a0a086 100644
--- a/src/main/java/org/olat/restapi/system/StatusWebservice.java
+++ b/src/main/java/org/olat/restapi/system/StatusWebservice.java
@@ -22,6 +22,7 @@ package org.olat.restapi.system;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.nio.file.Files;
 import java.util.List;
 import java.util.Set;
 
@@ -94,7 +95,7 @@ public class StatusWebservice {
 			WorkThreadInformations.unset();
 			stats.setWriteFileInMilliseconds(CodeHelper.nanoToMilliTime(startFile));
 			stats.setWriteFile(infoFile.exists());
-			infoFile.delete();
+			Files.deleteIfExists(infoFile.toPath());
 		} catch (Exception e) {
 			stats.setWriteFile(false);
 			stats.setWriteFileInMilliseconds(-1l);
@@ -107,12 +108,12 @@ public class StatusWebservice {
 			
 			PropertyManager propertyManager = CoreSpringFactory.getImpl(PropertyManager.class);
 			List<Property> props = propertyManager.findProperties((Identity)null, (BusinessGroup)null, PING_RESOURCE, PING_REF, PING_REF);
-			if(props != null && props.size() > 0) {
+			if(props != null && !props.isEmpty()) {
 				for(Property prop:props) {
 					propertyManager.deleteProperty(prop);
 				}
-				DBFactory.getInstance().commit();
 			}
+			DBFactory.getInstance().commit();
 			
 			long startDB = System.nanoTime();
 			Property prop = propertyManager.createPropertyInstance(null, null, PING_RESOURCE, PING_REF, PING_REF, 0f, 0l, "-", "-");
diff --git a/src/main/java/org/olat/search/service/document/file/PdfDocument.java b/src/main/java/org/olat/search/service/document/file/PdfDocument.java
index 4fb1c9de4cbf90daa4d0990476f245f8fbb7f4b8..f0494b3dcef282b03865357dd58e49d935371b34 100644
--- a/src/main/java/org/olat/search/service/document/file/PdfDocument.java
+++ b/src/main/java/org/olat/search/service/document/file/PdfDocument.java
@@ -35,6 +35,7 @@ import org.apache.lucene.document.Document;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.util.CSSHelper;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.io.LimitedContentWriter;
 import org.olat.core.util.vfs.VFSLeaf;
 import org.olat.search.service.SearchResourceContext;
@@ -89,7 +90,7 @@ public class PdfDocument extends FileDocument {
 		String hashCodeAsString = Integer.toString(hashCode);
 		String splitDirName = hashCodeAsString.substring(hashCodeAsString.length()-2);
 		String pdfTextTmpFilePath = splitDirName + File.separator + hashCodeAsString + leafResourceContext.getFilePath();
-		if (log.isDebugEnabled()) log.debug("PdfTextTmpFilePath=" + pdfTextTmpFilePath);
+		if (log.isDebugEnabled()) log.debug("PdfTextTmpFilePath={}", pdfTextTmpFilePath);
 		return pdfTextTmpFilePath;
 	}
 
@@ -144,6 +145,7 @@ public class PdfDocument extends FileDocument {
 	
 			return new FileContent(title, sb.toString());
 		} catch(IOException e) {
+			log.error("", e);
 			throw e;
 		}
 	}
@@ -161,7 +163,7 @@ public class PdfDocument extends FileDocument {
 		}	
 		if (leaf.getLastModified() > pdfTextFile.lastModified() ) {
 			// pdf file is newer => delete it
-			pdfTextFile.delete();
+			FileUtils.deleteFile(pdfTextFile);
 			return true;
 		}
 		return false;
diff --git a/src/main/java/org/olat/user/DisplayPortraitManager.java b/src/main/java/org/olat/user/DisplayPortraitManager.java
index d5c57fffcaf97857c3efc0dc0e16f80c564257db..515eec43da98aa1276ae9789aa0791e3b89f3cf1 100644
--- a/src/main/java/org/olat/user/DisplayPortraitManager.java
+++ b/src/main/java/org/olat/user/DisplayPortraitManager.java
@@ -287,9 +287,9 @@ public class DisplayPortraitManager implements UserDataDeletable, UserDataExport
 		if(directory != null) {
 			for(File currentImage:directory.listFiles()) {
 				if(currentImage.equals(file)) {
-					continue;
+					// do nothing
 				} else if(currentImage.getName().startsWith(prefix)) {
-					currentImage.delete();
+					FileUtils.deleteFile(currentImage);
 				}
 			}
 		}
@@ -339,7 +339,7 @@ public class DisplayPortraitManager implements UserDataDeletable, UserDataExport
 			for(File file:directory.listFiles()) {
 				String filename = file.getName();
 				if(filename.startsWith(prefix)) {
-					file.delete();
+					FileUtils.deleteFile(file);
 				}
 			}
 		}
diff --git a/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java b/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java
index bd29705193217db9ba8a86f7d698f698e0a67542..189d3a60813f03891bb4e9046ffb064c7d905490 100644
--- a/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java
+++ b/src/main/java/org/olat/user/manager/HomePageConfigManagerImpl.java
@@ -31,6 +31,7 @@ import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.id.Identity;
 import org.apache.logging.log4j.Logger;
 import org.olat.core.logging.Tracing;
+import org.olat.core.util.FileUtils;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSManager;
 import org.olat.core.util.xml.XStreamHelper;
@@ -86,7 +87,7 @@ public class HomePageConfigManagerImpl implements HomePageConfigManager {
 			} catch (Exception e) {
 				log.error("Error while loading homepage config from path::" + configFile.getAbsolutePath() + ", fallback to default configuration",
 						e);
-				if (configFile.exists()) configFile.delete();
+				FileUtils.deleteFile(configFile);
 				retVal = loadAndSaveDefaults(identity);
 				// show message to user
 			}