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 0dae436ec6a5048921be42bd2a82de819242ff8e..77567666cd25a97af95fd8b59de15152ba8847ce 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
@@ -32,6 +32,7 @@ import org.olat.basesecurity.BaseSecurityModule;
 import org.olat.basesecurity.Group;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.basesecurity.model.IdentityRefImpl;
+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.Component;
@@ -156,6 +157,8 @@ public class IdentityListCourseNodeController extends FormBasicController
 	private ConfirmUserVisibilityController changeUserVisibilityCtrl;
 	private ContactFormController contactCtrl;
 	
+	@Autowired
+	private DB dbInstance;
 	@Autowired
 	private UserManager userManager;
 	@Autowired
@@ -931,6 +934,7 @@ public class IdentityListCourseNodeController extends FormBasicController
 					scoreEval.getCurrentRunStatus(), scoreEval.getAssessmentID());
 			courseAssessmentService.updateScoreEvaluation(courseNode, doneEval, assessedUserCourseEnv, getIdentity(),
 					false, Role.coach);
+			dbInstance.commitAndCloseSession();
 		}
 		loadModel(ureq);
 	}
@@ -952,6 +956,7 @@ public class IdentityListCourseNodeController extends FormBasicController
 			for(AssessedIdentityElementRow row:rows) {
 				Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey());
 				doSetDone(assessedIdentity, courseNode, course);
+				dbInstance.commitAndCloseSession();
 			}
 			loadModel(ureq);
 		}
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 4e1a9654dc226b5923136045a14c5176037c77dd..66f461ab479e73a09f6442e7dfc746bf29433cdd 100644
--- a/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java
+++ b/src/main/java/org/olat/ims/qti21/manager/AssessmentTestSessionDAO.java
@@ -698,7 +698,7 @@ public class AssessmentTestSessionDAO {
 				sb.append(" and membership.role='").append(GroupRoles.participant.name()).append("'");
 			}
 			sb.append(" )");
-		} else if(searchParams.getLimitToIdentities() != null) {
+		} else if(searchParams.getLimitToIdentities() != null && !searchParams.getLimitToIdentities().isEmpty()) {
 			sb.append(" testSession.identity.key in (select membership.identity.key from  bgroupmember as membership, repoentrytogroup as rel")
 			  .append("   where rel.entry.key=:repoEntryKey and rel.group.key=membership.group.key and membership.identity.key in (:limitIdentityKeys)")
 			  .append("   and membership.role='").append(GroupRoles.participant.name()).append("'")
diff --git a/src/main/java/org/olat/ims/qti21/manager/archive/QTI21ArchiveFormat.java b/src/main/java/org/olat/ims/qti21/manager/archive/QTI21ArchiveFormat.java
index e0e13e6f88a77c212fea4a1c46b52e84a70e3090..25fcb8f48f122fb36d3ede73b2dc468bb6b953eb 100644
--- a/src/main/java/org/olat/ims/qti21/manager/archive/QTI21ArchiveFormat.java
+++ b/src/main/java/org/olat/ims/qti21/manager/archive/QTI21ArchiveFormat.java
@@ -476,11 +476,8 @@ public class QTI21ArchiveFormat {
 				AssessmentItemSession itemSession = response.getAssessmentItemSession();
 				sessionResponses.addResponse(itemSession, response);
 			}
-			writeDataRow(i + 1, sessionResponses, exportSheet, workbook);
-			
-			if(i % 25 == 0) {
-				DBFactory.getInstance().commitAndCloseSession();
-			}
+			writeDataRow(i + 1, sessionResponses, exportSheet, workbook);	
+			DBFactory.getInstance().commitAndCloseSession();
 		}
 	}
 	
diff --git a/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java b/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java
index 9d8a2452637c25e1f7d1cd588bd2e7be4a17a468..2deb8666a308524f62561ba1de5e2d9b74c3d8ee 100644
--- a/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java
+++ b/src/main/java/org/olat/ims/qti21/model/xml/interactions/HotspotAssessmentItemBuilder.java
@@ -282,6 +282,12 @@ public class HotspotAssessmentItemBuilder extends AssessmentItemBuilder implemen
 		return correctAnswers.contains(choice.getIdentifier());
 	}
 	
