diff --git a/src/main/java/org/olat/course/assessment/AssessmentToolManager.java b/src/main/java/org/olat/course/assessment/AssessmentToolManager.java
index 1085706cf3b50a24deeb2ba5e6237eb8ea1d3ab0..5684ca08ec9408fe2fda6fc1c53308641fec7125 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentToolManager.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentToolManager.java
@@ -23,7 +23,7 @@ import java.util.List;
 
 import org.olat.basesecurity.IdentityShort;
 import org.olat.core.id.Identity;
-import org.olat.course.assessment.model.CourseStatistics;
+import org.olat.course.assessment.model.AssessmentStatistics;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
 import org.olat.modules.assessment.AssessmentEntry;
 import org.olat.modules.assessment.model.AssessmentEntryStatus;
@@ -38,7 +38,23 @@ import org.olat.modules.assessment.model.AssessmentEntryStatus;
  */
 public interface AssessmentToolManager {
 	
-	public CourseStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params);
+	public AssessmentStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params);
+	
+	/**
+	 * 
+	 * @param coach
+	 * @param params
+	 * @return
+	 */
+	public int getNumberOfAssessedIndetities(Identity coach, SearchAssessedIdentityParams params);
+	
+	/**
+	 * The number of user who launched the course / resource
+	 * @param coach
+	 * @param params
+	 * @return
+	 */
+	public int getNumberOfInitialLaunches(Identity coach, SearchAssessedIdentityParams params);
 	
 	public List<Identity> getAssessedIdentities(Identity coach, SearchAssessedIdentityParams params);
 	
diff --git a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
index 1b85bab419d6fc5c06446d1514c679c1625857f9..fee25b618b6d8e46cc5e33a046a6b9acf8319c21 100644
--- a/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/AssessmentToolManagerImpl.java
@@ -29,11 +29,9 @@ import org.olat.basesecurity.IdentityShort;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.PersistenceHelper;
 import org.olat.core.id.Identity;
-import org.olat.core.logging.OLog;
-import org.olat.core.logging.Tracing;
 import org.olat.core.util.StringHelper;
 import org.olat.course.assessment.AssessmentToolManager;
-import org.olat.course.assessment.model.CourseStatistics;
+import org.olat.course.assessment.model.AssessmentStatistics;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
 import org.olat.course.assessment.model.UserCourseInfosImpl;
 import org.olat.modules.assessment.AssessmentEntry;
