diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckboxLabelEnum.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckboxLabelEnum.java
index 905ff8c3f70dda53c6a58cc966252681d19c41ce..29d609e7e4e3b4ba1c28aaa9d162005183b84eeb 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckboxLabelEnum.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckboxLabelEnum.java
@@ -34,7 +34,9 @@ public enum CheckboxLabelEnum {
 	inWork("label.inWork"),
 	passed("label.passed"),
 	present("label.present"),
-	presented("label.presented");
+	presented("label.presented"),
+	read("label.read"),
+	viewed("label.viewed");
 	
 	private final String i18nKey;
 	
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
index 94ac5d182d847b18a5cee75d619bc6822682d960..4abf60225d7c2ebe0d497a634a3d778a9e8b0f49 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
@@ -67,6 +67,8 @@ label.inWork=Bearbeitet
 label.passed=Bestanden
 label.present=Anwesend
 label.presented=Vorgef\u00FChrt
+label.read=Gelesen
+label.viewed=Gesehen
 num.of.checklist=Anzahl Checklisten
 pane.tab.accessibility=Zugang
 pane.tab.checkbox=Checkboxen
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties
index 07f7a916f75822183b4bfbd019670747d36526eb..d97048c37ac5ecf183d48455b243900a9b14665a 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties
@@ -67,6 +67,8 @@ label.inWork=Processed
 label.passed=Passed
 label.present=Attendant
 label.presented=Presented
+label.read=Read
+label.viewed=Viewed
 num.of.checklist=Quantity
 pane.tab.accessibility=Access
 pane.tab.checkbox=Checkboxes
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_fr.properties
index 677b711ab6641d7632e9ed8000e4ab407ed2c12d..8db006d93b05c685a6a8cbbb9256239353d3f70d 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_fr.properties
@@ -67,6 +67,8 @@ label.inWork=Trait\u00E9
 label.passed=R\u00E9ussi
 label.present=Pr\u00E9sent
 label.presented=Pr\u00E9sent\u00E9
+label.read=Lu
+label.viewed=Vu
 num.of.checklist=Nombre
 pane.tab.accessibility=Acc\u00E8s
 pane.tab.checkbox=Cases \u00E0 cocher
diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java
index b3d80fb3be460c8719f5010cba302630cb887263..7a23039ccc73e635291086c63ab0ea688e72e77f 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java
@@ -589,8 +589,8 @@ public class CurriculumElementDAO {
 			sb.and()
 			  .append("exists (select membership.key from bgroupmember as membership")
 			  .append("  where membership.identity.key=:managerKey")
-			  .append("  and (membership.group.key=baseGroup.key or organis.group.key=baseGroup.key)")
-			  .append("  and role in ('").append(CurriculumRoles.curriculummanager).append("','").append(OrganisationRoles.administrator).append("')")
+			  .append("  and membership.role").in(CurriculumRoles.curriculummanager, CurriculumRoles.owner, OrganisationRoles.administrator)
+			  .append("  and (membership.group.key=baseGroup.key or membership.group.key=organis.group.key)")
 			  .append(")");
 		}
 
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java
index d192662e7df41274a35f8de3b55a1e5ac34f289e..6adeee7cbb1d60d1948dc4c0fa8265517a5e4e14 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java
@@ -30,8 +30,10 @@ import java.util.UUID;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.olat.basesecurity.OrganisationService;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
@@ -45,6 +47,8 @@ import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumElementImpl;
 import org.olat.modules.curriculum.model.CurriculumElementInfos;
+import org.olat.modules.curriculum.model.CurriculumElementSearchInfos;
+import org.olat.modules.curriculum.model.CurriculumElementSearchParams;
 import org.olat.modules.curriculum.model.CurriculumImpl;
 import org.olat.repository.RepositoryEntry;
 import org.olat.test.JunitTestHelper;
@@ -69,6 +73,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	private CurriculumElementTypeDAO curriculumElementTypeDao;
 	@Autowired
 	private CurriculumService curriculumService;
+	@Autowired
+	private OrganisationService organisationService;
 	
 	@Test
 	public void createCurriculumElement() {
@@ -337,6 +343,68 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 		Assert.assertEquals(element, elementsByKey.get(0));
 	}
 	
+	@Test
+	public void searchElementsWithParams_permissions() {
+		Identity nobody = JunitTestHelper.createAndPersistIdentityAsRndUser("curriculum-nobody");
+		Organisation defOrganisation = organisationService.getDefaultOrganisation();
+		Identity curriculumAdmin = JunitTestHelper.createAndPersistIdentityAsRndAdmin("curriculum-admin");
+		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-6", "Curriculum for element", "Curriculum", defOrganisation);
+		String externalId = UUID.randomUUID().toString();
+		String identifier = UUID.randomUUID().toString();
+		CurriculumElement element = curriculumElementDao.createCurriculumElement(identifier, "6.1 Element",
+				CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		dbInstance.commit();
+		element.setExternalId(externalId);
+		element = curriculumElementDao.update(element);
+		dbInstance.commitAndCloseSession();
+
+		//search by external id, administrator
+		CurriculumElementSearchParams adminSearchParams = new CurriculumElementSearchParams(curriculumAdmin);
+		adminSearchParams.setElementId(externalId);
+		List<CurriculumElementSearchInfos> elementsByExternalId = curriculumElementDao.searchElements(adminSearchParams);
+		Assert.assertNotNull(elementsByExternalId);
+		Assert.assertEquals(1, elementsByExternalId.size());
+		Assert.assertEquals(element, elementsByExternalId.get(0).getCurriculumElement());
+		
+		//search by identifier 
+		CurriculumElementSearchParams nobodySearchParams = new CurriculumElementSearchParams(nobody);
+		nobodySearchParams.setElementId(externalId);
+		List<CurriculumElementSearchInfos> noElements = curriculumElementDao.searchElements(nobodySearchParams);
+		Assert.assertNotNull(noElements);
+		Assert.assertTrue(noElements.isEmpty());
+	}
+	
+	/**
+	 * The method only checks the query syntax, not the results.
+	 */
+	@Test
+	public void searchElementsWithParams_allParameters() {
+		Organisation defOrganisation = organisationService.getDefaultOrganisation();
+		Identity curriculumAdmin = JunitTestHelper.createAndPersistIdentityAsRndAdmin("curriculum-admin");
+		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-6", "Curriculum for element", "Curriculum", defOrganisation);
+		String externalId = UUID.randomUUID().toString();
+		String identifier = UUID.randomUUID().toString();
+		CurriculumElement element = curriculumElementDao.createCurriculumElement(identifier, "6.1 Element",
+				CurriculumElementStatus.active, null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		dbInstance.commit();
+		element.setExternalId(externalId);
+		element = curriculumElementDao.update(element);
+		dbInstance.commitAndCloseSession();
+
+		//search by external id, administrator
+		CurriculumElementSearchParams adminSearchParams = new CurriculumElementSearchParams(curriculumAdmin);
+		adminSearchParams.setElementId(externalId);
+		adminSearchParams.setElementBeginDate(new Date());
+		adminSearchParams.setElementEndDate(new Date());
+		adminSearchParams.setElementText("Hello");
+		adminSearchParams.setEntryId("734");
+		adminSearchParams.setEntryText("Course");
+		adminSearchParams.setSearchString("Search");
+		List<CurriculumElementSearchInfos> elementsByExternalId = curriculumElementDao.searchElements(adminSearchParams);
+		Assert.assertNotNull(elementsByExternalId);
+
+	}
+	
 	@Test
 	public void getDescendants() {
 		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-5", "Curriculum for element", "Curriculum", null);