diff --git a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
index 61d9e503a4139ca3542df735d826356cc4030d86..c9eed9a88e0b137604b989ae6384c189509d9981 100644
--- a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
+++ b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
@@ -28,6 +28,7 @@ package org.olat.course.archiver;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
@@ -383,6 +384,7 @@ public class ScoreAccountingHelper {
 		
 		BusinessGroupService businessGroupService = CoreSpringFactory.getImpl(BusinessGroupService.class);
 		List<Identity> userList = businessGroupService.getMembers(groups, GroupRoles.participant.name());
+		userList = new ArrayList<>(new HashSet<>(userList));
 		OLATResourceable ores = OresHelper.createOLATResourceableInstance(CourseModule.class, courseEnv.getCourseResourceableId());
 		RepositoryEntry re = RepositoryManager.getInstance().lookupRepositoryEntry(ores, false);
 		if(re != null) {
@@ -391,7 +393,10 @@ public class ScoreAccountingHelper {
 		}
 
 		List<Identity> assessedList = courseEnv.getCoursePropertyManager().getAllIdentitiesWithCourseAssessmentData(userList);
-		userList.addAll(assessedList);
+		if(assessedList.size() > 0) {
+			assessedList.removeAll(userList);//deduplicate
+			userList.addAll(assessedList);
+		}
 		return userList;
 	}
 	
diff --git a/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java b/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java
index c4ed659ad87d63ba63907e1dde7578799b6bc31d..82f3b8aaf801cfccf7a10109a09d0f39107fccfd 100644
--- a/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java
+++ b/src/main/java/org/olat/course/properties/PersistingCoursePropertyManager.java
@@ -32,10 +32,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 
+import javax.persistence.TypedQuery;
+
 import org.olat.basesecurity.IdentityImpl;
-import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.DBFactory;
-import org.olat.core.commons.persistence.DBQuery;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
 import org.olat.core.logging.AssertException;
@@ -219,8 +219,11 @@ public class PersistingCoursePropertyManager extends BasicManager implements Cou
 	}
 
 	/**
-	 * @see org.olat.course.properties.CoursePropertyManager#getAllIdentitiesWithCourseAssessmentData()
+	 * The specified exclude identities is only a best effort used for performance. If you want
+	 * unique identities, deduplicate them afterwards.
+	 * 
 	 */
+	@Override
 	public List<Identity> getAllIdentitiesWithCourseAssessmentData(Collection<Identity> excludeIdentities) {
 		StringBuilder query = new StringBuilder();
 		query.append("select distinct i from ")
@@ -235,20 +238,21 @@ public class PersistingCoursePropertyManager extends BasicManager implements Cou
 			query.append(" and p.identity.key not in (:excludeIdentities) ");
 		}
 
-		DB db = DBFactory.getInstance();
-		DBQuery dbq = db.createQuery(query.toString());
-		dbq.setLong("resid", ores.getResourceableId());
-		dbq.setString("resname", ores.getResourceableTypeName());
+		TypedQuery<Identity> db = DBFactory.getInstance().getCurrentEntityManager()
+				.createQuery(query.toString(), Identity.class)
+				.setParameter("resid", ores.getResourceableId())
+				.setParameter("resname", ores.getResourceableTypeName());
 		if(excludeIdentities != null && !excludeIdentities.isEmpty()) {
 			List<Long> excludeKeys = new ArrayList<Long>();
 			for(Identity identity:excludeIdentities) {
 				excludeKeys.add(identity.getKey());
 			}
-			dbq.setParameterList("excludeIdentities", excludeKeys);
+			//limit because Oracle and Hibernate doesn't like more than 1000
+			if(excludeKeys.size() > 900) {
+				excludeKeys = excludeKeys.subList(0, 900);
+			}
+			db.setParameter("excludeIdentities", excludeKeys);
 		}
-
-		List<Identity> res = dbq.list();
-		return res;
+		return db.getResultList();
 	}
-
 }
\ No newline at end of file