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 b58161a1e77ec6456d2ed2f6a84e1a7b48ee493e..e20103834643436b01288cf6dd962998e76bcfe0 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
@@ -81,6 +81,7 @@ import org.olat.modules.assessment.AssessmentEntry;
 import org.olat.modules.assessment.AssessmentService;
 import org.olat.modules.assessment.AssessmentToolOptions;
 import org.olat.modules.assessment.Role;
+import org.olat.modules.assessment.model.AssessmentEntryStatus;
 import org.olat.modules.assessment.ui.event.CompleteAssessmentTestSessionEvent;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryManager;
@@ -287,7 +288,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 			if(event instanceof CompleteAssessmentTestSessionEvent) {
 				CompleteAssessmentTestSessionEvent catse = (CompleteAssessmentTestSessionEvent)event;
 				if(courseNode != null) {
-					doUpdateCourseNode(correctionCtrl.getAssessmentTestSession(), catse.getAssessmentTest());
+					doUpdateCourseNode(correctionCtrl.getAssessmentTestSession(), catse.getAssessmentTest(), AssessmentEntryStatus.done);
 				} else {
 					doUpdateEntry(correctionCtrl.getAssessmentTestSession());
 				}
@@ -377,7 +378,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 		stackPanel.pushController(translate("correction"), correctionCtrl);
 	}
 	
-	private void doUpdateCourseNode(AssessmentTestSession session, AssessmentTest assessmentTest) {
+	private void doUpdateCourseNode(AssessmentTestSession session, AssessmentTest assessmentTest, AssessmentEntryStatus entryStatus) {
 		Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest);
 		
 		ScoreEvaluation scoreEval = courseNode.getUserScoreEvaluation(assessedUserCourseEnv);
@@ -388,8 +389,9 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 			boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0;
 			passed = Boolean.valueOf(calculated);
 		}
+		AssessmentEntryStatus finalStatus = entryStatus == null ? scoreEval.getAssessmentStatus() : entryStatus;
 		ScoreEvaluation manualScoreEval = new ScoreEvaluation(score, passed,
-				scoreEval.getAssessmentStatus(), null, scoreEval.getFullyAssessed(), 
+				finalStatus, null, scoreEval.getFullyAssessed(), 
 				scoreEval.getCurrentRunCompletion(), scoreEval.getCurrentRunStatus(), session.getKey());
 		courseNode.updateUserScoreEvaluation(manualScoreEval, assessedUserCourseEnv, getIdentity(), false, Role.coach);
 	}
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemController.java
index de4e2eef23cefe651bed0b05e301e00746f18d93..ec5597a015b6bd3ddeeef0abdcb324208fe78aec 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemController.java
@@ -74,6 +74,7 @@ import uk.ac.ed.ph.jqtiplus.state.TestSessionState;
 public class CorrectionIdentityAssessmentItemController extends FormBasicController {
 	
 	private FormLink saveNextQuestionButton;
+	private FormLink saveBackOverviewButton;
 
 	private final String mapperUri;
 	private final URI assessmentObjectUri;
@@ -146,10 +147,12 @@ public class CorrectionIdentityAssessmentItemController extends FormBasicControl
 		uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl());
 		uifactory.addFormSubmitButton("save", formLayout);
 		saveNextQuestionButton = uifactory.addFormLink("save.next", formLayout, Link.BUTTON);
+		saveBackOverviewButton = uifactory.addFormLink("save.back", formLayout, Link.BUTTON);
 	}
 	
 	protected void updateNext(boolean nextEnable) {
-		saveNextQuestionButton.setEnabled(nextEnable);
+		saveNextQuestionButton.setVisible(nextEnable);
+		saveBackOverviewButton.setVisible(!nextEnable);
 	}
 	
 	@Override
@@ -175,6 +178,10 @@ public class CorrectionIdentityAssessmentItemController extends FormBasicControl
 			doSave();
 			fireEvent(ureq, Event.CHANGED_EVENT);
 			fireEvent(ureq, new NextAssessmentItemEvent());
