diff --git a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
index 9d9096b2a805f6667d5ede8d38d8936289b48764..e41043e2735aa5cf29493b220e926cac800741ea 100644
--- a/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
+++ b/src/main/java/org/olat/group/ui/main/AbstractMemberListController.java
@@ -204,7 +204,6 @@ public abstract class AbstractMemberListController extends FormBasicController i
 		initForm(ureq);
 	}
 	
-	
 	@Override
 	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
 		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
@@ -267,19 +266,17 @@ public abstract class AbstractMemberListController extends FormBasicController i
 			if (userPropertyHandler == null) continue;
 
 			String propName = userPropertyHandler.getName();
-			boolean visible = UserManager.getInstance().isMandatoryUserProperty(USER_PROPS_ID , userPropertyHandler);
-			if(visible) {
-				FlexiColumnModel col;
-				if(UserConstants.FIRSTNAME.equals(propName)
-						|| UserConstants.LASTNAME.equals(propName)) {
-					col = new StaticFlexiColumnModel(userPropertyHandler.i18nColumnDescriptorLabelKey(),
-							colPos++, TABLE_ACTION_EDIT, true, propName,
-							new StaticFlexiCellRenderer(TABLE_ACTION_EDIT, new TextFlexiCellRenderer()));
-				} else {
-					col = new DefaultFlexiColumnModel(true, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos++, true, propName);
-				}
-				columnsModel.addFlexiColumnModel(col);
+			boolean visible = userManager.isMandatoryUserProperty(USER_PROPS_ID , userPropertyHandler);
+
+			FlexiColumnModel col;
+			if(UserConstants.FIRSTNAME.equals(propName) || UserConstants.LASTNAME.equals(propName)) {
+				col = new StaticFlexiColumnModel(userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, TABLE_ACTION_EDIT, true, propName,
+						new StaticFlexiCellRenderer(TABLE_ACTION_EDIT, new TextFlexiCellRenderer()));
+			} else {
+				col = new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colPos, true, propName);
 			}
+			columnsModel.addFlexiColumnModel(col);
+			colPos++;
 		}
 
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.firstTime.i18n(), Cols.firstTime.ordinal(), true, Cols.firstTime.name()));
diff --git a/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java b/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java
index 8d98f97c9c3d19d8749cd391f1ac5cd8200c469e..473efbc31ff9bfaf02ab40686abaa09a8943fb00 100644
--- a/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java
+++ b/src/main/java/org/olat/user/propertyhandlers/UserPropertiesConfigImpl.java
@@ -26,12 +26,15 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.olat.core.configuration.Initializable;
 import org.olat.core.gui.translator.PackageTranslator;
 import org.olat.core.gui.translator.Translator;
-import org.olat.core.logging.LogDelegator;
 import org.olat.core.logging.OLATRuntimeException;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
 import org.olat.core.logging.activity.LogModule;
 import org.olat.user.UserPropertiesConfig;
 
@@ -43,18 +46,19 @@ import org.olat.user.UserPropertiesConfig;
  * 
  * @author Florian Gnaegi, frentix GmbH, http://www.frentix.com
  */
