diff --git a/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java b/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java
index 766a3d9b6615b9b0edea819f128c82b540d9e9d2..6bc17a03a19113c0c7cb8ea00ec0f3720fa201fe 100644
--- a/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java
+++ b/src/main/java/org/olat/core/util/openxml/OpenXMLDocumentWriter.java
@@ -156,9 +156,7 @@ public class OpenXMLDocumentWriter {
 			try(FileInputStream in = new FileInputStream(img.getFile())) {
 				ZipEntry wordDocument = new ZipEntry("word/media/" + img.getFilename());
 				out.putNextEntry(wordDocument);
-	
 				IOUtils.copy(in, out);
-				OpenXMLUtils.writeTo(document.getDocument(), out, false);
 				out.closeEntry();
 			} catch(Exception e) {
 				log.error("", e);
diff --git a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
index 11f8d715385963bbb748cbd80b8b098a0cc1a1c1..3e37f7a94a40406b75c57ca7db5d40c34e08cb7b 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
@@ -125,12 +125,11 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	private FormLink resetButton;
 	private FlexiTableElement tableEl;
 	private final TooledStackedPanel stackPanel;
+	private DefaultFlexiColumnModel correctionCol;
 	private QTI21AssessmentTestSessionTableModel tableModel;
 	
 	private RepositoryEntry entry;
-	private RepositoryEntry testEntry;
 	private final String subIdent;
-	private final boolean manualCorrections;
 	private final Identity assessedIdentity;
 	
 	private int count = 0;
@@ -182,11 +181,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 		this.assessedUserCourseEnv = assessedUserCourseEnv;
 		subIdent = courseNode.getIdent();
 		readOnly = coachCourseEnv.isCourseReadOnly();
-		testEntry = courseNode.getReferencedRepositoryEntry();
 		assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
-		String correctionMode = courseNode.getModuleConfiguration().getStringValue(IQEditController.CONFIG_CORRECTION_MODE);
-		manualCorrections = !IQEditController.CORRECTION_GRADING.equals(correctionMode)
-				&& (IQEditController.CORRECTION_MANUAL.equals(correctionMode) || qtiService.needManualCorrection(testEntry));
 		
 		RepositoryEntry courseEntry = assessedUserCourseEnv.getCourseEnvironment().getCourseGroupManager().getCourseEntry();
 		reSecurity = repositoryManager.isAllowed(ureq, courseEntry);
@@ -207,14 +202,12 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 			RepositoryEntry assessableEntry, Identity assessedIdentity) {
 		super(ureq, wControl, "assessment_details");
 		entry = assessableEntry;
-		testEntry = assessableEntry;
 		subIdent = null;
 		readOnly = false;
 		courseNode = null;
 		assessedUserCourseEnv = null;
 		this.stackPanel = stackPanel;
 		this.assessedIdentity = assessedIdentity;
-		manualCorrections = qtiService.needManualCorrection(assessableEntry);
 		reSecurity = repositoryManager.isAllowed(ureq, assessableEntry);
 
 		initForm(ureq);
@@ -241,9 +234,10 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 					new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("results.report"), "open"),
 							new StaticFlexiCellRenderer(translate("pull"), "open"))));
 		}
