diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
index 3e84ac85927ad4f27f832bcbe7808abe8bf7e26e..f5fe972cbf7fbfc4cadc191ad4f2d73b37995a1e 100644
--- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
@@ -609,7 +609,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT
 		if(IQEditController.CORRECTION_GRADING.equals(correctionMode)) {
 			AssessmentEntry assessmentEntry = courseAssessmentService.getAssessmentEntry(this, assessedUserCourseEnv);
 			RepositoryEntry testEntry = IQEditController.getIQReference(getModuleConfiguration(), false);
-			CoreSpringFactory.getImpl(GradingService.class).assignGrader(testEntry, assessmentEntry, true);
+			CoreSpringFactory.getImpl(GradingService.class).assignGrader(testEntry, assessmentEntry, session.getFinishTime(), true);
 		}
 	}
 	
diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
index 545c138e6640462242415c98dc31f52b1d68a05e..30cd64ebe7daa0b0286b17d8b01ee456db6e4235 100644
--- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
+++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
@@ -1054,7 +1054,7 @@ public class QTI21AssessmentRunController extends BasicController implements Gen
 			
 			if(IQEditController.CORRECTION_GRADING.equals(correctionMode)) {
 				AssessmentEntry assessmentEntry = courseAssessmentService.getAssessmentEntry(courseNode, userCourseEnv);
-				gradingService.assignGrader(testEntry, assessmentEntry, true);
+				gradingService.assignGrader(testEntry, assessmentEntry, new Date(), true);
 			}
 
 			assessmentNotificationsHandler.markPublisherNews(getIdentity(), userCourseEnv.getCourseEnvironment().getCourseResourceableId());
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 5c5e9474a29b2ca2de8224359d8e0661a4fecbbb..c1f5829473603ae3357552b120858496ca3450ed 100644
--- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionInvalidationController.java
@@ -201,7 +201,6 @@ public class ConfirmAssessmentTestSessionInvalidationController extends FormBasi
 				qtiService.updateAssessmentEntry(promotedSession, updateEntryResults);
 			} else {
 				courseNode.promoteAssessmentTestSession(promotedSession, assessedUserCourseEnv, updateEntryResults, getIdentity(), Role.coach);
-
 			}
 		}
 		
