diff --git a/src/main/java/org/olat/admin/search/_content/index.html b/src/main/java/org/olat/admin/search/_content/index.html
index da99e3fed2dac6d3741f1fbf675cfa2dc7f264e2..6df15d4419d89e3ca83525699186077d4d1fd3c5 100644
--- a/src/main/java/org/olat/admin/search/_content/index.html
+++ b/src/main/java/org/olat/admin/search/_content/index.html
@@ -10,7 +10,7 @@
 	$r.translate("fullindexer.label.running.indexer") : $searchstatus.fullIndexerStatus.NumberRunningFolderIndexer<br />
 	$r.translate("fullindexer.label.available.indexer") : $searchstatus.fullIndexerStatus.NumberAvailableFolderIndexer<br />	
 	<br />
-	$r.translate("fullindexer.label.finished") : #if($searchstatus.fullIndexerStatus.lastFullIndexTime > 1) $searchstatus.fullIndexerStatus.lastFullIndexDateString #else - #end<br />
+	$r.translate("fullindexer.label.finished") : #if($searchstatus && $searchstatus.fullIndexerStatus.lastFullIndexTime > 1) $searchstatus.fullIndexerStatus.lastFullIndexDateString #else - #end<br />
 	$r.translate("fullindexer.label.time") : $searchstatus.fullIndexerStatus.indexingTime ms<br />
 	$r.translate("fullindexer.label.size") : $searchstatus.fullIndexerStatus.IndexSize
 </fieldset>
@@ -32,7 +32,7 @@
 	<br />
 	$r.translate("search.label.query") : $searchstatus.queryCount<br />
 	<div class="o_button_group">
-		#if (($searchstatus.fullIndexerStatus.status == "running") || ($searchstatus.fullIndexerStatus.status == "sleeping"))
+		#if ($searchstatus && ($searchstatus.fullIndexerStatus.status == "running" || $searchstatus.fullIndexerStatus.status == "sleeping"))
 		  $r.render("button.stopindexing")
 		#else
 		  $r.render("button.startindexing")
diff --git a/src/main/java/org/olat/admin/securitygroup/gui/multi/_content/index.html b/src/main/java/org/olat/admin/securitygroup/gui/multi/_content/index.html
index ec32cff14ca9e18a887951ef05f1573f64ed1ec0..6233423379cce8fb10b03afb2e793fffbbc6b1d3 100644
--- a/src/main/java/org/olat/admin/securitygroup/gui/multi/_content/index.html
+++ b/src/main/java/org/olat/admin/securitygroup/gui/multi/_content/index.html
@@ -1,4 +1,4 @@
-#if ($usercount > 0)
+#if ($usercount && $usercount > 0)
 <h4>$r.translate("import.title.finish.create")</h4>
 $r.render("table")
 #end
@@ -25,7 +25,7 @@ $r.render("table")
 #end
 
 <div class="o_button_group">
-#if ($usercount > 0)
+#if ($usercount && $usercount > 0)
 	#if ($r.available("next"))
 		$r.render("next")
 	#else
diff --git a/src/main/java/org/olat/commons/calendar/_content/importedCalConfig.html b/src/main/java/org/olat/commons/calendar/_content/importedCalConfig.html
index f21715c0b9ec550642e1bfba25126aa832fe3ffe..5c39b17809cce9a69be13097d64bee3260db29d4 100644
--- a/src/main/java/org/olat/commons/calendar/_content/importedCalConfig.html
+++ b/src/main/java/org/olat/commons/calendar/_content/importedCalConfig.html
@@ -12,7 +12,7 @@
     </div>
 #end
 
-#if ($calendars.size() > 5)
+#if ($calendars && $calendars.size() > 5)
 	<div class="o_cal_config_scrollwrapper">
 #end
 
@@ -59,7 +59,7 @@
   #end
 #end
 
