diff --git a/src/main/java/org/olat/course/nodes/iq/IQRunController.java b/src/main/java/org/olat/course/nodes/iq/IQRunController.java
index 11d4d8df8164f6f218baa562f1471cc9277427c8..1aab9d47a4f3c14439aa72349df7317a21eb3223 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQRunController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQRunController.java
@@ -125,13 +125,13 @@ public class IQRunController extends BasicController implements GenericEventList
 	private StackedPanel mainPanel;
 	
 	private boolean assessmentStopped = true; //default: true
-	private EventBus singleUserEventCenter;
-	private OLATResourceable assessmentEventOres;	
+		
 	private UserSession userSession;
+	private final EventBus singleUserEventCenter;
+	private final OLATResourceable assessmentEventOres = OresHelper.createOLATResourceableType(AssessmentEvent.class);
+	private final OLATResourceable assessmentInstanceOres = OresHelper.createOLATResourceableType(AssessmentInstance.class);
 	
-	private OLATResourceable assessmentInstanceOres;
-	
-	private RepositoryEntry referenceTestEntry; 
+	private final RepositoryEntry referenceTestEntry; 
 	
 	@Autowired
 	private IQManager iqManager;
@@ -159,8 +159,6 @@ public class IQRunController extends BasicController implements GenericEventList
 		this.courseNode = testCourseNode;
 		this.type = AssessmentInstance.QMD_ENTRY_TYPE_ASSESS;
 		this.singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter();
-		this.assessmentEventOres = OresHelper.createOLATResourceableType(AssessmentEvent.class);
-		this.assessmentInstanceOres = OresHelper.createOLATResourceableType(AssessmentInstance.class);
 		this.referenceTestEntry = testEntry;
 		
 		this.userSession = ureq.getUserSession();
@@ -249,6 +247,8 @@ public class IQRunController extends BasicController implements GenericEventList
 		this.userCourseEnv = userCourseEnv;
 		this.courseNode = selftestCourseNode;
 		this.type = AssessmentInstance.QMD_ENTRY_TYPE_SELF;
+		this.referenceTestEntry = selftestCourseNode.getReferencedRepositoryEntry();
+		this.singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter();
 		iqManager = CoreSpringFactory.getImpl(IQManager.class);
 
 		addLoggingResourceable(LoggingResourceable.wrap(courseNode));
@@ -289,7 +289,9 @@ public class IQRunController extends BasicController implements GenericEventList
 		this.secCallback = secCallback;
 		this.userCourseEnv = userCourseEnv;
 		this.courseNode = surveyCourseNode;
+		this.referenceTestEntry = surveyCourseNode.getReferencedRepositoryEntry();
 		this.type = AssessmentInstance.QMD_ENTRY_TYPE_SURVEY;
+		this.singleUserEventCenter = ureq.getUserSession().getSingleUserEventCenter();
 		iqManager = CoreSpringFactory.getImpl(IQManager.class);
 		
 		addLoggingResourceable(LoggingResourceable.wrap(courseNode));
diff --git a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
index db3e5fa74a8f4df5b2581a7ad626d4929e8a8cf1..5a64c64b10322661ad2eb319064cf4189aaf6596 100644
--- a/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
+++ b/src/main/java/org/olat/upgrade/OLATUpgrade_11_0_0.java
@@ -62,6 +62,7 @@ import org.olat.core.util.nodes.INode;
 import org.olat.core.util.resource.OresHelper;
 import org.olat.core.util.tree.TreeVisitor;
 import org.olat.core.util.tree.Visitor;
+import org.olat.course.CorruptedCourseException;
 import org.olat.course.CourseFactory;
 import org.olat.course.CourseModule;
 import org.olat.course.ICourse;
@@ -198,10 +199,14 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 			do {
 				courses = repositoryManager.genericANDQueryWithRolesRestriction(params, counter, 50, true);
 				for(RepositoryEntry course:courses) {
-					convertUserEfficiencyStatemen(course);
+					try {
+						convertUserEfficiencyStatemen(course);
+					} catch (CorruptedCourseException e) {
+						log.error("Corrupted course: " + course.getKey(), e);
+					}
 				}
 				counter += courses.size();
-				log.audit("Efficiency statement data migration processed: " + courses.size() + ", total processed (" + counter + ")");
+				log.audit("Efficiency statement data migration processed: " + courses.size() + ", total courses processed (" + counter + ")");
 				dbInstance.commitAndCloseSession();
 			} while(courses.size() == BATCH_SIZE);
 			uhd.setBooleanDataValue(EFFICIENCY_STATEMENT_DATAS, allOk);
