diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java
index 55fd8a63e203fcd2e32d76ac006ca848de2bde4e..131065ef0e4dd952cc79271b2b3769b9b50a2649 100644
--- a/src/main/java/org/olat/course/CourseFactory.java
+++ b/src/main/java/org/olat/course/CourseFactory.java
@@ -70,7 +70,6 @@ import org.olat.core.logging.AssertException;
 import org.olat.core.logging.OLATRuntimeException;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
-import org.olat.core.manager.BasicManager;
 import org.olat.core.util.CodeHelper;
 import org.olat.core.util.ExportUtil;
 import org.olat.core.util.FileUtils;
@@ -147,7 +146,7 @@ import org.olat.util.logging.activity.LoggingResourceable;
  * @author Felix Jost
  * @author guido
  */
-public class CourseFactory extends BasicManager {
+public class CourseFactory {
 		
 	private static CacheWrapper<Long,PersistingCourseImpl> loadedCourses;
 	private static ConcurrentMap<Long, ModifyCourseEvent> modifyCourseEvents = new ConcurrentHashMap<Long, ModifyCourseEvent>();
diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java
index 14e20cdf7c98d9e18b2885659e0b4ea9f6657d3f..271137a6e18f4903bdc0e86603d38624ee619eb7 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentModeCoordinationServiceImpl.java
@@ -34,6 +34,7 @@ import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
 import org.olat.core.util.coordinate.CoordinatorManager;
 import org.olat.core.util.event.GenericEventListener;
+import org.olat.course.CourseFactory;
 import org.olat.course.assessment.AssessmentMode;
 import org.olat.course.assessment.AssessmentMode.Status;
 import org.olat.course.assessment.AssessmentModeCoordinationService;
@@ -43,6 +44,8 @@ import org.olat.course.assessment.model.AssessmentModeImpl;
 import org.olat.course.assessment.model.CoordinatedAssessmentMode;
 import org.olat.course.assessment.model.TransientAssessmentMode;
 import org.olat.group.ui.edit.BusinessGroupModifiedEvent;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -62,6 +65,8 @@ public class AssessmentModeCoordinationServiceImpl implements AssessmentModeCoor
 	@Autowired
 	private AssessmentModule assessmentModule;
 	@Autowired
+	private RepositoryService repositoryService;
+	@Autowired
 	private CoordinatorManager coordinatorManager;
 	@Autowired
 	private AssessmentModeManagerImpl assessmentModeManager;
@@ -268,6 +273,9 @@ public class AssessmentModeCoordinationServiceImpl implements AssessmentModeCoor
 		if(currentStatus == null || currentStatus != status) {
 			mode.setStatus(status);
 			mode = dbInstance.getCurrentEntityManager().merge(mode);
+			if(status == Status.leadtime || status == Status.assessment) {
+				warmUpAssessment(mode);
+			}
 			dbInstance.commit();
 		}
 		return mode;
@@ -330,4 +338,9 @@ public class AssessmentModeCoordinationServiceImpl implements AssessmentModeCoor
 		}
 		return mode;
 	}