@@ -211,7 +210,7 @@ public class ConfirmAssessmentTestSessionInvalidationController extends FormBasi
 					|| assignmentStatus == GradingAssignmentStatus.inProcess
 					|| assignmentStatus == GradingAssignmentStatus.done) {
 				if(promotedSession != null) {
-					gradingService.reopenAssignment(runningAssignment);
+					gradingService.reopenAssignment(runningAssignment, promotedSession.getFinishTime());
 				} else {
 					gradingService.deactivateAssignment(runningAssignment);
 				}
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 66c26f88e3b5ec395c1c2562837cad7428d8b85d..b70af02e28948567aa8f671018df756cdbefb949 100644
--- a/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/ConfirmAssessmentTestSessionRevalidationController.java
@@ -183,14 +183,14 @@ public class ConfirmAssessmentTestSessionRevalidationController extends FormBasi
 				if(assignmentStatus == GradingAssignmentStatus.assigned
 						|| assignmentStatus == GradingAssignmentStatus.inProcess
 						|| assignmentStatus == GradingAssignmentStatus.done) {
-					gradingService.reopenAssignment(runningAssignment);
+					gradingService.reopenAssignment(runningAssignment, session.getFinishTime());
 				} else if(assignmentStatus == GradingAssignmentStatus.deactivated
 						|| assignmentStatus == GradingAssignmentStatus.unassigned) {
 					dbInstance.commit();// if the assessment was updated before
 					AssessmentEntry assessmentEntry = gradingService
 							.loadFullAssessmentEntry(runningAssignment.getAssessmentEntry());
 					RepositoryEntry referenceEntry = session.getTestEntry();
-					gradingService.assignGrader(referenceEntry, assessmentEntry, true);
+					gradingService.assignGrader(referenceEntry, assessmentEntry, session.getFinishTime(), true);
 				}
 			}
 		}
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 4bc1d1ca486a1d44e82f405cf6e88d76fe4943ae..bfe631325f178e21f4db3feeec12816b4b7fc317 100644
--- a/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/QTI21AssessmentDetailsController.java
@@ -567,7 +567,7 @@ public class QTI21AssessmentDetailsController extends FormBasicController {
 	private void doPullSession(UserRequest ureq, AssessmentTestSession session) {
 		//reload it to prevent lazy loading issues
 		session = qtiService.getAssessmentTestSession(session.getKey());
-		qtiService.pullSession(session, getSignatureOptions(session), getIdentity());
+		session = qtiService.pullSession(session, getSignatureOptions(session), getIdentity());
 		if(courseNode != null) {
 			courseNode.pullAssessmentTestSession(session, assessedUserCourseEnv, getIdentity(), Role.coach);
 		}
diff --git a/src/main/java/org/olat/modules/grading/GradingService.java b/src/main/java/org/olat/modules/grading/GradingService.java
index 2745f3d539257f33262c052c58f938c5bac17717..dba6bcb7bcc95cb4baa3fa11aff871a8edb2d4ee 100644
--- a/src/main/java/org/olat/modules/grading/GradingService.java
+++ b/src/main/java/org/olat/modules/grading/GradingService.java
@@ -149,7 +149,7 @@ public interface GradingService {
 	
 	public List<GradingAssignmentWithInfos> getGradingAssignmentsWithInfos(GradingAssignmentSearchParameters searchParams);
 	
-	public void assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, boolean updateAssessmentDate);
+	public GradingAssignment assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, Date AssessmentDate, boolean updateAssessmentDate);
 	
 
 	public GradingAssignment extendAssignmentDeadline(GradingAssignment assignment, Date newDeadline);
@@ -169,7 +169,7 @@ public interface GradingService {
 	 */
 	public GradingAssignment assignmentDone(GradingAssignment assignment, Long metadatatime, Boolean visibleToUser);
 	
-	public GradingAssignment reopenAssignment(GradingAssignment assignment);
+	public GradingAssignment reopenAssignment(GradingAssignment assignment, Date assessmentDate);
 	
 
 	public void updateDeadline(RepositoryEntry referenceEntry, RepositoryEntryGradingConfiguration configuration);
diff --git a/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java b/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java
index 818da3c2b0ac30bc9fe102692de6af0db142b61c..eea7d33bb3d4e25feb4e640d411c279638fca608 100644
--- a/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java
+++ b/src/main/java/org/olat/modules/grading/manager/GradingServiceImpl.java
@@ -771,14 +771,18 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re
 	}
 
 	@Override
-	public void assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, boolean updateAssessmentDate) {	
+	public GradingAssignment assignGrader(RepositoryEntry referenceEntry, AssessmentEntry assessmentEntry, Date assessmentDate, boolean updateAssessmentDate) {	
+		if(assessmentDate == null) {
+			assessmentDate = new Date();
+		}
+		
 		GradingAssignment assignment = gradingAssignmentDao.getGradingAssignment(referenceEntry, assessmentEntry);
 		if(assignment != null && assignment.getGrader() != null) {
 			if(updateAssessmentDate) {
-				assignment.setAssessmentDate(new Date());
-				gradingAssignmentDao.updateAssignment(assignment);
+				assignment.setAssessmentDate(assessmentDate);
+				assignment = gradingAssignmentDao.updateAssignment(assignment);
 			}
-			return;
+			return assignment;
 		}
 		
 		GraderToIdentity choosedGrader = selectGrader(referenceEntry);
@@ -793,13 +797,13 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re
 		if(assignment == null) {
 			assignment = gradingAssignmentDao.createGradingAssignment(choosedGrader, referenceEntry, assessmentEntry, new Date(), deadLine);
 		} else {
-			assignment.setAssessmentDate(new Date());
+			assignment.setAssessmentDate(assessmentDate);
 			assignment.setDeadline(deadLine);
 			if(choosedGrader == null) {
 				assignment.setAssignmentStatus(GradingAssignmentStatus.unassigned);
 			} else {
 				assignment.setAssignmentStatus(GradingAssignmentStatus.assigned);
-				assignment.setAssignmentDate(new Date());
+				assignment.setAssignmentDate(assessmentDate);
 				assignment.setGrader(choosedGrader);
 			}
 			assignment = gradingAssignmentDao.updateAssignment(assignment);
@@ -811,9 +815,10 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re
 				sendGraderAsssignmentNotification(choosedGrader, referenceEntry, assignment, config);
 			}
 			assignment.setAssignmentNotificationDate(new Date());
-			gradingAssignmentDao.updateAssignment(assignment);
+			assignment = gradingAssignmentDao.updateAssignment(assignment);
 			dbInstance.commit();
 		}
+		return assignment;
 	}
 	
 	protected GraderToIdentity selectGrader(RepositoryEntry referenceEntry) {
@@ -1005,9 +1010,12 @@ public class GradingServiceImpl implements GradingService, UserDataDeletable, Re
 	}
 	
 	@Override
