diff --git a/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties
index 6921c36bca801437717475c861020a1b95810264..247716aad7113dd5a0b10a51f7a2e3c6e8ffb856 100644
--- a/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/assessment/ui/mode/_i18n/LocalStrings_de.properties
@@ -48,7 +48,7 @@ current.mode.in=Die Pr\u00FCfung f\u00E4ngt in {0} Minuten an.
 curriculum.elements=Curriculum
 date.and.time=Datum und Zeit
 date.and.time.text.same.day={0} {1} - {3} (-{4}/+{5} Min.)
-date.and.time.text.same.day={0} {1} - {2} {3} (-{4}/+{5} Min.)
+date.and.time.text={0} {1} - {2} {3} (-{4}/+{5} Min.)
 delete.mode=Pr\u00FCfungskonfiguration l\u00F6schen
 edit=Bearbeiten
 elements=Kursbausteine
diff --git a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
index ede61f85fe6153786bf6f7b7729b94581a04ed3a..5b19a1e9ec7c977b2aad6e0382031e89f2f57964 100644
--- a/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
+++ b/src/main/java/org/olat/ldap/manager/LDAPLoginManagerImpl.java
@@ -907,7 +907,6 @@ public class LDAPLoginManagerImpl implements LDAPLoginManager, GenericEventListe
 				errors.insert("LDAP connection ERROR");
 				log.error("LDAP batch sync: LDAP connection empty");
 				freeSyncLock();
-				success = false;
 				return success;
 			}
 			Date timeBeforeSync = new Date();
diff --git a/src/main/java/org/olat/ldap/ui/LDAPAdminController.java b/src/main/java/org/olat/ldap/ui/LDAPAdminController.java
index 8e2d21127397ebc0e196580cee397be765e6d0fc..89cca444075aed75d47f08c59882e2ff18f5a07a 100644
--- a/src/main/java/org/olat/ldap/ui/LDAPAdminController.java
+++ b/src/main/java/org/olat/ldap/ui/LDAPAdminController.java
@@ -44,7 +44,6 @@ import org.olat.core.gui.control.generic.closablewrapper.CloseableCalloutWindowC
 import org.olat.core.gui.control.generic.wizard.Step;
 import org.olat.core.gui.control.generic.wizard.StepRunnerCallback;
 import org.olat.core.gui.control.generic.wizard.StepsMainRunController;
-import org.olat.core.gui.control.generic.wizard.StepsRunContext;
 import org.olat.core.id.Identity;
 import org.olat.core.logging.LogRealTimeViewerController;
 import org.olat.core.util.coordinate.CoordinatorManager;
@@ -69,7 +68,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent
 	private VelocityContainer ldapAdminVC;
 	private DateFormat dateFormatter;
 	private Link syncStartLink;
-	private Link deletStartLink;
+	private Link deleteStartLink;
 	private StepsMainRunController deleteStepController;
 	private boolean hasIdentitiesToDeleteAfterRun;
 	private Integer amountUsersToDelete;
@@ -97,7 +96,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent
 			removeFallBackAuthsLink = LinkFactory.createButton("remove.fallback.auth", ldapAdminVC, this);
 		}
 		// Create start delete User link
-		deletStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this);
+		deleteStartLink = LinkFactory.createButton("delete.button.start", ldapAdminVC, this);
 		// Create real-time log viewer
 		LogRealTimeViewerController logViewController = new LogRealTimeViewerController(ureq, control, "org.olat.ldap", Level.DEBUG, false);
 		listenTo(logViewController);