-public class UserPropertiesConfigImpl extends LogDelegator implements UserPropertiesConfig, Initializable {
-	
+public class UserPropertiesConfigImpl implements UserPropertiesConfig, Initializable {
+	private static final OLog log = Tracing.createLoggerFor(UserPropertiesConfigImpl.class);
 	private static final String USER_PROPERTY_LOG_CONFIGURATION = "userPropertyLogConfiguration";
 	public static final String PACKAGE = UserPropertiesConfigImpl.class.getPackage().getName(); 
 
 	
 	private Map<String, UserPropertyHandler> userPropertyNameLookupMap;
-	private Map<String, List<UserPropertyHandler>> userPropertyUsageContextsLookupMap = new HashMap<String, List<UserPropertyHandler>>();
+	private ConcurrentMap<String, List<UserPropertyHandler>> userPropertyUsageContextsLookupMap = new ConcurrentHashMap<String, List<UserPropertyHandler>>();
 	
 	private List<UserPropertyHandler> userPropertyHandlers;
 	private Map<String, UserPropertyUsageContext> userPropertyUsageContexts;
 
+	@Override
 	public void init() {
 		List<UserPropertyHandler> userPropHandlers = getUserPropertyHandlersFor(USER_PROPERTY_LOG_CONFIGURATION, false);
 		Set<String> userProperties = new LinkedHashSet<String>();
@@ -71,15 +75,17 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 	public void setUserPropertyUsageContexts(Map<String,UserPropertyUsageContext> userPropertyUsageContexts) {
 		this.userPropertyUsageContexts = userPropertyUsageContexts;
 	}
-	
+
+	@Override
 	public Map<String,UserPropertyUsageContext> getUserPropertyUsageContexts(){
-		return this.userPropertyUsageContexts;
+		return userPropertyUsageContexts;
 	}
 
 	/**
 	 * Spring setter
 	 * @param userPropertyHandlers
 	 */
+	@Override
 	public void setUserPropertyHandlers(List<UserPropertyHandler> userPropertyHandlers) {
 		this.userPropertyHandlers = userPropertyHandlers;
 		// populate name lookup map for faster lookup service
@@ -94,10 +100,11 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 	 * 
 	 * @see org.olat.user.UserPropertiesConfig#getPropertyHandler(java.lang.String)
 	 */
+	@Override
 	public UserPropertyHandler getPropertyHandler(String handlerName) {
 		UserPropertyHandler handler =  userPropertyNameLookupMap.get(handlerName);
-		if (isLogDebugEnabled() && handler == null) {
-			logDebug("UserPropertyHander for handlerName::" + handlerName + " not found, check your configuration.", null);
+		if (handler == null && log.isDebug()) {
+			log.debug("UserPropertyHander for handlerName::" + handlerName + " not found, check your configuration.", null);
 		}
 		return handler;
 	}
@@ -105,6 +112,7 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 	/**
 	 * @see org.olat.user.UserPropertiesConfig#getTranslator(org.olat.core.gui.translator.Translator)
 	 */
+	@Override
 	public Translator getTranslator(Translator fallBack) {
 		return new PackageTranslator(PACKAGE, fallBack.getLocale(), fallBack); 
 	}
@@ -112,6 +120,7 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 	/**
 	 * @see org.olat.user.UserPropertiesConfig#getAllUserPropertyHandlers()
 	 */
+	@Override
 	public List<UserPropertyHandler> getAllUserPropertyHandlers() {
 		return userPropertyHandlers;
 	}
@@ -119,42 +128,35 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 	/**
 	 * @see org.olat.user.UserPropertiesConfig#getUserPropertyHandlersFor(java.lang.String, boolean)
 	 */
+	@Override
 	public List<UserPropertyHandler> getUserPropertyHandlersFor(String usageIdentifyer, boolean isAdministrativeUser) {
 		String key = usageIdentifyer + "_" + isAdministrativeUser;
 		List<UserPropertyHandler> currentUsageHandlers = userPropertyUsageContextsLookupMap.get(key);
-		if (currentUsageHandlers != null) {
-			return currentUsageHandlers;
-		}
-		
-		// synchronize access to lookup map in this VM. No need for clustering locks.
-		synchronized (userPropertyUsageContextsLookupMap) {
-			// use little hashmap as local cache makes no sense to perform this over
-			// and over again
-			currentUsageHandlers = userPropertyUsageContextsLookupMap.get(key);
-			if (currentUsageHandlers != null) {
-				return currentUsageHandlers;
-			} 
-			// not found, build it and put it in cache
-			currentUsageHandlers = new ArrayList<UserPropertyHandler>();
+		if (currentUsageHandlers == null) {
+			List<UserPropertyHandler> newUsageHandlers = new ArrayList<>();
 			UserPropertyUsageContext currentUsageConfig = getCurrentUsageConfig(usageIdentifyer);			
-			// add all handlers that are accessable for this user
+			// add all handlers that are accessible for this user
 			for (UserPropertyHandler propertyHandler : currentUsageConfig.getPropertyHandlers()) {
 				// if configured for this class and if isAdministrativeUser
 				if (currentUsageConfig.isForAdministrativeUserOnly(propertyHandler) && !isAdministrativeUser) {
 					// don't add this handler for this user
 					continue;
 				}
-				currentUsageHandlers.add(propertyHandler);								
+				newUsageHandlers.add(propertyHandler);								
+			}
+			
+			currentUsageHandlers = userPropertyUsageContextsLookupMap.putIfAbsent(key, newUsageHandlers);
+			if(currentUsageHandlers == null) {
+				currentUsageHandlers = newUsageHandlers;
 			}
-			// now add list to cache
-			userPropertyUsageContextsLookupMap.put(key, currentUsageHandlers);
-			return currentUsageHandlers;			
 		}
+		return currentUsageHandlers;
 	}
 
 	/**
 	 * @see org.olat.user.UserPropertiesConfig#isMandatoryUserProperty(java.lang.String, org.olat.user.propertyhandlers.UserPropertyHandler)
 	 */
+	@Override
 	public boolean isMandatoryUserProperty(String usageIdentifyer, UserPropertyHandler propertyHandler) {
 		UserPropertyUsageContext currentUsageConfig = getCurrentUsageConfig(usageIdentifyer);
 		return currentUsageConfig.isMandatoryUserProperty(propertyHandler);
@@ -163,6 +165,7 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 	/**
 	 * @see org.olat.user.UserPropertiesConfig#isUserViewReadOnly(java.lang.String, org.olat.user.propertyhandlers.UserPropertyHandler)
 	 */
+	@Override
 	public boolean isUserViewReadOnly(String usageIdentifyer, UserPropertyHandler propertyHandler) {
 		UserPropertyUsageContext currentUsageConfig = getCurrentUsageConfig(usageIdentifyer);
 		return currentUsageConfig.isUserViewReadOnly(propertyHandler);
@@ -177,11 +180,12 @@ public class UserPropertiesConfigImpl extends LogDelegator implements UserProper
 		UserPropertyUsageContext currentUsageConfig = userPropertyUsageContexts.get(usageIdentifyer);
 		if (currentUsageConfig == null) {
 			currentUsageConfig = userPropertyUsageContexts.get("default");
-			logWarn(
+			log.warn(
 					"Could not find user property usage configuration for usageIdentifyer::" + usageIdentifyer
 							+ ", please check yout olat_userconfig.xml file. Using default configuration instead.", null);
-			if (currentUsageConfig == null) { throw new OLATRuntimeException(
-					"Missing default user property usage configuratoin in olat_userconfig.xml", null); }
+			if (currentUsageConfig == null) {
+				throw new OLATRuntimeException("Missing default user property usage configuratoin in olat_userconfig.xml", null);
+			}
 		}
 		return currentUsageConfig;
 	}