diff --git a/src/main/java/org/olat/admin/cache/AllCachesController.java b/src/main/java/org/olat/admin/cache/AllCachesController.java
index 4d9904ae5da23527fbc7ca4236d50c63900a69e3..c08092a0f396dd6698703c6c132858a149f59745 100644
--- a/src/main/java/org/olat/admin/cache/AllCachesController.java
+++ b/src/main/java/org/olat/admin/cache/AllCachesController.java
@@ -90,7 +90,6 @@ public class AllCachesController extends BasicController {
 		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.mcnotfound", 4, 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()));
@@ -205,7 +204,6 @@ public class AllCachesController extends BasicController {
 				case 1: return c.getCacheConfiguration().storeAsBinary().enabled() ? Boolean.TRUE:Boolean.FALSE;
 				case 2: return new Long(stats.getHits());
 				case 3: return new Long(stats.getMisses());
-				case 4: return "???";
 				case 5: return new Long(stats.getTotalNumberOfEntries());
 				case 6: return new Long(c.getCacheConfiguration().expiration().maxIdle());
 				case 7: return new Long(c.getCacheConfiguration().expiration().lifespan());
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 01eae0849fcad83e22af90ab0c3484d1c8915589..4f2fac2b8d8fa0e318fea9b543b22c2878cb5e3c 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
@@ -4,8 +4,7 @@ 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
-cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
+cache.mcexp=Misses
 cache.name=\u0627\u0644\u0627\u0633\u0645
 cache.quickcount=\u0627\u0644\u0639\u0646\u0627\u0635\u0631 ~
 cache.tti=\u0627\u0644\u0648\u0642\u062A \u0644\u0644\u062E\u0645\u0648\u0644 - \u062B\u0627\u0646\u064A\u0629
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 690402fef4f1dc7d42391692358f4e01bed17305..cfddbf81e79f09b8cadf2e85bbd402f2d2954999 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
@@ -4,8 +4,7 @@ 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
-cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
+cache.mcexp=Misses
 cache.name=\u0418\u043C\u0435
 cache.quickcount=~ \u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438
 cache.tti=\u0412\u0440\u0435\u043C\u0435 \u0434\u043E \u0445\u0438\u0431\u0435\u0440\u043D\u0430\u0446\u0438\u044F (\u0441\u0435\u043A\u0443\u043D\u0434\u0438)
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 54c7bb3532c51a82526f7a89b8637b6d4abd2903..92336086528a350095dbcf3f434bb5e1cc02b301 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
@@ -5,10 +5,9 @@ cache.empty=Cache operace
 cache.hitcnt=Z\u00E1sahy
 cache.maxElements=Max el
 cache.mcexp=Zme\u0161k\u00E1n\u00ED (projeven\u00E1)
-cache.mcnotfound=Zme\u0161k\u00E1n\u00ED (nenalezen\u00E1)
 cache.name=Jm\u00E9no
 cache.quickcount=~ Elementy
-cache.tti=\u010Das idle (sec)
-cache.ttl=\u010Das live (sec)
+cache.tti=\u010Das idle (millisec)
+cache.ttl=\u010Das live (millisec)
 caches.title=P\u0159ehled EHCache (jednoduch\u00E1 uspan\u00E1 cache)
 confirm.emptycache=Chcete smazat v\u0161echny z\u00E1znamy v t\u00E9to cache?
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 9e73321e0a613159c35eb42fa5cc779e1c6ff5cf..cd7d747c20f756e972f5ac69f6b87fcb7490375f 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
@@ -4,7 +4,6 @@ cache.disk=P\u00E5 harddisk
 cache.empty=Cache operation
 cache.hitcnt=Hits
 cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (ikke fundet)
 cache.name=Navn
 cache.quickcount=~ elementer
 caches.title=Oversigt over Cache
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 eee0b21646ab06e84240931a2a8ccd1e83275948..35f061f1dc676a04d1907d6f77a47ce9419245d3 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,15 +1,14 @@
 #Mon Mar 02 09:54:03 CET 2009
-action.choose=leeren
+action.choose=Leeren
 cache.disk=Auf HD
 cache.empty=Cache Operation
-cache.hitcnt=Hit
+cache.hitcnt=Hits
 cache.maxElements=Max el
-cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
+cache.mcexp=Misses
 cache.name=Name
 cache.quickcount=~ Elemente
-cache.tti=Time to idle (sec)
-cache.ttl=Time to live (sec)
+cache.tti=Max idle (millisec)
+cache.ttl=Lifespan (millisec)
 cache.clustered=Clustered
 caches.title=\u00DCbersicht der Caches
 confirm.emptycache=Wollen Sie alle Eintr\u00E4ge dieses Cache l\u00F6schen?
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 eb915de4c55443cd030e912813989fb314cc993a..55aacbb945843b9a36c0d07fd78d47fdb43651c1 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
@@ -5,7 +5,6 @@ cache.empty=\u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 Cache
 cache.hitcnt=Hits
 cache.maxElements=Max el
 cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
 cache.name=\u038C\u03BD\u03BF\u03BC\u03B1
 cache.quickcount=~ \u03A3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03B1
 cache.tti=\u03A7\u03C1\u03CC\u03BD\u03BF\u03C2 \u0391\u03B4\u03C1\u03AC\u03BD\u03B5\u03B9\u03B1\u03C2 (\u03B4\u03B5\u03C5\u03C4.)
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 02b7861cd5ea5c2579cc75558bb3a2eac528507c..49b12a6c1dd795b3fe91bdf7a7c2742c6874f601 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
@@ -4,11 +4,11 @@ cache.disk=On HD
 cache.empty=Cache operation
 cache.hitcnt=Hits
 cache.maxElements=Max el
-cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
+cache.mcexp=Misses
 cache.name=Name
 cache.quickcount=~ Elements
-cache.tti=Time to idle (sec)
-cache.ttl=Time to live (sec)
+cache.tti=Max idle (millisec)
+cache.ttl=Lifespan (millisec)
+cache.clustered=Clustered
 caches.title=Overview of caches
 confirm.emptycache=Do you really want to delete all entries in this cache?
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 bfe0c33c14555f1d57f155b2afd3515b2e44eebb..ce770f537981aed65ad89904e3d7c84bad02325f 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
@@ -5,10 +5,9 @@ cache.empty=Operaci\u00F3n de cach\u00E9
 cache.hitcnt=Aciertos
 cache.maxElements=Max elementos
 cache.mcexp=Perdido (exp)
-cache.mcnotfound=Perdido (notfnd)
 cache.name=Nombre
 cache.quickcount=~ Elementos
-cache.tti=Tiempo hasta idle (sec)
-cache.ttl=Tiempo hasta live (sec)
+cache.tti=Tiempo hasta idle (millisec)
+cache.ttl=Tiempo hasta live (millisec)
 caches.title=Visi\u00F3n general de caches
 confirm.emptycache=\u00BFDesea eliminar todas las entradas de esta cach\u00E9?
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 cc214e219b8ff776ad22e9578ccfc72cb9c74031..6b3e2b7c586e9f91ac620e82e7f4c6a7109c2d1b 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
@@ -4,7 +4,6 @@ cache.disk=On disk
 cache.empty=Cache operation
 cache.hitcnt=Hits
 cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
 cache.name=Name
 cache.quickcount=~ Elements
 caches.title=Overview of caches
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 c507966831cd3f60f3f437382c2ac6d8fde229ac..45d9ff10b60a1aa3ad0ddafab501f26c7d35dc62 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,14 +1,13 @@
 #Mon Mar 02 09:54:07 CET 2009
-action.choose=vider
+action.choose=Vider
 cache.disk=Sur HD
-cache.empty=Cache Operation
-cache.hitcnt=Hit
-cache.maxElements=Max el
-cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
+cache.empty=Cache op\u00E9ration
+cache.hitcnt=Hits
+cache.maxElements=Max. \u00E9l.
+cache.mcexp=Misses
 cache.name=Nom
 cache.quickcount=~ \u00E9l\u00E9ments
-cache.tti=Time to idle (sec)
-cache.ttl=Time to live (sec)
+cache.tti=Max idle (millisec)
+cache.ttl=Lifespan (millisec)
 caches.title=Aper\u00E7u des caches
 confirm.emptycache=Voulez-vous effacer tous le contenu de ce cache?
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 c5ea7139a875cce0c1f2de1cd3fbe2051e8fe88b..624854729ba0037e2634be5e706247b78dec77a6 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
@@ -5,10 +5,9 @@ cache.empty=Cache Operation
 cache.hitcnt=Hit
 cache.maxElements=Max el
 cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
 cache.name=Nome
 cache.quickcount=~ Elementi
-cache.tti=Time to idle (sec)
-cache.ttl=Time to live (sec)
+cache.tti=Time to idle (millisec)
+cache.ttl=Time to live (millisec)
 caches.title=Visone d'insieme delle caches
 confirm.emptycache=Vuole eliminare tutte le entrate di questa cache?
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 f763f548faa6ae975b7e9497eb2284cd22490f0f..8899828f6146a38e731f304f20d52aa06248bd0f 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
@@ -4,7 +4,6 @@ cache.disk=Diske
 cache.empty=Pagalbin\u0117s atminties operacija
 cache.hitcnt=Parodymai
 cache.mcexp=Nerasta (exp)
-cache.mcnotfound=Nerasta (notfnd)
 cache.name=Pavadinimas
 cache.quickcount=~ Elementai
 caches.title=EHCache (palengvinan\u010Dioji \u201Ehibernate\u201C funkcijos atminties) ap\u017Evalga
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 7b86cbe10cb6bee6c983b6fa2c3551bb00eea4ce..d76fd426718ffe25c6fee45b05bdc60c9ac0d1e7 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
@@ -5,10 +5,9 @@ cache.empty=Cache operatie
 cache.hitcnt=Hits
 cache.maxElements=Max el
 cache.mcexp=Miss (exp)
-cache.mcnotfound=Miss (notfnd)
 cache.name=Name
 cache.quickcount=~ Elements
-cache.tti=Time to idle (sec)
-cache.ttl=Time to live (sec)
+cache.tti=Max idle (millisec)
+cache.ttl=Lifespan (millisec)
 caches.title=Overzicht van caches
 confirm.emptycache=Weet u zeker dat u alle bijdragen uit deze cache wilt verwijderen?
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 4482efc267c49cb85a595f4f2cdc2ebe99d3be10..045761e1eab885e54b1b808d779ffb33a528d744 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
@@ -4,11 +4,10 @@ cache.disk=Na dysku
 cache.empty=Operacje
 cache.hitcnt=U\u017Cycia
 cache.maxElements=Max el
-cache.mcexp=Chybiony (exp)
-cache.mcnotfound=Chybiony (notfnd)
+cache.mcexp=Chybiony
 cache.name=Nazwa
 cache.quickcount=~ Element\u00F3w
-cache.tti=Time to idle (sec)
-cache.ttl=Time to live (sec)
+cache.tti=Max idle (millisec)
+cache.ttl=Lifespan (millisec)
 caches.title=Og\u00F3lne informacje o EHCache
 confirm.emptycache=Chcesz wykasowa\u0107 wszystkie wpisy w tym schowku?
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 ddc26aa23149c07ea2e91a563c05444d70badd5b..55d0aaae2f16db1488000e448d5f2446ad154085 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
@@ -4,11 +4,10 @@ cache.disk=No disco
 cache.empty=Opera\u00E7\u00E3o cache
 cache.hitcnt=Batidas
 cache.maxElements=Elementos maximos
-cache.mcexp=Falta (exp)
-cache.mcnotfound=Falta (notfnd)
+cache.mcexp=Falta
 cache.name=Nome
 cache.quickcount=~ Elementos
-cache.tti=Tempo para dormir (sec)
-cache.ttl=Tempo para ativar (sec)
+cache.tti=Tempo para dormir (millisec)
+cache.ttl=Tempo para ativar (millisec)
 caches.title=Vis\u00E3o geral de caches
 confirm.emptycache=Voc\u00EA quer apagar todos os itens neste cache? 
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 7d641b1afe1486d826ad7cbd78ee53cfcd814df9..e0b048c41112c165344499d34e8ba300da366759 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
@@ -3,8 +3,7 @@ action.choose=Vazio
 cache.disk=No disco
 cache.empty=Opera\u00E7\u00E3o cache
 cache.hitcnt=Batidas
-cache.mcexp=Falta (exp)
-cache.mcnotfound=Falta (notfnd)
+cache.mcexp=Falta
 cache.name=Nome
 cache.quickcount=~ Elementos
 caches.title=Vis\u00E3o geral de caches
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 33a9d93e889184637b2a32d7b7ff8f396bdfc152..e29e2854eeef73cd3cb9693c935cf539e89c4d25 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
@@ -5,7 +5,6 @@ cache.empty=\u041A\u044D\u0448 \u043E\u043F\u0435\u0440\u0430\u0446\u0438\u044F
 cache.hitcnt=hit
 cache.maxElements=\u041C\u0430\u043A\u0441 \u044D\u043B
 cache.mcexp=miss (exp)
-cache.mcnotfound=miss (notfnd)
 cache.name=\u0418\u043C\u044F
 cache.quickcount=~ \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432
 cache.tti=\u0412\u0440\u0435\u043C\u044F \u0434\u043E idle (\u0441\u0435\u043A)
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 79bba5858491afcb3e361f0ae5982f35b2644f95..d1a305951d2b288a9b3c7f8b2b69ee2958572a87 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
@@ -5,10 +5,9 @@ cache.empty=Operacioni i Cashe
 cache.hitcnt=Goditje
 cache.maxElements=El maks
 cache.mcexp=Mungon (exp)
-cache.mcnotfound=Mungon (notfnd)
 cache.name=Emri
 cache.quickcount=~ Elemente
-cache.tti=Koha p\u00EBr amulluar (sek)
-cache.ttl=Koha p\u00EBr t\u00EB gjall\u00EBruar (sek)
+cache.tti=Koha p\u00EBr amulluar (millisek)
+cache.ttl=Koha p\u00EBr t\u00EB gjall\u00EBruar (millisek)
 caches.title=Mbishikimi i caches
 confirm.emptycache=A doni t'i fshini t\u00EB gjitha t\u00EB hyrat n\u00EB k\u00EBt\u00EB cache?
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 ecc302a111b1da911671cc0715fe9035ebecc505..c4be31911456ac36498a7ee88ea8f10cb92eeb9e 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
@@ -4,8 +4,7 @@ cache.disk=\u5728\u78C1\u76D8\u4E0A
 cache.empty=\u7F13\u5B58\u64CD\u4F5C
 cache.hitcnt=\u6572\u51FB
 cache.maxElements=\u6700\u5927\u9AD8\u5EA6
-cache.mcexp=\u4E22\u5931(\u5F02\u5E38)
-cache.mcnotfound=\u4E22\u5931(\u672A\u627E\u5230)
+cache.mcexp=\u4E22\u5931
 cache.name=\u540D\u79F0
 cache.quickcount=~\u5143\u7D20
 cache.tti=\u95F2\u7F6E\u65F6\u95F4(\u5206\u949F)
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 667cdbb2bd2dcbf1c91e27dd15a865f9056c7e9b..04fc43706c21b6d5de81a46770c5f3d5b549d9cf 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
@@ -4,8 +4,7 @@ cache.disk=\u5728\u78C1\u789F\u4E0A
 cache.empty=\u5FEB\u53D6\u64CD\u4F5C
 cache.hitcnt=\u547D\u4E2D
 cache.maxElements=\u6700\u5927\u5143\u7D20
-cache.mcexp=\u5931\u8AA4(\u903E\u6642)
-cache.mcnotfound=\u5931\u8AA4(\u627E\u4E0D\u5230)
+cache.mcexp=\u5931\u8AA4
 cache.name=\u540D\u7A31
 cache.quickcount=~ \u5143\u7D20
 cache.tti=\u9592\u7F6E\u6642\u9593(\u79D2)
diff --git a/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java b/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java
index dda2ab735210ed55197ad31564a2b2d1b97e074c..87559b610258f21bb705420c781d4d9a5a11227b 100644
--- a/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java
+++ b/src/main/java/org/olat/commons/servlets/WebDAVManagerImpl.java
@@ -35,7 +35,6 @@ import javax.servlet.http.HttpServletResponse;
 import org.olat.admin.user.delete.service.UserDeletionManager;
 import org.olat.basesecurity.BaseSecurityManager;
 import org.olat.basesecurity.BaseSecurityModule;
-import org.olat.core.CoreSpringFactory;
 import org.olat.core.id.Identity;
 import org.olat.core.id.Roles;
 import org.olat.core.id.User;
@@ -66,7 +65,7 @@ public class WebDAVManagerImpl extends WebDAVManager {
 	private static final String BASIC_AUTH_REALM = "OLAT WebDAV Access";
 	private CoordinatorManager coordinatorManager;
 
-	private CacheWrapper timedSessionCache;
+	private CacheWrapper<String,UserSession> timedSessionCache;
 	private UserSessionManager sessionManager;
 
 	/**
@@ -88,6 +87,7 @@ public class WebDAVManagerImpl extends WebDAVManager {
 	/**
 	 * @see org.olat.commons.servlets.WebDAVManager#handleAuthentication(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 	 */
+	@Override
 	protected boolean handleAuthentication(HttpServletRequest req, HttpServletResponse resp) {
 		UserSession usess = handleBasicAuthentication(req, resp);
 		if (usess == null) return false;
@@ -101,12 +101,12 @@ public class WebDAVManagerImpl extends WebDAVManager {
 	/**
 	 * @see org.olat.commons.servlets.WebDAVManager#getUserSession(javax.servlet.http.HttpServletRequest)
 	 */
+	@Override
 	protected UserSession getUserSession(HttpServletRequest req) {
 		return (UserSession)req.getAttribute(SecureWebdavServlet.REQUEST_USERSESSION_KEY);
 	}
 	
 	private UserSession handleBasicAuthentication(HttpServletRequest request, HttpServletResponse response) {
-		
 		if (timedSessionCache == null) {
 			synchronized (this) {
 				timedSessionCache = coordinatorManager.getCoordinator().getCacher().getCache(WebDAVManager.class.getSimpleName(), "webdav");
@@ -117,7 +117,7 @@ public class WebDAVManagerImpl extends WebDAVManager {
 		String authHeader = request.getHeader("Authorization");
 		if (authHeader != null) {
 			// fetch user session from a previous authentication
-			UserSession usess = (UserSession)timedSessionCache.get(authHeader);
+			UserSession usess = timedSessionCache.get(authHeader);
 			if (usess != null && usess.isAuthenticated()) {
 				return usess;
 			}
@@ -130,12 +130,12 @@ public class WebDAVManagerImpl extends WebDAVManager {
 				if (basic.equalsIgnoreCase("Basic")) {
 					String credentials = st.nextToken();
 					usess = handleBasicAuthentication(credentials, request);
-					
 				}
 			}
 			
 			if(usess != null) {
 				timedSessionCache.put(authHeader, usess);
+				return usess;
 			}
 		}
 
diff --git a/src/main/java/org/olat/core/defaults/dispatcher/StaticMediaDispatcher.java b/src/main/java/org/olat/core/defaults/dispatcher/StaticMediaDispatcher.java
index 81da68e9ac51a074ed4de89e00974e74a9ccac2b..abb680df39760e210c14189b1bd1d402231091dc 100644
--- a/src/main/java/org/olat/core/defaults/dispatcher/StaticMediaDispatcher.java
+++ b/src/main/java/org/olat/core/defaults/dispatcher/StaticMediaDispatcher.java
@@ -72,7 +72,8 @@ public class StaticMediaDispatcher extends LogDelegator implements Dispatcher {
 	 * @see org.olat.core.dispatcher.Dispatcher#execute(javax.servlet.http.HttpServletRequest,
 	 *      javax.servlet.http.HttpServletResponse, java.lang.String)
 	 */
-	public void execute(HttpServletRequest request, HttpServletResponse response, @SuppressWarnings("unused") String uriPrefix) {
+	@Override
+	public void execute(HttpServletRequest request, HttpServletResponse response, String uriPrefix) {
 		String pathInfo = request.getPathInfo();
 		if (pathInfo == null) {
 			// huh? What's this, send not found, don't know what to do here
@@ -91,7 +92,14 @@ public class StaticMediaDispatcher extends LogDelegator implements Dispatcher {
 		else {
 			// version provided - remove it
 			String version = Settings.getBuildIdentifier();
-			staticRelPath = pathInfo.substring(mapperPath.length() + 1 + version.length(), pathInfo.length());
+			int start = mapperPath.length() + 1 + version.length();
+			int end = pathInfo.length();
+			if(start <= end) {
+				staticRelPath = pathInfo.substring(start, end);
+			} else {
+				ServletUtil.serveResource(request, response, new NotFoundMediaResource("error"));
+				return;
+			}
 		}
 		
 		// remove any .. in the path
diff --git a/src/main/java/org/olat/core/servlets/OLATServlet.java b/src/main/java/org/olat/core/servlets/OLATServlet.java
index 12ce7be175c33dfbe68dd4d23ba9aebfab6ff7a5..d3f47db923930616b89c7bf60c5cf9bafdba16e0 100644
--- a/src/main/java/org/olat/core/servlets/OLATServlet.java
+++ b/src/main/java/org/olat/core/servlets/OLATServlet.java
@@ -96,6 +96,22 @@ public class OLATServlet extends HttpServlet {
 	public void destroy() {
 		//
 	}
+	
+	
+	/**
+	 * Filter BitKinex at the root
+	 */
+	@Override
+	public void service(HttpServletRequest req, HttpServletResponse res)
+	throws ServletException, IOException {
+		String userAgent = req.getHeader("User-Agent");
+		if(userAgent != null && userAgent.indexOf("BitKinex") >= 0) {
+			//BitKinex isn't allow to see this context
+			res.sendError(HttpServletResponse.SC_FORBIDDEN);
+		} else {
+			super.service(req, res);
+		}
+	}
 
 	/**
 	 * Called when the HTTP request method is GET. This method just calls the
diff --git a/src/main/java/org/olat/core/servlets/SecureWebdavServlet.java b/src/main/java/org/olat/core/servlets/SecureWebdavServlet.java
index d4d2ce5abc656206b28b2a069593ad786452bd5e..fdc2ae14b115c1706fed7f593cf1f322172ae746 100644
--- a/src/main/java/org/olat/core/servlets/SecureWebdavServlet.java
+++ b/src/main/java/org/olat/core/servlets/SecureWebdavServlet.java
@@ -57,10 +57,12 @@ import org.apache.naming.resources.Resource;
 import org.olat.core.commons.persistence.DBFactory;
 import org.olat.core.helpers.Settings;
 import org.olat.core.id.Identity;
-import org.olat.core.logging.DBRuntimeException;
 import org.olat.core.logging.OLATRuntimeException;
+import org.olat.core.logging.OLog;
 import org.olat.core.logging.Tracing;
+import org.olat.core.logging.activity.ThreadLocalUserActivityLoggerInstaller;
 import org.olat.core.util.UserSession;
+import org.olat.core.util.WorkThreadInformations;
 import org.olat.core.util.i18n.I18nManager;
 import org.olat.core.util.servlets.DOMWriter;
 import org.olat.core.util.servlets.RequestUtil;
@@ -86,6 +88,9 @@ import org.xml.sax.InputSource;
 public class SecureWebdavServlet
     extends DefaultServlet {
 
+	private static final long serialVersionUID = -4935604508424445093L;
+	private static final OLog log = Tracing.createLoggerFor(SecureWebdavServlet.class);
+
     // -------------------------------------------------------------- Constants
 
 		public static final String REQUEST_USERSESSION_KEY = "__usess";
@@ -266,36 +271,55 @@ public class SecureWebdavServlet
         return documentBuilder;
     }
 
-
     /**
-     * Handles the special WebDAV methods.
+     * Wrap the request around the same calls as the OLATServlet
      */
-    protected void service(HttpServletRequest req, HttpServletResponse resp)
+    protected void service(HttpServletRequest request, HttpServletResponse resp)
         throws ServletException, IOException {
-    	boolean success = false;
     	try {
-    		Tracing.setUreq(req);
-    		I18nManager.attachI18nInfoToThread(req);
-	        
+    		Tracing.setUreq(request);
+    		I18nManager.attachI18nInfoToThread(request);
+    		ThreadLocalUserActivityLoggerInstaller.initUserActivityLogger(request);
+    		//fxdiff FXOLAT-97: high CPU load tracker
+    		WorkThreadInformations.set("Serve request: " + request.getRequestURI());
+
+    		secureService(request, resp);
+    		
+    	} finally {
+  			//fxdiff FXOLAT-97: high CPU load tracker
+  			WorkThreadInformations.unset();
+  			ThreadLocalUserActivityLoggerInstaller.resetUserActivityLogger();
+  			I18nManager.remove18nInfoFromThread();
+  			Tracing.setUreq(null);
+  			DBFactory.getInstanceForClosing().closeSession();
+  		}
+    }
+    
+    /**
+     * Handles the special WebDAV methods.
+     */
+    protected void secureService(HttpServletRequest req, HttpServletResponse resp) {
+    	try {
     		String method = req.getMethod();
 	      String path = getRelativePath(req);
 	
 	      // OLAT-6294 alsways set encoding to UTF-8, overwritten later when a resource is different
 	      resp.setCharacterEncoding("UTF-8");
-
-	        if (debug > 0) {
-	            Tracing.logDebug("[" + method + "] " + path, SecureWebdavServlet.class);
-	        }
+	      if (debug > 0) {
+	      	log.debug("[" + method + "] " + path);
+	      }
 	
-					// security check; response header will be set appropriately
-					// returns false if security check failed.
+	      // security check; response header will be set appropriately
+	      // returns false if security check failed.
 	        
-	        if (webDAVManager == null) {
-	        	// is not initialized properly
-	        	return;
-	        }
-      		boolean authenticated = webDAVManager.handleAuthentication(req, resp);
-    			if (!authenticated) return;
+	      if (webDAVManager == null) {
+	      	// is not initialized properly
+	      	return;
+	      }
+	      boolean authenticated = webDAVManager.handleAuthentication(req, resp);
+	      if (!authenticated) {
+	      	return;
+	      }
 					
 	        if (method.equals(METHOD_PROPFIND)) {
 	            doPropfind(req, resp);
@@ -326,28 +350,16 @@ public class SecureWebdavServlet
 	            // DefaultServlet processing
 	            super.service(req, resp);
 	        }
-	        DBFactory.getInstance(false).commitAndCloseSession();
-	        success = true;
     	} catch (Exception e) {
-				Tracing.logError("Exception in WebDAV request", e,  SecureWebdavServlet.class);
+				log.error("Exception in WebDAV request", e);
     		throw new OLATRuntimeException(this.getClass(), "Exception in SecureWebDavServlet.", e);
     	} catch (Error er) {
-    		Tracing.logError("Error in WebDAV request", er,  SecureWebdavServlet.class);
+    		log.error("Error in WebDAV request", er);
     		throw new OLATRuntimeException(this.getClass(), "Error in SecureWebDavServlet.", er);
     	} catch (Throwable er) {
-    		Tracing.logError("Throwable in WebDAV request", er,  SecureWebdavServlet.class);
+    		log.error("Throwable in WebDAV request", er);
     		throw new OLATRuntimeException(this.getClass(), "Throwable in SecureWebDavServlet.", er);
-		} finally {
-			try {
-				if (!success) {
-					DBFactory.getInstance(false).rollbackAndCloseSession();
-				}
-			} finally {
-				I18nManager.remove18nInfoFromThread();
-				// clear user request in thread local of Tracing, as it is no longer needed
-				Tracing.setUreq(null);
-			}
-		}
+    	}
    }
 
 		/////////////////////////////////////////////
diff --git a/src/main/java/org/olat/core/util/SessionInfo.java b/src/main/java/org/olat/core/util/SessionInfo.java
index a8bab833fee06bf330ad7a74a91010a819f0970b..f86eeb136b1538145341b2acf053fc5036e226a4 100644
--- a/src/main/java/org/olat/core/util/SessionInfo.java
+++ b/src/main/java/org/olat/core/util/SessionInfo.java
@@ -26,6 +26,8 @@
 
 package org.olat.core.util;
 
+import java.io.Serializable;
+
 import javax.servlet.http.HttpSession;
 
 import org.olat.admin.sysinfo.manager.SessionStatsManager;
@@ -38,11 +40,13 @@ import org.olat.core.gui.Windows;
  *
  * @author Mike Stock
  */
-public class SessionInfo {
+public class SessionInfo implements Serializable {
 
+	private static final long serialVersionUID = -380173272533291504L;
+	
 	private Long identityKey;
 	private String login;
-	private HttpSession session;
+	private transient HttpSession session;
 	private String firstname;
 	private String lastname;
 	private String fromIP;
diff --git a/src/main/java/org/olat/core/util/UserSession.java b/src/main/java/org/olat/core/util/UserSession.java
index 34c4ae7f104297c8e5aa3f491152a73c5149f364..45aaaa3b2222795697dc52eed81b5d1bf071fc6d 100644
--- a/src/main/java/org/olat/core/util/UserSession.java
+++ b/src/main/java/org/olat/core/util/UserSession.java
@@ -75,7 +75,7 @@ public class UserSession implements HttpSessionBindingListener, GenericEventList
 
 	// the environment (identity, locale, ..) of the identity
 	private IdentityEnvironment identityEnvironment;
-	private transient SessionInfo sessionInfo;
+	private SessionInfo sessionInfo;
 	private transient Map<String,Object> store;
 	/**
 	 * things to put into that should not be clear when signing on (e.g. remember url for a direct jump)
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 8f2755d04eff9dde3bd380093c644e7935c2d5a9..a46a07332e5a5f619967144c470dae36219c8f88 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
@@ -81,7 +81,7 @@ public class InfinispanCacher implements Cacher {
 			CacheConfig oConfig = configs.get(type);
 			if(oConfig != null) {
 				maxEntries = oConfig.getMaxElementsInMemory();
-				maxIdle = oConfig.getTimeToIdle();
+				maxIdle = oConfig.getTimeToIdle() * 1000;//convert seconds of ehcache to milliseconds of infinispan
 			}
 			ConfigurationBuilder builder = new ConfigurationBuilder();
 			builder.eviction().strategy(EvictionStrategy.LRU);
diff --git a/src/main/resources/infinispan-config.xml b/src/main/resources/infinispan-config.xml
index 07d47f89995086077546bad5a4461470d2586484..4ba5419195db9b355c4f00deb52c2bf95f2e3a86 100644
--- a/src/main/resources/infinispan-config.xml
+++ b/src/main/resources/infinispan-config.xml
@@ -45,6 +45,14 @@
 		<expiration maxIdle="900000" wakeUpInterval="5000"/>
 		<transaction transactionMode="NON_TRANSACTIONAL" />
 	</namedCache>
+	
+	<namedCache name="WebDAVManager@webdav">
+		<locking isolationLevel="READ_COMMITTED" concurrencyLevel="1000" lockAcquisitionTimeout="15000" useLockStriping="false"/>
+		<eviction maxEntries="2013" strategy="LRU"/>
+		<expiration maxIdle="900000" wakeUpInterval="5000"/>
+		<transaction transactionMode="NON_TRANSACTIONAL" />
+	</namedCache>
+
 
 	<!-- 
 	Hibernate cache