@@ -223,10 +228,14 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 			do {
 				courses = repositoryManager.genericANDQueryWithRolesRestriction(params, counter, 50, true);
 				for(RepositoryEntry course:courses) {
-					allOk &= processCourseAssessmentData(course); 
+					try {
+						allOk &= processCourseAssessmentData(course);
+					} catch (CorruptedCourseException e) {
+						log.error("Corrupted course: " + course.getKey(), e);
+					}
 				}
 				counter += courses.size();
-				log.audit("Assessment data migration processed: " + courses.size() + ", total processed (" + counter + ")");
+				log.audit("Assessment data migration processed: " + courses.size() + ", total courses processed (" + counter + ")");
 				dbInstance.commitAndCloseSession();
 			} while(courses.size() == BATCH_SIZE);
 			uhd.setBooleanDataValue(ASSESSMENT_DATAS, allOk);
@@ -330,7 +339,8 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 			@Override
 			public void visit(INode node) {
 				if(node instanceof AssessableCourseNode) {
-					processNonPropertiesStates(assessableIdentities, (AssessableCourseNode)node, course, courseEntry, nodeAssessmentMap);
+					processNonPropertiesStates(assessableIdentities, (AssessableCourseNode)node, course, courseEntry,
+							nodeAssessmentMap, curentNodeAssessmentMap);
 				}
 			}
 		}, rootNode, true).visitAll();
@@ -367,12 +377,13 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	}
 	
 	private void processNonPropertiesStates(List<Identity> assessableIdentities, AssessableCourseNode cNode,
-			ICourse course, RepositoryEntry courseEntry, Map<AssessmentDataKey,AssessmentEntryImpl> nodeAssessmentMap) {
+			ICourse course, RepositoryEntry courseEntry, Map<AssessmentDataKey,AssessmentEntryImpl> nodeAssessmentMap,
+			Map<AssessmentDataKey,AssessmentEntryImpl> curentNodeAssessmentMap) {
 		
 		if(cNode instanceof IQTESTCourseNode) {
-			processNonPropertiesIQTESTStates(assessableIdentities, (IQTESTCourseNode)cNode, course, courseEntry, nodeAssessmentMap);
+			processNonPropertiesIQTESTStates(assessableIdentities, (IQTESTCourseNode)cNode, course, courseEntry, nodeAssessmentMap, curentNodeAssessmentMap);
 		} else if(cNode instanceof TACourseNode) {
-			processNonPropertiesTAStates(assessableIdentities, (TACourseNode)cNode, course, courseEntry, nodeAssessmentMap);
+			processNonPropertiesTAStates(assessableIdentities, (TACourseNode)cNode, course, courseEntry, nodeAssessmentMap, curentNodeAssessmentMap);
 		}
 	}
 	
