diff --git a/pom.xml b/pom.xml
index 651afd0f30269bab1ffaff9c0f70565e88d08406..1bc638942f91e6786116f6587deee42cc791a97f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,7 +73,7 @@
 		<jackson.version>2.11.0</jackson.version>
 		<org.mysql.version>5.1.46</org.mysql.version>
 		<org.postgresql.version>42.2.14</org.postgresql.version>
-		<org.infinispan.version>10.1.8.Final</org.infinispan.version>
+		<org.infinispan.version>11.0.0.Final</org.infinispan.version>
 		<lucene.version>7.7.0</lucene.version>
 		<version.selenium>3.141.59</version.selenium>
 		<version.drone>2.5.1</version.drone>
diff --git a/src/main/java/org/olat/admin/cache/AllCachesController.java b/src/main/java/org/olat/admin/cache/AllCachesController.java
index d78c8367286412cdfb2ede36e64e845d4337e137..5a117ff7e32fbb6f441357c0d93b0c73c93b0517 100644
--- a/src/main/java/org/olat/admin/cache/AllCachesController.java
+++ b/src/main/java/org/olat/admin/cache/AllCachesController.java
@@ -26,12 +26,11 @@
 package org.olat.admin.cache;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
-import org.apache.logging.log4j.Logger;
 import org.infinispan.Cache;
 import org.infinispan.configuration.cache.Configuration;
 import org.infinispan.configuration.cache.StorageType;
@@ -40,23 +39,26 @@ import org.infinispan.stats.Stats;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.commons.persistence.DBImpl;
+import org.olat.core.commons.persistence.SortKey;
 import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.components.table.StaticColumnDescriptor;
-import org.olat.core.gui.components.table.Table;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableDataModel;
-import org.olat.core.gui.components.table.TableEvent;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.components.form.flexible.FormItem;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
-import org.olat.core.gui.control.controller.BasicController;
 import org.olat.core.gui.control.generic.modal.DialogBoxController;
 import org.olat.core.gui.control.generic.modal.DialogBoxUIFactory;
-import org.olat.core.logging.Tracing;
 import org.olat.core.util.coordinate.Cacher;
 import org.olat.core.util.coordinate.CoordinatorManager;
 
@@ -69,86 +71,51 @@ import org.olat.core.util.coordinate.CoordinatorManager;
  *
  * @author Felix Jost 
  */
-public class AllCachesController extends BasicController {
-	
-	private static final Logger log = Tracing.createLoggerFor(AllCachesController.class);
-	
-	private VelocityContainer myContent;
-	private TableController tableCtr;
-	private TableDataModel<CacheInfos> tdm;
+public class AllCachesController extends FormBasicController {
+
 	private DialogBoxController dc;
 	
+	private CachesDataModel tableModel;
+	private FlexiTableElement tableEl;
+	
 	/**
 	 * @param ureq
 	 * @param wControl
 	 * 
 	 */
 	public AllCachesController(UserRequest ureq, WindowControl wControl) {
-		super(ureq, wControl);
-		//create page
-		myContent = createVelocityContainer("index");
-		
-		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-		tableConfig.setDownloadOffered(true);
-		tableConfig.setResultsPerPage(200);
+		super(ureq, wControl, "index");
 		
-		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());		
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.name", 0, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.disk", 1, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.hitcnt", 2, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.mcexp", 3, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.quickcount", 5, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.tti", 6, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.ttl", 7, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.maxElements", 8, null, getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("cache.clustered", 9, null, getLocale()));
-		tableCtr.addColumnDescriptor(new StaticColumnDescriptor("empty", "cache.empty", translate("action.choose")));
-		listenTo(tableCtr);
-		myContent.contextPut("title", translate("caches.title"));
-		myContent.put("cachetable", tableCtr.getInitialComponent());
+		initForm(ureq);
 		loadModel();
-				
-		//returned panel is not needed here, because this controller only shows content with the index.html velocity page
-		putInitialPanel(myContent);
 	}
 	
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.name));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.offHeap));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.hit));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.miss));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.size));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.maxIdle));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.lifespan));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.maxEntries));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CacheCols.cacheMode));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel("cache.empty", translate("action.choose"), "empty"));
+		
+		tableModel = new CachesDataModel(columnsModel, getLocale());
+		tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, 250, false, getTranslator(), formLayout);
+		tableEl.setAndLoadPersistedPreferences(ureq, "all-caches");
+		tableEl.setExportEnabled(true);
+		tableEl.setPageSize(250);
+	}
 
 	@Override
 	protected void doDispose() {
 		//
 	}
 	