-#if ($calendars.size() > 5)
+#if ($calendars && $calendars.size() > 5)
 	</div>
 #end
 </fieldset>
diff --git a/src/main/java/org/olat/commons/calendar/_content/manageCalendars.html b/src/main/java/org/olat/commons/calendar/_content/manageCalendars.html
index 50055df32150a0216ac40cf517aa875507cbcf78..f077526f5bda34624bd9b75dd0b40394e70c7c0a 100644
--- a/src/main/java/org/olat/commons/calendar/_content/manageCalendars.html
+++ b/src/main/java/org/olat/commons/calendar/_content/manageCalendars.html
@@ -1,4 +1,4 @@
-#if ($importedCalendarWrappers.size() > 0)
+#if ($importedCalendarWrappers && $importedCalendarWrappers.size() > 0)
 	<div class="clearfix">
         $r.render("importedCalendarConfig")
     </div>  
diff --git a/src/main/java/org/olat/core/_spring/mainCorecontext.xml b/src/main/java/org/olat/core/_spring/mainCorecontext.xml
index 9288b3598989a4007558d0828b9c1942165ad170..5fcb2120244a5a6dd71f6073e7bda732fe5e3f11 100644
--- a/src/main/java/org/olat/core/_spring/mainCorecontext.xml
+++ b/src/main/java/org/olat/core/_spring/mainCorecontext.xml
@@ -8,7 +8,7 @@
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context.xsd">
   
-	<context:component-scan base-package="org.olat.core.dispatcher.mapper,org.olat.core.commons.controllers.impressum" />
+	<context:component-scan base-package="org.olat.core.dispatcher.mapper,org.olat.core.commons.controllers.impressum,org.olat.core.gui.render.velocity" />
 
 	<bean id="coreSpringFactory" class="org.olat.core.CoreSpringFactory" />
 	
diff --git a/src/main/java/org/olat/core/commons/services/commentAndRating/ui/_content/userComments.html b/src/main/java/org/olat/core/commons/services/commentAndRating/ui/_content/userComments.html
index 366c8ed2cc39f8369b1da6b7e58cf220d3e99ffe..29f26ffe9e3bd3a0a9fde0529e1ed0549373d405 100644
--- a/src/main/java/org/olat/core/commons/services/commentAndRating/ui/_content/userComments.html
+++ b/src/main/java/org/olat/core/commons/services/commentAndRating/ui/_content/userComments.html
@@ -1,5 +1,5 @@
 <div class="o_block">
-	#if(($commentControllers.size() > 0) && $r.available("createCommentFormCtr"))
+	#if($commentControllers && $commentControllers.size() > 0 && $r.available("createCommentFormCtr"))
 		<div class="o_block">
 			<a id="o_comment_form_link" onclick="{o_scrollToElement('#o_comment_form'); return false;}" href="#o_comment_form">
 				$r.translate("comments.create.goto") <i class="o_icon o_icon_start"></i>
