diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
index 0f70bd7cd9da7bab52ceaacd22df5921e26f051d..557d697c9ddc50ea9e211afb612a8e7b105142e6 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/table/FlexiTableElementImpl.java
@@ -828,8 +828,6 @@ public class FlexiTableElementImpl extends FormItemImpl implements FlexiTableEle
 			saveCustomSettings(ureq);
 		} else if(doSelect(ureq)) {
 			//do select
-		} else {
-			System.out.println("");
 		}
 	}
 	
diff --git a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
index c9eed9a88e0b137604b989ae6384c189509d9981..c79c58040ccba43cf2f45cd70c967a3b5ae70b2f 100644
--- a/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
+++ b/src/main/java/org/olat/course/archiver/ScoreAccountingHelper.java
@@ -56,6 +56,7 @@ import org.olat.course.nodes.AssessableCourseNode;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.nodes.STCourseNode;
 import org.olat.course.run.environment.CourseEnvironment;
+import org.olat.course.run.scoring.ScoreAccounting;
 import org.olat.course.run.scoring.ScoreEvaluation;
 import org.olat.course.run.userview.UserCourseEnvironment;
 import org.olat.course.run.userview.UserCourseEnvironmentImpl;
@@ -166,7 +167,8 @@ public class ScoreAccountingHelper {
 			IdentityEnvironment ienv = new IdentityEnvironment();
 			ienv.setIdentity(identity);
 			UserCourseEnvironment uce = new UserCourseEnvironmentImpl(ienv, course.getCourseEnvironment());
-			uce.getScoreAccounting().evaluateAll();
+			ScoreAccounting scoreAccount = uce.getScoreAccounting();
+			scoreAccount.evaluateAll();
 			AssessmentManager am = course.getCourseEnvironment().getAssessmentManager();
 
 			for (AssessableCourseNode acnode:myNodes) {
@@ -176,7 +178,7 @@ public class ScoreAccountingHelper {
 				boolean commentOk = acnode.hasCommentConfigured();
 
 				if (scoreOk || passedOk || commentOk || attemptsOk) {
-					ScoreEvaluation se = uce.getScoreAccounting().getScoreEvaluation(acnode);
+					ScoreEvaluation se = scoreAccount.evalCourseNode(acnode);
 					boolean nodeColumnOk = false;
 					StringBuilder tabs = new StringBuilder();
 
diff --git a/src/main/java/org/olat/course/assessment/AssessmentEditController.java b/src/main/java/org/olat/course/assessment/AssessmentEditController.java
index 3c3db616b9b5c73b555a6ccb47bcd762b6c491c4..db8f2a0b34b97d0349ea9c76090b888532a9e2cb 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentEditController.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentEditController.java
@@ -320,9 +320,6 @@ public class AssessmentEditController extends BasicController {
 			// Update properties in db
 			courseNode.updateUserCoachComment(newCoachComment, userCourseEnvironment);
 		}
-		
-		// Refresh score view
-		userCourseEnvironment.getScoreAccounting().scoreInfoChanged(courseNode, scoreEval);
 	}
 	
 	public void reloadData(UserRequest ureq) {
diff --git a/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java b/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java
index a8c37aa922eb1c0f56b64666c753b4e2a1be7da7..31b8fd744a717bceddcd069608fd8617aacfa738 100644
--- a/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java
+++ b/src/main/java/org/olat/course/assessment/manager/BulkAssessmentTask.java
@@ -387,7 +387,6 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 					
 					// Update score,passed properties in db, and the user's efficiency statement
 					courseNode.updateUserScoreEvaluation(se, uce, coachIdentity, false);
-					uce.getScoreAccounting().scoreInfoChanged(courseNode, se);
 				}
 			}
 			
@@ -399,7 +398,6 @@ public class BulkAssessmentTask implements LongRunnable, TaskAwareRunnable, Sequ
 				// Update score,passed properties in db, and the user's efficiency statement
 				boolean incrementAttempts = false;
 				courseNode.updateUserScoreEvaluation(se, uce, coachIdentity, incrementAttempts);
-				uce.getScoreAccounting().scoreInfoChanged(courseNode, se);
 			}
 			
 			boolean identityHasReturnFile = false;
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 f34bb86232ff957a73ad39bbcad57173ac5a56f5..2ffa0830b59e382eeea118e10feb80eb514fc727 100644
--- a/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
+++ b/src/main/java/org/olat/course/assessment/manager/CourseAssessmentManagerImpl.java
@@ -277,7 +277,7 @@ public class CourseAssessmentManagerImpl implements AssessmentManager {
 					LoggingResourceable.wrapNonOlatResource(StringResourceableType.qtiAttempts, "", String.valueOf(attempts)));	
 		}
 		