-	@Override
-	public void event(UserRequest ureq, Component source, Event event) {
-		// 
-	}
-
-	@Override
-	protected void event(UserRequest ureq, Controller source, Event event) {
-		if (source == tableCtr) {
-			if (event.getCommand().equals(Table.COMMANDLINK_ROWACTION_CLICKED)) {
-				TableEvent te = (TableEvent) event;
-				String actionid = te.getActionId();
-				if (actionid.equals("empty")) {
-					Object cacheInfos = tableCtr.getTableDataModel().getObject(te.getRowId());
-					dc = activateYesNoDialog(ureq, null, translate("confirm.emptycache"), dc);
-					dc.setUserObject(cacheInfos);
-				}
-			}
-		} else if (source == dc) {
-			if (DialogBoxUIFactory.isYesEvent(event)) {
-				String cacheName = null;
-				try {
-					CacheInfos cacheInfos = (CacheInfos)dc.getUserObject();
-					cacheInfos.clear();
-					loadModel();
-				} catch (IllegalStateException e) {
-					log.error("Cannot remove Cache:"+cacheName, e);
-				}	
-			}
-		}
-	}
-
 	private void loadModel() {
 		Set<String> names = new HashSet<>();
 		List<CacheInfos> infos = new ArrayList<>();
@@ -159,17 +126,17 @@ public class AllCachesController extends BasicController {
 			Cacher cacher = coordinator.getCoordinator().getCacher();
 			loadModel(infos, names, cacher.getCacheContainer());
 		} catch (Exception e) {
-			log.error("", e);
+			logError("", e);
 		}
 		
 		try {
 			loadModel(infos, names, ((DBImpl)DBFactory.getInstance()).getCacheContainer());
 		} catch (Exception e) {
-			log.error("", e);
+			logError("", e);
 		}
 
-		tdm = new AllCachesTableDataModel(infos);
-		tableCtr.setTableDataModel(tdm);
+		tableModel.setObjects(infos);
+		tableEl.reset(true, true, true);
 	}
 	
 	private void loadModel(List<CacheInfos> infos, Set<String> names, EmbeddedCacheManager cm) {
@@ -183,10 +150,48 @@ public class AllCachesController extends BasicController {
 		}
 		names.addAll(cacheNameSet);
 	}
