diff --git a/src/main/java/org/olat/admin/user/imp/ImportStep00.java b/src/main/java/org/olat/admin/user/imp/ImportStep00.java
index 02f121360592ea4de9f340c40bc2e4b8805de202..7201261ec9fb161371933cf91b602ddf8f629442 100644
--- a/src/main/java/org/olat/admin/user/imp/ImportStep00.java
+++ b/src/main/java/org/olat/admin/user/imp/ImportStep00.java
@@ -348,7 +348,8 @@ class ImportStep00 extends BasicStep {
 					}
 				}
 				// check that no user with same email is already in list
-				if (thisKey.equals(UserConstants.EMAIL) && userModule.isEmailUnique()) {
+				if (thisKey.equals(UserConstants.EMAIL) && StringHelper.containsNonWhitespace(thisValue)
+						&& userModule.isEmailUnique()) {
 					// check that no user with same email is already in list
 					Integer mailPos = importedEmails.indexOf(thisValue);
 					boolean duplicate = mailPos != -1;
diff --git a/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutGeneratorController.java b/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutGeneratorController.java
index 0d273eb3a127ede08693c9b84281885d8834d9c8..b4521c18aaed6fa8ec8f9d84df19902f4cf1d199 100644
--- a/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutGeneratorController.java
+++ b/src/main/java/org/olat/course/config/ui/courselayout/CourseLayoutGeneratorController.java
@@ -34,7 +34,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.services.image.ImageService;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItem;
@@ -51,12 +50,12 @@ 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.gui.translator.Translator;
-import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.AssertException;
 import org.olat.core.util.ArrayHelper;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.Util;
 import org.olat.core.util.coordinate.CoordinatorManager;
+import org.olat.core.util.coordinate.LockResult;
 import org.olat.core.util.vfs.VFSContainer;
 import org.olat.core.util.vfs.VFSItem;
 import org.olat.core.util.vfs.VFSLeaf;
@@ -70,7 +69,12 @@ import org.olat.course.config.ui.courselayout.attribs.AbstractLayoutAttribute;
 import org.olat.course.config.ui.courselayout.attribs.PreviewLA;
 import org.olat.course.config.ui.courselayout.attribs.SpecialAttributeFormItemHandler;
 import org.olat.course.config.ui.courselayout.elements.AbstractLayoutElement;
+import org.olat.course.run.RunMainController;
 import org.olat.course.run.environment.CourseEnvironment;
+import org.olat.repository.RepositoryEntry;
+import org.olat.resource.OLATResource;
+import org.olat.user.UserManager;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * Description:<br>
@@ -89,7 +93,6 @@ public class CourseLayoutGeneratorController extends FormBasicController {
 	private FileElement logoUpl;
 	private FormLayoutContainer previewImgFlc;
 	private FormLayoutContainer styleFlc;
-	private CustomConfigManager customCMgr;
 	private LinkedHashMap<String, Map<String, FormItem>> guiWrapper;
 	private Map<String, Map<String, Object>> persistedCustomConfig;
 	private FormLayoutContainer logoImgFlc;
@@ -97,25 +100,55 @@ public class CourseLayoutGeneratorController extends FormBasicController {
 	private boolean elWithErrorExists = false;
 	private final boolean editable;
 	
-	private final OLATResourceable courseOres;
+	private LockResult lockEntry;
 	private CourseConfig courseConfig;
+	private final RepositoryEntry courseEntry;
 	private CourseEnvironment courseEnvironment;
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private CustomConfigManager customCMgr;
 
-	public CourseLayoutGeneratorController(UserRequest ureq, WindowControl wControl, OLATResourceable courseOres, CourseConfig courseConfig,
+	public CourseLayoutGeneratorController(UserRequest ureq, WindowControl wControl, RepositoryEntry entry, CourseConfig courseConfig,
 			CourseEnvironment courseEnvironment, boolean editable) {
 		super(ureq, wControl);
-		
-		this.editable = editable;
-		this.courseOres = courseOres;
+
+		this.courseEntry = entry;
 		this.courseConfig = courseConfig;
 		this.courseEnvironment = courseEnvironment;
-		customCMgr = (CustomConfigManager) CoreSpringFactory.getBean("courseConfigManager");
+		lockEntry = CoordinatorManager.getInstance().getCoordinator().getLocker()
+				.acquireLock(entry.getOlatResource(), getIdentity(), CourseFactory.COURSE_EDITOR_LOCK);
+		this.editable = (lockEntry != null && lockEntry.isSuccess()) && editable;
+		
 		// stack the translator to get attribs/elements
-		Translator pt = Util.createPackageTranslator(AbstractLayoutAttribute.class, ureq.getLocale(), getTranslator());
-		pt = Util.createPackageTranslator(AbstractLayoutElement.class, ureq.getLocale(), pt);
+		Translator pt = Util.createPackageTranslator(AbstractLayoutAttribute.class, getLocale(), getTranslator());
+		pt = Util.createPackageTranslator(AbstractLayoutElement.class, getLocale(), pt);
+		pt = Util.createPackageTranslator(RunMainController.class, getLocale(), pt);
 		setTranslator(pt);
+		
 		persistedCustomConfig = customCMgr.getCustomConfig(courseEnvironment);
 		initForm(ureq);
+		
+		if(lockEntry != null && !lockEntry.isSuccess()) {
+			String lockerName = "???";
+			if(lockEntry.getOwner() != null) {
+				lockerName = userManager.getUserDisplayName(lockEntry.getOwner());
+			}
+			showWarning("error.editoralreadylocked", new String[] { lockerName });
+		}
+	}
+	
+	
+	/**
+	 * @see org.olat.core.gui.control.DefaultController#doDispose()
+	 */
+	@Override
+	protected void doDispose() {
+		if (lockEntry != null && lockEntry.isSuccess()) {
+			CoordinatorManager.getInstance().getCoordinator().getLocker().releaseLock(lockEntry);
+			lockEntry = null;
+		}
 	}
 
 	/**
@@ -125,9 +158,9 @@ public class CourseLayoutGeneratorController extends FormBasicController {
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		setFormTitle("tab.layout.title");
 		
-		ArrayList<String> keys = new ArrayList<String>();
-		ArrayList<String> vals = new ArrayList<String>();
-		ArrayList<String> csss = new ArrayList<String>();
+		List<String> keys = new ArrayList<String>();
+		List<String> vals = new ArrayList<String>();
+		List<String> csss = new ArrayList<String>();
 
 		String actualCSSSettings = courseConfig.getCssLayoutRef();
 		
@@ -372,9 +405,15 @@ public class CourseLayoutGeneratorController extends FormBasicController {
 	 */
 	@Override
 	protected void formOK(UserRequest ureq) {
+		OLATResource courseRes = courseEntry.getOlatResource();
+		if(CourseFactory.isCourseEditSessionOpen(courseRes.getResourceableId())) {
+			showWarning("error.editoralreadylocked", new String[] { "???" });
+			return;
+		}
+		
 		String selection = styleSel.getSelectedKey();
 		
-		ICourse course = CourseFactory.openCourseEditSession(courseOres.getResourceableId());
+		ICourse course = CourseFactory.openCourseEditSession(courseRes.getResourceableId());
 		courseEnvironment = course.getCourseEnvironment();
 		courseConfig = courseEnvironment.getCourseConfig();
 		courseConfig.setCssLayoutRef(selection);
@@ -457,15 +496,4 @@ public class CourseLayoutGeneratorController extends FormBasicController {
 		}		
 		styleFlc.contextPut("guiWrapper", guiWrapper);
 	}
-	
-	
-	/**
-	 * @see org.olat.core.gui.control.DefaultController#doDispose()
-	 */
-	@Override
-	protected void doDispose() {
-		// nothing to dispose
-	}
-
-
 }
diff --git a/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java b/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java
index f6a672c35cdb30c313695a21e57e3783176fa45e..80fb5b9ffe4ba2ffeca1532fc10f9276baeb568f 100644
--- a/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java
+++ b/src/main/java/org/olat/course/config/ui/courselayout/CustomConfigManager.java
@@ -29,7 +29,8 @@ import java.util.Map.Entry;
 
 import javax.imageio.ImageIO;
 
-import org.olat.core.manager.BasicManager;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.util.FileUtils;
 import org.olat.core.util.vfs.LocalFileImpl;
 import org.olat.core.util.vfs.VFSContainer;
@@ -52,7 +53,9 @@ import com.thoughtworks.xstream.XStream;
  * Initial Date:  04.02.2011 <br>
  * @author Roman Haag, roman.haag@frentix.com, http://www.frentix.com
  */
-public class CustomConfigManager extends BasicManager {
+public class CustomConfigManager {
+	
+	private static final OLog log = Tracing.createLoggerFor(CustomConfigManager.class);
 	
 	private static final String IFRAME_CSS = "iframe.css";
 	private static final String MAIN_CSS = "main.css";
@@ -156,7 +159,7 @@ public class CustomConfigManager extends BasicManager {
 				return null;
 			}
 		} catch (IOException e) {
-			logError("Problem reading uploaded image", e);
+			log.error("Problem reading uploaded image", e);
 			return null;
 		}
 		return new int[] { width, height };
diff --git a/src/main/java/org/olat/course/run/CourseRuntimeController.java b/src/main/java/org/olat/course/run/CourseRuntimeController.java
index 89192a05bf730fb93aad7052914d3671bb956a2c..93167fa40f99bf0a99a3c9de208ff5510869b91c 100644
--- a/src/main/java/org/olat/course/run/CourseRuntimeController.java
+++ b/src/main/java/org/olat/course/run/CourseRuntimeController.java
@@ -1338,7 +1338,7 @@ public class CourseRuntimeController extends RepositoryEntryRuntimeController im
 				ICourse course = CourseFactory.loadCourse(getRepositoryEntry());
 				boolean managedLayout = RepositoryEntryManagedFlag.isManaged(getRepositoryEntry(), RepositoryEntryManagedFlag.layout);
 				CourseConfig courseConfig = course.getCourseEnvironment().getCourseConfig().clone();
-				CourseLayoutGeneratorController ctrl = new CourseLayoutGeneratorController(ureq, getWindowControl(), course, courseConfig,
+				CourseLayoutGeneratorController ctrl = new CourseLayoutGeneratorController(ureq, getWindowControl(), getRepositoryEntry(), courseConfig,
 				  		course.getCourseEnvironment(), !managedLayout);
 				listenTo(ctrl);
 				courseLayoutCtrl = pushController(ureq, translate("command.layout"), ctrl);
diff --git a/src/test/java/org/olat/course/certificate/manager/CertificatesManagerTest.java b/src/test/java/org/olat/course/certificate/manager/CertificatesManagerTest.java
index d56ce8d7a52d8590dc6c16d00f9b53bce215d387..84d3ac2af299090b98fccc2edb76efcab6095a70 100644
--- a/src/test/java/org/olat/course/certificate/manager/CertificatesManagerTest.java
+++ b/src/test/java/org/olat/course/certificate/manager/CertificatesManagerTest.java
@@ -95,7 +95,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 	@Test
 	public void createCertificate() throws URISyntaxException {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-1");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(identity);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(identity);
 		dbInstance.commitAndCloseSession();
 		
 		CertificateInfos certificateInfos = new CertificateInfos(identity, null, null);
@@ -118,7 +118,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 	@Test
 	public void loadCertificate() {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-1");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(identity);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(identity);
 		dbInstance.commitAndCloseSession();
 		
 		CertificateInfos certificateInfos = new CertificateInfos(identity, 5.0f, Boolean.TRUE);
@@ -158,7 +158,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 	@Test
 	public void loadLastCertificate() {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-1");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(identity);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(identity);
 		dbInstance.commitAndCloseSession();
 		
 		CertificateInfos certificateInfos = new CertificateInfos(identity, 5.0f, Boolean.TRUE);
@@ -188,7 +188,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-3");
 		Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-4");
 		Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-4");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(owner);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(owner);
 		repositoryEntryRelationDao.addRole(coach, entry, GroupRoles.coach.name());
 		repositoryEntryRelationDao.addRole(participant1, entry, GroupRoles.participant.name());
 		repositoryEntryRelationDao.addRole(participant2, entry, GroupRoles.participant.name());
@@ -228,7 +228,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-6");
 		Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-7");
 		Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-8");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(owner);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(owner);
 		BusinessGroup group = businessGroupService.createBusinessGroup(null, "certified-group", "Group with certification", null, null, false, false, entry);
 	    businessGroupRelationDao.addRole(coach, group, GroupRoles.coach.name());
 	    businessGroupRelationDao.addRole(participant1, group, GroupRoles.participant.name());
@@ -247,8 +247,11 @@ public class CertificatesManagerTest extends OlatTestCase {
 		waitCertificate(certificate1.getKey());
 		waitCertificate(certificate2.getKey());
 
+		dbInstance.commitAndCloseSession();
+		sleep(2000);
+
 		Calendar lastestNews = Calendar.getInstance();
-		lastestNews.add(Calendar.HOUR_OF_DAY, -1);
+		lastestNews.add(Calendar.DATE, -1);
 		
 		//check the notifications of the coach
 		List<Certificate> coachNotifications = certificatesManager.getCertificatesForNotifications(coach, entry, lastestNews.getTime());
@@ -265,7 +268,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 	@Test
 	public void uploadCertificate() throws URISyntaxException {
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-1");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(identity);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(identity);
 		dbInstance.commitAndCloseSession();
 		
 		Calendar cal = Calendar.getInstance();
@@ -360,7 +363,7 @@ public class CertificatesManagerTest extends OlatTestCase {
 	public void deleteCourse()  throws URISyntaxException  {
 		//create a course with a certificate
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-del-2");
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(identity);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(identity);
 		dbInstance.commitAndCloseSession();
 		Long resourceKey = entry.getOlatResource().getKey();
 		
@@ -399,8 +402,8 @@ public class CertificatesManagerTest extends OlatTestCase {
 	public void deleteCourse_paranoiaCheck()  throws URISyntaxException  {
 		//create a course with a certificate
 		Identity identity = JunitTestHelper.createAndPersistIdentityAsRndUser("cer-del-3");
-		RepositoryEntry entryToDelete = JunitTestHelper.deployDemoCourse(identity);
-		RepositoryEntry entry = JunitTestHelper.deployDemoCourse(identity);
+		RepositoryEntry entryToDelete = JunitTestHelper.deployBasicCourse(identity);
+		RepositoryEntry entry = JunitTestHelper.deployBasicCourse(identity);
 		dbInstance.commitAndCloseSession();
 		Long resourceKeyToDelete = entryToDelete.getOlatResource().getKey();
 		Long resourceKey = entry.getOlatResource().getKey();
diff --git a/src/test/java/org/olat/course/statistic/WeeklyStatisticUpdateManagerTest.java b/src/test/java/org/olat/course/statistic/WeeklyStatisticUpdateManagerTest.java
index 4bfe692994a741531ecc90cee6767385a62749a9..6b47e5cc6591801e52f469302e4b6f92f4e148cd 100644
--- a/src/test/java/org/olat/course/statistic/WeeklyStatisticUpdateManagerTest.java
+++ b/src/test/java/org/olat/course/statistic/WeeklyStatisticUpdateManagerTest.java
@@ -44,7 +44,9 @@ import org.olat.test.JunitTestHelper;
  */
 public class WeeklyStatisticUpdateManagerTest extends AbstractStatisticUpdateManagerTest {
 
-	private final SimpleDateFormat weeklyFormat = new SimpleDateFormat("yyyy-ww");
+	private final SimpleDateFormat weeklyFormat = new SimpleDateFormat("yyyy-w");
+	private final SimpleDateFormat weeklyMySQLFormat = new SimpleDateFormat("yyyy-ww");
+	
 	private final WeeklyStatisticManager weeklyStatisticManager = new WeeklyStatisticManager();
 
 	@Test
@@ -124,6 +126,10 @@ public class WeeklyStatisticUpdateManagerTest extends AbstractStatisticUpdateMan
 		cal.set(Calendar.MINUTE, 0);
 		cal.set(Calendar.SECOND, 0);
 		cal.set(Calendar.MILLISECOND, 0);
+		
+		if(dbInstance.isMySQL()) {
+			return weeklyMySQLFormat.format(cal.getTime());
+		}
 		return weeklyFormat.format(cal.getTime());
 	}