diff --git a/src/main/java/org/olat/basesecurity/BaseSecurity.java b/src/main/java/org/olat/basesecurity/BaseSecurity.java
index c8125dabf1a91b674b1628f25d0a1df577544e49..a6fcc6ce2d629b63e15f1f412c69d1bbcaf77873 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurity.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurity.java
@@ -523,6 +523,8 @@ public interface BaseSecurity {
 	 */
 	public boolean isIdentityInvited(Identity identity);
 	
+	public long countInvitations();
+	
 	/**
 	 * Delete an invitation
 	 * @param invitation
diff --git a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
index 5fa92fbe2695b245983dfb69abb344cf35cb17bc..efedb48ebaa41bb7fde1421821507f33aa9ede40 100644
--- a/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
+++ b/src/main/java/org/olat/basesecurity/BaseSecurityManager.java
@@ -890,6 +890,18 @@ public class BaseSecurityManager extends BasicManager implements BaseSecurity {
     return invitations.intValue() > 0;
 	}
 	
+	/**
+	 * @see org.olat.basesecurity.BaseSecurity#isIdentityInvited(org.olat.core.id.Identity)
+	 */
+	@Override
+	public long countInvitations() {
+		StringBuilder sb = new StringBuilder();
+		sb.append("select count(invitation) from ").append(InvitationImpl.class.getName()).append(" as invitation");
+	  
+		Number invitations = (Number)DBFactory.getInstance().createQuery(sb.toString()).uniqueResult();
+		return invitations.longValue();
+	}
+	
 	/**
 	 * @see org.olat.basesecurity.BaseSecurity#deleteInvitation(org.olat.basesecurity.Invitation)
 	 */
diff --git a/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java b/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java
index aca62556c7eb2ab1513a27667a2a48d4161388a1..4bfa2b84d33d787151de9f88970fce7e2c10c057 100644
--- a/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java
+++ b/src/main/java/org/olat/restapi/system/OpenOLATStatisticsWebService.java
@@ -19,6 +19,7 @@
  */
 package org.olat.restapi.system;
 
+import java.util.Calendar;
 import java.util.List;
 import java.util.Set;
 
@@ -35,6 +36,7 @@ import org.olat.admin.sysinfo.model.SessionsStats;
 import org.olat.basesecurity.BaseSecurity;
 import org.olat.basesecurity.Constants;
 import org.olat.core.CoreSpringFactory;
+import org.olat.core.id.Identity;
 import org.olat.core.util.SessionInfo;
 import org.olat.core.util.UserSession;
 import org.olat.core.util.WorkThreadInformations;
@@ -167,13 +169,51 @@ public class OpenOLATStatisticsWebService implements Sampler {
 	
 	private UserStatisticsVO getUserStatistics() {
 		UserStatisticsVO stats = new UserStatisticsVO();
-		
 		BaseSecurity securityManager = CoreSpringFactory.getImpl(BaseSecurity.class);
-		long countUsers = securityManager.countIdentitiesByPowerSearch(null, null, false, null, null, null, null, null, null, null, null);
-		stats.setTotalUserCount(countUsers);
+
+		// activeUserCount="88" // registered and activated identities, same as in GUI
 		long countActiveUsers = securityManager.countIdentitiesByPowerSearch(null, null, false, null, null, null, null, null, null, null, Constants.USERSTATUS_ACTIVE);
 		stats.setActiveUserCount(countActiveUsers);
 		
+		// active last week
+		Calendar lastDay = Calendar.getInstance();
+		lastDay.add(Calendar.DATE, -1);
+		long activeUserCountDay = securityManager.countUniqueUserLoginsSince(lastDay.getTime());
+		stats.setActiveUserCountLastDay(activeUserCountDay);
+		
+		// active last week
+		Calendar lastWeek = Calendar.getInstance();
+		lastWeek.add(Calendar.DATE, -7);
+		long activeUserCountWeek = securityManager.countUniqueUserLoginsSince(lastWeek.getTime());
+		stats.setActiveUserCountLastWeek(activeUserCountWeek);
+		
+		// active last month
+		Calendar lastMonth = Calendar.getInstance();
+		lastMonth.add(Calendar.MONTH, -1);
+		long activeUserCountMonth = securityManager.countUniqueUserLoginsSince(lastMonth.getTime());
+		stats.setActiveUserCountLastMonth(activeUserCountMonth);
+		
+		// active last 6 month
+		Calendar last6Month = Calendar.getInstance();
+		last6Month.add(Calendar.MONTH, -6);
+		long activeUserCount6Month = securityManager.countUniqueUserLoginsSince(last6Month.getTime());
+		stats.setActiveUserCountLast6Month(activeUserCount6Month);
+
+		// externalUserCount="12" // EP invite identities, later maybe also used in courses for MOOCS, external experts etc)
+		long invitationsCount = securityManager.countInvitations();
+		stats.setExternalUserCount(invitationsCount);
+		
+		// blockedUserCount="0" // identities in login blocked state
+		long blockedUserCount = securityManager.countIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_LOGIN_DENIED);	
+		stats.setBlockedUserCount(blockedUserCount);
+		// deletedUserCount="943" // deleted identities
+		long deletedUserCount = securityManager.countIdentitiesByPowerSearch(null, null, true, null, null, null, null, null, null, null, Identity.STATUS_DELETED);	
+		stats.setDeletedUserCount(deletedUserCount);
+		
+		// totalUserCount="1043" // Sum of all above
+		long countUsers = securityManager.countIdentitiesByPowerSearch(null, null, false, null, null, null, null, null, null, null, null);
+		stats.setTotalUserCount(countUsers);
+
 		BusinessGroupService bgs = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		long countGroups = bgs.countBusinessGroups(null, null);
 		stats.setTotalGroupCount(countGroups);
diff --git a/src/main/java/org/olat/restapi/system/vo/UserStatisticsVO.java b/src/main/java/org/olat/restapi/system/vo/UserStatisticsVO.java
index 146cd683971d7257454e7b8fb00802a647b6eaab..e8eae18f28c9fe1bdce949c26d8e986669c678c2 100644
--- a/src/main/java/org/olat/restapi/system/vo/UserStatisticsVO.java
+++ b/src/main/java/org/olat/restapi/system/vo/UserStatisticsVO.java
@@ -34,12 +34,25 @@ public class UserStatisticsVO {
 
 	@XmlAttribute(name="totalUserCount", required=true)
 	private long totalUserCount;
-	@XmlAttribute(name="activeUserCount", required=true)
+	@XmlAttribute(name="activeUserCount", required=false)
 	private long activeUserCount;
+	@XmlAttribute(name="activeUserCountLastDay", required=false)
+	private long activeUserCountLastDay;
+	@XmlAttribute(name="activeUserCountLastWeek", required=false)
+	private long activeUserCountLastWeek;
+	@XmlAttribute(name="activeUserCountLastMonth", required=false)
+	private long activeUserCountLastMonth;
+	@XmlAttribute(name="activeUserCountLast6Month", required=false)
+	private long activeUserCountLast6Month;
+	@XmlAttribute(name="externalUserCount", required=false)
+	private long externalUserCount;
+	@XmlAttribute(name="blockedUserCount", required=false)
+	private long blockedUserCount;
+	@XmlAttribute(name="deletedUserCount", required=false)
+	private long deletedUserCount;
 	@XmlAttribute(name="totalGroupCount", required=true)
 	private long totalGroupCount;
-	
-	
+
 	public long getTotalUserCount() {
 		return totalUserCount;
 	}
@@ -55,7 +68,63 @@ public class UserStatisticsVO {
 	public void setActiveUserCount(long activeUserCount) {
 		this.activeUserCount = activeUserCount;
 	}
-	
+
+	public long getActiveUserCountLastDay() {
+		return activeUserCountLastDay;
+	}
+
+	public void setActiveUserCountLastDay(long activeUserCountLastDay) {
+		this.activeUserCountLastDay = activeUserCountLastDay;
+	}
+
+	public long getActiveUserCountLastWeek() {
+		return activeUserCountLastWeek;
+	}
+
+	public void setActiveUserCountLastWeek(long activeUserCountLastWeek) {
+		this.activeUserCountLastWeek = activeUserCountLastWeek;
+	}
+
+	public long getActiveUserCountLastMonth() {
+		return activeUserCountLastMonth;
+	}
+
+	public void setActiveUserCountLastMonth(long activeUserCountLastMonth) {
+		this.activeUserCountLastMonth = activeUserCountLastMonth;
+	}
+
+	public long getActiveUserCountLast6Month() {
+		return activeUserCountLast6Month;
+	}
+
+	public void setActiveUserCountLast6Month(long activeUserCountLast6Month) {
+		this.activeUserCountLast6Month = activeUserCountLast6Month;
+	}
+
+	public long getExternalUserCount() {
+		return externalUserCount;
+	}
+
+	public void setExternalUserCount(long externalUserCount) {
+		this.externalUserCount = externalUserCount;
+	}
+
+	public long getBlockedUserCount() {
+		return blockedUserCount;
+	}
+
+	public void setBlockedUserCount(long blockedUserCount) {
+		this.blockedUserCount = blockedUserCount;
+	}
+
+	public long getDeletedUserCount() {
+		return deletedUserCount;
+	}
+
+	public void setDeletedUserCount(long deletedUserCount) {
+		this.deletedUserCount = deletedUserCount;
+	}
+
 	public long getTotalGroupCount() {
 		return totalGroupCount;
 	}
diff --git a/src/test/java/org/olat/restapi/SystemTest.java b/src/test/java/org/olat/restapi/SystemTest.java
index 9a12feb4d1bc7b9b10ad1fd04904050f84688c3b..ee40369c5bff3cb0d940b06a43b6d39502074669 100644
--- a/src/test/java/org/olat/restapi/SystemTest.java
+++ b/src/test/java/org/olat/restapi/SystemTest.java
@@ -153,11 +153,36 @@ public class SystemTest extends OlatJerseyTestCase {
 		
 		URI systemUri = conn.getContextURI().path("system").path("monitoring").path("openolat").path("users").build();
 		UserStatisticsVO userStats = conn.get(systemUri, UserStatisticsVO.class);
-
 		assertNotNull(userStats);
-		assertTrue(userStats.getTotalUserCount() > 0);
-		assertTrue(userStats.getTotalGroupCount() >= 0);
-		assertTrue(userStats.getActiveUserCount() >= 0);
+		
+		long totalUserCount = userStats.getTotalUserCount();
+		assertTrue(totalUserCount > 0);
+		long activeUserCount = userStats.getActiveUserCount();
+		assertTrue(activeUserCount >= 0);
+		
+		long activeUserCountLastDay = userStats.getActiveUserCountLastDay();
+		assertTrue(activeUserCountLastDay >= 0);
+		
+		long activeUserCountLastWeek = userStats.getActiveUserCountLastWeek();
+		assertTrue(activeUserCountLastWeek >= 0);
+		
+		long activeUserCountLastMonth = userStats.getActiveUserCountLastMonth();
+		assertTrue(activeUserCountLastMonth >= 0);
+		
+		long activeUserCountLast6Month = userStats.getActiveUserCountLast6Month();
+		assertTrue(activeUserCountLast6Month >= 0);
+		
+		long blockedUserCount = userStats.getBlockedUserCount();
+		assertTrue(blockedUserCount >= 0);
+		
+		long deletedUserCount = userStats.getDeletedUserCount();
+		assertTrue(deletedUserCount >= 0);
+		
+		long externalUserCount = userStats.getExternalUserCount();
+		assertTrue(externalUserCount >= 0);
+		
+		long totalGroupCount = userStats.getTotalGroupCount();
+		assertTrue(totalGroupCount >= 0);
 		
 		conn.shutdown();	
 	}