diff --git a/src/main/java/org/olat/core/configuration/PreWarm.java b/src/main/java/org/olat/core/configuration/PreWarm.java
new file mode 100644
index 0000000000000000000000000000000000000000..1624dd2ad68c48e424ed3952c91bed29b1638a2d
--- /dev/null
+++ b/src/main/java/org/olat/core/configuration/PreWarm.java
@@ -0,0 +1,5 @@
+package org.olat.core.configuration;
+
+public interface PreWarm extends Runnable {
+	
+}
diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityTemplatesPreWarm.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityTemplatesPreWarm.java
new file mode 100644
index 0000000000000000000000000000000000000000..469ee1e28b3b5dce6ca95a4e2ae1ab01d7664d28
--- /dev/null
+++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityTemplatesPreWarm.java
@@ -0,0 +1,69 @@
+package org.olat.core.gui.render.velocity;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.velocity.VelocityContext;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.olat.core.configuration.PreWarm;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.CodeHelper;
+import org.olat.core.util.WebappHelper;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * @author srosse
+ *
+ */
+@Service
+public class VelocityTemplatesPreWarm implements PreWarm {
+	private static final OLog log = Tracing.createLoggerFor(VelocityTemplatesPreWarm.class);
+
+	@Override
+	public void run() {
+		long start = System.nanoTime();
+		log.info("Start filling the velocity template cache");
+		
+		final VelocityContext context = new VelocityContext();
+		final AtomicInteger numOfTemplates = new AtomicInteger(0);
+		final File root = new File(WebappHelper.getContextRoot(), "WEB-INF/classes");
+		final Path fPath = root.toPath();
+		try {
+			Files.walkFileTree(fPath, new SimpleFileVisitor<Path>() {
+
+				@Override
+				public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
+					try {
+						
+						String path = fPath.relativize(file).toString();
+						if(path.endsWith(".html") && path.contains("/_content/")) {
+							StringOutput writer = new StringOutput();
+							VelocityHelper.getInstance().mergeContent(path, context, writer, null);
+							
+							numOfTemplates.incrementAndGet();
+						}
+					} catch (ResourceNotFoundException e) {
+						e.printStackTrace();
+					} catch (ParseErrorException e) {
+						e.printStackTrace();
+					}
+					return FileVisitResult.CONTINUE;
+				}
+			});
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		log.info("Velocity cache filled with " + numOfTemplates + " templates in (ms): " + CodeHelper.nanoToMilliTime(start));
+	}
+
+}
diff --git a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java
index 27c0ef718fcec5eebc61743f5a793f07265d7d66..72afd7b36c4f61eb9856e147ba38659d2c82f044 100644
--- a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java
+++ b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java
@@ -33,7 +33,9 @@ import javax.servlet.http.HttpServletResponse;
 import org.olat.admin.sysinfo.manager.SessionStatsManager;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DBFactory;
+import org.olat.core.commons.services.taskexecutor.TaskExecutorManager;
 import org.olat.core.commons.services.webdav.WebDAVDispatcher;
+import org.olat.core.configuration.PreWarm;
 import org.olat.core.dispatcher.Dispatcher;
 import org.olat.core.dispatcher.DispatcherModule;
 import org.olat.core.dispatcher.mapper.GlobalMapperRegistry;
