diff --git a/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java b/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java
index 74a172453483c95c23df96075b65e50b67d03840..0f386fd58445dc8f888c8726a4b3977ef54f27e5 100644
--- a/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java
+++ b/src/main/java/org/olat/course/nodes/basiclti/LTIRunController.java
@@ -347,8 +347,8 @@ public class LTIRunController extends BasicController {
 			}
 			startPage.contextPut("score", eval.getScore());
 			startPage.contextPut("hasScore", Boolean.TRUE);
-			startPage.contextPut("resultsVisible", eval.getUserVisible() == null || eval.getUserVisible().booleanValue());
-			
+			boolean resultsVisible = eval.getUserVisible() == null || eval.getUserVisible().booleanValue();
+			startPage.contextPut("resultsVisible", resultsVisible);
 			mainPanel.setContent(startPage);
 		} else if(display == LTIDisplayOptions.window) {
 			mainPanel.setContent(startPage);
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
index cee293f2d7709be143ce256354e182e467b4bf77..751769b95f888b4131ce41989c52f4f30ec7f9ed 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListRunController.java
@@ -199,12 +199,15 @@ public class CheckListRunController extends FormBasicController implements Contr
 			layoutCont.contextPut("passed", null);
 			layoutCont.contextPut("comment", null);
 		} else {
-			layoutCont.contextPut("resultsVisible", scoreEval.getUserVisibility() == null || scoreEval.getUserVisibility().booleanValue());
+			boolean resultsVisible = scoreEval.getUserVisibility() == null || scoreEval.getUserVisibility().booleanValue();
+			layoutCont.contextPut("resultsVisible", resultsVisible);
 			layoutCont.contextPut("score", AssessmentHelper.getRoundedScore(scoreEval.getScore()));
 			layoutCont.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE));
 			layoutCont.contextPut("passed", scoreEval.getPassed());
-			StringBuilder comment = Formatter.stripTabsAndReturns(scoreEval.getComment());
-			layoutCont.contextPut("comment", StringHelper.xssScan(comment));
+			if(resultsVisible) {
+				StringBuilder comment = Formatter.stripTabsAndReturns(scoreEval.getComment());
+				layoutCont.contextPut("comment", StringHelper.xssScan(comment));
+			}
 		}
 
 		UserNodeAuditManager am = userCourseEnv.getCourseEnvironment().getAuditManager();
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java b/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java
index 5740d699fc584b4d34f750a7afbb40291e64bbff..ce49553f89856e6d5a37310104862e677250450c 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java
+++ b/src/main/java/org/olat/course/nodes/gta/ui/GroupAssessmentController.java
@@ -33,6 +33,7 @@ import org.olat.core.gui.components.form.flexible.FormItemContainer;
 import org.olat.core.gui.components.form.flexible.elements.FlexiTableElement;
 import org.olat.core.gui.components.form.flexible.elements.FormLink;
 import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement;