+		} else if(saveBackOverviewButton == source) {
+			doSave();
+			fireEvent(ureq, Event.CHANGED_EVENT);
+			fireEvent(ureq, Event.BACK_EVENT);
 		} else {
 			super.formInnerEvent(ureq, source, event);
 		}
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java
index 597bd9c50514a7a896ec887be1c837dc1f1a741a..5087e5b005b4b547c3e035b7ca6353c77bcd6604 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemListController.java
@@ -44,6 +44,7 @@ import org.olat.core.gui.components.stack.TooledStackedPanel;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.Event;
 import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.generic.closablewrapper.CloseableModalController;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.id.Identity;
 import org.olat.core.id.OLATResourceable;
@@ -97,10 +98,14 @@ import uk.ac.ed.ph.jqtiplus.types.Identifier;
 public class CorrectionIdentityAssessmentItemListController extends FormBasicController {
 	
 	private FormLink saveButton;
+	private FormLink backLink;
+	private FormLink backOverviewButton;
 	private FlexiTableElement tableEl;
 	private final TooledStackedPanel stackPanel;
 	private CorrectionIdentityAssessmentItemTableModel tableModel;
-	
+
+	private CloseableModalController cmc;
+	private ConfirmSaveTestsController confirmSaveTestCtrl;
 	private CorrectionIdentityAssessmentItemNavigationController identityItemCtrl;
 
 	private final String title;
@@ -172,9 +177,11 @@ public class CorrectionIdentityAssessmentItemListController extends FormBasicCon
 		tableEl.setExportEnabled(true);
 		tableEl.setAndLoadPersistedPreferences(ureq, "corr-identity-assessment-item-list");
 		
+		backLink = uifactory.addFormLink("back", formLayout, Link.LINK_BACK);
 		if(saveEnabled) {
-			uifactory.addFormCancelButton("cancel", formLayout, ureq, getWindowControl());
-			saveButton = uifactory.addFormLink("save", formLayout, Link.BUTTON);
+			saveButton = uifactory.addFormLink("save.tests", formLayout, Link.BUTTON);
+		} else {
+			backOverviewButton = uifactory.addFormLink("back.overview", formLayout, Link.BUTTON);
 		}
 	}
 	
@@ -259,9 +266,24 @@ public class CorrectionIdentityAssessmentItemListController extends FormBasicCon
 			} else if(event == Event.CHANGED_EVENT) {
 				fireEvent(ureq, event);
 			}
+		} else if(confirmSaveTestCtrl == source) {
+			if(event == Event.DONE_EVENT) {
+				doSaveTests(ureq);
+			}
+			cmc.deactivate();
+			cleanUp();
+		} else if(cmc == source) {
+			cleanUp();
 		}
 		super.event(ureq, source, event);
 	}