-		if(manualCorrections) {
-			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(TSCols.correction.i18nHeaderKey(), TSCols.correction.ordinal(), "correction",
-					new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("correction"), "correction"), null)));
+		if(!readOnly) {
+			correctionCol = new DefaultFlexiColumnModel(TSCols.correction.i18nHeaderKey(), TSCols.correction.ordinal(), "correction",
+					new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("correction"), "correction"), null));
+			columnsModel.addFlexiColumnModel(correctionCol);
 		}
 		if(pdfModule.isEnabled()) {
 			DefaultFlexiColumnModel toolsCol = new DefaultFlexiColumnModel(TSCols.tools);
@@ -270,16 +264,33 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	}
 	
 	protected void updateModel() {
+		boolean grading = false;
+		boolean manualCorrections = false;
+		if(courseNode != null) {
+			String correctionMode = courseNode.getModuleConfiguration().getStringValue(IQEditController.CONFIG_CORRECTION_MODE);
+			grading = IQEditController.CORRECTION_GRADING.equals(correctionMode);
+			manualCorrections = !grading && IQEditController.CORRECTION_MANUAL.equals(correctionMode);
+		}
+		
 		List<AssessmentTestSessionStatistics> sessionsStatistics = qtiService.getAssessmentTestSessionsStatistics(entry, subIdent, assessedIdentity);
 		List<QTI21AssessmentTestSessionDetails> infos = new ArrayList<>();
+		final Map<RepositoryEntry,Boolean> manualCorrectionsMap = new HashMap<>();
 		for(AssessmentTestSessionStatistics sessionStatistics:sessionsStatistics) {
+			RepositoryEntry testEntry = sessionStatistics.getTestSession().getTestEntry();
+			if(!grading) {
+				manualCorrections = manualCorrections || manualCorrectionsMap
+						.computeIfAbsent(testEntry, re -> qtiService.needManualCorrection(re))
+						.booleanValue();
+			}
 			infos.add(forgeDetailsRow(sessionStatistics));
 		}
+		correctionCol.setAlwaysVisible(manualCorrections);
+		correctionCol.setDefaultVisible(manualCorrections);
+		tableEl.setColumnModelVisible(correctionCol, manualCorrections);
 		
 		Collections.sort(infos, new AssessmentTestSessionDetailsComparator());
 		tableModel.setObjects(infos);
-		tableEl.reloadData();
-		tableEl.reset();
+		tableEl.reset(true, true, true);
 		
 		if(resetButton != null) {
 			resetButton.setVisible(!sessionsStatistics.isEmpty());
@@ -425,6 +436,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	}
 
 	private void doCorrection(UserRequest ureq, AssessmentTestSession session) {
+		RepositoryEntry testEntry = session.getTestEntry();
 		File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource());
 		ResolvedAssessmentTest resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(unzippedDirRoot, false, false);
 		ManifestBuilder manifestBuilder = ManifestBuilder.read(new File(unzippedDirRoot, "imsmanifest.xml"));
@@ -443,7 +455,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 			listenTo(correctionCtrl);
 			stackPanel.pushController(translate("correction"), correctionCtrl);
 		} catch(Exception e) {
-			logError("Cannot red results", e);
+			logError("Cannot read results", e);
 			showError("error.assessment.test.session");
 		}
 	}
@@ -527,8 +539,8 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	}
 	
 	private DigitalSignatureOptions getSignatureOptions(AssessmentTestSession session) {
-		RepositoryEntry sessionTestEntry = session.getTestEntry();
-		QTI21DeliveryOptions deliveryOptions = qtiService.getDeliveryOptions(sessionTestEntry);
+		RepositoryEntry testEntry = session.getTestEntry();
+		QTI21DeliveryOptions deliveryOptions = qtiService.getDeliveryOptions(testEntry);
 		
 		boolean digitalSignature = deliveryOptions.isDigitalSignature();
 		boolean sendMail = deliveryOptions.isDigitalSignatureMail();
@@ -546,7 +558,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 				 AssessmentEntryOutcomesListener.decorateResourceConfirmation(entry, testEntry, session, options, null, getLocale());
 			} else {
 				CourseEnvironment courseEnv = CourseFactory.loadCourse(entry).getCourseEnvironment();
-				QTI21AssessmentRunController.decorateCourseConfirmation(session, options, courseEnv, courseNode, sessionTestEntry, null, getLocale());
+				QTI21AssessmentRunController.decorateCourseConfirmation(session, options, courseEnv, courseNode, testEntry, null, getLocale());
 			}
 		}
 		return options;