diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
index f9f420dd5503060c278c1a26d281c4c7b78b9a73..a296be6242d9d7535ce13c92fb4ebc84cf7e0ec4 100644
--- a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
+++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
@@ -379,6 +379,9 @@ public class VelocityRenderDecorator implements Closeable {
 		return sb;
 	}
 
+	public String mathJax(String targetDomId) {
+		return Formatter.elementLatexFormattingScript(targetDomId);
+	}
 	
 	/**
 	 * e.g. "/olat/"
diff --git a/src/main/java/org/olat/ims/qti21/ui/_content/assessment_results.html b/src/main/java/org/olat/ims/qti21/ui/_content/assessment_results.html
index bb9236d7a007ec4e89a788c394505baad892aaae..4c48b7f8c29cab81e267d20e0ec6c510095f5369 100644
--- a/src/main/java/org/olat/ims/qti21/ui/_content/assessment_results.html
+++ b/src/main/java/org/olat/ims/qti21/ui/_content/assessment_results.html
@@ -1,4 +1,4 @@
-<div class="o_assessment_test_results">
+<div id="o_assessment_test_results_$r.getCId()" class="o_assessment_test_results">
 <a id="o_result_overview" title="$r.translateInAttribute("head.assessment.details")"></a>
 
 <div class="o_header_with_buttons o_qti_assessment_title">
@@ -547,4 +547,6 @@
 /* ]]> */
 </script>
 #end
-</div> ## END of o_assessment_test_results
\ No newline at end of file
+</div> ## END of o_assessment_test_results
+$r.mathJax("o_assessment_test_results_${r.getCId()}")
+
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityInteractionsController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityInteractionsController.java
index d18d46ce6a272fe3d60326c6a270eb2c0e551dc5..b520f60f58da6a5b318ef3f4219f702936e34e9d 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityInteractionsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityInteractionsController.java
@@ -80,6 +80,8 @@ import uk.ac.ed.ph.jqtiplus.state.TestPlanNode;
 import uk.ac.ed.ph.jqtiplus.state.TestPlanNodeKey;
 import uk.ac.ed.ph.jqtiplus.state.TestSessionState;
 import uk.ac.ed.ph.jqtiplus.types.Identifier;