-	public GradingAssignment reopenAssignment(GradingAssignment assignment) {
+	public GradingAssignment reopenAssignment(GradingAssignment assignment, Date assessmentDate) {
 		assignment = gradingAssignmentDao.loadByKey(assignment.getKey());
 		assignment.setAssignmentStatus(GradingAssignmentStatus.assigned);
+		if(assessmentDate != null) {
+			assignment.setAssessmentDate(assessmentDate);
+		}
 		assignment.setClosingDate(null);
 		assignment = gradingAssignmentDao.updateAssignment(assignment);
 		log.info(Tracing.M_AUDIT, "Assignment reopened {}", assignment.getKey());
diff --git a/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java b/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java
index 5f0637f8251b740dc43052f06391068f53f96ef1..9f4cb4c4eafa98f5da253e2dab2b938b862d6265 100644
--- a/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java
+++ b/src/main/java/org/olat/modules/grading/ui/confirmation/ConfirmReopenAssignmentController.java
@@ -81,7 +81,7 @@ public class ConfirmReopenAssignmentController extends FormBasicController {
 
 	@Override
 	protected void formOK(UserRequest ureq) {
-		gradingService.reopenAssignment(assignment);
+		gradingService.reopenAssignment(assignment, null);
 		fireEvent(ureq, Event.DONE_EVENT);
 	}
 
diff --git a/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java b/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java
index 902da445aa5c73de4cc747309ae4343997c7aadf..2353cea886daa39f51ae4619946720f3802de375 100644
--- a/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java
+++ b/src/test/java/org/olat/modules/grading/manager/GradingServiceTest.java
@@ -188,7 +188,7 @@ public class GradingServiceTest extends OlatTestCase {
 		
 		//first assignment
 		for(int i=0; i<numOfAssessmentEntries; i++) {
-			gradingService.assignGrader(entry, assessmentEntries.get(i), true);
+			gradingService.assignGrader(entry, assessmentEntries.get(i), new Date(), true);
 		}
 		
 		List<GradingAssignment> assignmentsGrader1 = gradingAssignmentDao.getGradingAssignments(graderRelation1);
@@ -231,7 +231,7 @@ public class GradingServiceTest extends OlatTestCase {
 		
 		//first assignment
 		for(int i=0; i<numOfAssessmentEntries; i++) {
-			gradingService.assignGrader(entry, assessmentEntries.get(i), true);
+			gradingService.assignGrader(entry, assessmentEntries.get(i), new Date(), true);
 		}
 		
 		List<GradingAssignment> assignmentsGrader1 = gradingAssignmentDao.getGradingAssignments(graderRelation1);
@@ -272,7 +272,7 @@ public class GradingServiceTest extends OlatTestCase {
 		
 		//first assignment
 		for(int i=0; i<numOfAssessmentEntries; i++) {
-			gradingService.assignGrader(entry, assessmentEntries.get(i), true);
+			gradingService.assignGrader(entry, assessmentEntries.get(i), new Date(), true);
 		}
 		
 		List<GradingAssignment> assignmentsGrader1 = gradingAssignmentDao.getGradingAssignments(graderRelation1);
@@ -302,7 +302,7 @@ public class GradingServiceTest extends OlatTestCase {
 		absenceLeaveDao.createAbsenceLeave(grader, addDaysToNow(-12), addDaysToNow(-1), entry.getOlatResource(), null);
 		dbInstance.commitAndCloseSession();
 
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, null, true);
 		dbInstance.commitAndCloseSession();
 		
 		List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation);
@@ -325,7 +325,7 @@ public class GradingServiceTest extends OlatTestCase {
 				OresHelper.createOLATResourceableInstance("Holydays", 28l), null);
 		dbInstance.commitAndCloseSession();
 
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, null, true);
 		dbInstance.commitAndCloseSession();
 		
 		List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation);
@@ -348,7 +348,7 @@ public class GradingServiceTest extends OlatTestCase {
 				entry.getOlatResource(), "1200013");
 		dbInstance.commitAndCloseSession();
 
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, new Date(), true);
 		dbInstance.commitAndCloseSession();
 		
 		List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation);
@@ -371,7 +371,7 @@ public class GradingServiceTest extends OlatTestCase {
 				entry.getOlatResource(), null);
 		dbInstance.commitAndCloseSession();
 
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, new Date(), true);
 		dbInstance.commitAndCloseSession();
 		
 		List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation);
