diff --git a/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java b/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java
index aebc107d4a362e7014fa3bee99792cac513d4e4b..f78754cb3ba43a35c0dd4c9b02d991606618e4e9 100644
--- a/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java
+++ b/src/main/java/org/olat/course/nodes/iq/ExtraTimeInfos.java
@@ -31,10 +31,16 @@ public class ExtraTimeInfos implements Comparable<ExtraTimeInfos> {
 
 	private final Integer extraTimeInSeconds;
 	private final Date start;
+	private final Double completion;
 	
-	public ExtraTimeInfos(Integer extraTimeInSeconds, Date start) {
+	public ExtraTimeInfos(Integer extraTimeInSeconds, Date start, Double completion) {
 		this.extraTimeInSeconds = extraTimeInSeconds;
 		this.start = start;
+		this.completion = completion;
+	}
+	
+	public Double getCompletion() {
+		return completion;
 	}
 
 	public Integer getExtraTimeInSeconds() {
diff --git a/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java b/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java
index 9d947d602d9f07b2d43efce4151fd11e71834b04..71f066698a74fa6c2e3d24140bfb7a9e9e1d5cae 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQIdentityListCourseNodeController.java
@@ -254,12 +254,20 @@ public class IQIdentityListCourseNodeController extends IdentityListCourseNodeCo
 	@Override
 	protected void loadModel(UserRequest ureq) {
 		super.loadModel(ureq);
-		
-		if(((IQTESTCourseNode)courseNode).hasQTI21TimeLimit(getReferencedRepositoryEntry())) {
-			Map<Long,ExtraTimeInfos> extraTimeInfos = getExtraTimes();
-			List<AssessedIdentityElementRow> rows = usersTableModel.getObjects();
-			for(AssessedIdentityElementRow row:rows) {
-				row.setDetails(extraTimeInfos.get(row.getIdentityKey()));
+
+		RepositoryEntry testEntry = getReferencedRepositoryEntry();
+		boolean timeLimit = ((IQTESTCourseNode)courseNode).hasQTI21TimeLimit(testEntry);
+		Map<Long,ExtraTimeInfos> extraTimeInfos = getExtraTimes();
+		List<AssessedIdentityElementRow> rows = usersTableModel.getObjects();
+		for(AssessedIdentityElementRow row:rows) {
+			ExtraTimeInfos infos = extraTimeInfos.get(row.getIdentityKey());
+			if(infos != null) {
+				if(timeLimit) {
+					row.setDetails(infos);
+				}
+				if(infos.getCompletion() != null) {
+					row.getCurrentCompletion().setCompletion(infos.getCompletion());
+				}
 			}
 		}
 		
@@ -285,12 +293,19 @@ public class IQIdentityListCourseNodeController extends IdentityListCourseNodeCo
 		for(AssessmentTestSession session:sessions) {
 			Long identityKey = session.getIdentity().getKey();
 			if(currentIdentityKey == null || !currentIdentityKey.equals(identityKey)) {
-				if(session.getFinishTime() == null && session.getExtraTime() != null) {
-					Integer extraTimeInSeconds = session.getExtraTime();
-					Date start = session.getCreationDate();
-					ExtraTimeInfos infos = new ExtraTimeInfos(extraTimeInSeconds, start);
-					identityToExtraTime.put(identityKey, infos);
+				Date start = null;
+				Double completion = null;
+				Integer extraTimeInSeconds = null;
+				if(session.getFinishTime() == null && session.getTerminationTime() == null) {
+					start = session.getCreationDate();
+					extraTimeInSeconds = session.getExtraTime();
+					if(session.getNumOfQuestions() != null && session.getNumOfQuestions().intValue() > 0 && session.getNumOfAnsweredQuestions() != null) {
+						completion = session.getNumOfAnsweredQuestions().doubleValue() / session.getNumOfQuestions().doubleValue();
+					}
 				}
+				
+				ExtraTimeInfos infos = new ExtraTimeInfos(extraTimeInSeconds, start, completion);
+				identityToExtraTime.put(identityKey, infos);
 				currentIdentityKey = identityKey;
 			}
 		}