diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
index 2b5b709fc845462aa38b8983f6f58c5eab74f3c6..49e82d9ae1da79513deebef78b992a5d049e19a2 100644
--- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
@@ -140,6 +140,8 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT
 
 	private static final int CURRENT_CONFIG_VERSION = 2;
 
+	private transient RepositoryEntry cachedReferenceRepositoryEntry;
+
 	public IQTESTCourseNode() {
 		this(null);
 	}
@@ -424,12 +426,27 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements QT
 		sd.setActivateableViewIdentifier(pane);
 		status.add(sd);
 	}
+	
+	/**
+	 * @return A cached instance of the reference repository entry. May be not suitable
+	 * 		to insert an assessment entry.
+	 */
+	public RepositoryEntry getCachedReferencedRepositoryEntry() {
+		RepositoryEntry cachedEntry = cachedReferenceRepositoryEntry;
+		if(IQEditController.matchIQReference(cachedEntry, getModuleConfiguration())) {
+			return cachedEntry;
+		}
+		// The method updates the cache
+		return getReferencedRepositoryEntry();
+	}
 
 	@Override
 	public RepositoryEntry getReferencedRepositoryEntry() {
 		// ",false" because we do not want to be strict, but just indicate whether
 		// the reference still exists or not
-		return IQEditController.getIQReference(getModuleConfiguration(), false);
+		RepositoryEntry entry = IQEditController.getIQReference(getModuleConfiguration(), false);
+		cachedReferenceRepositoryEntry = entry;
+		return entry;
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/iq/IQEditController.java b/src/main/java/org/olat/course/nodes/iq/IQEditController.java
index 5ccffae1ab861376fe2d6b877b64a839dd6ede2e..f8377a910fc7330f5eb4b966731f7c94eb039959 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQEditController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQEditController.java
@@ -380,6 +380,11 @@ public class IQEditController extends ActivateableTabbableDefaultController impl
 		moduleConfiguration.set(CONFIG_KEY_REPOSITORY_SOFTKEY, re.getSoftkey());
 	}
 	
+	public static boolean matchIQReference(RepositoryEntry re, ModuleConfiguration moduleConfiguration) {
+		String repoSoftkey = (String)moduleConfiguration.get(CONFIG_KEY_REPOSITORY_SOFTKEY);
+		return repoSoftkey != null && re != null && repoSoftkey.equals(re.getSoftkey());
+	}
+	
 	/**
 	 * Remove the reference to the repository entry.
 	 * 
diff --git a/src/main/java/org/olat/course/nodes/iq/IQTESTAssessmentConfig.java b/src/main/java/org/olat/course/nodes/iq/IQTESTAssessmentConfig.java
index 620b487e457d42760ba9fdfc1069a445d66918d4..001840a25e0cd60aa70f167e7e45aae53da02a40 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQTESTAssessmentConfig.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQTESTAssessmentConfig.java
@@ -78,7 +78,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
 				|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
 			maxScore = (Float) config.get(IQEditController.CONFIG_KEY_MAXSCORE);
 		} else {
-			RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
+			RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
 			if (testEntry != null) {
 				if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
 					AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
@@ -107,7 +107,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
 				|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
 			minScore = (Float) config.get(IQEditController.CONFIG_KEY_MINSCORE);
 		} else {
-			RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
+			RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
 			if (testEntry != null) {
 				if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
 					AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
@@ -135,7 +135,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
 				|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
 			mode = Mode.setByNode;
 		} else {
-			RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
+			RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
 			if (testEntry != null) {
 				if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
 					AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);
@@ -168,7 +168,7 @@ public class IQTESTAssessmentConfig implements AssessmentConfig {
 				|| IQEditController.CONFIG_VALUE_QTI1.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI))) {
 			cutValue = (Float) config.get(IQEditController.CONFIG_KEY_CUTVALUE);
 		} else {
-			RepositoryEntry testEntry = courseNode.getReferencedRepositoryEntry();
+			RepositoryEntry testEntry = courseNode.getCachedReferencedRepositoryEntry();
 			if (testEntry != null) {
 				if(QTIResourceTypeModule.isQtiWorks(testEntry.getOlatResource())) {
 					AssessmentTest assessmentTest = courseNode.loadAssessmentTest(testEntry);