From b4bf1564bb5ab1b3beb6b6066701e6b8e8c6a9aa Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Thu, 14 Feb 2019 14:51:21 +0100
Subject: [PATCH] OO-3863: add overview of lectures in curriculum management

Allow course owner to enter curriculum management site (with reduced
permissions), add configuration in type and element to aggregate the
lecture statistics, add three levels of details about lectures (list of
users, list for a specific user with all courses, details of a user in a
course)
---
 .../site/ui/_i18n/LocalStrings_de.properties  |   1 +
 .../site/ui/_i18n/LocalStrings_en.properties  |   1 +
 .../site/ui/_i18n/LocalStrings_fr.properties  |   1 +
 .../olat/admin/user/UserAdminController.java  |   2 +-
 .../gui/control/_spring/sitedefContext.xml    |   2 +-
 .../modules/curriculum/CurriculumElement.java |  10 +
 .../CurriculumElementManagedFlag.java         |   1 +
 .../curriculum/CurriculumElementType.java     |  10 +
 .../CurriculumElementTypeManagedFlag.java     |   1 +
 .../curriculum/CurriculumLectures.java        |  34 +++
 .../CurriculumSecurityCallback.java           |   1 +
 .../CurriculumSecurityCallbackFactory.java    |   9 +
 .../modules/curriculum/CurriculumService.java |  20 +-
 .../curriculum/manager/CurriculumDAO.java     |  56 ++++-
 .../manager/CurriculumElementDAO.java         |   5 +-
 .../CurriculumRepositoryEntryRelationDAO.java |  25 ++-
 .../manager/CurriculumServiceImpl.java        |  27 ++-
 .../model/CurriculumElementImpl.java          |  32 +++
 .../model/CurriculumElementTypeImpl.java      |  26 +++
 .../curriculum/model/CurriculumInfos.java     |  18 ++
 .../model/CurriculumSearchParameters.java     |   9 +
 .../restapi/CurriculumElementsWebService.java |   4 +-
 ...iculumManagerAndOwnerSecurityCallback.java |  51 +++++
 .../ui/CurriculumComposerController.java      |  25 ++-
 .../ui/CurriculumComposerTableModel.java      |   2 +
 .../curriculum/ui/CurriculumElementRow.java   |  22 ++
 .../ui/CurriculumListManagerController.java   |  43 ++--
 .../ui/CurriculumManagerDataModel.java        |   2 +
 .../modules/curriculum/ui/CurriculumRow.java  |  33 ++-
 .../ui/EditCurriculumElementController.java   | 104 +++++++--
 .../EditCurriculumElementTypeController.java  |  20 +-
 .../ui/_i18n/LocalStrings_de.properties       |   9 +-
 .../ui/_i18n/LocalStrings_en.properties       |   9 +-
 .../ui/_i18n/LocalStrings_fr.properties       |   2 +-
 .../ui/_i18n/LocalStrings_pt_BR.properties    |   2 +-
 .../CurriculumElementLecturesController.java  | 141 ++++++++++++
 .../ui/lectures/LecturesListController.java   | 201 ++++++++++++++++++
 .../ui/lectures/LecturesListDataModel.java    | 157 ++++++++++++++
 .../RateExplicitWarningCellRenderer.java      |  63 ++++++
 .../_content/curriculum_lectures.html         |   1 +
 .../_content/curriculum_lectures_table.html   |   6 +
 .../olat/modules/lecture/LectureModule.java   |  18 ++
 .../modules/lecture/LectureRateWarning.java   |  34 +++
 .../olat/modules/lecture/LectureService.java  |  10 +
 .../manager/LectureBlockRollCallDAO.java      |   8 +
 .../lecture/manager/LectureServiceImpl.java   |  52 +++++
 .../lecture/model/IdentityRateWarning.java    |  53 +++++
 .../model/LectureBlockIdentityStatistics.java |  24 +++
 .../LectureStatisticsSearchParameters.java    |  18 ++
 ...positoryEntryLectureConfigurationImpl.java |   5 +-
 .../ui/LectureSettingsAdminController.java    |  31 ++-
 ...ParticipantLecturesOverviewController.java |  22 +-
 .../ui/_i18n/LocalStrings_de.properties       |   1 +
 .../ui/_i18n/LocalStrings_en.properties       |   1 +
 .../coach/LecturesSearchFormController.java   |   4 +-
 .../database/mysql/alter_13_1_x_to_13_2_0.sql |   5 +
 .../database/mysql/setupDatabase.sql          |   2 +
 .../oracle/alter_13_1_x_to_13_2_0.sql         |   5 +
 .../database/oracle/setupDatabase.sql         |   2 +
 .../postgresql/alter_13_1_x_to_13_2_0.sql     |   6 +
 .../database/postgresql/setupDatabase.sql     |   2 +
 .../manager/AssessmentModeManagerTest.java    |  10 +-
 .../curriculum/manager/CurriculumDAOTest.java |  51 ++++-
 .../manager/CurriculumElementDAOTest.java     |  94 ++++----
 ...rriculumElementToTaxonomyLevelDAOTest.java |   9 +-
 .../manager/CurriculumMemberQueriesTest.java  |   4 +-
 ...riculumRepositoryEntryRelationDAOTest.java |  73 ++++++-
 .../manager/CurriculumServiceTest.java        |   4 +-
 .../manager/AnalysisFilterDAOTest.java        |  19 +-
 .../modules/quality/data/ExampleData.java     |   4 +-
 .../CurriculumElementHandlerTest.java         |   5 +-
 .../CourseLecturesProviderDAOTest.java        |   7 +-
 .../CurriculumElementProviderDAOTest.java     |  47 ++--
 ...culumElementQualityContextBuilderTest.java |  15 +-
 .../quality/manager/QualityTestHelper.java    |   3 +-
 ...ositoryEntryQualityContextBuilderTest.java |  27 +--
 .../CurriculumElementsWebServiceTest.java     | 118 ++++++----
 .../restapi/CurriculumsWebServiceTest.java    |   7 +-
 .../org/olat/restapi/LecturesBlocksTest.java  |   5 +-
 79 files changed, 1764 insertions(+), 229 deletions(-)
 create mode 100644 src/main/java/org/olat/modules/curriculum/CurriculumLectures.java
 create mode 100644 src/main/java/org/olat/modules/curriculum/site/CurriculumManagerAndOwnerSecurityCallback.java
 create mode 100644 src/main/java/org/olat/modules/curriculum/ui/lectures/CurriculumElementLecturesController.java
 create mode 100644 src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListController.java
 create mode 100644 src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListDataModel.java
 create mode 100644 src/main/java/org/olat/modules/curriculum/ui/lectures/RateExplicitWarningCellRenderer.java
 create mode 100644 src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures.html
 create mode 100644 src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures_table.html
 create mode 100644 src/main/java/org/olat/modules/lecture/LectureRateWarning.java
 create mode 100644 src/main/java/org/olat/modules/lecture/model/IdentityRateWarning.java

diff --git a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_de.properties
index 0de1aca487d..10cdf153d91 100644
--- a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_de.properties
@@ -13,6 +13,7 @@ CourseSiteDef4=Infoseite n\u00b04
 CourseSiteDef=Infoseite n\u00b01
 courseSiteForbiddenAlt=Forbidden ctrl.
 CurriculumAdminSiteDef=Curriculumverwaltung
+curriculumManagerAndOwnerSiteSecurityCallback=Curriculumverwalter und Kursbesitzer
 curriculumManagerSiteSecurityCallback=Curriculumverwalter
 defaultSiteSecurityCallback=Alle inklusive G\u00e4ste und eP-Einladung
 disabledSiteSecurityCallback=Deaktiviert
diff --git a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_en.properties
index 196578ec9ea..e36579aa971 100644
--- a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_en.properties
@@ -25,6 +25,7 @@ adminSiteSecurityCallback=Administrators only
 authorAndPoolPrivateMembersSiteSecurityCallback=Authors, question bank admins and members
 catalogManagerSiteSecurityCallback=Catalog manager and learning resource managers
 courseSiteForbiddenAlt=Forbidden ctrl.
+curriculumManagerAndOwnerSiteSecurityCallback=Curriculum managers and course owners
 curriculumManagerSiteSecurityCallback=Curriculum managers
 defaultSiteSecurityCallback=All, including guests and invitee
 disabledSiteSecurityCallback=Disabled
diff --git a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_fr.properties
index 334e2adf1fd..d5e11ac3e26 100644
--- a/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/admin/site/ui/_i18n/LocalStrings_fr.properties
@@ -27,6 +27,7 @@ adminSiteSecurityCallback=Administrateurs
 authorAndPoolPrivateMembersSiteSecurityCallback=Auteurs, membres et administrateurs de pool de questions
 catalogManagerSiteSecurityCallback=Administrateurs du catalogue et des ressources didactiques
 courseSiteForbiddenAlt=Acc\u00E8s interdit
+curriculumManagerAndOwnerSiteSecurityCallback=Administrateurs de cursus et propri\u00E9taires de cours
 curriculumManagerSiteSecurityCallback=Administrateurs de cursus
 defaultSiteSecurityCallback=Tous y compris les invit\u00E9 et les invitations eP
 disabledSiteSecurityCallback=D\u00E9sactiv\u00E9