+import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
@@ -78,7 +79,8 @@ import org.springframework.beans.factory.annotation.Autowired;
  *
  */
 public class GroupAssessmentController extends FormBasicController {
-	
+
+	private static final String[] userVisibilityKeys = new String[]{ "visible", "hidden" };
 	private static final String[] onKeys = new String[] { "on" };
 	private static final String[] onValues = new String[] { "" };
 	
@@ -86,6 +88,7 @@ public class GroupAssessmentController extends FormBasicController {
 	private GroupAssessmentModel model;
 	private FormLink saveAndDoneButton;
 	private TextElement groupScoreEl, groupCommentEl;
+	private SingleSelection userVisibilityEl;
 	private MultipleSelectionElement groupPassedEl, applyToAllEl;
 	
 	private EditCommentController editCommentCtrl;
@@ -169,6 +172,11 @@ public class GroupAssessmentController extends FormBasicController {
 			groupCommentEl.setElementCssClass("o_sel_course_gta_group_comment");
 		}
 		
+		if(withPassed || withScore || withComment) {
+			String[] userVisibilityValues = new String[]{ translate("user.visibility.visible"), translate("user.visibility.hidden") };
+			userVisibilityEl = uifactory.addRadiosHorizontal("user.visibility", "user.visibility", groupGradingCont, userVisibilityKeys, userVisibilityValues);
+		}
+		
 		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
 		if(isAdministrativeUser) {
 			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(Cols.username.i18nKey(), Cols.username.ordinal()));
@@ -247,6 +255,15 @@ public class GroupAssessmentController extends FormBasicController {
 					groupCommentEl.setValue(comment);
 				}
 			}
+			
+			if(userVisibilityEl != null) {
+				userVisibilityEl.setVisible(true);
+				if(modelInfos.getUserVisible() == null || modelInfos.getUserVisible().booleanValue()) {
+					userVisibilityEl.select(userVisibilityKeys[0], true);
+				} else {
+					userVisibilityEl.select(userVisibilityKeys[1], true);
+				}
+			}
 		} else {
 			applyToAllEl.select(onKeys[0], false);
 			table.setVisible(true);
@@ -291,6 +308,7 @@ public class GroupAssessmentController extends FormBasicController {
 		Float scoreRef = null;
 		Boolean passedRef = null;
 		String commentRef = null;
+		Boolean userVisibleRef = null;
 		
 		List<AssessmentRow> rows = new ArrayList<>(identities.size());
 		for(Identity identity:identities) {
@@ -363,13 +381,26 @@ public class GroupAssessmentController extends FormBasicController {
 				}
 			}
 			
+			if(withScore || withPassed || withPassed) {
+				Boolean userVisible = scoreEval.getUserVisible();
+				if(userVisible == null) {
+					userVisible = Boolean.TRUE;
+				}
+				
+				if(count == 0) {
+					userVisibleRef = userVisible;
+				} else if(!same(userVisibleRef, userVisible)) {
+					same = false;
+				}
+			}
+			
 			count++;
 		}
 		
 		model.setObjects(rows);
 		table.reset();
 		
-		return new ModelInfos(same, scoreRef, passedRef, commentRef, duplicateWarning.toString());
+		return new ModelInfos(same, scoreRef, passedRef, commentRef, userVisibleRef, duplicateWarning.toString());
 	}
 	
 	private boolean same(Object reference, Object value) {
@@ -484,81 +515,91 @@ public class GroupAssessmentController extends FormBasicController {
 	
 	private void applyChanges(boolean setAsDone) {
 		List<AssessmentRow> rows = model.getObjects();
-		ICourse course = CourseFactory.loadCourse(courseEnv.getCourseResourceableId());
+		boolean userVisible = userVisibilityEl.isOneSelected() && userVisibilityEl.isSelected(0);
 		if(applyToAllEl.isAtLeastSelected(1)) {
-			Float score = null;
+			applyChangesForTheWholeGroup(rows, setAsDone, userVisible);
+		} else {
+			applyChangesForEvenryMemberGroup(rows, setAsDone, userVisible);
+		}
+	}
+	
+	private void applyChangesForEvenryMemberGroup(List<AssessmentRow> rows, boolean setAsDone, boolean userVisible) {
+		ICourse course = CourseFactory.loadCourse(courseEnv.getCourseResourceableId());
+		
+		for(AssessmentRow row:rows) {
+			UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course);
 			
+			Float score = null;
 			if(withScore) {
-				String scoreValue = groupScoreEl.getValue();
-				if(StringHelper.containsNonWhitespace(scoreValue)) {
-					score = Float.parseFloat(scoreValue);
+				String value = row.getScoreEl().getValue();
+				if(StringHelper.containsNonWhitespace(value)) {
+					score = Float.parseFloat(value);
 				}
 			}
 			
 			Boolean passed = null;
 			if(withPassed) {
 				if(cutValue == null) {
-					passed = groupPassedEl.isSelected(0);
+					passed = row.getPassedEl().isSelected(0);
 				} else if(score != null) {
 					passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE	: Boolean.FALSE;
 				}
 			}
 			
-			for(AssessmentRow row:rows) {
-				UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course);
-				ScoreEvaluation newScoreEval;
-				if(setAsDone) {
-					newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, true, true, null);
-				} else {
-					newScoreEval = new ScoreEvaluation(score, passed);
-				}
-				gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false);
+			ScoreEvaluation newScoreEval;
+			if(setAsDone) {
+				newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, userVisible, true, null);
+			} else {
+				newScoreEval = new ScoreEvaluation(score, passed, null, userVisible, null, null);
 			}
-
+			gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false);
+			
 			if(withComment) {
-				String comment = groupCommentEl.getValue();
+				String comment = row.getComment();
 				if(StringHelper.containsNonWhitespace(comment)) {
-					for(AssessmentRow row:rows) {
-						UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course);
-						gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity());
-					}
+					gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity());
 				}
 			}