+import uk.ac.ed.ph.jqtiplus.types.ResponseData;
+import uk.ac.ed.ph.jqtiplus.types.StringResponseData;
 import uk.ac.ed.ph.jqtiplus.xmlutils.locators.ResourceLocator;
 
 /**
@@ -170,6 +172,7 @@ public class CorrectionIdentityInteractionsController extends FormBasicControlle
 		
 		viewSolutionButton = uifactory.addFormLink("view.solution", formLayout);
 		viewSolutionButton.setIconLeftCSS("o_icon o_icon_open_togglebox");
+		viewSolutionButton.setVisible(hasSolution());
 		
 		solutionItem = initFormExtendedTextInteraction(testPlanNodeKey, testSessionState, testSession, formLayout);	
 		solutionItem.setVisible(false);
@@ -273,6 +276,7 @@ public class CorrectionIdentityInteractionsController extends FormBasicControlle
 		if(formLayout instanceof FormLayoutContainer) {
 			FormLayoutContainer layoutCont = (FormLayoutContainer)formLayout;
 			layoutCont.contextPut("interactionWrapper", wrapper);
+			layoutCont.contextPut("autoSaved", Boolean.valueOf(isAutoSaved(testPlanNodeKey, testSessionState)));
 		}
 	}
 	
@@ -310,6 +314,49 @@ public class CorrectionIdentityInteractionsController extends FormBasicControlle
 		return feedbackItem;
 	}
 	
+	private boolean isAutoSaved(TestPlanNodeKey testPlanNodeKey, TestSessionState testSessionState) {
+		for(Interaction interaction:assessmentItem.getItemBody().findInteractions()) {
+			if(!(interaction instanceof ExtendedTextInteraction)) {
+				return false;
+			}
+		}
+		
+		ItemSessionState sessionState = testSessionState.getItemSessionStates().get(testPlanNodeKey);
+		if(sessionState == null) {
+			return false;
+		}
+		Map<Identifier, ResponseData> raws = sessionState.getRawResponseDataMap();
+		if(raws == null || raws.isEmpty()) {
+			return false;
+		}
+		
+		for(ResponseData data:raws.values()) {
+			if(data instanceof StringResponseData) {
+				StringResponseData stringData = (StringResponseData)data;
+				if(stringData.getResponseData() != null) {
+					for(String string:stringData.getResponseData()) {
+						if(StringHelper.containsNonWhitespace(string)) {
+							return true;
+						}
+					}
+				}
+			}
+		}
+		
+		return false;
+	}
+	
+	private boolean hasSolution() {
+		for(Interaction interaction:assessmentItem.getItemBody().findInteractions()) {
+			if(!(interaction instanceof ExtendedTextInteraction)
+					&& !(interaction instanceof DrawingInteraction)
+					&& !(interaction instanceof UploadInteraction)) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
 	private boolean hasCorrectSolution() {
 		for(ModalFeedback modalFeedback:assessmentItem.getModalFeedbacks()) {
 			Identifier outcomeIdentifier = modalFeedback.getOutcomeIdentifier();
@@ -473,7 +520,7 @@ public class CorrectionIdentityInteractionsController extends FormBasicControlle
 			solutionItem.setVisible(false);
 		} else {
 			viewSolutionButton.setIconLeftCSS("o_icon o_icon_close_togglebox");
-			solutionItem.setVisible(true);
+			solutionItem.setVisible(hasSolution());
 		}
 	}
 	
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item.html b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item.html
index 6c67f673f6a88cf8da33824905bd1d7fb818e5da..f7b1090bb5a271dd3c561026918686f3a648d188 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item.html
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item.html
@@ -1,4 +1,4 @@
-<div class="o_assessmentitem_wrapper clearfix">
+<div id="o_assessmentitem_$r.getCId()" class="o_assessmentitem_wrapper clearfix">
 	<h4 class="itemTitle"><i class="o_icon $labelCssClass"> </i> $r.escapeHtml($label)</h4>
 	$r.render("interactions")
 	<div class="o_button_group o_assessmentitem_scoring_buttons">
@@ -7,4 +7,5 @@
 		$r.render("save.next")
 		$r.render("save.back")
 	</div>
-</div>
\ No newline at end of file
+</div>
+$r.mathJax("o_assessmentitem_${r.getCId()}")
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_interactions.html b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_interactions.html
index 5d2a0d398e9ebee8c0689d9f3d4cab8ad0112c37..29eb57ed7ab7e6a8504489cd7adac2d4589904e7 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_interactions.html
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_interactions.html
@@ -1,5 +1,6 @@
 #if(!${interactionWrapper.isItemSessionStateFinal()})
-	<div class="o_assessment_item_not_final o_warning">$r.translate("warning.not.submitted")</div>
+	<div class="o_assessment_item_not_final o_warning">$r.translate("warning.not.submitted")
+	 #if($r.isTrue($autoSaved))<br>$r.translate("warning.not.submitted.autosave")#end</div>
 #end
 <div class="o_qti_item_body clearfix">$r.render("answer")</div>
 
@@ -10,9 +11,13 @@
 	<div class="o_assessmentitem_controls"> </div>
 	#end
 #elseif($r.visible("view.correct.solution"))
-	<div class="o_assessmentitem_control_view_solution">$r.render("view.solution")</div>
-#else
+	#if($r.visible("view.solution"))
+		<div class="o_assessmentitem_control_view_solution">$r.render("view.solution")</div>
+	#end
+#elseif($r.visible("view.solution"))
 	<div class="o_assessmentitem_controls">$r.render("view.solution")</div>
+#else
+	<div class="o_assessmentitem_controls"> </div>
 #end
 
 #if($r.visible("view.correct.solution"))
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties
index 63eeb5b19ff3ab8d92a812eac1435c03e59468a9..1c91f19ef5c589f83ef554be7702fb13dc0c79a6 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_de.properties
@@ -47,6 +47,7 @@ tool.unreview.all=Markierung aufheben
 view.correct.solution=Korrekte L\u00F6sung ansehen
 view.solution=L\u00F6sung ansehen
 warning.not.submitted=Diese Frage wurde vom Benutzer nicht beantwortet
+warning.not.submitted.autosave=<strong>Hinweis:</strong> Die im Antwortfeld erfassten Inhalte wurden automatisch gespeichert.
 warning.no.assessment.item=Es gibt nichts zu korrigieren
 waring.atleast.one=Sie m\u00FCssen mindestens eine Frage w\u00E4hlen.
 warning.assessment.item.locked=Antwort ist bereit von einem anderen Benutzer gesperrt: {0}
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties
index 9eea6feec63bdb47550ba17711a8b1ecb8dec9b4..a9ae630696f757f702eef9e7eb43f20215ad11df 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_i18n/LocalStrings_en.properties
@@ -51,3 +51,4 @@ warning.assessment.item.locked=The answer is currently locked by an other user\:
 warning.confirm.save=$\:confirm.save You have still uncorrected questions.
 warning.no.assessment.item=There is nothing to correct.
 warning.not.submitted=This question has not been answered by the user
+warning.not.submitted.autosave=<strong>Note:</strong> The contents entered in the answer field were automatically saved.