-		userCourseEnv.getScoreAccounting().scoreInfoChanged(courseNode, scoreEvaluation);
+		userCourseEnv.getScoreAccounting().evaluateAll();//.scoreInfoChanged(courseNode, scoreEvaluation);
 		// Update users efficiency statement
 		efficiencyStatementManager.updateUserEfficiencyStatement(userCourseEnv);
 
diff --git a/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java b/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java
index 3a54e5f37c99042fc2973bbd8e4ee641f7e0fbfa..03ccba1573b2d594154fdd4f9435e416bfb36433 100644
--- a/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java
+++ b/src/main/java/org/olat/course/assessment/ui/tool/IdentityCertificatesController.java
@@ -49,6 +49,7 @@ import org.olat.course.certificate.CertificatesManager;
 import org.olat.course.certificate.model.CertificateInfos;
 import org.olat.course.certificate.ui.DownloadCertificateCellRenderer;
 import org.olat.course.config.CourseConfig;
+import org.olat.course.nodes.AssessableCourseNode;
 import org.olat.course.nodes.CourseNode;
 import org.olat.course.run.scoring.ScoreAccounting;
 import org.olat.course.run.scoring.ScoreEvaluation;
@@ -208,7 +209,7 @@ public class IdentityCertificatesController extends BasicController implements G
 		UserCourseEnvironment assessedUserCourseEnv = new UserCourseEnvironmentImpl(identityEnv, course.getCourseEnvironment());
 		ScoreAccounting scoreAccounting = assessedUserCourseEnv.getScoreAccounting();
 		scoreAccounting.evaluateAll();
-		ScoreEvaluation scoreEval = scoreAccounting.getScoreEvaluation(rootNode);
+		ScoreEvaluation scoreEval = scoreAccounting.evalCourseNode((AssessableCourseNode)rootNode);
 
 		CertificateTemplate template = null;
 		Long templateKey = course.getCourseConfig().getCertificateTemplate();
diff --git a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
index 70f7c65ae6a3dc8bb4c39469463dde73fcf1b7e3..27cc580066eb088bb237e33f62638a2b734329ab 100644
--- a/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
+++ b/src/main/java/org/olat/course/nodes/CheckListCourseNode.java
@@ -590,8 +590,6 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
 		am.saveScoreEvaluation(this, mySelf, assessedIdentity, sceval, userCourseEnv, false);
-	
-		userCourseEnv.getScoreAccounting().scoreInfoChanged(this, sceval);
 	}
 	
 	private void doUpdateAssessmentBySum(UserCourseEnvironment userCourseEnv, Identity assessedIdentity) {
@@ -623,8 +621,6 @@ public class CheckListCourseNode extends AbstractAccessableCourseNode implements
 		AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
 		Identity mySelf = userCourseEnv.getIdentityEnvironment().getIdentity();
 		am.saveScoreEvaluation(this, mySelf, assessedIdentity, sceval, userCourseEnv, false);
-		
-		userCourseEnv.getScoreAccounting().scoreInfoChanged(this, sceval);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/course/nodes/iq/IQPreviewController.java b/src/main/java/org/olat/course/nodes/iq/IQPreviewController.java
index e6f82f133f68736bafcc645e25b9ba126b4bf8a1..cc285dbc592c2ae88c9cd222d2c92104f111d666 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQPreviewController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQPreviewController.java
@@ -79,8 +79,7 @@ public class IQPreviewController extends BasicController {
 				boolean passed = score >= (cutValue == null ? 0 : cutValue.floatValue());
 				ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), new Boolean(passed));
 				boolean incrementUserAttempts = true;
-				cn.updateUserScoreEvaluation(sceval, userCourseEnv, ureq.getIdentity(), incrementUserAttempts);
-				userCourseEnv.getScoreAccounting().scoreInfoChanged(cn, sceval);				
+				cn.updateUserScoreEvaluation(sceval, userCourseEnv, ureq.getIdentity(), incrementUserAttempts);				
 				getWindowControl().setInfo(translate("preview.points.set"));
 			}
 		}
diff --git a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java
index 630dfa574c084362995a3a6d0384fb48ffde23e4..7f7c2e7360dcdefa8fb59650def9570dc4213106 100644
--- a/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java
+++ b/src/main/java/org/olat/course/run/scoring/ScoreAccounting.java
@@ -219,32 +219,10 @@ public class ScoreAccounting {
 		return passed;
 	}
 
