diff --git a/src/main/java/org/olat/course/assessment/AssessmentManager.java b/src/main/java/org/olat/course/assessment/AssessmentManager.java
index 1961a3a3a6f2289b751c4efbfb29daab592a0267..9605ad14c3f4eb4bef1127f495eb1e0db333642e 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentManager.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentManager.java
@@ -194,7 +194,7 @@ public interface AssessmentManager {
 	public Boolean getNodeFullyAssessed(CourseNode courseNode, Identity identity);
 	
 
-	public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, String referenceSoftKey);
+	public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity);
 	
 	public AssessmentEntry createAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, ScoreEvaluation scoreEvaluation);
 	
diff --git a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
index b65a7e1d5201f6f3bd9fbc3532dd72dfd149b560..28d14c6ab48a3f24a660f7086df779b038b02eff 100644
--- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
@@ -84,6 +84,10 @@ public class CourseAssessmentManagerImpl implements AssessmentManager {
 	private AssessmentEntry getOrCreate(Identity assessedIdentity, CourseNode courseNode) {
 		return assessmentService.getOrCreateAssessmentEntry(assessedIdentity, null, cgm.getCourseEntry(), courseNode.getIdent(), courseNode.getReferencedRepositoryEntry());
 	}
+	
+	private AssessmentEntry getOrCreate(Identity assessedIdentity, String subIdent, RepositoryEntry referenceEntry) {
+		return assessmentService.getOrCreateAssessmentEntry(assessedIdentity, null, cgm.getCourseEntry(), subIdent, referenceEntry);
+	}
 
 	@Override
 	public List<AssessmentEntry> getAssessmentEntries(CourseNode courseNode) {
@@ -91,8 +95,8 @@ public class CourseAssessmentManagerImpl implements AssessmentManager {
 	}
 
 	@Override
-	public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, String referenceSoftKey) {
-		return assessmentService.loadAssessmentEntry(assessedIdentity, cgm.getCourseEntry(), courseNode.getIdent(), referenceSoftKey);
+	public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity) {
+		return assessmentService.loadAssessmentEntry(assessedIdentity, cgm.getCourseEntry(), courseNode.getIdent());
 	}
 
 	@Override
@@ -243,8 +247,13 @@ public class CourseAssessmentManagerImpl implements AssessmentManager {
 		Float score = scoreEvaluation.getScore();
 		Boolean passed = scoreEvaluation.getPassed();
 		Long assessmentId = scoreEvaluation.getAssessmentID();
-
-		AssessmentEntry assessmentEntry = getOrCreate(assessedIdentity, courseNode);
+		
+		String subIdent = courseNode.getIdent();
+		RepositoryEntry referenceEntry = courseNode.getReferencedRepositoryEntry();
+		AssessmentEntry assessmentEntry = getOrCreate(assessedIdentity, subIdent, referenceEntry);
+		if(referenceEntry != null && !referenceEntry.equals(assessmentEntry.getReferenceEntry())) {
+			assessmentEntry.setReferenceEntry(referenceEntry);
+		}
 		if(score == null) {
 			assessmentEntry.setScore(null);
 		} else {
diff --git a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java
index aa5fd6a488ac2a1414a4b0c49be1b701c1c08063..e902d0c1074d91793c3e386c8cea06c855df0c29 100644
--- a/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java
+++ b/src/main/java/org/olat/course/nodes/BasicLTICourseNode.java
@@ -333,14 +333,14 @@ public class BasicLTICourseNode extends AbstractAccessableCourseNode implements
 	@Override
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
-		return am.getAssessmentEntry(this, userCourseEnv.getIdentityEnvironment().getIdentity(), null);
+		return am.getAssessmentEntry(this, userCourseEnv.getIdentityEnvironment().getIdentity());
 	}
 
 	@Override
 	public AssessmentEvaluation getUserScoreEvaluation(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		AssessmentEntry entry = am.getAssessmentEntry(this, mySelf, null);
+		AssessmentEntry entry = am.getAssessmentEntry(this, mySelf);
 		return getUserScoreEvaluation(entry) ;
 	}
 
diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
index b766decab563837c257ca3463071181ed7c366d7..86339eecdc4413f0b865476e868c9340a15b3834 100644
--- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
@@ -189,7 +189,7 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		return am.getAssessmentEntry(this, mySelf, null);
+		return am.getAssessmentEntry(this, mySelf);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/course/nodes/GTACourseNode.java b/src/main/java/org/olat/course/nodes/GTACourseNode.java
index a93bf15b684a9edcb04b48f7f414219b8e1270be..1689d5de0d29bb816bb3eab356bd5167bc0b10c5 100644
--- a/src/main/java/org/olat/course/nodes/GTACourseNode.java
+++ b/src/main/java/org/olat/course/nodes/GTACourseNode.java
@@ -900,7 +900,7 @@ public class GTACourseNode extends AbstractAccessableCourseNode implements Persi
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		return am.getAssessmentEntry(this, mySelf, null);
+		return am.getAssessmentEntry(this, mySelf);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
index 57515d61333fbbcdb68d41ea314cf96c55df63ba..2aacca850d8a5c730cf4fc0734aad370fc21b999 100644
--- a/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/IQTESTCourseNode.java
@@ -366,7 +366,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe
 		// read score from properties save score, passed and attempts information
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		AssessmentEntry entry = am.getAssessmentEntry(this, mySelf, getRepositoryEntrySoftKey());
+		AssessmentEntry entry = am.getAssessmentEntry(this, mySelf);
 		
 		Boolean passed = null;
 		Float score = null;		
@@ -405,7 +405,7 @@ public class IQTESTCourseNode extends AbstractAccessableCourseNode implements Pe
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
 		if(getRepositoryEntrySoftKey() != null) {
-			return am.getAssessmentEntry(this, mySelf, getRepositoryEntrySoftKey());
+			return am.getAssessmentEntry(this, mySelf);
 		}
 		return null;
 	}
diff --git a/src/main/java/org/olat/course/nodes/MSCourseNode.java b/src/main/java/org/olat/course/nodes/MSCourseNode.java
index 47219453d630a7e046fbfff703d020abfff7b4e1..51e4a682b8209f925e2491bdf563e9a23b77410d 100644
--- a/src/main/java/org/olat/course/nodes/MSCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/MSCourseNode.java
@@ -230,7 +230,7 @@ public class MSCourseNode extends AbstractAccessableCourseNode implements Persis
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		return am.getAssessmentEntry(this, mySelf, null);
+		return am.getAssessmentEntry(this, mySelf);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
index 829117a0ca7a8a381df1eca7aa9d5737f1dc6a2a..ea22bde3c4ddca9e9f429ad9fb18d20cd047f2e2 100644
--- a/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/PortfolioCourseNode.java
@@ -392,7 +392,7 @@ public class PortfolioCourseNode extends AbstractAccessableCourseNode implements
 		}
 		
 		if(referenceSoftkey != null) {
-			return am.getAssessmentEntry(this, mySelf, referenceSoftkey);
+			return am.getAssessmentEntry(this, mySelf);
 		}
 		return null;
 	}