@@ -124,11 +123,6 @@ public class LDAPAdminController extends BasicController implements GenericEvent
 		}
 	}
 
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.components.Component,
-	 *      org.olat.core.gui.control.Event)
-	 */
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
 		if (source == syncStartLink) {
@@ -145,111 +139,33 @@ public class LDAPAdminController extends BasicController implements GenericEvent
 			calloutCtr.addDisposableChildController(userSearchCtrl);
 			calloutCtr.activate();
 			listenTo(calloutCtr);
-		} else if (source == deletStartLink) {
-			// cancel if some one else is making sync or delete job
-			if (!ldapLoginManager.acquireSyncLock()) {
-				showError("delete.error.lock");
-			} else {
-				deletStartLink.setEnabled(false);
-
-				// check and get LDAP connection
-				LdapContext ctx = ldapLoginManager.bindSystem();
-				if (ctx == null) {
-					showError("delete.error.connection");
-					return;
-				}
-				// get deleted users
-				List<Identity> identitiesToDelete = ldapLoginManager.getIdentitysDeletedInLdap(ctx);
-				try {
-					ctx.close();
-				} catch (NamingException e) {
-					showError("delete.error.connection.close");
-					logError("Could not close LDAP connection on manual delete sync", e);
-				}
-
-				if (identitiesToDelete != null) {
-					for(Iterator<Identity> it=identitiesToDelete.iterator(); it.hasNext(); ) {
-						if(Identity.STATUS_PERMANENT.equals(it.next().getStatus())) {
-							it.remove();
-						}
-					}
-				}
-				
-				boolean hasIdentitiesToDelete;
-				if (identitiesToDelete != null && identitiesToDelete.size() != 0) {
-					hasIdentitiesToDelete = true;
-					/*
-					 * start step which spawns the whole wizard
-					 */
-					Step start = new DeletStep00(ureq, hasIdentitiesToDelete, identitiesToDelete);
-					/*
-					 * wizard finish callback called after "finish" is called
-					 */
-					StepRunnerCallback finishCallback = new StepRunnerCallback() {
-						@Override
-						public Step execute(UserRequest uureq, WindowControl control, StepsRunContext runContext) {
-							hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue();
-							if (hasIdentitiesToDeleteAfterRun) {
-								
-								@SuppressWarnings("unchecked")
-								List<Identity> idToDelete = (List<Identity>) runContext.get("identitiesToDelete");
-								amountUsersToDelete = idToDelete.size();
-								// Delete all identities now and tell everybody that
-								// we are finished
-								ldapLoginManager.deleteIdentities(idToDelete, getIdentity());
-								return StepsMainRunController.DONE_MODIFIED;
-							} else {
-								return StepsMainRunController.DONE_UNCHANGED;
-							}
-							// otherwise return without deleting anything
-						}
-
-					};
-					deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null,
-							translate("admin.deleteUser.title"), "o_sel_ldap_delete_user_wizard");
-					listenTo(deleteStepController);
-					getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent());
-				}
-				else {
-					hasIdentitiesToDelete = false;
-					showInfo("delete.step.noUsers");
-					deletStartLink.setEnabled(true);
-					ldapLoginManager.freeSyncLock();
-				}
-			}
+		} else if (source == deleteStartLink) {
+			doStartDeleteProcess(ureq);
 		} else if (source == removeFallBackAuthsLink){
 			removeFallBackAuthsLink.setEnabled(false);
 			ldapLoginManager.removeFallBackAuthentications();		
 			showInfo("opsuccess");
 		}
-
 	}
 	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#event(org.olat.core.gui.UserRequest,