diff --git a/src/main/java/org/olat/admin/user/UserAdminController.java b/src/main/java/org/olat/admin/user/UserAdminController.java
index 160cc6224a1..1d8ba29c59a 100644
--- a/src/main/java/org/olat/admin/user/UserAdminController.java
+++ b/src/main/java/org/olat/admin/user/UserAdminController.java
@@ -465,7 +465,7 @@ public class UserAdminController extends BasicController implements Activateable
 
 		if(lectureModule.isEnabled() && (isUserManagerOf || isRolesManagerOf || isAdminOf || isPrincipalOf)) {
 			userTabP.addTab(translate(NLS_VIEW_LECTURES),  uureq -> {
-				lecturesCtrl = new ParticipantLecturesOverviewController(uureq, getWindowControl(), identity, true, true, true, true);
+				lecturesCtrl = new ParticipantLecturesOverviewController(uureq, getWindowControl(), identity, null, true, true, true, true);
 				listenTo(lecturesCtrl);
 				BreadcrumbedStackedPanel lecturesPanel = new BreadcrumbedStackedPanel("lectures", getTranslator(), lecturesCtrl);
 				lecturesPanel.pushController(translate(NLS_VIEW_LECTURES), lecturesCtrl);
diff --git a/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml b/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml
index 71b81df51d9..21f00246996 100644
--- a/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml
+++ b/src/main/java/org/olat/core/gui/control/_spring/sitedefContext.xml
@@ -91,7 +91,7 @@
 	<bean id="olatsites_curriculumadmin" class="org.olat.modules.curriculum.site.CurriculumAdminSiteDef">
 	   <property name="order" value="12" />
 	   <property name="enabled" value="${site.catalogadmin.enable}"/>
-	   	<property name="defaultSiteSecurityCallbackBeanId" value="curriculumManagerSiteSecurityCallback"/>
+	   	<property name="defaultSiteSecurityCallbackBeanId" value="curriculumManagerAndOwnerSiteSecurityCallback"/>
 	</bean>
 	<bean id="olatsites_quality" class="org.olat.modules.quality.site.QualitySiteDef">
 	   <property name="order" value="13" />
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumElement.java b/src/main/java/org/olat/modules/curriculum/CurriculumElement.java
index 77de539a124..b514cfbda48 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumElement.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumElement.java
@@ -56,10 +56,20 @@ public interface CurriculumElement extends CurriculumElementShort, CreateInfo, M
 	
 	public void setEndDate(Date date);
 	
+	/**
+	 * @return true if calendars aggregation is available at this level of the curriculum
+	 */
 	public CurriculumCalendars getCalendars();
 
 	public void setCalendars(CurriculumCalendars calendars);
 	
+	/**
+	 * @return true if absence management aggregation is available at this level of the curriculum
+	 */
+	public CurriculumLectures getLectures();
+	
+	public void setLectures(CurriculumLectures lectures);
+	
 	public CurriculumElementStatus getElementStatus();
 	
 	public void setElementStatus(CurriculumElementStatus status);
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumElementManagedFlag.java b/src/main/java/org/olat/modules/curriculum/CurriculumElementManagedFlag.java
index afd53b2b622..81e3f5dba55 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumElementManagedFlag.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumElementManagedFlag.java
@@ -42,6 +42,7 @@ public enum CurriculumElementManagedFlag {
 	 dates(all),
 	 type(all),
 	 calendars(all),
+	 lectures(all),
 	 members(all),
 	 resources(all),
 	 move(all),
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumElementType.java b/src/main/java/org/olat/modules/curriculum/CurriculumElementType.java
index 53847223e12..ba09cd433f2 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumElementType.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumElementType.java
@@ -52,10 +52,20 @@ public interface CurriculumElementType extends CurriculumElementTypeRef, CreateI
 	
 	public void setExternalId(String externalId);
 
+	/**
+	 * @return true if calendars aggregation is available for curriculum elements of this type.
+	 */
 	public CurriculumCalendars getCalendars();
 	
 	public void setCalendars(CurriculumCalendars calendars);
 	
+	/**
+	 * @return true if absence management aggregation is available for curriculum elements of this type.
+	 */
+	public CurriculumLectures getLectures();
+	
+	public void setLectures(CurriculumLectures lectures);
+	
 	public CurriculumElementTypeManagedFlag[] getManagedFlags();
 	
 	public void setManagedFlags(CurriculumElementTypeManagedFlag[] flags);
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumElementTypeManagedFlag.java b/src/main/java/org/olat/modules/curriculum/CurriculumElementTypeManagedFlag.java
index 4d288254718..46bace53317 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumElementTypeManagedFlag.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumElementTypeManagedFlag.java
@@ -41,6 +41,7 @@ public enum CurriculumElementTypeManagedFlag {
 	 description(all),
 	 externalId(all),
 	 calendars(all),
+	 lectures(all),
 	 subTypes(all),
 	 copy(all),
 	 delete(all);
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumLectures.java b/src/main/java/org/olat/modules/curriculum/CurriculumLectures.java
new file mode 100644
index 00000000000..5a81c42a518
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumLectures.java
@@ -0,0 +1,34 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.curriculum;
+
+/**
+ * 
+ * Initial date: 13 févr. 2019<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public enum CurriculumLectures {
+	
+	enabled,
+	disabled,
+	inherited
+
+}
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallback.java b/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallback.java
index 0f0cbeff7f0..61ab3e77756 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallback.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallback.java
@@ -43,6 +43,7 @@ public interface CurriculumSecurityCallback {
 	
 	public boolean canViewAllCalendars();
 	
+	public boolean canViewAllLectures();
 	
 
 }
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallbackFactory.java b/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallbackFactory.java
index 54aedc5fb49..5fa97c42b9a 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallbackFactory.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumSecurityCallbackFactory.java
@@ -45,6 +45,10 @@ public class CurriculumSecurityCallbackFactory {
 		return new DefaultCurriculumSecurityCallback(admin);
 	}
 	
+	public static final CurriculumSecurityCallback createCallback(boolean canManage) {
+		return new DefaultCurriculumSecurityCallback(canManage);
+	}
+	
 	private static class DefaultCurriculumSecurityCallback implements CurriculumSecurityCallback {
 		
 		private final boolean admin;
@@ -92,5 +96,10 @@ public class CurriculumSecurityCallbackFactory {
 		public boolean canViewAllCalendars() {
 			return admin;
 		}
+
+		@Override
+		public boolean canViewAllLectures() {
+			return admin;
+		}
 	}
 }
diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumService.java b/src/main/java/org/olat/modules/curriculum/CurriculumService.java
index 7d6742c3955..b5e701b38e3 100644
--- a/src/main/java/org/olat/modules/curriculum/CurriculumService.java
+++ b/src/main/java/org/olat/modules/curriculum/CurriculumService.java
@@ -120,6 +120,13 @@ public interface CurriculumService {
 	 */
 	public boolean isCurriculumManager(IdentityRef identity);
 	
+	/**
+	 * @param identity The identity
+	 * @return true if the identity is manager of at least one curriculum or
+	 * 		is course owner of a course in a curriculum.
+	 */
+	public boolean isCurriculumManagerOrOwner(IdentityRef identity);
+	
 	/**
 	 * Add a member to the curriculum with the specified role.
 	 * 
@@ -206,7 +213,8 @@ public interface CurriculumService {
 	
 	
 	public CurriculumElement createCurriculumElement(String identifier, String displayName, Date beginDate, Date endDate,
-			CurriculumElementRef parent, CurriculumElementType elementType, CurriculumCalendars calendars, Curriculum curriculum);
+			CurriculumElementRef parent, CurriculumElementType elementType, CurriculumCalendars calendars,
+			CurriculumLectures lectures, Curriculum curriculum);
 	
 	
 	public CurriculumElement getCurriculumElement(CurriculumElementRef element);
@@ -374,6 +382,16 @@ public interface CurriculumService {
 	 */
 	public List<RepositoryEntry> getRepositoryEntriesWithDescendants(CurriculumElement element);
 	
+	/**
+	 * The all list of repository entries hold by the specified curriculum element and
+	 * its descendants elements, reduced to the
+	 * 
+	 * @param element The curriculum element
+	 * @param identity Specify the identity to check the permissions of the repository entries
+	 * @return A list of repository entries with lectures enabled
+	 */
+	public List<RepositoryEntry> getRepositoryEntriesWithLecturesAndDescendants(CurriculumElement element, Identity identity);
+	
 	/**
 	 * Check if the repository entry is already in relation with the specified
 	 * curriculum element.
diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java
index 66be9200302..4b925a44234 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java
@@ -224,13 +224,33 @@ public class CurriculumDAO {
 			sb.append(")");	
 		}
 		
-		if(params.getManagerIdentity() != null) {
+		if(params.getOwnerIdentity() != null || params.getManagerIdentity() != null) {
 			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 membership.group.key=organis.group.key)")
-			  .append("  and role in ('").append(CurriculumRoles.curriculummanager).append("','").append(OrganisationRoles.administrator).append("','").append(OrganisationRoles.principal).append("')")
-			  .append(")");
+			  .append("(");
+		
+			if(params.getOwnerIdentity() != null) {
+				sb.append("exists (select courseMembership.key from curriculumelement as courseCurEl")
+				  .append(" inner join repoentrytogroup as curRelGroup on (courseCurEl.group.key=curRelGroup.group.key)")
+				  .append(" inner join repoentrytogroup as courseRelGroup on (courseRelGroup.entry.key=curRelGroup.entry.key)")
+				  .append(" inner join courseRelGroup.group as courseBaseGroup")
+				  .append(" inner join courseBaseGroup.members as courseMembership")
+				  .append(" where courseMembership.identity.key=:ownerKey and courseMembership.role='").append(GroupRoles.owner.name()).append("'")
+				  .append(" and courseCurEl.curriculum.key=cur.key")
+				  .append(")");
+			}
+			
+			if(params.getManagerIdentity() != null) {
+				if(params.getOwnerIdentity() != null) {
+					sb.append(" or ");
+				}
+				sb.append("exists (select membership.key from bgroupmember as membership")
+				  .append("  where membership.identity.key=:managerKey")
+				  .append("  and (membership.group.key=baseGroup.key or membership.group.key=organis.group.key)")
+				  .append("  and role in ('").append(CurriculumRoles.curriculummanager).append("','").append(OrganisationRoles.administrator).append("','").append(OrganisationRoles.principal).append("')")
+				  .append(")");
+			}
+			
+			sb.append(")");
 		}
 
 		TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager()
@@ -252,6 +272,9 @@ public class CurriculumDAO {
 		if(params.getManagerIdentity() != null) {
 			query.setParameter("managerKey", params.getManagerIdentity().getKey());
 		}
+		if(params.getOwnerIdentity() != null) {
+			query.setParameter("ownerKey", params.getOwnerIdentity().getKey());
+		}
 		
 		List<Object[]> rawObjects = query.getResultList();
 		List<CurriculumInfos> infos = new ArrayList<>(rawObjects.size());
@@ -288,7 +311,7 @@ public class CurriculumDAO {
 		sb.append("select cur.key from curriculum cur")
 		  .append(" inner join cur.group baseGroup")
 		  .append(" left join baseGroup.members membership")
-		  .append(" where membership.identity.key=:identityKey and membership.role =:role");
+		  .append(" where membership.identity.key=:identityKey and membership.role=:role");
 		List<Long> has = dbInstance.getCurrentEntityManager()
 				.createQuery(sb.toString(), Long.class)
 				.setParameter("identityKey", identity.getKey())
@@ -299,6 +322,25 @@ public class CurriculumDAO {
 		return has != null && !has.isEmpty() && has.get(0) != null;
 	}
 	
+	public boolean hasOwnerRoleInCurriculum(IdentityRef identity) {
+		StringBuilder sb = new StringBuilder(256);
+		sb.append("select v.key from repositoryentry v")
+		  .append(" inner join v.groups as relGroup")
+		  .append(" inner join relGroup.group as baseGroup")
+		  .append(" inner join baseGroup.members as membership")
+		  .append(" inner join v.groups as curriculumRelGroup")
+		  .append(" inner join curriculumelement as curEl on (curEl.group.key = curriculumRelGroup.group.key)")
+		  .append(" where membership.identity.key=:identityKey and membership.role=:role");
+		List<Long> has = dbInstance.getCurrentEntityManager()
+				.createQuery(sb.toString(), Long.class)
+				.setParameter("identityKey", identity.getKey())
+				.setParameter("role", GroupRoles.owner.name())
+				.setFirstResult(0)
+				.setMaxResults(1)
+				.getResultList();
+		return has != null && !has.isEmpty() && has.get(0) != null;
+	}
+	
 	public boolean hasRoleExpanded(CurriculumRef curriculum, IdentityRef identity, String... roles) {
 		List<String> roleList = GroupRoles.toList(roles);
 		StringBuilder sb = new StringBuilder(256);
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 65891aef67d..b40c22bb9b9 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java
@@ -53,6 +53,7 @@ import org.olat.modules.curriculum.CurriculumElementMembership;
 import org.olat.modules.curriculum.CurriculumElementRef;
 import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRef;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.model.CurriculumElementImpl;
@@ -79,7 +80,8 @@ public class CurriculumElementDAO {
 	private GroupDAO groupDao;
 	
 	public CurriculumElement createCurriculumElement(String identifier, String displayName, Date beginDate, Date endDate,
-			CurriculumElementRef parentRef, CurriculumElementType elementType, CurriculumCalendars calendars, Curriculum curriculum) {
+			CurriculumElementRef parentRef, CurriculumElementType elementType,
+			CurriculumCalendars calendars, CurriculumLectures lectures, Curriculum curriculum) {
 		CurriculumElementImpl element = new CurriculumElementImpl();
 		element.setCreationDate(new Date());
 		element.setLastModified(element.getCreationDate());
@@ -90,6 +92,7 @@ public class CurriculumElementDAO {
 		element.setCurriculum(curriculum);
 		element.setType(elementType);
 		element.setCalendars(calendars);
+		element.setLectures(lectures);
 		element.setStatus(CurriculumElementStatus.active.name());
 		element.setGroup(groupDao.createGroup());
 		CurriculumElement parent = parentRef == null ? null : loadByKey(parentRef.getKey());
diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAO.java
index fd20d7f4a8e..9cd09101beb 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAO.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAO.java
@@ -28,7 +28,9 @@ import java.util.stream.Collectors;
 
 import javax.persistence.TypedQuery;
 
+import org.olat.basesecurity.GroupRoles;
 import org.olat.basesecurity.IdentityRef;
+import org.olat.basesecurity.OrganisationRoles;
 import org.olat.core.commons.persistence.DB;
 import org.olat.core.commons.persistence.QueryBuilder;
 import org.olat.core.id.Identity;
@@ -69,7 +71,8 @@ public class CurriculumRepositoryEntryRelationDAO {
 			.getResultList();
 	}
 	
-	public List<RepositoryEntry> getRepositoryEntries(List<CurriculumElementRef> elements, RepositoryEntryStatusEnum[] status) {
+	public List<RepositoryEntry> getRepositoryEntries(List<CurriculumElementRef> elements, RepositoryEntryStatusEnum[] status,
+			boolean onlyWithLectures, IdentityRef identity) {
 		if(elements == null || elements.isEmpty()) return new ArrayList<>();
 		
 		QueryBuilder sb = new QueryBuilder(256);
@@ -80,13 +83,27 @@ public class CurriculumRepositoryEntryRelationDAO {
 		  .append(" inner join v.groups as rel")
 		  .append(" inner join curriculumelement as el on (el.group.key=rel.group.key)")
 		  .append(" where el.key in (:elementKeys) and v.status ").in(status);
+		if(onlyWithLectures) {
+			sb.append(" and exists (select lectureConfig.key from lectureentryconfig as lectureConfig")
+			  .append("  where lectureConfig.entry.key=v.key and lectureConfig.lectureEnabled=true")
+			  .append(" )");
+		}
+		if(identity != null) {
+			sb.append(" and exists (select rel.entry.key from repoentrytogroup as rel, bgroupmember as membership")
+			  .append("  where rel.group.key=membership.group.key and rel.entry.key=v.key and membership.identity.key=:identityKey")
+			  .append("  and membership.role ").in(OrganisationRoles.administrator, OrganisationRoles.principal, OrganisationRoles.learnresourcemanager, GroupRoles.owner)
+			  .append(" )");
+		}
 		
 		List<Long> elementKeys = elements
 				.stream().map(CurriculumElementRef::getKey).collect(Collectors.toList());
-		return dbInstance.getCurrentEntityManager()
+		TypedQuery<RepositoryEntry> query = dbInstance.getCurrentEntityManager()
 			.createQuery(sb.toString(), RepositoryEntry.class)
-			.setParameter("elementKeys", elementKeys)
-			.getResultList();
+			.setParameter("elementKeys", elementKeys);
+		if(identity != null) {
+			query.setParameter("identityKey", identity.getKey());
+		}
+		return query.getResultList();
 	}
 	
 	public List<CurriculumElementWebDAVInfos> getCurriculumElementInfosForWebDAV(IdentityRef identity, List<String> roles) {
diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java
index 4abe2380333..a442c74b933 100644
--- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java
+++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java
@@ -52,6 +52,7 @@ import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementType;
 import org.olat.modules.curriculum.CurriculumElementTypeRef;
 import org.olat.modules.curriculum.CurriculumElementTypeToType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRef;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
@@ -154,6 +155,12 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat
 		return curriculumDao.hasCurriculumRole(identity, CurriculumRoles.curriculummanager.name());
 	}
 
+	@Override
+	public boolean isCurriculumManagerOrOwner(IdentityRef identity) {
+		return curriculumDao.hasCurriculumRole(identity, CurriculumRoles.curriculummanager.name())
+				|| curriculumDao.hasOwnerRoleInCurriculum(identity);
+	}
+
 	@Override
 	public void addMember(Curriculum curriculum, Identity identity, CurriculumRoles role) {
 		if(!groupDao.hasRole(curriculum.getGroup(), identity, role.name())) {
@@ -247,8 +254,9 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat
 
 	@Override
 	public CurriculumElement createCurriculumElement(String identifier, String displayName, Date beginDate, Date endDate,
-			CurriculumElementRef parentRef, CurriculumElementType elementType, CurriculumCalendars calendars, Curriculum curriculum) {
-		return curriculumElementDao.createCurriculumElement(identifier, displayName, beginDate, endDate, parentRef, elementType, calendars, curriculum);
+			CurriculumElementRef parentRef, CurriculumElementType elementType,
+			CurriculumCalendars calendars, CurriculumLectures lectures, Curriculum curriculum) {
+		return curriculumElementDao.createCurriculumElement(identifier, displayName, beginDate, endDate, parentRef, elementType, calendars, lectures, curriculum);
 	}
 
 	@Override
@@ -457,7 +465,8 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat
 	@Override
 	public List<RepositoryEntry> getRepositoryEntries(CurriculumElementRef element) {
 		List<CurriculumElementRef> elements = Collections.singletonList(element);
-		return curriculumRepositoryEntryRelationDao.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed());
+		return curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed(), false, null);
 	}
 
 	@Override
@@ -465,7 +474,17 @@ public class CurriculumServiceImpl implements CurriculumService, OrganisationDat
 		List<CurriculumElement> descendants = curriculumElementDao.getDescendants(element);
 		descendants.add(element);
 		List<CurriculumElementRef> descendantRefs = new ArrayList<>(descendants);
-		return curriculumRepositoryEntryRelationDao.getRepositoryEntries(descendantRefs, RepositoryEntryStatusEnum.preparationToClosed());
+		return curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(descendantRefs, RepositoryEntryStatusEnum.preparationToClosed(), false, null);
+	}
+
+	@Override
+	public List<RepositoryEntry> getRepositoryEntriesWithLecturesAndDescendants(CurriculumElement element, Identity identity) {
+		List<CurriculumElement> descendants = curriculumElementDao.getDescendants(element);
+		descendants.add(element);
+		List<CurriculumElementRef> descendantRefs = new ArrayList<>(descendants);
+		return curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(descendantRefs, RepositoryEntryStatusEnum.preparationToClosed(), true, identity);
 	}
 
 	@Override
diff --git a/src/main/java/org/olat/modules/curriculum/model/CurriculumElementImpl.java b/src/main/java/org/olat/modules/curriculum/model/CurriculumElementImpl.java
index c0529d2acbe..61f3fe499bf 100644
--- a/src/main/java/org/olat/modules/curriculum/model/CurriculumElementImpl.java
+++ b/src/main/java/org/olat/modules/curriculum/model/CurriculumElementImpl.java
@@ -53,6 +53,7 @@ import org.olat.modules.curriculum.CurriculumElementManagedFlag;
 import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementToTaxonomyLevel;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 
 /**
  * 
@@ -91,6 +92,8 @@ public class CurriculumElementImpl implements CurriculumElement, Persistable {
 	private String description;
 	@Column(name="c_calendars", nullable=true, insertable=true, updatable=true)
 	private String calendarsEnabledString;
+	@Column(name="c_lectures", nullable=true, insertable=true, updatable=true)
+	private String lecturesEnabledString;
 	
 	@Column(name="c_status", nullable=true, insertable=true, updatable=true)
 	private String status;
@@ -222,6 +225,35 @@ public class CurriculumElementImpl implements CurriculumElement, Persistable {
 			calendarsEnabledString = calendars.name();
 		}
 	}
+	public String getLecturesEnabled() {
+		return lecturesEnabledString;
+	}
+
+	public void setLecturesEnabled(String lecturesEnabledString) {
+		this.lecturesEnabledString = lecturesEnabledString;
+	}
+
+	@Override
+	public CurriculumLectures getLectures() {
+		CurriculumLectures enabled;
+		if(StringHelper.containsNonWhitespace(lecturesEnabledString)) {
+			enabled = CurriculumLectures.valueOf(lecturesEnabledString);
+		} else if(this.type != null) {
+			enabled = CurriculumLectures.inherited;
+		} else {
+			enabled = CurriculumLectures.disabled;
+		}
+		return enabled;
+	}
+
+	@Override
+	public void setLectures(CurriculumLectures lectures) {
+		if(lectures == null) {
+			lecturesEnabledString = null;
+		} else {
+			lecturesEnabledString = lectures.name();
+		}
+	}
 
 	@Override
 	@Transient
diff --git a/src/main/java/org/olat/modules/curriculum/model/CurriculumElementTypeImpl.java b/src/main/java/org/olat/modules/curriculum/model/CurriculumElementTypeImpl.java
index fb79e64a9f8..0739db59d14 100644
--- a/src/main/java/org/olat/modules/curriculum/model/CurriculumElementTypeImpl.java
+++ b/src/main/java/org/olat/modules/curriculum/model/CurriculumElementTypeImpl.java
@@ -42,6 +42,7 @@ import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElementType;
 import org.olat.modules.curriculum.CurriculumElementTypeManagedFlag;
 import org.olat.modules.curriculum.CurriculumElementTypeToType;
+import org.olat.modules.curriculum.CurriculumLectures;
 
 /**
  * 
@@ -83,6 +84,8 @@ public class CurriculumElementTypeImpl implements Persistable, CurriculumElement
 	private String managedFlagsString;
 	@Column(name="c_calendars", nullable=true, insertable=true, updatable=true)
 	private String calendarsEnabledString;
+	@Column(name="c_lectures", nullable=true, insertable=true, updatable=true)
+	private String lecturesEnabledString;
 	
 	@OneToMany(targetEntity=CurriculumElementTypeToTypeImpl.class, fetch=FetchType.LAZY,
 			orphanRemoval=true, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
@@ -190,6 +193,29 @@ public class CurriculumElementTypeImpl implements Persistable, CurriculumElement
 		}
 	}
 
+	public String getLecturesEnabled() {
+		return lecturesEnabledString;
+	}
+
+	public void setLecturesEnabled(String lecturesEnabledString) {
+		this.lecturesEnabledString = lecturesEnabledString;
+	}
+
+	@Override
+	public CurriculumLectures getLectures() {
+		return StringHelper.containsNonWhitespace(lecturesEnabledString)
+				? CurriculumLectures.valueOf(lecturesEnabledString): CurriculumLectures.disabled;
+	}
+
+	@Override
+	public void setLectures(CurriculumLectures lectures) {
+		if(lectures == null) {
+			lecturesEnabledString = null;
+		} else {
+			lecturesEnabledString = lectures.name();
+		}
+	}
+
 	public String getManagedFlagsString() {
 		return managedFlagsString;
 	}
diff --git a/src/main/java/org/olat/modules/curriculum/model/CurriculumInfos.java b/src/main/java/org/olat/modules/curriculum/model/CurriculumInfos.java
index a21b2ac9681..e0c805fbfd0 100644
--- a/src/main/java/org/olat/modules/curriculum/model/CurriculumInfos.java
+++ b/src/main/java/org/olat/modules/curriculum/model/CurriculumInfos.java
@@ -44,4 +44,22 @@ public class CurriculumInfos {
 	public long getNumOfElements() {
 		return numOfElements;
 	}
+	
+
+	@Override
+	public int hashCode() {
+		return curriculum.getKey().hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if(this == obj) {
+			return true;
+		}
+		if(obj instanceof CurriculumInfos) {
+			CurriculumInfos infos = (CurriculumInfos)obj;
+			return curriculum.equals(infos.curriculum);
+		}
+		return false;
+	}
 }
diff --git a/src/main/java/org/olat/modules/curriculum/model/CurriculumSearchParameters.java b/src/main/java/org/olat/modules/curriculum/model/CurriculumSearchParameters.java
index ace5ff03500..872ed15cba5 100644
--- a/src/main/java/org/olat/modules/curriculum/model/CurriculumSearchParameters.java
+++ b/src/main/java/org/olat/modules/curriculum/model/CurriculumSearchParameters.java
@@ -34,6 +34,7 @@ import org.olat.core.id.OrganisationRef;
 public class CurriculumSearchParameters {
 	
 	private String searchString;
+	private Identity ownerIdentity;
 	private Identity managerIdentity;
 	private List<? extends OrganisationRef> organisations;
 
@@ -63,4 +64,12 @@ public class CurriculumSearchParameters {
 	public void setManagerIdentity(Identity managerIdentity) {
 		this.managerIdentity = managerIdentity;
 	}
+
+	public Identity getOwnerIdentity() {
+		return ownerIdentity;
+	}
+
+	public void setOwnerIdentity(Identity ownerIdentity) {
+		this.ownerIdentity = ownerIdentity;
+	}
 }
diff --git a/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java b/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java
index 3cb48a23937..9951ee53814 100644
--- a/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java
+++ b/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java
@@ -50,6 +50,7 @@ import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementManagedFlag;
 import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.manager.CurriculumElementToTaxonomyLevelDAO;
@@ -245,7 +246,8 @@ public class CurriculumElementsWebService {
 		boolean move = false;
 		if(curriculumElement.getKey() == null) {
 			elementToSave = curriculumService.createCurriculumElement(curriculumElement.getIdentifier(), curriculumElement.getDisplayName(),
-					curriculumElement.getBeginDate(), curriculumElement.getEndDate(), parentElement, type, CurriculumCalendars.disabled, curriculum);
+					curriculumElement.getBeginDate(), curriculumElement.getEndDate(), parentElement, type,
+					CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		} else {
 			elementToSave = curriculumService.getCurriculumElement(new CurriculumElementRefImpl(curriculumElement.getKey()));
 			elementToSave.setDisplayName(curriculumElement.getDisplayName());
diff --git a/src/main/java/org/olat/modules/curriculum/site/CurriculumManagerAndOwnerSecurityCallback.java b/src/main/java/org/olat/modules/curriculum/site/CurriculumManagerAndOwnerSecurityCallback.java
new file mode 100644
index 00000000000..7231ff054d8
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/site/CurriculumManagerAndOwnerSecurityCallback.java
@@ -0,0 +1,51 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.curriculum.site;
+
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.control.navigation.SiteSecurityCallback;
+import org.olat.core.id.Roles;
+import org.olat.core.util.UserSession;
+import org.olat.modules.curriculum.CurriculumService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 
+ * Initial date: 12 févr. 2018<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+@Service("curriculumManagerAndOwnerSiteSecurityCallback")
+public class CurriculumManagerAndOwnerSecurityCallback implements SiteSecurityCallback {
+	
+	@Autowired
+	private CurriculumService curriculumService;
+
+	@Override
+	public boolean isAllowedToLaunchSite(UserRequest ureq) {
+		UserSession usess = ureq.getUserSession();
+		if(usess == null ) return false;
+		
+		Roles roles = usess.getRoles();
+		return roles != null && (roles.isAdministrator() || roles.isPrincipal() || roles.isCurriculumManager()
+				|| curriculumService.isCurriculumManagerOrOwner(ureq.getIdentity()));
+	}
+}
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
index 0d7a6dfeb1d..c42c14c7395 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerController.java
@@ -85,6 +85,7 @@ import org.olat.modules.curriculum.model.CurriculumElementInfos;
 import org.olat.modules.curriculum.model.CurriculumElementMembershipChange;
 import org.olat.modules.curriculum.ui.CurriculumComposerTableModel.ElementCols;
 import org.olat.modules.curriculum.ui.event.SelectReferenceEvent;
+import org.olat.modules.curriculum.ui.lectures.CurriculumElementLecturesController;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryRef;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -116,6 +117,7 @@ public class CurriculumComposerController extends FormBasicController implements
 	private MoveCurriculumElementController moveElementCtrl;
 	private ConfirmCurriculumElementDeleteController confirmDeleteCtrl;
 	private CurriculumElementCalendarController calendarsCtrl;
+	private CurriculumElementLecturesController lecturesCtrl;
 	
 	private int counter;
 	private final boolean managed;
@@ -192,6 +194,7 @@ public class CurriculumComposerController extends FormBasicController implements
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, ElementCols.numOfCoaches, "members"));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, ElementCols.numOfOwners, "members"));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ElementCols.calendars));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(ElementCols.lectures));
 
 		DefaultFlexiColumnModel zoomColumn = new DefaultFlexiColumnModel("zoom", translate("zoom"), "tt-focus");
 		zoomColumn.setExportable(false);
@@ -311,6 +314,13 @@ public class CurriculumComposerController extends FormBasicController implements
 			row.setCalendarsLink(calendarsLink);
 			calendarsLink.setUserObject(row);
 		}
+		if(row.isLecturesEnabled()) {
+			FormLink lecturesLink = uifactory.addFormLink("lecs_" + (++counter), "lectures", "lectures", null, null, Link.LINK);
+			lecturesLink.setIconLeftCSS("o_icon o_icon_lecture o_icon-fw");
+			row.setLecturesLink(lecturesLink);
+			lecturesLink.setUserObject(row);
+		}
+		
 		return row;
 	}
 	
@@ -421,7 +431,8 @@ public class CurriculumComposerController extends FormBasicController implements
 				doOpenReferences(ureq, (CurriculumElementRow)link.getUserObject(), link);
 			} else if("calendars".equals(cmd)) {
 				doOpenCalendars(ureq, (CurriculumElementRow)link.getUserObject());
-				
+			} else if("lectures".equals(cmd)) {
+				doOpenLectures(ureq, (CurriculumElementRow)link.getUserObject());
 			}
 		}
 		super.formInnerEvent(ureq, source, event);
@@ -597,6 +608,18 @@ public class CurriculumComposerController extends FormBasicController implements
 		toolbarPanel.pushController(translate("calendars"), calendarsCtrl);
 	}
 	
+	private void doOpenLectures(UserRequest ureq, CurriculumElementRow row) {
+		removeAsListenerAndDispose(lecturesCtrl);
+		
+		OLATResourceable ores = OresHelper.createOLATResourceableInstance("Lectures", row.getKey());
+		WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(ores, null, getWindowControl());
+		CurriculumElement curriculumElement = curriculumService.getCurriculumElement(row);
+		lecturesCtrl = new CurriculumElementLecturesController(ureq, bwControl, toolbarPanel, curriculumElement, secCallback);
+		listenTo(lecturesCtrl);
+		toolbarPanel.pushController(row.getDisplayName(), null, row);
+		toolbarPanel.pushController(translate("lectures"), lecturesCtrl);
+	}
+	
 	private void doConfirmDelete(UserRequest ureq, CurriculumElementRow row) {
 		if(confirmDeleteCtrl != null) return;
 		
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java
index 3751bff2e3c..3cf02143995 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumComposerTableModel.java
@@ -187,6 +187,7 @@ public class CurriculumComposerTableModel extends DefaultFlexiTreeTableDataModel
 			case numOfCoaches: return element.getNumOfCoaches();
 			case numOfOwners: return element.getNumOfOwners();
 			case calendars: return element.getCalendarsLink();
+			case lectures: return element.getLecturesLink();
 			default: return "ERROR";
 		}
 	}
@@ -210,6 +211,7 @@ public class CurriculumComposerTableModel extends DefaultFlexiTreeTableDataModel
 		numOfCoaches("table.header.num.of.coaches"),
 		numOfOwners("table.header.num.of.owners"),
 		calendars("table.header.calendars"),
+		lectures("table.header.lectures"),
 		status("table.header.status"),
 		tools("table.header.tools");
 		
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementRow.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementRow.java
index f61dab02fcb..3fcdcfb9928 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementRow.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementRow.java
@@ -28,6 +28,7 @@ import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementRef;
 import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 
 /**
  * 
@@ -49,6 +50,7 @@ public class CurriculumElementRow implements CurriculumElementRef, FlexiTreeTabl
 	
 	private final FormLink toolsLink;
 	private final FormLink resourcesLink;
+	private FormLink lecturesLink;
 	private FormLink calendarsLink;
 	
 	private boolean acceptedByFilter = true;
@@ -132,6 +134,18 @@ public class CurriculumElementRow implements CurriculumElementRef, FlexiTreeTabl
 		}
 		return enabled;
 	}
+	
+	public boolean isLecturesEnabled() {
+		boolean enabled = false;
+		if(element != null) {
+			if(element.getLectures() == CurriculumLectures.enabled) {
+				enabled = true;
+			} else if(element.getLectures() == CurriculumLectures.inherited && elementType != null) {
+				enabled = elementType.getLectures() == CurriculumLectures.enabled;
+			}
+		}
+		return enabled;
+	}
 
 	public boolean isAcceptedByFilter() {
 		return acceptedByFilter;
@@ -206,6 +220,14 @@ public class CurriculumElementRow implements CurriculumElementRef, FlexiTreeTabl
 		this.calendarsLink = calendarsLink;
 	}
 
+	public FormLink getLecturesLink() {
+		return lecturesLink;
+	}
+
+	public void setLecturesLink(FormLink lecturesLink) {
+		this.lecturesLink = lecturesLink;
+	}
+
 	@Override
 	public int hashCode() {
 		return element.hashCode();
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
index adca56bba98..674cb9b10c8 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumListManagerController.java
@@ -31,11 +31,13 @@ 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.impl.FormBasicController;
 import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.BooleanCellRenderer;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent;
 import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.StaticFlexiCellRenderer;
 import org.olat.core.gui.components.link.Link;
 import org.olat.core.gui.components.link.LinkFactory;
 import org.olat.core.gui.components.stack.PopEvent;
@@ -56,6 +58,7 @@ import org.olat.core.util.resource.OresHelper;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumManagedFlag;
 import org.olat.modules.curriculum.CurriculumSecurityCallback;
+import org.olat.modules.curriculum.CurriculumSecurityCallbackFactory;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumInfos;
 import org.olat.modules.curriculum.model.CurriculumSearchParameters;
@@ -116,7 +119,8 @@ public class CurriculumListManagerController extends FormBasicController impleme
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumCols.identifier, "select"));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, CurriculumCols.externalId, "select"));
 		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumCols.numOfElements));
-		DefaultFlexiColumnModel editCol = new DefaultFlexiColumnModel("edit.icon", translate("edit.icon"), "edit");
+		DefaultFlexiColumnModel editCol = new DefaultFlexiColumnModel("edit.icon", CurriculumCols.edit.ordinal(), "edit",
+				new BooleanCellRenderer(new StaticFlexiCellRenderer(translate("edit"), "edit"), null));		
 		editCol.setExportable(false);
 		columnsModel.addFlexiColumnModel(editCol);
 		if(secCallback.canEditCurriculum()) {
@@ -135,23 +139,36 @@ public class CurriculumListManagerController extends FormBasicController impleme
 	}
 	
 	private void loadModel(String searchString, boolean reset) {
-		CurriculumSearchParameters params = new CurriculumSearchParameters();
-		params.setSearchString(searchString);
-		params.setManagerIdentity(getIdentity());
-		List<CurriculumInfos> curriculums = curriculumService.getCurriculumsWithInfos(params);
-		List<CurriculumRow> rows = curriculums.stream()
-				.map(this::forgeRow).collect(Collectors.toList());
+		CurriculumSearchParameters managerParams = new CurriculumSearchParameters();
+		managerParams.setSearchString(searchString);
+		managerParams.setManagerIdentity(getIdentity());
+		List<CurriculumInfos> managerCurriculums = curriculumService.getCurriculumsWithInfos(managerParams);
+		List<CurriculumRow> rows = managerCurriculums.stream()
+				.map(this::forgeManagedRow).collect(Collectors.toList());
+		
+		CurriculumSearchParameters ownerParams = new CurriculumSearchParameters();
+		ownerParams.setSearchString(searchString);
+		ownerParams.setOwnerIdentity(getIdentity());
+		List<CurriculumInfos> reOwnersCurriculums = curriculumService.getCurriculumsWithInfos(ownerParams);
+		List<CurriculumRow> reOwnerRows = reOwnersCurriculums.stream()
+				.filter(c -> !managerCurriculums.contains(c))
+				.map(CurriculumRow::new).collect(Collectors.toList());
+		
+		rows.addAll(reOwnerRows);
+		
 		tableModel.setObjects(rows);
 		tableEl.reset(reset, reset, true);
 	}
 	
-	private CurriculumRow forgeRow(CurriculumInfos curriculum) {
+	private CurriculumRow forgeManagedRow(CurriculumInfos curriculum) {
 		FormLink toolsLink = uifactory.addFormLink("tools_" + (++counter), "tools", "", null, null, Link.NONTRANSLATED);
 		toolsLink.setIconLeftCSS("o_icon o_icon_actions o_icon-lg");
-		CurriculumRow row = new CurriculumRow(curriculum, toolsLink);
+		CurriculumRow row = new CurriculumRow(curriculum, toolsLink, true);
 		toolsLink.setUserObject(row);
 		return row;
 	}
+	
+	
 
 	@Override
 	protected void doDispose() {
@@ -292,7 +309,8 @@ public class CurriculumListManagerController extends FormBasicController impleme
 			showWarning("warning.curriculum.deleted");
 		} else {
 			WindowControl swControl = addToHistory(ureq, OresHelper.createOLATResourceableInstance(Curriculum.class, row.getKey()), null);
-			composerCtrl = new CurriculumComposerController(ureq, swControl, toolbarPanel, curriculum, secCallback);
+			CurriculumSecurityCallback curriculumSecCallback = CurriculumSecurityCallbackFactory.createCallback(row.canManage());
+			composerCtrl = new CurriculumComposerController(ureq, swControl, toolbarPanel, curriculum, curriculumSecCallback);
 			listenTo(composerCtrl);
 			toolbarPanel.pushController(row.getDisplayName(), composerCtrl);
 			composerCtrl.activate(ureq, entries, null);
@@ -320,9 +338,10 @@ public class CurriculumListManagerController extends FormBasicController impleme
 	
 	private class ToolsController extends BasicController {
 		
+		private Link editLink;
+		private Link deleteLink;
 		private final VelocityContainer mainVC;
-		private Link editLink, deleteLink;
-		
+
 		private CurriculumRow row;
 		
 		public ToolsController(UserRequest ureq, WindowControl wControl, CurriculumRow row, Curriculum curriculum) {
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java
index 8ecaea75d91..c0add519624 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumManagerDataModel.java
@@ -66,6 +66,7 @@ implements SortableFlexiTableDataModel<CurriculumRow> {
 			case identifier: return row.getIdentifier();
 			case externalId: return row.getExternalId();
 			case numOfElements: return row.getNumOfElements();
+			case edit: return row.canManage();
 			case tools: return row.getTools();
 			default: return "ERROR";
 		}
@@ -82,6 +83,7 @@ implements SortableFlexiTableDataModel<CurriculumRow> {
 		identifier("table.header.identifier"),
 		externalId("table.header.external.id"),
 		numOfElements("table.header.num.elements"),
+		edit("edit.icon"),
 		tools("table.header.tools");
 		
 		private final String i18nHeaderKey;
diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java
index 11d5d7aa73a..6936fd77a62 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumRow.java
@@ -34,6 +34,7 @@ public class CurriculumRow implements CurriculumRef {
 	
 	private final Curriculum curriculum;
 	private final long numOfElements;
+	private final boolean canManage;
 	
 	private final FormLink toolsLink;
 	
@@ -41,12 +42,21 @@ public class CurriculumRow implements CurriculumRef {
 		this.curriculum = curriculum;
 		numOfElements = -1l;
 		toolsLink = null;
+		canManage = false;
 	}
 	
-	public CurriculumRow(CurriculumInfos infos, FormLink toolsLink) {
+	public CurriculumRow(CurriculumInfos infos) {
+		this.curriculum = infos.getCurriculum();
+		numOfElements = infos.getNumOfElements();
+		toolsLink = null;
+		canManage = false;
+	}
+	
+	public CurriculumRow(CurriculumInfos infos, FormLink toolsLink, boolean canManage) {
 		curriculum = infos.getCurriculum();
 		numOfElements = infos.getNumOfElements();
 		this.toolsLink = toolsLink;
+		this.canManage = canManage;
 	}
 	
 	@Override
@@ -73,4 +83,25 @@ public class CurriculumRow implements CurriculumRef {
 	public FormLink getTools() {
 		return toolsLink;
 	}
+	
+	public boolean canManage() {
+		return canManage;
+	}
+
+	@Override
+	public int hashCode() {
+		return curriculum.getKey().hashCode();
+	}
+
+	@Override
+	public boolean equals(Object obj) {
+		if(this == obj) {
+			return true;
+		}
+		if(obj instanceof CurriculumRow) {
+			CurriculumRow row = (CurriculumRow)obj;
+			return curriculum.equals(row.curriculum);
+		}
+		return false;
+	}
 }
diff --git a/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementController.java b/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementController.java
index dfa3093a3c4..65954c38a8f 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementController.java
@@ -43,7 +43,9 @@ import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementManagedFlag;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumElementTypeRef;
 import org.olat.modules.curriculum.CurriculumElementTypeToType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumSecurityCallback;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumElementTypeRefImpl;
@@ -65,13 +67,22 @@ public class EditCurriculumElementController extends FormBasicController {
 	private static final String[] calendarsTypedKeys = new String[] {
 			CurriculumCalendars.enabled.name(), CurriculumCalendars.disabled.name(), CurriculumCalendars.inherited.name()
 		};
+	
+	private static final String[] lecturesKeys = new String[] {
+			CurriculumLectures.enabled.name(), CurriculumLectures.disabled.name()
+		};
+	
+	private static final String[] lecturesTypedKeys = new String[] {
+			CurriculumLectures.enabled.name(), CurriculumLectures.disabled.name(), CurriculumLectures.inherited.name()
+		};
 
 	private DateChooser endEl;
 	private DateChooser beginEl;
 	private TextElement identifierEl;
 	private TextElement displayNameEl;
 	private RichTextElement descriptionEl;
-	
+
+	private SingleSelection lecturesEnabledEl;
 	private SingleSelection calendarsEnabledEl;
 	private SingleSelection curriculumElementTypeEl;
 	
@@ -152,8 +163,9 @@ public class EditCurriculumElementController extends FormBasicController {
 		curriculumElementTypeEl.setEnabled(!CurriculumElementManagedFlag.isManaged(element, CurriculumElementManagedFlag.type) && secCallback.canEditCurriculumElement());
 		curriculumElementTypeEl.addActionListener(FormEvent.ONCHANGE);
 		boolean typeFound = false;
-		if(element != null && element.getType() != null) {
-			String selectedTypeKey = element.getType().getKey().toString();
+		CurriculumElementType elementType = element == null ? null : element.getType();
+		if(elementType != null) {
+			String selectedTypeKey = elementType.getKey().toString();
 			for(String typeKey:typeKeys) {
 				if(typeKey.equals(selectedTypeKey)) {
 					curriculumElementTypeEl.select(selectedTypeKey, true);
@@ -167,9 +179,14 @@ public class EditCurriculumElementController extends FormBasicController {
 		}
 		
 		calendarsEnabledEl = uifactory.addRadiosHorizontal("type.calendars.enabled", formLayout, new String[0], new String[0]);
-		calendarsEnabledEl.setEnabled(!CurriculumElementManagedFlag.isManaged(element, CurriculumElementManagedFlag.calendars));
+		calendarsEnabledEl.setEnabled(!CurriculumElementManagedFlag.isManaged(element, CurriculumElementManagedFlag.calendars) && secCallback.canEditCurriculumElement());
 		CurriculumCalendars calendarsEnabled =  element == null ? CurriculumCalendars.inherited : element.getCalendars();
-		updateCalendarsEnabled(calendarsEnabled);
+		updateCalendarsEnabled(calendarsEnabled, elementType);
+		
+		lecturesEnabledEl = uifactory.addRadiosHorizontal("type.lectures.enabled", formLayout, new String[0], new String[0]);
+		lecturesEnabledEl.setEnabled(!CurriculumElementManagedFlag.isManaged(element, CurriculumElementManagedFlag.lectures) && secCallback.canEditCurriculumElement());
+		CurriculumLectures lecturesEnabled =  element == null ? CurriculumLectures.inherited : element.getLectures();
+		updateLecturesEnabled(lecturesEnabled, elementType);
 		
 		List<TaxonomyLevel> levels = curriculumService.getTaxonomy(element);
 		if(!levels.isEmpty()) {
@@ -202,7 +219,7 @@ public class EditCurriculumElementController extends FormBasicController {
 		}
 	}
 	
-	private void updateCalendarsEnabled(CurriculumCalendars preferedEnabled) {
+	private void updateCalendarsEnabled(CurriculumCalendars preferedEnabled, CurriculumElementType selectedType) {
 		if(curriculumElementTypeEl.getSelected() == 0) {
 			String[] onValues = new String[] {
 					translate("type.calendars.enabled.enabled"), translate("type.calendars.enabled.disabled")
@@ -215,15 +232,55 @@ public class EditCurriculumElementController extends FormBasicController {
 				calendarsEnabledEl.select(CurriculumCalendars.disabled.name(), true);
 			}
 		} else {
+			String typeVal = null;
+			if(selectedType == null) {
+				typeVal = "???";
+			} else if(selectedType.getCalendars() == CurriculumCalendars.enabled) {
+				typeVal = translate("type.calendars.enabled.enabled");
+			} else if(selectedType.getCalendars() == CurriculumCalendars.disabled) {
+				typeVal = translate("type.calendars.enabled.disabled");
+			}
+
 			String[] onValues = new String[] {
 					translate("type.calendars.enabled.enabled"), translate("type.calendars.enabled.disabled"),
-					translate("type.calendars.enabled.inherited")
+					translate("type.calendars.enabled.inherited", new String[] { typeVal })
 			};
 			calendarsEnabledEl.setKeysAndValues(calendarsTypedKeys, onValues, null);
 			calendarsEnabledEl.select(preferedEnabled.name(), true);
 		}
 	}
 	
+	private void updateLecturesEnabled(CurriculumLectures preferedEnabled, CurriculumElementType selectedType) {
+		if(curriculumElementTypeEl.getSelected() == 0) {
+			String[] onValues = new String[] {
+					translate("type.lectures.enabled.enabled"), translate("type.lectures.enabled.disabled")
+			};
+			lecturesEnabledEl.setKeysAndValues(lecturesKeys, onValues, null);
+			
+			if(preferedEnabled == CurriculumLectures.enabled || preferedEnabled == CurriculumLectures.disabled) {
+				lecturesEnabledEl.select(preferedEnabled.name(), true);
+			} else {
+				lecturesEnabledEl.select(CurriculumLectures.disabled.name(), true);
+			}
+		} else {
+			String typeVal = null;
+			if(selectedType == null) {
+				typeVal = "???";
+			} else if(selectedType.getLectures() == CurriculumLectures.enabled) {
+				typeVal = translate("type.lectures.enabled.enabled");
+			} else if(selectedType.getLectures() == CurriculumLectures.disabled) {
+				typeVal = translate("type.lectures.enabled.disabled");
+			}
+
+			String[] onValues = new String[] {
+					translate("type.lectures.enabled.enabled"), translate("type.lectures.enabled.disabled"),
+					translate("type.lectures.enabled.inherited", new String[] { typeVal })
+			};
+			lecturesEnabledEl.setKeysAndValues(lecturesTypedKeys, onValues, null);
+			lecturesEnabledEl.select(preferedEnabled.name(), true);
+		}
+	}
+	
 	private List<CurriculumElementType> getTypes() {
 		List<CurriculumElementType> types;
 		if(element != null) {
@@ -288,22 +345,24 @@ public class EditCurriculumElementController extends FormBasicController {
 			allOk &= false;
 		}
 		
+		lecturesEnabledEl.clearError();
+		if(!lecturesEnabledEl.isOneSelected()) {
+			lecturesEnabledEl.setErrorKey("form.legende.mandatory", null);
+			allOk &= false;
+		}
+		
 		return allOk;
 	}
 
 	@Override
 	protected void formOK(UserRequest ureq) {
-		CurriculumElementType elementType = null;
-		String selectedTypeKey = curriculumElementTypeEl.getSelectedKey();
-		if(StringHelper.containsNonWhitespace(selectedTypeKey)) {
-			elementType = curriculumService
-					.getCurriculumElementType(new CurriculumElementTypeRefImpl(Long.valueOf(selectedTypeKey)));
-		}
+		CurriculumElementType elementType = getSelectedType();
+		CurriculumLectures lectures = CurriculumLectures.valueOf(lecturesEnabledEl.getSelectedKey());
 		CurriculumCalendars calendars = CurriculumCalendars.valueOf(calendarsEnabledEl.getSelectedKey());
 		if(element == null) {
 			//create a new one
 			element = curriculumService.createCurriculumElement(identifierEl.getValue(), displayNameEl.getValue(),
-					beginEl.getDate(), endEl.getDate(), parentElement, elementType, calendars, curriculum);
+					beginEl.getDate(), endEl.getDate(), parentElement, elementType, calendars, lectures, curriculum);
 		} else {
 			element = curriculumService.getCurriculumElement(element);
 			element.setIdentifier(identifierEl.getValue());
@@ -313,18 +372,33 @@ public class EditCurriculumElementController extends FormBasicController {
 			element.setEndDate(endEl.getDate());
 			element.setType(elementType);
 			element.setCalendars(calendars);
+			element.setLectures(lectures);
 			element = curriculumService.updateCurriculumElement(element);
 		}
 
 		fireEvent(ureq, Event.DONE_EVENT);
 	}
+	
+	private CurriculumElementType getSelectedType() {
+		String selectedTypeKey = curriculumElementTypeEl.getSelectedKey();
+		if(StringHelper.containsNonWhitespace(selectedTypeKey)) {
+			CurriculumElementTypeRef ref = new CurriculumElementTypeRefImpl(Long.valueOf(selectedTypeKey));
+			return curriculumService.getCurriculumElementType(ref);
+		}
+		return null;
+	}
 
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(source == curriculumElementTypeEl) {
+			CurriculumElementType elementType = getSelectedType();
 			if(calendarsEnabledEl.isOneSelected()) {
 				CurriculumCalendars enabled = CurriculumCalendars.valueOf(calendarsEnabledEl.getSelectedKey());
-				updateCalendarsEnabled(enabled);
+				updateCalendarsEnabled(enabled, elementType);
+			}
+			if(lecturesEnabledEl.isOneSelected()) {
+				CurriculumLectures enabled = CurriculumLectures.valueOf(lecturesEnabledEl.getSelectedKey());
+				updateLecturesEnabled(enabled, elementType);
 			}
 		}
 		super.formInnerEvent(ureq, source, event);
diff --git a/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementTypeController.java b/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementTypeController.java
index 0e581798e56..316053f556d 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementTypeController.java
+++ b/src/main/java/org/olat/modules/curriculum/ui/EditCurriculumElementTypeController.java
@@ -39,6 +39,7 @@ import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElementType;
 import org.olat.modules.curriculum.CurriculumElementTypeManagedFlag;
 import org.olat.modules.curriculum.CurriculumElementTypeToType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumElementTypeRefImpl;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,6 +59,7 @@ public class EditCurriculumElementTypeController extends FormBasicController {
 	private TextElement displayNameEl;
 	private RichTextElement descriptionEl;
 	private MultipleSelectionElement allowedSubTypesEl;
+	private MultipleSelectionElement lecturesEnabledEl;
 	private MultipleSelectionElement calendarsEnabledEl;
 	
 	private CurriculumElementType curriculumElementType;
@@ -101,6 +103,13 @@ public class EditCurriculumElementTypeController extends FormBasicController {
 		CurriculumCalendars calendarsEnabled =  curriculumElementType == null ? null : curriculumElementType.getCalendars();
 		calendarsEnabledEl.select(onKeys[0], calendarsEnabled == CurriculumCalendars.enabled);
 		
+		
+		String[] onLecturesValues = new String[] { translate("type.lectures.enabled.on") };
+		lecturesEnabledEl = uifactory.addCheckboxesHorizontal("type.lectures.enabled", formLayout, onKeys, onLecturesValues);
+		lecturesEnabledEl.setEnabled(!CurriculumElementTypeManagedFlag.isManaged(curriculumElementType, CurriculumElementTypeManagedFlag.lectures));
+		CurriculumLectures lecturesEnabled =  curriculumElementType == null ? null : curriculumElementType.getLectures();
+		lecturesEnabledEl.select(onKeys[0], lecturesEnabled == CurriculumLectures.enabled);
+		
 		List<CurriculumElementType> types = curriculumService.getCurriculumElementTypes();
 		types.remove(curriculumElementType);
 		
@@ -162,16 +171,21 @@ public class EditCurriculumElementTypeController extends FormBasicController {
 			curriculumElementType.setDescription(descriptionEl.getValue());
 		}
 		curriculumElementType.setCssClass(cssClassEl.getValue());
-		if(calendarsEnabledEl.isAtLeastSelected(0)) {
+		if(calendarsEnabledEl.isAtLeastSelected(1)) {
 			curriculumElementType.setCalendars(CurriculumCalendars.enabled);
 		} else {
 			curriculumElementType.setCalendars(CurriculumCalendars.disabled);
 		}
-		
+		if(lecturesEnabledEl.isAtLeastSelected(1)) {
+			curriculumElementType.setLectures(CurriculumLectures.enabled);
+		} else {
+			curriculumElementType.setLectures(CurriculumLectures.disabled);
+		}
+
 		Collection<String> selectedAllowedSubTypeKeys = allowedSubTypesEl.getSelectedKeys();
 		List<CurriculumElementType> allowedSubTypes = new ArrayList<>();
 		for(String selectedAllowedSubTypeKey:selectedAllowedSubTypeKeys) {
-			allowedSubTypes.add(curriculumService.getCurriculumElementType(new CurriculumElementTypeRefImpl(new Long(selectedAllowedSubTypeKey))));
+			allowedSubTypes.add(curriculumService.getCurriculumElementType(new CurriculumElementTypeRefImpl(Long.valueOf(selectedAllowedSubTypeKey))));
 		}
 		curriculumElementType = curriculumService.updateCurriculumElementType(curriculumElementType, allowedSubTypes);
 		
diff --git a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties
index e957da087c4..689abd6d188 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_de.properties
@@ -55,6 +55,7 @@ import.member=$org.olat.group.ui.main\:import.member
 info.copy.element.type.sucessfull=Der Typ "{0}" wurde erfolgreich kopiert.
 override.member=Externe Verwaltung \u00FCbergehen
 override.member.hint=Die Benutzerverwaltung dieser Curriculum wird extern verwaltet. Als Administrator k\u00F6nnen Sie diese externe Verwaltung \u00FCbergehen. Bitte bedenken Sie, dass das externe datenf\u00FChrunde System \u00FCber Ihre \u00C4nderungen nicht informiert wird und diese unter Umst\u00E4nden wieder r\u00FCckg\u00E4ngig macht.
+lectures=Absenzen
 move.element=Element verschieben
 remove.memberships=Entfernen
 remove.resources=Entfernen
@@ -92,6 +93,7 @@ table.header.end.date=Ende
 table.header.external.id=Externe ID
 table.header.identifier=Bezeichnung
 table.header.key=ID
+table.header.lectures=Absenzen
 table.header.num.elements=Elemente
 table.header.num.of.members=Mitglieder
 table.header.num.of.participants=Teilnehmer
@@ -121,11 +123,16 @@ type.calendars.enabled=Stundenplan
 type.calendars.enabled.on=Ein
 type.calendars.enabled.enabled=Ein
 type.calendars.enabled.disabled=Aus
-type.calendars.enabled.inherited=Vererbt aus Typ
+type.calendars.enabled.inherited=Vererbt aus Typ ({0})
 type.cssClass=CSS class
 type.description=Beschreibung
 type.displayname=Name
 type.identifier=Bezeichnung
+type.lectures.enabled=Absenzmanagement
+type.lectures.enabled.on=Ein
+type.lectures.enabled.enabled=Ein
+type.lectures.enabled.disabled=Aus
+type.lectures.enabled.inherited=Vererbt aus Typ ({0})
 unoverride.member=\u00DCbergehen anhalten
 warning.atleastone.member=Sie m\u00FCssen mindestens ein Mitglied w\u00E4hlen.
 warning.atleastone.resource=Sie m\u00FCssen mindestens ein Kurs w\u00E4hlen.
diff --git a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties
index 6269499b25a..9d5a07ea568 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_en.properties
@@ -53,6 +53,7 @@ filter.deleted=$\:status.deleted
 filter.inactive=$\:status.inactive
 import.member=$org.olat.group.ui.main\:import.member
 info.copy.element.type.sucessfull=The type "{0}" was successfully copied.
+lectures=Absences
 move.element=Move element
 override.member=Override external management
 override.member.hint=The user management of this curriculum is controlled externally. As an administrator, you can override this external management. Please remember that the external system is not informed of your changes and may invalid them.
@@ -92,6 +93,7 @@ table.header.end.date=End
 table.header.external.id=External ID
 table.header.identifier=Identifier
 table.header.key=ID
+table.header.lectures=Absences
 table.header.num.elements=Elements
 table.header.num.of.coaches=Coaches
 table.header.num.of.members=Members
@@ -120,12 +122,17 @@ type.allowed.sub.types=Sub types
 type.calendars.enabled=Calendars
 type.calendars.enabled.disabled=Off
 type.calendars.enabled.enabled=On
-type.calendars.enabled.inherited=Inherited from type
+type.calendars.enabled.inherited=Inherited from type ({0})
 type.calendars.enabled.on=On
 type.cssClass=CSS class
 type.description=Description
 type.displayname=Name
 type.identifier=Identifier
+type.lectures.enabled=Absences
+type.lectures.enabled.disabled=Off
+type.lectures.enabled.enabled=On
+type.lectures.enabled.inherited=Inherited from type ({0})
+type.lectures.enabled.on=On
 unoverride.member=Stop override
 warning.atleastone.member=You need to choose at least one member.
 warning.atleastone.resource=You need to choose at least one course.
diff --git a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_fr.properties
index 1f44e934b15..fcddadf9881 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_fr.properties
@@ -120,7 +120,7 @@ type.allowed.sub.types=Sous-types
 type.calendars.enabled=Calendriers
 type.calendars.enabled.disabled=d\u00E9sactiv\u00E9
 type.calendars.enabled.enabled=activ\u00E9
-type.calendars.enabled.inherited=H\u00E9rit\u00E9 du type
+type.calendars.enabled.inherited=H\u00E9rit\u00E9 du type ({0})
 type.calendars.enabled.on=activ\u00E9
 type.cssClass=Class CSS
 type.description=Description
diff --git a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_pt_BR.properties b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_pt_BR.properties
index e2bf12197d4..207a21ccf3f 100644
--- a/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_pt_BR.properties
+++ b/src/main/java/org/olat/modules/curriculum/ui/_i18n/LocalStrings_pt_BR.properties
@@ -120,7 +120,7 @@ type.allowed.sub.types=Subtipos
 type.calendars.enabled=Calend\u00E1rios
 type.calendars.enabled.disabled=Des
 type.calendars.enabled.enabled=Lig
-type.calendars.enabled.inherited=Herdado do tipo
+type.calendars.enabled.inherited=Herdado do tipo ({0})
 type.calendars.enabled.on=Lig
 type.cssClass=Classe CSS
 type.description=Descri\u00E7\u00E3o
diff --git a/src/main/java/org/olat/modules/curriculum/ui/lectures/CurriculumElementLecturesController.java b/src/main/java/org/olat/modules/curriculum/ui/lectures/CurriculumElementLecturesController.java
new file mode 100644
index 00000000000..a91699579ea
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/ui/lectures/CurriculumElementLecturesController.java
@@ -0,0 +1,141 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.curriculum.ui.lectures;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.Component;
+import org.olat.core.gui.components.stack.TooledStackedPanel;
+import org.olat.core.gui.components.velocity.VelocityContainer;
+import org.olat.core.gui.control.Event;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.gui.control.controller.BasicController;
+import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
+import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumSecurityCallback;
+import org.olat.modules.curriculum.CurriculumService;
+import org.olat.modules.lecture.LectureModule;
+import org.olat.modules.lecture.LectureRateWarning;
+import org.olat.modules.lecture.LectureService;
+import org.olat.modules.lecture.model.IdentityRateWarning;
+import org.olat.modules.lecture.model.LectureBlockIdentityStatistics;
+import org.olat.modules.lecture.model.LectureStatisticsSearchParameters;
+import org.olat.modules.lecture.ui.coach.LecturesSearchFormController;
+import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryRef;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Report absences of the curriculum element and its children.
+ * List of participants -> select a participant -> list of courses -> select a course -> list of lectures
+ * 
+ * Initial date: 13 févr. 2019<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class CurriculumElementLecturesController extends BasicController {
+	
+	private static final String PROPS_IDENTIFIER = LecturesSearchFormController.PROPS_IDENTIFIER;
+	
+	private final LecturesListController lecturesListCtlr;
+
+	private final boolean adminProps;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private LectureModule lectureModule;
+	@Autowired
+	private LectureService lectureService;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	@Autowired
+	private CurriculumService curriculumService;
+	
+	public CurriculumElementLecturesController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbarPanel,
+			CurriculumElement element, CurriculumSecurityCallback secCallback) {
+		super(ureq, wControl);
+
+		Roles roles = ureq.getUserSession().getRoles();
+		adminProps = securityModule.isUserAllowedAdminProps(roles);
+		userPropertyHandlers = userManager.getUserPropertyHandlersFor(PROPS_IDENTIFIER, adminProps);
+		
+		boolean all = lectureModule.isOwnerCanViewAllCoursesInCurriculum() || secCallback.canViewAllLectures();
+		
+		Identity checkByIdentity = all ? null : getIdentity();
+		List<RepositoryEntry> entries = curriculumService
+				.getRepositoryEntriesWithLecturesAndDescendants(element, checkByIdentity);
+		
+		LectureStatisticsSearchParameters params = new LectureStatisticsSearchParameters();
+		params.setEntries(entries);
+		List<LectureBlockIdentityStatistics> rawStatistics = lectureService
+				.getLecturesStatistics(params, userPropertyHandlers, getIdentity());
+		List<LectureBlockIdentityStatistics> aggregatedStatistics = lectureService.groupByIdentity(rawStatistics);
+		calculateWarningRates(rawStatistics, aggregatedStatistics);
+		
+		List<RepositoryEntryRef> filterByEntry = new ArrayList<>(entries);
+
+		lecturesListCtlr = new LecturesListController(ureq, getWindowControl(), toolbarPanel,
+				aggregatedStatistics, filterByEntry, userPropertyHandlers, PROPS_IDENTIFIER);
+		listenTo(lecturesListCtlr);
+		
+		VelocityContainer mainVC = createVelocityContainer("curriculum_lectures");
+		mainVC.put("lectures", lecturesListCtlr.getInitialComponent());
+		mainVC.contextPut("elementName", element.getDisplayName());
+		mainVC.contextPut("elementIdentifier", element.getIdentifier());
+		mainVC.contextPut("curriculumName", element.getCurriculum().getDisplayName());
+		mainVC.contextPut("curriculumIdentifier", element.getCurriculum().getIdentifier());
+
+		putInitialPanel(mainVC);
+	}
+	
+	private void calculateWarningRates(List<LectureBlockIdentityStatistics> rawStatistics, List<LectureBlockIdentityStatistics> aggregatedStatistics) {
+		List<IdentityRateWarning> warnings = lectureService.groupRateWarning(rawStatistics);
+		if(warnings.isEmpty()) return;
+
+		Map<Long,IdentityRateWarning> warningMap = warnings.stream()
+				.collect(Collectors.toMap(IdentityRateWarning::getIdentityKey, w -> w, (u, v) -> u));
+		for(LectureBlockIdentityStatistics aggregatedStatistic:aggregatedStatistics) {
+			IdentityRateWarning warning = warningMap.get(aggregatedStatistic.getIdentityKey());
+			if(warning != null && (warning.getWarning() == LectureRateWarning.warning || warning.getWarning() == LectureRateWarning.error)) {
+				aggregatedStatistic.setExplicitWarning(warning.getWarning());
+			}
+		}
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void event(UserRequest ureq, Component source, Event event) {
+		//
+	}
+}
diff --git a/src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListController.java b/src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListController.java
new file mode 100644
index 00000000000..62388194314
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListController.java
@@ -0,0 +1,201 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.curriculum.ui.lectures;
+
+import java.util.List;
+
+import org.olat.basesecurity.BaseSecurity;
+import org.olat.basesecurity.BaseSecurityModule;
+import org.olat.core.gui.UserRequest;
+import org.olat.core.gui.components.form.flexible.FormItem;
+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.impl.FormBasicController;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SelectionEvent;
+import org.olat.core.gui.components.link.Link;
+import org.olat.core.gui.components.stack.TooledStackedPanel;
+import org.olat.core.gui.control.Controller;
+import org.olat.core.gui.control.WindowControl;
+import org.olat.core.id.Identity;
+import org.olat.core.id.Roles;
+import org.olat.core.util.Util;
+import org.olat.modules.curriculum.ui.lectures.LecturesListDataModel.StatsCols;
+import org.olat.modules.lecture.LectureModule;
+import org.olat.modules.lecture.LectureService;
+import org.olat.modules.lecture.model.AggregatedLectureBlocksStatistics;
+import org.olat.modules.lecture.model.LectureBlockIdentityStatistics;
+import org.olat.modules.lecture.ui.LectureRepositoryAdminController;
+import org.olat.modules.lecture.ui.ParticipantLecturesOverviewController;
+import org.olat.modules.lecture.ui.coach.LecturesStatisticsExport;
+import org.olat.modules.lecture.ui.component.LectureStatisticsCellRenderer;
+import org.olat.modules.lecture.ui.component.PercentCellRenderer;
+import org.olat.repository.RepositoryEntryRef;
+import org.olat.user.UserManager;
+import org.olat.user.propertyhandlers.UserPropertyHandler;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * 
+ * Initial date: 16 juin 2017<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class LecturesListController extends FormBasicController {
+	
+	public static final int USER_PROPS_OFFSET = 500;
+	
+	private FormLink exportButton;
+	private FlexiTableElement tableEl;
+	private LecturesListDataModel tableModel;
+	private TooledStackedPanel toolbarPanel;
+	
+	private final String propsIdentifier;
+	private final boolean isAdministrativeUser;
+	private final boolean authorizedAbsenceEnabled;
+	private final List<RepositoryEntryRef> filterByEntries;
+	private final List<UserPropertyHandler> userPropertyHandlers;
+	private final List<LectureBlockIdentityStatistics> statistics;
+	
+	private ParticipantLecturesOverviewController participantLecturesOverviewCtrl;
+	
+	@Autowired
+	private UserManager userManager;
+	@Autowired
+	private LectureModule lectureModule;
+	@Autowired
+	private LectureService lectureService;
+	@Autowired
+	private BaseSecurity securityManager;
+	@Autowired
+	private BaseSecurityModule securityModule;
+	
+	public LecturesListController(UserRequest ureq, WindowControl wControl, TooledStackedPanel toolbarPanel,
+			List<LectureBlockIdentityStatistics> statistics, List<RepositoryEntryRef> filterByEntries,
+			List<UserPropertyHandler> userPropertyHandlers, String propsIdentifier) {
+		super(ureq, wControl, "curriculum_lectures_table", Util.createPackageTranslator(LectureRepositoryAdminController.class, ureq.getLocale()));
+		setTranslator(userManager.getPropertyHandlerTranslator(getTranslator()));
+		this.toolbarPanel = toolbarPanel;
+		this.statistics = statistics;
+		this.filterByEntries = filterByEntries;
+		this.propsIdentifier = propsIdentifier;
+		this.userPropertyHandlers = userPropertyHandlers;
+		authorizedAbsenceEnabled = lectureModule.isAuthorizedAbsenceEnabled();
+		Roles roles = ureq.getUserSession().getRoles();
+		isAdministrativeUser = securityModule.isUserAllowedAdminProps(roles);
+		initForm(ureq);
+	}
+
+	@Override
+	protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) {
+		exportButton = uifactory.addFormLink("export", formLayout, Link.BUTTON);
+		exportButton.setIconLeftCSS("o_icon o_icon_download");
+		
+		FlexiTableColumnModel columnsModel = FlexiTableDataModelFactory.createFlexiTableColumnModel();
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(false, StatsCols.id));
+		
+		if(isAdministrativeUser) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.username));
+		}
+		
+		int colIndex = USER_PROPS_OFFSET;
+		for (int i = 0; i < userPropertyHandlers.size(); i++) {
+			UserPropertyHandler userPropertyHandler	= userPropertyHandlers.get(i);
+			boolean visible = userManager.isMandatoryUserProperty(propsIdentifier, userPropertyHandler);
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(visible, userPropertyHandler.i18nColumnDescriptorLabelKey(), colIndex++, "select",
+					true, userPropertyHandler.i18nColumnDescriptorLabelKey()));
+		}
+
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.plannedLectures));
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.attendedLectures));
+		if(authorizedAbsenceEnabled) {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.unauthorizedAbsenceLectures));
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.authorizedAbsenceLectures));
+		} else {
+			columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.absentLectures));
+		}
+		// add progress
+		FlexiColumnModel progressCol = new DefaultFlexiColumnModel(StatsCols.progress, new LectureStatisticsCellRenderer());
+		progressCol.setExportable(false);
+		columnsModel.addFlexiColumnModel(progressCol);
+		
+		FlexiColumnModel warningCol = new DefaultFlexiColumnModel(StatsCols.rateWarning, new RateExplicitWarningCellRenderer(getTranslator()));
+		warningCol.setExportable(false);
+		columnsModel.addFlexiColumnModel(warningCol);
+		columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(StatsCols.currentRate, new PercentCellRenderer()));
+		
+		tableModel = new LecturesListDataModel(columnsModel, getTranslator());
+		AggregatedLectureBlocksStatistics total = lectureService.aggregatedStatistics(statistics);
+		tableModel.setObjects(statistics, total);
+		tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, 20, false, getTranslator(), formLayout);
+		tableEl.setExportEnabled(true);
+		tableEl.setFooter(true);
+	}
+
+	@Override
+	protected void doDispose() {
+		//
+	}
+
+	@Override
+	protected void formOK(UserRequest ureq) {
+		//
+	}
+	
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if(source == tableEl) {
+			if(event instanceof SelectionEvent) {
+				SelectionEvent se = (SelectionEvent)event;
+				String cmd = se.getCommand();
+				if("select".equals(cmd)) {
+					LectureBlockIdentityStatistics row = tableModel.getObject(se.getIndex());
+					doSelectAssessedIdentity(ureq, row);
+				}
+			}
+		} else if(source == exportButton) {
+			doExportStatistics(ureq);
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
+	private void doExportStatistics(UserRequest ureq) {
+		LecturesStatisticsExport export = new LecturesStatisticsExport(statistics, userPropertyHandlers, isAdministrativeUser, getTranslator());
+		ureq.getDispatchResult().setResultingMediaResource(export);
+	}
+	
+	private void doSelectAssessedIdentity(UserRequest ureq, LectureBlockIdentityStatistics row) {
+		removeControllerListener(participantLecturesOverviewCtrl);
+		
+		Identity assessedIdentity = securityManager.loadIdentityByKey(row.getIdentityKey());
+		participantLecturesOverviewCtrl = new ParticipantLecturesOverviewController(ureq, getWindowControl(),
+				assessedIdentity, filterByEntries, true, true, true, true);
+		listenTo(participantLecturesOverviewCtrl);
+		participantLecturesOverviewCtrl.setBreadcrumbPanel(toolbarPanel);
+		
+		String fullName = userManager.getUserDisplayName(assessedIdentity);
+		toolbarPanel.pushController(fullName, participantLecturesOverviewCtrl);
+	}
+}
diff --git a/src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListDataModel.java b/src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListDataModel.java
new file mode 100644
index 00000000000..84e4f2d666e
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/ui/lectures/LecturesListDataModel.java
@@ -0,0 +1,157 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.curriculum.ui.lectures;
+
+import java.util.List;
+
+import org.olat.core.commons.persistence.SortKey;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableFooterModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableDataModel;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate;
+import org.olat.core.gui.translator.Translator;
+import org.olat.modules.lecture.model.AggregatedLectureBlocksStatistics;
+import org.olat.modules.lecture.model.LectureBlockIdentityStatistics;
+
+/**
+ * 
+ * Initial date: 16 juin 2017<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class LecturesListDataModel extends DefaultFlexiTableDataModel<LectureBlockIdentityStatistics>
+implements SortableFlexiTableDataModel<LectureBlockIdentityStatistics>, FlexiTableFooterModel {
+	
+	private final Translator translator;
+	private AggregatedLectureBlocksStatistics totalStatistics;
+	
+	public LecturesListDataModel(FlexiTableColumnModel columnModel, Translator translator) {
+		super(columnModel);
+		this.translator = translator;
+	}
+
+	@Override
+	public void sort(SortKey orderBy) {
+		SortableFlexiTableModelDelegate<LectureBlockIdentityStatistics> sorter
+			= new SortableFlexiTableModelDelegate<>(orderBy, this, null);
+		List<LectureBlockIdentityStatistics> views = sorter.sort();
+		super.setObjects(views);
+	}
+
+	@Override
+	public Object getValueAt(int row, int col) {
+		LectureBlockIdentityStatistics stats = getObject(row);
+		return getValueAt(stats, col);
+	}
+
+	@Override
+	public Object getValueAt(LectureBlockIdentityStatistics row, int col) {
+		if(col >= 0 && col < StatsCols.values().length) {
+			switch(StatsCols.values()[col]) {
+				case id: return row.getIdentityKey();
+				case username: return row.getIdentityName();
+				case plannedLectures: return positive(row.getTotalPersonalPlannedLectures());
+				case attendedLectures: return positive(row.getTotalAttendedLectures());
+				case unauthorizedAbsenceLectures:
+				case absentLectures: return positive(row.getTotalAbsentLectures());
+				case authorizedAbsenceLectures: return positive(row.getTotalAuthorizedAbsentLectures());
+				case currentRate: return row.getAttendanceRate();
+				case progress: return row;
+				case rateWarning: return row;
+			}
+		}
+		
+		int propPos = col - LecturesListController.USER_PROPS_OFFSET;
+		return row.getIdentityProp(propPos);
+	}
+
+	@Override
+	public String getFooterHeader() {
+		return translator.translate("total");
+	}
+
+	@Override
+	public Object getFooterValueAt(int col) {
+		if(totalStatistics == null) return null;
+		
+		if(col >= 0 && col < StatsCols.values().length) {
+			switch(StatsCols.values()[col]) {
+				case plannedLectures: return positive(totalStatistics.getPersonalPlannedLectures());
+				case attendedLectures: return positive(totalStatistics.getAttendedLectures());
+				case unauthorizedAbsenceLectures:
+				case absentLectures: return positive(totalStatistics.getAbsentLectures());
+				case authorizedAbsenceLectures: return positive(totalStatistics.getAuthorizedAbsentLectures());
+				default: return null;
+			}
+		}
+		return null;
+	}
+
+	private static final long positive(long pos) {
+		return pos < 0 ? 0 : pos;
+	}
+	
+	public void setObjects(List<LectureBlockIdentityStatistics> objects, AggregatedLectureBlocksStatistics totalStatistics) {
+		super.setObjects(objects);
+		this.totalStatistics = totalStatistics;
+	}
+	
+	@Override
+	public DefaultFlexiTableDataModel<LectureBlockIdentityStatistics> createCopyWithEmptyList() {
+		return new LecturesListDataModel(getTableColumnModel(), translator);
+	}
+	
+	public enum StatsCols implements FlexiSortableColumnDef {
+		id("table.header.id"),
+		username("table.header.username"),
+		plannedLectures("table.header.planned.lectures"),
+		attendedLectures("table.header.attended.lectures"),
+		absentLectures("table.header.absent.lectures"),
+		unauthorizedAbsenceLectures("table.header.unauthorized.absence"),
+		authorizedAbsenceLectures("table.header.authorized.absence"),
+		currentRate("table.header.attended.current.rate"),
+		progress("table.header.progress"),
+		rateWarning("table.header.rate.warning")
+		;
+		
+		private final String i18nKey;
+		
+		private StatsCols(String i18nKey) {
+			this.i18nKey = i18nKey;
+		}
+		
+		@Override
+		public String i18nHeaderKey() {
+			return i18nKey;
+		}
+
+		@Override
+		public boolean sortable() {
+			return true;
+		}
+
+		@Override
+		public String sortKey() {
+			return name();
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/curriculum/ui/lectures/RateExplicitWarningCellRenderer.java b/src/main/java/org/olat/modules/curriculum/ui/lectures/RateExplicitWarningCellRenderer.java
new file mode 100644
index 00000000000..35f56671356
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/ui/lectures/RateExplicitWarningCellRenderer.java
@@ -0,0 +1,63 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.curriculum.ui.lectures;
+
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiCellRenderer;
+import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableComponent;
+import org.olat.core.gui.render.Renderer;
+import org.olat.core.gui.render.StringOutput;
+import org.olat.core.gui.render.URLBuilder;
+import org.olat.core.gui.translator.Translator;
+import org.olat.modules.lecture.LectureRateWarning;
+import org.olat.modules.lecture.model.LectureBlockIdentityStatistics;
+
+/**
+ * 
+ * Initial date: 14 févr. 2019<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class RateExplicitWarningCellRenderer implements FlexiCellRenderer {
+	
+	private final Translator translator;
+	
+	public RateExplicitWarningCellRenderer(Translator translator) {
+		this.translator = translator;
+	}
+
+	@Override
+	public void render(Renderer renderer, StringOutput target, Object cellValue, int row, FlexiTableComponent source,
+			URLBuilder ubu, Translator trans) {
+		
+		if(cellValue instanceof LectureBlockIdentityStatistics) {
+			LectureBlockIdentityStatistics stats = (LectureBlockIdentityStatistics)cellValue;
+			
+			if(stats.getExplicitWarning() != null) {
+				if(stats.getExplicitWarning() == LectureRateWarning.error) {
+					String title = translator.translate("rate.error.title");
+					target.append("<i class='o_icon o_icon-lg o_icon_error' title='").append(title).append("'> </i>");
+				} else if(stats.getExplicitWarning() == LectureRateWarning.warning) {// less than 5%
+					String title = translator.translate("rate.warning.title");
+					target.append("<i class='o_icon o_icon-lg o_icon_warning' title='").append(title).append("'> </i>");	
+				}
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures.html b/src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures.html
new file mode 100644
index 00000000000..bae327c4316
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures.html
@@ -0,0 +1 @@
+$r.render("lectures")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures_table.html b/src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures_table.html
new file mode 100644
index 00000000000..cc832173810
--- /dev/null
+++ b/src/main/java/org/olat/modules/curriculum/ui/lectures/_content/curriculum_lectures_table.html
@@ -0,0 +1,6 @@
+#if($r.available("export"))
+<div class="o_button_group o_button_group_right">
+	$r.render("export")
+</div>
+#end
+$r.render("table")
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/lecture/LectureModule.java b/src/main/java/org/olat/modules/lecture/LectureModule.java
index 836b093906a..c8f48326733 100644
--- a/src/main/java/org/olat/modules/lecture/LectureModule.java
+++ b/src/main/java/org/olat/modules/lecture/LectureModule.java
@@ -44,6 +44,7 @@ public class LectureModule extends AbstractSpringModule implements ConfigOnOff {
 	private static final String AUTHORIZED_ABSENCE_ENABLED = "lecture.authorized.absence.enabled";
 	private static final String AUTHORIZED_ABSENCE_ATTENDANT_ENABLED = "lecture.authorized.absence.as.attendant";
 	private static final String TEACHER_CAN_AUTHORIZED_ABSENCE = "teacher.can.authorized.absence";
+	private static final String OWNER_CAN_VIEW_ALL_COURSES_IN_CURRICULUM = "lecture.owner.can.view.all.courses.curriculum";
 	private static final String ROLLCALL_REMINDER_ENABLED = "lecture.rollcall.reminder.enabled";
 	private static final String ROLLCALL_REMINDER_PERIOD = "lecture.rollcall.reminder.period";
 	private static final String ROLLCALL_AUTOCLOSE_PERIOD = "lecture.rollcall.autoclose.period";
@@ -78,6 +79,9 @@ public class LectureModule extends AbstractSpringModule implements ConfigOnOff {
 	private boolean absenceDefaultAuthorized;
 	@Value("${lecture.teacher.can.authorized.absence:true}")
 	private boolean teacherCanAuthorizedAbsence;
+	
+	@Value("${lecture.owner.can.view.all.courses.curriculum:true}")
+	private boolean ownerCanViewAllCoursesInCurriculum;
 
 	@Value("${lecture.rollcall.reminder.enabled:true}")
 	private boolean rollCallReminderEnabled;
@@ -160,6 +164,11 @@ public class LectureModule extends AbstractSpringModule implements ConfigOnOff {
 			teacherCanAuthorizedAbsence = "true".equals(teacherCanAuthorizedAbsenceObj);
 		}
 		
+		String ownerCanViewAllCoursesInCurriculumObj = getStringPropertyValue(OWNER_CAN_VIEW_ALL_COURSES_IN_CURRICULUM, true);
+		if(StringHelper.containsNonWhitespace(ownerCanViewAllCoursesInCurriculumObj)) {
+			ownerCanViewAllCoursesInCurriculum = "true".equals(ownerCanViewAllCoursesInCurriculumObj);
+		}
+		
 		String rollCallReminderEnabledObj = getStringPropertyValue(ROLLCALL_REMINDER_ENABLED, true);
 		if(StringHelper.containsNonWhitespace(rollCallReminderEnabledObj)) {
 			rollCallReminderEnabled = "true".equals(rollCallReminderEnabledObj);
@@ -308,6 +317,15 @@ public class LectureModule extends AbstractSpringModule implements ConfigOnOff {
 		setStringProperty(TEACHER_CAN_AUTHORIZED_ABSENCE, Boolean.toString(enable), true);
 	}
 
+	public boolean isOwnerCanViewAllCoursesInCurriculum() {
+		return ownerCanViewAllCoursesInCurriculum;
+	}
+
+	public void setOwnerCanViewAllCoursesInCurriculum(boolean enable) {
+		this.ownerCanViewAllCoursesInCurriculum = enable;
+		setStringProperty(OWNER_CAN_VIEW_ALL_COURSES_IN_CURRICULUM, Boolean.toString(enable), true);
+	}
+
 	public boolean isRollCallReminderEnabled() {
 		return rollCallReminderEnabled;
 	}
diff --git a/src/main/java/org/olat/modules/lecture/LectureRateWarning.java b/src/main/java/org/olat/modules/lecture/LectureRateWarning.java
new file mode 100644
index 00000000000..b2f91c2cd71
--- /dev/null
+++ b/src/main/java/org/olat/modules/lecture/LectureRateWarning.java
@@ -0,0 +1,34 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.lecture;
+
+/**
+ * 
+ * Initial date: 14 févr. 2019<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public enum LectureRateWarning {
+	
+	none,
+	warning,
+	error
+
+}
diff --git a/src/main/java/org/olat/modules/lecture/LectureService.java b/src/main/java/org/olat/modules/lecture/LectureService.java
index df3d83a5fd6..029208811c1 100644
--- a/src/main/java/org/olat/modules/lecture/LectureService.java
+++ b/src/main/java/org/olat/modules/lecture/LectureService.java
@@ -27,6 +27,7 @@ import org.olat.basesecurity.Group;
 import org.olat.basesecurity.IdentityRef;
 import org.olat.core.id.Identity;
 import org.olat.modules.lecture.model.AggregatedLectureBlocksStatistics;
+import org.olat.modules.lecture.model.IdentityRateWarning;
 import org.olat.modules.lecture.model.LectureBlockAndRollCall;
 import org.olat.modules.lecture.model.LectureBlockIdentityStatistics;
 import org.olat.modules.lecture.model.LectureBlockRollCallAndCoach;
@@ -515,6 +516,15 @@ public interface LectureService {
 	
 	public List<LectureBlockIdentityStatistics> groupByIdentity(List<LectureBlockIdentityStatistics> statistics);
 	
+	/**
+	 * The method calculate warnings on a user base. If a user as a course with a warning,
+	 * the method return the warning for it. It's a "max" grouping, not an average one.
+	 * 
+	 * @param statistics
+	 * @return
+	 */
+	public List<IdentityRateWarning> groupRateWarning(List<LectureBlockIdentityStatistics> statistics);
+	
 	/**
 	 * Returns the statistics for the specified participant.
 	 * 
diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureBlockRollCallDAO.java b/src/main/java/org/olat/modules/lecture/manager/LectureBlockRollCallDAO.java
index eb6a5b128d0..ef6691eb884 100644
--- a/src/main/java/org/olat/modules/lecture/manager/LectureBlockRollCallDAO.java
+++ b/src/main/java/org/olat/modules/lecture/manager/LectureBlockRollCallDAO.java
@@ -619,6 +619,9 @@ public class LectureBlockRollCallDAO {
 			  .append("  or lower(user.institutionalUserIdentifier) in (:bulkIdentifiers)")
 			  .append(")");
 		}
+		if(params.hasEntries()) {
+			sb.append(" and re.key in (:repoEntryKeys)");
+		}
 		
 		Map<String,Object> queryParams = new HashMap<>();
 		appendUsersStatisticsSearchParams(params, queryParams, userPropertyHandlers, sb);
@@ -641,6 +644,11 @@ public class LectureBlockRollCallDAO {
 		if(params.getBulkIdentifiers() != null && !params.getBulkIdentifiers().isEmpty()) {
 			rawQuery.setParameter("bulkIdentifiers", params.getBulkIdentifiers());
 		}
+		if(params.hasEntries()) {
+			List<Long> repoEntryKeys = params.getEntries().stream()
+					.map(RepositoryEntryRef::getKey).collect(Collectors.toList());
+			rawQuery.setParameter("repoEntryKeys", repoEntryKeys);
+		}
 		for(Map.Entry<String, Object> entry:queryParams.entrySet()) {
 			rawQuery.setParameter(entry.getKey(), entry.getValue());
 		}
diff --git a/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java b/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java
index a38f9f63031..5bcd70c6988 100644
--- a/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java
+++ b/src/main/java/org/olat/modules/lecture/manager/LectureServiceImpl.java
@@ -62,6 +62,7 @@ import org.olat.core.util.mail.MailTemplate;
 import org.olat.core.util.mail.MailerResult;
 import org.olat.group.BusinessGroup;
 import org.olat.group.DeletableGroupData;
+import org.olat.modules.coach.model.IdentityRepositoryEntryKey;
 import org.olat.modules.lecture.LectureBlock;
 import org.olat.modules.lecture.LectureBlockAuditLog;
 import org.olat.modules.lecture.LectureBlockAuditLog.Action;
@@ -73,11 +74,13 @@ import org.olat.modules.lecture.LectureBlockStatus;
 import org.olat.modules.lecture.LectureBlockToGroup;
 import org.olat.modules.lecture.LectureModule;
 import org.olat.modules.lecture.LectureParticipantSummary;
+import org.olat.modules.lecture.LectureRateWarning;
 import org.olat.modules.lecture.LectureRollCallStatus;
 import org.olat.modules.lecture.LectureService;
 import org.olat.modules.lecture.Reason;
 import org.olat.modules.lecture.RepositoryEntryLectureConfiguration;
 import org.olat.modules.lecture.model.AggregatedLectureBlocksStatistics;
+import org.olat.modules.lecture.model.IdentityRateWarning;
 import org.olat.modules.lecture.model.LectureBlockAndRollCall;
 import org.olat.modules.lecture.model.LectureBlockIdentityStatistics;
 import org.olat.modules.lecture.model.LectureBlockImpl;
@@ -993,6 +996,54 @@ public class LectureServiceImpl implements LectureService, UserDataDeletable, De
 		return aggregatedStatistics;
 	}
 
+	@Override
+	public List<IdentityRateWarning> groupRateWarning(List<LectureBlockIdentityStatistics> statistics) {
+		Map<IdentityRepositoryEntryKey,LectureBlockIdentityStatistics> groupBy = new HashMap<>();
+		for(LectureBlockIdentityStatistics statistic:statistics) {
+			IdentityRepositoryEntryKey key = new IdentityRepositoryEntryKey(statistic.getIdentityKey(), statistic.getRepoKey());
+			if(groupBy.containsKey(key)){
+				groupBy.get(key).aggregate(statistic);
+			} else {
+				groupBy.put(key, statistic.cloneAll());
+			}
+		}
+
+		boolean countAuthorizedAbsenceAsAttendant = lectureModule.isCountAuthorizedAbsenceAsAttendant();
+		List<LectureBlockIdentityStatistics> aggregatedStatistics = new ArrayList<>(groupBy.values());
+		for(LectureBlockIdentityStatistics statistic:aggregatedStatistics) {
+			lectureBlockRollCallDao.calculateAttendanceRate(statistic, countAuthorizedAbsenceAsAttendant);
+		}
+		
+		Map<Long,IdentityRateWarning> warnings = new HashMap<>();
+		for(LectureBlockIdentityStatistics aggregatedStatistic:aggregatedStatistics) {
+			LectureRateWarning warning = calculateWarning(aggregatedStatistic);
+			if(warning == LectureRateWarning.error || warning == LectureRateWarning.warning) {
+				Long identityKey = aggregatedStatistic.getIdentityKey();
+				if(warnings.containsKey(identityKey)) {
+					warnings.get(identityKey).updateWarning(warning);
+				} else {
+					warnings.put(identityKey, new IdentityRateWarning(identityKey, warning));
+				}
+			}
+		}
+		return new ArrayList<>(warnings.values());
+	}
+	
+	private LectureRateWarning calculateWarning(LectureBlockIdentityStatistics stats) {
+		if(stats.isCalculateRate() && stats.getTotalPersonalPlannedLectures() > 0 &&
+				(stats.getTotalAbsentLectures() > 0 || stats.getTotalAttendedLectures() > 0 || stats.getTotalAuthorizedAbsentLectures() > 0)) {
+			double attendanceRate = stats.getAttendanceRate();
+			double requiredRate = stats.getRequiredRate();
+			
+			if(requiredRate > attendanceRate) {
+				return LectureRateWarning.error;
+			} else if(attendanceRate - requiredRate < 0.05) {// less than 5%
+				return LectureRateWarning.warning;
+			}
+		}
+		return LectureRateWarning.none;
+	}
+
 	@Override
 	public List<LectureBlockStatistics> getParticipantLecturesStatistics(IdentityRef identity) {
 		boolean authorizedAbsenceEnabled = lectureModule.isAuthorizedAbsenceEnabled();
@@ -1269,4 +1320,5 @@ public class LectureServiceImpl implements LectureService, UserDataDeletable, De
 			//
 		}
 	}
+
 }
\ No newline at end of file
diff --git a/src/main/java/org/olat/modules/lecture/model/IdentityRateWarning.java b/src/main/java/org/olat/modules/lecture/model/IdentityRateWarning.java
new file mode 100644
index 00000000000..257d167680b
--- /dev/null
+++ b/src/main/java/org/olat/modules/lecture/model/IdentityRateWarning.java
@@ -0,0 +1,53 @@
+/**
+ * <a href="http://www.openolat.org">
+ * OpenOLAT - Online Learning and Training</a><br>
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); <br>
+ * you may not use this file except in compliance with the License.<br>
+ * You may obtain a copy of the License at the
+ * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a>
+ * <p>
+ * Unless required by applicable law or agreed to in writing,<br>
+ * software distributed under the License is distributed on an "AS IS" BASIS, <br>
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br>
+ * See the License for the specific language governing permissions and <br>
+ * limitations under the License.
+ * <p>
+ * Initial code contributed and copyrighted by<br>
+ * frentix GmbH, http://www.frentix.com
+ * <p>
+ */
+package org.olat.modules.lecture.model;
+
+import org.olat.modules.lecture.LectureRateWarning;
+
+/**
+ * 
+ * Initial date: 14 févr. 2019<br>
+ * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com
+ *
+ */
+public class IdentityRateWarning {
+	
+	private final Long identityKey;
+	private LectureRateWarning warning;
+	
+	public IdentityRateWarning(Long identityKey, LectureRateWarning warning) {
+		this.identityKey = identityKey;
+		this.warning = warning;
+	}
+	
+	public Long getIdentityKey() {
+		return identityKey;
+	}
+
+	public LectureRateWarning getWarning() {
+		return warning;
+	}
+
+	public void updateWarning(LectureRateWarning newState) {
+		if(this.warning == null || this.warning.ordinal() < newState.ordinal()) {
+			this.warning = newState;
+		}
+	}
+}
diff --git a/src/main/java/org/olat/modules/lecture/model/LectureBlockIdentityStatistics.java b/src/main/java/org/olat/modules/lecture/model/LectureBlockIdentityStatistics.java
index 79581a58827..2c2e9e75bdc 100644
--- a/src/main/java/org/olat/modules/lecture/model/LectureBlockIdentityStatistics.java
+++ b/src/main/java/org/olat/modules/lecture/model/LectureBlockIdentityStatistics.java
@@ -19,6 +19,8 @@
  */
 package org.olat.modules.lecture.model;
 
+import org.olat.modules.lecture.LectureRateWarning;
+
 /**
  * 
  * 
@@ -31,6 +33,8 @@ public class LectureBlockIdentityStatistics extends LectureBlockStatistics {
 	private final String identityName;
 	private final String[] identityProps;
 	
+	private LectureRateWarning explicitWarning;
+	
 	public LectureBlockIdentityStatistics(Long identityKey, String identityName, String[] identityProps,
 			Long repoKey, String displayName, String externalRef, boolean calculateRate, double requiredRate) {
 		super(identityKey, repoKey, displayName, externalRef, calculateRate, requiredRate);
@@ -46,6 +50,14 @@ public class LectureBlockIdentityStatistics extends LectureBlockStatistics {
 		return identityProps;
 	}
 	
+	public LectureRateWarning getExplicitWarning() {
+		return explicitWarning;
+	}
+
+	public void setExplicitWarning(LectureRateWarning explicitWarning) {
+		this.explicitWarning = explicitWarning;
+	}
+
 	public String getIdentityProp(int pos) {
 		if(identityProps != null && pos >= 0 && pos < identityProps.length) {
 			return identityProps[pos];
@@ -65,6 +77,18 @@ public class LectureBlockIdentityStatistics extends LectureBlockStatistics {
 		return clone;
 	}
 	
+	public LectureBlockIdentityStatistics cloneAll() {
+		LectureBlockIdentityStatistics clone = new LectureBlockIdentityStatistics(getIdentityKey(),
+				identityName, identityProps, getRepoKey(), getDisplayName(), getExternalRef(), isCalculateRate(), getRequiredRate());
+		clone.addTotalAbsentLectures(getTotalAbsentLectures());
+		clone.addTotalAttendedLectures(getTotalAttendedLectures());
+		clone.addTotalAuthorizedAbsentLectures(getTotalAuthorizedAbsentLectures());
+		clone.addTotalEffectiveLectures(getTotalEffectiveLectures());		
+		clone.addTotalLectureBlocks(getTotalLectureBlocks());
+		clone.addTotalPersonalPlannedLectures(getTotalPersonalPlannedLectures());
+		return clone;
+	}
+	
 	public void aggregate(LectureBlockIdentityStatistics statistics) {
 		addTotalAbsentLectures(statistics.getTotalAbsentLectures());
 		addTotalAttendedLectures(statistics.getTotalAttendedLectures());
diff --git a/src/main/java/org/olat/modules/lecture/model/LectureStatisticsSearchParameters.java b/src/main/java/org/olat/modules/lecture/model/LectureStatisticsSearchParameters.java
index 4035e0db79b..15a9da9ad39 100644
--- a/src/main/java/org/olat/modules/lecture/model/LectureStatisticsSearchParameters.java
+++ b/src/main/java/org/olat/modules/lecture/model/LectureStatisticsSearchParameters.java
@@ -25,6 +25,7 @@ import java.util.List;
 import java.util.Map;
 
 import org.olat.core.id.OrganisationRef;
+import org.olat.repository.RepositoryEntryRef;
 import org.olat.repository.model.RepositoryEntryLifecycle;
 
 /**
@@ -43,6 +44,7 @@ public class LectureStatisticsSearchParameters {
 	private Date endDate;
 	private RepositoryEntryLifecycle lifecycle;
 	private List<OrganisationRef> organisations;
+	private List<RepositoryEntryRef> entries;
 	
 	public String getLogin() {
 		return login;
@@ -83,6 +85,22 @@ public class LectureStatisticsSearchParameters {
 	public void setBulkIdentifiers(List<String> bulkIdentifiers) {
 		this.bulkIdentifiers = bulkIdentifiers;
 	}
+	
+	public boolean hasEntries() {
+		return entries != null && !entries.isEmpty();
+	}
+
+	public List<RepositoryEntryRef> getEntries() {
+		return new ArrayList<>(entries);
+	}
+
+	public void setEntries(List<? extends RepositoryEntryRef> entries) {
+		if(entries == null) {
+			this.entries = null;
+		} else {
+			this.entries = new ArrayList<>(entries);
+		}
+	}
 
 	public Map<String, String> getUserProperties() {
 		return userProperties;
diff --git a/src/main/java/org/olat/modules/lecture/model/RepositoryEntryLectureConfigurationImpl.java b/src/main/java/org/olat/modules/lecture/model/RepositoryEntryLectureConfigurationImpl.java
index 23f1b1ba2bd..4856ee4fe4a 100644
--- a/src/main/java/org/olat/modules/lecture/model/RepositoryEntryLectureConfigurationImpl.java
+++ b/src/main/java/org/olat/modules/lecture/model/RepositoryEntryLectureConfigurationImpl.java
@@ -29,7 +29,6 @@ import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
-import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.Temporal;
@@ -47,9 +46,7 @@ import org.olat.repository.RepositoryEntry;
  */
 @Entity(name="lectureentryconfig")
 @Table(name="o_lecture_entry_config")
-@NamedQueries(
-	@NamedQuery(name="lectureconfigByRepositoryEntry", query="select config from lectureentryconfig config where config.entry.key=:entryKey")
-)
+@NamedQuery(name="lectureconfigByRepositoryEntry", query="select config from lectureentryconfig config where config.entry.key=:entryKey")
 public class RepositoryEntryLectureConfigurationImpl implements Persistable, RepositoryEntryLectureConfiguration {
 
 	private static final long serialVersionUID = -728141275261361935L;
diff --git a/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java b/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java
index 5a32d77f490..468210aee41 100644
--- a/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/LectureSettingsAdminController.java
@@ -54,12 +54,20 @@ public class LectureSettingsAdminController extends FormBasicController {
 	private SingleSelection canOverrideStandardConfigEl, showAllTeachersLecturesEl;
 	private TextElement attendanceRateEl, appealPeriodEl, reminderPeriodEl,
 		autoClosePeriodEl;
-	private MultipleSelectionElement enableEl, calculateAttendanceRateEnableEl,
-		appealAbsenceEnableEl, statusEnabledEl, partiallyDoneEnabledEl,
-		authorizedAbsenceEnableEl, absenceDefaultAuthorizedEl,
-		countAuthorizedAbsenceAsAttendantEl, syncTeachersCalendarEnableEl,
-		syncCourseCalendarEnableEl, teacherCanAuthorizeAbsenceEl,
-		reminderEnableEl, rollCallEnableEl;
+	private MultipleSelectionElement enableEl;
+	private MultipleSelectionElement calculateAttendanceRateEnableEl;
+	private MultipleSelectionElement appealAbsenceEnableEl;
+	private MultipleSelectionElement statusEnabledEl;
+	private MultipleSelectionElement partiallyDoneEnabledEl;
+	private MultipleSelectionElement authorizedAbsenceEnableEl;
+	private MultipleSelectionElement absenceDefaultAuthorizedEl;
+	private MultipleSelectionElement countAuthorizedAbsenceAsAttendantEl;
+	private MultipleSelectionElement syncTeachersCalendarEnableEl;
+	private MultipleSelectionElement syncCourseCalendarEnableEl;
+	private MultipleSelectionElement teacherCanAuthorizeAbsenceEl;
+	private MultipleSelectionElement courseOwnersCanViewAllCoursesInCurriculumEl;
+	private MultipleSelectionElement reminderEnableEl;
+	private MultipleSelectionElement rollCallEnableEl;
 	private FormLayoutContainer globalCont;
 	
 	@Autowired
@@ -137,6 +145,7 @@ public class LectureSettingsAdminController extends FormBasicController {
 		countAuthorizedAbsenceAsAttendantEl = uifactory.addCheckboxesHorizontal("lecture.count.authorized.absence.attendant", globalCont, onKeys, onValues);
 		absenceDefaultAuthorizedEl = uifactory.addCheckboxesHorizontal("lecture.absence.default.authorized", globalCont, onKeys, onValues);
 		teacherCanAuthorizeAbsenceEl = uifactory.addCheckboxesHorizontal("lecture.teacher.can.authorize.absence", globalCont, onKeys, onValues);
+		courseOwnersCanViewAllCoursesInCurriculumEl = uifactory.addCheckboxesHorizontal("lecture.owner.can.view.all.curriculum.elements", globalCont, onKeys, onValues);
 
 		// appeal enabled
 		appealAbsenceEnableEl = uifactory.addCheckboxesHorizontal("lecture.appeal.absence.enabled", globalCont, onKeys, onValues);
@@ -247,6 +256,14 @@ public class LectureSettingsAdminController extends FormBasicController {
 		} else {
 			teacherCanAuthorizeAbsenceEl.uncheckAll();
 		}
+		teacherCanAuthorizeAbsenceEl.setVisible(authorizedAbsenceEnableEl.isVisible() && authorizedAbsenceEnableEl.isAtLeastSelected(1));
+		
+		if(lectureModule.isOwnerCanViewAllCoursesInCurriculum()) {
+			courseOwnersCanViewAllCoursesInCurriculumEl.select(onKeys[0], true);
+		} else {
+			courseOwnersCanViewAllCoursesInCurriculumEl.uncheckAll();
+		}
+		
 		if(lectureModule.isAbsenceAppealEnabled()) {
 			appealAbsenceEnableEl.select(onKeys[0], true);
 		} else {
@@ -404,6 +421,8 @@ public class LectureSettingsAdminController extends FormBasicController {
 			lectureModule.setCountAuthorizedAbsenceAsAttendant(authorizedAbsenceenabled && countAuthorizedAbsenceAsAttendantEl.isAtLeastSelected(1));
 			lectureModule.setTeacherCanAuthorizedAbsence(authorizedAbsenceenabled && teacherCanAuthorizeAbsenceEl.isAtLeastSelected(1));
 			
+			lectureModule.setOwnerCanViewAllCoursesInCurriculum(courseOwnersCanViewAllCoursesInCurriculumEl.isAtLeastSelected(1));
+			
 			lectureModule.setAbsenceAppealEnabled(appealAbsenceEnableEl.isAtLeastSelected(1));
 			if(appealAbsenceEnableEl.isAtLeastSelected(1)) {
 				int period = Integer.parseInt(appealPeriodEl.getValue());
diff --git a/src/main/java/org/olat/modules/lecture/ui/ParticipantLecturesOverviewController.java b/src/main/java/org/olat/modules/lecture/ui/ParticipantLecturesOverviewController.java
index b230b6f2743..41b627fab5d 100644
--- a/src/main/java/org/olat/modules/lecture/ui/ParticipantLecturesOverviewController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/ParticipantLecturesOverviewController.java
@@ -20,6 +20,8 @@
 package org.olat.modules.lecture.ui;
 
 import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.olat.NewControllerFactory;
 import org.olat.core.commons.fullWebApp.popup.BaseFullWebappPopupLayoutFactory;
@@ -60,6 +62,7 @@ import org.olat.modules.lecture.ui.component.PercentCellRenderer;
 import org.olat.modules.lecture.ui.component.RateWarningCellRenderer;
 import org.olat.modules.lecture.ui.export.IdentityAuditLogExport;
 import org.olat.repository.RepositoryEntry;
+import org.olat.repository.RepositoryEntryRef;
 import org.olat.repository.RepositoryService;
 import org.olat.user.UserManager;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -84,6 +87,8 @@ public class ParticipantLecturesOverviewController extends FormBasicController i
 	private final boolean withSelect;
 	private final Identity assessedIdentity;
 	private final boolean authorizedAbsenceEnabled;
+	private final List<RepositoryEntryRef> filterByEntries;
+	
 	private ParticipantLectureBlocksController lectureBlocksCtrl;
 	
 	@Autowired
@@ -96,17 +101,19 @@ public class ParticipantLecturesOverviewController extends FormBasicController i
 	private RepositoryService repositoryService;
 	
 	public ParticipantLecturesOverviewController(UserRequest ureq, WindowControl wControl, boolean withTitle) {
-		this(ureq, wControl, ureq.getIdentity(), true, true, false, withTitle);
+		this(ureq, wControl, ureq.getIdentity(), null, true, true, false, withTitle);
 	}
 	
 	public ParticipantLecturesOverviewController(UserRequest ureq, WindowControl wControl,
-			Identity assessedIdentity, boolean withPrint, boolean withSelect, boolean withLog, boolean withTitle) {
+			Identity assessedIdentity, List<RepositoryEntryRef> filterByEntries,
+			boolean withPrint, boolean withSelect, boolean withLog, boolean withTitle) {
 		super(ureq, wControl, "participant_overview");
 		this.withLog = withLog;
 		this.withPrint = withPrint;
 		this.withTitle = withTitle;
 		this.withSelect = withSelect;
 		this.assessedIdentity = assessedIdentity;
+		this.filterByEntries = filterByEntries;
 		authorizedAbsenceEnabled = lectureModule.isAuthorizedAbsenceEnabled();
 		initForm(ureq);
 		loadModel();
@@ -184,6 +191,15 @@ public class ParticipantLecturesOverviewController extends FormBasicController i
 	
 	private void loadModel() {
 		List<LectureBlockStatistics> statistics = lectureService.getParticipantLecturesStatistics(assessedIdentity);
+		if(filterByEntries != null && !filterByEntries.isEmpty()) {
+			Set<Long> acceptedEntries = filterByEntries.stream()
+					.map(RepositoryEntryRef::getKey).collect(Collectors.toSet());
+			
+			List<LectureBlockStatistics> filteredStatistics = statistics.stream()
+					.filter(s -> acceptedEntries.contains(s.getRepoKey()))
+					.collect(Collectors.toList());
+			statistics = filteredStatistics;
+		}
 		AggregatedLectureBlocksStatistics total = lectureService.aggregatedStatistics(statistics);
 		tableModel.setObjects(statistics, total);
 		tableEl.reset(true, true, true);
@@ -259,7 +275,7 @@ public class ParticipantLecturesOverviewController extends FormBasicController i
 	private void doPrint(UserRequest ureq) {
 		ControllerCreator printControllerCreator = (lureq, lwControl) -> {
 			lwControl.getWindowBackOffice().getChiefController().addBodyCssClass("o_lectures_print");
-			Controller printCtrl = new ParticipantLecturesOverviewController(lureq, lwControl, assessedIdentity, false, false, false, true);
+			Controller printCtrl = new ParticipantLecturesOverviewController(lureq, lwControl, assessedIdentity, filterByEntries, false, false, false, true);
 			listenTo(printCtrl);
 			return printCtrl;				
 		};
diff --git a/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_de.properties
index 227775c9e7d..e0ecb45ed44 100644
--- a/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_de.properties
@@ -131,6 +131,7 @@ lecture.from.to=Zeit von\:
 lecture.from.to.format={0} bis {1}
 lecture.groups=Kurs / Gruppe / Curriculum
 lecture.location=Ort
+lecture.owner.can.view.all.curriculum.elements=Kursbesitzer dürfen alle Kurse in Curriculum Elementen sehen
 lecture.preparation=Vorbereitung/Nachbereitung
 lecture.reminder.enabled=Erinnerungsfunktion einschalten
 lecture.reminder.period=Erinnerungsfrist
diff --git a/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties
index 0397411c3d5..89c6856d163 100644
--- a/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/lecture/ui/_i18n/LocalStrings_en.properties
@@ -131,6 +131,7 @@ lecture.from.to=Time from\:
 lecture.from.to.format={0} until {1}
 lecture.groups=Course / groups / curriculum
 lecture.location=Location
+lecture.owner.can.view.all.curriculum.elements=Course owner can see all courses in curriculum elements
 lecture.preparation=Preparation
 lecture.reminder.enabled=Reminder enabled
 lecture.reminder.period=Reminder period in days
diff --git a/src/main/java/org/olat/modules/lecture/ui/coach/LecturesSearchFormController.java b/src/main/java/org/olat/modules/lecture/ui/coach/LecturesSearchFormController.java
index c8502741832..345d8659d10 100644
--- a/src/main/java/org/olat/modules/lecture/ui/coach/LecturesSearchFormController.java
+++ b/src/main/java/org/olat/modules/lecture/ui/coach/LecturesSearchFormController.java
@@ -62,7 +62,7 @@ import org.springframework.beans.factory.annotation.Autowired;
  */
 public class LecturesSearchFormController extends FormBasicController {
 
-	protected static final String PROPS_IDENTIFIER = LecturesSearchFormController.class.getName();
+	public static final String PROPS_IDENTIFIER = LecturesSearchFormController.class.getName();
 	
 	private TextElement login;
 	private TextElement bulkEl;
@@ -93,7 +93,7 @@ public class LecturesSearchFormController extends FormBasicController {
 		
 		Roles roles = ureq.getUserSession().getRoles();
 		admin = roles.isAdministrator() || roles.isLearnResourceManager() || roles.isLectureManager() || roles.isAuthor();
-		adminProps = securityModule.isUserAllowedAdminProps(ureq.getUserSession().getRoles());
+		adminProps = securityModule.isUserAllowedAdminProps(roles);
 		
 		if(organisationModule.isEnabled()) {
 			searcheableOrganisations = roles.getOrganisationsWithRoles(OrganisationRoles.administrator,
diff --git a/src/main/resources/database/mysql/alter_13_1_x_to_13_2_0.sql b/src/main/resources/database/mysql/alter_13_1_x_to_13_2_0.sql
index 17257d3d7f7..f9b111b7683 100644
--- a/src/main/resources/database/mysql/alter_13_1_x_to_13_2_0.sql
+++ b/src/main/resources/database/mysql/alter_13_1_x_to_13_2_0.sql
@@ -61,3 +61,8 @@ alter table o_qual_analysis_presentation add q_rubric_id varchar(50);
 -- video
 alter table o_vid_metadata add vid_url varchar(512);
 
+
+-- lectures
+alter table o_cur_curriculum_element add c_lectures varchar(16);
+alter table o_cur_element_type add c_lectures varchar(16);
+
diff --git a/src/main/resources/database/mysql/setupDatabase.sql b/src/main/resources/database/mysql/setupDatabase.sql
index efa7bf63f3e..6cb21def5ba 100644
--- a/src/main/resources/database/mysql/setupDatabase.sql
+++ b/src/main/resources/database/mysql/setupDatabase.sql
@@ -2605,6 +2605,7 @@ create table o_cur_element_type (
   c_external_id varchar(64),
   c_managed_flags varchar(255),
   c_calendars varchar(16),
+  c_lectures varchar(16),
   c_css_class varchar(64),
   primary key (id)
 );
@@ -2640,6 +2641,7 @@ create table o_cur_curriculum_element (
   c_m_path_keys varchar(255),
   c_managed_flags varchar(255),
   c_calendars varchar(16),
+  c_lectures varchar(16),
   fk_group bigint not null,
   fk_parent bigint,
   fk_curriculum bigint not null,
diff --git a/src/main/resources/database/oracle/alter_13_1_x_to_13_2_0.sql b/src/main/resources/database/oracle/alter_13_1_x_to_13_2_0.sql
index 84de5a4670d..495a760fcb4 100644
--- a/src/main/resources/database/oracle/alter_13_1_x_to_13_2_0.sql
+++ b/src/main/resources/database/oracle/alter_13_1_x_to_13_2_0.sql
@@ -58,3 +58,8 @@ alter table o_qual_analysis_presentation add q_rubric_id varchar(50);
 
 -- video
 alter table o_vid_metadata add vid_url varchar(512);
+
+
+-- lectures
+alter table o_cur_curriculum_element add c_lectures varchar(16);
+alter table o_cur_element_type add c_lectures varchar(16);
diff --git a/src/main/resources/database/oracle/setupDatabase.sql b/src/main/resources/database/oracle/setupDatabase.sql
index 5bce64eedf9..23d3c0ab8bf 100644
--- a/src/main/resources/database/oracle/setupDatabase.sql
+++ b/src/main/resources/database/oracle/setupDatabase.sql
@@ -2687,6 +2687,7 @@ create table o_cur_element_type (
   c_external_id varchar(64),
   c_managed_flags varchar(255),
   c_calendars varchar(16),
+  c_lectures varchar(16),
   c_css_class varchar(64),
   primary key (id)
 );
@@ -2722,6 +2723,7 @@ create table o_cur_curriculum_element (
   c_m_path_keys varchar(255),
   c_managed_flags varchar(255),
   c_calendars varchar(16),
+  c_lectures varchar(16),
   fk_group number(20) not null,
   fk_parent number(20),
   fk_curriculum number(20) not null,
diff --git a/src/main/resources/database/postgresql/alter_13_1_x_to_13_2_0.sql b/src/main/resources/database/postgresql/alter_13_1_x_to_13_2_0.sql
index 1bcb067aef6..1719756473b 100644
--- a/src/main/resources/database/postgresql/alter_13_1_x_to_13_2_0.sql
+++ b/src/main/resources/database/postgresql/alter_13_1_x_to_13_2_0.sql
@@ -59,3 +59,9 @@ alter table o_qual_analysis_presentation add q_rubric_id varchar(50);
 -- video
 alter table o_vid_metadata add vid_url varchar(512);
 
+
+-- lectures
+alter table o_cur_curriculum_element add c_lectures varchar(16);
+alter table o_cur_element_type add c_lectures varchar(16);
+
+
diff --git a/src/main/resources/database/postgresql/setupDatabase.sql b/src/main/resources/database/postgresql/setupDatabase.sql
index 05c71e1f473..678cfbb0cc9 100644
--- a/src/main/resources/database/postgresql/setupDatabase.sql
+++ b/src/main/resources/database/postgresql/setupDatabase.sql
@@ -2631,6 +2631,7 @@ create table o_cur_element_type (
   c_external_id varchar(64),
   c_managed_flags varchar(255),
   c_calendars varchar(16),
+  c_lectures varchar(16),
   c_css_class varchar(64),
   primary key (id)
 );
@@ -2666,6 +2667,7 @@ create table o_cur_curriculum_element (
   c_m_path_keys varchar(255),
   c_managed_flags varchar(255),
   c_calendars varchar(16),
+  c_lectures varchar(16),
   fk_group int8 not null,
   fk_parent int8,
   fk_curriculum int8 not null,
diff --git a/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java b/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java
index dab3a9fcd2c..e6ec0e3e2e9 100644
--- a/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java
+++ b/src/test/java/org/olat/course/assessment/manager/AssessmentModeManagerTest.java
@@ -44,6 +44,7 @@ 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.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.repository.RepositoryEntry;
@@ -743,7 +744,8 @@ public class AssessmentModeManagerTest extends OlatTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-32");
 		
 		Curriculum curriculum = curriculumService.createCurriculum("cur-as-mode-1", "Curriculum for assessment", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for assessment", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for assessment", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		curriculumService.addRepositoryEntry(element, entry, false);
 		curriculumService.addMember(element, participant, CurriculumRoles.participant);
@@ -786,7 +788,8 @@ public class AssessmentModeManagerTest extends OlatTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-37");
 		
 		Curriculum curriculum = curriculumService.createCurriculum("cur-as-mode-2", "Curriculum for assessment", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for assessment", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for assessment", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		curriculumService.addRepositoryEntry(element, entry, false);
 		curriculumService.addMember(element, participant, CurriculumRoles.participant);
@@ -908,7 +911,8 @@ public class AssessmentModeManagerTest extends OlatTestCase {
 		Identity coach1 = JunitTestHelper.createAndPersistIdentityAsRndUser("as-mode-39");
 		
 		Curriculum curriculum = curriculumService.createCurriculum("cur-as-mode-3", "Curriculum for assessment", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for assessment", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for assessment", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		curriculumService.addRepositoryEntry(element, entry, false);
 		curriculumService.addMember(element, participant1, CurriculumRoles.participant);
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java
index 6fdc2270a59..ef7c6069f0f 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java
@@ -36,11 +36,13 @@ import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumImpl;
 import org.olat.modules.curriculum.model.CurriculumInfos;
 import org.olat.modules.curriculum.model.CurriculumSearchParameters;
+import org.olat.repository.RepositoryEntry;
 import org.olat.test.JunitTestHelper;
 import org.olat.test.OlatTestCase;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -216,7 +218,36 @@ public class CurriculumDAOTest extends OlatTestCase {
 		// search curriculum for the user
 		CurriculumSearchParameters userParams = new CurriculumSearchParameters();
 		userParams.setManagerIdentity(user);
-		List<Curriculum> userCurriculums = curriculumDao.search(userParams);
+		List<CurriculumInfos> userCurriculums = curriculumDao.searchWithInfos(userParams);
+		Assert.assertTrue(userCurriculums.isEmpty());
+	}
+	
+	@Test
+	public void searchWithInfos_owner() {
+		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-user-1");
+		Identity manager = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-manager-1");
+		Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-course-owner-1");
+		Curriculum curriculum = curriculumDao.createAndPersist("Curriculum for owners", "Owners", "Short desc.", null);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "1. Element", new Date(), new Date(),
+				null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(owner);
+		curriculumService.addRepositoryEntry(element, entry, true);
+		dbInstance.commit();
+		curriculumService.addMember(curriculum, manager, CurriculumRoles.curriculummanager);
+		curriculumService.addMember(curriculum, user, CurriculumRoles.participant);
+		dbInstance.commitAndCloseSession();
+		
+		// search curriculum for the manager
+		CurriculumSearchParameters managerParams = new CurriculumSearchParameters();
+		managerParams.setOwnerIdentity(owner);
+		List<CurriculumInfos> managedCurriculums = curriculumDao.searchWithInfos(managerParams);
+		Assert.assertEquals(1, managedCurriculums.size());
+		Assert.assertEquals(curriculum, managedCurriculums.get(0).getCurriculum());
+		
+		// search curriculum for the user
+		CurriculumSearchParameters userParams = new CurriculumSearchParameters();
+		userParams.setOwnerIdentity(user);
+		List<CurriculumInfos> userCurriculums = curriculumDao.searchWithInfos(userParams);
 		Assert.assertTrue(userCurriculums.isEmpty());
 	}
 	
@@ -247,7 +278,7 @@ public class CurriculumDAOTest extends OlatTestCase {
 		Identity id = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-manager-1");
 		Curriculum curriculum = curriculumService.createCurriculum("CUR-MY-1", "My Curriculum 1", "Short desc.", null);
 		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "1. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		curriculumService.addMember(element, id, CurriculumRoles.participant);
 		dbInstance.commitAndCloseSession();
@@ -275,6 +306,22 @@ public class CurriculumDAOTest extends OlatTestCase {
 		Assert.assertFalse(isAdministrator);
 	}
 	
+	@Test
+	public void hasOwnerRoleInCurriculum() {
+		// make a curriculum with an element with a course
+		Identity owner = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-owner-1");
+		Curriculum curriculum = curriculumService.createCurriculum("CUR-1", "Curriculum 1", "Short desc.", null);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "1. Element", new Date(), new Date(),
+				null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(owner);
+		curriculumService.addRepositoryEntry(element, entry, true);
+		dbInstance.commit();
+
+		// is owner within a curriculum
+		boolean isOwner = curriculumDao.hasOwnerRoleInCurriculum(owner);
+		Assert.assertTrue(isOwner);
+	}
+	
 	@Test
 	public void hasRoleExpanded() {
 		// add a curriculum manager
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 dc092bea473..a7cdc474e00 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java
@@ -39,6 +39,7 @@ import org.olat.modules.curriculum.CurriculumElementMembership;
 import org.olat.modules.curriculum.CurriculumElementRef;
 import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRef;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
@@ -73,7 +74,7 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-1", "Curriculum for element", "Curriculum", null);
 		CurriculumElementType type = curriculumElementTypeDao.createCurriculumElementType("typ-for-cur-el-1", "Type for", "First element", "AC-234");
 		CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-1", "1. Element", new Date(), new Date(), null,
-				type, CurriculumCalendars.disabled, curriculum);
+				type, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Assert.assertNotNull(element);
 		dbInstance.commitAndCloseSession();
 		
@@ -94,7 +95,7 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-2", "Curriculum for element", "Curriculum", null);
 		CurriculumElementType type = curriculumElementTypeDao.createCurriculumElementType("typ-for-cur-el-2", "Type for", "First element", "AC-234");
 		CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-2", "2. Element", new Date(), new Date(), null,
-				type, CurriculumCalendars.disabled, curriculum);
+				type, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Assert.assertNotNull(element);
 		dbInstance.commitAndCloseSession();
 		
@@ -118,11 +119,11 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void loadByKeys() {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-2", "Curriculum for element", "Curriculum", null);
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-2", "2. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-2", "2. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement otherElement = curriculumElementDao.createCurriculumElement("Element-2", "2. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		List<CurriculumElement> elements = curriculumElementDao.loadByKeys(Arrays.asList(element1, element2));
@@ -136,11 +137,11 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void loadElements_curricullum() {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-el-6", "Curriculum for element", "Curriculum", null);
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-6", "6.1 Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-6", "6.1.1 Element", null, null, element1,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element3 = curriculumElementDao.createCurriculumElement("Element-6", "6.2 Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		//load all elements of the curriculum
@@ -156,7 +157,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	@Test
 	public void loadElementsWithInfos() {
 		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-1", "Curriculum for relation", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
 		RepositoryEntry entry1 = JunitTestHelper.createRandomRepositoryEntry(author);
 		RepositoryEntry entry2 = JunitTestHelper.createRandomRepositoryEntry(author);
@@ -175,7 +177,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	@Test
 	public void loadElements_repoEntry() {
 		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-1", "Curriculum for relation", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
 		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
 		dbInstance.commit();
@@ -191,17 +194,17 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void loadElementsByCurriculums() {
 		Curriculum curriculum1 = curriculumDao.createAndPersist("Cur-for-load-1", "Curriculum to load 1", null, null);
 		CurriculumElement parentElement = curriculumElementDao.createCurriculumElement("El-load-1", "Element 1", null, null,  null,
-				null, CurriculumCalendars.disabled, curriculum1);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("El-load-2", "Element 2", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum1);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("El-load-3", "Element 3", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum1);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		Curriculum curriculum2 = curriculumDao.createAndPersist("Cur-for-load-2", "Curriculum to load 2", null, null);
 		CurriculumElement parentElement2 = curriculumElementDao.createCurriculumElement("El-load-4", "Element 4", null, null,  null,
-				null, CurriculumCalendars.disabled, curriculum2);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		Curriculum otherCurriculum = curriculumDao.createAndPersist("Cur-for-load-3", "Curriculum to load3", null, null);
 		CurriculumElement otherElement = curriculumElementDao.createCurriculumElement("El-load-5", "Element 5", null, null,  null,
-				null, CurriculumCalendars.disabled, otherCurriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, otherCurriculum);
 		dbInstance.commitAndCloseSession();
 		
 		Collection<CurriculumRef> curriculumRefs = Arrays.asList(curriculum1, curriculum2);
@@ -216,17 +219,17 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void createCurriculumElementParentChildren() {
 		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-3", "Curriculum for element", "Curriculum", null);
 		CurriculumElement parentElement = curriculumElementDao.createCurriculumElement("Element-3", "3. Element", null, null,  null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		// save 3 children
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-3-1", "3.1 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-3-2", "3.2 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element3 = curriculumElementDao.createCurriculumElement("Element-3-3", "3.3 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		//reload parents
@@ -243,17 +246,17 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getParentLine() {
 		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-4", "Curriculum for element", "Curriculum", null);
 		CurriculumElement parentElement = curriculumElementDao.createCurriculumElement("Element-4", "4. Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		// save 3 children
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-4-1", "4.1 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-4-2", "4.1.1 Element", null, null, element1,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element3 = curriculumElementDao.createCurriculumElement("Element-4-3", "4.1.1.1 Element", null, null, element2,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		//reload parents
@@ -272,7 +275,7 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 		String externalId = UUID.randomUUID().toString();
 		String identifier = UUID.randomUUID().toString();
 		CurriculumElement element = curriculumElementDao.createCurriculumElement(identifier, "6.1 Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		element.setExternalId(externalId);
 		element = curriculumElementDao.update(element);
@@ -301,17 +304,17 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getDescendants() {
 		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-5", "Curriculum for element", "Curriculum", null);
 		CurriculumElement parentElement = curriculumElementDao.createCurriculumElement("Element-5", "5. Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		// save 3 children
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-5-1", "5.1 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element1_1 = curriculumElementDao.createCurriculumElement("Element-5-1-1", "5.1.1 Element", null, null, element1,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-5-2", "5.2 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		// load descendants of the root element
@@ -327,17 +330,17 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getChildren() {
 		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-15", "Curriculum for element", "Curriculum", null);
 		CurriculumElement parentElement = curriculumElementDao.createCurriculumElement("Element-15", "15. Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		// save 3 children
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-15-1", "15.1 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-15-2", "15.2 Element", null, null, parentElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		CurriculumElement element2_1 = curriculumElementDao.createCurriculumElement("Element-15-2-1", "15.2.1 Element", null, null, element2,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		// get children of the root element
@@ -358,17 +361,17 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void moveCurriculumElement() {
 		Curriculum curriculum = curriculumDao.createAndPersist("cur-for-el-7", "Curriculum for element", "Curriculum", null);
 		CurriculumElement rootElement = curriculumElementDao.createCurriculumElement("Element-7", "7. Element", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element1 = curriculumElementDao.createCurriculumElement("Element-7-1", "7.1 Element", null, null, rootElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element1_1 = curriculumElementDao.createCurriculumElement("Element-7-1-1", "7.1.1 Element", null, null, element1,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element1_1_1 = curriculumElementDao.createCurriculumElement("Element-7-1-1", "7.1.1 Element", null, null, element1_1,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element1_1_2 = curriculumElementDao.createCurriculumElement("Element-7-1-2", "7.1.2 Element", null, null, element1_1,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement element2 = curriculumElementDao.createCurriculumElement("Element-7-2", "7.2 Element", null, null, rootElement,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		// move element1_1 under element2
@@ -398,7 +401,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getMembersIdentity() {
 		Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1");
 		Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-4", "Curriculum for element", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager);
 		dbInstance.commitAndCloseSession();
 		
@@ -412,7 +416,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getMembersIdentity_elementKeys() {
 		Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1");
 		Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-4", "Curriculum for element", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager);
 		dbInstance.commitAndCloseSession();
 		
@@ -433,7 +438,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getMemberKeys() {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1");
 		Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-24", "Curriculum for element", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "4. Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "4. Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addMember(element, coach, CurriculumRoles.coach);
 		dbInstance.commitAndCloseSession();
 		
@@ -450,7 +456,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getMembershipInfos_elements() {
 		Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1");
 		Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-4", "Curriculum for element", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager);
 		dbInstance.commitAndCloseSession();
 		
@@ -469,7 +476,8 @@ public class CurriculumElementDAOTest extends OlatTestCase {
 	public void getMembershipInfos_curriculum() {
 		Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1");
 		Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-5", "Curriculum for element", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-5", "5. Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-5", "5. Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager);
 		dbInstance.commitAndCloseSession();
 		
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementToTaxonomyLevelDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementToTaxonomyLevelDAOTest.java
index 53af34226ff..cae3ebfe9c8 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementToTaxonomyLevelDAOTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementToTaxonomyLevelDAOTest.java
@@ -30,6 +30,7 @@ import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementToTaxonomyLevel;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.taxonomy.Taxonomy;
 import org.olat.modules.taxonomy.TaxonomyLevel;
 import org.olat.modules.taxonomy.manager.TaxonomyDAO;
@@ -62,7 +63,7 @@ public class CurriculumElementToTaxonomyLevelDAOTest extends OlatTestCase {
 	public void createRelation() {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-rela-1", "Curriculum for relation to taxonomy", "Curriculum", null);
 		CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-1", "1. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-98", "Leveled taxonomy", null, null);
 		TaxonomyLevel level = taxonomyLevelDao.createTaxonomyLevel("ID-Level-0", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
@@ -75,7 +76,7 @@ public class CurriculumElementToTaxonomyLevelDAOTest extends OlatTestCase {
 	public void createAndGetRelation() {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-rela-2", "Curriculum for relation to taxonomy", "Curriculum", null);
 		CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-2", "2. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-301", "Leveled taxonomy", null, null);
 		TaxonomyLevel level = taxonomyLevelDao.createTaxonomyLevel("ID-Level-0", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
@@ -95,7 +96,7 @@ public class CurriculumElementToTaxonomyLevelDAOTest extends OlatTestCase {
 	public void getTaxonomyLevels() {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-rela-3", "Curriculum for relation to taxonomy", "Curriculum", null);
 		CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-3", "3. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-302", "Leveled taxonomy", null, null);
 		TaxonomyLevel level = taxonomyLevelDao.createTaxonomyLevel("ID-Level-0", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
@@ -112,7 +113,7 @@ public class CurriculumElementToTaxonomyLevelDAOTest extends OlatTestCase {
 	public void getCurriculumElements() {
 		Curriculum curriculum = curriculumDao.createAndPersist("Cur-for-rela-4", "Curriculum for relation to taxonomy", "Curriculum", null);
 		CurriculumElement element = curriculumElementDao.createCurriculumElement("Element-4", "4. Element", new Date(), new Date(), null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-303", "Leveled taxonomy", null, null);
 		TaxonomyLevel level = taxonomyLevelDao.createTaxonomyLevel("ID-Level-0", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java
index 1882478fc07..197f588f7bc 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java
@@ -28,6 +28,7 @@ import org.olat.core.id.Identity;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumMember;
@@ -73,7 +74,8 @@ public class CurriculumMemberQueriesTest extends OlatTestCase {
 	public void getCurriculumElementMembers() {
 		Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1");
 		Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-4", "Curriculum for element", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager);
 		dbInstance.commitAndCloseSession();
 		
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAOTest.java
index 91b2cccad0f..6b6fb3dc8e2 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAOTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumRepositoryEntryRelationDAOTest.java
@@ -31,8 +31,11 @@ import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementRef;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
+import org.olat.modules.lecture.RepositoryEntryLectureConfiguration;
+import org.olat.modules.lecture.manager.RepositoryEntryLectureConfigurationDAO;
 import org.olat.repository.RepositoryEntry;
 import org.olat.repository.RepositoryEntryStatusEnum;
 import org.olat.test.JunitTestHelper;
@@ -53,11 +56,14 @@ public class CurriculumRepositoryEntryRelationDAOTest extends OlatTestCase {
 	private CurriculumService curriculumService;
 	@Autowired
 	private CurriculumRepositoryEntryRelationDAO curriculumRepositoryEntryRelationDao;
+	@Autowired
+	private RepositoryEntryLectureConfigurationDAO repositoryEntryLectureConfigurationDao;
 	
 	@Test
 	public void getRepositoryEntries() {
 		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-2", "Curriculum for relation", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
 		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
 		dbInstance.commit();
@@ -65,16 +71,74 @@ public class CurriculumRepositoryEntryRelationDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 		
 		List<CurriculumElementRef> elements = Collections.singletonList(element);
-		List<RepositoryEntry> entries = curriculumRepositoryEntryRelationDao.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed());
+		List<RepositoryEntry> entries = curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed(), false, null);
 		Assert.assertNotNull(entries);
 		Assert.assertEquals(1, entries.size());
 		Assert.assertEquals(entry, entries.get(0));
 	}
 	
+	@Test
+	public void getRepositoryEntries_withLectures() {
+		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-2", "Curriculum for relation", "Curriculum", null);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.enabled, curriculum);
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
+		RepositoryEntry entryLecture = JunitTestHelper.createRandomRepositoryEntry(author);
+		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
+		RepositoryEntryLectureConfiguration lectureConfig = repositoryEntryLectureConfigurationDao.createConfiguration(entryLecture);
+		lectureConfig.setLectureEnabled(true);
+		repositoryEntryLectureConfigurationDao.update(lectureConfig);
+		dbInstance.commit();
+		curriculumService.addRepositoryEntry(element, entryLecture, false);
+		curriculumService.addRepositoryEntry(element, entry, false);
+		dbInstance.commitAndCloseSession();
+		
+		List<CurriculumElementRef> elements = Collections.singletonList(element);
+		List<RepositoryEntry> entries = curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed(), true, null);
+		Assert.assertNotNull(entries);
+		Assert.assertEquals(1, entries.size());
+		Assert.assertEquals(entryLecture, entries.get(0));
+	}
+	
+	@Test
+	public void getRepositoryEntries_withPermissions() {
+		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-2", "Curriculum for checked relation", "Curriculum", null);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for checked relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		Identity user = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-not-user");
+		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
+		RepositoryEntry entryLecture = JunitTestHelper.createRandomRepositoryEntry(author);
+		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
+		RepositoryEntryLectureConfiguration lectureConfig = repositoryEntryLectureConfigurationDao.createConfiguration(entryLecture);
+		lectureConfig.setLectureEnabled(true);
+		repositoryEntryLectureConfigurationDao.update(lectureConfig);
+		dbInstance.commit();
+		curriculumService.addRepositoryEntry(element, entryLecture, false);
+		curriculumService.addRepositoryEntry(element, entry, false);
+		dbInstance.commitAndCloseSession();
+		
+		// check author
+		List<CurriculumElementRef> elements = Collections.singletonList(element);
+		List<RepositoryEntry> entries = curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed(), true, author);
+		Assert.assertNotNull(entries);
+		Assert.assertEquals(1, entries.size());
+		Assert.assertEquals(entryLecture, entries.get(0));
+		
+		// check the second user without permission
+		List<RepositoryEntry> noEntries = curriculumRepositoryEntryRelationDao
+				.getRepositoryEntries(elements, RepositoryEntryStatusEnum.preparationToClosed(), true, user);
+		Assert.assertNotNull(noEntries);
+		Assert.assertTrue(noEntries.isEmpty());
+	}
+	
 	@Test
 	public void getCurriculumElements() {
 		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-2", "Curriculum for relation", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
 		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
 		dbInstance.commit();
@@ -90,7 +154,8 @@ public class CurriculumRepositoryEntryRelationDAOTest extends OlatTestCase {
 	@Test
 	public void getCurriculumElementsRepositoryEntryAnsUser() {
 		Curriculum curriculum = curriculumService.createCurriculum("cur-el-rel-2", "Curriculum for relation", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
 		RepositoryEntry entry = JunitTestHelper.createRandomRepositoryEntry(author);
 		dbInstance.commit();
diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java
index 153dac175b0..13e7d17b4e5 100644
--- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java
+++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumServiceTest.java
@@ -30,6 +30,7 @@ import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementMembership;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumElementRepositoryEntryViews;
@@ -78,7 +79,8 @@ public class CurriculumServiceTest extends OlatTestCase {
 	@Test
 	public void getCurriculumElements() {
 		Curriculum curriculum = curriculumService.createCurriculum("CUR-2", "Curriculum 2", "Curriculum", null);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-for-rel", "Element for relation", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-el-re-auth");
 		RepositoryEntry publishedEntry = JunitTestHelper.createRandomRepositoryEntry(author);
 		RepositoryEntry reviewedEntry = JunitTestHelper.createRandomRepositoryEntry(author);
diff --git a/src/test/java/org/olat/modules/quality/analysis/manager/AnalysisFilterDAOTest.java b/src/test/java/org/olat/modules/quality/analysis/manager/AnalysisFilterDAOTest.java
index 2071f510cae..7a890afc84f 100644
--- a/src/test/java/org/olat/modules/quality/analysis/manager/AnalysisFilterDAOTest.java
+++ b/src/test/java/org/olat/modules/quality/analysis/manager/AnalysisFilterDAOTest.java
@@ -49,6 +49,7 @@ import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.forms.EvaluationFormManager;
 import org.olat.modules.forms.EvaluationFormParticipation;
@@ -803,8 +804,8 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
 		CurriculumElementType type1 = curriculumService.createCurriculumElementType("a", "b", null, null);
 		CurriculumElementType type2 = curriculumService.createCurriculumElementType("a", "b", null, null);
 		Curriculum curriculum = qualityTestHelper.createCurriculum();
-		CurriculumElement element1 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type1, disabled, curriculum);
-		CurriculumElement element2 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type2, disabled, curriculum);;
+		CurriculumElement element1 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type1, disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element2 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type2, disabled, CurriculumLectures.disabled, curriculum);;
 		// Participation with curriculum element of type1
 		QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
 		List<EvaluationFormParticipation> participations1 = qualityService.addParticipations(dc1, Collections.singletonList(executor));
@@ -1692,7 +1693,8 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
 		Curriculum curriculum = qualityTestHelper.createCurriculum();
 		CurriculumElement element1 = qualityTestHelper.createCurriculumElement();
 		CurriculumElement element2 = qualityTestHelper.createCurriculumElement();
-		CurriculumElement subElement = curriculumService.createCurriculumElement("el", "Element", null, null, element1, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement subElement = curriculumService.createCurriculumElement("el", "Element", null, null, element1, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement otherElement = qualityTestHelper.createCurriculumElement();
 		// Participation with curriculum element
 		QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
@@ -1736,7 +1738,8 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
 		Curriculum curriculum = qualityTestHelper.createCurriculum();
 		CurriculumElement element1 = qualityTestHelper.createCurriculumElement();
 		CurriculumElement element2 = qualityTestHelper.createCurriculumElement();
-		CurriculumElement subElement = curriculumService.createCurriculumElement("el", "Element", null, null, element1, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement subElement = curriculumService.createCurriculumElement("el", "Element", null, null, element1, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement otherElement = qualityTestHelper.createCurriculumElement();
 		// Participation with curriculum element
 		QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
@@ -1780,10 +1783,10 @@ public class AnalysisFilterDAOTest extends OlatTestCase {
 		CurriculumElementType type = curriculumService.createCurriculumElementType("a", "b", null, null);
 		CurriculumElementType typeOther = curriculumService.createCurriculumElementType("y", "z", null, null);
 		Curriculum curriculum = qualityTestHelper.createCurriculum();
-		CurriculumElement element1 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type, disabled, curriculum);
-		CurriculumElement element2 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type, disabled, curriculum);;
-		CurriculumElement elementNull = curriculumService.createCurriculumElement("el", "Element", null, null, null, null, disabled, curriculum);
-		CurriculumElement elementOther = curriculumService.createCurriculumElement("el", "Element", null, null, null, typeOther, disabled, curriculum);
+		CurriculumElement element1 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type, disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element2 = curriculumService.createCurriculumElement("el", "Element", null, null, null, type, disabled, CurriculumLectures.disabled, curriculum);;
+		CurriculumElement elementNull = curriculumService.createCurriculumElement("el", "Element", null, null, null, null, disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement elementOther = curriculumService.createCurriculumElement("el", "Element", null, null, null, typeOther, disabled, CurriculumLectures.disabled, curriculum);
 		// Participation with curriculum element of type
 		QualityDataCollection dc1 = qualityService.createDataCollection(asList(dcOrganisation), formEntry);
 		List<EvaluationFormParticipation> participations1 = qualityService.addParticipations(dc1, Collections.singletonList(executor));
diff --git a/src/test/java/org/olat/modules/quality/data/ExampleData.java b/src/test/java/org/olat/modules/quality/data/ExampleData.java
index bfbf17bf6a5..7eb3b58b94e 100644
--- a/src/test/java/org/olat/modules/quality/data/ExampleData.java
+++ b/src/test/java/org/olat/modules/quality/data/ExampleData.java
@@ -43,6 +43,7 @@ import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.model.CurriculumSearchParameters;
@@ -162,7 +163,8 @@ public class ExampleData extends OlatTestCase {
 			return curriculumElements.get(0);
 		}
 		
-		return curriculumService.createCurriculumElement(identifier, displayName, null, null, input.getParent(), null, CurriculumCalendars.disabled, input.getCurriculum());
+		return curriculumService.createCurriculumElement(identifier, displayName, null, null, input.getParent(), null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, input.getCurriculum());
 	}
 	
 	private void createCurriculum(Organisation org, Parameter param) {
diff --git a/src/test/java/org/olat/modules/quality/generator/manager/titlecreator/CurriculumElementHandlerTest.java b/src/test/java/org/olat/modules/quality/generator/manager/titlecreator/CurriculumElementHandlerTest.java
index 07e17e91821..4f2a57cbad1 100644
--- a/src/test/java/org/olat/modules/quality/generator/manager/titlecreator/CurriculumElementHandlerTest.java
+++ b/src/test/java/org/olat/modules/quality/generator/manager/titlecreator/CurriculumElementHandlerTest.java
@@ -31,6 +31,7 @@ import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.quality.generator.TitleCreator;
 import org.olat.test.OlatTestCase;
@@ -96,7 +97,7 @@ public class CurriculumElementHandlerTest extends OlatTestCase {
 		Organisation organisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum(random(), value, null, organisation);
 		CurriculumElement element = curriculumService.createCurriculumElement(random(), random(), null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		String template = "$" + CurriculumElementHandler.CURRICULUM_DISPLAY_NAME;
 		
 		String merged = titleCreator.merge(template, asList(element));
@@ -134,7 +135,7 @@ public class CurriculumElementHandlerTest extends OlatTestCase {
 		Organisation organisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum(random(), random(), null, organisation);
 		return curriculumService.createCurriculumElement(random(), random(),
-				null, null, null, null, CurriculumCalendars.disabled, curriculum);
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 	}
 	
 	private String random() {
diff --git a/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java b/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java
index bdcc3be6f57..cf7a3ee66ea 100644
--- a/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java
+++ b/src/test/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAOTest.java
@@ -37,6 +37,7 @@ import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.lecture.LectureBlock;
 import org.olat.modules.lecture.LectureBlockStatus;
@@ -204,8 +205,10 @@ public class CourseLecturesProviderDAOTest extends OlatTestCase {
 		Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("");
 		Organisation organisation = organisationService.createOrganisation("org", "Org", null, null, null);
 		Curriculum curriculum = curriculumService.createCurriculum("Curriculum", "Curriculum", null, organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element", "Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement otherElement = curriculumService.createCurriculumElement("Element", "Element", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element", "Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement otherElement = curriculumService.createCurriculumElement("Element", "Element", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		RepositoryEntry course1 = JunitTestHelper.createAndPersistRepositoryEntry();
 		RepositoryEntry course2 = JunitTestHelper.createAndPersistRepositoryEntry();
 		RepositoryEntry otherCourse = JunitTestHelper.createAndPersistRepositoryEntry();
diff --git a/src/test/java/org/olat/modules/quality/generator/provider/curriculumelement/manager/CurriculumElementProviderDAOTest.java b/src/test/java/org/olat/modules/quality/generator/provider/curriculumelement/manager/CurriculumElementProviderDAOTest.java
index ff1e320c150..ce6cd601f1e 100644
--- a/src/test/java/org/olat/modules/quality/generator/provider/curriculumelement/manager/CurriculumElementProviderDAOTest.java
+++ b/src/test/java/org/olat/modules/quality/generator/provider/curriculumelement/manager/CurriculumElementProviderDAOTest.java
@@ -37,6 +37,7 @@ import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementStatus;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.quality.QualityService;
 import org.olat.modules.quality.generator.QualityGenerator;
@@ -74,7 +75,7 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		CurriculumElementType ceType = curriculumService.createCurriculumElementType(random(), random(), null, null);
 		Curriculum curriculum = curriculumService.createCurriculum(random(), random(), null, organisation);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, ceType, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, ceType, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		SearchParameters searchParams = new SearchParameters();
@@ -89,12 +90,12 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		List<Organisation> organisations = Collections.singletonList(organisation);
 		Curriculum curriculum = curriculumService.createCurriculum(random(), random(), null, organisation);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		QualityGenerator generator = generatorService.createGenerator(random(), organisations);
 		dbInstance.commitAndCloseSession();
 
 		CurriculumElement curriculumElementCreated = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		RepositoryEntry formEntry = JunitTestHelper.createAndPersistRepositoryEntry();
 		qualityService.createDataCollection(organisations, formEntry, generator, curriculumElementCreated.getKey());
 		dbInstance.commitAndCloseSession();
@@ -111,22 +112,22 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		Organisation organisationSuper = organisationService.createOrganisation(random(), random(), null, null, null);
 		Curriculum curriculumSuper = curriculumService.createCurriculum(random(), random(), null, organisationSuper);
 		CurriculumElement curriculumElementSuperOrg = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculumSuper);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculumSuper);
 		
 		Organisation organisation = organisationService.createOrganisation(random(), random(), null, organisationSuper, null);
 		Curriculum curriculum = curriculumService.createCurriculum(random(), random(), null, organisation);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Organisation organisationSub = organisationService.createOrganisation(random(), random(), null, organisation, null);
 		Curriculum curriculumSubOrg = curriculumService.createCurriculum(random(), random(), null, organisationSub);
 		CurriculumElement curriculumElementSubOrg = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculumSubOrg);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculumSubOrg);
 
 		Organisation otherOrganisation = organisationService.createOrganisation(random(), random(), null, null, null);
 		Curriculum otherCurriculum = curriculumService.createCurriculum(random(), random(), null, otherOrganisation);
 		CurriculumElement otherCurriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, otherCurriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, otherCurriculum);
 		dbInstance.commitAndCloseSession();
 
 		SearchParameters searchParams = new SearchParameters();
@@ -144,12 +145,12 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		CurriculumElementType ceType = curriculumService.createCurriculumElementType(random(), random(), null, null);
 		Curriculum curriculum = curriculumService.createCurriculum(random(), random(), null, organisation);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, ceType, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, ceType, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		CurriculumElementType otherCeType  = curriculumService.createCurriculumElementType(random(), random(), null, null);
 		CurriculumElement otherCurriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, otherCeType, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, otherCeType, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		SearchParameters searchParams = new SearchParameters();
@@ -166,11 +167,11 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 
 		CurriculumElement curriculumElement1 = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement curriculumElement2 = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement otherCurriculumElement = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		SearchParameters searchParams = new SearchParameters();
@@ -189,13 +190,13 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 
 		CurriculumElement beginBeforeFrom = curriculumService.createCurriculumElement(random(), random(),
-				oneYearAgo(), oneYearAgo(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneYearAgo(), oneYearAgo(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement beginBetweenFromAndTo = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), oneDayAgo(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), oneDayAgo(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement beginAfterTo = curriculumService.createCurriculumElement(random(), random(),
-				inOneDay(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				inOneDay(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement beginNull = curriculumService.createCurriculumElement(random(), random(),
-				null, null, null, null, CurriculumCalendars.disabled, curriculum);
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		beginAfterTo.setBeginDate(inOneDay());
 		dbInstance.commitAndCloseSession();
 
@@ -215,13 +216,13 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		dbInstance.commitAndCloseSession();
 
 		CurriculumElement endBeforeFrom = curriculumService.createCurriculumElement(random(), random(),
-				oneYearAgo(), oneYearAgo(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneYearAgo(), oneYearAgo(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement endBetweenFromAndTo = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), oneDayAgo(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), oneDayAgo(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement endAfterTo = curriculumService.createCurriculumElement(random(), random(),
-				inOneDay(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				inOneDay(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElement endNull = curriculumService.createCurriculumElement(random(), random(),
-				null, null, null, null, CurriculumCalendars.disabled, curriculum);
+				null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		endAfterTo.setBeginDate(inOneDay());
 		dbInstance.commitAndCloseSession();
 
@@ -239,15 +240,15 @@ public class CurriculumElementProviderDAOTest extends OlatTestCase {
 		Organisation organisation = organisationService.createOrganisation(random(), random(), null, null, null);
 		Curriculum curriculum = curriculumService.createCurriculum(random(), random(), null, organisation);
 		CurriculumElement active = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		CurriculumElement inactive = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		inactive.setElementStatus(CurriculumElementStatus.inactive);
 		inactive = curriculumService.updateCurriculumElement(inactive);
 		CurriculumElement deleted = curriculumService.createCurriculumElement(random(), random(),
-				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, curriculum);
+				oneDayAgo(), inOneDay(), null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		deleted.setElementStatus(CurriculumElementStatus.deleted);
 		deleted = curriculumService.updateCurriculumElement(deleted);
 		dbInstance.commitAndCloseSession();
diff --git a/src/test/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilderTest.java b/src/test/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilderTest.java
index c3612dd7149..f127489702a 100644
--- a/src/test/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilderTest.java
+++ b/src/test/java/org/olat/modules/quality/manager/CurriculumElementQualityContextBuilderTest.java
@@ -36,6 +36,7 @@ import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.manager.CurriculumElementToTaxonomyLevelDAO;
@@ -111,11 +112,11 @@ public class CurriculumElementQualityContextBuilderTest extends OlatTestCase {
 				curriculumOrganisation2);
 
 		CurriculumElement curriculumElementParent = curriculumService
-				.createCurriculumElement(UUID.randomUUID().toString(), "Element", null, null, null, null, CurriculumCalendars.disabled, curriculum2);
+				.createCurriculumElement(UUID.randomUUID().toString(), "Element", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 1", null, null, curriculumElementParent, null, CurriculumCalendars.disabled, curriculum1);
+				"Element 1", null, null, curriculumElementParent, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		CurriculumElement otherCurriculumElement = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 2", null, null, null, null, CurriculumCalendars.disabled, curriculum2);
+				"Element 2", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 
 		RepositoryEntry entry = JunitTestHelper.createAndPersistRepositoryEntry();
 		curriculumService.addRepositoryEntry(curriculumElement, entry, true);
@@ -192,7 +193,7 @@ public class CurriculumElementQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculum = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum", "",
 				organisationExecutorAndCurriculum);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(UUID.randomUUID().toString(), "Element", null, null, null, null,
-				CurriculumCalendars.disabled, curriculum);
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		curriculumElement = curriculumService.getCurriculumElement(curriculumElement);
@@ -225,7 +226,7 @@ public class CurriculumElementQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculum = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum", "",
 				organisationCurriculumOnly);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(UUID.randomUUID().toString(), "Element", null, null, null, null,
-				CurriculumCalendars.disabled, curriculum);
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		curriculumElement = curriculumService.getCurriculumElement(curriculumElement);
@@ -259,7 +260,7 @@ public class CurriculumElementQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculum = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum", "",
 				organisationExecutorAndCurriculumButManager);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(UUID.randomUUID().toString(), "Element", null, null, null, null,
-				CurriculumCalendars.disabled, curriculum);
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		curriculumElement = curriculumService.getCurriculumElement(curriculumElement);
@@ -280,7 +281,7 @@ public class CurriculumElementQualityContextBuilderTest extends OlatTestCase {
 	public void shouldNotDeleteContextOfOtherRoles() {
 		Curriculum curriculum = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum", "", null);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Curriculum", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+				"Curriculum", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Identity executor = JunitTestHelper.createAndPersistIdentityAsRndAuthor("");
 		QualityDataCollection dataCollection = qualityTestHelper.createDataCollection();
 		List<EvaluationFormParticipation> participations = qualityService.addParticipations(dataCollection,
diff --git a/src/test/java/org/olat/modules/quality/manager/QualityTestHelper.java b/src/test/java/org/olat/modules/quality/manager/QualityTestHelper.java
index eb8e10aaf5d..98b14ce01a8 100644
--- a/src/test/java/org/olat/modules/quality/manager/QualityTestHelper.java
+++ b/src/test/java/org/olat/modules/quality/manager/QualityTestHelper.java
@@ -34,6 +34,7 @@ import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.forms.EvaluationFormManager;
 import org.olat.modules.forms.EvaluationFormParticipation;
@@ -247,7 +248,7 @@ public class QualityTestHelper {
 	}
 	
 	public CurriculumElement createCurriculumElement(Curriculum curriculum) {
-		return curriculumService.createCurriculumElement("i", "d", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		return curriculumService.createCurriculumElement("i", "d", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 	}
 
 	public RepositoryEntry createRepositoryEntry() {
diff --git a/src/test/java/org/olat/modules/quality/manager/RepositoryEntryQualityContextBuilderTest.java b/src/test/java/org/olat/modules/quality/manager/RepositoryEntryQualityContextBuilderTest.java
index 705cc99800e..81ee4a62706 100644
--- a/src/test/java/org/olat/modules/quality/manager/RepositoryEntryQualityContextBuilderTest.java
+++ b/src/test/java/org/olat/modules/quality/manager/RepositoryEntryQualityContextBuilderTest.java
@@ -39,6 +39,7 @@ import org.olat.core.id.Organisation;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.manager.CurriculumElementToTaxonomyLevelDAO;
@@ -125,13 +126,14 @@ public class RepositoryEntryQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculum3 = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum 3", "",
 				curriculumOrganisation3);
 		CurriculumElement curriculumElement1 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 1", null, null, null, null, CurriculumCalendars.disabled, curriculum1);
+				"Element 1", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		CurriculumElement curriculumElement2Parent = curriculumService
-				.createCurriculumElement(UUID.randomUUID().toString(), "Element 2 parent", null, null, null, null, CurriculumCalendars.disabled, curriculum2);
+				.createCurriculumElement(UUID.randomUUID().toString(), "Element 2 parent", null, null, null, null,
+						CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		CurriculumElement curriculumElement2 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 2", null, null, curriculumElement2Parent, null, CurriculumCalendars.disabled, curriculum2);
+				"Element 2", null, null, curriculumElement2Parent, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		CurriculumElement curriculumElement3 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 3", null, null, null, null, CurriculumCalendars.disabled, curriculum3);
+				"Element 3", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum3);
 		curriculumService.addRepositoryEntry(curriculumElement1, entry, true);
 		curriculumService.addRepositoryEntry(curriculumElement2, entry, true);
 		curriculumService.addRepositoryEntry(curriculumElement3, entry, true);
@@ -221,13 +223,14 @@ public class RepositoryEntryQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculumOther = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Other curriculum", "",
 				curriculumOrganisationOther);
 		CurriculumElement curriculumElement1 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 1", null, null, null, null, CurriculumCalendars.disabled, curriculum1);
+				"Element 1", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		CurriculumElement curriculumElement2Parent = curriculumService
-				.createCurriculumElement(UUID.randomUUID().toString(), "Element 2 parent", null, null, null, null, CurriculumCalendars.disabled, curriculum2);
+				.createCurriculumElement(UUID.randomUUID().toString(), "Element 2 parent", null, null, null, null,
+						CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		CurriculumElement curriculumElement2 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element 2", null, null, curriculumElement2Parent, null, CurriculumCalendars.disabled, curriculum2);
+				"Element 2", null, null, curriculumElement2Parent, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		CurriculumElement curriculumElementOther = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Other element", null, null, null, null, CurriculumCalendars.disabled, curriculumOther);
+				"Other element", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculumOther);
 		curriculumService.addRepositoryEntry(curriculumElement1, entry, true);
 		curriculumService.addRepositoryEntry(curriculumElement2, entry, true);
 		Taxonomy taxonomy = taxonomyService.createTaxonomy(UUID.randomUUID().toString(), "Taxonomy", "", null);
@@ -310,21 +313,21 @@ public class RepositoryEntryQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculum1 = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum 1", "",
 				organisationExecutorAndCurriculum1);
 		CurriculumElement curriculumElement1 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(), "Element 1", null, null, null, null,
-				CurriculumCalendars.disabled, curriculum1);
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum1);
 		curriculumService.addMember(curriculumElement1, executor, CurriculumRoles.participant);
 		curriculumService.addRepositoryEntry(curriculumElement1, entry, true);
 		
 		Curriculum curriculum2 = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum 2", "",
 				organisationExecutorAndCurriculum2);
 		CurriculumElement curriculumElement2 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(), "Element 2", null, null, null, null,
-				CurriculumCalendars.disabled, curriculum2);
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum2);
 		curriculumService.addMember(curriculumElement2, executor, CurriculumRoles.participant);
 		curriculumService.addRepositoryEntry(curriculumElement2, entry, true);
 		
 		Curriculum curriculum3 = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum 3", "",
 				organisationExecutorAndCurriculumButManager);
 		CurriculumElement curriculumElement3 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(), "Element 3", null, null, null, null,
-				CurriculumCalendars.disabled, curriculum3);
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum3);
 		curriculumService.addMember(curriculumElement3, executor, CurriculumRoles.participant);
 		curriculumService.addRepositoryEntry(curriculumElement3, entry, true);
 		
@@ -371,7 +374,7 @@ public class RepositoryEntryQualityContextBuilderTest extends OlatTestCase {
 		Curriculum curriculum3 = curriculumService.createCurriculum(UUID.randomUUID().toString(), "Curriculum", "",
 				organisationExecutorAndCurriculumButManager);
 		CurriculumElement curriculumElement3 = curriculumService.createCurriculumElement(UUID.randomUUID().toString(),
-				"Element", null, null, null, null, CurriculumCalendars.disabled, curriculum3);
+				"Element", null, null, null, null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum3);
 		curriculumService.addMember(curriculumElement3, executor, CurriculumRoles.participant);
 		curriculumService.addRepositoryEntry(curriculumElement3, entry, true);
 		
diff --git a/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java b/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java
index cbd36a292b1..d5ce90fcb1d 100644
--- a/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java
+++ b/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java
@@ -53,6 +53,7 @@ import org.olat.modules.curriculum.CurriculumElement;
 import org.olat.modules.curriculum.CurriculumElementManagedFlag;
 import org.olat.modules.curriculum.CurriculumElementToTaxonomyLevel;
 import org.olat.modules.curriculum.CurriculumElementType;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.curriculum.manager.CurriculumElementToTaxonomyLevelDAO;
@@ -105,8 +106,10 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("Curriculum org.", "curr-org", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-1", "Element 1", null, null, null, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element1_1 = curriculumService.createCurriculumElement("Element-1.1", "Element 1.1", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-1", "Element 1", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element1_1 = curriculumService.createCurriculumElement("Element-1.1", "Element 1.1", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		RestConnection conn = new RestConnection();
@@ -139,7 +142,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("Curriculum org.", "curr-org", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "Element 1", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "Element 1", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		RestConnection conn = new RestConnection();
@@ -161,10 +165,14 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("Curriculum org.", "curr-org", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "Element 1", null, null, null, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element_1 = curriculumService.createCurriculumElement("Element-1.1", "Element 1.1", null, null, element, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element_2 = curriculumService.createCurriculumElement("Element-1.2", "Element 1.2", null, null, element, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element_3 = curriculumService.createCurriculumElement("Element-1.3", "Element 1.3", null, null, element, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-1", "Element 1", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element_1 = curriculumService.createCurriculumElement("Element-1.1", "Element 1.1", null, null, element, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element_2 = curriculumService.createCurriculumElement("Element-1.2", "Element 1.2", null, null, element, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element_3 = curriculumService.createCurriculumElement("Element-1.3", "Element 1.3", null, null, element, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		RestConnection conn = new RestConnection();
@@ -205,7 +213,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("Curriculum org.", "curr-org", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-3", "Element 3", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-3", "Element 3", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		CurriculumElementVO vo = new CurriculumElementVO();
@@ -261,7 +270,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 2 ", "REST-p-2-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-5", "Element 5", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-5", "Element 5", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		CurriculumElementType type = curriculumService.createCurriculumElementType("TYPE-2", "Type 2", "", "");
 		dbInstance.commitAndCloseSession();
 		
@@ -324,8 +334,10 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", defOrganisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-5", "Element 5", null, null, null, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element_1 = curriculumService.createCurriculumElement("Element-5.1", "Element 5.1", null, null, element, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-5", "Element 5", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element_1 = curriculumService.createCurriculumElement("Element-5.1", "Element 5.1", null, null, element, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		CurriculumElementVO vo = new CurriculumElementVO();
@@ -356,7 +368,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 2 ", "REST-p-2-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-6", "Element 6", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-6", "Element 6", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		CurriculumElementVO vo = CurriculumElementVO.valueOf(element);
@@ -400,9 +413,12 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 2 ", "REST-p-2-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-8", "Element 8", null, null, null, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element1_1 = curriculumService.createCurriculumElement("Element-8.1", "Element 8.1", null, null, element1, null, CurriculumCalendars.disabled, curriculum);
-		CurriculumElement element2 = curriculumService.createCurriculumElement("Element-9", "Element 9", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element1 = curriculumService.createCurriculumElement("Element-8", "Element 8", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element1_1 = curriculumService.createCurriculumElement("Element-8.1", "Element 8.1", null, null, element1, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
+		CurriculumElement element2 = curriculumService.createCurriculumElement("Element-9", "Element 9", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		
@@ -438,7 +454,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 2 ", "REST-p-2-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-10", "Element 10", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-10", "Element 10", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		Curriculum otherCurriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
 		dbInstance.commitAndCloseSession();
 
@@ -465,7 +482,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 4", "REST-p-4-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("rest-auth-1");
 		RepositoryEntry course = JunitTestHelper.createRandomRepositoryEntry(author);
@@ -494,7 +512,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 4", "REST-p-4-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("rest-auth-1");
 		RepositoryEntry course = JunitTestHelper.createRandomRepositoryEntry(author);
@@ -527,7 +546,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 4", "REST-p-4-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 
 		Identity author = JunitTestHelper.createAndPersistIdentityAsRndAuthor("rest-auth-1");
 		RepositoryEntry course = JunitTestHelper.createRandomRepositoryEntry(author);
@@ -562,7 +582,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 4", "REST-p-4-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-11", "Element 11", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 		
 		RestConnection conn = new RestConnection();
@@ -601,7 +622,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 5", "REST-p-5-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -639,7 +661,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 5", "REST-p-5-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -669,7 +692,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 8", "REST-p-8-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-14", "Element 14", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-14", "Element 14", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -698,7 +722,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 8", "REST-p-8-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-14", "Element 14", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-14", "Element 14", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -727,7 +752,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 9", "REST-p-9-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-15", "Element 15", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-15", "Element 15", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -756,7 +782,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 10", "REST-p-10-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-16", "Element 16", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-16", "Element 16", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -785,7 +812,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 10", "REST-p-10-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-16", "Element 16", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-16", "Element 16", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -814,7 +842,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity member = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-1");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 5", "REST-p-5-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -849,7 +878,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity participant = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-11");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 11", "REST-p-11-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-17", "Element 17", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-17", "Element 17", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -876,7 +906,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-12");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 12", "REST-p-12-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-18", "Element 18", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-18", "Element 18", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -904,7 +935,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity participant2 = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-14");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 13", "REST-p-13-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-18", "Element 18", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-18", "Element 18", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -936,7 +968,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity coach2 = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-16");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 16", "REST-p-16-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-20", "Element 20", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-20", "Element 20", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -967,7 +1000,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity member = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-1");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 5", "REST-p-5-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-12", "Element 12", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -998,7 +1032,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-22");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 21", "REST-p-21-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-21", "Element 21", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-21", "Element 21", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -1030,7 +1065,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 		Identity coach = JunitTestHelper.createAndPersistIdentityAsRndUser("element-member-24");
 		Organisation organisation = organisationService.createOrganisation("REST Parent Organisation 24", "REST-p-24-organisation", "", defOrganisation, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		
 		RestConnection conn = new RestConnection();
@@ -1059,7 +1095,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 	throws IOException, URISyntaxException {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", defOrganisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-350", "Leveled taxonomy", null, null);
@@ -1086,7 +1123,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 	throws IOException, URISyntaxException {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", defOrganisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-351", "Leveled taxonomy", null, null);
 		TaxonomyLevel level = taxonomyLevelDao.createTaxonomyLevel("ID-Level-0", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
@@ -1116,7 +1154,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 	throws IOException, URISyntaxException {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", defOrganisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-24", "Element 24", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-352", "Leveled taxonomy", null, null);
 		TaxonomyLevel level = taxonomyLevelDao.createTaxonomyLevel("ID-Level-0", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
@@ -1151,7 +1190,8 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase {
 	throws IOException, URISyntaxException {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", defOrganisation);
-		CurriculumElement element = curriculumService.createCurriculumElement("Element-30", "Element 24", null, null, null, null, CurriculumCalendars.disabled, curriculum);
+		CurriculumElement element = curriculumService.createCurriculumElement("Element-30", "Element 24", null, null, null, null,
+				CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		
 		Taxonomy taxonomy = taxonomyDao.createTaxonomy("ID-353", "Leveled taxonomy", null, null);
 		TaxonomyLevel level1 = taxonomyLevelDao.createTaxonomyLevel("ID-Level-1", "My first taxonomy level", "A basic level", null, null, null, null, taxonomy);
diff --git a/src/test/java/org/olat/restapi/CurriculumsWebServiceTest.java b/src/test/java/org/olat/restapi/CurriculumsWebServiceTest.java
index 735a004ec96..9f38b8cbb08 100644
--- a/src/test/java/org/olat/restapi/CurriculumsWebServiceTest.java
+++ b/src/test/java/org/olat/restapi/CurriculumsWebServiceTest.java
@@ -51,6 +51,7 @@ import org.olat.core.logging.Tracing;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumManagedFlag;
 import org.olat.modules.curriculum.CurriculumRoles;
 import org.olat.modules.curriculum.CurriculumService;
@@ -314,7 +315,7 @@ public class CurriculumsWebServiceTest extends OlatJerseyTestCase {
 		Organisation organisation = organisationService.createOrganisation("Curriculum org.", "curr-org", "", null, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
 		CurriculumElement element = curriculumService.createCurriculumElement("Unkown", "Element 1", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commit();
 		String externalId = UUID.randomUUID().toString();
 		element.setExternalId(externalId);
@@ -343,7 +344,7 @@ public class CurriculumsWebServiceTest extends OlatJerseyTestCase {
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
 		String identifier = UUID.randomUUID().toString();
 		CurriculumElement element = curriculumService.createCurriculumElement(identifier, "Element 1", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		RestConnection conn = new RestConnection();
@@ -367,7 +368,7 @@ public class CurriculumsWebServiceTest extends OlatJerseyTestCase {
 		Organisation organisation = organisationService.createOrganisation("Curriculum org.", "curr-org", "", null, null);
 		Curriculum curriculum = curriculumService.createCurriculum("REST-Curriculum-elements", "REST Curriculum", "A curriculum accessible by REST API for elemets", organisation);
 		CurriculumElement element = curriculumService.createCurriculumElement("by-key", "Element 1", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		dbInstance.commitAndCloseSession();
 
 		RestConnection conn = new RestConnection();
diff --git a/src/test/java/org/olat/restapi/LecturesBlocksTest.java b/src/test/java/org/olat/restapi/LecturesBlocksTest.java
index 31d1429c7b6..7921842afbe 100644
--- a/src/test/java/org/olat/restapi/LecturesBlocksTest.java
+++ b/src/test/java/org/olat/restapi/LecturesBlocksTest.java
@@ -54,6 +54,7 @@ import org.olat.course.ICourse;
 import org.olat.modules.curriculum.Curriculum;
 import org.olat.modules.curriculum.CurriculumCalendars;
 import org.olat.modules.curriculum.CurriculumElement;
+import org.olat.modules.curriculum.CurriculumLectures;
 import org.olat.modules.curriculum.CurriculumService;
 import org.olat.modules.lecture.LectureBlock;
 import org.olat.modules.lecture.LectureBlockStatus;
@@ -481,7 +482,7 @@ public class LecturesBlocksTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("add-group", "Add group REST", "", defOrganisation);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement("add-group", "Add element group", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addRepositoryEntry(curriculumElement, entry, true);
 		dbInstance.commit();
 
@@ -518,7 +519,7 @@ public class LecturesBlocksTest extends OlatJerseyTestCase {
 		Organisation defOrganisation = organisationService.getDefaultOrganisation();
 		Curriculum curriculum = curriculumService.createCurriculum("rm-group", "Remove group REST", "", defOrganisation);
 		CurriculumElement curriculumElement = curriculumService.createCurriculumElement("rm-group", "Remove element group", null, null, null,
-				null, CurriculumCalendars.disabled, curriculum);
+				null, CurriculumCalendars.disabled, CurriculumLectures.disabled, curriculum);
 		curriculumService.addRepositoryEntry(curriculumElement, entry, true);
 		dbInstance.commit();
 		lectureService.save(block, Collections.singletonList(curriculumElement.getGroup()));
-- 
GitLab