@@ -120,6 +122,15 @@ public class OpenOLATServlet extends HttpServlet {
 		
 		//preload extensions
 		ExtManager.getInstance().getExtensions();
+		preWarm();
+	}
+	
+	private void preWarm() {
+		TaskExecutorManager executor = CoreSpringFactory.getImpl(TaskExecutorManager.class);
+		Map<String,PreWarm> preWarms = CoreSpringFactory.getBeansOfType(PreWarm.class);
+		for(PreWarm preWarm:preWarms.values()) {
+			executor.execute(preWarm);
+		}
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html
index 8da2c51efa4e9029fccf5f0a22432fac6d539d71..93513de891ffde25494914007dfb608551dce25d 100644
--- a/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html
+++ b/src/main/java/org/olat/core/util/i18n/ui/_content/translationToolI18nItemList.html
@@ -2,7 +2,7 @@
 ##	<h2>$r.translate("list.title")</h2>
 	<p>$r.translate("list.found.entries", ["$keysCount","$bundlesCount"])</p>
 	<p class="o_info">$r.translate("list.${customizingPrefix}intro")</p>
-#if ($i18nItems.size() > 0)
+#if ($i18nItems && $i18nItems.size() > 0)
 	<div class="o_button_group">
 		$r.render("allTranslateButtonTop")
 	</div>	
diff --git a/src/main/java/org/olat/course/editor/_content/deletenodehasreferences.html b/src/main/java/org/olat/course/editor/_content/deletenodehasreferences.html
index 0929c8217513ab247db2fef6eaf414cacd410bef..d464068b0786ff31c2b812014e766e3d532a0b24 100644
--- a/src/main/java/org/olat/course/editor/_content/deletenodehasreferences.html
+++ b/src/main/java/org/olat/course/editor/_content/deletenodehasreferences.html
@@ -2,7 +2,7 @@
 <p>
 $r.translate("deletenode.hasreferences.explain",$nodeident)
 </p>
-#if($entries.size()>0)
+#if($entries && $entries.size()>0)
 <ol>
 	#foreach ($entry in $entries)
 	<li>$entry</li>	
diff --git a/src/main/java/org/olat/course/nodes/projectbroker/_content/peekview.html b/src/main/java/org/olat/course/nodes/projectbroker/_content/peekview.html
index 2c70fb68607bf40e1a5639f69390c15f111c587b..b243264f93f0a101afcf1cc03369a62c74520c6c 100644
--- a/src/main/java/org/olat/course/nodes/projectbroker/_content/peekview.html
+++ b/src/main/java/org/olat/course/nodes/projectbroker/_content/peekview.html
@@ -1,5 +1,5 @@
 <div class="o_projectbroker_peekview clearfix">
-#if ( $myProjects.size() > 0 )
+#if ($myProjects && $myProjects.size() > 0 )
 	<div class="o_projectbroker_peekview_title">
 		$r.translate("peekview.selected.project.title")
 	</div>
@@ -16,14 +16,14 @@
 		</div>
 	#end
 #else
-	#if ($myCoachedProjects.size() == 0)
+	#if ($myCoachedProjects && $myCoachedProjects.size() == 0)
 		<div class="o_projectbroker_peekview_title">
 			$r.translate("peekview.no.selected.projects")
 		</div>
 	#end
 #end
 
-#if ($myCoachedProjects.size() > 0)
+#if ($myCoachedProjects && $myCoachedProjects.size() > 0)
 	<div class="o_projectbroker_peekview_title">
 		$r.translate("peekview.coached.project.title")
 	</div>
diff --git a/src/main/java/org/olat/course/nodes/st/_content/run.html b/src/main/java/org/olat/course/nodes/st/_content/run.html
index d8df7a4e57f7c793c1548a4405d818bd822a35a1..be64b7a7e2f837ea1527901bb5ad545ea0bfd7fd 100644
--- a/src/main/java/org/olat/course/nodes/st/_content/run.html
+++ b/src/main/java/org/olat/course/nodes/st/_content/run.html
@@ -43,7 +43,7 @@
 	</div>
  #end
 
-#if ($children.size() > 0)
+#if ($children && $children.size() > 0)
 	#set ($i = 0)
 	<div class="o_toc #if ($layoutType == 1) o_one_column #else o_two_column #end">
 		<div class="row">
diff --git a/src/main/java/org/olat/course/nodes/st/_content/stPeekView.html b/src/main/java/org/olat/course/nodes/st/_content/stPeekView.html
index 6ab5af8b49e8d455218fe9e28b83697d9c249fbc..36e06ad79f1d5db064109f8647effd7566256758 100644
--- a/src/main/java/org/olat/course/nodes/st/_content/stPeekView.html
+++ b/src/main/java/org/olat/course/nodes/st/_content/stPeekView.html
@@ -1,4 +1,4 @@
-#if($childNodes.size() > 0)
+#if($childNodes && $childNodes.size() > 0)
 <div class="o_st_peekview">
 	<ul class="list-unstyled">
 	#foreach ($coursenode in $childNodes)
diff --git a/src/main/java/org/olat/ims/_spring/imsContext.xml b/src/main/java/org/olat/ims/_spring/imsContext.xml
index adda71c27cc64e0c23cd432abfe185e714144d11..693c965cc707d163730dfd2cba234c74563425af 100644
--- a/src/main/java/org/olat/ims/_spring/imsContext.xml
+++ b/src/main/java/org/olat/ims/_spring/imsContext.xml
@@ -8,7 +8,7 @@
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context.xsd">
   
-	<context:component-scan base-package="org.olat.ims.lti.manager,org.olat.ims.qti.qpool,org.olat.ims.qti.statistics" />
+	<context:component-scan base-package="org.olat.ims.lti.manager,org.olat.ims.qti" />
 
 	<import resource="classpath:/org/olat/ims/qti/_spring/qtiContext.xml"/>
 
diff --git a/src/main/java/org/olat/ims/qti/QTIPreWarm.java b/src/main/java/org/olat/ims/qti/QTIPreWarm.java
new file mode 100644
index 0000000000000000000000000000000000000000..41079a6fc5ceeb5d78f49f8106065fe71e65d556
--- /dev/null
+++ b/src/main/java/org/olat/ims/qti/QTIPreWarm.java
@@ -0,0 +1,48 @@
+package org.olat.ims.qti;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.olat.core.configuration.PreWarm;
+import org.olat.core.id.Roles;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.olat.core.util.CodeHelper;
+import org.olat.ims.qti.fileresource.SurveyFileResource;
+import org.olat.ims.qti.fileresource.TestFileResource;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryManager;
+import org.springframework.stereotype.Service;
+
+import de.bps.onyx.plugin.OnyxModule;
+
+/**
+ * 
+ * 
+ * 
+ * Initial date: 07.04.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Service
+public class QTIPreWarm implements PreWarm {
+	
+	private static final OLog log = Tracing.createLoggerFor(QTIPreWarm.class);
+
+	@Override
+	public void run() {
+		long start = System.nanoTime();
+		log.info("Start scanning for QTI resources");
+		
+		Roles adminRoles = new Roles(true, false, false, false, false, false, false);
+		List<String> types = new ArrayList<>(2);
+		types.add(TestFileResource.TYPE_NAME);
+		types.add(SurveyFileResource.TYPE_NAME);
+
+		List<RepositoryEntry> res = RepositoryManager.getInstance().queryByTypeLimitAccess(null, types, adminRoles);
+		for(RepositoryEntry re:res) {
+			OnyxModule.isOnyxTest(re.getOlatResource());
+		}
+		log.info("QTI Resources scanned in (ms): " + CodeHelper.nanoToMilliTime(start));
+	}
+}
diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html
index 8e163f18dfff93eaef4e130ba3004e16e6f91c8c..b551a226bea58bec4ae1ddfd2b92dd04b80526f4 100644
--- a/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html
+++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_fibItem.html
@@ -8,7 +8,7 @@
 	</legend>
 	
 	<form action="$r.formURIbg("sfib")" id="ofo_tab_fibitem" $r.bgTarget() method="post">
-		#if ($question.getResponses().size() > 0)
+		#if ($question && $question.getResponses().size() > 0)
 		<table class="table table-bordered">
 		<thead>
 			<tr>
diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html
index 96771f7a56b7ff100ad3425106493b3dafed79c5..9ab0835b9d6d1c211ca29b92ed18e82f96578a47 100644
--- a/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html
+++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_kprimItem.html
@@ -32,7 +32,7 @@
 	</legend>
 	
 	<form action="$r.formURIbg("skprim")" id="ofo_tab_kprimitem" $r.bgTarget() method="post">
-#if ($question.getResponses().size() > 0)
+#if ($question && $question.getResponses().size() > 0)
 		<table class="table table-bordered" style="position:relative">
 		<thead>
 			<tr>
diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html
index 3c061686930c50ae37173ff51bc2c4f33d69cb90..2660c66f2d60068c72c5162609bfd00e6039f9c5 100644
--- a/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html
+++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_mcItem.html
@@ -30,7 +30,7 @@
 	</legend>
 	
 	<form action="$r.formURIbg("smc")" id="ofo_tab_mcitem" $r.bgTarget() method="post">
-#if ($question.getResponses().size() > 0)
+#if ($question && $question.getResponses().size() > 0)
 		<table class="table table-bordered" style="position:relative">
 		<thead><tr>
 				<th width="5">Pos</th>
diff --git a/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html b/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html
index cdfbf3a7952b9cf8142d3d32f2346855e85c1281..d96017dceea492f726727037d34b75dbe90fc867 100644
--- a/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html
+++ b/src/main/java/org/olat/ims/qti/editor/_content/tab_scItem.html
@@ -28,7 +28,7 @@
 	#end
 	</legend>
 
-#if ($question.getResponses().size() > 0)
+#if ($question && $question.getResponses().size() > 0)
 	<form action="$r.formURIbg("ssc")" id="ofo_tab_scitem" $r.bgTarget() method="post">
 		<table class="table table-bordered">
 			<thead><tr>
diff --git a/src/main/java/org/olat/instantMessaging/ui/_content/newMsgIcon.html b/src/main/java/org/olat/instantMessaging/ui/_content/newMsgIcon.html
index f880a5e2bbe615966d8f89040d3b0ce97f5e129e..339a9908078c31e4d2d690e87d5b321df82d1a85 100644
--- a/src/main/java/org/olat/instantMessaging/ui/_content/newMsgIcon.html
+++ b/src/main/java/org/olat/instantMessaging/ui/_content/newMsgIcon.html
@@ -1,5 +1,5 @@
 $r.render("chats")
-#if($iconsHolder.size() > 0)
+#if($iconsHolder && $iconsHolder.size() > 0)
 <div id="o_im_message">
 	<script type="text/javascript">
 	/* <![CDATA[ */
diff --git a/src/main/java/org/olat/login/_content/afterlogin.html b/src/main/java/org/olat/login/_content/afterlogin.html
index 48c74246509c1b3fd383b605cd016a29ef1d2a68..c1480c2a31fe1ebee5dbdaf60caa399e45464de0 100644
--- a/src/main/java/org/olat/login/_content/afterlogin.html
+++ b/src/main/java/org/olat/login/_content/afterlogin.html
@@ -1,4 +1,4 @@
-#if ($ctrlCount > 1)
+#if ($ctrlCount && $ctrlCount > 1)
 <div class="clearfix">
 	$r.render("wizard")
 </div>
diff --git a/src/main/java/org/olat/login/_content/login.html b/src/main/java/org/olat/login/_content/login.html
index d122deb3a81de11ba82973035f3a336dcfc579f9..6cf7c725cf13b9335bddb93956f6b453cbbdfb2e 100644
--- a/src/main/java/org/olat/login/_content/login.html
+++ b/src/main/java/org/olat/login/_content/login.html
@@ -34,7 +34,7 @@
 
 	<div class="o_login_box_wrapper">
 		<div class="o_login_box">
-			#if ($r.available("menu.guest") || $providerSet.size() > 1)
+			#if ($r.available("menu.guest") || ($providerSet && $providerSet.size() > 1))
 			<div class="o_login_providers">
 				<div class="btn-group btn-group-lg btn-group-justified">
 				#foreach ($authProvider in $providerSet)
diff --git a/src/main/java/org/olat/modules/wiki/_content/breadcrump.html b/src/main/java/org/olat/modules/wiki/_content/breadcrump.html
index dfcf78a9187702104967bfd7ca5ff58707b30faa..5e6bc229678955393663480cf6794cbb7e48230c 100644
--- a/src/main/java/org/olat/modules/wiki/_content/breadcrump.html
+++ b/src/main/java/org/olat/modules/wiki/_content/breadcrump.html
@@ -1,4 +1,4 @@
-#if($queue.size() > 0)
+#if($queue && $queue.size() > 0)
 	<ul>
 	#foreach($crumb in $queue)
 	<li><a title="$r.escapeHtml($crumb.getName())" href="$r.commandURIbg("go")$crumb.getName()" onclick="return o2cl()"  onkeypress="return o2cl()" $r.bgTarget()>$crumb.getDescription()</a></li>
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 0fa455f7b4d57f2e8d84894074bd356c7ba0095e..1e828ecd799a5834e8a27a26aab9c7a6475ac76a 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
@@ -302,7 +302,7 @@
 			</script>			
 			#end
 
-			#if ($v.getManagedFlags().size() > 0)
+			#if ($v && $v.getManagedFlags().size() > 0)
 			<div class="panel panel-default o_managedpanel">
 				<div class="panel-heading" data-toggle="collapse" data-target="#collapseManaged">
 			    	<h3 class="panel-title">
diff --git a/src/main/java/org/olat/repository/ui/list/_content/row_1.html b/src/main/java/org/olat/repository/ui/list/_content/row_1.html
index 47dd974ee2e25e7ae0e7487f540e0e4aef1a37ab..bd10074749d0878503ef08ecb4f0c8fb27397dee 100644
--- a/src/main/java/org/olat/repository/ui/list/_content/row_1.html
+++ b/src/main/java/org/olat/repository/ui/list/_content/row_1.html
@@ -53,7 +53,7 @@
 			#end
 		#end
 
-		#if($row.isMember() || $row.getVisit() > 0)
+		#if($row && ($row.isMember() || $row.getVisit() > 0))
 			#if($row.passed || $row.failed)
 			<div class="row">
 				#if($row.passed)
diff --git a/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html b/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html
index a52eed8805cfc66d097104d101a10c8f1f7a4b64..a47c183830d794d43c62f611f8b999ac02dcc164 100644
--- a/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html
+++ b/src/main/java/org/olat/resource/accesscontrol/ui/_content/configuration_list.html
@@ -1,4 +1,4 @@
-#if ($confControllers.size() > 0)
+#if ($confControllers && $confControllers.size() > 0)
 	#foreach($confController in $confControllers)
 		#set($css = $confController.getLink().getMethod().getMethodCssClass())
 		#set($desc = $confController.getLink().getOffer().getDescription())
diff --git a/src/main/java/org/olat/search/ui/_content/contextHelpResult.html b/src/main/java/org/olat/search/ui/_content/contextHelpResult.html
index 6bff872bc3835c4b507770d68027bbb4dba4d96d..7381614a73d82ad7c62e919dfe264ea213518f3e 100644
--- a/src/main/java/org/olat/search/ui/_content/contextHelpResult.html
+++ b/src/main/java/org/olat/search/ui/_content/contextHelpResult.html
@@ -2,7 +2,7 @@
 	<div class="o_search_result_title">
 		#set($contextpath = $result.getResourceUrl() )
 	  	#set($lastIndex = $contextpath.lastIndexOf("path=") + 5 )
-	  	#if($lastIndex>=0)
+	  	#if($lastIndex && $lastIndex>=0)
 	  		#set($minone=$contextpath.length() - 1)
 	    	#set($contextpath = $contextpath.substring($lastIndex,$minone) )
 	  	#end
diff --git a/src/main/java/org/olat/user/UserDisplayNamePreWarm.java b/src/main/java/org/olat/user/UserDisplayNamePreWarm.java
new file mode 100644
index 0000000000000000000000000000000000000000..1c8b7b266f9abc1c1621cdb95601a4fae9c6cb59
--- /dev/null
+++ b/src/main/java/org/olat/user/UserDisplayNamePreWarm.java
@@ -0,0 +1,28 @@
+package org.olat.user;
+
+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.springframework.stereotype.Service;
+
+/**
+ * 
+ * @author srosse
+ *
+ */
+@Service
+public class UserDisplayNamePreWarm implements PreWarm {
+	
+	private static final OLog log = Tracing.createLoggerFor(UserDisplayNamePreWarm.class);
+
+	@Override
+	public void run() {
+		long start = System.nanoTime();
+		log.info("Start filling the user displayname cache");
+		
+		int numOfNames = UserManager.getInstance().warmUp();
+
+		log.info("Display name cache filled with " + numOfNames + " names in (ms): " + CodeHelper.nanoToMilliTime(start));
+	}
+}
diff --git a/src/main/java/org/olat/user/UserManager.java b/src/main/java/org/olat/user/UserManager.java
index 729942f138527479a1bad2cc8eda3c48113a99a1..9aa14e10455301b54831307fb7afcb7fcf9fcf9e 100644
--- a/src/main/java/org/olat/user/UserManager.java
+++ b/src/main/java/org/olat/user/UserManager.java
@@ -243,6 +243,8 @@ public abstract class UserManager extends BasicManager {
 		this.userPropertiesConfig = userPropertiesConfig;
 	}
 	
+	public abstract int warmUp();
+	
 	public abstract String getUsername(Long identityKey);
 
 	/**
diff --git a/src/main/java/org/olat/user/UserManagerImpl.java b/src/main/java/org/olat/user/UserManagerImpl.java
index fb8f78c4f5a05d1bb813f1cbf31203cf463ef211..004c66bf1d7246ad97123dfb038f45790d67c4d0 100644
--- a/src/main/java/org/olat/user/UserManagerImpl.java
+++ b/src/main/java/org/olat/user/UserManagerImpl.java
@@ -30,6 +30,7 @@ import java.util.Locale;
 import java.util.Map;
 
 import javax.annotation.PostConstruct;
+import javax.persistence.EntityManager;
 import javax.persistence.TypedQuery;
 
 import org.olat.basesecurity.BaseSecurity;
@@ -436,6 +437,31 @@ public class UserManagerImpl extends UserManager {
 		if(isLogDebugEnabled()) logDebug("Delete all user-attributtes for user=" + user);
 	}
 
+	@Override
+	public int warmUp() {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select ident from ").append(IdentityShort.class.getName()).append(" as ident");
+		
+		EntityManager em = dbInstance.getCurrentEntityManager();
+		
+		int batchSize = 5000;
+		TypedQuery<IdentityShort> query = em.createQuery(sb.toString(), IdentityShort.class)
+				.setMaxResults(batchSize);
+		int count = 0;
+		
+		List<IdentityShort> identities;
+		do {
+			identities = query.setFirstResult(count).getResultList();
+			em.clear();
+			for(IdentityShort identity:identities) {
+				getUserDisplayName(identity);
+			}
+			count += identities.size();
+		} while(identities.size() >= batchSize);
+		
+		return count;
+	}
+
 	@Override
 	public String getUsername(Long identityKey) {
 		String username = userToNameCache.get(identityKey);
diff --git a/src/main/java/org/olat/user/_spring/userContext.xml b/src/main/java/org/olat/user/_spring/userContext.xml
index 5c0a46f11b83ceff68c999abc19d94aadfeb322b..1eaedfecf1bcf92346e5c1695d865146de89961f 100644
--- a/src/main/java/org/olat/user/_spring/userContext.xml
+++ b/src/main/java/org/olat/user/_spring/userContext.xml
@@ -1,9 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xmlns:context="http://www.springframework.org/schema/context" 
 	xsi:schemaLocation="
   http://www.springframework.org/schema/beans 
-  http://www.springframework.org/schema/beans/spring-beans.xsd">
+  http://www.springframework.org/schema/beans/spring-beans.xsd
+  http://www.springframework.org/schema/context 
+  http://www.springframework.org/schema/context/spring-context.xsd">
+  
+	<context:component-scan base-package="org.olat.user" />
 
 	<import resource="classpath:/org/olat/user/propertyhandlers/_spring/userPropertiesContext.xml"/>
 	<import resource="classpath:/org/olat/user/propertyhandlers/_spring/userPropertriesHandlersContext.xml"/>