-			
-		} else {
-			for(AssessmentRow row:rows) {
-				UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course);
-				
-				Float score = null;
-				if(withScore) {
-					String value = row.getScoreEl().getValue();
-					if(StringHelper.containsNonWhitespace(value)) {
-						score = Float.parseFloat(value);
-					}
-				}
-				
-				Boolean passed = null;
-				if(withPassed) {
-					if(cutValue == null) {
-						passed = row.getPassedEl().isSelected(0);
-					} else if(score != null) {
-						passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE	: Boolean.FALSE;
-					}
-				}
-				
-				ScoreEvaluation newScoreEval;
-				if(setAsDone) {
-					newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, true, true, null);
-				} else {
-					newScoreEval = new ScoreEvaluation(score, passed);
-				}
-				gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false);
-				
-				if(withComment) {
-					String comment = row.getComment();
-					if(StringHelper.containsNonWhitespace(comment)) {
-						gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity());
-					}
+		}
+	}
+	
+	private void applyChangesForTheWholeGroup(List<AssessmentRow> rows, boolean setAsDone, boolean userVisible) {
+		ICourse course = CourseFactory.loadCourse(courseEnv.getCourseResourceableId());
+		
+		Float score = null;
+		if(withScore) {
+			String scoreValue = groupScoreEl.getValue();
+			if(StringHelper.containsNonWhitespace(scoreValue)) {
+				score = Float.parseFloat(scoreValue);
+			}
+		}
+		
+		Boolean passed = null;
+		if(withPassed) {
+			if(cutValue == null) {
+				passed = groupPassedEl.isSelected(0);
+			} else if(score != null) {
+				passed = (score.floatValue() >= cutValue.floatValue()) ? Boolean.TRUE	: Boolean.FALSE;
+			}
+		}
+		
+		for(AssessmentRow row:rows) {
+			UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course);
+			ScoreEvaluation newScoreEval;
+			if(setAsDone) {
+				newScoreEval = new ScoreEvaluation(score, passed, AssessmentEntryStatus.done, userVisible, true, null);
+			} else {
+				newScoreEval = new ScoreEvaluation(score, passed, null, userVisible, null, null);
+			}
+			gtaNode.updateUserScoreEvaluation(newScoreEval, userCourseEnv, getIdentity(), false);
+		}
+
+		if(withComment) {
+			String comment = groupCommentEl.getValue();
+			if(StringHelper.containsNonWhitespace(comment)) {
+				for(AssessmentRow row:rows) {
+					UserCourseEnvironment userCourseEnv = row.getUserCourseEnvironment(course);
+					gtaNode.updateUserUserComment(comment, userCourseEnv, getIdentity());
 				}
 			}
 		}
