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 27f7e4f18b9d5494c8e64b56304de0b121749d22..6c2ad14c641776e1bb34a89fc7ba299d53b74bfd 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
@@ -350,6 +350,8 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
 
 	@Override
 	public void deleteMetadata(VFSMetadata data) {
+		if(data == null) return; // nothing to do
+		
 		List<VFSThumbnailMetadata> thumbnails = thumbnailDao.loadByMetadata(data);
 		for(VFSThumbnailMetadata thumbnail:thumbnails) {
 			VFSItem item = VFSManager.olatRootLeaf("/" + data.getRelativePath(), thumbnail.getFilename());
@@ -392,11 +394,13 @@ public class VFSRepositoryServiceImpl implements VFSRepositoryService, GenericEv
 		if(item.canMeta() != VFSConstants.YES) return;
 		
 		VFSMetadataImpl metadata = (VFSMetadataImpl)getMetadataFor(item);
-		metadata.setDeleted(true);
-		if(item instanceof VFSLeaf && item.canVersion() == VFSConstants.YES) {
-			addToRevisions((VFSLeaf)item, metadata, author, "", true);
+		if(metadata != null) { // concurrent delete possible
+			metadata.setDeleted(true);
+			if(item instanceof VFSLeaf && item.canVersion() == VFSConstants.YES) {
+				addToRevisions((VFSLeaf)item, metadata, author, "", true);
+			}
+			metadataDao.updateMetadata(metadata);
 		}
-		metadataDao.updateMetadata(metadata);
 	}
 
 	@Override
diff --git a/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java b/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java
index 8ac186f96499df318c9419becad751b067b9b749..6f821f2b2b09d7256bde3961ff8aa06c9d6b2da8 100644
--- a/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java
+++ b/src/test/java/org/olat/user/UserNameAndPasswordSyntaxCheckerWithRegexpTest.java
@@ -63,10 +63,34 @@ public class UserNameAndPasswordSyntaxCheckerWithRegexpTest {
 
 		Assert.assertTrue(checker.syntaxCheckOlatPassword("Kanu#010"));
 		Assert.assertTrue(checker.syntaxCheckOlatPassword("?Ryomou#010"));
+		Assert.assertTrue(checker.syntaxCheckOlatPassword("?Ryo ou#010"));
 		
 		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuunc1"));
 		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu#10"));//less than 8 characters
 		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuunch"));//no number
 		Assert.assertFalse(checker.syntaxCheckOlatPassword("kanu8#10"));
 	}
+	
+	/**
+	 * Min. 12 characters, at least one uppercase, one lowercase, one number and only
+	 * alphanumeric characters allowed (no space, no underscore, no Umlaut)
+	 */
+	@Test
+	public void customPasswordCheck_upperLowerCase_number_noUmlaut() {
+		UserNameAndPasswordSyntaxCheckerWithRegexp checker = new UserNameAndPasswordSyntaxCheckerWithRegexp();
+		checker.setPasswordRegExp("(?=^.{12,}$)(?=^[a-zA-Z0-9]+$)(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z]).*$");
+
+		Assert.assertTrue(checker.syntaxCheckOlatPassword("Kanu1asdfghj"));
+		Assert.assertTrue(checker.syntaxCheckOlatPassword("KASD123DFGHJj"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanuhasdfghj"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("kanu1asdfghj"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("kanugasdfghj"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu1as fghj"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kanu1as_fghj"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("kanugasdfgh"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("JAHDFKL1DFSGJHG"));
+		Assert.assertFalse(checker.syntaxCheckOlatPassword("Kan\u00E41asdfghj"));
+	}
+
+	
 }