diff --git a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
index 9c87b6ce12cceb6d2bce67b5591b092be1f60fa8..15c82e36c271c3242542d60cd46a5c54cd827739 100644
--- a/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ProjectBrokerCourseNode.java
@@ -481,7 +481,7 @@ public class ProjectBrokerCourseNode extends GenericCourseNode implements Persis
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		return am.getAssessmentEntry(this, mySelf, null);
+		return am.getAssessmentEntry(this, mySelf);
 	}
 	
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/ScormCourseNode.java b/src/main/java/org/olat/course/nodes/ScormCourseNode.java
index fbfc1f5568aef4929d0ae10abeb36a5d3652bbec..3f998bcec49d3cc016d96fd928adbda4478a98c0 100644
--- a/src/main/java/org/olat/course/nodes/ScormCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/ScormCourseNode.java
@@ -383,10 +383,7 @@ public class ScormCourseNode extends AbstractAccessableCourseNode implements Per
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		if(getReferencedRepositoryEntrySoftkey() != null) {
-			return am.getAssessmentEntry(this, mySelf, getReferencedRepositoryEntrySoftkey());
-		}
-		return null;
+		return am.getAssessmentEntry(this, mySelf);//we want t
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/TACourseNode.java b/src/main/java/org/olat/course/nodes/TACourseNode.java
index 7774e076a8c981dd06044d1618d5d3a90c314812..f453e4436d599d948a3dfcc3ebf486cae9f45dd0 100644
--- a/src/main/java/org/olat/course/nodes/TACourseNode.java
+++ b/src/main/java/org/olat/course/nodes/TACourseNode.java
@@ -503,7 +503,7 @@ public class TACourseNode extends GenericCourseNode implements PersistentAssessa
 	public AssessmentEntry getUserAssessmentEntry(UserCourseEnvironment userCourseEnv) {
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
-		return am.getAssessmentEntry(this, mySelf, null);
+		return am.getAssessmentEntry(this, mySelf);
 	}
 
 	/**
diff --git a/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java b/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java
index 236c96e62120d87dcbe4c40856f15e620c099bcb..5761c3930bb41dacdec73b978b5e0b0e0ec74b77 100644
--- a/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java
+++ b/src/main/java/org/olat/course/run/preview/PreviewAssessmentManager.java
@@ -68,7 +68,7 @@ final class PreviewAssessmentManager extends BasicManager implements AssessmentM
 	}
 
 	@Override
-	public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity, String referenceSoftKey) {
+	public AssessmentEntry getAssessmentEntry(CourseNode courseNode, Identity assessedIdentity) {
 		return null;
 	}
 
diff --git a/src/main/java/org/olat/modules/assessment/AssessmentEntry.java b/src/main/java/org/olat/modules/assessment/AssessmentEntry.java
index 0b04b0802a94934ba60b75195b0d2998a77a7306..63b3cc86178b8b4e030a46b7c6b49dc2f91a632a 100644
--- a/src/main/java/org/olat/modules/assessment/AssessmentEntry.java
+++ b/src/main/java/org/olat/modules/assessment/AssessmentEntry.java
@@ -92,6 +92,8 @@ public interface AssessmentEntry extends AssessmentEntryLight {
 	 */
 	public RepositoryEntry getReferenceEntry();
 	