@@ -402,7 +402,7 @@ public class GradingServiceTest extends OlatTestCase {
 				entry.getOlatResource(), null);
 		dbInstance.commitAndCloseSession();
 
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, new Date(), true);
 		dbInstance.commitAndCloseSession();
 		
 		List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation);
@@ -430,7 +430,7 @@ public class GradingServiceTest extends OlatTestCase {
 				entry.getOlatResource(), "1200012");
 		dbInstance.commitAndCloseSession();
 
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, new Date(), true);
 		dbInstance.commitAndCloseSession();
 		
 		List<GradingAssignment> assignmentsGrader = gradingAssignmentDao.getGradingAssignments(graderRelation);
@@ -743,7 +743,7 @@ public class GradingServiceTest extends OlatTestCase {
 		Assert.assertNotNull(graderRelation2);
 		
 		for(AssessmentEntry assessmentEntry:assessmentEntries) {
-			gradingService.assignGrader(entry, assessmentEntry, true);
+			gradingService.assignGrader(entry, assessmentEntry, new Date(), true);
 		}
 		dbInstance.commit();
 
@@ -780,7 +780,7 @@ public class GradingServiceTest extends OlatTestCase {
 		Assert.assertNotNull(graderRelation1);
 		
 		for(AssessmentEntry assessmentEntry:assessmentEntries) {
-			gradingService.assignGrader(entry, assessmentEntry, true);
+			gradingService.assignGrader(entry, assessmentEntry, new Date(), true);
 		}
 		dbInstance.commit();
 
@@ -807,7 +807,7 @@ public class GradingServiceTest extends OlatTestCase {
 		GraderToIdentity graderRelation = gradedToIdentityDao.createRelation(entry, grader);
 		dbInstance.commit();
 		
-		gradingService.assignGrader(entry, assessment, true);
+		gradingService.assignGrader(entry, assessment, new Date(), true);
 		dbInstance.commit();
 		
 		// check assignments