+	public void clearCorrectAnswers() {
+		if(correctAnswers != null) {
+			correctAnswers.clear();
+		}
+	}
+	
 	public void setCorrect(HotspotChoice choice, boolean correct) {
 		if(correctAnswers == null) {
 			correctAnswers = new ArrayList<>();
@@ -425,6 +431,7 @@ public class HotspotAssessmentItemBuilder extends AssessmentItemBuilder implemen
 		//add question
 		getHtmlHelper().appendHtml(assessmentItem.getItemBody(), question);
 		
+		
 		//add interaction
 		if(correctAnswers.size() == 1 && cardinality == Cardinality.SINGLE) {
 			hotspotInteraction.setMaxChoices(1);
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21ResetDataController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21ResetDataController.java
index 7a76b362b0aa66a1ccd4e66f35f7e7b95ac6c4e5..44b4f62e988c763cb9031ee5332559e2ada3351e 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21ResetDataController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21ResetDataController.java
@@ -31,6 +31,7 @@ import java.util.zip.ZipOutputStream;
 
 import org.olat.basesecurity.GroupRoles;
 import org.olat.core.commons.modules.bc.FolderConfig;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
@@ -87,6 +88,8 @@ public class QTI21ResetDataController extends FormBasicController {
 	private CourseEnvironment courseEnv;
 	private RepositoryEntry assessedEntry;
 	
+	@Autowired
+	private DB dbInstance;
 	@Autowired
 	private QTI21Service qtiService;
 	@Autowired
@@ -213,6 +216,7 @@ public class QTI21ResetDataController extends FormBasicController {
 						Role.coach);
 				courseAssessmentService.updateCurrentCompletion(courseNode, uce, null, AssessmentRunStatus.notStarted,
 						Role.coach);
+				dbInstance.commitAndCloseSession();
 			}
 		} else if(assessedEntry != null) {
 			archiveData(assessedEntry);
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21RetrieveTestsController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21RetrieveTestsController.java
index ffd74086c7e9d45b8c8cc0928bd9464c4800252b..9f8ff3853d1ed1c8e7fd7efb694a3ac7514fc63c 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21RetrieveTestsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21RetrieveTestsController.java
@@ -26,6 +26,7 @@ import java.util.List;
 import java.util.Set;
 
 import org.olat.basesecurity.GroupRoles;
+import org.olat.core.commons.persistence.DB;
 import org.olat.core.gui.UserRequest;
 import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
@@ -73,6 +74,8 @@ public class QTI21RetrieveTestsController extends FormBasicController {
 	private List<Identity> identities;
 	private List<AssessmentTestSession> sessions;
 	
+	@Autowired
+	private DB dbInstance;
 	@Autowired
 	private UserManager userManager;
 	@Autowired
@@ -149,7 +152,7 @@ public class QTI21RetrieveTestsController extends FormBasicController {
 		}
 		
 		String msg;
-		if(sessionsToRetrieve.size() == 0) {
+		if(sessionsToRetrieve.isEmpty()) {
 			msg = translate("retrievetest.nothing.todo");
 		} else if(sessionsToRetrieve.size() == 1) {
 			msg = translate("retrievetest.confirm.text", new String[]{ fullnames.toString() });
@@ -193,6 +196,7 @@ public class QTI21RetrieveTestsController extends FormBasicController {
 					.createAndInitUserCourseEnvironment(session.getIdentity(), courseEnv);
 			courseNode.pullAssessmentTestSession(session, assessedUserCourseEnv, getIdentity(), Role.coach);
 		}
+		dbInstance.commitAndCloseSession();
 	}
 	
 	private DigitalSignatureOptions getSignatureOptions(AssessmentTestSession session) {
diff --git a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java
index c58fb62716f9804382547238d89b629ed8bb1e06..4b29a9350d117c41e5f7177d814afa5ee4995d04 100644
--- a/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/editor/interactions/HotspotEditorController.java
@@ -375,9 +375,7 @@ public class HotspotEditorController extends FormBasicController {
 			updateHotspots(ureq);
 			updateHotspotsPosition(backgroundSize);
 		} else if(correctHotspotsEl == source) {
-			MultipleSelectionElement correctEl = (MultipleSelectionElement)source;
-			Collection<String> correctResponseIds = correctEl.getSelectedKeys();
-			doCorrectAnswers(correctResponseIds);
+			doCorrectAnswers(correctHotspotsEl.getSelectedKeys());
 			flc.setDirty(true);
 		} else if(layoutEl == source) {
 			updateLayoutCssClass();
@@ -439,6 +437,7 @@ public class HotspotEditorController extends FormBasicController {
 	
 	private void doCorrectAnswers(Collection<String> correctResponseIds) {
 		List<HotspotChoice> choices = itemBuilder.getHotspotChoices();
+		itemBuilder.clearCorrectAnswers();
 		for(int i=0; i<choices.size(); i++) {
 			HotspotChoice choice = choices.get(i);
 			boolean correct = correctResponseIds.contains(choice.getIdentifier().toString());
@@ -514,6 +513,8 @@ public class HotspotEditorController extends FormBasicController {
 			objectImg = initialBackgroundImage;
 		}
 		
+		doCorrectAnswers(correctHotspotsEl.getSelectedKeys());
+		
 		if(cardinalityEl.isOneSelected()) {
 			String selectedCardinality = cardinalityEl.getSelectedKey();
 			itemBuilder.setCardinality(Cardinality.valueOf(selectedCardinality));