+	public void setReferenceEntry(RepositoryEntry entry);
+	
 	/**
 	 * @return The unique identifier for anonymous user (guest)
 	 */
diff --git a/src/main/java/org/olat/modules/assessment/AssessmentService.java b/src/main/java/org/olat/modules/assessment/AssessmentService.java
index b31f70da7e203d4f2e87cdc5ce28ca400744052a..c63a8518dc275e289ec3887017fda49673dd714b 100644
--- a/src/main/java/org/olat/modules/assessment/AssessmentService.java
+++ b/src/main/java/org/olat/modules/assessment/AssessmentService.java
@@ -60,17 +60,14 @@ public interface AssessmentService {
 	public AssessmentEntry getOrCreateAssessmentEntry(Identity assessedIdentity, String anonymousIdentifier,
 			RepositoryEntry entry, String subIdent, RepositoryEntry referenceEntry);
 	
-	public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent);
-	
 	/**
-	 * The search by the reference soft key is set not is null if the value is null.
+	 * 
 	 * @param assessedIdentity
 	 * @param entry
 	 * @param subIdent
-	 * @param referenceSoftKey
 	 * @return
 	 */
-	public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent, String referenceSoftKey);
+	public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent);
 	
 	/**
 	 * 
diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java
index 12796aba0362329ac18044e722e8877f5a2a1f36..27e497a7dd77b7ab945f9b229670c11aa14a98ac 100644
--- a/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java
+++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentEntryDAO.java
@@ -127,26 +127,16 @@ public class AssessmentEntryDAO {
 		return entries.isEmpty() ? null : entries.get(0);
 	}
 	
-	public AssessmentEntry loadAssessmentEntry(IdentityRef assessedIdentity, RepositoryEntryRef entry, String subIdent, String referenceSoftKey) {
+	public AssessmentEntry loadAssessmentEntry(IdentityRef assessedIdentity, RepositoryEntryRef entry, String subIdent) {
 		StringBuilder sb = new StringBuilder();
 		
 		sb.append("select data from assessmententry data");
-		if(referenceSoftKey != null) {
-			sb.append(" inner join data.referenceEntry referenceEntry");
-		}
-		
 		sb.append(" where data.repositoryEntry.key=:repositoryEntryKey and data.identity.key=:identityKey");
 		if(subIdent != null) {
 			sb.append(" and data.subIdent=:subIdent");
 		} else {
 			sb.append(" and data.subIdent is null");
 		}
-		
-		if(referenceSoftKey != null) {
-			sb.append(" and referenceEntry.softkey=:softkey");
-		} else {
-			sb.append(" and data.referenceEntry is null");
-		}
 
 		TypedQuery<AssessmentEntry> query = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), AssessmentEntry.class)
@@ -155,9 +145,6 @@ public class AssessmentEntryDAO {
 		if(subIdent != null) {
 			query.setParameter("subIdent", subIdent);
 		}
-		if(referenceSoftKey != null) {
-			query.setParameter("softkey", referenceSoftKey);
-		}
 		List<AssessmentEntry> entries = query.getResultList();
 		return entries.isEmpty() ? null : entries.get(0);
 	}
diff --git a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java
index 90b7ca288b9313b9e219c11e04ef6042278afc31..c2c654dd74ed85e34e60a366db1e574dce413cda 100644
--- a/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java
+++ b/src/main/java/org/olat/modules/assessment/manager/AssessmentServiceImpl.java
@@ -71,14 +71,6 @@ public class AssessmentServiceImpl implements AssessmentService {
 		return assessmentEntryDao.loadAssessmentEntry(assessedIdentity, null, entry, subIdent);
 	}
 
-	@Override
-	public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntry entry, String subIdent, String referenceSoftKey) {
-		if(assessedIdentity == null || entry == null) return null;
-		return assessmentEntryDao.loadAssessmentEntry(assessedIdentity, entry, subIdent, referenceSoftKey);
-	}
-	
-	
-
 	@Override
 	public AssessmentEntry loadAssessmentEntry(Identity assessedIdentity, RepositoryEntryRef entry, String subIdent, RepositoryEntryRef referenceEntry) {
 		if(assessedIdentity == null || entry == null || referenceEntry == null) return null;
diff --git a/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java b/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java
index d86d6fc190c7febfa6e7b70da880984b925b625d..91d90694fa4176cce31b97cca498e3bc494c2482 100644
--- a/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java
+++ b/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java
@@ -108,7 +108,7 @@ public class AssessmentEntryImpl implements Persistable, ModifiedInfo, CreateInf
 	private String subIdent;
 	
 	@ManyToOne(targetEntity=RepositoryEntry.class,fetch=FetchType.LAZY,optional=true)
-	@JoinColumn(name="fk_reference_entry", nullable=true, insertable=true, updatable=false)
+	@JoinColumn(name="fk_reference_entry", nullable=true, insertable=true, updatable=true)
     private RepositoryEntry referenceEntry;
 
     @Column(name="a_anon_identifier", nullable=true, insertable=true, updatable=false)
diff --git a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java
index 8991294167eb91179ade25c31d292d9534c8545b..a629588bc6c6c0b6958d675019a318807f96720a 100644
--- a/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java
+++ b/src/test/java/org/olat/modules/assessment/manager/AssessmentEntryDAOTest.java
@@ -148,24 +148,6 @@ public class AssessmentEntryDAOTest extends OlatTestCase {
 		Assert.assertEquals(subIdent, reloadedAssessment.getSubIdent());
 	}
 	
-	@Test
-	public void loadAssessmentEntry_withSoftkey() {
-		Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-4");
-		RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
-		String subIdent = UUID.randomUUID().toString();
-		AssessmentEntry nodeAssessment = assessmentEntryDao
-				.createAssessmentEntry(assessedIdentity, null, entry, subIdent, entry);
-		dbInstance.commitAndCloseSession();
-		
-		AssessmentEntry reloadedAssessment = assessmentEntryDao
-				.loadAssessmentEntry(assessedIdentity, entry, subIdent, entry.getSoftkey());
-		Assert.assertEquals(nodeAssessment.getKey(), reloadedAssessment.getKey());
-		Assert.assertEquals(nodeAssessment, reloadedAssessment);
-		Assert.assertEquals(assessedIdentity, reloadedAssessment.getIdentity());
-		Assert.assertEquals(entry, reloadedAssessment.getRepositoryEntry());
-		Assert.assertEquals(subIdent, reloadedAssessment.getSubIdent());
-	}
-	
 	@Test
 	public void loadAssessmentEntry_specificTest() {
 		Identity assessedIdentity = JunitTestHelper.createAndPersistIdentityAsRndUser("as-node-5");