diff --git a/src/main/java/org/olat/_spring/extensionContext.xml b/src/main/java/org/olat/_spring/extensionContext.xml
index 738b84aedd595e449470c606e26380744803a02f..c9c21b991d5bbd2bd703114988e6eec4d91fb552 100644
--- a/src/main/java/org/olat/_spring/extensionContext.xml
+++ b/src/main/java/org/olat/_spring/extensionContext.xml
@@ -153,7 +153,7 @@
 			<property name="order" value="7160" />
 			<property name="actionController">	
 				<bean class="org.olat.core.gui.control.creator.AutoCreator" scope="prototype">
-					<property name="className" value="org.olat.admin.sysinfo.HibernateStatisticsController"/>
+					<property name="className" value="org.olat.admin.sysinfo.DatabaseController"/>
 				</bean>
 			</property>
 			<property name="navigationKey" value="hibernate" />
diff --git a/src/main/java/org/olat/admin/sysinfo/DatabaseController.java b/src/main/java/org/olat/admin/sysinfo/DatabaseController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1d565bc1bab1e6fed133a9720465f495e0ab9d17
--- /dev/null
+++ b/src/main/java/org/olat/admin/sysinfo/DatabaseController.java
@@ -0,0 +1,143 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <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 the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <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>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.admin.sysinfo;
+
+import org.hibernate.stat.Statistics;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.link.LinkFactory;
+import org.olat.core.gui.components.segmentedview.SegmentViewComponent;
+import org.olat.core.gui.components.segmentedview.SegmentViewEvent;
+import org.olat.core.gui.components.segmentedview.SegmentViewFactory;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 03.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class DatabaseController extends BasicController {
+	
+	private final VelocityContainer mainVC;
+	private final SegmentViewComponent segmentView;
+	private final Link enableLink, disableLink, clearLink, statisticsLink, queriesLink, entitiesLink;
+	
+	private HibernateQueriesController queriesCtrl;
+	private HibernateEntitiesController entitiesCtrl;
+	private HibernateStatisticsController statisticsCtrl;
+	
+	@Autowired
+	private DB dbInstance;
+	
+	public DatabaseController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl);
+		
+		mainVC = createVelocityContainer("hibernate_segments");
+		enableLink = LinkFactory.createButton("enable.hibernate.statistics", mainVC, this);
+		disableLink = LinkFactory.createButton("disable.hibernate.statistics", mainVC, this);
+		clearLink = LinkFactory.createButton("clear.hibernate.statistics", mainVC, this);
+		
+		segmentView = SegmentViewFactory.createSegmentView("segments", mainVC, this);
+		statisticsLink = LinkFactory.createLink("hibernate.statistics", mainVC, this);
+		segmentView.addSegment(statisticsLink, true);
+		doOpenStatistics(ureq);
+		queriesLink = LinkFactory.createLink("hibernate.queries", mainVC, this);
+		segmentView.addSegment(queriesLink, false);
+		entitiesLink = LinkFactory.createLink("hibernate.entities", mainVC, this);
+		segmentView.addSegment(entitiesLink, false);
+		
+		Statistics statistics = dbInstance.getStatistics();
+		mainVC.contextPut("isStatisticsEnabled", statistics.isStatisticsEnabled());
+		
+		putInitialPanel(mainVC);
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		Statistics statistics = dbInstance.getStatistics();
+		if (source == enableLink){
+			statistics.setStatisticsEnabled(true);
+			mainVC.contextPut("isStatisticsEnabled",statistics.isStatisticsEnabled());
+			getWindowControl().setInfo("Hibernate statistics enabled.");
+		} else if (source == disableLink){
+			statistics.setStatisticsEnabled(false);
+			mainVC.contextPut("isStatisticsEnabled", statistics.isStatisticsEnabled());
+			getWindowControl().setInfo("Hibernate statistics disabled.");
+		} else if (source == clearLink){
+			statistics.clear();
+			getWindowControl().setInfo("Hibernate statistics clear done.");
+		} else if(source == segmentView) {
+			if(event instanceof SegmentViewEvent) {
+				SegmentViewEvent sve = (SegmentViewEvent)event;
+				String segmentCName = sve.getComponentName();
+				Component clickedLink = mainVC.getComponent(segmentCName);
+				if (clickedLink == statisticsLink) {
+					doOpenStatistics(ureq);
+				} else if (clickedLink == queriesLink) {
+					doOpenQueries(ureq);
+				} else if (clickedLink == entitiesLink) {
+					doOpenEntities(ureq);
+				}
+			}
+		} 
+	}
+	
+	private void doOpenStatistics(UserRequest ureq) {
+		if(statisticsCtrl == null) {
+			statisticsCtrl = new HibernateStatisticsController(ureq, getWindowControl());
+			listenTo(statisticsCtrl);
+		} else {
+			statisticsCtrl.loadModel();
+		}
+		mainVC.put("segmentCmp", statisticsCtrl.getInitialComponent());
+	}
+	
+	private void doOpenQueries(UserRequest ureq) {
+		if(queriesCtrl == null) {
+			queriesCtrl = new HibernateQueriesController(ureq, getWindowControl());
+			listenTo(queriesCtrl);
+		} else {
+			queriesCtrl.loadModel();
+		}
+		mainVC.put("segmentCmp", queriesCtrl.getInitialComponent());
+	}
+	
+	private void doOpenEntities(UserRequest ureq) {
+		if(entitiesCtrl == null) {
+			entitiesCtrl = new HibernateEntitiesController(ureq, getWindowControl());
+			listenTo(entitiesCtrl);
+		} else {
+			entitiesCtrl.loadModel();
+		}
+		mainVC.put("segmentCmp", entitiesCtrl.getInitialComponent());
+	}
+}
diff --git a/src/main/java/org/olat/admin/sysinfo/HibernateEntitiesController.java b/src/main/java/org/olat/admin/sysinfo/HibernateEntitiesController.java
new file mode 100644
index 0000000000000000000000000000000000000000..c7148d87b280a0c103dfb2cdd0aa41cf5b3992d1
--- /dev/null
+++ b/src/main/java/org/olat/admin/sysinfo/HibernateEntitiesController.java
@@ -0,0 +1,232 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <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 the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <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>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.admin.sysinfo;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.hibernate.stat.EntityStatistics;
+import org.hibernate.stat.Statistics;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 17.11.2012<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
+public class HibernateEntitiesController extends FormBasicController {
+	
+	private FlexiTableElement table;
+	private EntityStatisticsDataModel tableModel;
+	
+	@Autowired
+	private DB dbInstance;
+
+	public HibernateEntitiesController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl, LAYOUT_BAREBONE);
+		
+		initForm(ureq);
+		loadModel();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.entity.i18nKey(), EntityCols.entity.ordinal(),
+				true, EntityCols.entity.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.load.i18nKey(), EntityCols.load.ordinal(),
+				true, EntityCols.load.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.fetch.i18nKey(), EntityCols.fetch.ordinal(),
+				true, EntityCols.fetch.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.insert.i18nKey(), EntityCols.insert.ordinal(),
+				true, EntityCols.insert.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.update.i18nKey(), EntityCols.update.ordinal(),
+				true, EntityCols.update.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.delete.i18nKey(), EntityCols.delete.ordinal(),
+				true, EntityCols.delete.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(EntityCols.optimisticFailure.i18nKey(), EntityCols.optimisticFailure.ordinal(),
+				true, EntityCols.optimisticFailure.name()));
+
+		tableModel = new EntityStatisticsDataModel(columnsModel);
+		table = uifactory.addTableElement(getWindowControl(), "entities", tableModel, 50, true, getTranslator(), formLayout);
+		table.setAndLoadPersistedPreferences(ureq, "HibernateEntityStatistics");
+		table.setExportEnabled(true);
+		table.setPageSize(250);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+	public void loadModel() {
+		Statistics statistics = dbInstance.getStatistics();
+		String[] entities = statistics.getEntityNames();
+		List<QueryInfos> infos = new ArrayList<>(entities.length);
+		for(String entity:entities) {
+			EntityStatistics queryStats = statistics.getEntityStatistics(entity);
+			infos.add(new QueryInfos(entity, queryStats));
+		}
+		tableModel.setObjects(infos);
+		table.reset();
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	private static class QueryInfos {
+		
+		private final String entity;
+		private final long load;
+		private final long update;
+		private final long delete;
+		private final long fetch;
+		private final long insert;
+		private final long optimisticFailure;
+		
+		public QueryInfos(String entity, EntityStatistics statistics) {
+			this.entity = entity;
+			load = statistics.getLoadCount();
+			fetch = statistics.getFetchCount();
+			insert =statistics.getInsertCount();
+			update = statistics.getUpdateCount();
+			delete = statistics.getDeleteCount();
+			optimisticFailure = statistics.getOptimisticFailureCount();
+		}
+
+		public String getEntity() {
+			return entity;
+		}
+
+		public long getLoad() {
+			return load;
+		}
+
+		public long getUpdate() {
+			return update;
+		}
+
+		public long getDelete() {
+			return delete;
+		}
+
+		public long getFetch() {
+			return fetch;
+		}
+
+		public long getInsert() {
+			return insert;
+		}
+
+		public long getOptimisticFailure() {
+			return optimisticFailure;
+		}
+	}
+	
+	private static class EntityStatisticsDataModel extends DefaultFlexiTableDataModel<QueryInfos>
+		implements SortableFlexiTableDataModel<QueryInfos> {
+		
+		public EntityStatisticsDataModel(FlexiTableColumnModel columnModel) {
+			super(columnModel);
+		}
+
+		@Override
+		public void sort(SortKey orderBy) {
+			if(orderBy != null) {
+				List<QueryInfos> views = new EntityStatisticsModelSort(orderBy, this, null).sort();
+				super.setObjects(views);
+			}
+		}
+		
+		@Override
+		public Object getValueAt(int row, int col) {
+			QueryInfos infos = getObject(row);
+			return getValueAt(infos, col);
+		}
+
+		@Override
+		public Object getValueAt(QueryInfos row, int col) {
+			switch(EntityCols.values()[col]) {
+				case load: return row.getLoad();
+				case fetch: return row.getFetch();
+				case insert: return row.getInsert();
+				case update: return row.getUpdate();
+				case delete: return row.getDelete();
+				case optimisticFailure: return row.getOptimisticFailure();
+				case entity: return row.getEntity();
+				default: return null;
+			}
+		}
+
+		@Override
+		public DefaultFlexiTableDataModel<QueryInfos> createCopyWithEmptyList() {
+			return new EntityStatisticsDataModel(getTableColumnModel());
+		}
+	}
+	
+	private static class EntityStatisticsModelSort extends SortableFlexiTableModelDelegate<QueryInfos> {
+		
+		public EntityStatisticsModelSort(SortKey orderBy, SortableFlexiTableDataModel<QueryInfos> tableModel, Locale locale) {
+			super(orderBy, tableModel, locale);
+		}
+
+		@Override
+		protected void sort(List<QueryInfos> rows) {
+			super.sort(rows);
+		}
+	}
+
+	public enum EntityCols {
+		load("hibernate.entity.load"),
+		fetch("hibernate.entity.fetch"),
+		insert("hibernate.entity.insert"),
+		update("hibernate.entity.update"),
+		delete("hibernate.entity.delete"),
+		optimisticFailure("hibernate.entity.optimisticFailure"),
+		entity("hibernate.entity.entity");
+		
+		private final String i18nKey;
+		
+		private EntityCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		public String i18nKey() {
+			return i18nKey;
+		}
+	}
+}
diff --git a/src/main/java/org/olat/admin/sysinfo/HibernateQueriesController.java b/src/main/java/org/olat/admin/sysinfo/HibernateQueriesController.java
new file mode 100644
index 0000000000000000000000000000000000000000..9391fb98b2189860de42765da6397bb71083f5a8
--- /dev/null
+++ b/src/main/java/org/olat/admin/sysinfo/HibernateQueriesController.java
@@ -0,0 +1,251 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <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 the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <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>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.admin.sysinfo;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+
+import org.hibernate.stat.QueryStatistics;
+import org.hibernate.stat.Statistics;
+import org.olat.core.commons.persistence.DB;
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItemContainer;
+import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
+import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 16.11.2012<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ */
+public class HibernateQueriesController extends FormBasicController {
+	
+	private FlexiTableElement table;
+	private QueryStatisticsDataModel tableModel;
+	
+	@Autowired
+	private DB dbInstance;
+
+	public HibernateQueriesController(UserRequest ureq, WindowControl wControl) {
+		super(ureq, wControl, LAYOUT_BAREBONE);
+		
+		initForm(ureq);
+		loadModel();
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(QueryCols.average.i18nKey(), QueryCols.average.ordinal(),
+				true, QueryCols.average.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(QueryCols.max.i18nKey(), QueryCols.max.ordinal(),
+				true, QueryCols.max.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(QueryCols.min.i18nKey(), QueryCols.min.ordinal(),
+				true, QueryCols.min.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, QueryCols.row.i18nKey(), QueryCols.row.ordinal(),
+				true, QueryCols.row.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(QueryCols.count.i18nKey(), QueryCols.count.ordinal(),
+				true, QueryCols.count.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, QueryCols.cacheHits.i18nKey(), QueryCols.cacheHits.ordinal(),
+				true, QueryCols.cacheHits.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, QueryCols.cacheMisses.i18nKey(), QueryCols.cacheMisses.ordinal(),
+				true, QueryCols.cacheMisses.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, QueryCols.cachePuts.i18nKey(), QueryCols.cachePuts.ordinal(),
+				true, QueryCols.cachePuts.name()));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(QueryCols.query.i18nKey(), QueryCols.query.ordinal(),
+				true, QueryCols.query.name()));
+		
+		tableModel = new QueryStatisticsDataModel(columnsModel);
+		table = uifactory.addTableElement(getWindowControl(), "queries", tableModel, 50, true, getTranslator(), formLayout);
+		table.setAndLoadPersistedPreferences(ureq, "HibernateQueriesStatistics");
+		table.setExportEnabled(true);
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+
+	public void loadModel() {
+		Statistics statistics = dbInstance.getStatistics();
+		String[] queries = statistics.getQueries();
+		List<QueryInfos> infos = new ArrayList<>(queries.length);
+		for(String query:queries) {
+			QueryStatistics queryStats = statistics.getQueryStatistics(query);
+			infos.add(new QueryInfos(query, queryStats));
+		}
+		tableModel.setObjects(infos);
+		table.reset();
+	}
+	
+	@Override
+	protected void doDispose() {
+		//
+	}
+	
+	private static class QueryInfos {
+		
+		private final String query;
+		private final long averageTime;
+		private final long maxTime;
+		private final long minTime;
+		private final long row;
+		private final long count;
+		private final long cacheHits;
+		private final long cacheMisses;
+		private final long cachePuts;
+		
+		public QueryInfos(String query, QueryStatistics statistics) {
+			this.query = query;
+			averageTime = statistics.getExecutionAvgTime();
+			maxTime = statistics.getExecutionMaxTime();
+			minTime = statistics.getExecutionMinTime();
+			count = statistics.getExecutionCount();
+			row =statistics.getExecutionRowCount();
+			cacheHits = statistics.getCacheHitCount();
+			cacheMisses = statistics.getCacheMissCount();
+			cachePuts = statistics.getCachePutCount();
+		}
+
+		public String getQuery() {
+			return query;
+		}
+
+		public long getAverageTime() {
+			return averageTime;
+		}
+
+		public long getMaxTime() {
+			return maxTime;
+		}
+
+		public long getMinTime() {
+			return minTime;
+		}
+
+		public long getRow() {
+			return row;
+		}
+
+		public long getCount() {
+			return count;
+		}
+
+		public long getCacheHits() {
+			return cacheHits;
+		}
+
+		public long getCacheMisses() {
+			return cacheMisses;
+		}
+
+		public long getCachePuts() {
+			return cachePuts;
+		}
+	}
+	
+	private static class QueryStatisticsDataModel extends DefaultFlexiTableDataModel<QueryInfos>
+		implements SortableFlexiTableDataModel<QueryInfos> {
+		
+		public QueryStatisticsDataModel(FlexiTableColumnModel columnModel) {
+			super(columnModel);
+		}
+
+		@Override
+		public void sort(SortKey orderBy) {
+			if(orderBy != null) {
+				List<QueryInfos> views = new QueryStatisticsModelSort(orderBy, this, null).sort();
+				super.setObjects(views);
+			}
+		}
+		
+		@Override
+		public Object getValueAt(int row, int col) {
+			QueryInfos infos = getObject(row);
+			return getValueAt(infos, col);
+		}
+
+		@Override
+		public Object getValueAt(QueryInfos row, int col) {
+			switch(QueryCols.values()[col]) {
+				case average: return row.getAverageTime();
+				case max: return row.getMaxTime();
+				case min: return row.getMinTime();
+				case query: return row.getQuery();
+				case row: return row.getRow();
+				case count: return row.getCount();
+				case cacheHits: return row.getCacheHits();
+				case cacheMisses: return row.getCacheMisses();
+				case cachePuts: return row.getCachePuts();
+				default: return null;
+			}
+		}
+
+		@Override
+		public DefaultFlexiTableDataModel<QueryInfos> createCopyWithEmptyList() {
+			return new QueryStatisticsDataModel(getTableColumnModel());
+		}
+	}
+	
+	private static class QueryStatisticsModelSort extends SortableFlexiTableModelDelegate<QueryInfos> {
+		
+		public QueryStatisticsModelSort(SortKey orderBy, SortableFlexiTableDataModel<QueryInfos> tableModel, Locale locale) {
+			super(orderBy, tableModel, locale);
+		}
+
+		@Override
+		protected void sort(List<QueryInfos> rows) {
+			super.sort(rows);
+		}
+	}
+
+	public enum QueryCols {
+		average("hibernate.query.average"),
+		max("hibernate.query.max"),
+		min("hibernate.query.min"),
+		row("hibernate.query.row"),
+		count("hibernate.query.count"),
+		cacheHits("hibernate.query.hits"),
+		cacheMisses("hibernate.query.miss"),
+		cachePuts("hibernate.query.puts"),
+		query("hibernate.query.query");
+		
+		private final String i18nKey;
+		
+		private QueryCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		public String i18nKey() {
+			return i18nKey;
+		}
+	}
+}
diff --git a/src/main/java/org/olat/admin/sysinfo/HibernateStatisticsController.java b/src/main/java/org/olat/admin/sysinfo/HibernateStatisticsController.java
index 7f38b5f08fdefe9ece45f5353d77e31164b2a338..e4fb513c91ad08fa96af9dc366240977687cefcb 100644
--- a/src/main/java/org/olat/admin/sysinfo/HibernateStatisticsController.java
+++ b/src/main/java/org/olat/admin/sysinfo/HibernateStatisticsController.java
@@ -20,11 +20,11 @@
 package org.olat.admin.sysinfo;
 
 import org.hibernate.stat.Statistics;
+import org.olat.admin.sysinfo.manager.DatabaseStatsManager;
+import org.olat.admin.sysinfo.model.DatabaseConnectionVO;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.Component;
-import org.olat.core.gui.components.link.Link;
-import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.velocity.VelocityContainer;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
@@ -38,30 +38,29 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class HibernateStatisticsController extends BasicController {
 	
-	private Link enableLink;
-	private Link disableLink;
-	private Link clearLink;
-	private VelocityContainer mainVC;
+	private final VelocityContainer mainVC;
 	
 	@Autowired
 	private DB dbInstance;
+	@Autowired
+	private DatabaseStatsManager databaseStatsManager;
 
 	public HibernateStatisticsController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);
 		
 		mainVC = createVelocityContainer("hibernateinfo");
-		enableLink = LinkFactory.createButton("enable.hibernate.statistics", mainVC, this);
-		disableLink = LinkFactory.createButton("disable.hibernate.statistics", mainVC, this);
-		clearLink = LinkFactory.createButton("clear.hibernate.statistics", mainVC, this);
 		
 		loadModel();
 		putInitialPanel(mainVC);
 	}
 	
-	public void loadModel() {
+	protected void loadModel() {
 		Statistics statistics = dbInstance.getStatistics();
 		mainVC.contextPut("isStatisticsEnabled", statistics.isStatisticsEnabled());
 		mainVC.contextPut("hibernateStatistics", statistics);
+		
+		DatabaseConnectionVO connectionInfos = databaseStatsManager.getConnectionInfos();
+		mainVC.contextPut("connectionInfos", connectionInfos);
 	}
 	
 	@Override
@@ -71,28 +70,6 @@ public class HibernateStatisticsController extends BasicController {
 
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
-		Statistics statistics = dbInstance.getStatistics();
-		if (source == enableLink){
-			statistics.setStatisticsEnabled(true);
-			mainVC.contextPut("isStatisticsEnabled",statistics.isStatisticsEnabled());
-			getWindowControl().setInfo("Hibernate statistics enabled.");
-			loadModel();
-		} else if (source == disableLink){
-			statistics.setStatisticsEnabled(false);
-			mainVC.contextPut("isStatisticsEnabled", statistics.isStatisticsEnabled());
-			getWindowControl().setInfo("Hibernate statistics disabled.");
-			loadModel();
-		} else if (source == clearLink){
-			statistics.clear();
-			getWindowControl().setInfo("Hibernate statistics clear done.");
-			loadModel();
-		}
+		//
 	}
-	
-	
-
-
-	
-	
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/sysinfo/_content/hibernate_segments.html b/src/main/java/org/olat/admin/sysinfo/_content/hibernate_segments.html
new file mode 100644
index 0000000000000000000000000000000000000000..3892f60f4f38f19422a35c29e91f4b14086533ba
--- /dev/null
+++ b/src/main/java/org/olat/admin/sysinfo/_content/hibernate_segments.html
@@ -0,0 +1,14 @@
+<div class="o_buttons_box_right">
+#if ($isStatisticsEnabled)
+  $r.render("disable.hibernate.statistics") $r.render("clear.hibernate.statistics")
+#else
+  $r.render("enable.hibernate.statistics")
+#end
+</div>
+<div class="o_block clearfix">
+	$r.render("segments") <br/>	
+		
+	#if($r.available("segmentCmp"))
+		$r.render("segmentCmp")
+	#end
+</div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/admin/sysinfo/_content/hibernateinfo.html b/src/main/java/org/olat/admin/sysinfo/_content/hibernateinfo.html
index 5ded126305862a30a68841f7565de18eb7a65a64..adbb994642692db603b74bde5a9d3f2b18f9ed15 100644
--- a/src/main/java/org/olat/admin/sysinfo/_content/hibernateinfo.html
+++ b/src/main/java/org/olat/admin/sysinfo/_content/hibernateinfo.html
@@ -1,39 +1,34 @@
-<div class="o_buttons_box_right">
-#if ($isStatisticsEnabled)
-  $r.render("disable.hibernate.statistics") $r.render("clear.hibernate.statistics")
-#else
-  $r.render("enable.hibernate.statistics")
-#end
-</div>
-
-<br/><br/>
-<fieldset><legend>$r.translate("title.hibernate.statistics")</legend>
-Hibernate.ConnectCount : $hibernateStatistics.connectCount<br>
-Hibernate.FlushCount : $hibernateStatistics.flushCount<br>
-Hibernate.SessionOpenCount : $hibernateStatistics.sessionOpenCount<br>
-Hibernate.SessionCloseCount : $hibernateStatistics.sessionCloseCount<br>
-Hibernate.QueryExecutionCount : $hibernateStatistics.queryExecutionCount<br>
-Hibernate.QueryExecutionMaxTime : $hibernateStatistics.queryExecutionMaxTime<br>
-#if ($hibernateStatistics.queryExecutionMaxTimeQueryString)
-Hibernate.QueryExecutionMaxTimeQueryString : $hibernateStatistics.queryExecutionMaxTimeQueryString<br>
-#end
-Hibernate.QueryCacheHitCount : $hibernateStatistics.queryCacheHitCount<br>
-Hibernate.QueryCacheMissCount : $hibernateStatistics.queryCacheMissCount<br>
-Hibernate.TransactionCount : $hibernateStatistics.transactionCount<br>
-Hibernate.SuccessfulTransactionCount : $hibernateStatistics.successfulTransactionCount<br>
+<fieldset>
+	<legend>$r.translate("title.connection.statistics")</legend>
+	<table class="table table-condensed table-striped">
+		<tbody>
+			<tr><th style="width:25%;">Active connection count</th><td>$connectionInfos.activeConnectionCount</td></tr>
+			<tr><th>Current connection count</th><td>$connectionInfos.currentConnectionCount</td></tr>
+		</tbody>
+	</table>
 </fieldset>
-
-<fieldset><legend>List all queries</legend>
-#foreach ($query in $hibernateStatistics.queries)
-  <b>$query</b><br>
-  $hibernateStatistics.getQueryStatistics($query)<br>
-#end
+<fieldset>
+	<legend>$r.translate("title.hibernate.statistics")</legend>
+	<table class="table table-condensed table-striped">
+		<tbody>
+			<tr><th>Connect count</th><td>$hibernateStatistics.connectCount</td></tr>
+			<tr><th>Flush count</th><td>$hibernateStatistics.flushCount</td></tr>
+			<tr><th>Open session count</th><td>$hibernateStatistics.sessionOpenCount</td></tr>
+			<tr><th>Close session count</th><td>$hibernateStatistics.sessionCloseCount</td></tr>
+			<tr><th>Query execution count</th><td>$hibernateStatistics.queryExecutionCount</td></tr>
+			<tr><th>Query execution max. time</th><td>$hibernateStatistics.queryExecutionMaxTime</td></tr>
+			#if ($hibernateStatistics.queryExecutionMaxTimeQueryString)
+			<tr><th>Query&nbsp;execution&nbsp;max&nbsp;time&nbsp;query</th><td>$hibernateStatistics.queryExecutionMaxTimeQueryString</td></tr>
+			#end
+			<tr><th>Query cache hit count</th><td>$hibernateStatistics.queryCacheHitCount</td></tr>
+			<tr><th>Query cache miss count</th><td>$hibernateStatistics.queryCacheMissCount</td></tr>
+			<tr><th>Transaction count</th><td>$hibernateStatistics.transactionCount</td></tr>
+			<tr><th>Successful&nbsp;transaction&nbsp;count</th><td>$hibernateStatistics.successfulTransactionCount</td></tr>
+		</tbody>
+	</table>
 </fieldset>
 
-<fieldset><legend>List all entities</legend>
-#foreach ($entity in $hibernateStatistics.entityNames)
-  <b>$entity</b><br>
-  $hibernateStatistics.getEntityStatistics($entity)<br>
-#end
-</fieldset>
+
+
+
 
diff --git a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties
index dfb14bca00805028aaa361ac943a242fc87321ce..e1164121b4cc9174c5ae3f46da9aa109e758dea0 100644
--- a/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/sysinfo/_i18n/LocalStrings_de.properties
@@ -33,6 +33,25 @@ filesystemtest.nbrCharInFile.label=Anzahl Zeichen in Datei, aufgerundet auf ein
 filesystemtest.on=Dateisystem Test aktivieren
 filesystemtest.reload=Ausf\u00FChren
 filesystemtest.start=Start Test
+hibernate.statistics=Statistics
+hibernate.queries=JPA Queries
+hibernate.query.average=Avg.
+hibernate.query.max=Max.
+hibernate.query.min=Min.
+hibernate.query.query=Query
+hibernate.query.row=Rows
+hibernate.query.count=#
+hibernate.query.hits=# Hits
+hibernate.query.miss=# Miss
+hibernate.query.puts=# Put
+hibernate.entities=JPA Entities
+hibernate.entity.load=# Load
+hibernate.entity.fetch=# Fetch
+hibernate.entity.insert=# Insert
+hibernate.entity.update=# Update
+hibernate.entity.delete=# Delete
+hibernate.entity.optimisticFailure=# Optimistic failure
+hibernate.entity.entity=Entity
 infomsg=Meldung
 infomsg.nomsg=Keine Info Meldung vorhanden
 infomsg.preview=Vorschau
@@ -163,4 +182,5 @@ sysinfo.version=Version
 sysinfo.version.date=Build Datum
 sysinfo.version.hg=Mercurial Version
 title.hibernate.statistics=Hibernate Datenbank Zugriff Statistik
+title.connection.statistics=Datenbank Connections Statistik
 usersession.title=Information \u00FCber Benutzer-Sessions
diff --git a/src/main/java/org/olat/admin/sysinfo/manager/DatabaseStatsManager.java b/src/main/java/org/olat/admin/sysinfo/manager/DatabaseStatsManager.java
new file mode 100644
index 0000000000000000000000000000000000000000..8e1421d82c0c3b75d4efd2e25e82e735d380fcb1
--- /dev/null
+++ b/src/main/java/org/olat/admin/sysinfo/manager/DatabaseStatsManager.java
@@ -0,0 +1,169 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <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 the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <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>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.admin.sysinfo.manager;
+
+import java.util.Set;
+
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+
+import org.olat.admin.jmx.JMXManager;
+import org.olat.admin.sysinfo.model.DatabaseConnectionVO;
+import org.olat.core.CoreSpringFactory;
+import org.olat.core.logging.OLog;
+import org.olat.core.logging.Tracing;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * Initial date: 04.11.2015<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Service
+public class DatabaseStatsManager {
+	
+	private static final OLog log = Tracing.createLoggerFor(DatabaseStatsManager.class);
+	
+	
+	public DatabaseConnectionVO getConnectionInfos() {
+		DatabaseConnectionVO vo = new DatabaseConnectionVO();
+		vo.setActiveConnectionCount(0);
+		vo.setCurrentConnectionCount(0);
+		try {
+			JMXManager jmxManager = CoreSpringFactory.getImpl(JMXManager.class);
+			MBeanServer mBeanServer = jmxManager.getMBeanServer();
+			boolean found = searchHikariDataSources(mBeanServer, vo) || searchTomcatDataSources(mBeanServer, vo) || searchC3P0DataSources(mBeanServer, vo);
+			if(log.isDebug()) {
+				log.debug("MBean for datasource found: " + found);
+			}	
+		} catch (Exception e) {
+			log.error("", e);
+		}
+		return vo;
+	}
+	
+	private boolean searchC3P0DataSources(MBeanServer mBeanServer, DatabaseConnectionVO vo) {
+		try {
+			ObjectName poolName = new ObjectName("com.mchange.v2.c3p0:type=*,*");
+			Set<ObjectName> names = mBeanServer.queryNames(poolName, null);
+			if(names.size() > 0) {
+				int activeConnectionCount = 0;
+				int currentConnectionCount = 0;
+
+				for(ObjectName name:names) {
+					String cName = name.getCanonicalName();
+					if(cName.startsWith("com.mchange.v2.c3p0:") && cName.indexOf("type=PooledDataSource") > 0) {
+						MBeanInfo info = mBeanServer.getMBeanInfo(name);
+						MBeanAttributeInfo[] attrs = info.getAttributes();
+
+						for(MBeanAttributeInfo attr:attrs) {
+							String attrName = attr.getName();
+							if("numBusyConnectionsAllUsers".equals(attrName)) {
+								Number obj = (Number)mBeanServer.getAttribute(name, "numBusyConnectionsAllUsers");
+								activeConnectionCount += obj.intValue();
+							} else if("numConnectionsAllUsers".equals(attrName)) {
+								Number obj = (Number)mBeanServer.getAttribute(name, "numConnectionsAllUsers");
+								currentConnectionCount += obj.intValue();
+							}
+						}
+					}
+				}
+
+				vo.setActiveConnectionCount(activeConnectionCount);
+				vo.setCurrentConnectionCount(currentConnectionCount);
+				return true;
+			}
+		} catch (Exception e) {
+			log.error("", e);
+		}
+		return false;
+	}
+	
+	private boolean searchHikariDataSources(MBeanServer mBeanServer, DatabaseConnectionVO vo) {
+		try {
+			ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=*");
+			Set<ObjectName> names = mBeanServer.queryNames(poolName, null);
+			if(names.size() > 0) {
+				int activeConnectionCount = 0;
+				int currentConnectionCount = 0;
+
+				for(ObjectName name:names) {
+					String cName = name.getCanonicalName();
+					if(cName.startsWith("com.zaxxer.hikari:") && cName.indexOf("type=Pool") > 0 && cName.indexOf("type=PoolConfig") <= 0) {
+						MBeanInfo info = mBeanServer.getMBeanInfo(name);
+						MBeanAttributeInfo[] attrs = info.getAttributes();
+						for(MBeanAttributeInfo attr:attrs) {
+							String attrName = attr.getName();
+							if("ActiveConnections".equals(attrName)) {
+								Number obj = (Number)mBeanServer.getAttribute(name, "ActiveConnections");
+								activeConnectionCount += obj.intValue();
+							} else if("TotalConnections".equals(attrName)) {
+								Number obj = (Number)mBeanServer.getAttribute(name, "TotalConnections");
+								currentConnectionCount += obj.intValue();
+							}
+						}
+					}
+				}
+
+				vo.setActiveConnectionCount(activeConnectionCount);
+				vo.setCurrentConnectionCount(currentConnectionCount);
+				return true;
+			}
+		} catch (Exception e) {
+			log.error("", e);
+		}
+		return false;
+	}
+	
+	private boolean searchTomcatDataSources(MBeanServer mBeanServer, DatabaseConnectionVO vo) {
+		try {
+			ObjectName poolName = new ObjectName("Catalina:type=DataSource,*");
+			Set<ObjectName> names = mBeanServer.queryNames(poolName, null);
+			if(names.size() > 0) {
+				int activeConnectionCount = 0;
+				int idleConnectionCount = 0;
+				
+				for(ObjectName name:names) {
+					MBeanInfo info = mBeanServer.getMBeanInfo(name);
+					MBeanAttributeInfo[] attrs = info.getAttributes();
+					for(MBeanAttributeInfo attr:attrs) {
+						String attrName = attr.getName();
+						if("numActive".equals(attrName)) {
+							Number obj = (Number)mBeanServer.getAttribute(name, "numActive");
+							activeConnectionCount += obj.intValue();
+						} else if("numIdle".equals(attrName)) {
+							Number obj = (Number)mBeanServer.getAttribute(name, "numIdle");
+							idleConnectionCount += obj.intValue();
+						}
+					}
+				}
+
+				vo.setActiveConnectionCount(activeConnectionCount);
+				vo.setCurrentConnectionCount(activeConnectionCount + idleConnectionCount);
+			}
+		} catch (Exception e) {
+			log.error("", e);
+		}
+		return false;
+	}
+}
diff --git a/src/main/java/org/olat/restapi/system/vo/DatabaseConnectionVO.java b/src/main/java/org/olat/admin/sysinfo/model/DatabaseConnectionVO.java
similarity index 98%
rename from src/main/java/org/olat/restapi/system/vo/DatabaseConnectionVO.java
rename to src/main/java/org/olat/admin/sysinfo/model/DatabaseConnectionVO.java
index 3b400b7215a0a65d7c4f392a7195dad659d63f5d..5bf682e9dce95ec359f07425f40310cf8e60632d 100644
--- a/src/main/java/org/olat/restapi/system/vo/DatabaseConnectionVO.java
+++ b/src/main/java/org/olat/admin/sysinfo/model/DatabaseConnectionVO.java
@@ -17,7 +17,7 @@
  * frentix GmbH, http://www.frentix.com
  * <p>
  */
-package org.olat.restapi.system.vo;
+package org.olat.admin.sysinfo.model;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
diff --git a/src/main/java/org/olat/restapi/system/DatabaseWebService.java b/src/main/java/org/olat/restapi/system/DatabaseWebService.java
index c9cf655cbf75994f5b2671d95757067aeca78559..d0fd0cc85fce0b27a15e75573b4f47ac8ce8f75b 100644
--- a/src/main/java/org/olat/restapi/system/DatabaseWebService.java
+++ b/src/main/java/org/olat/restapi/system/DatabaseWebService.java
@@ -19,24 +19,16 @@
  */
 package org.olat.restapi.system;
 
-import java.util.Set;
-
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanInfo;
-import javax.management.MBeanServer;
-import javax.management.ObjectName;
 import javax.ws.rs.GET;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
 import org.hibernate.stat.Statistics;
-import org.olat.admin.jmx.JMXManager;
+import org.olat.admin.sysinfo.manager.DatabaseStatsManager;
+import org.olat.admin.sysinfo.model.DatabaseConnectionVO;
 import org.olat.core.CoreSpringFactory;
 import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
-import org.olat.restapi.system.vo.DatabaseConnectionVO;
 import org.olat.restapi.system.vo.DatabaseVO;
 import org.olat.restapi.system.vo.HibernateStatisticsVO;
 
@@ -46,23 +38,22 @@ import org.olat.restapi.system.vo.HibernateStatisticsVO;
  */
 public class DatabaseWebService {
 	
-	private static final OLog log = Tracing.createLoggerFor(DatabaseWebService.class);
-	
 	/**
 	 * Return the statistics about database and hibernate
 	 * 
 	 * @response.representation.200.qname {http://www.example.com}runtimeVO
-   * @response.representation.200.mediaType application/xml, application/json
-   * @response.representation.200.doc The version of the instance
-   * @response.representation.200.example {@link org.olat.restapi.system.vo.Examples#SAMPLE_DATABASEVO}
+	 * @response.representation.200.mediaType application/xml, application/json
+	 * @response.representation.200.doc The version of the instance
+	 * @response.representation.200.example {@link org.olat.restapi.system.vo.Examples#SAMPLE_DATABASEVO}
 	 * @response.representation.401.doc The roles of the authenticated user are not sufficient
-   * @param request The HTTP request
+	 * @param request The HTTP request
 	 * @return The informations about runtime, uptime, classes loaded, memory summary...
 	 */
 	@GET
 	@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
 	public Response getDatabaseStatistics() {
-		DatabaseConnectionVO connections = getConnectionInfos();
+		DatabaseConnectionVO connections = CoreSpringFactory.getImpl(DatabaseStatsManager.class)
+				.getConnectionInfos();
 		HibernateStatisticsVO hibernateStats = getHibernateStatistics();
 		
 		DatabaseVO vo = new DatabaseVO();
@@ -89,126 +80,4 @@ public class DatabaseWebService {
 		stats.setQueryExecutionMaxTimeQueryString(statistics.getQueryExecutionMaxTimeQueryString());
 		return stats;
 	}
-	
-	private DatabaseConnectionVO getConnectionInfos() {
-		DatabaseConnectionVO vo = new DatabaseConnectionVO();
-		vo.setActiveConnectionCount(0);
-		vo.setCurrentConnectionCount(0);
-		try {
-			JMXManager jmxManager = CoreSpringFactory.getImpl(JMXManager.class);
-			MBeanServer mBeanServer = jmxManager.getMBeanServer();
-			boolean found = searchHikariDataSources(mBeanServer, vo) || searchTomcatDataSources(mBeanServer, vo) || searchC3P0DataSources(mBeanServer, vo);
-			if(log.isDebug()) {
-				log.debug("MBean for datasource found: " + found);
-			}	
-		} catch (Exception e) {
-			log.error("", e);
-		}
-		return vo;
-	}
-	
-	private boolean searchC3P0DataSources(MBeanServer mBeanServer, DatabaseConnectionVO vo) {
-		try {
-			ObjectName poolName = new ObjectName("com.mchange.v2.c3p0:type=*,*");
-			Set<ObjectName> names = mBeanServer.queryNames(poolName, null);
-			if(names.size() > 0) {
-				int activeConnectionCount = 0;
-				int currentConnectionCount = 0;
-
-				for(ObjectName name:names) {
-					String cName = name.getCanonicalName();
-					if(cName.startsWith("com.mchange.v2.c3p0:") && cName.indexOf("type=PooledDataSource") > 0) {
-						MBeanInfo info = mBeanServer.getMBeanInfo(name);
-						MBeanAttributeInfo[] attrs = info.getAttributes();
-
-						for(MBeanAttributeInfo attr:attrs) {
-							String attrName = attr.getName();
-							if("numBusyConnectionsAllUsers".equals(attrName)) {
-								Number obj = (Number)mBeanServer.getAttribute(name, "numBusyConnectionsAllUsers");
-								activeConnectionCount += obj.intValue();
-							} else if("numConnectionsAllUsers".equals(attrName)) {
-								Number obj = (Number)mBeanServer.getAttribute(name, "numConnectionsAllUsers");
-								currentConnectionCount += obj.intValue();
-							}
-						}
-					}
-				}
-
-				vo.setActiveConnectionCount(activeConnectionCount);
-				vo.setCurrentConnectionCount(currentConnectionCount);
-				return true;
-			}
-		} catch (Exception e) {
-			log.error("", e);
-		}
-		return false;
-	}
-	
-	private boolean searchHikariDataSources(MBeanServer mBeanServer, DatabaseConnectionVO vo) {
-		try {
-			ObjectName poolName = new ObjectName("com.zaxxer.hikari:type=*");
-			Set<ObjectName> names = mBeanServer.queryNames(poolName, null);
-			if(names.size() > 0) {
-				int activeConnectionCount = 0;
-				int currentConnectionCount = 0;
-
-				for(ObjectName name:names) {
-					String cName = name.getCanonicalName();
-					if(cName.startsWith("com.zaxxer.hikari:") && cName.indexOf("type=Pool") > 0 && cName.indexOf("type=PoolConfig") <= 0) {
-						MBeanInfo info = mBeanServer.getMBeanInfo(name);
-						MBeanAttributeInfo[] attrs = info.getAttributes();
-						for(MBeanAttributeInfo attr:attrs) {
-							String attrName = attr.getName();
-							if("ActiveConnections".equals(attrName)) {
-								Number obj = (Number)mBeanServer.getAttribute(name, "ActiveConnections");
-								activeConnectionCount += obj.intValue();
-							} else if("TotalConnections".equals(attrName)) {
-								Number obj = (Number)mBeanServer.getAttribute(name, "TotalConnections");
-								currentConnectionCount += obj.intValue();
-							}
-						}
-					}
-				}
-
-				vo.setActiveConnectionCount(activeConnectionCount);
-				vo.setCurrentConnectionCount(currentConnectionCount);
-				return true;
-			}
-		} catch (Exception e) {
-			log.error("", e);
-		}
-		return false;
-	}
-	
-	private boolean searchTomcatDataSources(MBeanServer mBeanServer, DatabaseConnectionVO vo) {
-		try {
-			ObjectName poolName = new ObjectName("Catalina:type=DataSource,*");
-			Set<ObjectName> names = mBeanServer.queryNames(poolName, null);
-			if(names.size() > 0) {
-				int activeConnectionCount = 0;
-				int idleConnectionCount = 0;
-				
-				for(ObjectName name:names) {
-					MBeanInfo info = mBeanServer.getMBeanInfo(name);
-					MBeanAttributeInfo[] attrs = info.getAttributes();
-					for(MBeanAttributeInfo attr:attrs) {
-						String attrName = attr.getName();
-						if("numActive".equals(attrName)) {
-							Number obj = (Number)mBeanServer.getAttribute(name, "numActive");
-							activeConnectionCount += obj.intValue();
-						} else if("numIdle".equals(attrName)) {
-							Number obj = (Number)mBeanServer.getAttribute(name, "numIdle");
-							idleConnectionCount += obj.intValue();
-						}
-					}
-				}
-
-				vo.setActiveConnectionCount(activeConnectionCount);
-				vo.setCurrentConnectionCount(activeConnectionCount + idleConnectionCount);
-			}
-		} catch (Exception e) {
-			log.error("", e);
-		}
-		return false;
-	}
 }
diff --git a/src/main/java/org/olat/restapi/system/vo/DatabaseVO.java b/src/main/java/org/olat/restapi/system/vo/DatabaseVO.java
index adc41e7c906c04d9e7f649ee3662e06f02dd0f83..ea03f235a327fe8642936220f8c413f4c547ca10 100644
--- a/src/main/java/org/olat/restapi/system/vo/DatabaseVO.java
+++ b/src/main/java/org/olat/restapi/system/vo/DatabaseVO.java
@@ -23,6 +23,8 @@ import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlRootElement;
 
+import org.olat.admin.sysinfo.model.DatabaseConnectionVO;
+
 /**
  * 
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
diff --git a/src/main/java/org/olat/restapi/system/vo/Examples.java b/src/main/java/org/olat/restapi/system/vo/Examples.java
index 1f00ea50f2072025db4f89d3b797439e00d49a65..85d6c9a8db9e28566e5b492289012224f8c22006 100644
--- a/src/main/java/org/olat/restapi/system/vo/Examples.java
+++ b/src/main/java/org/olat/restapi/system/vo/Examples.java
@@ -21,6 +21,8 @@ package org.olat.restapi.system.vo;
 
 import java.util.Date;
 
+import org.olat.admin.sysinfo.model.DatabaseConnectionVO;
+
 /**
  * 
  * Description:<br>