-	/**
-	 * Change the score information for the given course node
-	 * @param acn
-	 * @param se
-	 */
-	public void scoreInfoChanged(AssessableCourseNode acn, ScoreEvaluation se) {
-		evaluateAll();
-	}
-
 	private CourseNode findChildByID(String id) {
 		return userCourseEnvironment.getCourseEnvironment().getRunStructure().getNode(id);
 	}
 
-	/**
-	 * @see org.olat.core.util.tree.Visitor#visit(org.olat.core.util.nodes.INode)
-	 */
-	public void visit(INode node) {
-		CourseNode cn = (CourseNode) node;
-		if (cn instanceof AssessableCourseNode) {
-			AssessableCourseNode acn = (AssessableCourseNode) cn;
-			evalCourseNode(acn);
-			// evalCourseNode will cache all infos
-		}
-		// else: non assessable nodes are not interesting here
-	}
-
 	/**
 	 * @return true if an error occured
 	 */
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 80fc7bf7ce8050377a0870cf555e8525552f3782..09d1afc8954d670c4b06d3deaf68ee39f4652400 100644
--- a/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java
+++ b/src/main/java/org/olat/modules/assessment/model/AssessmentEntryImpl.java
@@ -62,9 +62,6 @@ import org.olat.repository.RepositoryEntry;
 		query="select data from assessmententry data where data.repositoryEntry.key=:repositoryEntryKey and data.identity.key=:identityKey and data.subIdent is null"),
 	@NamedQuery(name="loadAssessmentEntryByRepositoryEntryAndSubIdent",
 		query="select data from assessmententry data where data.repositoryEntry.key=:repositoryEntryKey and data.subIdent=:subIdent")
-	
-	
-	
 })
 public class AssessmentEntryImpl implements Persistable, ModifiedInfo, CreateInfo, AssessmentEntry {
 	
@@ -90,6 +87,8 @@ public class AssessmentEntryImpl implements Persistable, ModifiedInfo, CreateInf
 	private Boolean passed;
 	@Column(name="a_status", nullable=true, insertable=true, updatable=true)
 	private String status;
+	@Column(name="a_details", nullable=true, insertable=true, updatable=true)
+	private String details;
 
 	@Column(name="a_completion", nullable=true, insertable=true, updatable=true)
 	private Double completion;
@@ -175,6 +174,14 @@ public class AssessmentEntryImpl implements Persistable, ModifiedInfo, CreateInf
 		this.passed = passed;
 	}
 	
+	public String getDetails() {
+		return details;
+	}
+
+	public void setDetails(String details) {
+		this.details = details;
+	}
+
 	public String getStatus() {
 		return status;
 	}
diff --git a/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java b/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java
index 29d5de14f99dddc46845bb3e1a9788204547d5e4..6454c4021d080df9116d824e8e29d84bea50a7a9 100644
--- a/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java
+++ b/src/main/java/org/olat/modules/scorm/ScormAPIMapper.java
@@ -200,7 +200,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable {
 				boolean increment = !attemptsIncremented && finish;
 				ScoreEvaluation sceval = new ScoreEvaluation(new Float(0.0f), Boolean.valueOf(passed));
 				scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, increment);
-				userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval);
 				if(increment) {
 					attemptsIncremented = true;
 				}
@@ -208,7 +207,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable {
 				boolean increment = !attemptsIncremented && finish;
 				ScoreEvaluation sceval = scormNode.getUserScoreEvaluation(userCourseEnv);
 				scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, increment);
-				userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval);
 				if(increment) {
 					attemptsIncremented = true;
 				}
@@ -217,7 +215,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable {
 			boolean increment = !attemptsIncremented && finish;
 			ScoreEvaluation sceval = new ScoreEvaluation(new Float(0.0f), Boolean.valueOf(passed));
 			scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, false);
-			userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval);
 			if(increment) {
 				attemptsIncremented = true;
 			}
@@ -258,7 +255,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable {
 				boolean increment = !attemptsIncremented && finish;
 				ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed));
 				scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, increment);
-				userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval);
 				if(increment) {
 					attemptsIncremented = true;
 				}
@@ -266,7 +262,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable {
 				boolean increment = !attemptsIncremented && finish;
 				ScoreEvaluation sceval = scormNode.getUserScoreEvaluation(userCourseEnv);
 				scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, increment);
-				userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval);
 				if(increment) {
 					attemptsIncremented = true;
 				}