+
+	@Override
+	protected void event(UserRequest ureq, Controller source, Event event) {
+		if (source == dc) {
+			if (DialogBoxUIFactory.isYesEvent(event)) {
+				doClearCache((CacheInfos)dc.getUserObject());
+			}
+		}
+	}
+	
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if (source == tableEl) {
+			if (event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent) event;
+				if ("empty".equals(se.getCommand())) {
+					CacheInfos cacheInfos = tableModel.getObject(se.getIndex());
+					dc = activateYesNoDialog(ureq, null, translate("confirm.emptycache"), dc);
+					dc.setUserObject(cacheInfos);
+				}
+			}
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+	
+	private void doClearCache(CacheInfos cacheInfos) {
+		try {
+			cacheInfos.clear();
+			loadModel();
+		} catch (IllegalStateException e) {
+			logError("Cannot clear cache", e);
+		}
+	}
 	
 	private static class CacheInfos {
 		private final String cname;
-		private final boolean binary;
+		private final boolean offHeap;
 		private final long hits;
 		private final long misses;
 		private final long size;
@@ -199,19 +204,19 @@ public class AllCachesController extends BasicController {
 
 		public CacheInfos(String cname, Cache<?,?> cache) {
 			this.cache = cache;
-			Stats stats = cache.getAdvancedCache().getStats();
-			
 			this.cname = cname;
 			
+			Stats stats = cache.getAdvancedCache().getStats();
+			
 			Configuration configuration = cache.getCacheConfiguration();
 			
-			binary = configuration.memory().storageType() == StorageType.BINARY;
+			offHeap = configuration.memory().storage() == StorageType.OFF_HEAP;
 			hits = stats.getHits();
 			misses = stats.getMisses();
 			size = cache.getAdvancedCache().size();
 			maxIdle = cache.getCacheConfiguration().expiration().maxIdle();
 			lifespan = cache.getCacheConfiguration().expiration().lifespan();
-			maxEntries = configuration.memory().size();
+			maxEntries = configuration.memory().maxCount();
 			cacheMode = cache.getCacheConfiguration().clustering().cacheModeString();
 		}
 		
@@ -219,8 +224,8 @@ public class AllCachesController extends BasicController {
 			return cname;
 		}
 		
-		public boolean isBinary() {
-			return binary;
+		public boolean isOffHeap() {
+			return offHeap;
 		}
 		
 		public long getHits() {
@@ -255,51 +260,83 @@ public class AllCachesController extends BasicController {
 			cache.clear();
 		}
 	}
+	
+	private static class CachesDataModel extends DefaultFlexiTableDataModel<CacheInfos>
+	implements SortableFlexiTableDataModel<CacheInfos> {
+		private static final CacheCols[] COLS = CacheCols.values();
+		private final Locale locale;
+		
+		public CachesDataModel(FlexiTableColumnModel columnModel, Locale locale) {
+			super(columnModel);
+			this.locale = locale;
+		}	
 
-	private static class AllCachesTableDataModel implements TableDataModel<CacheInfos> {
-		private List<CacheInfos> cacheInfos;
-	  
-		protected AllCachesTableDataModel(List<CacheInfos> cacheInfos) {
-			this.cacheInfos = cacheInfos;
+		@Override
+		public void sort(SortKey orderBy) {
+			if(orderBy != null) {
+				List<CacheInfos> views = new SortableFlexiTableModelDelegate<>(orderBy, this, locale).sort();
+				super.setObjects(views);
+			}
 		}
-		
+
 		@Override
-		public CacheInfos getObject(int row) {
-			return cacheInfos.get(row);
+		public Object getValueAt(int row, int col) {
+			CacheInfos infos = getObject(row);
+			return getValueAt(infos, col);
 		}
-	
+
 		@Override
-		public void setObjects(List<CacheInfos> objects) {
-			this.cacheInfos = objects;
+		public Object getValueAt(CacheInfos c, int col) {
+			switch(COLS[col]) {
+				case name: return c.getCname();
+				case offHeap: return c.isOffHeap();
+				case hit: return c.getHits();
+				case miss: return c.getMisses();
+				case size: return c.getSize();
+				case maxIdle: return c.getMaxIdle();
+				case lifespan: return c.getLifespan();
+				case maxEntries: return c.getMaxEntries();
+				case cacheMode: return c.getCacheMode();
+				default: return "ERROR";
+			}
 		}
-	
+
 		@Override
-		public AllCachesTableDataModel createCopyWithEmptyList() {
-			return new AllCachesTableDataModel(Collections.<CacheInfos>emptyList());
+		public DefaultFlexiTableDataModel<CacheInfos> createCopyWithEmptyList() {
+			return new CachesDataModel(getTableColumnModel(), locale);
 		}
-	
-		public int getColumnCount() {
-			return 9;
+	}
+
+	public enum CacheCols implements FlexiSortableColumnDef {
+		name("cache.name"),
+		offHeap("cache.off.heap"),
+		hit("cache.hitcnt"),
+		miss("cache.mcexp"),
+		size("cache.quickcount"),
+		maxIdle("cache.tti"),
+		lifespan("cache.ttl"),
+		maxEntries("cache.maxElements"),
+		cacheMode("cache.clustered");
+		
+		private final String i18nKey;
+		
+		private CacheCols(String i18nKey) {
+			this.i18nKey = i18nKey;
 		}
-	
-		public int getRowCount() {
-			return cacheInfos.size();
+
+		@Override
+		public String i18nHeaderKey() {
+			return i18nKey;
 		}
-	
-		public Object getValueAt(int row, int col) {
-			CacheInfos c = getObject(row);
-			switch(col) {
-				case 0: return c.getCname();
-				case 1: return c.isBinary();
-				case 2: return c.getHits();
-				case 3: return c.getMisses();
-				case 5: return c.getSize();
-				case 6: return c.getMaxIdle();
-				case 7: return c.getLifespan();
-				case 8: return c.getMaxEntries();
-				case 9: return c.getCacheMode();
-				default: return "";
-			}
+
+		@Override
+		public boolean sortable() {
+			return true;
+		}
+
+		@Override
+		public String sortKey() {
+			return name();
 		}
 	}
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/cache/_content/index.html b/src/main/java/org/olat/admin/cache/_content/index.html
index 9bf288c99c523724f0899d6e0af2ef587983c683..bbeec7591b6583fc5aad65c27df0f58e862db072 100644
--- a/src/main/java/org/olat/admin/cache/_content/index.html
+++ b/src/main/java/org/olat/admin/cache/_content/index.html
@@ -1,2 +1,2 @@
-<h4>$title</h4>
-$r.render("cachetable")
+<h4>$r.translate("caches.title")</h4>
+$r.render("table")
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ar.properties
index 4f2fac2b8d8fa0e318fea9b543b22c2878cb5e3c..9bc24f45514803e0c09b4ccd67b8f4d9683d9e3b 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ar.properties
@@ -1,6 +1,5 @@
 #Mon Feb 22 10:47:11 CET 2010
 action.choose=\u0641\u0627\u0631\u063A
-cache.disk=\u0641\u0649 \u0627\u0644\u0642\u0631\u0635
 cache.empty=\u0627\u0644\u0639\u0645\u0644\u064A\u0629 \u0627\u0644\u0641\u0648\u0631\u064A\u0629
 cache.hitcnt=\u062A\u0644\u0645\u064A\u062D\u0627\u062A
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_bg.properties
index cfddbf81e79f09b8cadf2e85bbd402f2d2954999..b18183b8bb00f80f8b9f373e9e505bef4e9965a6 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_bg.properties
@@ -1,6 +1,5 @@
 #Fri Aug 28 04:32:25 CEST 2009
 action.choose=\u0418\u0437\u043F\u0440\u0430\u0437\u043D\u0435\u0442\u0435
-cache.disk=\u041D\u0430 \u0434\u0438\u0441\u043A
 cache.empty=\u041A\u0435\u0448 \u043F\u0430\u043C\u0435\u0442 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F
 cache.hitcnt=\u041F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u044F
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_cs.properties
index 92336086528a350095dbcf3f434bb5e1cc02b301..4ade263200cae970bd6ea4db5e90bed4bf7ce614 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_cs.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:13 CET 2009
 action.choose=Pr\u00E1zdn\u00E1
-cache.disk=Na disku
 cache.empty=Cache operace
 cache.hitcnt=Z\u00E1sahy
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_da.properties
index cd7d747c20f756e972f5ac69f6b87fcb7490375f..5d1b6f97c6083b68dbe498b6ed72ca183e416826 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_da.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:08 CET 2009
 action.choose=Tom
-cache.disk=P\u00E5 harddisk
 cache.empty=Cache operation
 cache.hitcnt=Hits
 cache.mcexp=Miss (exp)
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_de.properties
index 35f061f1dc676a04d1907d6f77a47ce9419245d3..42e6723fa34a0a4c27cd7ad6ee4eac4ceecd9ca2 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_de.properties
@@ -1,11 +1,11 @@
 #Mon Mar 02 09:54:03 CET 2009
 action.choose=Leeren
-cache.disk=Auf HD
 cache.empty=Cache Operation
 cache.hitcnt=Hits
 cache.maxElements=Max el
 cache.mcexp=Misses
 cache.name=Name
+cache.off.heap=Off heap
 cache.quickcount=~ Elemente
 cache.tti=Max idle (millisec)
 cache.ttl=Lifespan (millisec)
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_el.properties
index 55aacbb945843b9a36c0d07fd78d47fdb43651c1..ba04fb5d09ec9fadf99fb9d37adbd99028710b5e 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_el.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:15 CET 2009
 action.choose=\u0386\u03B4\u03B5\u03B9\u03B1\u03C3\u03BC\u03B1
-cache.disk=\u03A3\u03C4\u03BF \u03B4\u03AF\u03C3\u03BA\u03BF
 cache.empty=\u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 Cache
 cache.hitcnt=Hits
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_en.properties
index 49b12a6c1dd795b3fe91bdf7a7c2742c6874f601..d4ec1e5a7aef9447829c5b7015ec98f62696d8f9 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_en.properties
@@ -1,11 +1,11 @@
 #Sat Jan 22 17:17:46 CET 2011
 action.choose=Empty
-cache.disk=On HD
 cache.empty=Cache operation
 cache.hitcnt=Hits
 cache.maxElements=Max el
 cache.mcexp=Misses
 cache.name=Name
+cache.off.heap=Off heap
 cache.quickcount=~ Elements
 cache.tti=Max idle (millisec)
 cache.ttl=Lifespan (millisec)
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_es.properties
index ce770f537981aed65ad89904e3d7c84bad02325f..1b74c35f3ae05b5ec6ad0c2d3229ed563609c312 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_es.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:20 CET 2009
 action.choose=Vac\u00EDo
-cache.disk=En Disco
 cache.empty=Operaci\u00F3n de cach\u00E9
 cache.hitcnt=Aciertos
 cache.maxElements=Max elementos
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fa.properties
index 6b3e2b7c586e9f91ac620e82e7f4c6a7109c2d1b..8708760279dd11291c8e46ce42d065e717df2af6 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fa.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:12 CET 2009
 action.choose=Empty
-cache.disk=On disk
 cache.empty=Cache operation
 cache.hitcnt=Hits
 cache.mcexp=Miss (exp)
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fr.properties
index 628087f8f4df4997759cc9c8df88423c9b116831..74cfd10eaf55ee096c6fa4bed9ea62630e47572f 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_fr.properties
@@ -1,7 +1,6 @@
 #Sun Oct 27 19:21:24 CET 2013
 action.choose=Vider
 cache.clustered=Clustered
-cache.disk=Sur HD
 cache.empty=Cache op\u00E9ration
 cache.hitcnt=Hits
 cache.maxElements=Max. \u00E9l.
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_it.properties
index b39ac783218882fa531e6739f86952da3f00db3f..9ea6480f9ed0e087fa1e4d389b083a878db76986 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_it.properties
@@ -1,7 +1,6 @@
 #Tue Feb 07 13:49:56 CET 2017
 action.choose=vuota
 cache.clustered=Clustered
-cache.disk=Su HD
 cache.empty=Cache Operation
 cache.hitcnt=Hit
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_jp.properties
index 955db63acc64c7853e393739b36d48e10570a61f..fba83f93d9c7c7509b046a8d56a470b95532e17d 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_jp.properties
@@ -1,6 +1,5 @@
 #Tue Jul 13 08:03:25 CEST 2010
 action.choose=\u7A7A
-cache.disk=\u30C7\u30A3\u30B9\u30AF
 cache.empty=\u30AD\u30E3\u30C3\u30B7\u30E5\u51E6\u7406
 cache.hitcnt=\u30D2\u30C3\u30C8
 cache.maxElements=\u6700\u5927\u30A8\u30EC\u30E1\u30F3\u30C8
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_lt.properties
index 8899828f6146a38e731f304f20d52aa06248bd0f..daf1db4751433e2bab46451aaedde483518bfa47 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_lt.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:01 CET 2009
 action.choose=Tu\u0161\u010Dia
-cache.disk=Diske
 cache.empty=Pagalbin\u0117s atminties operacija
 cache.hitcnt=Parodymai
 cache.mcexp=Nerasta (exp)
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_nl_NL.properties
index d76fd426718ffe25c6fee45b05bdc60c9ac0d1e7..ee449e2613c747e666cc62f461367a0976c6139b 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_nl_NL.properties
@@ -1,6 +1,5 @@
 #Thu Sep 08 16:42:42 CEST 2011
 action.choose=Leeg
-cache.disk=In HD
 cache.empty=Cache operatie
 cache.hitcnt=Hits
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pl.properties
index 045761e1eab885e54b1b808d779ffb33a528d744..41df5787f3a42dd4635758d7066586bb8d3fc5cf 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pl.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:16 CET 2009
 action.choose=Pusty
-cache.disk=Na dysku
 cache.empty=Operacje
 cache.hitcnt=U\u017Cycia
 cache.maxElements=Max el
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_BR.properties
index 6c04662c7b471a9759a6cfa2b1cbc766e9acf813..6852855637e23c67a27a18f467d8e2494acf3ed5 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_BR.properties
@@ -1,7 +1,6 @@
 #Fri Sep 06 15:28:54 CEST 2013
 action.choose=Vazio
 cache.clustered=Clustered
-cache.disk=No disco
 cache.empty=Opera\u00E7\u00E3o cache
 cache.hitcnt=Batidas
 cache.maxElements=Elementos maximos
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_PT.properties
index e0b048c41112c165344499d34e8ba300da366759..c05a2b621b3c2943624df104bd65a208f4f94e00 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_pt_PT.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:04 CET 2009
 action.choose=Vazio
-cache.disk=No disco
 cache.empty=Opera\u00E7\u00E3o cache
 cache.hitcnt=Batidas
 cache.mcexp=Falta
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ru.properties
index e29e2854eeef73cd3cb9693c935cf539e89c4d25..044bc032d9ee2a3b9451546f87d1b69ab598a72e 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_ru.properties
@@ -1,6 +1,5 @@
 #Thu Sep 24 01:35:52 CEST 2009
 action.choose=\u043E\u0447\u0438\u0441\u0442\u0438\u0442\u044C
-cache.disk=\u041D\u0430 \u0436\u0451\u0441\u0442\u043A\u043E\u043C \u0434\u0438\u0441\u043A\u0435
 cache.empty=\u041A\u044D\u0448 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F 
 cache.hitcnt=hit
 cache.maxElements=\u041C\u0430\u043A\u0441 \u044D\u043B
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_sq.properties
index d1a305951d2b288a9b3c7f8b2b69ee2958572a87..66d9c014e4d550395bd31233e7d71e3d67e51126 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_sq.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:11 CET 2009
 action.choose=Bosh
-cache.disk=N\u00EB Disk
 cache.empty=Operacioni i Cashe
 cache.hitcnt=Goditje
 cache.maxElements=El maks
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_CN.properties
index c4be31911456ac36498a7ee88ea8f10cb92eeb9e..640157edbb4c160dc1da54469e644a60c611e37a 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_CN.properties
@@ -1,6 +1,5 @@
 #Tue Dec 01 19:47:41 CET 2009
 action.choose=\u7A7A
-cache.disk=\u5728\u78C1\u76D8\u4E0A
 cache.empty=\u7F13\u5B58\u64CD\u4F5C
 cache.hitcnt=\u6572\u51FB
 cache.maxElements=\u6700\u5927\u9AD8\u5EA6
diff --git a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_TW.properties
index 04fc43706c21b6d5de81a46770c5f3d5b549d9cf..cbc5adfcdd94ff29dd652968d62858ff156d5432 100644
--- a/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/admin/cache/_i18n/LocalStrings_zh_TW.properties
@@ -1,6 +1,5 @@
 #Mon Mar 02 09:54:05 CET 2009
 action.choose=\u6E05\u7A7A
-cache.disk=\u5728\u78C1\u789F\u4E0A
 cache.empty=\u5FEB\u53D6\u64CD\u4F5C
 cache.hitcnt=\u547D\u4E2D
 cache.maxElements=\u6700\u5927\u5143\u7D20
diff --git a/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java
index 308313b9987374e175c8036db238dfcfe5fbbde7..636c0cf90d2709adf56aeaf21d4ee4c9cb3b1091 100644
--- a/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java
+++ b/src/main/java/org/olat/core/util/cache/infinispan/InfinispanCacher.java
@@ -30,7 +30,6 @@ import org.infinispan.configuration.cache.Configuration;
 import org.infinispan.configuration.cache.ConfigurationBuilder;
 import org.infinispan.configuration.cache.StorageType;
 import org.infinispan.eviction.EvictionStrategy;
-import org.infinispan.eviction.EvictionType;
 import org.infinispan.manager.EmbeddedCacheManager;
 import org.infinispan.transaction.TransactionMode;
 import org.infinispan.util.concurrent.IsolationLevel;
@@ -74,13 +73,12 @@ public class InfinispanCacher implements Cacher {
 		if(conf == null) {
 			long maxEntries = 10000;
 			long maxIdle = 900000l;
-			
+	
 			ConfigurationBuilder builder = new ConfigurationBuilder();
 			builder.memory()
-				.evictionStrategy(EvictionStrategy.REMOVE)
-				.evictionType(EvictionType.COUNT)
-				.storageType(StorageType.OBJECT)
-				.size(maxEntries);
+				.whenFull(EvictionStrategy.REMOVE)
+				.storage(StorageType.HEAP)
+				.maxCount(maxEntries);
 			builder.expiration()
 				.maxIdle(maxIdle);
 			builder.transaction()
@@ -90,8 +88,9 @@ public class InfinispanCacher implements Cacher {
 				.useLockStriping(false)
 				.lockAcquisitionTimeout(15000)
 				.isolationLevel(IsolationLevel.READ_COMMITTED);
-			builder.jmxStatistics()
+			builder.statistics()
 				.enable();
+
 			Configuration configurationOverride = builder.build();
 			cacheManager.defineConfiguration(cacheName, configurationOverride);
 		}
diff --git a/src/main/resources/infinispan-config.xml b/src/main/resources/infinispan-config.xml
index 327897d29940caa5b3877c1d2f0758c24a67a6bd..c8232ad6fce4af10d22904aa4b6026393e6cbe71 100644
--- a/src/main/resources/infinispan-config.xml
+++ b/src/main/resources/infinispan-config.xml
@@ -1,91 +1,72 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <infinispan
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="urn:infinispan:config:10.1 https://infinispan.org/schemas/infinispan-config-10.1.xsd"
-        xmlns="urn:infinispan:config:10.1">
+        xsi:schemaLocation="urn:infinispan:config:11.0 https://infinispan.org/schemas/infinispan-config-11.0.xsd"
+        xmlns="urn:infinispan:config:11.0">
 
 	<cache-container name="NonTransactionalCacheManager" default-cache="default">
-		<jmx duplicate-domains="true" />
 		<local-cache name="default" />
 
 		<local-cache name="MapperService@mapper" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="10000" strategy="REMOVE"/>
-			</memory>
+			<memory max-count="10000" when-full="REMOVE" />
 			<expiration max-idle="300000" interval="5000" />
 		</local-cache>
 
 		<local-cache name="OpenMeetingsManager@session" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="10000"  strategy="REMOVE" />
-			</memory>
+			<memory max-count="10000" when-full="REMOVE" />
 			<expiration max-idle="300000" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="UserSessionManager@usersession" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object strategy="NONE" />
-			</memory>
+			<memory when-full="NONE" />
 			<expiration max-idle="-1" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="VFSLockManager@lock-nulls" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="50000"  strategy="REMOVE" />
-			</memory>
+			<memory max-count="50000" when-full="REMOVE" />
 			<expiration max-idle="21600000" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="VFSLockManager@file-locks" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="50000"  strategy="REMOVE" />
-			</memory>
+			<memory max-count="50000" when-full="REMOVE" />
 			<expiration max-idle="21600000" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="CalendarManager@calendar" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="500"  strategy="REMOVE"/>
-			</memory>
+			<memory max-count="500" when-full="REMOVE" />
 			<expiration max-idle="900000" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="AssessmentManager@newpersisting" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="20000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="20000" when-full="REMOVE" />
 			<expiration max-idle="900000" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="QTIHelper@QTI_xml_Documents" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="200" strategy="REMOVE" />
-			</memory>
+			<memory max-count="200" when-full="REMOVE" />
 			<expiration max-idle="180000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="WebDAVManager@webdav" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="2013" strategy="REMOVE" />
-			</memory>
+			<memory max-count="2013" when-full="REMOVE" />
 			<expiration max-idle="300000" interval="5000" />
 			<!-- max-idle same as session time out for WebDAV session in UserSessionManager -->
 		</local-cache>
@@ -93,117 +74,91 @@
 		<local-cache name="UserManager@username" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="20000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="20000" when-full="REMOVE" />
 			<expiration max-idle="2700000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="UserManager@userfullname" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="20000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="20000" when-full="REMOVE" />
 			<expiration max-idle="2700000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="Velocity@templates" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="7700" strategy="REMOVE" />
-			</memory>
+			<memory max-count="7700" when-full="NONE" />
 			<expiration max-idle="-1" lifespan="-1" interval="-1" />
 		</local-cache>
 		
 		<local-cache name="LoginModule@blockafterfailedattempts" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="10000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="10000" when-full="REMOVE" />
 			<expiration max-idle="300000" lifespan="300000" interval="5000" />
 		</local-cache>
 		
 		<local-cache name="NotificationHelper@userPropertiesCache" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="2000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="2000" when-full="REMOVE" />
 			<expiration max-idle="120000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="GlossaryItemManager@glossary" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="500" strategy="REMOVE" />
-			</memory>
+			<memory max-count="500" when-full="REMOVE" />
 			<expiration max-idle="3600000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="WikiManager@wiki" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="500" strategy="REMOVE" />
-			</memory>
+			<memory max-count="500" when-full="REMOVE" />
 			<expiration max-idle="3600000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="CollaborationToolsFactory@tools" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="5000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="5000" when-full="REMOVE" />
 			<expiration max-idle="1800000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="CourseFactory@courses" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="1000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="1500" when-full="REMOVE" />
 			<expiration max-idle="3600000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="ProjectBrokerManager@pb" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="100" strategy="REMOVE" />
-			</memory>
+			<memory max-count="100" when-full="REMOVE" />
 			<expiration max-idle="3600000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="Path@feed" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="5000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="5000" when-full="REMOVE" />
 			<expiration max-idle="900000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="PdfService@delivery" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="50000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="50000" when-full="REMOVE" />
 			<expiration max-idle="900000" interval="15000" />
 		</local-cache>
 		
 		<local-cache name="GradingService@courseElementsTitle" simple-cache="true" statistics="true" statistics-available="true">
 			<locking isolation="READ_COMMITTED" concurrency-level="1000" acquire-timeout="15000" striping="false" />
 			<transaction mode="NONE" auto-commit="true" />
-			<memory>
-				<object size="5000" strategy="REMOVE" />
-			</memory>
+			<memory max-count="5000" when-full="REMOVE" />
 			<expiration max-idle="3600000" interval="15000" />
 		</local-cache>
 		
diff --git a/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs-local.xml b/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs-local.xml
index dc4b87345c72db8afa4a309b67e638bc4c28ee65..8830d03e14e25ac2f8c113f5d84a087a489b8bc5 100644
--- a/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs-local.xml
+++ b/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs-local.xml
@@ -7,32 +7,26 @@
   -->
 <infinispan
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="urn:infinispan:config:10.1 https://infinispan.org/schemas/infinispan-config-10.1.xsd"
-        xmlns="urn:infinispan:config:10.1">
+        xsi:schemaLocation="urn:infinispan:config:11.0 https://infinispan.org/schemas/infinispan-config-11.0.xsd"
+        xmlns="urn:infinispan:config:11.0">
 
 
    <!-- This configuration is suitable for non-clustered environments, where only single instance accesses the DB -->
    <cache-container name="SampleCacheManager" statistics="false" default-cache="the-default-cache" shutdown-hook="DEFAULT">
-      <jmx duplicate-domains="true"/>
-
       <local-cache-configuration name="the-default-cache" statistics="false" />
 
       <!-- Default configuration is appropriate for entity/collection caching. -->
       <local-cache-configuration name="entity" simple-cache="true" statistics="false" statistics-available="false">
          <transaction mode="NONE" />
          <expiration max-idle="100000" interval="5000"/>
-         <memory>
-            <object size="10000" strategy="LRU" />
-         </memory>
+         <memory max-count="10000"/>
       </local-cache-configuration>
 
       <!-- A config appropriate for query caching. Does not replicate queries. -->
       <local-cache-configuration name="local-query" simple-cache="true" statistics="false" statistics-available="false">
          <transaction mode="NONE"/>
-         <expiration max-idle="10000" interval="5000"/>
-         <memory>
-            <object size="10000" strategy="LRU" />
-         </memory>
+         <expiration max-idle="100000" interval="5000"/>
+         <memory max-count="10000"/>
       </local-cache-configuration>
 
       <local-cache-configuration name="timestamps" simple-cache="true" statistics="false" statistics-available="false">
@@ -41,9 +35,7 @@
          <transaction mode="NONE"/>
          <expiration interval="0"/>
          <!--  Don't ever evict modification timestamps -->
-         <memory>
-            <object strategy="NONE"/>
-         </memory>
+         <memory when-full="NONE"/>
       </local-cache-configuration>
 
       <!-- When providing custom configuration, always make this cache local and non-transactional.
diff --git a/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs.xml b/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs.xml
index 8d3c25d2d738321bd7b19286fd26ae7c1b552b0a..223543025f35c4d93c066aa83e95ea9c55fb8217 100644
--- a/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs.xml
+++ b/src/main/resources/org/infinispan/hibernate/cache/commons/builder/infinispan-configs.xml
@@ -7,12 +7,16 @@
   -->
 <infinispan
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="urn:infinispan:config:10.1 https://infinispan.org/schemas/infinispan-config-10.1.xsd"
-        xmlns="urn:infinispan:config:10.1">
+        xsi:schemaLocation="urn:infinispan:config:11.0 https://infinispan.org/schemas/infinispan-config-11.0.xsd"
+        xmlns="urn:infinispan:config:11.0">
+	<!-- 
+   <jgroups>
+      <stack-file name="hibernate-jgroups" path="${hibernate.cache.infinispan.jgroups_cfg:default-configs/default-jgroups-tcp.xml}"/>
+   </jgroups>
+   -->
 
    <cache-container name="SampleCacheManager" statistics="false" default-cache="the-default-cache" shutdown-hook="DEFAULT">
       <transport stack="hibernate-jgroups" cluster="infinispan-hibernate-cluster"/>
-      <jmx duplicate-domains="true"/>
 
       <local-cache-configuration name="the-default-cache" statistics="false" />
 
@@ -21,18 +25,14 @@
          <locking concurrency-level="1000" acquire-timeout="15000"/>
          <transaction mode="NONE" />
          <expiration max-idle="100000" interval="5000"/>
-         <memory>
-            <object size="10012" strategy="LRU" />
-         </memory>
+         <memory max-count="10012"/>
       </invalidation-cache-configuration>
 
       <replicated-cache-configuration name="replicated-entity" remote-timeout="20000" statistics="false" statistics-available="false">
          <locking concurrency-level="1000" acquire-timeout="15000"/>
          <transaction mode="NONE" />
          <expiration max-idle="100000" interval="5000"/>
-         <memory>
-            <object size="10012" strategy="LRU" />
-         </memory>
+         <memory max-count="10012"/>
       </replicated-cache-configuration>
 
       <!-- A config appropriate for query caching. Does not replicate queries. -->
@@ -40,9 +40,7 @@
          <locking concurrency-level="1000" acquire-timeout="15000"/>
          <transaction mode="NONE" />
          <expiration max-idle="100000" interval="5000"/>
-         <memory>
-            <object size="10012" strategy="LRU" />
-         </memory>
+         <memory max-count="10012"/>
       </local-cache-configuration>
 
       <!-- A query cache that replicates queries. Replication is asynchronous. -->
@@ -50,9 +48,7 @@
          <locking concurrency-level="1000" acquire-timeout="15000" isolation="READ_COMMITTED"/>
          <transaction mode="NONE" />
          <expiration max-idle="100000" interval="5000"/>
-         <memory>
-            <object size="10000" strategy="LRU" />
-         </memory>
+         <memory max-count="10012"/>
       </replicated-cache-configuration>
 
       <!-- Optimized for timestamp caching. A clustered timestamp cache
@@ -64,9 +60,7 @@
          <transaction mode="NONE"/>
          <expiration interval="0"/>
          <!--  Don't ever evict modification timestamps -->
-         <memory>
-            <object strategy="NONE" />
-         </memory>
+         <memory when-full="NONE"/>
       </replicated-cache-configuration>
 
       <!-- When providing custom configuration, always make this cache local and non-transactional.