diff --git a/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java b/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java
index bfa8d954bafcccabc42b137923e65977f8709023..e0c4dc9fb4e8e1403572a04d806aec36d47251cc 100644
--- a/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java
+++ b/src/main/java/org/olat/admin/sysinfo/ThreadInfosManager.java
@@ -26,13 +26,13 @@ import java.lang.management.ThreadMXBean;
 import java.text.NumberFormat;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
@@ -55,7 +55,7 @@ public class ThreadInfosManager implements Sampler {
 	private final static NumberFormat percentFormat = NumberFormat.getPercentInstance(Locale.ENGLISH);
 	
 	private long prevUpTime;
-	private Map<Long,ThreadView> threadMap = new HashMap<Long,ThreadView>();
+	private Map<Long,ThreadView> threadMap = new ConcurrentHashMap<Long,ThreadView>();
 
 	public List<ThreadView> getThreadViews() {
 		if(threadMap.isEmpty()) {
diff --git a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java
index a168bc9c1e12763ccf55792fc107fe84a3bcf14a..b8ef4f4f032558bbf460b3ec98991315acd259b2 100644
--- a/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java
+++ b/src/main/java/org/olat/core/dispatcher/mapper/manager/MapperServiceImpl.java
@@ -22,10 +22,10 @@ package org.olat.core.dispatcher.mapper.manager;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Calendar;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.olat.core.dispatcher.DispatcherAction;
 import org.olat.core.dispatcher.mapper.Mapper;
@@ -51,9 +51,9 @@ import org.springframework.stereotype.Service;
 @Service("mapperService")
 public class MapperServiceImpl implements MapperService {
 	
-	private Map<String,Mapper> mapperIdToMapper = new HashMap<String,Mapper>();
-	private Map<Mapper,String> mapperToMapperId = new HashMap<Mapper, String>();
-	private Map<String,List<String>> sessionIdToMapperIds = new HashMap<String,List<String>>();
+	private Map<String,Mapper> mapperIdToMapper = new ConcurrentHashMap<String,Mapper>();
+	private Map<Mapper,String> mapperToMapperId = new ConcurrentHashMap<Mapper, String>();
+	private Map<String,List<String>> sessionIdToMapperIds = new ConcurrentHashMap<String,List<String>>();
 
 	private CacheWrapper mapperCache;
 	
diff --git a/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java b/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java
index afa9f3265b798c8884ba6f90ceab26b401b4185f..a11a3ca6e26e6bf5a95a83cc3b95ee7bbb37967c 100644
--- a/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java
+++ b/src/main/java/org/olat/core/gui/media/ClasspathMediaResource.java
@@ -32,8 +32,8 @@ import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.UnknownHostException;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.jar.JarFile;
 import java.util.zip.ZipEntry;
 
@@ -58,8 +58,8 @@ public class ClasspathMediaResource extends LogDelegator implements MediaResourc
 	private Long size;
 	private URL url;
 	// local cache to minimize access to jar content (expensive)
-	private static final Map<String,Long> cachedJarResourceLastModified = new HashMap<String, Long>();
-	private static final Map<String,Long> cachedJarResourceSize = new HashMap<String, Long>();
+	private static final Map<String,Long> cachedJarResourceLastModified = new ConcurrentHashMap<String, Long>();
+	private static final Map<String,Long> cachedJarResourceSize = new ConcurrentHashMap<String, Long>();
 
 	/**
 	 * Constructor that uses class loader of this (ClasspathMediaResource) class
diff --git a/src/main/java/org/olat/core/logging/Tracing.java b/src/main/java/org/olat/core/logging/Tracing.java
index 6962bea0e974de356ee03aba31ed4cdd46b05edf..cf7be02986d6470bb0c6b7716ee63c4273acb086 100644
--- a/src/main/java/org/olat/core/logging/Tracing.java
+++ b/src/main/java/org/olat/core/logging/Tracing.java
@@ -28,10 +28,10 @@ package org.olat.core.logging;
 
 import java.util.Collections;
 import java.util.Comparator;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -107,7 +107,7 @@ public class Tracing {
 	private static long __performanceRefNum__ = 0;
 	
 	// VM local cache to have one logger object per class
-	private static final Map<Class, OLog> loggerLookupMap = new HashMap<Class, OLog>();
+	private static final Map<Class, OLog> loggerLookupMap = new ConcurrentHashMap<Class, OLog>();
 
 	/**
 	 * per-thread singleton holding the actual HttpServletRequest which is the
diff --git a/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java b/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java
index 0fe7192481fd31cca9291eeaa694dfda9bed895a..cbefe06fa017ea520f9bd9480b3e18eef75b6e9d 100644
--- a/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java
+++ b/src/main/java/org/olat/core/util/event/businfo/BusListenerInfos.java
@@ -25,11 +25,11 @@
 */ 
 package org.olat.core.util.event.businfo;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 import java.util.TreeSet;
-import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.olat.core.id.OLATResourceable;
 
@@ -48,7 +48,7 @@ import org.olat.core.id.OLATResourceable;
  */
 public class BusListenerInfos {
 	// key: nodeId, values: a map with keys: derivedString of a olatresourceable; values: listener count of this node
-	private Map<Integer, BusListenerInfo> nodeBusInfos = new HashMap<Integer, BusListenerInfo>();
+	private Map<Integer, BusListenerInfo> nodeBusInfos = new ConcurrentHashMap<Integer, BusListenerInfo>();
 	
 	public int getListenerCountFor(OLATResourceable ores) {
 		synchronized (nodeBusInfos) {//cluster_ok
@@ -73,13 +73,13 @@ public class BusListenerInfos {
 	}
 	
 	public String getAsString() {
+		StringBuilder sb = new StringBuilder();
 		Set<String> allNodesDerivedStrings = new TreeSet<String>(); // the derived strings are sorted then
 		for (BusListenerInfo busInfo : nodeBusInfos.values()) {
 			allNodesDerivedStrings.addAll(busInfo.getAllDerivedStrings());
 		}
 		
 		// for each derived-string, print out the total number of listeners, and the contribution of each node
-		StringBuilder sb = new StringBuilder();
 		for (String derived : allNodesDerivedStrings) {
 			int total = 0;
 			sb.append(derived).append(" : ");
@@ -90,11 +90,7 @@ public class BusListenerInfos {
 				total+= cnt;
 			}
 			sb.append(" Sum:").append(total).append("<br />");
-			
 		}
 		return sb.toString();
 	}
-	
-	
-	
 }
diff --git a/src/main/java/org/olat/core/util/i18n/I18nManager.java b/src/main/java/org/olat/core/util/i18n/I18nManager.java
index 2eadd5fca2e9247806cb33abe42605916146650c..0d2e714bdec9804654146198e66bbdca84df843b 100644
--- a/src/main/java/org/olat/core/util/i18n/I18nManager.java
+++ b/src/main/java/org/olat/core/util/i18n/I18nManager.java
@@ -50,6 +50,7 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
 import java.util.jar.JarOutputStream;
@@ -128,9 +129,9 @@ public class I18nManager extends BasicManager {
 
 	// keys: bundlename ":" locale.toString() (e.g. "org.olat.admin:de_DE");
 	// values: PropertyFile
-	private Map<String, Properties> cachedBundles = new HashMap<String, Properties>();
-	private Map<String, String> cachedJSTranslatorData = new HashMap<String, String>();
-	private Map<String, Set<String>> referencingBundlesIndex = new HashMap<String, Set<String>>();
+	private Map<String, Properties> cachedBundles = new ConcurrentHashMap<String, Properties>();
+	private Map<String, String> cachedJSTranslatorData = new ConcurrentHashMap<String, String>();
+	private Map<String, Set<String>> referencingBundlesIndex = new ConcurrentHashMap<String, Set<String>>();
 	private boolean cachingEnabled = true;
 
 	private static FilenameFilter i18nFileFilter = new FilenameFilter() {
@@ -1543,9 +1544,9 @@ public class I18nManager extends BasicManager {
 	 */
 	public void setCachingEnabled(boolean useCache) {
 		if (useCache) {
-			cachedBundles = new HashMap<String, Properties>();
-			cachedJSTranslatorData = new HashMap<String, String>();
-			referencingBundlesIndex = new HashMap<String, Set<String>>();
+			cachedBundles = new ConcurrentHashMap<String, Properties>();
+			cachedJSTranslatorData = new ConcurrentHashMap<String, String>();
+			referencingBundlesIndex = new ConcurrentHashMap<String, Set<String>>();
 		} else {
 			cachedBundles = new AlwaysEmptyMap<String, Properties>();
 			cachedJSTranslatorData = new AlwaysEmptyMap<String, String>();
diff --git a/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java b/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java
index d74103fb144a5e53e186c5c222e3484e2047db43..7abc5d21364c39add5c2e8d643fe1cffc493ac80 100644
--- a/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java
+++ b/src/main/java/org/olat/core/util/threadlog/RequestBasedLogLevelManager.java
@@ -24,9 +24,9 @@
 */
 package org.olat.core.util.threadlog;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -53,7 +53,7 @@ public class RequestBasedLogLevelManager {
 	private final String PROP_NAME_REQUESTBASED_IPS = "RequestBasedIps";
 	
 	/** The core of this class is this map containing the list of ip addresses mapped to logconfigs **/
-	private final Map<String,LogConfig> remoteAddrs2LogConfigs = new HashMap<String,LogConfig>();
+	private final Map<String,LogConfig> remoteAddrs2LogConfigs = new ConcurrentHashMap<String,LogConfig>();
 	
 	/** A reference to the persistentProperties used to persistent the ip address map **/
 	private PersistedProperties persistentProperties;
diff --git a/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java b/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java
index 6fd452428b369cbeea6f10da5f0fea78d02d1c41..3c2b25f91e009ffbd79599abc00da34f073d7a6b 100644
--- a/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java
+++ b/src/main/java/org/olat/core/util/threadlog/UserBasedLogLevelManager.java
@@ -24,9 +24,9 @@
 */
 package org.olat.core.util.threadlog;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.StringTokenizer;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.log4j.Appender;
 import org.apache.log4j.Level;
@@ -51,7 +51,7 @@ public class UserBasedLogLevelManager {
 	private final String PROP_NAME_USERNAMES2LEVELS = "Usernames2Levels";
 	
 	/** The core of this class is this map containing the list of usernames mapped to logconfigs **/
-	private final Map<String,LogConfig> username2LogConfig = new HashMap<String,LogConfig>();
+	private final Map<String,LogConfig> username2LogConfig = new ConcurrentHashMap<String,LogConfig>();
 	
 	/** A reference to the persistentProperties used to persistent the usernames map **/
 	private PersistedProperties persistentProperties;
diff --git a/src/main/java/org/olat/course/CourseFactory.java b/src/main/java/org/olat/course/CourseFactory.java
index 0e36ac188301a4baa66c2d35928360d03941425e..8fae2b097b2f48458d9a581f20c172880b5de9b4 100644
--- a/src/main/java/org/olat/course/CourseFactory.java
+++ b/src/main/java/org/olat/course/CourseFactory.java
@@ -28,7 +28,6 @@ package org.olat.course;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Collection;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -144,11 +143,11 @@ import org.olat.util.logging.activity.LoggingResourceable;
 public class CourseFactory extends BasicManager {
 		
 	private static CacheWrapper loadedCourses;
-	private static ConcurrentHashMap <Long, ModifyCourseEvent> modifyCourseEvents = new ConcurrentHashMap <Long, ModifyCourseEvent>();
+	private static ConcurrentHashMap<Long, ModifyCourseEvent> modifyCourseEvents = new ConcurrentHashMap<Long, ModifyCourseEvent>();
 
 	public static final String COURSE_EDITOR_LOCK = "courseEditLock";
   //this is the lock that must be aquired at course editing, copy course, export course, configure course.
-	private static Map<Long,PersistingCourseImpl> courseEditSessionMap = new HashMap<Long,PersistingCourseImpl>();
+	private static Map<Long,PersistingCourseImpl> courseEditSessionMap = new ConcurrentHashMap<Long,PersistingCourseImpl>();
 	private static OLog log = Tracing.createLoggerFor(CourseFactory.class);
 	private static RepositoryManager repositoryManager;
 	private static OLATResourceManager olatResourceManager;
diff --git a/src/main/java/org/olat/course/assessment/AssessmentMainController.java b/src/main/java/org/olat/course/assessment/AssessmentMainController.java
index 770ee1c8f6d49c4cbee0308cb635aa8caa048ee9..ace827bcf1a517a5d59ce5ce56991db5843d7d2c 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentMainController.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentMainController.java
@@ -31,6 +31,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.lang.StringEscapeUtils;
 import org.olat.admin.user.UserTableDataModel;
@@ -195,8 +196,8 @@ AssessmentMainController(UserRequest ureq, WindowControl wControl, StackedContro
 		this.stackPanel = stackPanel;
 		this.ores = ores;
 		this.callback = assessmentCallback;
-		localUserCourseEnvironmentCache = new HashMap<Long, UserCourseEnvironment>(10000);
-		initialLaunchDates = new HashMap<Long,Date>(10000);
+		localUserCourseEnvironmentCache = new ConcurrentHashMap<Long, UserCourseEnvironment>();
+		initialLaunchDates = new ConcurrentHashMap<Long,Date>();
 		
     //use the PropertyHandlerTranslator	as tableCtr translator
 		propertyHandlerTranslator = UserManager.getInstance().getPropertyHandlerTranslator(getTranslator());
@@ -1113,7 +1114,7 @@ AssessmentMainController(UserRequest ureq, WindowControl wControl, StackedContro
 			ICourse course = CourseFactory.loadCourse(ores);
 			// 1) preload assessment cache with database properties
 			long start = 0;
-			boolean logDebug = true || log.isDebug();
+			boolean logDebug = log.isDebug();
 			if(logDebug) start = System.currentTimeMillis();
 			List<Identity> identities = getAllAssessableIdentities();
 			course.getCourseEnvironment().getAssessmentManager().preloadCache(identities);
@@ -1126,7 +1127,7 @@ AssessmentMainController(UserRequest ureq, WindowControl wControl, StackedContro
 				if (Thread.interrupted()) break;
 			}
 			if (logDebug) {
-				log.info("Preloading of user course environment cache for course::" + course.getResourceableId() + " for "
+				log.debug("Preloading of user course environment cache for course::" + course.getResourceableId() + " for "
 						+ localUserCourseEnvironmentCache.size() + " user course environments. Loading time::" + (System.currentTimeMillis() - start)
 						+ "ms");
 			}
diff --git a/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java b/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java
index 90cdb1c83fd036a3ba755ac447f3576555c3f01c..91dd98f3b16d6e0e3c0136fd2279d0d97f13d920 100644
--- a/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java
+++ b/src/main/java/org/olat/restapi/security/RestSecurityBeanImpl.java
@@ -20,10 +20,10 @@
 package org.olat.restapi.security;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.servlet.http.HttpSession;
 
@@ -42,9 +42,9 @@ import org.olat.core.util.StringHelper;
  */
 public class RestSecurityBeanImpl implements RestSecurityBean {
 
-	private Map<String,Long> tokenToIdentity = new HashMap<String,Long>();
-	private Map<String,List<String>> tokenToSessionIds = new HashMap<String,List<String>>();
-	private Map<String,String> sessionIdToTokens = new HashMap<String,String>();
+	private Map<String,Long> tokenToIdentity = new ConcurrentHashMap<String,Long>();
+	private Map<String,List<String>> tokenToSessionIds = new ConcurrentHashMap<String,List<String>>();
+	private Map<String,String> sessionIdToTokens = new ConcurrentHashMap<String,String>();
 	
 	@Override
 	public String generateToken(Identity identity, HttpSession session) {