diff --git a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java
index 35db3d19f86cba77e3d3c64a497465905e07f4e3..914a265c67a5c47b130a6f1d1888fbee7e66b81a 100644
--- a/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java
+++ b/src/main/java/org/olat/course/nodes/members/MembersCourseNodeRunController.java
@@ -209,7 +209,7 @@ public class MembersCourseNodeRunController extends FormBasicController {
 		User user = identity.getUser();
 		String firstname = user.getProperty(UserConstants.FIRSTNAME, null);
 		String lastname = user.getProperty(UserConstants.LASTNAME, null);
-		MediaResource rsrc = portraitManager.getPortrait(identity, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
+		MediaResource rsrc = portraitManager.getSmallPortraitResource(identity);
 		
 		String portraitCssClass = null;
 		String gender = identity.getUser().getProperty(UserConstants.GENDER, Locale.ENGLISH);
@@ -330,7 +330,7 @@ public class MembersCourseNodeRunController extends FormBasicController {
 					for(FormLink memberLink:memberLinks) {
 						Member m = (Member)memberLink.getUserObject();
 						if(m.getIdentity().getKey().equals(key)) {
-							return portraitManager.getPortrait(m.getIdentity(), DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
+							return portraitManager.getSmallPortraitResource(m.getIdentity());
 						}
 					}
 				}
diff --git a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
index 72c400162fbda434abe3be934e73c52cfc699bd5..c6dee5ef7bd34f25ac745bb94d907442206c4aa4 100644
--- a/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
+++ b/src/main/java/org/olat/modules/vitero/manager/ViteroManager.java
@@ -497,9 +497,8 @@ public class ViteroManager extends BasicManager implements UserDataDeletable {
 	protected boolean storePortrait(Identity identity, int userId)
 	throws VmsNotAvailableException {
 		try {
-			File portraitDir = DisplayPortraitManager.getInstance().getPortraitDir(identity);
-			File portrait = new File(portraitDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
-			if(portrait.exists()) {
+			File portrait = DisplayPortraitManager.getInstance().getBigPortrait(identity);
+			if(portrait != null && portrait.exists()) {
 				MtomServiceStub mtomWs = getMtomWebService();
 				
 				MtomServiceStub.StoreAvatarRequest request = new MtomServiceStub.StoreAvatarRequest();
diff --git a/src/main/java/org/olat/user/DisplayPortraitController.java b/src/main/java/org/olat/user/DisplayPortraitController.java
index 0fedf2e65b0a2ff6e03566c2a425f0bc510d3ad6..626b5065b4d5a14a1674ead7e9f3057fbb6fbb7b 100644
--- a/src/main/java/org/olat/user/DisplayPortraitController.java
+++ b/src/main/java/org/olat/user/DisplayPortraitController.java
@@ -114,7 +114,7 @@ public class DisplayPortraitController extends BasicController {
 			}
 			
 			if (useLarge){
-				portrait = DisplayPortraitManager.getInstance().getPortrait(portraitIdent, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
+				portrait = DisplayPortraitManager.getInstance().getBigPortraitResource(portraitIdent);
 				if (gender.equals("-")) {
 					myContent.contextPut("portraitCssClass", DisplayPortraitManager.DUMMY_BIG_CSS_CLASS);
 				} else if (gender.equals("male")) {
@@ -123,7 +123,7 @@ public class DisplayPortraitController extends BasicController {
 					myContent.contextPut("portraitCssClass", DisplayPortraitManager.DUMMY_FEMALE_BIG_CSS_CLASS);
 				}
 			} else {
-				portrait = DisplayPortraitManager.getInstance().getPortrait(portraitIdent, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
+				portrait = DisplayPortraitManager.getInstance().getSmallPortraitResource(portraitIdent);
 				if (gender.equals("-")) {
 					myContent.contextPut("portraitCssClass", DisplayPortraitManager.DUMMY_SMALL_CSS_CLASS);
 				} else if (gender.equals("male")) {
diff --git a/src/main/java/org/olat/user/DisplayPortraitManager.java b/src/main/java/org/olat/user/DisplayPortraitManager.java
index 2667813b81b17288fd8bf14ff94d612a4932fd30..4c6dc39f192810a7e7ac5eb50ffde1c47a7ea1d3 100644
--- a/src/main/java/org/olat/user/DisplayPortraitManager.java
+++ b/src/main/java/org/olat/user/DisplayPortraitManager.java
@@ -28,13 +28,16 @@ package org.olat.user;
 import java.io.File;
 
 import org.olat.admin.user.delete.service.UserDeletionManager;
+import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.gui.media.FileMediaResource;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.id.Identity;
-import org.olat.core.logging.Tracing;
 import org.olat.core.manager.BasicManager;
 import org.olat.core.util.FileUtils;
+import org.olat.core.util.ImageHelper;
+import org.olat.core.util.StringHelper;
+import org.olat.core.util.image.Size;
 
 /**
  * Description: <br>
@@ -48,8 +51,8 @@ public class DisplayPortraitManager extends BasicManager implements UserDataDele
 
 	private static DisplayPortraitManager singleton;
 	
-	public static final String PORTRAIT_BIG_FILENAME = "portrait_big.jpg";
-	public static final String PORTRAIT_SMALL_FILENAME = "portrait_small.jpg";
+	private static final String PORTRAIT_BIG_FILENAME = "portrait_big";
+	private static final String PORTRAIT_SMALL_FILENAME = "portrait_small";
 	// The following class names refer to CSS class names in olat.css 
 	public static final String DUMMY_BIG_CSS_CLASS = "o_portrait_dummy";
 	public static final String DUMMY_SMALL_CSS_CLASS = "o_portrait_dummy_small";
@@ -78,21 +81,68 @@ public class DisplayPortraitManager extends BasicManager implements UserDataDele
 	public static DisplayPortraitManager getInstance() {
 		return singleton;
 	}
+
+	public MediaResource getSmallPortraitResource(Identity identity) {
+		return getPortraitResource(identity, PORTRAIT_SMALL_FILENAME);
+	}
+	
+	public MediaResource getBigPortraitResource(Identity identity) {
+		return getPortraitResource(identity, PORTRAIT_BIG_FILENAME);
+	}
 	
 	/**
 	 * 
 	 * @param identity
 	 * @return imageResource portrait
 	 */
-	public MediaResource getPortrait(Identity identity, String portraitName){
+	private MediaResource getPortraitResource(Identity identity, String portraitName) {
 		MediaResource imageResource = null;
-		File imgFile = new File(getPortraitDir(identity), portraitName);
-		if (imgFile.exists()){
+		File imgFile = getPortraitFile(identity, portraitName);
+		if (imgFile != null && imgFile.exists()){
 			imageResource = new FileMediaResource(imgFile);	
 		}
 		return imageResource;
 	}
 	
+	public File getSmallPortrait(Identity identity) {
+		return getPortraitFile(identity, PORTRAIT_SMALL_FILENAME);
+	}
+	
+	public File getBigPortrait(Identity identity) {
+		return getPortraitFile(identity, PORTRAIT_BIG_FILENAME);
+	}
+
+	private File getPortraitFile(Identity identity, String prefix) {
+		File portraitDir = getPortraitDir(identity);
+		if(portraitDir != null) {
+			for(File file:portraitDir.listFiles()) {
+				if(file.getName().startsWith(prefix)) {
+					return file;
+				}
+			}
+		}
+		return null;
+	}
+	
+	public void setPortrait(File file, Identity identity) {
+		String extension = FileUtils.getFileSuffix(file.getName());
+		if(!StringHelper.containsNonWhitespace(extension)) {
+			extension = "png";
+		}
+		File portraitDir = getPortraitDir(identity);
+		File pBigFile = new File(portraitDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME + "." + extension);
+		File pSmallFile = new File(portraitDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME + "." + extension);
+		ImageHelper imageHelper = CoreSpringFactory.getImpl(ImageHelper.class);
+		Size size = imageHelper.scaleImage(file, pBigFile, DisplayPortraitManager.WIDTH_PORTRAIT_BIG, DisplayPortraitManager.WIDTH_PORTRAIT_BIG);
+		if(size != null){
+			size = imageHelper.scaleImage(file, pSmallFile, DisplayPortraitManager.WIDTH_PORTRAIT_SMALL, DisplayPortraitManager.WIDTH_PORTRAIT_SMALL);
+		}
+	}
+	
+	public void deletePortrait(Identity identity) {
+		FileUtils.deleteDirsAndFiles(getPortraitDir(identity), true, true);
+	}
+	
 	/**
 	 * 
 	 * @param identity
@@ -125,8 +175,7 @@ public class DisplayPortraitManager extends BasicManager implements UserDataDele
 	 * @see org.olat.user.UserDataDeletable#deleteUserData(org.olat.core.id.Identity)
 	 */
 	public void deleteUserData(Identity identity, String newDeletedUserName) {
-		FileUtils.deleteDirsAndFiles(getPortraitDir(identity), true, true);
-		Tracing.logDebug("Homepage-config file deleted for identity=" + identity, this.getClass());
+		deletePortrait(identity);
+		logDebug("Homepage-config file deleted for identity=" + identity);
 	}
-
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/user/PortraitUploadController.java b/src/main/java/org/olat/user/PortraitUploadController.java
index 7fe6fc857b74dfbc505657df1efd9be7ec33a3d3..0b077195f53cfc85e43e16b5fc55d1ebdc62b37e 100644
--- a/src/main/java/org/olat/user/PortraitUploadController.java
+++ b/src/main/java/org/olat/user/PortraitUploadController.java
@@ -28,7 +28,6 @@ import java.io.File;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.FileUploadController;
 import org.olat.core.commons.modules.bc.FolderEvent;
 import org.olat.core.gui.UserRequest;
@@ -43,8 +42,6 @@ import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.id.Identity;
 import org.olat.core.util.FileUtils;
-import org.olat.core.util.ImageHelper;
-import org.olat.core.util.image.Size;
 import org.olat.core.util.vfs.LocalFolderImpl;
 import org.olat.core.util.vfs.VFSContainer;
 
@@ -75,6 +72,7 @@ public class PortraitUploadController extends BasicController {
 	private File newFile = null;
 	private int limitKB; // max UL limit
 	
+	private final DisplayPortraitManager dps;
 		
 	/**
 	 * Display upload form to upload a file to the given currentPath.
@@ -85,7 +83,7 @@ public class PortraitUploadController extends BasicController {
 	 */
 	public PortraitUploadController(UserRequest ureq, WindowControl wControl, Identity portraitIdent, long limitKB) {
 		super(ureq, wControl);
-		DisplayPortraitManager dps = DisplayPortraitManager.getInstance();
+		dps = DisplayPortraitManager.getInstance();
 		this.portraitIdent = portraitIdent;
 		this.uploadDir = dps.getPortraitDir(portraitIdent);
 		this.limitKB = (int) limitKB;
@@ -93,7 +91,7 @@ public class PortraitUploadController extends BasicController {
 		folderContainer = createVelocityContainer("portraitupload");
 		deleteButton = LinkFactory.createButtonSmall("command.delete", this.folderContainer, this);
 		
-		MediaResource mr = dps.getPortrait(portraitIdent, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
+		MediaResource mr = dps.getSmallPortraitResource(portraitIdent);
 		if (mr != null) folderContainer.contextPut("hasPortrait", Boolean.TRUE);
 		else folderContainer.contextPut("hasPortrait", Boolean.FALSE);
 		
@@ -140,14 +138,7 @@ public class PortraitUploadController extends BasicController {
 				if (!newFile.exists()) {
 					showError("Failed");
 				} else {
-					// Scale uploaded image
-					ImageHelper imageHelper = CoreSpringFactory.getImpl(ImageHelper.class);
-					File pBigFile = new File(uploadDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
-					File pSmallFile = new File(uploadDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);				
-					Size size = imageHelper.scaleImage(newFile, pBigFile, DisplayPortraitManager.WIDTH_PORTRAIT_BIG, DisplayPortraitManager.WIDTH_PORTRAIT_BIG);
-					if(size != null){
-						imageHelper.scaleImage(newFile, pSmallFile, DisplayPortraitManager.WIDTH_PORTRAIT_SMALL, DisplayPortraitManager.WIDTH_PORTRAIT_SMALL);
-					}
+					dps.setPortrait(newFile, portraitIdent);
 					// Cleanup original file
 					newFile.delete();
 					// And finish workflow
diff --git a/src/main/java/org/olat/user/restapi/UserVOFactory.java b/src/main/java/org/olat/user/restapi/UserVOFactory.java
index 370075558af382dc5cd0d39f7f1293e8f4a20305..f15916d513226137b82dad90f86d91f5e4123ad7 100644
--- a/src/main/java/org/olat/user/restapi/UserVOFactory.java
+++ b/src/main/java/org/olat/user/restapi/UserVOFactory.java
@@ -103,9 +103,8 @@ public class UserVOFactory {
 		userVO.setEmail(user.getProperty(UserConstants.EMAIL, null));
 		
 		if(withPortrait) {
-			File portraitDir = DisplayPortraitManager.getInstance().getPortraitDir(identity);
-			File portrait = new File(portraitDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
-			if(portrait.exists()) {
+			File portrait = DisplayPortraitManager.getInstance().getSmallPortrait(identity);
+			if(portrait != null && portrait.exists()) {
 				try {
 					InputStream input = new FileInputStream(portrait);
 					byte[] datas = IOUtils.toByteArray(input);
diff --git a/src/main/java/org/olat/user/restapi/UserWebService.java b/src/main/java/org/olat/user/restapi/UserWebService.java
index f2df7175cb70d4cb69c460662bb97e2f171bce5e..e00e9901e64b9f6619a9ef1b8d2e7b4b79e77855 100644
--- a/src/main/java/org/olat/user/restapi/UserWebService.java
+++ b/src/main/java/org/olat/user/restapi/UserWebService.java
@@ -65,7 +65,6 @@ import org.olat.basesecurity.AuthHelper;
 import org.olat.basesecurity.Authentication;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.BaseSecurityManager;
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.gui.components.form.ValidationError;
 import org.olat.core.gui.translator.PackageTranslator;
 import org.olat.core.gui.translator.Translator;
@@ -76,10 +75,8 @@ import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.FileUtils;
-import org.olat.core.util.ImageHelper;
 import org.olat.core.util.StringHelper;
 import org.olat.core.util.WebappHelper;
-import org.olat.core.util.image.Size;
 import org.olat.restapi.group.MyGroupWebService;
 import org.olat.restapi.support.vo.ErrorVO;
 import org.olat.user.DisplayPortraitManager;
@@ -325,9 +322,8 @@ public class UserWebService {
 				return Response.serverError().status(Status.NOT_FOUND).build();
 			}
 			
-			File portraitDir = DisplayPortraitManager.getInstance().getPortraitDir(identity);
-			File portrait = new File(portraitDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
-			if(!portrait.exists()) {
+			File portrait = DisplayPortraitManager.getInstance().getBigPortrait(identity);
+			if(portrait == null || !portrait.exists()) {
 				return Response.serverError().status(Status.NOT_FOUND).build();
 			}
 
@@ -372,16 +368,7 @@ public class UserWebService {
 			
 			File tmpFile = getTmpFile(filename);
 			FileUtils.save(file, tmpFile);
-
-			DisplayPortraitManager dps = DisplayPortraitManager.getInstance();
-			File uploadDir = dps.getPortraitDir(identity);
-			File pBigFile = new File(uploadDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
-			File pSmallFile = new File(uploadDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
-			ImageHelper imageHelper = CoreSpringFactory.getImpl(ImageHelper.class);
-			Size size = imageHelper.scaleImage(tmpFile, pBigFile, DisplayPortraitManager.WIDTH_PORTRAIT_BIG, DisplayPortraitManager.WIDTH_PORTRAIT_BIG);
-			if(size != null){
-				size = imageHelper.scaleImage(tmpFile, pSmallFile, DisplayPortraitManager.WIDTH_PORTRAIT_SMALL, DisplayPortraitManager.WIDTH_PORTRAIT_SMALL);
-			}
+			DisplayPortraitManager.getInstance().setPortrait(tmpFile, identity);
 			tmpFile.delete();
 			return Response.ok().build();
 		} catch (Throwable e) {
@@ -405,20 +392,11 @@ public class UserWebService {
 			Identity identity = BaseSecurityManager.getInstance().loadIdentityByKey(identityKey, false);
 			if(identity == null) {
 				return Response.serverError().status(Status.NOT_FOUND).build();
-			}else if(!isUserManager(request) && !identity.equalsByPersistableKey(authIdentity)) {
+			} else if(!isUserManager(request) && !identity.equalsByPersistableKey(authIdentity)) {
 				return Response.serverError().status(Status.UNAUTHORIZED).build();
 			}
 		
-			DisplayPortraitManager dps = DisplayPortraitManager.getInstance();
-			File uploadDir = dps.getPortraitDir(identity);
-			File pBigFile = new File(uploadDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
-			if(pBigFile.exists()) {
-				pBigFile.delete();
-			}
-			File pSmallFile = new File(uploadDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
-			if(pSmallFile.exists()) {
-				pSmallFile.delete();
-			}
+			DisplayPortraitManager.getInstance().deletePortrait(identity);
 			return Response.ok().build();
 		} catch (Throwable e) {
 			throw new WebApplicationException(e);
diff --git a/src/test/java/org/olat/restapi/UserMgmtTest.java b/src/test/java/org/olat/restapi/UserMgmtTest.java
index 2a653f1c1676dc79ffc31ffc2d2a513cdfd1ec15..0e7ca098d2bd6c6cef08c6ebef7874b832a557fe 100644
--- a/src/test/java/org/olat/restapi/UserMgmtTest.java
+++ b/src/test/java/org/olat/restapi/UserMgmtTest.java
@@ -869,9 +869,10 @@ public class UserMgmtTest extends OlatJerseyTestCase {
 		
 		//check if big and small portraits exist
 		DisplayPortraitManager dps = DisplayPortraitManager.getInstance();
-		File uploadDir = dps.getPortraitDir(id1);
-		assertTrue(new File(uploadDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME).exists());
-		assertTrue(new File(uploadDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME).exists());
+		File bigPortrait = dps.getBigPortrait(id1);
+		assertNotNull(bigPortrait);
+		assertTrue(bigPortrait.exists());
+		assertTrue(bigPortrait.exists());
 		
 		//check get portrait
 		String getRequest = "/users/" + id1.getKey() + "/portrait";
@@ -888,7 +889,8 @@ public class UserMgmtTest extends OlatJerseyTestCase {
 		
 		assertEquals(-1, b);//up to end of file
 		assertTrue(count > 1000);//enough bytes
-		File bigPortrait = new File(uploadDir, DisplayPortraitManager.PORTRAIT_BIG_FILENAME);
+		bigPortrait = dps.getBigPortrait(id1);
+		assertNotNull(bigPortrait);
 		assertEquals(count, bigPortrait.length());
 
 		//check get portrait as Base64
@@ -905,7 +907,8 @@ public class UserMgmtTest extends OlatJerseyTestCase {
 		assertNotNull(datas);
 		assertTrue(datas.length > 0);
 		
-		File smallPortrait = new File(uploadDir, DisplayPortraitManager.PORTRAIT_SMALL_FILENAME);
+		File smallPortrait = dps.getSmallPortrait(id1);
+		assertNotNull(smallPortrait);
 		assertEquals(datas.length, smallPortrait.length());
 		
 		try {