+	
+	private void cleanUp() {
+		removeAsListenerAndDispose(confirmSaveTestCtrl);
+		removeAsListenerAndDispose(cmc);
+		confirmSaveTestCtrl = null;
+		cmc = null;
+	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
@@ -285,14 +307,41 @@ public class CorrectionIdentityAssessmentItemListController extends FormBasicCon
 				}
 			}
 		} else if(saveButton == source) {
-			AssessmentTestSession candidateSession = getAssessmentTestSession();
-			List<AssessmentTestSession> sessions = Collections.singletonList(candidateSession);
-			AssessmentTest assessmentTest = model.getResolvedAssessmentTest().getRootNodeLookup().extractIfSuccessful();
-			fireEvent(ureq, new CompleteAssessmentTestSessionEvent(sessions, assessmentTest, AssessmentEntryStatus.done));
+			doConfirmSaveTests(ureq);
+		} else if(backLink == source || backOverviewButton == source) {
+			fireEvent(ureq, Event.BACK_EVENT);
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
 	
+	
+	private void doConfirmSaveTests(UserRequest ureq) {
+		if(confirmSaveTestCtrl != null) return;
+		
+		int notCorrectedQuestions = 0;
+		List<CorrectionIdentityAssessmentItemRow> rows = tableModel.getObjects();
+		for(CorrectionIdentityAssessmentItemRow row:rows) {
+			if(!row.isCorrected()) {
+				notCorrectedQuestions += 1;
+			}
+		}
+		
+		confirmSaveTestCtrl = new ConfirmSaveTestsController(ureq, getWindowControl(), notCorrectedQuestions > 0);
+		listenTo(confirmSaveTestCtrl);
+		
+		cmc = new CloseableModalController(getWindowControl(), "close", confirmSaveTestCtrl.getInitialComponent(),
+				true, translate("save.tests"));
+		listenTo(cmc);
+		cmc.activate();
+	}
+	
+	private void doSaveTests(UserRequest ureq) {
+		AssessmentTestSession candidateSession = getAssessmentTestSession();
+		List<AssessmentTestSession> sessions = Collections.singletonList(candidateSession);
+		AssessmentTest assessmentTest = model.getResolvedAssessmentTest().getRootNodeLookup().extractIfSuccessful();
+		fireEvent(ureq, new CompleteAssessmentTestSessionEvent(sessions, assessmentTest, AssessmentEntryStatus.done));
+	}
+	
 	private void doSelect(UserRequest ureq, CorrectionIdentityAssessmentItemRow row) {
 		removeAsListenerAndDispose(identityItemCtrl);
 		doUnlock();
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemNavigationController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemNavigationController.java
index b26ffb034785fcc454eefc68970a0ecbe848e0ae..83164aeaecfa37356c403466cca7683d836b6f48 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemNavigationController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityAssessmentItemNavigationController.java
@@ -52,6 +52,7 @@ import uk.ac.ed.ph.jqtiplus.resolution.ResolvedAssessmentTest;
 public class CorrectionIdentityAssessmentItemNavigationController extends BasicController {
 	
 	private final Link backLink;
+	private final Link backOverviewButton;
 	private final Link nextItemLink;
 	private final Link previousItemLink;
 	private final VelocityContainer mainVC;
@@ -74,6 +75,9 @@ public class CorrectionIdentityAssessmentItemNavigationController extends BasicC
 		backLink = LinkFactory.createLinkBack(mainVC, this);
 		backLink.setElementCssClass("o_correction_navigation_back");
 		mainVC.put("back", backLink);
+		backOverviewButton = LinkFactory.createButton("back.overview", mainVC, this);
+		backOverviewButton.setElementCssClass("o_correction_navigation_next");
+		mainVC.put("back.overview", backOverviewButton);
 		
 		previousItemLink = LinkFactory.createButton("previous.item", mainVC, this);
 		previousItemLink.setIconLeftCSS("o_icon o_icon_previous");
@@ -118,10 +122,8 @@ public class CorrectionIdentityAssessmentItemNavigationController extends BasicC
 		if(itemCtrl == source) {
 			if(event instanceof NextAssessmentItemEvent) {
 				doNext(ureq);
-			} else if(event == Event.CHANGED_EVENT) {
-				fireEvent(ureq, Event.CHANGED_EVENT);
-			} else if(event == Event.CANCELLED_EVENT) {
-				fireEvent(ureq, Event.CANCELLED_EVENT);
+			} else if(event == Event.CHANGED_EVENT || event == Event.CANCELLED_EVENT || event == Event.BACK_EVENT) {
+				fireEvent(ureq, event);
 			}
 		}
 		super.event(ureq, source, event);
@@ -129,7 +131,7 @@ public class CorrectionIdentityAssessmentItemNavigationController extends BasicC
 
 	@Override
 	protected void event(UserRequest ureq, Component source, Event event) {
-		if(backLink == source) {
+		if(backLink == source || backOverviewButton == source) {
 			fireEvent(ureq, Event.BACK_EVENT);
 		} else if(previousItemLink == source) {
 			doPrevious(ureq);
@@ -154,8 +156,10 @@ public class CorrectionIdentityAssessmentItemNavigationController extends BasicC
 		previousItemLink.setCustomDisplayText(previousText);
 		previousItemLink.setEnabled(previousEnable);
 		nextItemLink.setCustomDisplayText(nextText);
-		nextItemLink.setEnabled(nextEnable);
+		nextItemLink.setVisible(nextEnable);
+		backOverviewButton.setVisible(!nextEnable);
 		itemCtrl.updateNext(nextEnable);
+		mainVC.setDirty(true);//update the whole navigation bar
 	}
 
 	private void doPrevious(UserRequest ureq) {
@@ -178,7 +182,9 @@ public class CorrectionIdentityAssessmentItemNavigationController extends BasicC
 			AssessmentItemListEntry nextEntry = assessmentEntryList.get(index);
 			fireEvent(ureq, new SelectAssessmentItemEvent(nextEntry));
 		} else {
-			nextItemLink.setEnabled(false);
+			nextItemLink.setVisible(false);
+			backOverviewButton.setVisible(true);
+			mainVC.setDirty(true);//update the whole navigation bar
 		}
 	}
 	
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityListController.java b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityListController.java
index d3e9dd261172f738cf4d6e78e0023d82884f1020..144e77122cbac95d5ada67f8558d7606e0d346ec 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityListController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/CorrectionIdentityListController.java
@@ -367,7 +367,6 @@ public class CorrectionIdentityListController extends FormBasicController {
 		
 		cmc = new CloseableModalController(getWindowControl(), "close", confirmSaveTestCtrl.getInitialComponent(),
 				true, translate("save.tests"));
-		cmc.activate();
 		listenTo(cmc);
 		cmc.activate();
 	}
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 ede8b8599207ec92b0798842acfd306b031cdbd5..6c67f673f6a88cf8da33824905bd1d7fb818e5da 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
@@ -5,5 +5,6 @@
 		$r.render("cancel")
 		$r.render("save")
 		$r.render("save.next")
+		$r.render("save.back")
 	</div>
 </div>
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item_list.html b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item_list.html
index 4d317642c9c12dbc2c5434b5b15b77e413c72214..1a732b8053f5b09ccaf7cbd55add2428ef48f4d3 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item_list.html
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/correction_identity_assessment_item_list.html
@@ -1,12 +1,16 @@
+<div class="clearfix">
+	$r.render("back")
+</div>
+
 <h4><i class="o_icon o_icon-fw o_icon_user"> </i> $r.escapeHtml($title)</h4>
 $r.render("table")
-#if($r.visible("cancel") || $r.visible("save"))
+#if($r.visible("save.tests") || $r.visible("back.overview"))
 <div class="o_button_group">
-	#if($r.visible("cancel"))
-		$r.render("cancel")
+	#if($r.visible("save.tests"))
+		$r.render("save.tests")
 	#end
-	#if($r.visible("save"))
-		$r.render("save")
+	#if($r.visible("back.overview"))
+		$r.render("back.overview")
 	#end
 </div>
 #end
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/corrections_navigation.html b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/corrections_navigation.html
index 135415c1edc6087132254278907c22065de57d40..5448565c3def5ab82a069637f754dc32c8bf437a 100644
--- a/src/main/java/org/olat/ims/qti21/ui/assessment/_content/corrections_navigation.html
+++ b/src/main/java/org/olat/ims/qti21/ui/assessment/_content/corrections_navigation.html
@@ -12,6 +12,7 @@
 		</select>
 	</div>
 	$r.render("next.item")
+	$r.render("back.overview")
 </div>
 $r.render("items")
 
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 92f8d5277f0e32c26c932ce3277246417008ae2b..bf3579a36e2d535d8e74f97c88eb0543c9ff3679 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
@@ -1,5 +1,6 @@
 #Tue Nov 15 16:25:36 CET 2016
 assessed.identity=Benutzer
+back.overview=Zur\u00FCck zur \u00DCbersicht
 number.assessed.identity={0}. Benutzer
 comment=Kommentar
 comment.help=Dieser Kommentar ist sichbar f\u00FCr den Benutzer in der Testzusammenfassung sowie f\u00FCr andere Betreuer.
@@ -21,6 +22,7 @@ not.responded=Die Frage wurde nicht beantwortet
 overview.tests=\u00DCbersicht und abschliessen
 previous.item=Vorherige Frage
 previous.user=Vorheriger Benutzer
+save.back=Speichern und zur \u00DCbersicht
 save.next=Speichern und n\u00E4chste Frage
 save.tests=Als endg\u00FCltiges Resultat speichern
 score=Punkte
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 928c78e7c2d8d5e87c3ea60a91ef4c536ccfe676..45e2507241db0e086f7a6870a3646017fc4f255c 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
@@ -1,5 +1,6 @@
 #Tue Mar 13 18:56:55 CET 2018
 assessed.identity=assessed user
+back.overview=Back to overview
 comment=Comment
 comment.help=Comments are visible to user as to other coaches.
 comment.test=Test comment
@@ -21,6 +22,7 @@ override.score=Override score
 overview.tests=Overview and closing
 previous.item=Previous question
 previous.user=Previous user
+save.back=Save and back to overview
 save.next=Save and next question
 save.tests=Save results as completed
 score=Score