diff --git a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java
index 27a6c41049c74c536771ef47b46c62503303d7e5..4e1a9654dc226b5923136045a14c5176037c77dd 100644
--- a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java
+++ b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java
@@ -30,6 +30,7 @@ import java.util.stream.Collectors;
 
 import javax.persistence.TypedQuery;
 
+import org.olat.basesecurity.Group;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.core.commons.persistence.DB;
@@ -650,6 +651,9 @@ public class AssessmentTestSessionDAO {
 	}
 	
 	/**
+	 * The query only returns session with a valid finish time and which are not in
+	 * author mode.
+	 * 
 	 * @param searchParams
 	 * @return The returned list is order by user name and test session key
 	 */
@@ -676,7 +680,7 @@ public class AssessmentTestSessionDAO {
 	 * @param sb
 	 * @param searchParams
 	 */
-	protected static final void decorateTestSessionPermission(StringBuilder sb, QTI21StatisticSearchParams searchParams) {
+	private static final void decorateTestSessionPermission(StringBuilder sb, QTI21StatisticSearchParams searchParams) {
 	  	sb.append(" where testSession.testEntry.key=:testEntryKey")
 	  	  .append("  and testSession.finishTime is not null and testSession.authorMode=false");
 		if(searchParams.getCourseEntry() != null || searchParams.getTestEntry() != null) {
@@ -719,7 +723,7 @@ public class AssessmentTestSessionDAO {
 	 * @param sb
 	 * @param searchParams
 	 */
-	protected static final void decorateTestSessionPermission(TypedQuery<?> query, QTI21StatisticSearchParams searchParams) {
+	private static final void decorateTestSessionPermission(TypedQuery<?> query, QTI21StatisticSearchParams searchParams) {
 		query.setParameter("testEntryKey", searchParams.getTestEntry().getKey());
 		if(searchParams.getCourseEntry() != null) {
 			query.setParameter("repoEntryKey", searchParams.getCourseEntry().getKey());
@@ -729,14 +733,13 @@ public class AssessmentTestSessionDAO {
 		if(StringHelper.containsNonWhitespace(searchParams.getNodeIdent())) {
 			query.setParameter("subIdent", searchParams.getNodeIdent());
 		}
-		if(searchParams.getLimitToGroups() != null && searchParams.getLimitToGroups().size() > 0) {
+		if(searchParams.getLimitToGroups() != null && !searchParams.getLimitToGroups().isEmpty()) {
 			List<Long> keys = searchParams.getLimitToGroups().stream()
-					.map(group -> group.getKey()).collect(Collectors.toList());
+					.map(Group::getKey).collect(Collectors.toList());
 			query.setParameter("limitGroupKeys", keys);
-		}
-		if(searchParams.getLimitToIdentities() != null && searchParams.getLimitToIdentities().size() > 0) {
+		} else if(searchParams.getLimitToIdentities() != null && !searchParams.getLimitToIdentities().isEmpty()) {
 			List<Long> keys = searchParams.getLimitToIdentities().stream()
-					.map(group -> group.getKey()).collect(Collectors.toList());
+					.map(Identity::getKey).collect(Collectors.toList());
 			query.setParameter("limitIdentityKeys", keys);
 		}
 	}
diff --git a/src/test/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAOTest.java b/src/test/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAOTest.java
index 934aa18938189498a7443c8b108083f2689f2f09..355fd9d45e407845db4676c63843c82ab8c94382 100644
--- a/src/test/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAOTest.java
+++ b/src/test/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAOTest.java
@@ -20,24 +20,35 @@
 package org.olat.ims.qti21.manager;
 
 import java.math.BigDecimal;
+import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.olat.basesecurity.Group;
+import org.olat.basesecurity.GroupRoles;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.course.nodes.ArchiveOptions;
 import org.olat.ims.qti21.AssessmentItemSession;
+import org.olat.ims.qti21.AssessmentResponse;
 import org.olat.ims.qti21.AssessmentTestSession;
 import org.olat.ims.qti21.model.ParentPartItemRefs;
+import org.olat.ims.qti21.model.QTI21StatisticSearchParams;
+import org.olat.ims.qti21.model.ResponseLegality;
 import org.olat.ims.qti21.model.jpa.AssessmentTestSessionStatistics;
 import org.olat.modules.assessment.AssessmentEntry;
 import org.olat.modules.assessment.AssessmentService;
 import org.olat.repository.RepositoryEntry;
+import org.olat.repository.manager.RepositoryEntryRelationDAO;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import uk.ac.ed.ph.jqtiplus.types.ResponseData.ResponseDataType;
+
 /**
  * 
  * Initial date: 02.02.2016<br>
@@ -49,11 +60,15 @@ public class AssessmentTestSessionDAOTest extends OlatTestCase {
 	@Autowired
 	private DB dbInstance;
 	@Autowired
+	private AssessmentResponseDAO responseDao;
+	@Autowired
 	private AssessmentItemSessionDAO itemSessionDao;
 	@Autowired
 	private AssessmentTestSessionDAO testSessionDao;
 	@Autowired
 	private AssessmentService assessmentService;
+	@Autowired
+	private RepositoryEntryRelationDAO repositoryEntryRelationDao;
 
 	@Test
 	public void createTestSession_repo() {
@@ -230,4 +245,45 @@ public class AssessmentTestSessionDAOTest extends OlatTestCase {
 		Assert.assertTrue(authorSessions.contains(testSession2));
 		Assert.assertFalse(authorSessions.contains(testSession3));
 	}
+	
+	
+	@Test
+	public void getTestSessionsOfResponse_groupsAndIdentities() {
+		// prepare a test and 2 users
+		RepositoryEntry testEntry = JunitTestHelper.createAndPersistRepositoryEntry();
+		Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("session-9");
+		AssessmentEntry assessmentEntry = assessmentService.getOrCreateAssessmentEntry(assessedIdentity, null, testEntry, null, testEntry);
+		dbInstance.commit();
+		repositoryEntryRelationDao.addRole(assessedIdentity, testEntry, GroupRoles.participant.name());
+		Group testDefaultGroup = repositoryEntryRelationDao.getDefaultGroup(testEntry);
+		
+		//create an assessment test session with a response
+		AssessmentTestSession testSession = testSessionDao.createAndPersistTestSession(testEntry, testEntry, null, assessmentEntry, assessedIdentity, null, false);
+		Assert.assertNotNull(testSession);
+		AssessmentItemSession itemSession = itemSessionDao.createAndPersistAssessmentItemSession(testSession, null, UUID.randomUUID().toString());
+		Assert.assertNotNull(itemSession);
+		AssessmentResponse response = responseDao.createAssessmentResponse(testSession, itemSession, UUID.randomUUID().toString(), ResponseLegality.VALID, ResponseDataType.FILE);
+		Assert.assertNotNull(response);
+		
+		dbInstance.commitAndCloseSession();
+		
+		// only finished count
+		testSession.setDuration(100l);
+		testSession.setFinishTime(new Date());
+		testSession = testSessionDao.update(testSession);
+		
+		dbInstance.commitAndCloseSession();
+		
+		//check that there isn't any active test session (only author mode)
+		ArchiveOptions options = new ArchiveOptions();
+		options.setIdentities(Collections.singletonList(assessedIdentity));
+		QTI21StatisticSearchParams searchParams = new QTI21StatisticSearchParams(options, testEntry, null, null);
+		searchParams.setLimitToGroups(Collections.singletonList(testDefaultGroup));
+		searchParams.setLimitToIdentities(Collections.singletonList(assessedIdentity));
+		
+		List<AssessmentTestSession> authorSessions = testSessionDao.getTestSessionsOfResponse(searchParams);
+		Assert.assertNotNull(authorSessions);
+		Assert.assertEquals(1, authorSessions.size());
+		Assert.assertEquals(testSession, authorSessions.get(0));
+	}
 }