diff --git a/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java b/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java
index 2f4f95745467cf5d3a67c44d06e6ae84efa16b5a..ebc695d42ab947185b1c821f0ffbc6bef44351e1 100644
--- a/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java
+++ b/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java
@@ -226,9 +226,9 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
 		
 			String mapperUri = "../../../test" + testEntry.getKey() + "/";//add test repo key
 			String submissionMapperUri = ".";
-			Controller assessmentResultController = new AssessmentResultController(
-					ureq, mockwControl, identity, false, session,
-					fUnzippedDirRoot, mapperUri, submissionMapperUri, QTI21AssessmentResultsOptions.allOptions(), false, true);
+			String exportUri = "../" + translator.translate("table.user.attempt") + (sessions.indexOf(session)+1);			
+			Controller assessmentResultController = new AssessmentResultController(ureq, mockwControl, identity, false, session,
+					fUnzippedDirRoot, mapperUri, submissionMapperUri, QTI21AssessmentResultsOptions.allOptions(), false, true, exportUri);
 
 			Component component = assessmentResultController.getInitialComponent();
 			String componentHTML = createResultHTML(component); 
@@ -237,6 +237,10 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
 			File resultXML = qtiService.getAssessmentResultFile(session);
 			convertToZipEntry(zout, idPath + assessmentID +".xml", resultXML);	
 			
+			File signatureXML = qtiService.getAssessmentResultSignature(session);
+			if (signatureXML != null) {
+				convertToZipEntry(zout, idPath + "assessmentResultSignature.xml", signatureXML);	
+			}			
 			File submissionDir = qtiService.getSubmissionDirectory(session);
 			String baseDir = idPath + "submissions/";
 			ZipUtil.addDirectoryToZip(submissionDir.toPath(), baseDir, zout);
diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java
index fe3af2bf23f6cada0e841ebe37bc858e44756325..8a784879dbd4be274a13a2072277bf1f6dac0fd9 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java
@@ -128,6 +128,12 @@ public class AssessmentResultController extends FormBasicController {
 	public AssessmentResultController(UserRequest ureq, WindowControl wControl, Identity assessedIdentity, boolean anonym,
 			AssessmentTestSession candidateSession, File fUnzippedDirRoot, String mapperUri, String submissionMapperUri,
 			QTI21AssessmentResultsOptions options, boolean withPrint, boolean withTitle) {
+		this(ureq, wControl, assessedIdentity, anonym, candidateSession, fUnzippedDirRoot, mapperUri, submissionMapperUri, options, withPrint, withTitle, null);
+	}
+	
+	public AssessmentResultController(UserRequest ureq, WindowControl wControl, Identity assessedIdentity, boolean anonym,
+			AssessmentTestSession candidateSession, File fUnzippedDirRoot, String mapperUri, String submissionMapperUri,
+			QTI21AssessmentResultsOptions options, boolean withPrint, boolean withTitle, String exportUri) {
 		super(ureq, wControl, "assessment_results");
 		
 		this.anonym = anonym;
@@ -153,9 +159,13 @@ public class AssessmentResultController extends FormBasicController {
 		resolvedAssessmentTest = qtiService.loadAndResolveAssessmentTest(fUnzippedDirRoot, false, false);
 		
 		File signature = qtiService.getAssessmentResultSignature(candidateSession);
-		if(signature != null) {
-			signatureMapperUri = registerCacheableMapper(null, "QTI21Signature::" + CodeHelper.getForeverUniqueID(),
-					new SignatureMapper(signature));
+		if (signature != null) {
+			if (exportUri != null) {
+				signatureMapperUri = exportUri;
+			} else {
+				signatureMapperUri = registerCacheableMapper(null, "QTI21Signature::" + CodeHelper.getForeverUniqueID(),
+						new SignatureMapper(signature));
+			}
 		}
 		
 		testSessionState = qtiService.loadTestSessionState(candidateSession);