diff --git a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java
index e010140f5247668ac3fac46498e1ffba53685b20..94a7b5c5b2b18f2d355de2d3ea084310f07c9cab 100644
--- a/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java
+++ b/src/main/java/org/olat/commons/calendar/ICalFileCalendarManager.java
@@ -164,25 +164,20 @@ public class ICalFileCalendarManager extends BasicManager implements CalendarMan
 		String key = getKeyFor(type, calendarID);
 		Kalendar cal = calendarCache.get(key);
 		if(cal == null) {
-			//o_clusterOK by:cg
-			OLATResourceable calOres = OresHelper.createOLATResourceableType(getKeyFor(type,calendarID));
-			cal = CoordinatorManager.getInstance().getCoordinator().getSyncer().doInSync( calOres, new SyncerCallback<Kalendar>() {
-				public Kalendar execute() {
-					return getCalendarFromCache(type, calendarID);
-				}
-			});
+			cal = getCalendarFromCache(type, calendarID);
 		}
 		return cal;
 	}
 
 	private Kalendar getCalendarFromCache(final String callType, final String callCalendarID) {
-		String calKey = getKeyFor(callType,callCalendarID);
-		OLATResourceable calOres = OresHelper.createOLATResourceableType(calKey);		
-		CoordinatorManager.getInstance().getCoordinator().getSyncer().assertAlreadyDoInSyncFor(calOres);
+		String calKey = getKeyFor(callType,callCalendarID);	
 		Kalendar cal = calendarCache.get(calKey);
 		if (cal == null) {
 			cal = loadOrCreateCalendar(callType, callCalendarID);
-			calendarCache.put(calKey, cal);
+			Kalendar cacheCal = calendarCache.putIfAbsent(calKey, cal);
+			if(cacheCal != null) {
+				cal = cacheCal;
+			}
 		}
 		return cal;
 	}
diff --git a/src/main/java/org/olat/core/util/cache/CacheWrapper.java b/src/main/java/org/olat/core/util/cache/CacheWrapper.java
index 17e3697c8cd1246dbb0fa7a56b552153b7233d9f..207f6d12994d9b7ffaac66cb82a0f139e80af013 100644
--- a/src/main/java/org/olat/core/util/cache/CacheWrapper.java
+++ b/src/main/java/org/olat/core/util/cache/CacheWrapper.java
@@ -89,6 +89,8 @@ public interface CacheWrapper<U, V extends Serializable> {
 	 */
 	public V put(U key, V value);
 	
+	public V putIfAbsent(U key, V value);
+	
 	/**
 	 * In the case of distributed cache, the list can be partial and
 	 * you must carefully setup your cache.
diff --git a/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java
index ae9c1f93ec053edc48ef3be33f6ed2dadf07dbd5..26af5fe4de263b99c80e5fac55d5bef8e955ffc0 100644
--- a/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java
+++ b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacheWrapper.java
@@ -102,4 +102,11 @@ public class InfinispanCacheWrapper<U,V extends Serializable> implements CacheWr
 		V oldOne = cache.put(key, value);
 		return oldOne;
 	}
+
+	@Override
+	public V putIfAbsent(U key, V value) {
+		return cache.putIfAbsent(key, value);
+	}
+	
+	
 }
\ No newline at end of file