@@ -52,148 +50,130 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class AssessmentToolManagerImpl implements AssessmentToolManager {
-	
-	private static final OLog log = Tracing.createLoggerFor(AssessmentToolManagerImpl.class);
-	
+
 	@Autowired
 	private DB dbInstance;
-	
+
 	@Override
-	public CourseStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params) {
-		CourseStatistics entry = new CourseStatistics();
-		
+	public int getNumberOfAssessedIndetities(Identity coach, SearchAssessedIdentityParams params) {
 		//count all possible participants for the coach permissions
 		TypedQuery<Long> countUsers = createAssessedIdentities(coach, params, Long.class);
 		int numOfAssessedIdentites = 0;
 		List<Long> numOfUsersList = countUsers.getResultList();
 		if(numOfUsersList.size() == 1) {
-			numOfAssessedIdentites = numOfUsersList.get(0) == null ? 0 : numOfUsersList.get(0).intValue();
+				numOfAssessedIdentites = numOfUsersList.get(0) == null ? 0 : numOfUsersList.get(0).intValue();
 		}
-		entry.setNumOfAssessedIdentities(numOfAssessedIdentites);
-
-		//retrive statistcis about efficicency statements
-		assessmentEntryStatistics(coach, params, entry);
-		
-		//retrieve statistics in user course infos
-		userCourseInfosStatistics(coach, params, entry);
-
-		return entry;
+		return numOfAssessedIdentites;
 	}
 	
-	private void userCourseInfosStatistics(Identity coach, SearchAssessedIdentityParams params, CourseStatistics entry) {
+	@Override
+	public int getNumberOfInitialLaunches(Identity coach, SearchAssessedIdentityParams params) {
 		RepositoryEntry courseEntry = params.getEntry();
-		try {
-			StringBuilder sf = new StringBuilder();
-			sf.append("select count(infos.key), infos.resource.key from ").append(UserCourseInfosImpl.class.getName()).append(" as infos ")
-			  .append(" where infos.resource.key=:resourceKey and (infos.identity in");
-			if(params.isAdmin()) {
-				sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
-		          .append("    where rel.entry.key=:repoEntryKey and rel.group=participant.group")
-		          .append("      and participant.role='").append(GroupRoles.participant.name()).append("'")
-		          .append("  )");
-				if(params.isNonMembers()) {
-					sf.append(" or not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
-			          .append("    where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=infos.identity")
-			          .append("  )");
-				}
-			} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
-				sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
-		          .append("    where rel.entry.key=:repoEntryKey")
-		          .append("      and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
-		          .append("      and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
-		          .append("  )");
-			}
-			sf.append(" ) group by infos.resource.key");
 
-			TypedQuery<Object[]> infos = dbInstance.getCurrentEntityManager()
-				.createQuery(sf.toString(), Object[].class)
-				.setParameter("resourceKey", courseEntry.getOlatResource().getKey())
-				.setParameter("repoEntryKey", courseEntry.getKey());
-			if(!params.isAdmin()) {
-				infos.setParameter("identityKey", coach.getKey());
+		StringBuilder sf = new StringBuilder();
+		sf.append("select count(infos.key), infos.resource.key from ").append(UserCourseInfosImpl.class.getName()).append(" as infos ")
+		  .append(" where infos.resource.key=:resourceKey and (infos.identity in");
+		if(params.isAdmin()) {
+			sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
+	          .append("    where rel.entry.key=:repoEntryKey and rel.group=participant.group")
+	          .append("      and participant.role='").append(GroupRoles.participant.name()).append("'")
+	          .append("  )");
+			if(params.isNonMembers()) {
+				sf.append(" or not exists (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
+		          .append("    where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=infos.identity")
+		          .append("  )");
 			}
+		} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
+			sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
+	          .append("    where rel.entry.key=:repoEntryKey")
+	          .append("      and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
+	          .append("      and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
+	          .append("  )");
+		}
+		sf.append(" ) group by infos.resource.key");
 
-			List<Object[]> results = infos.getResultList();
-			Long initalLaunch = null;
-			if(results != null && results.size() > 0) {
-				initalLaunch = (Long)results.get(0)[0];
-			}
-			entry.setInitialLaunch(initalLaunch == null ? 0 : initalLaunch.intValue());
-		} catch (Exception e) {
-			e.printStackTrace();
-			log.error("", e);
+		TypedQuery<Object[]> infos = dbInstance.getCurrentEntityManager()
+			.createQuery(sf.toString(), Object[].class)
+			.setParameter("resourceKey", courseEntry.getOlatResource().getKey())
+			.setParameter("repoEntryKey", courseEntry.getKey());
+		if(!params.isAdmin()) {
+			infos.setParameter("identityKey", coach.getKey());
 		}
+
+		List<Object[]> results = infos.getResultList();
+		return results != null && results.size() > 0 && results.get(0)[0] instanceof Number
+				? ((Number)results.get(0)[0]).intValue(): 0;
 	}
 	
-	private void assessmentEntryStatistics(Identity coach, SearchAssessedIdentityParams params, CourseStatistics entry) {
+	@Override
+	public AssessmentStatistics getStatistics(Identity coach, SearchAssessedIdentityParams params) {
 		RepositoryEntry courseEntry = params.getEntry();
-		try {
-			StringBuilder sf = new StringBuilder();
-			sf.append("select avg(aentry.score) as scoreAverage, ")
-			  .append(" sum(case when aentry.passed=true then 1 else 0 end) as numOfPassed,")
-			  .append(" sum(case when aentry.passed=false then 1 else 0 end) as numOfFailed,")
-			  .append(" sum(case when aentry.passed is null then 1 else 0 end) as numOfNotAttempted,")
-			  .append(" sum(aentry.key) as numOfStatements,")
-			  .append(" v.key as repoKey")
-			  .append(" from assessmententry aentry ")
-			  .append(" inner join aentry.repositoryEntry v ")
-			  .append(" where v.key=:repoEntryKey and aentry.status is not null and not(aentry.status='").append(AssessmentEntryStatus.notStarted.name()).append("')");
-			if(params.getReferenceEntry() != null) {
-				sf.append(" and aentry.referenceEntry.key=:referenceKey");
-			}
-			if(params.getSubIdent() != null) {
-				sf.append(" and aentry.subIdent=:subIdent");
-			}
-			sf.append(" and (aentry.identity in");
-			if(params.isAdmin()) {
-				sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
-		          .append("    where rel.entry.key=:repoEntryKey and rel.group=participant.group")
-		          .append("      and participant.role='").append(GroupRoles.participant.name()).append("'")
-		          .append("  )");
-				if(params.isNonMembers()) {
-					sf.append(" or aentry.identity not in (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
-			          .append("    where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=aentry.identity")
-			          .append(" )");
-				}
-			} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
-				sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
-		          .append("    where rel.entry.key=:repoEntryKey")
-		          .append("      and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
-		          .append("      and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
-		          .append("  )");
-			}
-			sf.append(" ) group by v.key");
 
-			TypedQuery<Object[]> stats = dbInstance.getCurrentEntityManager()
-				.createQuery(sf.toString(), Object[].class)
-				.setParameter("repoEntryKey", courseEntry.getKey());
-			if(!params.isAdmin()) {
-				stats.setParameter("identityKey", coach.getKey());
-			}
-			if(params.getReferenceEntry() != null) {
-				stats.setParameter("referenceKey", params.getReferenceEntry().getKey());
-			}
-			if(params.getSubIdent() != null) {
-				stats.setParameter("subIdent", params.getSubIdent());
+		StringBuilder sf = new StringBuilder();
+		sf.append("select avg(aentry.score) as scoreAverage, ")
+		  .append(" sum(case when aentry.passed=true then 1 else 0 end) as numOfPassed,")
+		  .append(" sum(case when aentry.passed=false then 1 else 0 end) as numOfFailed,")
+		  .append(" sum(case when aentry.passed is null then 1 else 0 end) as numOfNotAttempted,")
+		  .append(" sum(aentry.key) as numOfStatements,")
+		  .append(" v.key as repoKey")
+		  .append(" from assessmententry aentry ")
+		  .append(" inner join aentry.repositoryEntry v ")
+		  .append(" where v.key=:repoEntryKey and aentry.status is not null and not(aentry.status='").append(AssessmentEntryStatus.notStarted.name()).append("')");
+		if(params.getReferenceEntry() != null) {
+			sf.append(" and aentry.referenceEntry.key=:referenceKey");
+		}
+		if(params.getSubIdent() != null) {
+			sf.append(" and aentry.subIdent=:subIdent");
+		}
+		sf.append(" and (aentry.identity in");
+		if(params.isAdmin()) {
+			sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant")
+	          .append("    where rel.entry.key=:repoEntryKey and rel.group=participant.group")
+	          .append("      and participant.role='").append(GroupRoles.participant.name()).append("'")
+	          .append("  )");
+			if(params.isNonMembers()) {
+				sf.append(" or aentry.identity not in (select membership.identity from repoentrytogroup as rel, bgroupmember as membership")
+		          .append("    where rel.entry.key=:repoEntryKey and rel.group=membership.group and membership.identity=aentry.identity")
+		          .append(" )");
 			}
+		} else if(params.isBusinessGroupCoach() || params.isRepositoryEntryCoach()) {
+			sf.append(" (select participant.identity from repoentrytogroup as rel, bgroupmember as participant, bgroupmember as coach")
+	          .append("    where rel.entry.key=:repoEntryKey")
+	          .append("      and rel.group=coach.group and coach.role='").append(GroupRoles.coach.name()).append("' and coach.identity.key=:identityKey")
+	          .append("      and rel.group=participant.group and participant.role='").append(GroupRoles.participant.name()).append("'")
+	          .append("  )");
+		}
+		sf.append(" ) group by v.key");
+
+		TypedQuery<Object[]> stats = dbInstance.getCurrentEntityManager()
+			.createQuery(sf.toString(), Object[].class)
+			.setParameter("repoEntryKey", courseEntry.getKey());
+		if(!params.isAdmin()) {
+			stats.setParameter("identityKey", coach.getKey());
+		}
+		if(params.getReferenceEntry() != null) {
+			stats.setParameter("referenceKey", params.getReferenceEntry().getKey());
+		}
+		if(params.getSubIdent() != null) {
+			stats.setParameter("subIdent", params.getSubIdent());
+		}
+		
+
+		AssessmentStatistics entry = new AssessmentStatistics();
+		List<Object[]> results = stats.getResultList();
+		if(results != null && results.size() > 0) {
+			Object[] result = results.get(0);
+			Double averageScore = (Double)result[0];
+			Long numOfPassed = (Long)result[1];
+			Long numOfFailed = (Long)result[2];
+			Long numOfNotAttempted = (Long)result[3];
 			
-			List<Object[]> results = stats.getResultList();
-			if(results != null && results.size() > 0) {
-				Object[] result = results.get(0);
-				Double averageScore = (Double)result[0];
-				Long numOfPassed = (Long)result[1];
-				Long numOfFailed = (Long)result[2];
-				Long numOfNotAttempted = (Long)result[3];
-				
-				entry.setAverageScore(averageScore);
-				entry.setCountPassed(numOfPassed == null ? 0 : numOfPassed.intValue());
-				entry.setCountFailed(numOfFailed == null ? 0 : numOfFailed.intValue());
-				entry.setCountNotAttempted(numOfNotAttempted == null ? 0 : numOfNotAttempted.intValue());
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-			log.error("", e);
+			entry.setAverageScore(averageScore);
+			entry.setCountPassed(numOfPassed == null ? 0 : numOfPassed.intValue());
+			entry.setCountFailed(numOfFailed == null ? 0 : numOfFailed.intValue());
+			entry.setCountNotAttempted(numOfNotAttempted == null ? 0 : numOfNotAttempted.intValue());
 		}
+		return entry;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/assessment/model/CourseStatistics.java b/src/main/java/org/olat/course/assessment/model/AssessmentStatistics.java
similarity index 78%
rename from src/main/java/org/olat/course/assessment/model/CourseStatistics.java
rename to src/main/java/org/olat/course/assessment/model/AssessmentStatistics.java
index cee766367b89a9d34e09095e43415ea3074b5461..9fb7a7436b8cc6614b33ae9553f90ca7faebbb31 100644
--- a/src/main/java/org/olat/course/assessment/model/CourseStatistics.java
+++ b/src/main/java/org/olat/course/assessment/model/AssessmentStatistics.java
@@ -25,22 +25,12 @@ package org.olat.course.assessment.model;
  * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
  *
  */
-public class CourseStatistics {
-	
-	private int numOfAssessedIdentities;
+public class AssessmentStatistics {
+
 	private int countPassed;
 	private int countFailed;
 	private int countNotAttempted;
 	private Double averageScore;
-	private int initialLaunch;
-	
-	public int getNumOfAssessedIdentities() {
-		return numOfAssessedIdentities;
-	}
-	
-	public void setNumOfAssessedIdentities(int numOfAssessedIdentities) {
-		this.numOfAssessedIdentities = numOfAssessedIdentities;
-	}
 	
 	public int getCountPassed() {
 		return countPassed;
@@ -73,12 +63,4 @@ public class CourseStatistics {
 	public void setAverageScore(Double averageScore) {
 		this.averageScore = averageScore;
 	}
-	
-	public int getInitialLaunch() {
-		return initialLaunch;
-	}
-	
-	public void setInitialLaunch(int initialLaunch) {
-		this.initialLaunch = initialLaunch;
-	}
 }
diff --git a/src/main/java/org/olat/course/assessment/model/SearchAssessedIdentityParams.java b/src/main/java/org/olat/course/assessment/model/SearchAssessedIdentityParams.java
index 261d082815e4bac6c3913a44ca831c699382e048..7b0de9af1e5354321aa839dd39b3625bde911a6f 100644
--- a/src/main/java/org/olat/course/assessment/model/SearchAssessedIdentityParams.java
+++ b/src/main/java/org/olat/course/assessment/model/SearchAssessedIdentityParams.java
@@ -49,7 +49,7 @@ public class SearchAssessedIdentityParams {
 	private String searchString;
 	private List<Long> businessGroupKeys;
 	
-	public SearchAssessedIdentityParams(RepositoryEntry entry, RepositoryEntry referenceEntry, String subIdent,
+	public SearchAssessedIdentityParams(RepositoryEntry entry, String subIdent, RepositoryEntry referenceEntry, 
 			AssessmentToolSecurityCallback secCallback) {
 		this.entry = entry;
 		this.referenceEntry = referenceEntry;
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessedIdentityListProvider.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessedIdentityListProvider.java
index 07996514552e022d69c4f32dd8b2374739b390da..bad77e8421962dbbaefb3c43ab6caae95e2ba961 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessedIdentityListProvider.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessedIdentityListProvider.java
@@ -69,7 +69,7 @@ public class AssessedIdentityListProvider implements ListProvider {
 	
 	@Override
 	public void getResult(String searchValue, ListReceiver receiver) {
-		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, referenceEntry, subIdent, assessmentCallback);
+		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, subIdent, referenceEntry, assessmentCallback);
 		params.setSearchString(searchValue);
 
 		int maxEntries = MAX_ENTRIES;
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java
index d5af160fa360d03cb52323b61cf752decab92307..0fd40b1bc5c95c9db42b662fd4751fc9a25e06e0 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/AssessmentCourseStatisticsSmallController.java
@@ -25,9 +25,11 @@ 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.olat.course.CourseFactory;
+import org.olat.course.ICourse;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.AssessmentToolManager;
-import org.olat.course.assessment.model.CourseStatistics;
+import org.olat.course.assessment.model.AssessmentStatistics;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
 import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
 import org.olat.repository.RepositoryEntry;
@@ -77,22 +79,26 @@ public class AssessmentCourseStatisticsSmallController extends BasicController {
 	}
 	
 	public void updateStatistics() {
-		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, null, null, assessmentCallback);
-		CourseStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
+		ICourse course = CourseFactory.loadCourse(courseEntry);
+		String rootNodeIdent = course.getRunStructure().getRootNode().getIdent();
 		
-		numOfAssessedIdentities = stats.getNumOfAssessedIdentities();
+		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, null /* rootNodeIdent */, null, assessmentCallback);
+		numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIndetities(getIdentity(), params);
 		mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities);
+		
+		AssessmentStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
 		mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore()));
 		numOfPassed = stats.getCountPassed();
 		mainVC.contextPut("numOfPassed", numOfPassed);
-		int percentPassed = Math.round(100.0f * ((float)stats.getCountPassed() / (float)stats.getNumOfAssessedIdentities()));
+		int percentPassed = Math.round(100.0f * (stats.getCountPassed() / numOfAssessedIdentities));
 		mainVC.contextPut("percentPassed", percentPassed);
 		numOfFailed = stats.getCountFailed();
 		mainVC.contextPut("numOfFailed", numOfFailed);
-		int percentFailed = Math.round(100.0f * ((float)stats.getCountFailed() / (float)stats.getNumOfAssessedIdentities()));
+		int percentFailed = Math.round(100.0f * (stats.getCountFailed() / numOfAssessedIdentities));
 		mainVC.contextPut("percentFailed", percentFailed);
 		
-		mainVC.contextPut("numOfInitialLaunch", stats.getInitialLaunch());
+		int numOfLaunches = assessmentToolManager.getNumberOfInitialLaunches(getIdentity(), params);
+		mainVC.contextPut("numOfInitialLaunch", numOfLaunches);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
index 4b0ba245e790bd99cf0bbf156b8150e6c2525f68..edf21f8c67d4fb8576013c8c5c0370938ea3115c 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityListCourseNodeController.java
@@ -226,7 +226,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem
 	}
 	
 	private void updateModel(UserRequest ureq, String searchString, List<FlexiTableFilter> filters, List<FlexiTableFilter> extendedFilters) {
-		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, referenceEntry, courseNode.getIdent(), assessmentCallback);
+		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(courseEntry, courseNode.getIdent(), referenceEntry, assessmentCallback);
 		
 		List<AssessmentEntryStatus> assessmentStatus = null;
 		if(filters != null && filters.size() > 0) {
@@ -279,6 +279,7 @@ public class IdentityListCourseNodeController extends FormBasicController implem
 		if(filters != null && filters.size() > 0) {
 			usersTableModel.filter(filters.get(0).getFilter());
 		}
+		tableEl.reset();
 		tableEl.reloadData();
 
 		List<String> toolCmpNames = new ArrayList<>();
diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java
index 855743f24c37b87c4e1fe4581bb75ba0430a1782..3e80f5039a842f6e24d446e80b14622c5a56c829 100644
--- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java
+++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java
@@ -73,7 +73,9 @@ public class AssessmentEntryDAO {
 		data.setRepositoryEntry(entry);
 		data.setSubIdent(subIdent);
 		data.setReferenceEntry(referenceEntry);
-		data.setScore(new BigDecimal(score));
+		if(score != null) {
+			data.setScore(new BigDecimal(score));
+		}
 		data.setPassed(passed);
 		dbInstance.getCurrentEntityManager().persist(data);
 		return data;
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
index 2d126d4340b112a2afcd72be8a056f89bcc83b5b..1521171d98592b02ac10d6a3514baf34987f55c8 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessedIdentityListController.java
@@ -191,7 +191,7 @@ public class AssessedIdentityListController extends FormBasicController implemen
 	}
 	
 	private void updateModel(String searchString, List<FlexiTableFilter> filters, List<FlexiTableFilter> extendedFilters) {
-		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, testEntry, null, assessmentCallback);
+		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
 		
 		List<AssessmentEntryStatus> assessmentStatus = null;
 		if(filters != null && filters.size() > 0) {
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java b/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java
index 1b9419aba7cdac31e3472cdd216696dbc16d5caa..8d6f0f40c6d0934dd0bf15260d5e64e841ff6f83 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessmentStatisticsSmallController.java
@@ -27,7 +27,7 @@ import org.olat.core.gui.control.WindowControl;
 import org.olat.core.gui.control.controller.BasicController;
 import org.olat.course.assessment.AssessmentHelper;
 import org.olat.course.assessment.AssessmentToolManager;
-import org.olat.course.assessment.model.CourseStatistics;
+import org.olat.course.assessment.model.AssessmentStatistics;
 import org.olat.course.assessment.model.SearchAssessedIdentityParams;
 import org.olat.modules.assessment.ui.AssessmentToolSecurityCallback;
 import org.olat.repository.RepositoryEntry;
@@ -77,22 +77,23 @@ public class AssessmentStatisticsSmallController extends BasicController {
 	}
 	
 	public void updateStatistics() {
-		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, testEntry, null, assessmentCallback);
-		CourseStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
-		
-		numOfAssessedIdentities = stats.getNumOfAssessedIdentities();
+		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
+		numOfAssessedIdentities = assessmentToolManager.getNumberOfAssessedIndetities(getIdentity(), params);
 		mainVC.contextPut("numOfAssessedIdentities", numOfAssessedIdentities);
+		
+		AssessmentStatistics stats = assessmentToolManager.getStatistics(getIdentity(), params);
 		mainVC.contextPut("scoreAverage", AssessmentHelper.getRoundedScore(stats.getAverageScore()));
 		numOfPassed = stats.getCountPassed();
 		mainVC.contextPut("numOfPassed", numOfPassed);
-		int percentPassed = Math.round(100.0f * ((float)stats.getCountPassed() / (float)stats.getNumOfAssessedIdentities()));
+		int percentPassed = Math.round(100.0f * (stats.getCountPassed() / numOfAssessedIdentities));
 		mainVC.contextPut("percentPassed", percentPassed);
 		numOfFailed = stats.getCountFailed();
 		mainVC.contextPut("numOfFailed", numOfFailed);
-		int percentFailed = Math.round(100.0f * ((float)stats.getCountFailed() / (float)stats.getNumOfAssessedIdentities()));
+		int percentFailed = Math.round(100.0f * (stats.getCountFailed() / numOfAssessedIdentities));
 		mainVC.contextPut("percentFailed", percentFailed);
 		
-		mainVC.contextPut("numOfInitialLaunch", stats.getInitialLaunch());
+		int numOfLaunches = assessmentToolManager.getNumberOfInitialLaunches(getIdentity(), params);
+		mainVC.contextPut("numOfInitialLaunch", numOfLaunches);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/modules/assessment/ui/AssessmentToReviewSmallController.java b/src/main/java/org/olat/modules/assessment/ui/AssessmentToReviewSmallController.java
index 44b155e42f6f532a84b971d2a50dafbb9a7a7e8b..5f1634d9d0b34be11f3e256ecf7c30f96e5cee28 100644
--- a/src/main/java/org/olat/modules/assessment/ui/AssessmentToReviewSmallController.java
+++ b/src/main/java/org/olat/modules/assessment/ui/AssessmentToReviewSmallController.java
@@ -124,7 +124,7 @@ public class AssessmentToReviewSmallController extends FormBasicController {
 	}
 	
 	private void loadModel() {
-		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, testEntry, null, assessmentCallback);
+		SearchAssessedIdentityParams params = new SearchAssessedIdentityParams(testEntry, null, testEntry, assessmentCallback);
 		List<AssessmentEntry> entries = assessmentToolManager.getAssessmentEntries(getIdentity(), params, AssessmentEntryStatus.inReview);
 		List<UserToReviewRow> rows = new ArrayList<>();