-	 *      org.olat.core.gui.controller.Controller,
-	 *      org.olat.core.gui.control.Event)
-	 */
+	@Override
 	protected void event(UserRequest ureq, Controller source, Event event) {
 		if (source == deleteStepController) {
 			if (event == Event.CANCELLED_EVENT || event == Event.FAILED_EVENT) {
 				getWindowControl().pop();
 				removeAsListenerAndDispose(deleteStepController);
 				showInfo("delete.step.cancel");
-				ldapLoginManager.freeSyncLock();
-				deletStartLink.setEnabled(true);
+				deleteStartLink.setEnabled(true);
 			} else if (event == Event.CHANGED_EVENT || event == Event.DONE_EVENT) {
 				getWindowControl().pop();
 				removeAsListenerAndDispose(deleteStepController);
 				if(hasIdentitiesToDeleteAfterRun){
 					showInfo("delete.step.finish.users", amountUsersToDelete.toString());
-				}
-				else{
+				} else{
 					showInfo("delete.step.finish.noUsers");
 				}
-				ldapLoginManager.freeSyncLock();
-				deletStartLink.setEnabled(true);
-			}	else if (source == userSearchCtrl){
+				deleteStartLink.setEnabled(true);
+			}	else if (source == userSearchCtrl) {
 				calloutCtr.deactivate();
 				Identity choosenIdent = ((SingleIdentityChosenEvent)event).getChosenIdentity();
 				ldapLoginManager.doSyncSingleUser(choosenIdent);
@@ -257,6 +173,70 @@ public class LDAPAdminController extends BasicController implements GenericEvent
 		}
 	}
 	
+	private void doStartDeleteProcess(UserRequest ureq) {
+		// cancel if some one else is making sync or delete job
+		if (!ldapLoginManager.acquireSyncLock()) {
+			showError("delete.error.lock");
+		} else {
+			// check and get LDAP connection
+			LdapContext ctx = ldapLoginManager.bindSystem();
+			if (ctx == null) {
+				showError("delete.error.connection");
+				ldapLoginManager.freeSyncLock();
+				return;
+			}
+
+			deleteStartLink.setEnabled(false);
+			// get deleted users
+			List<Identity> identitiesToDelete = null;
+			try {
+				identitiesToDelete = ldapLoginManager.getIdentitysDeletedInLdap(ctx);
+				ctx.close();
+			} catch (NamingException e) {
+				showError("delete.error.connection.close");
+				logError("Could not close LDAP connection on manual delete sync", e);
+			} finally {
+				ldapLoginManager.freeSyncLock();
+			}
+
+			if (identitiesToDelete != null) {
+				for(Iterator<Identity> it=identitiesToDelete.iterator(); it.hasNext(); ) {
+					if(Identity.STATUS_PERMANENT.equals(it.next().getStatus())) {
+						it.remove();
+					}
+				}
+			}
+			
+			if (identitiesToDelete != null && !identitiesToDelete.isEmpty()) {
+				// start step which spawns the whole wizard
+				Step start = new DeletStep00(ureq, true, identitiesToDelete);
+				// wizard finish callback called after "finish" is called
+				StepRunnerCallback finishCallback = (uureq, control, runContext) -> {
+					hasIdentitiesToDeleteAfterRun = ((Boolean) runContext.get("hasIdentitiesToDelete")).booleanValue();
+					if (hasIdentitiesToDeleteAfterRun) {
+						@SuppressWarnings("unchecked")
+						List<Identity> idToDelete = (List<Identity>) runContext.get("identitiesToDelete");
+						amountUsersToDelete = idToDelete.size();
+						// Delete all identities now and tell everybody that
+						// we are finished
+						ldapLoginManager.deleteIdentities(idToDelete, getIdentity());
+						return StepsMainRunController.DONE_MODIFIED;
+					} else {
+						// otherwise return without deleting anything
+						return StepsMainRunController.DONE_UNCHANGED;
+					}
+				};
+				deleteStepController = new StepsMainRunController(ureq, getWindowControl(), start, finishCallback, null,
+						translate("admin.deleteUser.title"), "o_sel_ldap_delete_user_wizard");
+				listenTo(deleteStepController);
+				getWindowControl().pushAsModalDialog(deleteStepController.getInitialComponent());
+			} else {
+				showInfo("delete.step.noUsers");
+				deleteStartLink.setEnabled(true);
+			}
+		}
+	}
+	
 	
 	/**
 	 * Callback method for asynchronous sync thread. Called when sync is finished
@@ -264,7 +244,7 @@ public class LDAPAdminController extends BasicController implements GenericEvent
 	 * @param success
 	 * @param errors
 	 */
-	void syncTaskFinished(boolean success, LDAPError errors) {
+	private void syncTaskFinished(boolean success, LDAPError errors) {
 		if (success) {
 			showWarning("admin.synchronize.finished.success");
 			logInfo("LDAP user synchronize job finished successfully");
diff --git a/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java b/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java
index c9b2399f16bfab55ad623cef4af222b07dced4db..df8c5916733b8604540dd091fa0f3d90009ad8ef 100644
--- a/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/LectureRepositorySettingsController.java
@@ -308,6 +308,13 @@ public class LectureRepositorySettingsController extends FormBasicController {
 			allOk &= false;
 		}
 		
+		if(assessmentFollowupTimeEl.isVisible() && assessmentFollowupTimeEl.isEnabled()) {
+			allOk &= validateInteger(assessmentFollowupTimeEl);
+		}
+		if(assessmentLeadTimeEl.isVisible() && assessmentLeadTimeEl.isEnabled()) {
+			allOk &= validateInteger(assessmentLeadTimeEl);
+		}
+		
 		//override -> check rate
 		attendanceRateEl.clearError();
 		if(overrideEl.isSelected(0)) {
@@ -332,6 +339,32 @@ public class LectureRepositorySettingsController extends FormBasicController {
 		
 		return allOk;
 	}
+	
+	private boolean validateInteger(TextElement el) {
+		boolean allOk = true;
+		
+		el.clearError();
+		if(!StringHelper.containsNonWhitespace(el.getValue())) {
+			el.setErrorKey("form.legende.mandatory", null);
+			allOk &= false;
+		} else if(!StringHelper.isLong(el.getValue())) {
+			try {
+				int value = Integer.parseInt(el.getValue());
+				if(value < 0) {
+					el.setErrorKey("form.error.nointeger", null);
+					allOk &= false;
+				}
+			} catch (NumberFormatException e) {
+				el.setErrorKey("form.error.nointeger", null);
+				allOk &= false;
+			}
+		} else {
+			el.setErrorKey("error.wrong.int", null);
+			allOk &= false;
+		}
+		
+		return allOk;	
+	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
diff --git a/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java b/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java
index cadfc55b906ad49b5dfd4b527a013c81a2b1b0e1..ab2197438842b190441bcfad49099a4ad866b276 100644
--- a/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java
+++ b/src/main/java/org/olat/user/propertyhandlers/SmsPhonePropertyHandler.java
@@ -44,8 +44,8 @@ public class SmsPhonePropertyHandler extends PhonePropertyHandler {
 			FormItemContainer formItemContainer) {
 		String name = getName();
 		SmsPhoneElement phoneEl = new SmsPhoneElement(name, this, user, locale);
-		phoneEl.setLabel("form.name." + name, null);
 		formItemContainer.add(phoneEl);
+		phoneEl.setLabel("form.name." + name, null);
 		
 		UserManager um = CoreSpringFactory.getImpl(UserManager.class);
 		if(um.isUserViewReadOnly(usageIdentifyer, this)) {
diff --git a/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java b/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java
index 6c2fad439f88584b11f85535982ba041521c758b..9a9e57634df2fd4f0d8b3b1ee2c433114e8b2adc 100644
--- a/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java
+++ b/src/main/java/org/olat/user/propertyhandlers/UserInterestsPropertyHandler.java
@@ -79,8 +79,8 @@ public class UserInterestsPropertyHandler extends AbstractUserPropertyHandler {
 			FormItemContainer formItemContainer) {
 		String name = getName();
 		UserInterestsElement userInterestsElement = new UserInterestsElement(name, getInternalValue(user), locale);
-		userInterestsElement.setLabel("form.name." + name, null);
 		formItemContainer.add(userInterestsElement);
+		userInterestsElement.setLabel("form.name." + name, null);
 		return userInterestsElement;
 	}
 
diff --git a/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java b/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java
index 58cbd4867e14698075fbcd6ce36bce3854fcc938..1845f786ddded122571c512534e999414a56cafb 100644
--- a/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java
+++ b/src/main/java/org/olat/user/ui/role/RelationRolesAndRightsUIFactory.java
@@ -21,6 +21,7 @@ package org.olat.user.ui.role;
 
 import java.util.Locale;
 
+import org.apache.logging.log4j.Level;
 import org.olat.basesecurity.IdentityRelationshipService;
 import org.olat.basesecurity.RelationRight;
 import org.olat.basesecurity.RelationRightProvider;
@@ -86,7 +87,7 @@ public class RelationRolesAndRightsUIFactory {
 	}
 
 	private static String getTranslated(Translator translator, String prefix, RelationRole role) {
-		String translatedRole = translator.translate(prefix.concat(role.getKey().toString()));
+		String translatedRole = translator.translate(prefix.concat(role.getKey().toString()), null, Level.OFF);
 		if (translatedRole.length() > 256 || translatedRole.startsWith(prefix)) {
 			translatedRole = role.getRole();
 		}
diff --git a/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js b/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js
index 08dfd948da70dbb8d02ddf525d72b7cc7284d4ae..1b2be5b55f08e567a419db944e960efbe0cb1ca0 100644
--- a/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js
+++ b/src/main/webapp/static/js/jquery/openolat/jquery.drawing.js
@@ -115,8 +115,6 @@
 			height = parseInt(parts[3]) - top - 3;
 		}
 		
-		console.log(coords, left, top, width, height);
-		
 		var nodes = jQuery("#" + id).height(height + 'px').width(width + 'px')
 			.css('top', top + 'px').css('left', left + 'px');
 		if(this.settings.resize) {