@@ -589,12 +630,14 @@ public class GroupAssessmentController extends FormBasicController {
 		private final Float score;
 		private final Boolean passed;
 		private final String comment;
+		private final Boolean userVisible;
 		
-		public ModelInfos(boolean same, Float score, Boolean passed, String comment, String duplicates) {
+		public ModelInfos(boolean same, Float score, Boolean passed, String comment, Boolean userVisible, String duplicates) {
 			this.same = same;
 			this.score = score;
 			this.passed = passed;
 			this.comment = comment;
+			this.userVisible = userVisible;
 			this.duplicates = duplicates;
 		}
 
@@ -614,6 +657,10 @@ public class GroupAssessmentController extends FormBasicController {
 			return comment;
 		}
 
+		public Boolean getUserVisible() {
+			return userVisible;
+		}
+
 		public String getDuplicates() {
 			return duplicates;
 		}
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
index cb8b67bd9331336b430663fef4771381e86fe217..383ba0a5cb74888bc4814732c48fdcc58364748c 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_de.properties
@@ -266,6 +266,9 @@ task.type.description=W\u00E4hlen Sie eine oder mehrere Gruppen / Lernbereiche a
 task.type.title=Aufgabentyp
 upload.document=Dokument hochladen
 uploaded.by=hochgeladen von {0}
+user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
+user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
 wait.for.solutions=Die Musterl\u00F6sung wird zum angegebenen Zeitpunkt freigegeben.
 warning.group.pick.task=Dies ist eine Gruppenaufgabe\! Die hier getroffene Auswahl ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher, dass diese Auswahl zuvor innerhalb Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann die Gruppenaufgabe ausw\u00E4hlen.
 warning.group.submit=Dies ist eine Gruppenaufgabe\! Das abgegebene Dokument ist f\u00FCr alle Mitglieder der Gruppe "{0}" g\u00FCltig\! Stellen Sie sicher dass diese L\u00F6sung zuvor innerhalb  Ihrer Gruppe diskutiert wurde\! Nur ein Gruppenmitglied kann eine L\u00F6sung im Namen aller Gruppenmitglieder abgeben.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
index ebfce144aa8ece6f401f03db458523e0e2a537e3..1e743bff3528866535f2b9418a1272761da2af49 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_en.properties
@@ -266,6 +266,9 @@ task.type.description=Choose one or more groups and/or learning areas in order t
 task.type.title=Task type
 upload.document=Upload document
 uploaded.by=uploaded by {0}
+user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
+user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
 wait.for.solutions=The sample solution will be displayed at the date specified above.
 warning.group.pick.task=This is a group task\! The selection made here is valid for all members of the group "{0}"\! Make sure you discussed this selection within the group prior to selecting a task\! Only one member of the group can select the task for the group.
 warning.group.submit=This is a group task\! The submitted document is valid for all members of the group "{0}"\! Make sure you discussed this solution document prior to uploading it here\! Only one member of the group can submit a solution on behalf of all group members.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
index cd1effea009ba2ecc6cfa3544418bbf744fb0690..4eb2d61014d4fd3eaf4f8055cee377931e220cd2 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_fr.properties
@@ -265,6 +265,9 @@ task.type.description=Si le devoir de groupe est activ\u00E9, toutes les \u00E9t
 task.type.title=Type de devoir
 upload.document=T\u00E9l\u00E9charger un document
 uploaded.by=t\u00E9l\u00E9charg\u00E9 par {0}
+user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
+user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
 wait.for.solutions=Les solutions mod\u00E8les seront visible apr\u00E8s l'heure sp\u00E9cifi\u00E9e.
 warning.group.pick.task=Ceci est un devoir de groupe\! La s\u00E9lection effectu\u00E9e ici s'applique \u00E0 tous les participants du groupe "{0}"\! Assurez-vous que votre choix \u00E0 \u00E9t\u00E9 discut\u00E9 au sein de votre groupe\! Seul un participant du groupe pour choisir un devoir.
 warning.group.submit=Ceci est un devoir de groupe\! Les documents soumis le sont pour tous les participants du groupe "{0}"\! Assurez-vous que les solutions ont \u00E9t\u00E9 discut\u00E9es au sein du groupe\! Un seul membre du groupe peut soumettre la solution d\u00E9finitive.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties
index f60a87ca1c40157e109a5f162629d17a8bae34eb..a084b5bcf1400a4c26d95962f7784ad51374753e 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_it.properties
@@ -265,6 +265,9 @@ task.type.description=Scegliere uno o pi\u00F9 gruppi e/o aree di studio per ass
 task.type.title=Tipo di compito
 upload.document=Caricare un documento
 uploaded.by=caricato da {0}
+user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
+user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
 wait.for.solutions=I modelli di soluzione saranno visibili alla data sopra indicata.
 warning.group.pick.task=Questo \u00E8 un compito di gruppo\! Le selezioni effettuate saranno valide per tutti i membri del gruppo "{0}"\! Assicurati di aver discusso questa scelta all'interno del gruppo prima di selezionare il compito\! Solo un membro del gruppo pu\u00F2 selezionare il compito per tutti.
 warning.group.submit=Questo \u00E8 un compito di gruppo\! Il documento consegnato sar\u00E0 valido per tutti i membri del gruppo "{0}"\! Assicurati di aver discusso questa soluzione all'interno del gruppo prima di consegnarla\! Solo un membro del gruppo pu\u00F2 consegnare la soluzione a nome di tutti i membri.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties
index 2ea5099d33899bf0277c9f5224b0d57a9b901e92..6b3776df2b36cdb91370ecf2d21ba2efcc113187 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pl.properties
@@ -261,6 +261,9 @@ task.type.description=Choose one or more groups and/or learning areas in order t
 task.type.title=Typ zadania
 upload.document=Prze\u015Blij dokument
 uploaded.by=przes\u0142any przez {0}
+user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
+user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
 wait.for.solutions=The sample solution will be displayed at the date specified above.
 warning.group.pick.task=This is a group task\! The selection made here is valid for all members of the group "{0}"\! Make sure you discussed this selection within the group prior to selecting a task\! Only one member of the group can select the task for the group.
 warning.group.submit=This is a group task\! The submitted document is valid for all members of the group "{0}"\! Make sure you discussed this solution document prior to uploading it here\! Only one member of the group can submit a solution on behalf of all group members.
diff --git a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
index 2ccd38d08e2d9ae53f7aba6a0ceba8148e8159cb..4440f7c9ccaeeeeb61c01d3088ccd06fac98a6e0 100644
--- a/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/course/nodes/gta/ui/_i18n/LocalStrings_pt_BR.properties
@@ -265,6 +265,9 @@ task.type.description=Quando a tarefa de grupo est\u00E1 habilitada, todas as et
 task.type.title=Tipo de tarefa
 upload.document=Enviar documento
 uploaded.by=enviado por
+user.visibility=$org.olat.course.assessment.ui.tool\:user.visibility
+user.visibility.visible=$org.olat.course.assessment.ui.tool\:user.visibility.visible
+user.visibility.hidden=$org.olat.course.assessment.ui.tool\:user.visibility.hidden
 wait.for.solutions=A solu\u00E7\u00E3o de amostra ser\u00E1 exibida na data especificada acima.
 warning.group.pick.task=Esta \u00E9 uma tarefa de grupo\! A sele\u00E7\u00E3o feita aqui \u00E9 v\u00E1lida para todos os membros do grupo "{0}"\! Certifique-se de que voc\u00EA discutiu essa sele\u00E7\u00E3o dentro do grupo antes de selecionar uma tarefa\! Apenas um membro do grupo pode selecionar a tarefa para o grupo.
 warning.group.submit=Esta \u00E9 uma tarefa de grupo\! O documento apresentado \u00E9 v\u00E1lido para todos os membros do grupo "{0}"\! Certifique-se de que voc\u00EA discutiu a solu\u00E7\u00E3o neste documento antes de envi\u00E1-lo aqui\! Apenas um membro do grupo pode apresentar uma solu\u00E7\u00E3o em nome de todos os membros do grupo.
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 51cc3c50605a23c97422737abb2047042e692421..ba6396759bdb88a691408295b1e0241170aaf20c 100644
--- a/src/main/java/org/olat/course/nodes/iq/IQRunController.java
+++ b/src/main/java/org/olat/course/nodes/iq/IQRunController.java
@@ -616,12 +616,15 @@ public class IQRunController extends BasicController implements GenericEventList
 	        		}
 	    		}
 	    		myContent.contextPut("blockAfterSuccess", blocked);
