diff --git a/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java b/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java
index d362ab8bce66a27619d6a6c08eec3ed917615178..4d7132ee2a91009b98af78a92305caa8d8d3c041 100644
--- a/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java
+++ b/src/main/java/de/bps/olat/user/ChangeEMailExecuteController.java
@@ -79,11 +79,11 @@ public class ChangeEMailExecuteController extends ChangeEMailController implemen
 				if (isLinkClicked()) {
 					changeEMail(getWindowControl());
 				} else {
-	    		Boolean alreadySeen = ((Boolean)ureq.getUserSession().getEntry(PRESENTED_EMAIL_CHANGE_REMINDER));
-	    		if (alreadySeen == null) {
-	    			getWindowControl().setWarning(getPackageTranslator().translate("email.change.reminder"));
-	    			ureq.getUserSession().putEntry(PRESENTED_EMAIL_CHANGE_REMINDER, Boolean.TRUE);
-	    		}
+		    		Boolean alreadySeen = ((Boolean)ureq.getUserSession().getEntry(PRESENTED_EMAIL_CHANGE_REMINDER));
+		    		if (alreadySeen == null) {
+		    			getWindowControl().setWarning(getPackageTranslator().translate("email.change.reminder"));
+		    			ureq.getUserSession().putEntry(PRESENTED_EMAIL_CHANGE_REMINDER, Boolean.TRUE);
+		    		}
 				}
 			}
 		} else {
diff --git a/src/main/java/org/olat/admin/user/course/CourseOverviewController.java b/src/main/java/org/olat/admin/user/course/CourseOverviewController.java
index c1d4545bf1b4121e3e1bd6d57ebb643bee58085b..ab6c0c98f1422be5d441b8ea6591b03ce7f2b296 100644
--- a/src/main/java/org/olat/admin/user/course/CourseOverviewController.java
+++ b/src/main/java/org/olat/admin/user/course/CourseOverviewController.java
@@ -31,7 +31,6 @@ import java.util.Map;
 import org.olat.NewControllerFactory;
 import org.olat.basesecurity.BaseSecurityModule;
 import org.olat.basesecurity.GroupRoles;
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
@@ -47,6 +46,7 @@ import org.olat.core.gui.components.table.StaticColumnDescriptor;
 import org.olat.core.gui.components.table.Table;
 import org.olat.core.gui.components.table.TableController;
 import org.olat.core.gui.components.table.TableEvent;
+import org.olat.core.gui.components.table.TableGuiConfiguration;
 import org.olat.core.gui.components.table.TableMultiSelectEvent;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Controller;
@@ -84,6 +84,7 @@ import org.olat.repository.controllers.RepositoryEntryFilter;
 import org.olat.repository.controllers.RepositorySearchController.Can;
 import org.olat.repository.model.RepositoryEntryMembership;
 import org.olat.repository.model.RepositoryEntryPermissionChangeEvent;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * 
@@ -92,6 +93,7 @@ import org.olat.repository.model.RepositoryEntryPermissionChangeEvent;
  *
  */
 public class CourseOverviewController extends BasicController  {
+	private static final String CONFIG = CourseOverviewController.class.getName();
 	private static final String TABLE_ACTION_LAUNCH = "reTblLaunch";
 	private static final String TABLE_ACTION_EDIT = "edit";
 	private static final String TABLE_ACTION_UNSUBSCRIBE = "unsubscribe";
@@ -109,30 +111,38 @@ public class CourseOverviewController extends BasicController  {
 	
 	private final Identity editedIdentity;
 	
-	private final RepositoryModule repositoryModule;
-	private final RepositoryManager repositoryManager;
-	private final RepositoryService repositoryService;
-	private final BusinessGroupService businessGroupService;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	@Autowired
+	private RepositoryModule repositoryModule;
+	@Autowired
+	private RepositoryManager repositoryManager;
+	@Autowired
+	private RepositoryService repositoryService;
+	@Autowired
+	private BusinessGroupService businessGroupService;
 	
 	public CourseOverviewController(UserRequest ureq, WindowControl wControl, Identity identity) {
 		super(ureq, wControl, Util.createPackageTranslator(BusinessGroupTableModelWithType.class, ureq.getLocale()));
-		
-		repositoryModule = CoreSpringFactory.getImpl(RepositoryModule.class);
-		repositoryManager = CoreSpringFactory.getImpl(RepositoryManager.class);
-		repositoryService = CoreSpringFactory.getImpl(RepositoryService.class);
-		businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
-		BaseSecurityModule securityModule = CoreSpringFactory.getImpl(BaseSecurityModule.class);
+		this.setTranslator(Util.createPackageTranslator(RepositoryService.class, getLocale(), getTranslator()));
+
 		editedIdentity = identity;
-		
 
 		boolean isLastVisitVisible = securityModule.isUserLastVisitVisible(ureq.getUserSession().getRoles());
 		
 		vc = createVelocityContainer("courseoverview");
+		
+		TableGuiConfiguration config = new TableGuiConfiguration();
+		config.setPreferencesOffered(true, CONFIG);
 
-		courseListCtr = new TableController(null, ureq, wControl, getTranslator());
+		courseListCtr = new TableController(config, ureq, wControl, getTranslator());
 		listenTo(courseListCtr);
 		courseListCtr.addColumnDescriptor(false, new DefaultColumnDescriptor(MSCols.key.i18n(), MSCols.key.ordinal(), null, getLocale()));
 		courseListCtr.addColumnDescriptor(new DefaultColumnDescriptor(MSCols.title.i18n(), MSCols.title.ordinal(), null, getLocale()));
+		if(repositoryModule.isManagedRepositoryEntries()) {
+			courseListCtr.addColumnDescriptor(false, new DefaultColumnDescriptor(MSCols.externalId.i18n(), MSCols.externalId.ordinal(), null, getLocale()));
+		}
+		courseListCtr.addColumnDescriptor(false, new DefaultColumnDescriptor(MSCols.externalRef.i18n(), MSCols.externalRef.ordinal(), null, getLocale()));
 		CustomCellRenderer roleRenderer = new CourseRoleCellRenderer();
 		courseListCtr.addColumnDescriptor(new CustomRenderColumnDescriptor(MSCols.role.i18n(), MSCols.role.ordinal(), null, getLocale(), ColumnDescriptor.ALIGNMENT_LEFT, roleRenderer));
 		courseListCtr.addColumnDescriptor(new DefaultColumnDescriptor(MSCols.firstTime.i18n(), MSCols.firstTime.ordinal(), null, getLocale()));
@@ -240,6 +250,9 @@ public class CourseOverviewController extends BasicController  {
 			RepositoryEntry entry = entryKeyToRepoEntryMap.get(memberView.getRepoKey());
 			if(entry != null) {
 				memberView.setDisplayName(entry.getDisplayname());
+				memberView.setExternalId(entry.getExternalId());
+				memberView.setExternalRef(entry.getExternalRef());
+				
 				boolean managedMembersRepo = RepositoryEntryManagedFlag.isManaged(entry,
 						RepositoryEntryManagedFlag.membersmanagement);
 				memberView.getMembership().setManagedMembersRepo(managedMembersRepo);
@@ -541,6 +554,8 @@ public class CourseOverviewController extends BasicController  {
 	public enum MSCols {
 		key("table.header.key"),
 		title("table.header.displayName"),
+		externalId("table.header.externalid"),
+		externalRef("table.header.externalref"),
 		role("table.header.role"),
 		lastTime("table.header.lastTime"),
 		firstTime("table.header.firstTime"),
@@ -609,6 +624,8 @@ public class CourseOverviewController extends BasicController  {
 			switch(MSCols.values()[col]) {
 				case key: return view.getRepoKey();
 				case title: return view.getDisplayName();
+				case externalId: return view.getExternalId();
+				case externalRef: return view.getExternalRef();
 				case role: return view;
 				case firstTime: return view.getFirstTime();
 				case lastTime: return view.getLastTime();
@@ -621,6 +638,8 @@ public class CourseOverviewController extends BasicController  {
 	private class CourseMemberView {
 		private final Long repoKey;
 		private String displayName;
+		private String externalId;
+		private String externalRef;
 		private Date firstTime;
 		private Date lastTime;
 		private final CourseMembership membership = new CourseMembership();
@@ -642,6 +661,22 @@ public class CourseOverviewController extends BasicController  {
 			this.displayName = displayName;
 		}
 		
+		public String getExternalId() {
+			return externalId;
+		}
+
+		public void setExternalId(String externalId) {
+			this.externalId = externalId;
+		}
+
+		public String getExternalRef() {
+			return externalRef;
+		}
+
+		public void setExternalRef(String externalRef) {
+			this.externalRef = externalRef;
+		}
+
 		public Date getFirstTime() {
 			return firstTime;
 		}
diff --git a/src/main/java/org/olat/catalog/CatalogManager.java b/src/main/java/org/olat/catalog/CatalogManager.java
index 85f5afef67c52b79714456c463d8acc04dc2d9c8..2fc431cf777973b7c43542fa251db3222f399552 100644
--- a/src/main/java/org/olat/catalog/CatalogManager.java
+++ b/src/main/java/org/olat/catalog/CatalogManager.java
@@ -41,6 +41,7 @@ import org.olat.basesecurity.SecurityGroup;
 import org.olat.basesecurity.SecurityGroupMembershipImpl;
 import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.commons.modules.bc.meta.MetaInfo;
+import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.commons.services.image.ImageService;
@@ -691,8 +692,11 @@ public class CatalogManager extends BasicManager implements UserDataDeletable, I
 	public void deleteImage(CatalogEntryRef entry) {
 		VFSLeaf imgFile =  getImage(entry);
 		if (imgFile != null) {
-			if(imgFile instanceof MetaInfo) {
-				((MetaInfo)imgFile).clearThumbnails();
+			if(imgFile instanceof MetaTagged) {
+				MetaInfo info = ((MetaTagged)imgFile).getMetaInfo();
+				if(info != null) {
+					info.clearThumbnails();
+				}
 			}
 			imgFile.delete();
 		}
@@ -701,8 +705,11 @@ public class CatalogManager extends BasicManager implements UserDataDeletable, I
 	public boolean setImage(VFSLeaf newImageFile, CatalogEntryRef re) {
 		VFSLeaf currentImage = getImage(re);
 		if(currentImage != null) {
-			if(currentImage instanceof MetaInfo) {
-				((MetaInfo)currentImage).clearThumbnails();
+			if(currentImage instanceof MetaTagged) {
+				MetaInfo info = ((MetaTagged)currentImage).getMetaInfo();
+				if(info != null) {
+					info.clearThumbnails();
+				}
 			}
 			currentImage.delete();
 		}
diff --git a/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java b/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java
index 69a84f3c3880c66d125279e7924b550b58c7f7ce..9ad081e0efef85d1a0bca2e27b476d4d6b5a41d1 100644
--- a/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java
+++ b/src/main/java/org/olat/core/commons/services/image/spi/AbstractImageHelper.java
@@ -20,8 +20,8 @@
 package org.olat.core.commons.services.image.spi;
 
 import java.awt.image.BufferedImage;
-import java.io.BufferedInputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Iterator;
 
 import javax.imageio.ImageIO;
@@ -60,24 +60,28 @@ public abstract class AbstractImageHelper implements ImageHelperSPI {
 	}
 	
 	private Size getImageSizeFallback(VFSLeaf media) {
-		BufferedInputStream fileStrean = null;
+		InputStream fileStream = null;
 		BufferedImage imageSrc = null;
 		try {
-			fileStrean = new BufferedInputStream(media.getInputStream());
-			imageSrc = ImageIO.read(fileStrean);
-			if (imageSrc == null) {
-				// happens with faulty Java implementation, e.g. on MacOSX
+			fileStream = media.getInputStream();
+			if(fileStream != null) {
+				imageSrc = ImageIO.read(fileStream);
+				if (imageSrc == null) {
+					// happens with faulty Java implementation, e.g. on MacOSX
+					return null;
+				}
+				double realWidth = imageSrc.getWidth();
+				double realHeight = imageSrc.getHeight();
+				return new Size((int)realWidth, (int)realHeight, 0, 0, false);
+			} else {
 				return null;
 			}
-			double realWidth = imageSrc.getWidth();
-			double realHeight = imageSrc.getHeight();
-			return new Size((int)realWidth, (int)realHeight, 0, 0, false);
 		} catch (IOException e) {
 			// log error, don't do anything else
 			log.error("Problem while setting image size to fit for resource::" + media, e);
 			return null;
 		} finally {
-			IOUtils.closeQuietly(fileStrean);
+			IOUtils.closeQuietly(fileStream);
 			if (imageSrc != null) {
 				imageSrc.flush();
 			}
@@ -88,17 +92,24 @@ public abstract class AbstractImageHelper implements ImageHelperSPI {
 		Size result = null;
 		Iterator<ImageReader> iter = ImageIO.getImageReadersBySuffix(suffix);
 		if (iter.hasNext()) {
+			ImageInputStream stream = null;
+			InputStream mediaStream = null;
 			ImageReader reader = iter.next();
 			try {
-				ImageInputStream stream = new MemoryCacheImageInputStream(media.getInputStream());
-				reader.setInput(stream);
-				int readerMinIndex = reader.getMinIndex();
-				int width = reader.getWidth(readerMinIndex);
-				int height = reader.getHeight(readerMinIndex);
-				result = new Size(width, height, 0, 0, false);
+				mediaStream = media.getInputStream();
+				if(mediaStream != null) {
+					stream = new MemoryCacheImageInputStream(mediaStream);
+					reader.setInput(stream);
+					int readerMinIndex = reader.getMinIndex();
+					int width = reader.getWidth(readerMinIndex);
+					int height = reader.getHeight(readerMinIndex);
+					result = new Size(width, height, 0, 0, false);
+				}
 			} catch (IOException e) {
 				log.error(e.getMessage());
 			} finally {
+				IOUtils.closeQuietly(stream);
+				IOUtils.closeQuietly(mediaStream);
 				reader.dispose();
 			}
 		} else {
diff --git a/src/main/java/org/olat/core/commons/services/video/MovieServiceImpl.java b/src/main/java/org/olat/core/commons/services/video/MovieServiceImpl.java
index f0e833f1e3083b378b5cb01ae08d5128d5430120..feeb4282cb035ce3628353e65eadcf79f089d54e 100644
--- a/src/main/java/org/olat/core/commons/services/video/MovieServiceImpl.java
+++ b/src/main/java/org/olat/core/commons/services/video/MovieServiceImpl.java
@@ -43,6 +43,7 @@ import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.vfs.LocalFileImpl;
 import org.olat.core.util.vfs.VFSLeaf;
+import org.olat.ims.cp.ui.VFSCPNamedItem;
 import org.springframework.stereotype.Service;
 
 /**
@@ -70,7 +71,17 @@ public class MovieServiceImpl implements MovieService, ThumbnailSPI {
 
 	@Override
 	public Size getSize(VFSLeaf media, String suffix) {
-		File file = ((LocalFileImpl)media).getBasefile();
+		File file = null;
+		if(media instanceof VFSCPNamedItem) {
+			media = ((VFSCPNamedItem)media).getDelegate();
+		}
+		if(media instanceof LocalFileImpl) {
+			file = ((LocalFileImpl)media).getBasefile();
+		}
+		if(file == null) {
+			return null;
+		}
+
 		if(suffix.equals("mp4") || suffix.equals("m4v")) {
 			try(RandomAccessFile accessFile = new RandomAccessFile(file, "r")) {
 				FileChannel ch = accessFile.getChannel();
@@ -96,6 +107,7 @@ public class MovieServiceImpl implements MovieService, ThumbnailSPI {
 				log.error("Cannot extract size of: " + media, e);
 			}
 		}
+
 		return null;
 	}
 
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
index 68776e15ddfc8e4880c4514082e6e1c04d7f3ac2..a43ca489715f0c4a3b3ded77fbde82e099a997a4 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
@@ -300,7 +300,7 @@ public class CheckListAssessmentController extends FormBasicController implement
 		List<BusinessGroup> coachedGroups = courseAdmin ?
 				userCourseEnv.getCourseEnvironment().getCourseGroupManager().getAllBusinessGroups()
 				: env.getCoachedGroups();
-		List<AssessmentData> dataList = checkboxManager.getAssessmentDatas(courseOres, courseNode.getIdent(), courseTutor ? re : null, coachedGroups);
+		List<AssessmentData> dataList = checkboxManager.getAssessmentDatas(courseOres, courseNode.getIdent(), courseTutor || courseAdmin ? re : null, coachedGroups);
 		List<CheckListAssessmentRow> boxList = getAssessmentDataViews(dataList, checkboxColl);
 		Map<Long,CheckListAssessmentRow> identityToView = new HashMap<>();
 		for(CheckListAssessmentRow box:boxList) {
diff --git a/src/main/java/org/olat/ims/cp/ui/VFSCPNamedItem.java b/src/main/java/org/olat/ims/cp/ui/VFSCPNamedItem.java
index a3a43e8a44f1c65a4923e80df5369f3c0d4db615..22a5518a331f8b98ab821ba730e4956bf549a1f5 100644
--- a/src/main/java/org/olat/ims/cp/ui/VFSCPNamedItem.java
+++ b/src/main/java/org/olat/ims/cp/ui/VFSCPNamedItem.java
@@ -32,7 +32,6 @@ import org.olat.core.util.vfs.VFSLeaf;
  * Initial Date:  5 mai 2011 <br>
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  */
-//fxdiff FXOLAT-125: virtual file system for CP
 public class VFSCPNamedItem extends NamedLeaf {
 	
 	public VFSCPNamedItem(String name, VFSLeaf delegate) {
diff --git a/src/main/java/org/olat/login/AfterLoginInterceptionController.java b/src/main/java/org/olat/login/AfterLoginInterceptionController.java
index f1fb01c9f8246eb82571f11b1fff38162a45e67d..63533746dee055b34ed480880a6597bcd99d27db 100644
--- a/src/main/java/org/olat/login/AfterLoginInterceptionController.java
+++ b/src/main/java/org/olat/login/AfterLoginInterceptionController.java
@@ -39,6 +39,7 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableModalControlle
 import org.olat.core.gui.control.generic.wizard.WizardInfoController;
 import org.olat.properties.Property;
 import org.olat.properties.PropertyManager;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * Description: Presents running once controllers to the user right after login.
@@ -74,12 +75,14 @@ public class AfterLoginInterceptionController extends BasicController {
 	protected static final String ORDER_KEY = "order";
 	
 	private static final String PROPERTY_CAT = "afterLogin";
+	
+	@Autowired
+	private AfterLoginInterceptionManager aLIM;
 
 	public AfterLoginInterceptionController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);
 		vC = createVelocityContainer("afterlogin");
 		actualPanel = new Panel("actualPanel");
-		AfterLoginInterceptionManager aLIM = AfterLoginInterceptionManager.getInstance();
 		if (!aLIM.containsAnyController()) {
 			dispose();
 			return;		
@@ -87,6 +90,9 @@ public class AfterLoginInterceptionController extends BasicController {
 		
 		List<Map<String, Object>> aftctrlsTmp = aLIM.getAfterLoginControllerList();
 		aftctrls = (List<Map<String, Object>>) ((ArrayList<Map<String, Object>>) aftctrlsTmp).clone();
+		// sort controllers according to config
+		aftctrls = AfterLoginInterceptionManager.sortControllerListByOrder(aftctrls);
+		
 		// load all UserProps concerning afterlogin/runOnce workflow => only 1
 		// db-call for all props
 		pm = PropertyManager.getInstance();
@@ -145,9 +151,6 @@ public class AfterLoginInterceptionController extends BasicController {
 			dispose();
 			return;
 		}
-
-		// sort controllers according to config
-		aftctrls = AfterLoginInterceptionManager.sortControllerListByOrder(aftctrls);
 		
 		wiz = new WizardInfoController(ureq, aftctrls.size());
 		vC.put("wizard", wiz.getInitialComponent());
diff --git a/src/main/java/org/olat/repository/RepositoryManager.java b/src/main/java/org/olat/repository/RepositoryManager.java
index e2a79c6a19bacf924c58cae24373f378910957d5..1c9d4be0a80b3f8b324527d4d4a96bd159289296 100644
--- a/src/main/java/org/olat/repository/RepositoryManager.java
+++ b/src/main/java/org/olat/repository/RepositoryManager.java
@@ -48,6 +48,7 @@ import org.olat.catalog.CatalogEntry;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.modules.bc.FolderConfig;
 import org.olat.core.commons.modules.bc.meta.MetaInfo;
+import org.olat.core.commons.modules.bc.meta.tagged.MetaTagged;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.DBQuery;
 import org.olat.core.commons.persistence.PersistenceHelper;
@@ -169,8 +170,11 @@ public class RepositoryManager extends BasicManager {
 	public void deleteImage(RepositoryEntry re) {
 		VFSLeaf imgFile =  getImage(re);
 		if (imgFile != null) {
-			if(imgFile instanceof MetaInfo) {
-				((MetaInfo)imgFile).clearThumbnails();
+			if(imgFile instanceof MetaTagged) {
+				MetaInfo info = ((MetaTagged)imgFile).getMetaInfo();
+				if(info != null) {
+					info.clearThumbnails();
+				}
 			}
 			imgFile.delete();
 		}
@@ -194,8 +198,11 @@ public class RepositoryManager extends BasicManager {
 	public boolean setImage(VFSLeaf newImageFile, RepositoryEntry re) {
 		VFSLeaf currentImage = getImage(re);
 		if(currentImage != null) {
-			if(currentImage instanceof MetaInfo) {
-				((MetaInfo)currentImage).clearThumbnails();
+			if(currentImage instanceof MetaTagged) {
+				MetaInfo info = ((MetaTagged)currentImage).getMetaInfo();
+				if(info != null) {
+					info.clearThumbnails();
+				}
 			}
 			currentImage.delete();
 		}
diff --git a/src/main/java/org/olat/repository/ui/list/_content/details.html b/src/main/java/org/olat/repository/ui/list/_content/details.html
index af733ae0a29cf66c90f1177d44685d50edef0499..d0c8ab6a0a42be3ce53d9561fe27f2eee14ba1ed 100644
--- a/src/main/java/org/olat/repository/ui/list/_content/details.html
+++ b/src/main/java/org/olat/repository/ui/list/_content/details.html
@@ -241,7 +241,6 @@
 			</div>
 
 			#if ($referenceDetails)
-			<h1>lal</h1>
 			<div class="panel panel-default">
 				<div class="panel-heading" data-toggle="collapse" data-target="#collapseUsage">
 			    	<h3 class="panel-title">
diff --git a/src/main/java/org/olat/user/ProfileFormController.java b/src/main/java/org/olat/user/ProfileFormController.java
index 42848fa7ec6ad71ce956c3c360235c73a9040d48..03cb6447506b2f4853d9137e183aea0451289303 100644
--- a/src/main/java/org/olat/user/ProfileFormController.java
+++ b/src/main/java/org/olat/user/ProfileFormController.java
@@ -500,7 +500,11 @@ public class ProfileFormController extends FormBasicController {
 		cal.add(Calendar.DAY_OF_WEEK, ChangeEMailController.TIME_OUT);
 		String time = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, ureq.getLocale()).format(cal.getTime());
 		// create body and subject for email
-		body = translate("email.change.body", new String[] { serverpath + "/dmz/emchange/index.html?key=" + tk.getRegistrationKey() + "&lang=" + ureq.getLocale().getLanguage(), time, currentEmail, changedEmail })
+		String link = serverpath + "/dmz/emchange/index.html?key=" + tk.getRegistrationKey() + "&lang=" + ureq.getLocale().getLanguage();
+		if(Settings.isDebuging()) {
+			logInfo(link, null);
+		}
+		body = translate("email.change.body", new String[] { link, time, currentEmail, changedEmail })
 				+ SEPARATOR + translate("email.change.wherefrom", new String[] { serverpath, today, ip });
 		subject = translate("email.change.subject");
 		// send email