diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
index 616e4144fdb87ec73446300d4b3ac01c4bc6f1de..6a1d40f1589d8b356558566b062c8aaaac3e08f1 100644
--- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
@@ -834,16 +834,22 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe
 		updateUserScoreEvaluation(sceval, assessedUserCourseenv, coachingIdentity, true, by);
 	}
 	
-	public void promoteAssessmentTestSession(AssessmentTestSession testSession, UserCourseEnvironment assessedUserCourseEnv, Identity coachingIdentity, Role by) {
-		AssessmentTest assessmentTest = loadAssessmentTest(testSession.getTestEntry());
-		Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest);
-
-		BigDecimal finalScore = testSession.getFinalScore();
-		Float score = finalScore == null ? null : finalScore.floatValue();
-		Boolean passed = testSession.getPassed();
-		if(testSession.getManualScore() != null && finalScore != null && cutValue != null) {
-			boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0;
-			passed = Boolean.valueOf(calculated);
+	public void promoteAssessmentTestSession(AssessmentTestSession testSession, UserCourseEnvironment assessedUserCourseEnv,
+			boolean updateScoring, Identity coachingIdentity, Role by) {
+		
+		Float score = null;
+		Boolean passed = null;
+		if(updateScoring) {
+			AssessmentTest assessmentTest = loadAssessmentTest(testSession.getTestEntry());
+			Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest);
+	
+			BigDecimal finalScore = testSession.getFinalScore();
+			score = finalScore == null ? null : finalScore.floatValue();
+			passed = testSession.getPassed();
+			if(testSession.getManualScore() != null && finalScore != null && cutValue != null) {
+				boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0;
+				passed = Boolean.valueOf(calculated);
+			}
 		}
 		
 		ScoreEvaluation sceval = new ScoreEvaluation(score, passed, null, null, Boolean.TRUE,
diff --git a/src/main/java/org/olat/ims/qti21/QTI21Service.java b/src/main/java/org/olat/ims/qti21/QTI21Service.java
index e2d4d6b97d2832944b71bcbfc46ada5aed11b2cf..680befaf23b234613885c82e6eaa98865c3107e4 100644
--- a/src/main/java/org/olat/ims/qti21/QTI21Service.java
+++ b/src/main/java/org/olat/ims/qti21/QTI21Service.java
@@ -444,7 +444,7 @@ public interface QTI21Service {
 	 * @param candidateSession The assessment test tession.
 	 * @return The updated assessment entry
 	 */
-	public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession);
+	public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession, boolean updateScoring);
 	
 	/**
 	 * Sign the assessment result. Be careful, the file must not be changed
diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
index d671087fe599999d5caa45a38b654657dd8fbb24..1e7995ec19db7f653082c99df6ce95b75a0258c5 100644
--- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
+++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java
@@ -1218,29 +1218,33 @@ public class QTI21ServiceImpl implements QTI21Service, UserDataDeletable, Initia
 	}
 	
 	@Override
-	public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession) {
+	public AssessmentEntry updateAssessmentEntry(AssessmentTestSession candidateSession, boolean pushScoring) {
 		Identity assessedIdentity = candidateSession.getIdentity();
 		RepositoryEntry testEntry = candidateSession.getTestEntry();
-		
-		File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource());
-		ResolvedAssessmentTest resolvedAssessmentTest = loadAndResolveAssessmentTest(unzippedDirRoot, false, false);
-		AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful();
-		
+
 		AssessmentEntry assessmentEntry = assessmentEntryDao.loadAssessmentEntry(assessedIdentity, testEntry, null, testEntry);
-		BigDecimal finalScore = candidateSession.getFinalScore();
-		assessmentEntry.setScore(finalScore);
 		assessmentEntry.setAssessmentId(candidateSession.getKey());
-
-		Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest);
 		
-		Boolean passed = assessmentEntry.getPassed();
-		if(candidateSession.getManualScore() != null && finalScore != null && cutValue != null) {
-			boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0;
-			passed = Boolean.valueOf(calculated);
-		} else if(candidateSession.getPassed() != null) {
-			passed = candidateSession.getPassed();
+		if(pushScoring) {
+			File unzippedDirRoot = FileResourceManager.getInstance().unzipFileResource(testEntry.getOlatResource());
+			ResolvedAssessmentTest resolvedAssessmentTest = loadAndResolveAssessmentTest(unzippedDirRoot, false, false);
+			AssessmentTest assessmentTest = resolvedAssessmentTest.getRootNodeLookup().extractIfSuccessful();
+			
+			BigDecimal finalScore = candidateSession.getFinalScore();
+			assessmentEntry.setScore(finalScore);
+	
+			Double cutValue = QtiNodesExtractor.extractCutValue(assessmentTest);
+			
+			Boolean passed = assessmentEntry.getPassed();
+			if(candidateSession.getManualScore() != null && finalScore != null && cutValue != null) {
+				boolean calculated = finalScore.compareTo(BigDecimal.valueOf(cutValue.doubleValue())) >= 0;
+				passed = Boolean.valueOf(calculated);
+			} else if(candidateSession.getPassed() != null) {
+				passed = candidateSession.getPassed();
+			}
+			assessmentEntry.setPassed(passed);
 		}
-		assessmentEntry.setPassed(passed);
+		
 		assessmentEntry = assessmentEntryDao.updateAssessmentEntry(assessmentEntry);
 		return assessmentEntry;
 	}
diff --git a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java
index 3df008b319e6a8546fefe989770a84a2d97c526b..a420ed10a5d401eac9dfcbf58f7ab3cc19e667db 100644
--- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java
@@ -156,14 +156,14 @@ public class ConfirmAssessmentTestSessionInvalidationController extends FormBasi
 		session.setCancelled(true);
 		session = qtiService.updateAssessmentTestSession(session);
 		dbInstance.commit();
-		if(updateEntryResults) {
-			AssessmentTestSession promotedSession = getNextLastSession();
-			if(promotedSession != null) {
-				if(courseNode == null) {
-					qtiService.updateAssessmentEntry(promotedSession);
-				} else {
-					courseNode.promoteAssessmentTestSession(promotedSession, assessedUserCourseEnv, getIdentity(), Role.coach);
-				}
+
+		AssessmentTestSession promotedSession = getNextLastSession();
+		// choose to update or not: assessment of the assessment entry, push the score to the assessment entry
+		if(promotedSession != null) {
+			if(courseNode == null) {
+				qtiService.updateAssessmentEntry(promotedSession, updateEntryResults);
+			} else {
+				courseNode.promoteAssessmentTestSession(promotedSession, assessedUserCourseEnv, updateEntryResults, getIdentity(), Role.coach);
 			}
 		}
 		fireEvent(ureq, Event.CHANGED_EVENT);
diff --git a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java
index 863b4a72bdb1bc3ab6ef6c513c1077007a8f6a65..fa2f35a2083a5ccc41b96c14d45d33e0a2b20e2b 100644
--- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java
@@ -75,7 +75,7 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi
 		this.courseNode = courseNode;
 		this.assessedUserCourseEnv = assessedUserCourseEnv;
 		assessedIdentity = assessedUserCourseEnv.getIdentityEnvironment().getIdentity();
-		canUpdateAssessmentEntry = canBeNextLastSession();
+		canUpdateAssessmentEntry = isNextLastSession(session);
 		initForm(ureq);
 	}
 	
@@ -85,7 +85,7 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi
 		this.session = session;
 		this.testEntry = testEntry;
 		this.assessedIdentity = assessedIdentity;
-		canUpdateAssessmentEntry = canBeNextLastSession();
+		canUpdateAssessmentEntry = isNextLastSession(session);
 		initForm(ureq);
 	}
 
@@ -133,17 +133,18 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi
 		session.setCancelled(false);
 		session = qtiService.updateAssessmentTestSession(session);
 		dbInstance.commit();
-		if(updateEntryResults) {
+
+		if(canUpdateAssessmentEntry) {
 			if(courseNode == null) {
-				qtiService.updateAssessmentEntry(session);
+				qtiService.updateAssessmentEntry(session, updateEntryResults);
 			} else {
-				courseNode.promoteAssessmentTestSession(session, assessedUserCourseEnv, getIdentity(), Role.coach);
+				courseNode.promoteAssessmentTestSession(session, assessedUserCourseEnv, updateEntryResults, getIdentity(), Role.coach);
 			}
 		}
 		fireEvent(ureq, Event.CHANGED_EVENT);
 	}
 	
-	private boolean canBeNextLastSession() {
+	private boolean isNextLastSession(AssessmentTestSession testSession) {
 		List<AssessmentTestSession> sessions;
 		if(courseNode == null) {
 			sessions = qtiService.getAssessmentTestSessions(testEntry, null, assessedIdentity, true);
@@ -155,8 +156,8 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi
 			return true;
 		}
 		
-		sessions.add(session);
+		sessions.add(testSession);
 		Collections.sort(sessions, new AssessmentTestSessionComparator(false));
-		return session.equals(sessions.get(0));
+		return testSession.equals(sessions.get(0));
 	}
 }
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 4027ebb0bab484cf79ba2ad312ba76d5e5d0377f..517fef906a1c57d32b52e42caa5a565887421b15 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
@@ -477,7 +477,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	}
 	
 	private void doUpdateEntry(AssessmentTestSession session) {
-		qtiService.updateAssessmentEntry(session);
+		qtiService.updateAssessmentEntry(session, true);
 	}
 	
 	private void doResetData(UserRequest ureq) {