-	    		myContent.contextPut("resultsVisible", assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue());
+	    		boolean resultsVisible = assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue();
+	    		myContent.contextPut("resultsVisible", resultsVisible);
 	    		myContent.contextPut("score", AssessmentHelper.getRoundedScore(assessmentEntry.getScore()));
 	    		myContent.contextPut("hasPassedValue", (assessmentEntry.getPassed() == null ? Boolean.FALSE : Boolean.TRUE));
 	    		myContent.contextPut("passed", assessmentEntry.getPassed());
-	    		StringBuilder comment = Formatter.stripTabsAndReturns(assessmentEntry.getComment());
-	    		myContent.contextPut("comment", StringHelper.xssScan(comment));
+	    		if(resultsVisible) {
+	    			StringBuilder comment = Formatter.stripTabsAndReturns(assessmentEntry.getComment());
+	    			myContent.contextPut("comment", StringHelper.xssScan(comment));
+	    		}
 	    		myContent.contextPut("attempts", assessmentEntry.getAttempts() == null ? 0 : assessmentEntry.getAttempts());
     		}
     	}
@@ -653,6 +656,7 @@ public class IQRunController extends BasicController implements GenericEventList
 		ScoreEvaluation scoreEval = acn.getUserScoreEvaluation(userCourseEnv);
 		if (scoreEval != null) {
 			myContent.contextPut("hasResults", Boolean.TRUE);
+			myContent.contextPut("resultsVisible", Boolean.TRUE);
 			myContent.contextPut("score", AssessmentHelper.getRoundedScore(scoreEval.getScore()));
 			myContent.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE));
 			myContent.contextPut("passed", scoreEval.getPassed());