@@ -387,10 +398,14 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	 * @param nodeAssessmentMap
 	 */
 	private void processNonPropertiesTAStates(List<Identity> assessableIdentities, TACourseNode tNode,
-			ICourse course, RepositoryEntry courseEntry, Map<AssessmentDataKey,AssessmentEntryImpl> nodeAssessmentMap) {
+			ICourse course, RepositoryEntry courseEntry, Map<AssessmentDataKey,AssessmentEntryImpl> nodeAssessmentMap,
+			Map<AssessmentDataKey,AssessmentEntryImpl> curentNodeAssessmentMap) {
 		
 		for(Identity assessedIdentity:assessableIdentities) {	
 			AssessmentDataKey key = new AssessmentDataKey(assessedIdentity, course.getResourceableId(), tNode.getIdent());
+			if(curentNodeAssessmentMap.containsKey(key)) {
+				continue;
+			}
 			
 			AssessmentEntryImpl nodeAssessment;
 			if(!nodeAssessmentMap.containsKey(key)) {
@@ -422,12 +437,15 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 	 * @param nodeAssessmentMap
 	 */
 	private void processNonPropertiesIQTESTStates(List<Identity> assessableIdentities, IQTESTCourseNode iqNode,
-			ICourse course, RepositoryEntry courseEntry, Map<AssessmentDataKey,AssessmentEntryImpl> nodeAssessmentMap) {
+			ICourse course, RepositoryEntry courseEntry, Map<AssessmentDataKey,AssessmentEntryImpl> nodeAssessmentMap,
+			Map<AssessmentDataKey,AssessmentEntryImpl> curentNodeAssessmentMap) {
 		
 		for(Identity assessedIdentity:assessableIdentities) {
 			if(iqTestPersisterExists(assessedIdentity, iqNode, course)) {
-				
 				AssessmentDataKey key = new AssessmentDataKey(assessedIdentity, course.getResourceableId(), iqNode.getIdent());
+				if(curentNodeAssessmentMap.containsKey(key)) {
+					continue;
+				}
 				
 				AssessmentEntryImpl nodeAssessment;
 				if(nodeAssessmentMap.containsKey(key)) {
@@ -707,31 +725,33 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 		
 
 		CourseNode courseNode = course.getRunStructure().getNode(nodeIdent);
-		if(courseNode.needsReferenceToARepositoryEntry()) {
-			RepositoryEntry referenceEntry = courseNode.getReferencedRepositoryEntry();
-			entry.setReferenceEntry(referenceEntry);
-		}
-
-		if(courseNode instanceof GTACourseNode) {
-			processAssessmentPropertyForGTA(assessedIdentity, entry, (GTACourseNode)courseNode, courseEntry);
-		} else if(courseNode instanceof TACourseNode) {
-			processAssessmentPropertyForTA(assessedIdentity, entry, (TACourseNode)courseNode, course);
-		} else if(courseNode instanceof IQTESTCourseNode) {
-			processAssessmentPropertyForIQTEST(assessedIdentity, entry, (IQTESTCourseNode)courseNode, course);
-		} else if(courseNode instanceof PortfolioCourseNode) {
-			processAssessmentPropertyForPortfolio(assessedIdentity, entry, (PortfolioCourseNode)courseNode, course);
-		} else if(courseNode instanceof MSCourseNode) {
-			entry.setAssessmentStatus(AssessmentEntryStatus.inReview);
-		} else if(courseNode instanceof BasicLTICourseNode) {
-			processAssessmentPropertyForBasicLTI(assessedIdentity, entry, (BasicLTICourseNode)courseNode, course);
-		} else if(courseNode instanceof ScormCourseNode) {
-			String username = assessedIdentity.getName();
-			Map<Date, List<CmiData>> rawDatas = ScormAssessmentManager.getInstance()
-					.visitScoDatasMultiResults(username, course.getCourseEnvironment(), (ScormCourseNode)courseNode);
-			if(rawDatas.size() > 0) {
-				entry.setAssessmentStatus(AssessmentEntryStatus.inProgress);
-			} else {
-				entry.setAssessmentStatus(AssessmentEntryStatus.notStarted);
+		if(courseNode != null) {
+			if(courseNode.needsReferenceToARepositoryEntry()) {
+				RepositoryEntry referenceEntry = courseNode.getReferencedRepositoryEntry();
+				entry.setReferenceEntry(referenceEntry);
+			}
+	
+			if(courseNode instanceof GTACourseNode) {
+				processAssessmentPropertyForGTA(assessedIdentity, entry, (GTACourseNode)courseNode, courseEntry);
+			} else if(courseNode instanceof TACourseNode) {
+				processAssessmentPropertyForTA(assessedIdentity, entry, (TACourseNode)courseNode, course);
+			} else if(courseNode instanceof IQTESTCourseNode) {
+				processAssessmentPropertyForIQTEST(assessedIdentity, entry, (IQTESTCourseNode)courseNode, course);
+			} else if(courseNode instanceof PortfolioCourseNode) {
+				processAssessmentPropertyForPortfolio(assessedIdentity, entry, (PortfolioCourseNode)courseNode, course);
+			} else if(courseNode instanceof MSCourseNode) {
+				entry.setAssessmentStatus(AssessmentEntryStatus.inReview);
+			} else if(courseNode instanceof BasicLTICourseNode) {
+				processAssessmentPropertyForBasicLTI(assessedIdentity, entry, (BasicLTICourseNode)courseNode, course);
+			} else if(courseNode instanceof ScormCourseNode) {
+				String username = assessedIdentity.getName();
+				Map<Date, List<CmiData>> rawDatas = ScormAssessmentManager.getInstance()
+						.visitScoDatasMultiResults(username, course.getCourseEnvironment(), (ScormCourseNode)courseNode);
+				if(rawDatas.size() > 0) {
+					entry.setAssessmentStatus(AssessmentEntryStatus.inProgress);
+				} else {
+					entry.setAssessmentStatus(AssessmentEntryStatus.notStarted);
+				}
 			}
 		}
 		return entry;
@@ -759,14 +779,14 @@ public class OLATUpgrade_11_0_0 extends OLATUpgrade {
 		StringBuilder query = new StringBuilder();
 		query.append("select log from ").append(LoggingObject.class.getName()).append(" log")
 		     .append(" where log.userId=:userId and sourceclass='org.olat.course.run.navigation.NavigationHandler'")
-		     .append(" and parentResType='CourseModule' and parentResIs=:courseId")
+		     .append(" and parentResType='CourseModule' and parentResId=:courseId")
 		     .append(" and targetResId=:targetResId")
 		     .append(" and actionVerb='launch' and actionObject='node'");
 		
 		return dbInstance.getCurrentEntityManager()
-				.createQuery("", LoggingObject.class)
+				.createQuery(query.toString(), LoggingObject.class)
 				.setParameter("userId", user.getKey())
-				.setParameter("courseId", course.getResourceableId())
+				.setParameter("courseId", course.getResourceableId().toString())
 				.setParameter("targetResId", courseNode.getIdent())
 				.getResultList();
 	}