diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java b/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java
index adbdae48485828abc8b2034e09c8aa7a9ed8aae9..aa4cfaf7d685c42076f409f8b29d8c37cf76e2e5 100644
--- a/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java
+++ b/src/main/java/org/olat/modules/lecture/manager/LectureBlockDAO.java
@@ -272,6 +272,7 @@ public class LectureBlockDAO {
 		  .append(" from curriculumelement curEl")
 		  .append(" inner join fetch curEl.group curElGroup")
 		  .append(" inner join fetch curEl.curriculum cur")
+		  .append(" left join fetch cur.organisation organis")
 		  .append(" where exists (select v.key from repositoryentry as v")
 		  .append("  inner join v.groups as relGroup")
 		  .append("  inner join lectureentryconfig config on (config.entry.key=v.key)")
@@ -285,7 +286,7 @@ public class LectureBlockDAO {
 			ref = searchParams.getSearchString();
 			fuzzyRef = PersistenceHelper.makeFuzzyQueryString(ref);
 			
-			sb.append(" and (cur.externalId=:ref or curEl.externalId=:ref or v.externalId=:ref or ")
+			sb.append(" and (cur.externalId=:ref or curEl.externalId=:ref or ")
 			  .likeFuzzy("cur.displayName", "fuzzyRef", dbInstance.getDbVendor())
 			  .append(" or ")
 			  .likeFuzzy("cur.identifier", "fuzzyRef", dbInstance.getDbVendor())
@@ -300,6 +301,31 @@ public class LectureBlockDAO {
 			sb.append(")");	
 		}
 		
+		if(searchParams.getManager() != null) {
+			sb.append(" and exists (select membership.key from bgroupmember as membership")
+			  .append("  where membership.identity.key=:managerKey")
+			  .append("  and membership.role").in(OrganisationRoles.administrator, LectureRoles.lecturemanager)
+			  .append("  and (membership.group.key=curElGroup.key or membership.group.key=organis.group.key)")
+			  .append(" )");
+		}
+		
+		if(searchParams.getMasterCoach() != null) {
+			sb.append(" and exists (select masterCoachMembership.key from bgroupmember as masterCoachMembership")
+			  .append("  where curElGroup.key=masterCoachMembership.group.key and masterCoachMembership.identity.key=:masterCoachKey")
+			  .append("  and masterCoachMembership.role ").in(LectureRoles.mastercoach)
+			  .append(" )");
+		}
+		
+		if(searchParams.getTeacher() != null) {
+			sb.append(" and exists (select teacherMembership.key from lectureblock as block")
+			  .append(" inner join block.teacherGroup tGroup")
+			  .append(" inner join tGroup.members teacherMembership")
+			  .append(" inner join repoentrytogroup as rel on (block.entry.key=rel.entry.key)")
+			  .append(" where curElGroup.key=rel.group.key and teacherMembership.identity.key=:teacherKey")
+			  .append("  and teacherMembership.role ").in(LectureRoles.teacher)
+			  .append(" )");
+		}
+		
 		TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Object[].class);
 		if(key != null) {
@@ -311,6 +337,15 @@ public class LectureBlockDAO {
 		if(fuzzyRef != null) {
 			query.setParameter("fuzzyRef", fuzzyRef);
 		}
+		if(searchParams.getManager() != null) {
+			query.setParameter("managerKey", searchParams.getManager().getKey());
+		}
+		if(searchParams.getMasterCoach() != null) {
+			query.setParameter("masterCoachKey", searchParams.getMasterCoach().getKey());
+		}
+		if(searchParams.getTeacher() != null) {
+			query.setParameter("teacherKey", searchParams.getTeacher().getKey());
+		}
 		
 		List<Object[]> rawObjects = query.getResultList();
 		return rawObjects.stream().map(objects
diff --git a/src/main/java/org/olat/modules/lecture/model/LectureCurriculumElementSearchParameters.java b/src/main/java/org/olat/modules/lecture/model/LectureCurriculumElementSearchParameters.java
index 9d7fd196a9fc7decd63a9fdfc66cc5dd23c8d2b4..910b92a9deadf505b52dbbbe29cfe62c4da09670 100644
--- a/src/main/java/org/olat/modules/lecture/model/LectureCurriculumElementSearchParameters.java
+++ b/src/main/java/org/olat/modules/lecture/model/LectureCurriculumElementSearchParameters.java
@@ -19,6 +19,9 @@
  */
 package org.olat.modules.lecture.model;
 
+import org.olat.basesecurity.IdentityRef;
+import org.olat.modules.lecture.ui.LectureRoles;
+
 /**
  * 
  * Initial date: 9 août 2019<br>
@@ -27,6 +30,10 @@ package org.olat.modules.lecture.model;
  */
 public class LectureCurriculumElementSearchParameters {
 	
+	private IdentityRef teacher;
+	private IdentityRef masterCoach;
+	private IdentityRef manager;
+	
 	private String searchString;
 	
 	public String getSearchString() {
@@ -37,6 +44,36 @@ public class LectureCurriculumElementSearchParameters {
 		this.searchString = searchString;
 	}
 	
+	public IdentityRef getTeacher() {
+		return teacher;
+	}
+
+	public void setTeacher(IdentityRef teacher) {
+		this.teacher = teacher;
+	}
+
+	public IdentityRef getMasterCoach() {
+		return masterCoach;
+	}
 
+	public void setMasterCoach(IdentityRef masterCoach) {
+		this.masterCoach = masterCoach;
+	}
+
+	public IdentityRef getManager() {
+		return manager;
+	}
+
+	public void setManager(IdentityRef manager) {
+		this.manager = manager;
+	}
+
+	public void setViewAs(IdentityRef identity, LectureRoles role) {
+		switch(role) {
+			case lecturemanager: setManager(identity); break;
+			case mastercoach: setMasterCoach(identity); break;
+			default: setTeacher(identity); break;
+		}
+	}
 
 }
diff --git a/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumElementsListController.java b/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumElementsListController.java
index 1b26f245fca0af4cc61f3761fd0dace2caa0e001..5f6128913de07371797d7a5318c28fe5047e482a 100644
--- a/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumElementsListController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumElementsListController.java
@@ -41,6 +41,7 @@ import org.olat.modules.lecture.LectureService;
 import org.olat.modules.lecture.model.LectureCurriculumElementInfos;
 import org.olat.modules.lecture.model.LectureCurriculumElementSearchParameters;
 import org.olat.modules.lecture.ui.LectureRepositoryAdminController;
+import org.olat.modules.lecture.ui.LecturesSecurityCallback;
 import org.olat.modules.lecture.ui.coach.CurriculumElementsTableModel.LectureCurriculumCols;
 import org.olat.modules.lecture.ui.event.SelectLectureCurriculumElementEvent;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +53,8 @@ import org.springframework.beans.factory.annotation.Autowired;
  *
  */
 public class CurriculumElementsListController extends FormBasicController {
+
+	private final LecturesSecurityCallback secCallback;
 	
 	private FlexiTableElement tableEl;
 	private CurriculumElementsTableModel tableModel;
@@ -59,10 +62,10 @@ public class CurriculumElementsListController extends FormBasicController {
 	@Autowired
 	private LectureService lectureService;
 	
-	public CurriculumElementsListController(UserRequest ureq, WindowControl wControl) {
+	public CurriculumElementsListController(UserRequest ureq, WindowControl wControl, LecturesSecurityCallback secCallback) {
 		super(ureq, wControl, "curriculums", Util.createPackageTranslator(CurriculumSearchManagerController.class, ureq.getLocale()));
 		setTranslator(Util.createPackageTranslator(LectureRepositoryAdminController.class, getLocale(), getTranslator()));
-		
+		this.secCallback = secCallback;
 		initForm(ureq);
 	}
 
@@ -112,6 +115,7 @@ public class CurriculumElementsListController extends FormBasicController {
 	private void loadModel(String searchString) {
 		LectureCurriculumElementSearchParameters searchParams = new LectureCurriculumElementSearchParameters();
 		searchParams.setSearchString(searchString);
+		searchParams.setViewAs(getIdentity(), secCallback.viewAs());
 		List<LectureCurriculumElementInfos> infos = lectureService.searchCurriculumElements(searchParams);
 		tableModel.setObjects(infos);
 		tableEl.reset(true, true, true);
diff --git a/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumsSearchController.java b/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumsSearchController.java
index e32eb84337a29d1bdaf94fd7c47c7b794f7a1940..08d424ccf81737a92550f6a3bf5aa33cebc7d2bc 100644
--- a/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumsSearchController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/coach/CurriculumsSearchController.java
@@ -71,7 +71,7 @@ public class CurriculumsSearchController extends BasicController {
 		super(ureq, wControl, Util.createPackageTranslator(LectureRepositoryAdminController.class, ureq.getLocale()));
 		this.secCallback = secCallback;
 		
-		elementsSearchCtrl = new CurriculumElementsListController(ureq, getWindowControl());
+		elementsSearchCtrl = new CurriculumElementsListController(ureq, getWindowControl(), secCallback);
 		listenTo(elementsSearchCtrl);
 		panel = new BreadcrumbedStackedPanel("c-search", getTranslator(), this);
 		panel.pushController(translate("search.curriculums"), elementsSearchCtrl);
diff --git a/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java b/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java
index d1a28d8cb382b97be4a19f20528e3f2014d193b7..15e974bd7fe9ec27f786b878f0d885ab4587811c 100644
--- a/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java
+++ b/src/test/java/org/olat/modules/lecture/manager/LectureBlockDAOTest.java
@@ -24,20 +24,30 @@ import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 import java.util.Set;
+import java.util.UUID;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.olat.basesecurity.Group;
 import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.OrganisationRoles;
+import org.olat.basesecurity.OrganisationService;
 import org.olat.commons.calendar.CalendarUtils;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.id.Identity;
+import org.olat.core.id.Organisation;
 import org.olat.course.assessment.AssessmentMode;
 import org.olat.course.assessment.AssessmentModeManager;
 import org.olat.group.BusinessGroup;
 import org.olat.group.BusinessGroupService;
 import org.olat.group.manager.BusinessGroupRelationDAO;
+import org.olat.modules.curriculum.Curriculum;
+import org.olat.modules.curriculum.CurriculumCalendars;
+import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumElementStatus;
+import org.olat.modules.curriculum.CurriculumLectures;
+import org.olat.modules.curriculum.CurriculumRoles;
+import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.lecture.LectureBlock;
 import org.olat.modules.lecture.LectureBlockRef;
 import org.olat.modules.lecture.LectureBlockStatus;
@@ -48,6 +58,8 @@ import org.olat.modules.lecture.RepositoryEntryLectureConfiguration;
 import org.olat.modules.lecture.model.LectureBlockImpl;
 import org.olat.modules.lecture.model.LectureBlockToGroupImpl;
 import org.olat.modules.lecture.model.LectureBlockWithTeachers;
+import org.olat.modules.lecture.model.LectureCurriculumElementInfos;
+import org.olat.modules.lecture.model.LectureCurriculumElementSearchParameters;
 import org.olat.modules.lecture.model.LectureReportRow;
 import org.olat.modules.lecture.model.LectureRepositoryEntryInfos;
 import org.olat.modules.lecture.model.LectureRepositoryEntrySearchParameters;
@@ -78,6 +90,10 @@ public class LectureBlockDAOTest extends OlatTestCase {
 	@Autowired
 	private RepositoryService repositoryService;
 	@Autowired
+	private CurriculumService curriculumService;
+	@Autowired
+	private OrganisationService organisationService;
+	@Autowired
 	private AssessmentModeManager assessmentModeManager;
 	@Autowired
 	private RepositoryEntryRelationDAO repositoryEntryRelationDao;
@@ -465,6 +481,128 @@ public class LectureBlockDAOTest extends OlatTestCase {
 		Assert.assertEquals(entry, infos.get(0).getEntry());
 	}
 	
+	@Test
+	public void searchCurriculumElements_byTeacher() {
+		Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-23");
+		Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-participant-23a");
+		RepositoryEntry entry = createResourceWithLecturesEnabled();
+		LectureBlock lectureBlock = createMinimalLectureBlock(entry);
+		dbInstance.commit();
+		lectureService.addTeacher(lectureBlock, teacher);
+		
+		String elementId = UUID.randomUUID().toString();
+		Curriculum curriculum = curriculumService.createCurriculum("Lectures-cur-1", "Curriculum with lectures 2", "Curriculum", null);
+		CurriculumElement element = curriculumService.createCurriculumElement(elementId, "Element for relation", CurriculumElementStatus.active,
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
+		curriculumService.addRepositoryEntry(element, entry, false);
+		curriculumService.addMember(element, participant, CurriculumRoles.participant);
+		lectureService.save(lectureBlock, Collections.singletonList(element.getGroup()));
+		dbInstance.commitAndCloseSession();
+
+		LectureCurriculumElementSearchParameters searchParams = new LectureCurriculumElementSearchParameters();
+		searchParams.setSearchString(elementId);
+		searchParams.setViewAs(teacher, LectureRoles.teacher);
+		
+		List<LectureCurriculumElementInfos> infos = lectureBlockDao.searchCurriculumElements(searchParams);	
+		Assert.assertNotNull(infos);
+		Assert.assertEquals(1, infos.size());
+		Assert.assertEquals(curriculum, infos.get(0).getCurriculum());
+		Assert.assertEquals(element, infos.get(0).getElement());
+		Assert.assertEquals(1, infos.get(0).getNumOfParticipants());
+	}
+	
+	@Test
+	public void searchCurriculumElements_byTeacher_negativeTest() {
+		Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("not-teacher-23");
+		RepositoryEntry entry = createResourceWithLecturesEnabled();
+		LectureBlock lectureBlock = createMinimalLectureBlock(entry);
+		dbInstance.commit();
+		repositoryEntryRelationDao.addRole(teacher, entry, GroupRoles.owner.name());
+		Assert.assertNotNull(lectureBlock);
+		
+		String elementId = UUID.randomUUID().toString();
+		Curriculum curriculum = curriculumService.createCurriculum("Lectures-cur-2", "Curriculum with lectures 2", "Curriculum", null);
+		CurriculumElement element = curriculumService.createCurriculumElement(elementId, "Element for relation", CurriculumElementStatus.active,
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
+		curriculumService.addRepositoryEntry(element, entry, false);
+		dbInstance.commitAndCloseSession();
+
+		LectureCurriculumElementSearchParameters searchParams = new LectureCurriculumElementSearchParameters();
+		searchParams.setSearchString(elementId);
+		searchParams.setViewAs(teacher, LectureRoles.teacher);
+		
+		List<LectureCurriculumElementInfos> infos = lectureBlockDao.searchCurriculumElements(searchParams);	
+		Assert.assertNotNull(infos);
+		Assert.assertTrue(infos.isEmpty());
+	}
+	
+	@Test
+	public void searchCurriculumElements_byMasterCoach() {
+		Identity masterCoach = JunitTestHelper.createAndPersistIdentityAsRndUser("masterCoach-23");
+		Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-participant-23a");
+		Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-participant-23b");
+		RepositoryEntry entry = createResourceWithLecturesEnabled();
+		LectureBlock lectureBlock = createMinimalLectureBlock(entry);
+		dbInstance.commit();
+		
+		String elementId = UUID.randomUUID().toString();
+		Curriculum curriculum = curriculumService.createCurriculum("Lectures-cur-1", "Curriculum with lectures 2", "Curriculum", null);
+		CurriculumElement element = curriculumService.createCurriculumElement(elementId, "Element for relation", CurriculumElementStatus.active,
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
+		curriculumService.addRepositoryEntry(element, entry, false);
+		dbInstance.commit();
+		curriculumService.addMember(element, masterCoach, CurriculumRoles.mastercoach);
+		curriculumService.addMember(element, participant1, CurriculumRoles.participant);
+		curriculumService.addMember(element, participant2, CurriculumRoles.participant);
+		lectureService.save(lectureBlock, Collections.singletonList(element.getGroup()));
+		dbInstance.commitAndCloseSession();
+
+		LectureCurriculumElementSearchParameters searchParams = new LectureCurriculumElementSearchParameters();
+		searchParams.setSearchString(elementId);
+		searchParams.setViewAs(masterCoach, LectureRoles.mastercoach);
+		
+		List<LectureCurriculumElementInfos> infos = lectureBlockDao.searchCurriculumElements(searchParams);	
+		Assert.assertNotNull(infos);
+		Assert.assertEquals(1, infos.size());
+		Assert.assertEquals(curriculum, infos.get(0).getCurriculum());
+		Assert.assertEquals(element, infos.get(0).getElement());
+		Assert.assertEquals(2, infos.get(0).getNumOfParticipants());
+	}
+	
+	@Test
+	public void searchCurriculumElements_byManager() {
+		Identity lectureManager = JunitTestHelper.createAndPersistIdentityAsRndUser("lectureMgr-23");
+		Identity participant1 = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-participant-23a");
+		Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-participant-23b");
+		RepositoryEntry entry = createResourceWithLecturesEnabled();
+		LectureBlock lectureBlock = createMinimalLectureBlock(entry);
+		dbInstance.commit();
+		
+		String elementId = UUID.randomUUID().toString();
+		Organisation curOrganisation = organisationService.createOrganisation("cur-lecture", "cur-lecture", null, null, null);
+		Curriculum curriculum = curriculumService.createCurriculum("Lectures-cur-1", "Curriculum with lectures 2", "Curriculum", curOrganisation);
+		CurriculumElement element = curriculumService.createCurriculumElement(elementId, "Element for relation", CurriculumElementStatus.active,
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
+		curriculumService.addRepositoryEntry(element, entry, false);
+		dbInstance.commit();
+		organisationService.addMember(curOrganisation, lectureManager, OrganisationRoles.lecturemanager);
+		curriculumService.addMember(element, participant1, CurriculumRoles.participant);
+		curriculumService.addMember(element, participant2, CurriculumRoles.participant);
+		lectureService.save(lectureBlock, Collections.singletonList(element.getGroup()));
+		dbInstance.commitAndCloseSession();
+
+		LectureCurriculumElementSearchParameters searchParams = new LectureCurriculumElementSearchParameters();
+		searchParams.setSearchString(elementId);
+		searchParams.setViewAs(lectureManager, LectureRoles.lecturemanager);
+		
+		List<LectureCurriculumElementInfos> infos = lectureBlockDao.searchCurriculumElements(searchParams);	
+		Assert.assertNotNull(infos);
+		Assert.assertEquals(1, infos.size());
+		Assert.assertEquals(curriculum, infos.get(0).getCurriculum());
+		Assert.assertEquals(element, infos.get(0).getElement());
+		Assert.assertEquals(2, infos.get(0).getNumOfParticipants());
+	}
+	
 	@Test
 	public void getLecturesBlockWithTeachers() {
 		Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("teacher-23");