diff --git a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
index 1162648ffc0ca8439600e01bed068508d628cb05..b7d49543f8f2601d25b0d7f119dd3cd38b321363 100644
--- a/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
+++ b/src/main/java/org/olat/course/nodes/iq/QTI21AssessmentRunController.java
@@ -249,13 +249,16 @@ public class QTI21AssessmentRunController extends BasicController implements Gen
 				mainVC.contextPut("blockAfterSuccess", blocked);
 				
 				Identity identity = userCourseEnv.getIdentityEnvironment().getIdentity();
-				mainVC.contextPut("resultsVisible", assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue());
+				boolean resultsVisible = assessmentEntry.getUserVisibility() == null || assessmentEntry.getUserVisibility().booleanValue();
+				mainVC.contextPut("resultsVisible", resultsVisible);
 				mainVC.contextPut("score", AssessmentHelper.getRoundedScore(assessmentEntry.getScore()));
 				mainVC.contextPut("hasPassedValue", (passed == null ? Boolean.FALSE : Boolean.TRUE));
 				mainVC.contextPut("passed", passed);
-				StringBuilder comment = Formatter.stripTabsAndReturns(testCourseNode.getUserUserComment(userCourseEnv));
-				if (comment != null && comment.length() > 0) {
-					mainVC.contextPut("comment", StringHelper.xssScan(comment));					
+				if(resultsVisible) {
+					StringBuilder comment = Formatter.stripTabsAndReturns(testCourseNode.getUserUserComment(userCourseEnv));
+					if (comment != null && comment.length() > 0) {
+						mainVC.contextPut("comment", StringHelper.xssScan(comment));					
+					}
 				}
 				Integer attempts = assessmentEntry.getAttempts();
 				mainVC.contextPut("attempts", attempts == null ? new Integer(0) : attempts);
diff --git a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java
index b976f457488b7e00e8c59bea35edc1454a6d1eb4..b7959e281d2f5d9eb80659b9a4997efa7cf98aef 100644
--- a/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java
+++ b/src/main/java/org/olat/course/nodes/ms/MSCourseNodeRunController.java
@@ -182,8 +182,10 @@ public class MSCourseNodeRunController extends BasicController {
 			myContent.contextPut("hasPassedValue", (assessmentEntry.getPassed() == null ? Boolean.FALSE : Boolean.TRUE));
 			myContent.contextPut("passed", assessmentEntry.getPassed());
 			
-			StringBuilder comment = Formatter.stripTabsAndReturns(rawComment);
-			myContent.contextPut("comment", StringHelper.xssScan(comment));
+			if(resultsVisible) {
+				StringBuilder comment = Formatter.stripTabsAndReturns(rawComment);
+				myContent.contextPut("comment", StringHelper.xssScan(comment));
+			}
 		}
 
 		if(showLog) {
diff --git a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java
index 3d4b332c3088812805f3b73da2cbd77a2f033781..f88c67105153c583ed682d8b31cdfb2db21975fa 100644
--- a/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java
+++ b/src/main/java/org/olat/course/nodes/portfolio/PortfolioCourseNodeRunController.java
@@ -305,7 +305,8 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 			scoreAccounting.evaluateAll();			
 			ScoreEvaluation scoreEval = scoreAccounting.evalCourseNode(courseNode);
 
-			assessmentInfosContainer.contextPut("resultsVisible", scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue());
+			boolean resultsVisible = scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue();
+			assessmentInfosContainer.contextPut("resultsVisible", resultsVisible);
 			//score
 			assessmentInfosContainer.contextPut("hasScoreField", new Boolean(courseNode.hasScoreConfigured()));
 			if(courseNode.hasScoreConfigured()) {
@@ -328,11 +329,13 @@ public class PortfolioCourseNodeRunController extends FormBasicController {
 			}
 
 			// get comment
-			AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
-			String comment = am.getNodeComment(courseNode, getIdentity());
-			assessmentInfosContainer.contextPut("hasCommentField", new Boolean(comment != null));
-			if (comment != null) {
-				assessmentInfosContainer.contextPut("comment", comment);
+			if(resultsVisible) {
+				AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager();
+				String comment = am.getNodeComment(courseNode, getIdentity());
+				assessmentInfosContainer.contextPut("hasCommentField", new Boolean(comment != null));
+				if (comment != null) {
+					assessmentInfosContainer.contextPut("comment", comment);
+				}
 			}
 			assessmentInfosContainer.setVisible(true);
 		} else {
diff --git a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java
index e57fd412c39020a748f34a3eff4c6fae61dd9502..72e7923e5365c28b4640bd208daa2074ea86a30d 100644
--- a/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java
+++ b/src/main/java/org/olat/course/nodes/scorm/ScormRunController.java
@@ -247,10 +247,12 @@ public class ScormRunController extends BasicController implements ScormAPICallb
 			}
 			startPage.contextPut("hasPassedValue", (scoreEval.getPassed() == null ? Boolean.FALSE : Boolean.TRUE));
 			startPage.contextPut("passed", scoreEval.getPassed());
-			startPage.contextPut("resultsVisible", scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue());
-
-			StringBuilder comment = Formatter.stripTabsAndReturns(scormNode.getUserUserComment(userCourseEnv));
-			startPage.contextPut("comment", StringHelper.xssScan(comment));
+			boolean resultsVisible = scoreEval.getUserVisible() == null || scoreEval.getUserVisible().booleanValue();
+			startPage.contextPut("resultsVisible", resultsVisible);
+			if(resultsVisible && scormNode.hasCommentConfigured()) {
+				StringBuilder comment = Formatter.stripTabsAndReturns(scormNode.getUserUserComment(userCourseEnv));
+				startPage.contextPut("comment", StringHelper.xssScan(comment));
+			}
 			startPage.contextPut("attempts", scormNode.getUserAttempts(userCourseEnv));
 		}
 		startPage.contextPut("isassessable", Boolean.valueOf(isAssessable));
diff --git a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java
index b5b94469faf2c7903828e265bb516b433e109855..e79fc4ea8d78d846a26d3e617e7a182ae75abfe4 100644
--- a/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java
+++ b/src/main/java/org/olat/ims/qti21/ui/AssessmentResultController.java
@@ -277,7 +277,7 @@ public class AssessmentResultController extends FormBasicController {
 			
 			Document clonedState = ItemSessionStateXmlMarshaller.marshal(sessionState);
 			ItemSessionState clonedSessionState = ItemSessionStateXmlMarshaller.unmarshal(clonedState.getDocumentElement());
-			//TODO only to make jenkins works clonedSessionState.resetResponses();
+			clonedSessionState.resetResponses();
 			formItem.setItemSessionState(clonedSessionState);
 			formItem.setCandidateSessionContext(candidateSessionContext);
 			formItem.setResolvedAssessmentTest(resolvedAssessmentTest);
diff --git a/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql b/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql
index df1e8886b04cfd3a3be0a09095721b112316ba7f..5c19d90185d4cc57ebde6a0737ae4be135e027e8 100644
--- a/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql
+++ b/src/main/resources/database/mysql/alter_11_2_x_to_11_3_0.sql
@@ -40,5 +40,5 @@ alter table o_qti_assessmentitem_session modify q_testpartidentifier varchar(255
 alter table o_qti_assessmenttest_session modify q_subident varchar(255);
 
 
-alter table o_as_entry add column a_user_visibility bit default 0;
+alter table o_as_entry add column a_user_visibility bit default 1;
 
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index 2752e547f1bce9c5f5aa44bae521b43c690b10d4..ec353d4e2f686ef9467f4d19e8afb344ac98413f 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -1166,7 +1166,7 @@ create table o_as_entry (
    a_status varchar(16) default null,
    a_details varchar(1024) default null,
    a_fully_assessed bit default null,
-   a_user_visibility bit default 0,
+   a_user_visibility bit default 1,
    a_assessment_id bigint default null,
    a_completion float(65,30),
    a_comment text,
diff --git a/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql b/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql
index 7ee5bd3ea8fe9bce99e23a450b1a1087e13642a4..6f25f5ed60fdedbca667d16a46fdc8d5741b518d 100644
--- a/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql
+++ b/src/main/resources/database/oracle/alter_11_2_x_to_11_3_0.sql
@@ -39,4 +39,4 @@ alter table o_qti_assessmentitem_session modify q_testpartidentifier varchar2(25
 alter table o_qti_assessmenttest_session modify q_subident varchar2(255 char);
 
 
-alter table o_as_entry add a_user_visibility number default 0;
+alter table o_as_entry add a_user_visibility number default 1;
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index b127a5aa138c2f60adbe1a30c2853b0c9c60f20d..29db00010194e95f4ee5aacb532705767d835c96 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -1194,7 +1194,7 @@ create table o_as_entry (
    a_status varchar2(16 char) default null,
    a_details varchar2(1024 char) default null,
    a_fully_assessed number default null,
-   a_user_visibility number default 0,
+   a_user_visibility number default 1,
    a_assessment_id number(20) default null,
    a_completion float,
    a_comment clob,