diff --git a/src/main/java/org/olat/admin/policy/PolicyController.java b/src/main/java/org/olat/admin/policy/PolicyController.java
deleted file mode 100644
index 95953ef8879a41cfcf3830b8a70c3b4ee33e3c87..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/PolicyController.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.admin.policy;
-
-import java.util.List;
-
-import org.olat.basesecurity.BaseSecurityManager;
-import org.olat.basesecurity.Policy;
-import org.olat.core.gui.UserRequest;
-import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.table.ColumnDescriptor;
-import org.olat.core.gui.components.table.DefaultColumnDescriptor;
-import org.olat.core.gui.components.table.DefaultTableDataModel;
-import org.olat.core.gui.components.table.TableController;
-import org.olat.core.gui.components.table.TableDataModel;
-import org.olat.core.gui.components.table.TableGuiConfiguration;
-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.id.Identity;
-
-/**
- * 
- * Description:<br>
- * TODO: Class Description for PolicyController
- * 
- */
-public class PolicyController extends BasicController {
-	
-	private TableController tableCtr;
-	
-	
-	/**
-	 * caller of this constructor must make sure only olat admins come here
-	 * 
-	 * @param ureq
-	 * @param wControl
-	 * @param identity
-	 */
-	public PolicyController(UserRequest ureq, WindowControl wControl, Identity identity) { 
-		super(ureq, wControl);
-		
-		List<Policy> entries = BaseSecurityManager.getInstance().getPoliciesOfIdentity(identity);
-		TableDataModel<Policy> tdm = new PolicyTableDataModel(entries);
-		
-		TableGuiConfiguration tableConfig = new TableGuiConfiguration();
-		
-		tableCtr = new TableController(tableConfig, ureq, getWindowControl(), getTranslator());
-		listenTo(tableCtr);
-		
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.secgroup", 0, null, ureq.getLocale(), ColumnDescriptor.ALIGNMENT_RIGHT));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.policyimpl", 1, null, ureq.getLocale()));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.resourceimplkey", 2, null, ureq.getLocale(), ColumnDescriptor.ALIGNMENT_RIGHT));
-		tableCtr.addColumnDescriptor(new DefaultColumnDescriptor("table.header.resourceimpltype", 3, null, ureq.getLocale()));
-		tableCtr.setTableDataModel(tdm);
-		
-		putInitialPanel(tableCtr.getInitialComponent());
-	}
-
-	public void event(UserRequest ureq, Component source, Event event) {
-		// no component events to listen to
-	}
-	
-	protected void doDispose() {
-		//
-	}
-	
-	private static class PolicyTableDataModel extends DefaultTableDataModel<Policy> {
-		
-		public PolicyTableDataModel(List<Policy> entries) {
-			super(entries);
-		}
-		
-		public int getColumnCount() {
-			// group key, permission, resource
-			return 4;
-		}
-
-		public final Object getValueAt(int row, int col) {
-			Policy o = getObject(row);
-			switch(col) {
-				case 0: return o.getSecurityGroup().getKey();
-				case 1: return o.getPermission();
-				case 2: return o.getOlatResource().getResourceableId();
-				case 3: return o.getOlatResource().getResourceableTypeName();
-			}
-			return o;
-		}
-	}
-}
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_ar.properties
deleted file mode 100644
index 5b3514d17dcb595f69944b1993d55bb1036be31e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_ar.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Feb 22 11:02:29 CET 2010
-table.header.policyimpl=\u0633\u064A\u0627\u0633\u0629
-table.header.resourceimplkey=\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u0635\u062F\u0631
-table.header.resourceimpltype=\u0646\u0648\u0639 \u0627\u0644\u0645\u0635\u062F\u0631
-table.header.secgroup=\u0645\u0641\u062A\u0627\u062D \u0627\u0644\u0645\u062C\u0645\u0648\u0639\u0629
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_bg.properties
deleted file mode 100644
index 879a2bad1c24a82e4be5ee066e05626bd2dd6b02..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_bg.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon May 25 22:32:51 CEST 2009
-table.header.policyimpl=\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430
-table.header.resourceimplkey=\u041A\u043B\u044E\u0447 \u0437\u0430 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
-table.header.resourceimpltype=\u0412\u0438\u0434 \u043C\u0430\u0442\u0435\u0440\u0438\u0430\u043B
-table.header.secgroup=\u041A\u043B\u044E\u0447 \u0437\u0430 \u0433\u0440\u0443\u043F\u0430
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_cs.properties
deleted file mode 100644
index 6f82f20d2a93208e948e0f883a37a3db5db59af3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_cs.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:13 CET 2009
-table.header.policyimpl=Politika
-table.header.resourceimplkey=Zdrojov\u00FD kl\u00ED\u010D
-table.header.resourceimpltype=Typ zdroje
-table.header.secgroup=Skupinov\u00FD kl\u00ED\u010D
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_da.properties
deleted file mode 100644
index 96044d50abf16202d2776365199bd4c02ac3d7b0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_da.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:08 CET 2009
-table.header.policyimpl=Politik
-table.header.resourceimplkey=Ressource n\u00F8gle
-table.header.resourceimpltype=Ressource type
-table.header.secgroup=Gruppen\u00F8gle
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_de.properties
deleted file mode 100644
index 0ffe8cd0061a458d1b0b12b2edfa202659764283..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_de.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:03 CET 2009
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Resource-Key
-table.header.resourceimpltype=Resource-Type
-table.header.secgroup=GroupKey
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_el.properties
deleted file mode 100644
index b8fba9929a588d11726523de40f968e200dbc225..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_el.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:15 CET 2009
-table.header.policyimpl=\u03A0\u03BF\u03BB\u03B9\u03C4\u03B9\u03BA\u03AE
-table.header.resourceimplkey=\u039A\u03BB\u03B5\u03B9\u03B4\u03AF \u03C0\u03CC\u03C1\u03BF\u03C5
-table.header.resourceimpltype=\u03A4\u03CD\u03C0\u03BF\u03C2 \u03C0\u03CC\u03C1\u03BF\u03C5
-table.header.secgroup=\u039A\u03BB\u03B5\u03B9\u03B4\u03AF \u03BF\u03BC\u03AC\u03B4\u03B1\u03C2
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_en.properties
deleted file mode 100644
index 61f555900778e3b1f721ff74364222c6dfb89ca1..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_en.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:17 CET 2009
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Resource key
-table.header.resourceimpltype=Resource type
-table.header.secgroup=Group key
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_es.properties
deleted file mode 100644
index 574eee016fef363607d4c55ff3dcfec650d86f80..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_es.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:20 CET 2009
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Clave de recurso
-table.header.resourceimpltype=Tipo de recurso
-table.header.secgroup=Clave de grupo
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_fa.properties
deleted file mode 100644
index 34446ce38c42535c5477626be2ebd57921447edf..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_fa.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:12 CET 2009
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Resource key
-table.header.resourceimpltype=Resource type
-table.header.secgroup=Group key
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_fr.properties
deleted file mode 100644
index 6e8fa15097ce373cebf0a0235f94a822f2c60a90..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_fr.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:07 CET 2009
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Resource-Key
-table.header.resourceimpltype=Resource-Type
-table.header.secgroup=GroupKey
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_it.properties
deleted file mode 100644
index 5e2b4805d30acc828a2350cad85439b25997e23c..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_it.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:09 CET 2009
-table.header.policyimpl=Polizza diritti
-table.header.resourceimplkey=Chiave di risorsa
-table.header.resourceimpltype=Tipo di risorsa
-table.header.secgroup=Chiave di gruppo
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_jp.properties
deleted file mode 100644
index fe06ccdeecef1a46b4a1b44163ec627323dc4fde..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_jp.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:00 CET 2009
-table.header.policyimpl=\u30DD\u30EA\u30B7\u30FC
-table.header.resourceimplkey=\u30EA\u30BD\u30FC\u30B9\u30AD\u30FC
-table.header.resourceimpltype=\u30EA\u30BD\u30FC\u30B9\u30BF\u30A4\u30D7
-table.header.secgroup=\u30B0\u30EB\u30FC\u30D7\u30AD\u30FC
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_lt.properties
deleted file mode 100644
index 669de79171d228b1ae8f942c68a0e44b677673c7..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_lt.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:01 CET 2009
-table.header.policyimpl=Politika
-table.header.resourceimplkey=Resurs\u0173 raktas
-table.header.resourceimpltype=Resurs\u0173 tipas
-table.header.secgroup=Grup\u0117s raktas
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_nl_NL.properties
deleted file mode 100644
index aa05bbe487606bc9ec7cf06a0a26d861ef69ec00..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_nl_NL.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Thu Sep 08 16:42:42 CEST 2011
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Resource key
-table.header.resourceimpltype=Resource type
-table.header.secgroup=Group key
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pl.properties
deleted file mode 100644
index b65962af91945df8214c9d6293355417fda093f0..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pl.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:16 CET 2009
-table.header.policyimpl=Polisa
-table.header.resourceimplkey=Klucz zasobu
-table.header.resourceimpltype=Typ zasobu
-table.header.secgroup=Klucz grupy
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pt_BR.properties
deleted file mode 100644
index 39f0dd5796971dc7fcfcb0584a1f582882ad6aa4..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pt_BR.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:53:59 CET 2009
-table.header.policyimpl=Pol\u00EDtica 
-table.header.resourceimplkey=Chave de recurso
-table.header.resourceimpltype=Tipo de recurso
-table.header.secgroup=Chave de grupo
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pt_PT.properties
deleted file mode 100644
index 6f11187a06aa2399d862ee0c682dea838fd2450e..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_pt_PT.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:04 CET 2009
-table.header.policyimpl=Pol\u00EDtica 
-table.header.resourceimplkey=Chave de recurso
-table.header.resourceimpltype=Tipo de recurso
-table.header.secgroup=Chave de grupo
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_ru.properties
deleted file mode 100644
index d3ba530aa7116470d1216f2f54755d9ff4fcf02f..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_ru.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:18 CET 2009
-table.header.policyimpl=Policy
-table.header.resourceimplkey=Resource-Key
-table.header.resourceimpltype=Resource-Type
-table.header.secgroup=GroupKey
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_sq.properties
deleted file mode 100644
index 1065a860db13dd3fe642c0718830f18057168cb5..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_sq.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:11 CET 2009
-table.header.policyimpl=Politika
-table.header.resourceimplkey=Kodi i burimeve
-table.header.resourceimpltype=Lloji i burimeve
-table.header.secgroup=\u00C7el\u00EBsi i gruput
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_zh_CN.properties
deleted file mode 100644
index dc741c88d6690f0b30fe8a9a43cebf5f029f77dc..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_zh_CN.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:02 CET 2009
-table.header.policyimpl=\u65B9\u9488
-table.header.resourceimplkey=\u8D44\u6E90\u5173\u952E\u5B57
-table.header.resourceimpltype=\u8D44\u6E90\u7C7B\u578B
-table.header.secgroup=\u7FA4\u7EC4\u5173\u952E\u5B57
diff --git a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_zh_TW.properties
deleted file mode 100644
index cf8550520e70228f14d79c2689e07f84d2b5dd39..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/policy/_i18n/LocalStrings_zh_TW.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-#Mon Mar 02 09:54:05 CET 2009
-table.header.policyimpl=\u653F\u7B56
-table.header.resourceimplkey=\u8CC7\u6E90\u9375
-table.header.resourceimpltype=\u8CC7\u6E90\u985E\u578B
-table.header.secgroup=\u7FA4\u7D44\u9375
diff --git a/src/main/java/org/olat/admin/sysinfo/MRTGStatsDispatcher.java b/src/main/java/org/olat/admin/sysinfo/MRTGStatsDispatcher.java
deleted file mode 100644
index 58e5a7636e901586317b2af1372b9224517f4aa3..0000000000000000000000000000000000000000
--- a/src/main/java/org/olat/admin/sysinfo/MRTGStatsDispatcher.java
+++ /dev/null
@@ -1,637 +0,0 @@
-/**
-* OLAT - Online Learning and Training<br>
-* http://www.olat.org
-* <p>
-* Licensed under the Apache License, Version 2.0 (the "License"); <br>
-* you may not use this file except in compliance with the License.<br>
-* You may obtain a copy of the License at
-* <p>
-* http://www.apache.org/licenses/LICENSE-2.0
-* <p>
-* Unless required by applicable law or agreed to in writing,<br>
-* software distributed under the License is distributed on an "AS IS" BASIS, <br>
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
-* See the License for the specific language governing permissions and <br>
-* limitations under the License.
-* <p>
-* Copyright (c) since 2004 at Multimedia- & E-Learning Services (MELS),<br>
-* University of Zurich, Switzerland.
-* <hr>
-* <a href="http://www.openolat.org">
-* OpenOLAT - Online Learning and Training</a><br>
-* This file has been modified by the OpenOLAT community. Changes are licensed
-* under the Apache 2.0 license as the original file.
-*/
-
-package org.olat.admin.sysinfo;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.logging.Level;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.olat.admin.sysinfo.manager.SessionStatsManager;
-import org.olat.basesecurity.BaseSecurity;
-import org.olat.basesecurity.BaseSecurityManager;
-import org.olat.basesecurity.Constants;
-import org.olat.basesecurity.SecurityGroup;
-import org.olat.commons.coordinate.cluster.jms.ClusterEventBus;
-import org.olat.commons.coordinate.cluster.jms.SimpleProbe;
-import org.olat.core.CoreSpringFactory;
-import org.olat.core.commons.persistence.DBQueryImpl;
-import org.olat.core.dispatcher.Dispatcher;
-import org.olat.core.dispatcher.DispatcherModule;
-import org.olat.core.gui.control.DefaultController;
-import org.olat.core.gui.media.ServletUtil;
-import org.olat.core.id.Identity;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
-import org.olat.core.util.SessionInfo;
-import org.olat.core.util.UserSession;
-import org.olat.core.util.coordinate.CoordinatorManager;
-import org.olat.core.util.session.UserSessionManager;
-import org.olat.course.CourseModule;
-import org.olat.instantMessaging.InstantMessagingModule;
-import org.olat.repository.RepositoryEntry;
-import org.olat.repository.RepositoryManager;
-import org.olat.testutils.codepoints.client.CodepointClient;
-import org.olat.testutils.codepoints.client.CommunicationException;
-import org.olat.testutils.codepoints.client.Probe;
-import org.olat.testutils.codepoints.client.StatId;
-import org.olat.testutils.codepoints.server.Codepoint;
-
-/**
- * Description:<br>
- * Wraps the request to get MRTGStatistics into a dispatcher.
- * 
- * <P>
- * Initial Date:  13.06.2006 <br>
- * @author patrickb
- */
-public class MRTGStatsDispatcher implements Dispatcher {
-	
-	private static final OLog log = Tracing.createLoggerFor(MRTGStatsDispatcher.class);
-	
-	// default allows monitoring only from localhost
-	// "*" means allow from any host (not recommended in real world setups)
-	private String monitoringHost = "127.0.0.1"; 
-	private long lastErrorCount = 0;
-	private String instanceId;
-	
-	private CodepointClient codepointClient_;
-	private Probe dispatchProbe_;
-	private Probe doInSyncEnterProbe_;
-	private Probe doInSyncInsideProbe_;
-	private Probe dbQueryListProbe_;
-	
-	private CoordinatorManager coordinatorManager;
-	
-	/**
-	 * [spring only]
-	 */
-	private MRTGStatsDispatcher(CoordinatorManager coordinatorManager) {
-		this.coordinatorManager = coordinatorManager;
-		try{
-			codepointClient_ = Codepoint.getLocalLoopCodepointClient();
-			dispatchProbe_ = codepointClient_.startProbingBetween(
-					"org.olat.core.dispatcher.DispatcherAction.execute-start", 
-					"org.olat.core.dispatcher.DispatcherAction.execute-end");
-			doInSyncEnterProbe_ = codepointClient_.startProbingBetween(
-					"org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-before-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync", 
-					"org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-in-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync");
-			doInSyncInsideProbe_ = codepointClient_.startProbingBetween(
-					"org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-in-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync", 
-					"org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync-after-sync.org.olat.commons.coordinate.cluster.ClusterSyncer.doInSync");
-			dbQueryListProbe_ = codepointClient_.startProbingBetween(
-					"org.olat.core.commons.persistence.DBQueryImpl.list-entry", 
-					"org.olat.core.commons.persistence.DBQueryImpl.list-exit");
-			dispatchProbe_.logifSlowerThan(8000, Level.WARNING);
-			doInSyncEnterProbe_.logifSlowerThan(200, Level.WARNING);
-			doInSyncInsideProbe_.logifSlowerThan(1000, Level.WARNING);
-			dbQueryListProbe_.logifSlowerThan(1300, Level.WARNING);
-		} catch(RuntimeException re) {
-			log.info("Certain MRTG Statistics will not be available since Codepoints are disabled");
-		} catch (CommunicationException e) {
-			log.info("Certain MRTG Statistics will not be available since Codepoints are disabled");
-		}
-	}
-	
-	/**
-	 * @see org.olat.core.dispatcher.Dispatcher#execute(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
-	 */
-	@Override
-	public void execute(HttpServletRequest request, HttpServletResponse response) {
-		if(log.isDebug()){
-			String uriPrefix = DispatcherModule.getLegacyUriPrefix(request);
-			log.debug("serving MRTGStats on uriPrefix [[["+uriPrefix+"]]]");
-		}
-		returnMRTGStats(request, response);
-	}
-
-	private String roundedStatValueOf(Probe probe, StatId statId) {
-		try{
-			final int value = Math.round(probe.getStatValue(statId)*100)/100;
-			if (value>=0) {
-				return String.valueOf(value);
-			} else {
-				return "0";
-			}
-		} catch (CommunicationException e) {
-			e.printStackTrace(System.out);
-			return "0";
-		}
-	}
-		
-	private String roundedValueOf(long value) {
-		if (value>=0) {
-			return String.valueOf(value);
-		} else {
-			return "0";
-		}
-	}
-	
-	/**
-	 * @param request
-	 * @param response
-	 */
-	private void returnMRTGStats(HttpServletRequest request, HttpServletResponse response) {
-		if (!request.getRemoteAddr().equals(monitoringHost) && !monitoringHost.equals("*")) { 
-			// limit to allowed hosts
-			log.audit("Trying to access stats from other host than configured (" + monitoringHost + ") : " + request.getRemoteAddr());
-			DispatcherModule.sendForbidden(request.getPathInfo(), response);
-		}
-		String command = request.getParameter("cmd");
-		if (command == null) command = "users";
-		StringBuilder result = new StringBuilder();
-		int httpsCount = 0;
-		int activeSessionCnt = 0;
-		if (command.equals("users")) { // get user stats of (authenticated) usersessions
-			UserSessionManager sessionManager = CoreSpringFactory.getImpl(UserSessionManager.class);
-			Set<UserSession> userSessions = sessionManager.getAuthenticatedUserSessions();
-			for (Iterator<UserSession> it_usess = userSessions.iterator(); it_usess.hasNext();) {
-				UserSession usess = it_usess.next();
-				activeSessionCnt++;
-				SessionInfo sessInfo = usess.getSessionInfo();
-				if (sessInfo.isSecure()) httpsCount++;
-			}
-			result.append(activeSessionCnt); // active authenticated sessions
-			result.append("\n");
-			result.append(httpsCount); // ,,, of which are secure
-			result.append("\n0\n");
-			result.append(instanceId);
-		} else if (command.equals("webdav")) { // get webdav stats of (authenticated) usersessions
-			UserSessionManager sessionManager = CoreSpringFactory.getImpl(UserSessionManager.class);
-			Set<UserSession> userSessions = sessionManager.getAuthenticatedUserSessions();
-			int webdavcount = 0;
-			int securewebdavcount = 0;
-			for (Iterator<UserSession> it_usess = userSessions.iterator(); it_usess.hasNext();) {
-				UserSession usess = it_usess.next();
-				SessionInfo sessInfo = usess.getSessionInfo();
-				if (sessInfo.isWebDAV()) {
-					webdavcount++;
-					if (sessInfo.isSecure()) securewebdavcount++;
-				}
-			}
-			result.append(webdavcount); // webdav sessions
-			result.append("\n");
-			result.append(securewebdavcount); // ,,, of which are secure
-			result.append("\n0\n");
-			result.append(instanceId);
-		} else if (command.equals("imstats")) { // get Jabber info
-			if (CoreSpringFactory.getImpl(InstantMessagingModule.class).isEnabled()) {
-				result.append("0");
-				result.append("\n");
-				//result.append(InstantMessagingModule.getAdapter().countUsersRunningFlashClient());
-				result.append(0);
-				result.append("\n0\n");
-				result.append("-");
-			} else {
-				result.append("0\n0\n0\n");
-				result.append("-");
-			}
-		} else if (command.equals("debug")) { // get debug stats
-			// IMPORTANT: do not call too often, since .size() of a weakhashmap may be an expensive operation.
-			// our mrtg default is: once every five minutes.
-			int controllerCnt = DefaultController.getControllerCount();
-			result.append(controllerCnt); // active and not yet disposed
-			result.append("\n0\n0\n");
-			result.append(instanceId);
-			
-		} else if (command.equals("mem")) { // get VM memory stats
-			Runtime r = Runtime.getRuntime();
-			long totalMem = r.totalMemory();
-			// Total used memory in megabyptes
-			result.append((totalMem - r.freeMemory())/1000000).append("\n"); 
-			// Max available memory in VM in megabytes
-			result.append(r.maxMemory()/1000000).append("\n"); 
-			result.append("0\n");
-			result.append(instanceId);
-
-		} else if (command.equals("proc")) { // get VM process stats
-			// Number of concurrent dispatching OLAT threads (concurrent user requests)
-			SessionStatsManager statsManager = CoreSpringFactory.getImpl(SessionStatsManager.class);
-			result.append(statsManager.getConcurrentCounter()).append("\n"); 
-			// Number of active threads
-			ThreadGroup group = Thread.currentThread().getThreadGroup();
-			Thread[] threads = new Thread[ group.activeCount() ]; 
-			group.enumerate( threads, false );
-			int counter = 0;
-			for ( Thread t : threads ) {
-				if (t == null) continue;
-				// http-8080-Processor and TP-Processor  not precise, but good enough
-	      if (t.getName().startsWith("http-") || t.getName().startsWith("ajp-")
-	      		|| t.getName().indexOf("-Processor") > 0) {
-	      	counter++;
-	      }
-			}
-			result.append(counter).append("\n"); 
-			result.append("0\n");
-			result.append(instanceId);
-
-		} else if (command.equals("err")) { // get error stats
-				// Average number of errors per minute since last call
-			long currentErrorCount = Tracing.getErrorCount();
-			long errorDifference = currentErrorCount - lastErrorCount;
-
-			lastErrorCount = currentErrorCount;
-			result.append(errorDifference).append("\n"); 
-			result.append("0\n0\n");
-			result.append(instanceId);
-			
-		} else if (command.startsWith("dispatch")) {
-			
-			if (dispatchProbe_==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				if (command.equals("dispatchAvg")) {
-					result.append(roundedStatValueOf(dispatchProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
-				} else if (command.equals("dispatchMax")) {
-					result.append(roundedStatValueOf(dispatchProbe_, StatId.MAX_TIME_ELAPSED));
-				} else if (command.equals("dispatchCnt")) {
-					result.append(roundedStatValueOf(dispatchProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
-				} else if (command.equals("dispatchReset")) {
-					try {
-						dispatchProbe_.clearStats();
-					} catch (CommunicationException e) {
-						e.printStackTrace(System.out);
-						// ignore otherwise
-					}
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-			
-		} else if (command.startsWith("dbQueryList")) {
-			
-			if (dbQueryListProbe_==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				if (command.equals("dbQueryListAvg")) {
-					result.append(roundedStatValueOf(dbQueryListProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
-				} else if (command.equals("dbQueryListMax")) {
-					result.append(roundedStatValueOf(dbQueryListProbe_, StatId.MAX_TIME_ELAPSED));
-				} else if (command.equals("dbQueryListCnt")) {
-					result.append(roundedStatValueOf(dbQueryListProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
-				} else if (command.equals("dbQueryListReset")) {
-					try {
-						dbQueryListProbe_.clearStats();
-					} catch (CommunicationException e) {
-						e.printStackTrace(System.out);
-						// ignore otherwise
-					}
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-			
-		} else if (command.startsWith("doInSyncEnter")) {
-			
-			if (doInSyncEnterProbe_==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				if (command.equals("doInSyncEnterAvg")) {
-					result.append(roundedStatValueOf(doInSyncEnterProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
-				} else if (command.equals("doInSyncEnterMax")) {
-					result.append(roundedStatValueOf(doInSyncEnterProbe_, StatId.MAX_TIME_ELAPSED));
-				} else if (command.equals("doInSyncEnterCnt")) {
-					result.append(roundedStatValueOf(doInSyncEnterProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
-				} else if (command.equals("doInSyncEnterReset")) {
-					try {
-						doInSyncEnterProbe_.clearStats();
-					} catch (CommunicationException e) {
-						e.printStackTrace(System.out);
-						// ignore otherwise
-					}
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-
-		} else if (command.startsWith("doInSyncInside")) {
-			
-			if (doInSyncInsideProbe_==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				if (command.equals("doInSyncInsideAvg")) {
-					result.append(roundedStatValueOf(doInSyncInsideProbe_, StatId.TOTAL_AVERAGE_TIME_ELAPSED));
-				} else if (command.equals("doInSyncInsideMax")) {
-					result.append(roundedStatValueOf(doInSyncInsideProbe_, StatId.MAX_TIME_ELAPSED));
-				} else if (command.equals("doInSyncInsideCnt")) {
-					result.append(roundedStatValueOf(doInSyncInsideProbe_, StatId.TOTAL_MEASUREMENTS_COUNT));
-				} else if (command.equals("doInSyncInsideReset")) {
-					try {
-						doInSyncInsideProbe_.clearStats();
-					} catch (CommunicationException e) {
-						e.printStackTrace(System.out);
-						// ignore otherwise
-					}
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.startsWith("jmsDelivery")) {
-			
-			final ClusterEventBus clusterEventBus = (ClusterEventBus) coordinatorManager.getCoordinator().getEventBus();
-			if (clusterEventBus==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				SimpleProbe probe = clusterEventBus.getMrtgProbeJMSDeliveryTime();
-				if (command.equals("jmsDeliveryAvg")) {
-					result.append(roundedValueOf(probe.getAvg()));
-				} else if (command.equals("jmsDeliveryMax")) {
-					result.append(roundedValueOf(probe.getMax()));
-				} else if (command.equals("jmsDeliveryCnt")) {
-					result.append(roundedValueOf(probe.getNum()));
-				} else if (command.equals("jmsDeliveryReset")) {
-					probe.reset();
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.startsWith("jmsProcessing")) {
-			
-			final ClusterEventBus clusterEventBus = (ClusterEventBus) coordinatorManager.getCoordinator().getEventBus();
-			if (clusterEventBus==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				SimpleProbe probe = clusterEventBus.getMrtgProbeJMSProcessingTime();
-				if (command.equals("jmsProcessingAvg")) {
-					result.append(roundedValueOf(probe.getAvg()));
-				} else if (command.equals("jmsProcessingMax")) {
-					result.append(roundedValueOf(probe.getMax()));
-				} else if (command.equals("jmsProcessingCnt")) {
-					result.append(roundedValueOf(probe.getNum()));
-				} else if (command.equals("jmsProcessingReset")) {
-					probe.reset();
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.startsWith("jmsWaiting")) {
-			
-			final ClusterEventBus clusterEventBus = (ClusterEventBus) coordinatorManager.getCoordinator().getEventBus();
-			if (clusterEventBus==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				SimpleProbe probe = clusterEventBus.getMrtgProbeJMSLoad();
-				if (command.equals("jmsWaitingAvg")) {
-					result.append(roundedValueOf(probe.getAvg()));
-				} else if (command.equals("jmsWaitingMax")) {
-					result.append(roundedValueOf(probe.getMax()));
-				} else if (command.equals("jmsWaitingCnt")) {
-					result.append(roundedValueOf(probe.getNum()));
-				} else if (command.equals("jmsWaitingReset")) {
-					probe.reset();
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.startsWith("jmsQueued")) {
-			
-			final ClusterEventBus clusterEventBus = (ClusterEventBus) coordinatorManager.getCoordinator().getEventBus();
-			if (clusterEventBus==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				SimpleProbe probe = clusterEventBus.getMrtgProbeJMSEnqueueTime();
-				if (command.equals("jmsQueuedAvg")) {
-					result.append(roundedValueOf(probe.getAvg()));
-				} else if (command.equals("jmsQueuedMax")) {
-					result.append(roundedValueOf(probe.getMax()));
-				} else if (command.equals("jmsQueuedCnt")) {
-					result.append(roundedValueOf(probe.getNum()));
-				} else if (command.equals("jmsQueuedReset")) {
-					probe.reset();
-					result.append("0");
-				}
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("SecurityGroupMembershipImpl")) { // SecurityGroupMembershipImpl
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.basesecurity.SecurityGroupMembershipImpl");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("BGAreaImpl")) { // BGAreaImpl
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.group.area.BGAreaImpl");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("BusinessGroupImpl")) { // BusinessGroupImpl
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.group.BusinessGroupImpl");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("OLATResourceImpl")) { // OLATResourceImpl
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.resource.OLATResourceImpl");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("TheRest")) { // PolicyImpl
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("THEREST");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("PolicyImpl")) { // PolicyImpl
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("THEREST");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-			
-			// dump details about all the non registered ones
-			Set<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> entries = DBQueryImpl.listTableStatsMap_.entrySet();
-			Set<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> nonRegisteredEntries = new HashSet<Entry<String,org.olat.core.commons.persistence.SimpleProbe>>();
-			long sum = 0;
-			for (Iterator<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> it = entries.iterator(); it.hasNext();) {
-				Entry<String, org.olat.core.commons.persistence.SimpleProbe> entry = it.next();
-				if (!DBQueryImpl.registeredTables_.contains(entry.getKey())) {
-					nonRegisteredEntries.add(entry);
-					sum+=entry.getValue().getSum();
-				}
-			}
-			List<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> list = new LinkedList<Entry<String, org.olat.core.commons.persistence.SimpleProbe>>(nonRegisteredEntries);
-			Collections.sort(
-					list, new Comparator<Entry<String, org.olat.core.commons.persistence.SimpleProbe>>() {
-
-				public int compare(
-						Entry<String, org.olat.core.commons.persistence.SimpleProbe> o1,
-						Entry<String, org.olat.core.commons.persistence.SimpleProbe> o2) {
-					if (o1.getValue().getSum()>o2.getValue().getSum()) {
-						return 1;
-					} else if (o1.getValue().getSum()==o2.getValue().getSum()) {
-						return 0;
-					} else {
-						return -1;
-					}
-				}
-				
-			});
-			for (Iterator<Entry<String, org.olat.core.commons.persistence.SimpleProbe>> it = list.iterator(); it.hasNext();) {
-				Entry<String, org.olat.core.commons.persistence.SimpleProbe> entry = it.next();
-				log.info("MRTGStats: table '"+entry.getKey()+"' uses up "+entry.getValue().getSum()+"ms of a total of "+sum+"ms, which is "+Math.round(1000.0*entry.getValue().getSum()/sum)/10+"%");
-				entry.getValue().reset();
-			}
-		} else if (command.equals("LifeCycleEntry")) { // LifeCycleEntry
-			org.olat.core.commons.persistence.SimpleProbe probe = DBQueryImpl.listTableStatsMap_.get("org.olat.commons.lifecycle.LifeCycleEntry");
-			if (probe==null) {
-				result.append("0\n0\n0\n");
-			} else {
-				result.append(roundedValueOf(probe.getSum()));
-				probe.reset();
-				result.append("\n0\n0\n");
-			}
-			result.append(instanceId);
-		} else if (command.equals("usercount")) { // get number of useraccounts counter
-			BaseSecurity secMgr = BaseSecurityManager.getInstance();
-			SecurityGroup olatuserGroup = secMgr.findSecurityGroupByName(Constants.GROUP_OLATUSERS);
-			int users = secMgr.countIdentitiesOfSecurityGroup(olatuserGroup);
-			long disabled = secMgr.countIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_LOGIN_DENIED);			
-			result.append(users-disabled).append("\n"); // number of active users
-			result.append(disabled).append("\n"); // number of disabled users
-			result.append("0\n");
-			result.append(instanceId);
-			
-		} else if (command.equals("usercountmonthly")) { // get number of different users logged in during last month and last half year
-			BaseSecurity secMgr = BaseSecurityManager.getInstance();
-			Calendar lastLoginLimit = Calendar.getInstance();
-			lastLoginLimit.add(Calendar.MONTH, -1);
-			result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
-			lastLoginLimit.add(Calendar.MONTH, -5); // -1 -5 = -6 for half a year
-			result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
-			result.append("0\n");
-			result.append(instanceId);
-		
-		} else if (command.equals("usercountdaily")) { // get number of different users logged in during last day and last week
-			BaseSecurity secMgr = BaseSecurityManager.getInstance();
-			Calendar lastLoginLimit = Calendar.getInstance();
-			lastLoginLimit.add(Calendar.DAY_OF_YEAR, -1);
-			result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
-			lastLoginLimit.add(Calendar.DAY_OF_YEAR, -6); // -1 - 6 = -7 for last week
-			result.append(secMgr.countUniqueUserLoginsSince(lastLoginLimit.getTime())).append("\n");
-			result.append("0\n");
-			result.append(instanceId);			
-				
-		} else if (command.equals("usercountsince")) { // get number of different users logged in since a period which is specified by parameter date
-			BaseSecurity secMgr = BaseSecurityManager.getInstance();
-			String dateParam = request.getParameter("date");
-			if (dateParam==null) {
-				result.append("date parameter missing. add date=yyyy-MM-dd\n");
-			}
-			else {
-				SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
-				try {
-					Date mydate = df.parse(dateParam);
-					result.append(secMgr.countUniqueUserLoginsSince(mydate)).append("\n");
-				} catch (ParseException e) {
-					result.append("date parameter format error. expected: yyyy-MM-dd\n");
-				}
-				
-				result.append("0\n0\n");
-				result.append(instanceId);
-			}
-				
-		}	else if (command.equals("coursecount")) { // get number of activated courses
-			RepositoryManager repoMgr = RepositoryManager.getInstance();
-			int allCourses = repoMgr.countByTypeLimitAccess(CourseModule.ORES_TYPE_COURSE, RepositoryEntry.ACC_OWNERS);
-			int publishedCourses = repoMgr.countByTypeLimitAccess(CourseModule.ORES_TYPE_COURSE, RepositoryEntry.ACC_USERS);
-			result.append(allCourses).append("\n"); // number of all courses
-			result.append(publishedCourses).append("\n"); // number of published courses
-			result.append("0\n");
-			result.append(instanceId);
-		}
-		
-		ServletUtil.serveStringResource(request, response, result.toString());
-	}
-
-	/**
-	 * Setter for Spring configuration
-	 * @param monitoringHost
-	 */
-	public void setMonitoringHost(String monitoringHost) {
-		this.monitoringHost = monitoringHost;
-	}
-	
-	/**
-	 * Spring getter
-	 * @return
-	 */
-	public String getMonitoringHost() {
-		return monitoringHost;
-	}
-
-	public void setInstanceId(String instanceId) {
-		this.instanceId = instanceId;
-	}
-
-
-	
-	
-}
diff --git a/src/main/java/org/olat/admin/user/UserAdminController.java b/src/main/java/org/olat/admin/user/UserAdminController.java
index 7632ed3ad572fee098c65d47e5c1694a4cbbab8b..e8a8366702612fffb04c9aed1e12eb2b601464aa 100644
--- a/src/main/java/org/olat/admin/user/UserAdminController.java
+++ b/src/main/java/org/olat/admin/user/UserAdminController.java
@@ -27,7 +27,6 @@ package org.olat.admin.user;
 
 import java.util.List;
 
-import org.olat.admin.policy.PolicyController;
 import org.olat.admin.user.course.CourseOverviewController;
 import org.olat.admin.user.groups.GroupOverviewController;
 import org.olat.basesecurity.Authentication;
@@ -79,17 +78,14 @@ import org.olat.user.UserPropertiesController;
  */
 public class UserAdminController extends BasicController implements Activateable2 {
 
-		
 	// NLS support
-	
 	private static final String NLS_ERROR_NOACCESS_TO_USER = "error.noaccess.to.user";
 	private static final String NLS_FOUND_PROPERTY	= "found.property";
-	private static final String NLS_EDIT_UPROFILE		= "edit.uprofile";
+	private static final String NLS_EDIT_UPROFILE = "edit.uprofile";
 	private static final String NLS_EDIT_UPREFS			= "edit.uprefs";
 	private static final String NLS_EDIT_UPWD 			= "edit.upwd";
 	private static final String NLS_EDIT_UAUTH 			= "edit.uauth";
 	private static final String NLS_EDIT_UPROP			= "edit.uprop";
-	private static final String NLS_EDIT_UPOLICIES	= "edit.upolicies";
 	private static final String NLS_EDIT_UROLES			= "edit.uroles";
 	private static final String NLS_EDIT_UQUOTA			= "edit.uquota";
 	private static final String NLS_VIEW_GROUPS 		= "view.groups";
@@ -303,12 +299,6 @@ public class UserAdminController extends BasicController implements Activateable
 			userTabP.addTab(translate(NLS_EDIT_UPROP), propertiesCtr.getInitialComponent());
 		}
 		
-		Boolean canPolicies = BaseSecurityModule.USERMANAGER_ACCESS_TO_POLICIES;
-		if (canPolicies.booleanValue() || isOlatAdmin) {
-			policiesCtr = new PolicyController(ureq, getWindowControl(), identity);
-			userTabP.addTab(translate(NLS_EDIT_UPOLICIES), policiesCtr.getInitialComponent());
-		}
-		
 		Boolean canStartGroups = BaseSecurityModule.USERMANAGER_CAN_START_GROUPS;
 		grpCtr = new GroupOverviewController(ureq, getWindowControl(), identity, canStartGroups);
 		listenTo(grpCtr);
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ar.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ar.properties
index 30b19dd4d2f8347b770c9330bedeacdfe50966a1..0dedbd3265a577692a699fe7bd82837fb8cdd19e 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ar.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ar.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=\u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u0645\u0633\u
 content.usermgmt.userfound=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0625\u062F\u0627\u0631\u0629 \u0627\u0644\u0645\u0633\u062A\u062E\u062F\u0645
 edit.uauth=\u0627\u0644\u0645\u0635\u0627\u062F\u0642\u0627\u062A
 edit.uhomepage=\u0628\u0637\u0627\u0642\u0629 \u0627\u0644\u062A\u0639\u0627\u0631\u0641
-edit.upolicies=\u062D\u0642\u0648\u0642
 edit.uprefs=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0627\u0644\u0646\u0638\u0627\u0645
 edit.uprofile=\u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0634\u062E\u0635\u0649 \u0644\u0644\u0645\u0633\u062A\u062E\u062F\u0645
 edit.uprop=\u062E\u0635\u0627\u0626\u0635
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_bg.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_bg.properties
index 3c24abe74b68780482e08f345dc6dc6357765c4c..ba2b8ffcfa8a344b2e2fd07c17b2c3cba330b486 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_bg.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_bg.properties
@@ -20,7 +20,6 @@ content.usermgmt.title=\u041C\u0435\u043D\u0438\u0434\u0436\u043C\u044A\u043D\u0
 content.usermgmt.userfound=\u041C\u0435\u043D\u0430\u0436\u0438\u0440\u0430\u0439\u0442\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u043F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B
 edit.uauth=\u0410\u0432\u0442\u0435\u043D\u0442\u0438\u043A\u0430\u0446\u0438\u0438
 edit.uhomepage=\u0412\u0438\u0437\u0438\u0442\u043D\u0430 \u043A\u0430\u0440\u0442\u0438\u0447\u043A\u0430
-edit.upolicies=\u041F\u0440\u0430\u0432\u0430
 edit.uprefs=\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
 edit.uprofile=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u0438 \u043F\u0440\u043E\u0444\u0438\u043B
 edit.uprop=\u0425\u0430\u0440\u0430\u043A\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043A\u0438
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_cs.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_cs.properties
index 8226e4216e52e3c7b6c3c6d1e50f6339fc36f5ab..935384db2afb743fd3d1b48451b1dcedb29d4a77 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_cs.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_cs.properties
@@ -17,7 +17,6 @@ content.usermgmt.text1=Zde m\u016F\u017Eete m\u011Bnit a spravovat data u\u017Ei
 content.usermgmt.title=Spr\u00E1va u\u017Eivatele
 content.usermgmt.userfound=Spravovat u\u017Eivatelsk\u00E1 nastaven\u00ED
 edit.uauth=Ov\u011B\u0159en\u00ED
-edit.upolicies=Pr\u00E1va
 edit.uprefs=Syst\u00E9mov\u00E1 nastaven\u00ED
 edit.uprofile=Profil u\u017Eivatele
 edit.uprop=Parametry
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_da.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_da.properties
index 918c1e16b7306b954b05a8be97feb107342acec4..55d1408cb9efe7b6f2577de41bb7715c6df71ae5 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_da.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_da.properties
@@ -12,7 +12,6 @@ content.usermgmt.text1=Her kan du \u00E6ndre eller administrere data for eksiste
 content.usermgmt.title=Brugeradministration
 content.usermgmt.userfound=Administrer brugerindstillinger
 edit.uauth=Autentifikationer
-edit.upolicies=Rettigheder
 edit.uprefs=Systemindstillinger
 edit.uprofile=Brugerprofil
 edit.uprop=Egenskaber
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties
index 610698fc59740a7065bc9f83ad91b18cd36615d4..cf0aefd2fc58e752bec14052845ef44f45e6a951 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_de.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=Benutzerverwaltung
 content.usermgmt.userfound=Benutzereinstellungen verwalten
 edit.uauth=Authentifizierungen
 edit.uhomepage=Visitenkarte
-edit.upolicies=Rechte
 edit.uprefs=Systemeinstellungen
 edit.uprofile=Benutzerprofil
 edit.uprop=Properties
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_el.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_el.properties
index 507a9cfc2fd11d42783ac3a08163e7eca43718a2..517bc5992ec177a90020cbf207b85d202a1ae5ed 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_el.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_el.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u0
 content.usermgmt.userfound=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03C1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03C9\u03BD \u03C7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD
 edit.uauth=\u03A0\u03B9\u03C3\u03C4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2
 edit.uhomepage=\u039A\u03AC\u03C1\u03C4\u03B1 \u0395\u03C0\u03AF\u03C3\u03BA\u03B5\u03C8\u03B7\u03C2
-edit.upolicies=\u0394\u03B9\u03BA\u03B1\u03B9\u03CE\u03BC\u03B1\u03C4\u03B1
 edit.uprefs=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03C3\u03C5\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2
 edit.uprofile=\u03A0\u03C1\u03BF\u03C6\u03AF\u03BB \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7
 edit.uprop=\u0399\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B5\u03C2
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties
index ad1b492bddac1c8a24408487a073430f3dd69c58..419d264a03043cfac0caedee9ad1bafe5f7b8d0f 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_en.properties
@@ -22,7 +22,6 @@ content.usermgmt.userfound=Manage user settings
 deselectall=$org.olat.core.gui.components.table\:uncheckall
 edit.uauth=Authentications
 edit.uhomepage=Visiting card
-edit.upolicies=Rights
 edit.uprefs=System settings
 edit.uprofile=User profile
 edit.uprop=Properties
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_es.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_es.properties
index 6361ab211edad945cbd0a836c8c39625954ca2d7..6b015f62c33bc69bc09ac43fd90fc23f06c79185 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_es.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_es.properties
@@ -18,7 +18,6 @@ content.usermgmt.title=Gesti\u00F3n de usuarios
 content.usermgmt.userfound=Gestionar opciones y preferencias de usuario
 edit.uauth=Autentificaciones
 edit.uhomepage=Tarjeta de visitante
-edit.upolicies=Permisos
 edit.uprefs=Opciones del sistema
 edit.uprofile=Perfil del usuario
 edit.uprop=Propiedades
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fa.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fa.properties
index abbdd55b263f99ff391296149f70d7334e5fe352..7f198ded6508bb29da3e5677cec1156b8f103f5c 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fa.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fa.properties
@@ -10,8 +10,7 @@ command.mail=\u0627\u0631\u0633\u0627\u0644 \u0627\u06CC\u0645\u06CC\u0644 \u062
 content.usermgmt.text1=\u0634\u0645\u0627 \u062F\u0631 \u0627\u06CC\u0646 \u0642\u0633\u0645\u062A \u0645\u06CC \u062A\u0648\u0627\u0646\u06CC\u062F \u0627\u0637\u0644\u0627\u0639\u0627\u062A \u06A9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u0648\u0644\u0627\u062A \u0631\u0627 \u0645\u062F\u06CC\u0631\u06CC\u062A \u06A9\u0646\u06CC\u062F. \u0644\u0637\u0641\u0627\u064B \u0646\u0627\u0645 \u0628\u0627 \u062C\u0633\u062A\u062C\u0648\u06CC \u0646\u0627\u0645 \u06A9\u0627\u0631\u0628\u0631 \u0634\u0631\u0648\u0639 \u0646\u0645\u0627\u06CC\u06CC\u062F 
 content.usermgmt.title=\u0645\u062F\u06CC\u0631\u06CC\u062A \u06A9\u0627\u0631\u0628\u0631 
 content.usermgmt.userfound=\u0645\u062F\u06CC\u0631\u06CC\u062A \u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u06A9\u0627\u0631\u0628\u0631 
-edit.uauth=\u0627\u062A\u0635\u0627\u0644 \u0628\u0647 \u0633\u06CC\u0633\u062A\u0645 
-edit.upolicies=\u062D\u0642\u0648\u0642
+edit.uauth=\u0627\u062A\u0635\u0627\u0644 \u0628\u0647 \u0633\u06CC\u0633\u062A\u0645
 edit.uprefs=\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u0633\u06CC\u0633\u062A\u0645 
 edit.uprofile=\u067E\u0631\u0648\u0646\u062F\u0647 \u06A9\u0627\u0631\u0628\u0631 
 edit.uprop=\u0645\u0634\u062E\u0635\u0627\u062A 
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties
index 3e628dd2976483df37741a53fbd5825e2e63d617..980ee646d6bf56e53facfdd49e797042541f314c 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_fr.properties
@@ -22,7 +22,6 @@ content.usermgmt.userfound=G\u00E9rer les r\u00E9glages des utilisateurs
 deselectall=$org.olat.core.gui.components.table\:uncheckall
 edit.uauth=Authentifications
 edit.uhomepage=Cartes de visite
-edit.upolicies=Droits
 edit.uprefs=Param\u00E8tres syst\u00E8me
 edit.uprofile=Profil utilisateur
 edit.uprop=Propri\u00E9t\u00E9s 
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_it.properties
index f39f88d1b041b17dfb9c19c6373a01c90ca990c0..afadcb62546bc26e2e470225ac23f9352cbcf42f 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_it.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=Gestione degli utenti
 content.usermgmt.userfound=Gestione delle preferenze degli utenti 
 edit.uauth=Autenticazioni
 edit.uhomepage=Biglietto da vista
-edit.upolicies=Diritti
 edit.uprefs=Preferenze di sistema
 edit.uprofile=Profilo d'utente
 edit.uprop=Attributi 
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_jp.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_jp.properties
index 7ba6aa7d031cd7a3f4a288f3702a6e7b51762269..e91f35df4cdcef17bdc64d8d767423ae2ec59595 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_jp.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_jp.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=\u30E6\u30FC\u30B6\u7BA1\u7406
 content.usermgmt.userfound=\u30E6\u30FC\u30B6\u8A2D\u5B9A\u306E\u7BA1\u7406
 edit.uauth=\u8A8D\u8A3C
 edit.uhomepage=\u8A2A\u554F\u30AB\u30FC\u30C9
-edit.upolicies=\u6A29\u9650
 edit.uprefs=\u30B7\u30B9\u30C6\u30E0\u8A2D\u5B9A
 edit.uprofile=\u30E6\u30FC\u30B6\u30D7\u30ED\u30D5\u30A1\u30A4\u30EB
 edit.uprop=\u30D7\u30ED\u30D1\u30C6\u30A3
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_lt.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_lt.properties
index d2990edeb439d17e98c92963ac2a22b521f7d390..53d47b56a63e9eadc88966f107e82fe9aa0894f9 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_lt.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_lt.properties
@@ -11,7 +11,6 @@ content.usermgmt.text1=\u010Cia galite tvarkyti esam\u0173 OLAT naudotoj\u0173 d
 content.usermgmt.title=Naudotoj\u0173 valdymas
 content.usermgmt.userfound=Tvarkyti naudotojo nustatymus
 edit.uauth=Autentifikacija
-edit.upolicies=Teis\u0117s
 edit.uprefs=Sisteminiai nustatymai
 edit.uprofile=Naudotojo sandara
 edit.uprop=Savyb\u0117s
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_nl_NL.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_nl_NL.properties
index 269e841a60b27b78d06d0165003ef77cb923e333..9d9ecfec79c47bd69968ae81ddf1d07f3a0b5440 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_nl_NL.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_nl_NL.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=Gebruikersbeheer
 content.usermgmt.userfound=Gebruikerinstellingen beheren
 edit.uauth=Authenticaties
 edit.uhomepage=Visitekaartje
-edit.upolicies=Rechten
 edit.uprefs=Systeeminstellingen
 edit.uprofile=Gebruikersprofiel
 edit.uprop=Properties
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pl.properties
index 213d600da6340eb81fb55b0d82813f1647c6a52f..4c4f9a73a01498bf1c11c7ad0ea13738e97317ea 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pl.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=Zarz\u0105dzanie u\u017Cytkownikiem
 content.usermgmt.userfound=Zarz\u0105dzaj ustawieniami u\u017Cytkownika
 edit.uauth=Autentykacje
 edit.uhomepage=Wizyt\u00F3wka
-edit.upolicies=Uprawnienia
 edit.uprefs=Ustawienia systemowe
 edit.uprofile=Profil u\u017Cytkownika
 edit.uprop=W\u0142a\u015Bciwo\u015Bci
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties
index aa717bbce96ee520d3d00c9188ef24bd2a203445..e79142350a27accf1d84f5e5e16cc904f7ae2610 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_BR.properties
@@ -22,7 +22,6 @@ content.usermgmt.userfound=Gerenciar configura\u00E7\u00F5es de usu\u00E1rio
 deselectall=$org.olat.core.gui.components.table\:uncheckall
 edit.uauth=Authentications
 edit.uhomepage=Cart\u00E3o de visitas
-edit.upolicies=Rights
 edit.uprefs=System settings
 edit.uprofile=User profile
 edit.uprop=Properties
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_PT.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_PT.properties
index d7485dc4bda543d4f5909a2cc49f7eafba69b425..d122cbda2b13ef26dc473cafa52eac1dc2b8a4b5 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_PT.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_pt_PT.properties
@@ -12,7 +12,6 @@ content.usermgmt.text1=Aqui voc\u00EA pode modificar ou gerenciar dados de usu\u
 content.usermgmt.title=Gerenciamento do usu\u00E1rio
 content.usermgmt.userfound=Gerenciar configura\u00E7\u00F5es de usu\u00E1rio
 edit.uauth=Authentications
-edit.upolicies=Rights
 edit.uprefs=System settings
 edit.uprofile=User profile
 edit.uprop=Properties
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ru.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ru.properties
index 11946532405d14e555cd3007d21047ae50f31e40..d50bcd63a46ffc2a6c55d70df79767a0233b23a6 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ru.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_ru.properties
@@ -12,7 +12,6 @@ content.usermgmt.text1=\u0417\u0434\u0435\u0441\u044C \u0412\u044B \u043C\u043E\
 content.usermgmt.title=\u0410\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u0435 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u0435\u0439
 content.usermgmt.userfound=\u0410\u0434\u043C\u0438\u043D\u0438\u0441\u0442\u0440\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
 edit.uauth=\u0410\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438
-edit.upolicies=\u041F\u0440\u0430\u0432\u0430
 edit.uprefs=\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u044B\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 
 edit.uprofile=\u041F\u0440\u043E\u0444\u0438\u043B\u044C \u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u0442\u0435\u043B\u044F
 edit.uprop=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_sq.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_sq.properties
index b07965de2428b813f000c70283229f134e95fb19..b5e1cf41a657825de74167e8951a6cf09ac83ff0 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_sq.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_sq.properties
@@ -12,7 +12,6 @@ content.usermgmt.text1=K\u00EBtu ju mund t'i ndryshoni ose t'i menaxhoni t\u00EB
 content.usermgmt.title=Drejtimi i shfryt\u00EBzuesve
 content.usermgmt.userfound=Drejto p\u00EBrcaktimet e shfryt\u00EBzuesve 
 edit.uauth=Autentikimet
-edit.upolicies=T\u00EB drejtat
 edit.uprefs=P\u00EBrcaktimet e sistemit
 edit.uprofile=Profili i shfryt\u00EBzuesit
 edit.uprop=Tiparet
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_CN.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_CN.properties
index 97f8703c96f05c0276f1acd747eea2ee58ff1921..ace5f2c762667b3ce6a8ff30c4bf17c378095d57 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_CN.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_CN.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=\u7528\u6237\u7BA1\u7406
 content.usermgmt.userfound=\u7BA1\u7406\u7528\u6237\u8BBE\u7F6E
 edit.uauth=\u9A8C\u8BC1
 edit.uhomepage=\u8BBF\u95EE\u4FE1\u606F\u5361\u7247
-edit.upolicies=\u6743\u9650
 edit.uprefs=\u7CFB\u7EDF\u8BBE\u7F6E
 edit.uprofile=\u7528\u6237\u8D44\u6599
 edit.uprop=\u5C5E\u6027
diff --git a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_TW.properties b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_TW.properties
index cbbd34da675822642fe2c6041cb316aff9584978..73a9c920aaf93ffd252706b8c519b960090fd193 100644
--- a/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_TW.properties
+++ b/src/main/java/org/olat/admin/user/_i18n/LocalStrings_zh_TW.properties
@@ -21,7 +21,6 @@ content.usermgmt.title=\u4F7F\u7528\u8005\u7BA1\u7406
 content.usermgmt.userfound=\u7BA1\u7406\u4F7F\u7528\u8005\u8A2D\u5B9A
 edit.uauth=\u9A57\u8B49
 edit.uhomepage=\u540D\u7247
-edit.upolicies=\u6B0A\u9650
 edit.uprefs=\u7CFB\u7D71\u8A2D\u5B9A
 edit.uprofile=\u4F7F\u7528\u8005\u8CC7\u6599
 edit.uprop=\u5C6C\u6027
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityModule.java b/src/main/java/org/olat/basesecurity/BaseSecurityModule.java
index b884a1cbbef0f5421edd88a80b183e3f7b7343dd..ea91a4c62b37f6ed7e5bb5e24d7a1d85d994d65f 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityModule.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityModule.java
@@ -49,7 +49,6 @@ public class BaseSecurityModule extends AbstractOLATModule {
 	private static final String CONFIG_USERMANAGER_CAN_MODIFY_SUBSCRIPTIONS = "sysGroupUsermanager.canModifySubscriptions";
 	private static final String CONFIG_USERMANAGER_ACCESS_TO_QUOTA = "sysGroupUsermanager.accessToQuota";
 	private static final String CONFIG_USERMANAGER_ACCESS_TO_PROP = "sysGroupUsermanager.accessToProperties";
-	private static final String CONFIG_USERMANAGER_ACCESS_TO_POLICIES = "sysGroupUsermanager.accessToPolicies";
 	private static final String CONFIG_USERMANAGER_ACCESS_TO_AUTH = "sysGroupUsermanager.accessToAuthentications";
 	private static final String CONFIG_USERMANAGER_CAN_MANAGE_POOLMANAGERS = "sysGroupUsermanager.canManagePoolmanagers";
 	private static final String CONFIG_USERMANAGER_CAN_MANAGE_GROUPMANAGERS = "sysGroupUsermanager.canManageGroupmanagers";
@@ -95,7 +94,6 @@ public class BaseSecurityModule extends AbstractOLATModule {
 	public static Boolean USERMANAGER_CAN_MODIFY_SUBSCRIPTIONS = true;
 	public static Boolean USERMANAGER_ACCESS_TO_QUOTA = true;
 	public static Boolean USERMANAGER_ACCESS_TO_PROP = false;
-	public static Boolean USERMANAGER_ACCESS_TO_POLICIES = false;
 	public static Boolean USERMANAGER_ACCESS_TO_AUTH = false;
 	public static Boolean USERMANAGER_CAN_MANAGE_POOLMANAGERS = true;
 	public static Boolean USERMANAGER_CAN_MANAGE_GROUPMANAGERS = true;
@@ -162,7 +160,6 @@ public class BaseSecurityModule extends AbstractOLATModule {
 		
 		USERMANAGER_ACCESS_TO_QUOTA = getBooleanConfigParameter(CONFIG_USERMANAGER_ACCESS_TO_QUOTA, USERMANAGER_ACCESS_TO_QUOTA);
 		USERMANAGER_ACCESS_TO_PROP = getBooleanConfigParameter(CONFIG_USERMANAGER_ACCESS_TO_PROP, USERMANAGER_ACCESS_TO_PROP);
-		USERMANAGER_ACCESS_TO_POLICIES = getBooleanConfigParameter(CONFIG_USERMANAGER_ACCESS_TO_POLICIES, USERMANAGER_ACCESS_TO_POLICIES);
 		USERMANAGER_ACCESS_TO_AUTH = getBooleanConfigParameter(CONFIG_USERMANAGER_ACCESS_TO_AUTH, USERMANAGER_ACCESS_TO_AUTH);
 		
 		USERMANAGER_CAN_MANAGE_GROUPMANAGERS = getBooleanConfigParameter(CONFIG_USERMANAGER_CAN_MANAGE_GROUPMANAGERS, USERMANAGER_CAN_MANAGE_GROUPMANAGERS);
diff --git a/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml b/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
index 91671b05cb744588dd84f627624dc48d5d659ee8..0b9a2db5ff0ff0a88d437b1372c6ab651e180181 100644
--- a/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
+++ b/src/main/java/org/olat/core/dispatcher/_spring/dispatcherContext.xml
@@ -31,9 +31,6 @@
 				<entry key="/mshib/">
 					<ref bean="shibmobilebean" />
 				</entry>
-				<entry key="/stats.html">
-					<ref bean="statisticbean" />
-				</entry>
 				<entry key="/admin.html">
 					<ref bean="adminbean" />
 				</entry>
@@ -172,13 +169,6 @@
 		</constructor-arg>
 	</bean>
 	
-	
-	<bean id="statisticbean"
-		class="org.olat.admin.sysinfo.MRTGStatsDispatcher">
-		<constructor-arg ref="coordinatorManager" />
-		<property name="monitoringHost" value="127.0.0.1" />
-		<property name="instanceId" value="${instance.id}"/>
-	</bean>
 	<bean id="secstaticlegacybean"
 		class="org.olat.commons.servlets.StaticsLegacyDispatcher">
 		<property name="inputBufferSize" value="32768" />
diff --git a/src/test/java/org/olat/portfolio/sfqcodel.cc b/src/test/java/org/olat/portfolio/sfqcodel.cc
deleted file mode 100644
index a6d22b3f9f875f69e9ee19dcacb38af1140bd786..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/sfqcodel.cc
+++ /dev/null
@@ -1,494 +0,0 @@
-/*
- * sfqCodel - Smart Flow Queuing, Controlled-Delay Active Queue Management
- * with stochastic binning. Inspired by Eric Dumazaet's linux code, FQ_codel.
- * This module was put together by Kathleen Nichols.
- * For expediency, this originally combined codel.cc and some aspects of
- * sfq.cc from the ns2 distribution, contributed by Curtis Villamizar, Feb, 1997.
- * Notable differences from Eric's code: this uses packet-by-packet
- * round-robining, which we believe to be more appropriate (more testing
- * woud be useful), this simply tail drops if the buffer space is full and
- * this should be changed to something that drops fullest bin first (as in
- * Dumazaet's code), this code keeps an empty bin on the schedule for one
- * cycle (effectively preventing a flow from getting to go "first" too
- * quickly)..
- * Van Jacobson contributed the hash to attempt to model linux kernel hash.
- * This is experimental code, for implementation, see Dumazaet's code. 
- *
- * Copyright (C) 2011-2012 Kathleen Nichols <nichols@pollere.com>
- *
- * Packets are hashed into 256 bins based on header
- * Bins each have a separate CoDel manager
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions, and the following disclaimer,
- *    without modification.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The names of the authors may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * Alternatively, provided that this notice is retained in full, this
- * software may be distributed under the terms of the GNU General
- * Public License ("GPL") version 2, in which case the provisions of the
- * GPL apply INSTEAD OF those given above.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <math.h>
-#include <sys/types.h>
-#include "config.h"
-#include "template.h"
-#include "random.h"
-#include "flags.h"
-#include "delay.h"
-#include "sfqcodel.h"
-
-static class sfqCoDelClass : public TclClass {
-  public:
-    sfqCoDelClass() : TclClass("Queue/sfqCoDel") {}
-    TclObject* create(int, const char*const*) {
-        return (new sfqCoDelQueue);
-    }
-} class_codel;
-
-sfqCoDelQueue::sfqCoDelQueue() : tchan_(0)
-{
-    bind("interval_", &interval_);
-    bind("target_", &target_);  // target min delay in clock ticks
-    bind("curq_", &curq_);      // current queue size in bytes
-    bind("d_exp_", &d_exp_);    // current delay experienced in clock ticks
-    for(int i=0; i<MAXBINS; i++) {
-     bin_[i].q_ = new PacketQueue();
-     bin_[i].first_above_time_ = -1;
-     bin_[i].dropping_ = 0;
-     bin_[i].count_ = 0;
-     bin_[i].newflag = 0;
-     bin_[i].index = i;
-     bin_[i].on_sched_ = 0;
-    }
-    pq_ = bin_[0].q_; //does ns need this?
-    reset();
-}
-
-void sfqCoDelQueue::reset()
-{
-    binsched_ = NULL;
-    curq_ = 0;
-    d_exp_ = 0.;
-    maxpacket_ = 256;
-    curlen_ = 0;
-    curq_ = 0;
-    Queue::reset();
-}
-
-// Add a new packet to the queue.  The packet is dropped if the maximum queue
-// size in pkts is exceeded. Otherwise just add a timestamp so dequeue can
-// compute the sojourn time (all the work is done in the deque).
-// More sophisticated approaches can prevent a single flow from taking over
-// a limited buffer.
-
-void sfqCoDelQueue::enque(Packet* pkt)
-{
-    // check for tail drop on full buffer
-    if(curlen_ >= qlim_) {
-	drop(pkt);
-    } else {
-        HDR_CMN(pkt)->ts_ = Scheduler::instance().clock();
-	curlen_++;
-	curq_ += HDR_CMN(pkt)->size();
-
-        // Determine which bin to enqueue the packet and add it to that bin.
-	// the bin's id comes from a hash of its header
-	unsigned int i = hash(pkt) % MAXBINS;
-	(bin_[i].q_)->enque(pkt);
-
-	//if it's the only bin in use, set binsched_
-        if(binsched_ == NULL) {
-          binsched_ = &(bin_[i]);
-          bin_[i].prev = &(bin_[i]);
-          bin_[i].next = bin_[i].prev;
-          bin_[i].newflag = 1;
-          bin_[i].on_sched_ = 1;
-        } else if( bin_[i].on_sched_ == 0) {
-	//if bin was not on the schedule, add to the list before continuing
-        // bins but after other new bins
-          bindesc* b = binsched_;
-          while(b->newflag == 1) {
-            if(b->next == binsched_) break;
-            b = b->next;
-          }
-          if(b->next == binsched_) {
-             //insert at end
-             b->next = &(bin_[i]);
-             bin_[i].prev = b;
-             bin_[i].next = binsched_;
-             binsched_->prev = &(bin_[i]);
-          } else {
-	     //insert in front of b
-             bin_[i].next = b;
-             bin_[i].prev = b->prev;
-             (b->prev)->next = &(bin_[i]);
-             b->prev = &(bin_[i]);
-	     if(b == binsched_)
-		binsched_ = &(bin_[i]);
-          }
-          bin_[i].newflag = 1;
-          bin_[i].on_sched_ = 1;
-	}
-    } 
-}
-
-extern "C" {
-/* lookup3.c, by Bob Jenkins, May 2006, Public Domain.  */
-
-//#include <stdint.h>     /* defines uint32_t etc */
-//#include <sys/param.h>  /* attempt to define endianness */
-//#ifdef linux
-//# include <endian.h>    /* attempt to define endianness */
-//#endif
-
-/*
- * My best guess at if you are big-endian or little-endian.  This may
- * need adjustment.
- */
-#if (defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
-     __BYTE_ORDER == __LITTLE_ENDIAN) || \
-    (defined(i386) || defined(__i386__) || defined(__i486__) || \
-     defined(__i586__) || defined(__i686__) || defined(vax) || defined(MIPSEL))
-# define HASH_LITTLE_ENDIAN 1
-# define HASH_BIG_ENDIAN 0
-#elif (defined(__BYTE_ORDER) && defined(__BIG_ENDIAN) && \
-       __BYTE_ORDER == __BIG_ENDIAN) || \
-      (defined(sparc) || defined(POWERPC) || defined(mc68000) || defined(sel))
-# define HASH_LITTLE_ENDIAN 0
-# define HASH_BIG_ENDIAN 1
-#else
-# define HASH_LITTLE_ENDIAN 0
-# define HASH_BIG_ENDIAN 0
-#endif
-
-#define hashsize(n) ((u_int32_t)1<<(n))
-#define hashmask(n) (hashsize(n)-1)
-#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
-
-#define mix(a,b,c) \
-{ \
-  a -= c;  a ^= rot(c, 4);  c += b; \
-  b -= a;  b ^= rot(a, 6);  a += c; \
-  c -= b;  c ^= rot(b, 8);  b += a; \
-  a -= c;  a ^= rot(c,16);  c += b; \
-  b -= a;  b ^= rot(a,19);  a += c; \
-  c -= b;  c ^= rot(b, 4);  b += a; \
-}
-
-#define final(a,b,c) \
-{ \
-  c ^= b; c -= rot(b,14); \
-  a ^= c; a -= rot(c,11); \
-  b ^= a; b -= rot(a,25); \
-  c ^= b; c -= rot(b,16); \
-  a ^= c; a -= rot(c,4);  \
-  b ^= a; b -= rot(a,14); \
-  c ^= b; c -= rot(b,24); \
-}
-
-static inline u_int32_t jhash_3words( u_int32_t a, u_int32_t b, u_int32_t c, u_int32_t i) {
-    i += 0xdeadbeef + (3 << 2);
-    a += i;
-    b += i;
-    c += i;
-    mix(a, b, c);
-    final(a, b, c);
-    return c;
-}
-
-#undef mix
-#undef final
-
-}
-
-unsigned int sfqCoDelQueue::hash(Packet* pkt)
-{
-  hdr_ip* iph = hdr_ip::access(pkt);
-  return jhash_3words(iph->daddr(), iph->saddr(),
-                      (iph->dport() << 16) | iph->sport(), 0);
-}
-
-// return the time of the next drop relative to 't'
-double sfqCoDelQueue::control_law(double t)
-{
-    return t + interval_ / sqrt(count_);
-}
-
-// Internal routine to dequeue a packet. All the delay and min tracking
-// is done here to make sure it's done consistently on every dequeue.
-dodequeResult sfqCoDelQueue::dodeque(PacketQueue* q)
-{
-    double now = Scheduler::instance().clock();
-    dodequeResult r = { NULL, 0 };
-
-    r.p = q->deque();
-    if (r.p == NULL) {
-        return r;
-    } else {
-        // d_exp_ and curq_ are ns2 'traced variables' that allow the dynamic
-        // queue behavior that drives CoDel to be captured in a trace file for
-        // diagnostics and analysis.  d_exp_ is the sojourn time and curq_ is
-        // the current total q size in bytes.
-        d_exp_ = now - HDR_CMN(r.p)->ts_;
-        curlen_--;
-        curq_ -= HDR_CMN(r.p)->size_;
-        if (maxpacket_ < HDR_CMN(r.p)->size_)
-            // keep track of the max packet size.
-            maxpacket_ = HDR_CMN(r.p)->size_;
-
-        // To span a large range of bandwidths, CoDel essentially runs two
-        // different AQMs in parallel. One is sojourn-time-based and takes
-        // effect when target_ is larger than the time it takes to send a
-        // TCP MSS packet. The 1st term of the "if" does this.
-        // The other is backlog-based and takes effect when the time to send an
-        // MSS packet is >= target_. The goal here is to keep the output link
-        // utilization high by never allowing the queue to get smaller than
-        // the amount that arrives in a typical interarrival time (one MSS-sized
-        // packet arriving spaced by the amount of time it takes to send such
-        // a packet on the bottleneck). The 2nd term of the "if" does this.
-	// Note that we use the overall value of curq_, across all bins
-        if (d_exp_ < target_ || curq_ <= maxpacket_) {
-            // went below - stay below for at least interval
-            first_above_time_ = 0;
-        } else {
-            if (first_above_time_ == 0) {
-                //just went above from below. if still above at first_above_time
-                // will say it’s ok to drop
-              if ((now - drop_next_) < 8*interval_ && count_ > 1)
-                first_above_time_ = control_law(now);
-              else
-                 first_above_time_ = now + interval_;
-            } else if (now >= first_above_time_) {
-                r.ok_to_drop = 1;
-            }
-        }
-    }
-    return r;
-}
-
-// Get the next scheduled bin that has a non-empty queue and return its
-// pointer. If it's not binsched_, update binsched_ to be this value.
-// A null pointer means there is nothing to send on any bin.
-
-bindesc* sfqCoDelQueue::readybin()
-{
-    //get the next scheduled bin that has a non-empty queue,
-    // set the binsched_ to that bin,
-    // if none,  return NULL
-    if(binsched_ == NULL) return NULL;
-    bindesc* b = binsched_;
-
-    while((b->q_)->length() == 0) {
-       //clean up, remove bin from schedule
-       if(b->next == b) {
-         //means this was the only bin on the schedule, so empty the schedule
-         b->next = NULL;
-         b->prev = NULL;
-	 b->on_sched_ = 0;
-         binsched_ = NULL;
-         return NULL;
-       } else {
-	 b->on_sched_ = 0;
-         binsched_ = b->next;
-         binsched_->prev = b->prev;
-         (b->prev)->next = binsched_;
-         b->next = b->prev = NULL;
-         b = binsched_;
-       }
-    }
-
-    return binsched_;
-}
-
-void sfqCoDelQueue::removebin(bindesc* b) {
-
-    while((b->q_)->length() == 0) {
-       //clean up, remove bin from schedule
-       if(b->next == b) {
-         //means this was the only bin on the schedule, so empty the schedule
-         b->next = NULL;
-         b->prev = NULL;
-	 b->on_sched_ = 0;
-         binsched_ = NULL;
-         return;
-       } else {
-	 b->on_sched_ = 0;
-         binsched_ = b->next;
-         binsched_->prev = b->prev;
-         (b->prev)->next = binsched_;
-         b->next = b->prev = NULL;
-         b = binsched_;
-       }
-    }
-}
-
-// All of the work of CoDel is done here. There are two branches: In packet
-// dropping state (meaning that the queue sojourn time has gone above target
-// and hasn’t come down yet) check if it’s time to leave or if it’s time for
-// the next drop(s). If not in dropping state, decide if it’s time to enter it
-// and do the initial drop.
-
-Packet* sfqCoDelQueue::deque()
-{
-    double now = Scheduler::instance().clock();;
-    bindesc* b;
-    dodequeResult r;
-
-   do {
-   //have to check all bins until find a packet (or there are none)
-   if( (b = readybin()) == NULL) return NULL;
-    b->newflag = 0;
-    first_above_time_ = b->first_above_time_;
-    drop_next_ = b->drop_next_;
-    count_ = b->count_;
-    dropping_ = b->dropping_;
-
-    r = dodeque( b->q_ );
-    if(r.p == NULL) printf("sfqCoDelQueue::deque(): error\n");
-
-    if (dropping_) {
-        if (! r.ok_to_drop) {
-            // sojourn time below target - leave dropping state
-            dropping_ = 0;
-        }
-        // It’s time for the next drop. Drop the current packet and dequeue
-        // the next.  If the dequeue doesn't take us out of dropping state,
-        // schedule the next drop. A large backlog might result in drop
-        // rates so high that the next drop should happen now, hence the
-        // ‘while’ loop.
-        while (now >= drop_next_ && dropping_) {
-            drop(r.p);
-            r = dodeque(b->q_);
-//in dropping state, drop elderly packets
-//while (r.ok_to_drop && d_exp_ > 8*interval_) {
-// drop(r.p);
-// r = dodeque(b->q_);
-//}
-	    //if drop emptied queue, it gets to be new on next arrival
-	    if(r.p == NULL)
-		removebin(b);
-            if (! r.ok_to_drop) {
-                // leave dropping state
-                dropping_ = 0;
-            } else {
-                // schedule the next drop.
-                ++(count_);
-                drop_next_ = control_law(drop_next_);
-            }
-        }
-
-    // If we get here we’re not in dropping state. 'ok_to_drop' means that the
-    // sojourn time has been above target for interval so enter dropping state.
-    } else if (r.ok_to_drop) {
-        drop(r.p);
-        r = dodeque(b->q_);
-	b->newflag = 0;
-	    //if drop emptied queue, it gets to be new on next arrival
-	    if(r.p == NULL)
-		removebin(b);
-        dropping_ = 1;
-
-        // If min went above target close to when it last went below,
-        // assume that the drop rate that controlled the queue on the
-        // last cycle is a good starting point to control it now.
-	// Note: didn't put count_ decay line in sfqcodel
-        count_ = (count_ > 2 && now - drop_next_ < 8*interval_)? count_ - 2 : 1;
-        drop_next_ = control_law(now);
-    }
-    b->count_ = count_;
-    b->first_above_time_ = first_above_time_;
-    b->drop_next_ = drop_next_;
-    b->dropping_ = dropping_;
-   } while (r.p == NULL) ;
-
-    //if there's a packet to send need to advance bin schedule. If no packet to
-    // send, means this bin's queue is empty, so advance binsched_.
-    // so that binsched_ will be next one to send (or NULL)
-   if(binsched_ != NULL) binsched_ = binsched_->next;
-
-    return (r.p);
-}
-
-int sfqCoDelQueue::command(int argc, const char*const* argv)
-{
-    Tcl& tcl = Tcl::instance();
-    if (argc == 2) {
-        if (strcmp(argv[1], "reset") == 0) {
-            reset();
-            return (TCL_OK);
-        }
-    } else if (argc == 3) {
-        // attach a file for variable tracing
-        if (strcmp(argv[1], "attach") == 0) {
-            int mode;
-            const char* id = argv[2];
-            tchan_ = Tcl_GetChannel(tcl.interp(), (char*)id, &mode);
-            if (tchan_ == 0) {
-                tcl.resultf("sfqCoDel trace: can't attach %s for writing", id);
-                return (TCL_ERROR);
-            }
-            return (TCL_OK);
-        }
-        // connect CoDel to the underlying queue
-        if (!strcmp(argv[1], "packetqueue-attach")) {
-//            delete q_;
-//            if (!(q_ = (PacketQueue*) TclObject::lookup(argv[2])))
-printf("error in command\n");
-                return (TCL_ERROR);
-//            else {
-//                pq_ = q_;
-//                return (TCL_OK);
-//            }
-        }
-    }
-    return (Queue::command(argc, argv));
-}
-
-// Routine called by TracedVar facility when variables change values.
-// Note that the tracing of each var must be enabled in tcl to work.
-void
-sfqCoDelQueue::trace(TracedVar* v)
-{
-    const char *p;
-
-    if (((p = strstr(v->name(), "curq")) == NULL) &&
-        ((p = strstr(v->name(), "d_exp")) == NULL) ) {
-        fprintf(stderr, "sfqCoDel: unknown trace var %s\n", v->name());
-        return;
-    }
-    if (tchan_) {
-        char wrk[500];
-        double t = Scheduler::instance().clock();
-        if(*p == 'c') {
-            sprintf(wrk, "c %g %d", t, int(*((TracedInt*) v)));
-        } else if(*p == 'd') {
-            sprintf(wrk, "d %g %g %d %g", t, double(*((TracedDouble*) v)), count_,
-                    count_? control_law(0.)*1000.:0.);
-        }
-        int n = strlen(wrk);
-        wrk[n] = '\n'; 
-        wrk[n+1] = 0;
-        (void)Tcl_Write(tchan_, wrk, n+1);
-    }
-}
diff --git a/src/test/java/org/olat/portfolio/syncing_threads.c b/src/test/java/org/olat/portfolio/syncing_threads.c
deleted file mode 100644
index f4d5bd27bb1d0d8f8a0645219a26661f304d1f5d..0000000000000000000000000000000000000000
--- a/src/test/java/org/olat/portfolio/syncing_threads.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <pthread.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-int running = 1;
-
-int thread1_waiting = 0;
-pthread_t thread1;
-pthread_cond_t thread1_cond;
-
-int thread2_waiting = 0;
-pthread_t thread2;
-pthread_cond_t thread2_cond;
-
-void*
-thread1_func(void *arg){
-  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-
-  while(running){
-    /* sleep 1 sec */
-    usleep(1000000);
-
-    pthread_mutex_lock(&mutex);
-
-    if(!thread2_waiting){
-      /* wait for thread 2 */
-      thread1_waiting = 1;
-
-      while(thread1_waiting){
-	pthread_cond_wait(&thread1_cond,
-			  &mutex);
-      }
-
-      pthread_mutex_unlock(&mutex);
-    }else{
-      /* wake up thread 2 */
-      thread2_waiting = 0;
-      pthread_mutex_unlock(&mutex);
-      pthread_cond_signal(&thread2_cond);
-    }
-  }
-
-  pthread_exit(NULL);
-}
-
-void*
-thread2_func(void *arg){
-  pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
-
-  while(running){
-    /* sleep 1 sec */
-    usleep(1000000);
-
-    pthread_mutex_lock(&mutex);
-
-    if(!thread1_waiting){
-      /* wait for thread 2 */
-      thread2_waiting = 1;
-
-      while(thread2_waiting){
-	pthread_cond_wait(&thread2_cond,
-			  &mutex);
-      }
-
-      pthread_mutex_unlock(&mutex);
-    }else{
-      /* wake up thread 2 */
-      thread1_waiting = 0;
-      pthread_mutex_unlock(&mutex);
-      pthread_cond_signal(&thread1_cond);
-    }
-  }
-
-  pthread_exit(NULL);
-}
-
-int
-main(int argc, char **argv){
-  printf("creating threads: hit any key to abort\n\0");
-
-  /* create threads */
-  pthread_create(&thread1,
-		 NULL, &thread1_func,
-		 NULL);
-  pthread_create(&thread2,
-		 NULL, &thread1_func,
-		 NULL);
-
-  /* wait for input and then abort */
-  getchar();
-  running = 0;
-
-  return(0);
-}