diff --git a/src/main/java/org/olat/modules/quality/QualitySecurityCallback.java b/src/main/java/org/olat/modules/quality/QualitySecurityCallback.java
index 186d0fbc7ba869b6aefe5cf1d28ec8b4367fdece..220f7128752045255ed58edebec152e312dba1f4 100644
--- a/src/main/java/org/olat/modules/quality/QualitySecurityCallback.java
+++ b/src/main/java/org/olat/modules/quality/QualitySecurityCallback.java
@@ -29,6 +29,8 @@ public interface QualitySecurityCallback {
 
 	public boolean canViewDataCollections();
 	
+	public boolean canCreateDataCollections();
+	
 	public boolean canEditDataCollections();
 	
 	public boolean canUpdateBaseConfiguration(QualityDataCollectionLight dataCollection);
@@ -41,17 +43,18 @@ public interface QualitySecurityCallback {
 	
 	public boolean canSetFinished(QualityDataCollectionLight dataCollection);
 	
-	public boolean canAddParticipants(QualityDataCollectionLight dataCollection);
-
-	public boolean canEditReminders();
-
-	public boolean canEditReminder(QualityDataCollectionLight dataCollection, QualityReminder reminder);
-	
 	public boolean canDeleteDataCollections();
 	
 	public boolean canDeleteDataCollection(QualityDataCollectionLight dataCollection);
 	
+	public boolean canAddParticipants(QualityDataCollectionLight dataCollection);
+	
 	public boolean canRevomeParticipation(QualityDataCollectionLight dataCollection);
 
+	public boolean canEditReminders();
+
+	public boolean canEditReminder(QualityDataCollectionLight dataCollection, QualityReminder reminder);
+
 	public boolean canExecute(QualityExecutorParticipation participation);
+
 }
diff --git a/src/main/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilder.java b/src/main/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilder.java
index 96240789b92aebe18fdc9f63bed75b348ed6339c..701a0a39fbc9485de2b9b6a470489ca6ef39d578 100644
--- a/src/main/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilder.java
+++ b/src/main/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilder.java
@@ -63,6 +63,8 @@ class CurriculumElementQualityContextBuilder extends ForwardingQualityContextBui
 
 	private void initBuilder(EvaluationFormParticipation evaluationFormParticipation, CurriculumElement curriculumElement,
 			CurriculumRoles role) {
+		curriculumElement = curriculumService.getCurriculumElement(curriculumElement);
+		
 		QualityContextRole contextRole = QualityContextRole.valueOf(role.name());
 		builder.withRole(contextRole);
 		builder.withAudiencCurriculumElement(curriculumElement);
@@ -70,7 +72,6 @@ class CurriculumElementQualityContextBuilder extends ForwardingQualityContextBui
 		List<QualityContext> contextToDelete = qualityContextDao
 				.loadByAudienceCurriculumElement(evaluationFormParticipation, curriculumElement, contextRole);
 		contextToDelete.forEach(c -> builder.addToDelete(c));
-		
 		builder.addCurriculumElement(curriculumElement);
 		Curriculum curriculum = curriculumElement.getCurriculum();
 		builder.addCurriculum(curriculum);
diff --git a/src/main/java/org/olat/modules/quality/ui/DataCollectionListController.java b/src/main/java/org/olat/modules/quality/ui/DataCollectionListController.java
index 3423275e773c0ef344126b18b1789042ad5f7de5..4cf9afa98e203807c58a82d0a662addb015e9874 100644
--- a/src/main/java/org/olat/modules/quality/ui/DataCollectionListController.java
+++ b/src/main/java/org/olat/modules/quality/ui/DataCollectionListController.java
@@ -108,7 +108,7 @@ public class DataCollectionListController extends FormBasicController implements
 		numParticipantsColumn.setAlignment(FlexiColumnModel.ALIGNMENT_RIGHT);
 		numParticipantsColumn.setHeaderAlignment(FlexiColumnModel.ALIGNMENT_RIGHT);
 		columnsModel.addFlexiColumnModel(numParticipantsColumn);
-		if (secCallback.canEditDataCollections()) {
+		if (secCallback.canEditDataCollections() || secCallback.canViewDataCollections()) {
 			DefaultFlexiColumnModel editColumn = new DefaultFlexiColumnModel(DataCollectionCols.edit.i18nHeaderKey(),
 					DataCollectionCols.edit.ordinal(), CMD_EDIT,
 					new BooleanCellRenderer(
@@ -135,7 +135,7 @@ public class DataCollectionListController extends FormBasicController implements
 
 	@Override
 	public void initTools() {
-		if (secCallback.canEditDataCollections()) {
+		if (secCallback.canCreateDataCollections()) {
 			createDataCollectionLink = LinkFactory.createToolLink("data.collection.create", translate("data.collection.create"), this);
 			createDataCollectionLink.setIconLeftCSS("o_icon o_icon-lg o_icon_qual_dc_create");
 			stackPanel.addTool(createDataCollectionLink, Align.left);
diff --git a/src/main/java/org/olat/modules/quality/ui/QualityMainController.java b/src/main/java/org/olat/modules/quality/ui/QualityMainController.java
index 50c28b791606ec4864e324a279a11882366ed09e..8a9ba413635736a9353a4a06d708d51cd65c10ea 100644
--- a/src/main/java/org/olat/modules/quality/ui/QualityMainController.java
+++ b/src/main/java/org/olat/modules/quality/ui/QualityMainController.java
@@ -65,7 +65,7 @@ public class QualityMainController extends MainLayoutBasicController implements
 	
 	public QualityMainController(UserRequest ureq, WindowControl wControl) {
 		super(ureq, wControl);
-		this.secCallback = new QualitySecurityCallbackImpl();
+		this.secCallback = new QualitySecurityCallbackImpl(ureq.getUserSession().getRoles());
 		
 		mainVC = createVelocityContainer("main");
 		
diff --git a/src/main/java/org/olat/modules/quality/ui/QualitySecurityCallbackImpl.java b/src/main/java/org/olat/modules/quality/ui/QualitySecurityCallbackImpl.java
index 79a72e7d772c81c436d4553d9fedf15715d61ac9..f7d0e4195884e77d7a02545f1999cf4260545c1b 100644
--- a/src/main/java/org/olat/modules/quality/ui/QualitySecurityCallbackImpl.java
+++ b/src/main/java/org/olat/modules/quality/ui/QualitySecurityCallbackImpl.java
@@ -23,6 +23,7 @@ import static org.olat.modules.quality.QualityDataCollectionStatus.FINISHED;
 import static org.olat.modules.quality.QualityDataCollectionStatus.PREPARATION;
 import static org.olat.modules.quality.QualityDataCollectionStatus.READY;
 
+import org.olat.core.id.Roles;
 import org.olat.modules.quality.QualityDataCollectionLight;
 import org.olat.modules.quality.QualityDataCollectionStatus;
 import org.olat.modules.quality.QualityExecutorParticipation;
@@ -38,73 +39,84 @@ import org.olat.modules.quality.QualitySecurityCallback;
  */
 public class QualitySecurityCallbackImpl implements QualitySecurityCallback {
 
+	private final Roles roles;
+
+	public QualitySecurityCallbackImpl(Roles roles) {
+		this.roles = roles;
+	}
+
 	@Override
 	public boolean canViewDataCollections() {
-		return true;
+		return canEditDataCollections() || roles.isPrincipal();
 	}
 
 	@Override
 	public boolean canEditDataCollections() {
-		return true;
+		return roles.isQualityManager() || roles.isAdministrator();
 	}
 
+	@Override
+	public boolean canCreateDataCollections() {
+		return canEditDataCollections();
+	}
+	
 	@Override
 	public boolean canUpdateBaseConfiguration(QualityDataCollectionLight dataCollection) {
-		return PREPARATION.equals(dataCollection.getStatus());
+		return canEditDataCollections() && PREPARATION.equals(dataCollection.getStatus());
 	}
 
 	@Override
 	public boolean canSetPreparation(QualityDataCollectionLight dataCollection) {
-		return READY.equals(dataCollection.getStatus());
+		return canEditDataCollections() && READY.equals(dataCollection.getStatus());
 	}
 
 	@Override
 	public boolean canSetReady(QualityDataCollectionLight dataCollection) {
-		return PREPARATION.equals(dataCollection.getStatus());
+		return canEditDataCollections() && PREPARATION.equals(dataCollection.getStatus());
 	}
 
 	@Override
 	public boolean canSetRunning(QualityDataCollectionLight dataCollection) {
-		return isNotStarted(dataCollection);
+		return canEditDataCollections() && isNotRunning(dataCollection);
 	}
 
 	@Override
 	public boolean canSetFinished(QualityDataCollectionLight dataCollection) {
-		return isNotFinished(dataCollection);
+		return canEditDataCollections() && isNotFinished(dataCollection);
 	}
 
 	@Override
-	public boolean canAddParticipants(QualityDataCollectionLight dataCollection) {
-		return isNotFinished(dataCollection);
+	public boolean canDeleteDataCollections() {
+		return canEditDataCollections();
 	}
 
 	@Override
-	public boolean canEditReminders() {
-		return true;
+	public boolean canDeleteDataCollection(QualityDataCollectionLight dataCollection) {
+		return canEditDataCollections() && isNotRunning(dataCollection);
 	}
 
 	@Override
-	public boolean canEditReminder(QualityDataCollectionLight dataCollection, QualityReminder reminder) {
-		return canEditReminders() && isNotSent(reminder) && isNotFinished(dataCollection);
+	public boolean canAddParticipants(QualityDataCollectionLight dataCollection) {
+		return canEditDataCollections() && isNotFinished(dataCollection);
 	}
 
-	private boolean isNotSent(QualityReminder reminder) {
-		return reminder == null || !reminder.isSent();
+	@Override
+	public boolean canRevomeParticipation(QualityDataCollectionLight dataCollection) {
+		return canEditDataCollections() && isNotRunning(dataCollection);
 	}
 
 	@Override
-	public boolean canDeleteDataCollections() {
-		return true;
+	public boolean canEditReminders() {
+		return canEditDataCollections();
 	}
 
 	@Override
-	public boolean canDeleteDataCollection(QualityDataCollectionLight dataCollection) {
-		return isNotStarted(dataCollection);
+	public boolean canEditReminder(QualityDataCollectionLight dataCollection, QualityReminder reminder) {
+		return canEditReminders() && isNotSent(reminder) && isNotFinished(dataCollection);
 	}
 
-	@Override
-	public boolean canRevomeParticipation(QualityDataCollectionLight dataCollection) {
-		return isNotStarted(dataCollection);
+	private boolean isNotSent(QualityReminder reminder) {
+		return reminder == null || !reminder.isSent();
 	}
 
 	@Override
@@ -114,7 +126,7 @@ public class QualitySecurityCallbackImpl implements QualitySecurityCallback {
 				|| QualityExecutorParticipationStatus.PARTICIPATING.equals(status);
 	}
 
-	private boolean isNotStarted(QualityDataCollectionLight dataCollection) {
+	private boolean isNotRunning(QualityDataCollectionLight dataCollection) {
 		QualityDataCollectionStatus status = dataCollection.getStatus();
 		return PREPARATION.equals(status) || READY.equals(status);
 	}
@@ -122,5 +134,4 @@ public class QualitySecurityCallbackImpl implements QualitySecurityCallback {
 	private boolean isNotFinished(QualityDataCollectionLight dataCollection) {
 		return !FINISHED.equals(dataCollection.getStatus());
 	}
-	
 }