@@ -280,7 +275,6 @@ public class ScormAPIMapper implements Mapper, ScormAPICallback, Serializable {
 			boolean increment = !attemptsIncremented && finish;
 			ScoreEvaluation sceval = new ScoreEvaluation(new Float(score), Boolean.valueOf(passed));
 			scormNode.updateUserScoreEvaluation(sceval, userCourseEnv, identity, false);
-			userCourseEnv.getScoreAccounting().scoreInfoChanged(scormNode, sceval);
 			if(increment) {
 				attemptsIncremented = true;
 			}
diff --git a/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java b/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java
index 1324a688b0f74553ee46b5049325e0da634d7ae5..7238da08f942dfb5a37da5494186cc17fa6b7920 100644
--- a/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java
+++ b/src/main/java/org/olat/upgrade/legacy/NewCachePersistingAssessmentManager.java
@@ -876,7 +876,7 @@ public class NewCachePersistingAssessmentManager {
 					attempts = incrementNodeAttemptsProperty(courseNode, assessedIdentity, cpm);
 				}
 				if(courseNode instanceof AssessableCourseNode) {
-				  userCourseEnv.getScoreAccounting().scoreInfoChanged((AssessableCourseNode)courseNode, scoreEvaluation);
+				  userCourseEnv.getScoreAccounting().evaluateAll();
 				  // Update users efficiency statement
 				  EfficiencyStatementManager esm =	CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 				  esm.updateUserEfficiencyStatement(userCourseEnv);
@@ -968,7 +968,7 @@ public class NewCachePersistingAssessmentManager {
 		log.debug("successfully saved node fullyAssessed : " + scoreEvaluation.getFullyAssessed());
 		DBFactory.getInstance().commitAndCloseSession();
 		if (courseNode instanceof AssessableCourseNode) {
-			userCourseEnv.getScoreAccounting().scoreInfoChanged((AssessableCourseNode) courseNode, scoreEvaluation);
+			userCourseEnv.getScoreAccounting().evaluateAll();
 			EfficiencyStatementManager esm = CoreSpringFactory.getImpl(EfficiencyStatementManager.class);
 			esm.updateUserEfficiencyStatement(userCourseEnv);
 		}
diff --git a/src/main/resources/database/mysql/alter_10_x_0_to_11_0_0.sql b/src/main/resources/database/mysql/alter_10_x_0_to_11_0_0.sql
index 267ab3332a1c98ab466d4264f75e72de2b297796..9dfac8b47561ec519def8688a48b3da0db337b43 100644
--- a/src/main/resources/database/mysql/alter_10_x_0_to_11_0_0.sql
+++ b/src/main/resources/database/mysql/alter_10_x_0_to_11_0_0.sql
@@ -6,6 +6,7 @@ create table o_as_entry (
    a_score float(65,30) default null,
    a_passed bit default null,
    a_status varchar(16) default null,
+   a_details varchar(1024) default null,
    a_fully_assessed bit default null,
    a_assessment_id bigint default null,
    a_completion float(65,30),
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 38509c4e70a75c48b41a5652ad4fee75e671e5cc..9775c96795bee27121560b4be6ec7f5f9ad488d8 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -1077,6 +1077,7 @@ create table o_as_entry (
    a_score float(65,30) default null,
    a_passed bit default null,
    a_status varchar(16) default null,
+   a_details varchar(1024) default null,
    a_fully_assessed bit default null,
    a_assessment_id bigint default null,
    a_completion float(65,30),
diff --git a/src/main/resources/database/postgresql/alter_10_x_0_to_11_0_0.sql b/src/main/resources/database/postgresql/alter_10_x_0_to_11_0_0.sql
index 05367cc260e2bf4e44bb8143407f1046f2869936..2857f23f12da3baac0504ba5fa4f04d5cdf9573b 100644
--- a/src/main/resources/database/postgresql/alter_10_x_0_to_11_0_0.sql
+++ b/src/main/resources/database/postgresql/alter_10_x_0_to_11_0_0.sql
@@ -6,6 +6,7 @@ create table o_as_entry (
    a_score decimal default null,
    a_passed bool default null,
    a_status varchar(16) default null,
+   a_details varchar(1024) default null,
    a_fully_assessed bool default null,
    a_assessment_id int8 default null,
    a_completion float(24),
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 1ad970cffcd71470f03a357e029e56a7a17ed3d4..8ade1d1d185964e6702d606dfcc2f44f32b56164 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -1075,6 +1075,7 @@ create table o_as_entry (
    a_score decimal default null,
    a_passed bool default null,
    a_status varchar(16) default null,
+   a_details varchar(1024) default null,
    a_fully_assessed bool default null,
    a_assessment_id int8 default null,
    a_completion float(24),