+	
+	private void warmUpAssessment(AssessmentMode mode) {
+		RepositoryEntry entry = repositoryService.loadByKey(mode.getRepositoryEntry().getKey());
+		CourseFactory.loadCourse(entry);
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/course/assessment/manager/LastCoursesPreWarm.java b/src/main/java/org/olat/course/assessment/manager/LastCoursesPreWarm.java
new file mode 100644
index 0000000000000000000000000000000000000000..eda5f054d0835ff4b1c037bafc625db93f91d3ea
--- /dev/null
+++ b/src/main/java/org/olat/course/assessment/manager/LastCoursesPreWarm.java
@@ -0,0 +1,58 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.course.assessment.manager;
+
+import java.util.List;
+
+import org.olat.core.configuration.PreWarm;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.CodeHelper;
+import org.olat.course.CourseFactory;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.manager.RepositoryEntryDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * Initial date: 18.02.2016<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Service
+public class LastCoursesPreWarm implements PreWarm {
+	
+	private static final OLog log = Tracing.createLoggerFor(LastCoursesPreWarm.class);
+	
+	@Autowired
+	private RepositoryEntryDAO repositoryEntryDao;
+
+	@Override
+	public void run() {
+		long start = System.nanoTime();
+		List<RepositoryEntry> entries = repositoryEntryDao
+				.getLastUsedRepositoryEntries("CourseModule", 0, 100);
+		for(RepositoryEntry entry:entries) {
+			CourseFactory.loadCourse(entry);
+		}
+		log.info(entries.size() + " Courses preloaded in (ms): " + CodeHelper.nanoToMilliTime(start));
+	}
+}
diff --git a/src/main/java/org/olat/ims/qti/QTIPreWarm.java b/src/main/java/org/olat/ims/qti/QTIPreWarm.java
index c6fb853787e7e77aaf7655543fb8c8ed8636b069..64b0c50502c48ebcac4820e3926fb76663c7a622 100644
--- a/src/main/java/org/olat/ims/qti/QTIPreWarm.java
+++ b/src/main/java/org/olat/ims/qti/QTIPreWarm.java
@@ -22,8 +22,7 @@ package org.olat.ims.qti;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.configuration.PreWarm;
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
@@ -32,6 +31,7 @@ import org.olat.ims.qti.fileresource.SurveyFileResource;
 import org.olat.ims.qti.fileresource.TestFileResource;
 import org.olat.resource.OLATResource;
 import org.olat.resource.OLATResourceManager;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import de.bps.onyx.plugin.OnyxModule;
@@ -48,6 +48,11 @@ import de.bps.onyx.plugin.OnyxModule;
 public class QTIPreWarm implements PreWarm {
 	
 	private static final OLog log = Tracing.createLoggerFor(QTIPreWarm.class);
+	
+	@Autowired
+	private DB dbInstance;
+	@Autowired
+	private OLATResourceManager olatResourceManager;
 
 	@Override
 	public void run() {
@@ -57,8 +62,8 @@ public class QTIPreWarm implements PreWarm {
 		List<String> types = new ArrayList<>(2);
 		types.add(TestFileResource.TYPE_NAME);
 		types.add(SurveyFileResource.TYPE_NAME);
-		List<OLATResource> qtiResources = CoreSpringFactory.getImpl(OLATResourceManager.class).findResourceByTypes(types);
-		DBFactory.getInstance().commitAndCloseSession();
+		List<OLATResource> qtiResources = olatResourceManager.findResourceByTypes(types);
+		dbInstance.commitAndCloseSession();
 		for(OLATResource qtiResource:qtiResources) {
 			OnyxModule.isOnyxTest(qtiResource);
 		}
diff --git a/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java b/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java
index 628025bdbc975388a5881570091780971a8c9ba7..2aa927ce1fedac69952d60bf6d845fcbdcfd304a 100644
--- a/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java
+++ b/src/main/java/org/olat/repository/manager/RepositoryEntryDAO.java
@@ -155,4 +155,21 @@ public class RepositoryEntryDAO {
 		}
 		return entries.get(0);
 	}
+	
+	public List<RepositoryEntry> getLastUsedRepositoryEntries(String resourceTypeName, int firstResult, int maxResults) {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select v from ").append(RepositoryEntry.class.getName()).append(" as v ")
+		  .append(" inner join fetch v.olatResource as ores")
+		  .append(" inner join fetch v.statistics as statistics")
+		  .append(" left join fetch v.lifecycle as lifecycle")
+		  .append(" where ores.resName=:resourceTypeName")
+		  .append(" order by statistics.lastUsage desc");
+		
+		return dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), RepositoryEntry.class)
+				.setFirstResult(firstResult)
+				.setMaxResults(maxResults)
+				.setParameter("resourceTypeName", resourceTypeName)
+				.getResultList();
+	}
 }
\ No newline at end of file