diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java
index ca6f6ef1f0ac8f0b6b2f852bb064a6088bd6752d..bcba07b2b87ce01e6bc0bea9b096d10655c5425b 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/CourseLecturesProvider.java
@@ -87,9 +87,12 @@ public class CourseLecturesProvider implements QualityGeneratorProvider {
 	public static final String CONFIG_KEY_REMINDER1_AFTER_DC_DAYS = "reminder1.after.dc.start.days";
 	public static final String CONFIG_KEY_REMINDER2_AFTER_DC_DAYS = "reminder2.after.dc.start.days";
 	public static final String CONFIG_KEY_ROLES = "participants.roles";
-	public static final String CONFIG_KEY_SURVEY_LECTURE = "survey.lecture";
+	public static final String CONFIG_KEY_SURVEY_LECTURE = "survey.lecture.start";
+	public static final String CONFIG_KEY_SURVEY_LECTURE_NUMBER = "survey.lecture";
+	public static final String CONFIG_KEY_SURVEY_LECTURE_LAST = "survey.lecture.last";
 	public static final String CONFIG_KEY_TITLE = "title";
-	public static final String CONFIG_KEY_TOTAL_LECTURES = "total.lecture";
+	public static final String CONFIG_KEY_TOTAL_LECTURES_MIN = "total.lecture";
+	public static final String CONFIG_KEY_TOTAL_LECTURES_MAX = "total.lecture.max";
 	public static final String CONFIG_KEY_WHITE_LIST = "white.list";
 	public static final String CONFIG_KEY_TOPIC = "topic";
 	public static final String CONFIG_KEY_TOPIC_COACH = "config.topic.coach";
@@ -267,15 +270,59 @@ public class CourseLecturesProvider implements QualityGeneratorProvider {
 		Collection<CurriculumElementRef> curriculumElementRefs = CurriculumElementWhiteListController.getCurriculumElementRefs(configs);
 		searchParams.setCurriculumElementRefs(curriculumElementRefs);
 		
-		Integer minExceedingLectures = Integer.parseInt(configs.getValue(CONFIG_KEY_TOTAL_LECTURES));
-		searchParams.setMinTotalLectures(minExceedingLectures);
+		String minLectures = configs.getValue(CONFIG_KEY_TOTAL_LECTURES_MIN);
+		if (StringHelper.containsNonWhitespace(minLectures)) {
+			Integer minExceedingLectures = Integer.parseInt(minLectures);
+			searchParams.setMinTotalLectures(minExceedingLectures);
+		}
+		
+		String maxLectures = configs.getValue(CONFIG_KEY_TOTAL_LECTURES_MAX);
+		if (StringHelper.containsNonWhitespace(maxLectures)) {
+			Integer maxExceedingLectures = Integer.parseInt(maxLectures);
+			searchParams.setMaxTotalLectures(maxExceedingLectures);
+		}
 		
-		Integer selectingLecture = Integer.parseInt(configs.getValue(CONFIG_KEY_SURVEY_LECTURE));
-		searchParams.setSelectingLecture(selectingLecture);
+		updateSurveyLectureKey(configs, generator);
+		String surveyLecture = configs.getValue(CONFIG_KEY_SURVEY_LECTURE);
+		switch (surveyLecture) {
+		case CONFIG_KEY_SURVEY_LECTURE_LAST:
+			searchParams.setLastLectureBlock(true);
+			break;
+		case CONFIG_KEY_SURVEY_LECTURE_NUMBER:
+			String lectureNumber = configs.getValue(CONFIG_KEY_SURVEY_LECTURE_NUMBER);
+			try {
+				Integer selectingLecture = Integer.parseInt(lectureNumber);
+				searchParams.setSelectingLecture(selectingLecture);
+			} catch (Exception e) {
+				searchParams.setSelectingLecture(-1); // select nothing
+				log.warn("Quality data collection generator is not properly configured: " + generator);
+			}
+			break;
+		default:
+			searchParams.setSelectingLecture(-1); // select nothing
+			log.warn("Quality data collection generator is not properly configured: " + generator);
+			break;
+		}
 		
 		return searchParams;
 	}
 
+	/**
+	 * CONFIG_KEY_SURVEY_LECTURE was added in the second version of that generator.
+	 * If not set, init the value as function of other CONFIG_KEYs.
+	 *
+	 * @param configs
+	 * @param generator 
+	 */
+	private void updateSurveyLectureKey(QualityGeneratorConfigs configs, QualityGenerator generator) {
+		String surveyLecture = configs.getValue(CONFIG_KEY_SURVEY_LECTURE);
+		boolean surveyLectureNotSet = !StringHelper.containsNonWhitespace(surveyLecture);
+		if (surveyLectureNotSet) {
+			configs.setValue(CONFIG_KEY_SURVEY_LECTURE, CONFIG_KEY_SURVEY_LECTURE_NUMBER);
+			log.info("Updated CONFIG_KEY_SURVEY_LECTURE to CONFIG_KEY_SURVEY_LECTURE_NUMBER for quality generator: " + generator);
+		}
+	}
+
 	private String getTopicKey(QualityGeneratorConfigs configs) {
 		String topicKey = configs.getValue(CONFIG_KEY_TOPIC);
 		return StringHelper.containsNonWhitespace(topicKey)? topicKey: CONFIG_KEY_TOPIC_COACH;
diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java
index 6832f2020d2ee76f396ed47bb060da2c36a66ad9..ea54daefb5706f21a36053f6e42fbb7a9d8ff665 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/CourseLecturesProviderDAO.java
@@ -219,6 +219,9 @@ public class CourseLecturesProviderDAO {
 		if (searchParams.getMinTotalLectures() != null) {
 			sb.and().append("total_lectures >= :minTotalLectures");
 		}
+		if (searchParams.getMaxTotalLectures() != null) {
+			sb.and().append("total_lectures <= :maxTotalLectures");
+		}
 		if (searchParams.getSelectingLecture() != null) {
 			sb.and().append("first_lecture <= :selectingLecture");
 			sb.and().append("last_lecture >= :selectingLecture");
@@ -233,6 +236,9 @@ public class CourseLecturesProviderDAO {
 		if (searchParams.getMinTotalLectures() != null) {
 			query.setParameter("minTotalLectures", searchParams.getMinTotalLectures());
 		}
+		if (searchParams.getMaxTotalLectures() != null) {
+			query.setParameter("maxTotalLectures", searchParams.getMaxTotalLectures());
+		}
 		if (searchParams.getSelectingLecture() != null) {
 			query.setParameter("selectingLecture", searchParams.getSelectingLecture());
 		}
@@ -297,6 +303,9 @@ public class CourseLecturesProviderDAO {
 		if (searchParams.getMinTotalLectures() != null) {
 			infos.removeIf(lb -> lb.getLecturesTotal() < searchParams.getMinTotalLectures());
 		}
+		if (searchParams.getMaxTotalLectures() != null) {
+			infos.removeIf(lb -> lb.getLecturesTotal() > searchParams.getMaxTotalLectures());
+		}
 		if (searchParams.getSelectingLecture() != null) {
 			infos.removeIf(lb -> 
 					   lb.getFirstLecture() > searchParams.getSelectingLecture() 
diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java
index 41c077338aa2117b58bcd9c5d0af18078d268132..2ab48eebf2141f6464e2d393ea5138e2654e559a 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/manager/SearchParameters.java
@@ -39,6 +39,7 @@ import org.olat.repository.RepositoryEntryRef;
 public class SearchParameters {
 
 	private Integer minTotalLectures;
+	private Integer maxTotalLectures;
 	private Integer selectingLecture;
 	private boolean lastLectureBlock = false;
 	private QualityGeneratorRef finishedDataCollectionForGeneratorAndTopicIdentityRef;
@@ -60,6 +61,14 @@ public class SearchParameters {
 		this.minTotalLectures = minTotalLectures;
 	}
 
+	public Integer getMaxTotalLectures() {
+		return maxTotalLectures;
+	}
+
+	public void setMaxTotalLectures(Integer maxTotalLectures) {
+		this.maxTotalLectures = maxTotalLectures;
+	}
+
 	public Integer getSelectingLecture() {
 		return selectingLecture;
 	}
diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java
index f0a558f2435e1c4b2319f0470f2a973805c35d1a..4221014dfe4901da02f65edb8f6609ad1827301b 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/CourseLectureProviderConfigController.java
@@ -28,11 +28,13 @@ import java.util.Arrays;
 import java.util.stream.Collectors;
 
 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.MultipleSelectionElement;
 import org.olat.core.gui.components.form.flexible.elements.SingleSelection;
 import org.olat.core.gui.components.form.flexible.elements.TextElement;
 import org.olat.core.gui.components.form.flexible.impl.Form;
+import org.olat.core.gui.components.form.flexible.impl.FormEvent;
 import org.olat.core.gui.control.Controller;
 import org.olat.core.gui.control.WindowControl;
 import org.olat.core.id.User;
@@ -54,6 +56,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 public class CourseLectureProviderConfigController extends ProviderConfigController {
 	
 	private static final String ROLES_PREFIX = "config.roles.";
+	private static final String SURVEY_START_LAST = "config.survey.last";
+	private static final String SURVEY_START_NUMBER = "config.survey.number";
+	private static final String SURVEY_START_KEYS[] = {
+			SURVEY_START_LAST,
+			SURVEY_START_NUMBER
+	};
 	private static final String ROLES_OWNER_KEY = ROLES_PREFIX + CurriculumRoles.owner.name();
 	private static final String ROLES_COACH_KEY = ROLES_PREFIX + CurriculumRoles.coach.name();
 	private static final String ROLES_SINGLE_COACH_KEY = ROLES_PREFIX + CourseLecturesProvider.TEACHING_COACH;
@@ -71,7 +79,9 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 
 	private TextElement titleEl;
 	private SingleSelection topicEl;
-	private TextElement lecturesTotalEl;
+	private TextElement lecturesTotalMinEl;
+	private TextElement lecturesTotalMaxEl;
+	private SingleSelection surveyLectureStartEl;
 	private TextElement surveyLectureEl;
 	private TextElement minutesBeforeEndEl;
 	private TextElement invitationDaysEl;
@@ -108,11 +118,23 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 		}
 
 		// lectures
-		String lecturesTotal = configs.getValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES);
-		lecturesTotalEl = uifactory.addTextElement("config.lectures.total", 4, lecturesTotal, formLayout);
+		String lecturesTotalMin = configs.getValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MIN);
+		lecturesTotalMinEl = uifactory.addTextElement("config.lectures.total.min", 4, lecturesTotalMin, formLayout);
+		
+		String lecturesTotalMax = configs.getValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MAX);
+		lecturesTotalMaxEl = uifactory.addTextElement("config.lectures.total.max", 4, lecturesTotalMax, formLayout);
 		
+		surveyLectureStartEl = uifactory.addDropdownSingleselect("config.survey.start", formLayout, SURVEY_START_KEYS,
+				translateAll(getTranslator(), SURVEY_START_KEYS));
+		surveyLectureStartEl.addActionListener(FormEvent.ONCHANGE);
 		String surveyLecture = configs.getValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE);
-		surveyLectureEl = uifactory.addTextElement("config.survey.lectures", 4, surveyLecture, formLayout);
+		if (CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER.equals(surveyLecture)) {
+			surveyLectureStartEl.select(SURVEY_START_NUMBER, true);
+		} else {
+			surveyLectureStartEl.select(SURVEY_START_LAST, true);
+		}
+		String surveyLectureNumber = configs.getValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER);
+		surveyLectureEl = uifactory.addTextElement("config.survey.lectures", 4, surveyLectureNumber, formLayout);
 		
 		String minutesBeforeEnd = configs.getValue(CourseLecturesProvider.CONFIG_KEY_MINUTES_BEFORE_END);
 		minutesBeforeEndEl = uifactory.addTextElement("config.minutes.before.end", 3, minutesBeforeEnd, formLayout);
@@ -142,6 +164,14 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 				rolesEl.select(role, true);
 			}
 		}
+		
+		updateUI();
+	}
+
+	private void updateUI() {
+		boolean surveyLectureNumber = surveyLectureStartEl.isOneSelected()
+				&& surveyLectureStartEl.getSelectedKey().equals(SURVEY_START_NUMBER);
+		surveyLectureEl.setVisible(surveyLectureNumber);
 	}
 
 	@Override
@@ -149,7 +179,9 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 		boolean enabled = !readOnly;
 		titleEl.setEnabled(enabled);
 		topicEl.setEnabled(enabled);
-		lecturesTotalEl.setEnabled(enabled);
+		lecturesTotalMinEl.setEnabled(enabled);
+		lecturesTotalMaxEl.setEnabled(enabled);
+		surveyLectureStartEl.setEnabled(enabled);
 		surveyLectureEl.setEnabled(enabled);
 		minutesBeforeEndEl.setEnabled(enabled);
 		invitationDaysEl.setEnabled(enabled);
@@ -160,13 +192,20 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 		flc.setDirty(true);
 	}
 
+	@Override
+	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
+		if (source == surveyLectureStartEl) {
+			updateUI();
+		}
+		super.formInnerEvent(ureq, source, event);
+	}
+
 	@Override
 	public boolean validateBeforeActivation(UserRequest ureq) {
 		boolean allOk = true;
 		
 		allOk &= validateIsMandatory(titleEl);
 		allOk &= validateIsMandatory(topicEl);
-		allOk &= validateIsMandatory(lecturesTotalEl) && validateInteger(lecturesTotalEl, 1, 10000);
 		allOk &= validateIsMandatory(surveyLectureEl) && validateInteger(surveyLectureEl, 1, 10000);
 		allOk &= validateIsMandatory(minutesBeforeEndEl) && validateInteger(minutesBeforeEndEl, 0, 1000);
 		allOk &= validateIsMandatory(durationEl) && validateInteger(durationEl, 1, 10000);
@@ -175,6 +214,22 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 		allOk &= validateInteger(reminder2DaysEl, 1, 10000);
 		allOk &= validateIsMandatory(rolesEl);
 		
+		boolean lecturesTotalOk = validateInteger(lecturesTotalMinEl, 1, 10000);
+		lecturesTotalOk &= validateInteger(lecturesTotalMaxEl, 1, 10000);
+		if (lecturesTotalOk && lecturesTotalMinEl.isEnabled() && lecturesTotalMaxEl.isEnabled()) {
+			String minString = lecturesTotalMinEl.getValue();
+			String maxString = lecturesTotalMaxEl.getValue();
+			if (StringHelper.containsNonWhitespace(minString) && StringHelper.containsNonWhitespace(maxString)) {
+				int min = Integer.parseInt(minString);
+				int max = Integer.parseInt(maxString);
+				if (min >= max) {
+					lecturesTotalMaxEl.setErrorKey("error.lectures.min.higher.max", null);
+					lecturesTotalOk = false;
+				} 
+			}
+		}
+		allOk &= lecturesTotalOk;
+		
 		return allOk;
 	}
 	
@@ -182,7 +237,8 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 	protected boolean validateFormLogic(UserRequest ureq) {
 		titleEl.clearError();
 		topicEl.clearError();
-		lecturesTotalEl.clearError();
+		lecturesTotalMinEl.clearError();
+		lecturesTotalMaxEl.clearError();
 		surveyLectureEl.clearError();
 		minutesBeforeEndEl.clearError();
 		durationEl.clearError();
@@ -202,11 +258,27 @@ public class CourseLectureProviderConfigController extends ProviderConfigControl
 		String topicKey = topicEl.isOneSelected()? topicEl.getSelectedKey(): null;
 		configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOPIC, topicKey);
 		
-		String lecturesTotal = lecturesTotalEl.getValue();
-		configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES, lecturesTotal);
+		String lecturesTotalMax = lecturesTotalMinEl.getValue();
+		configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MIN, lecturesTotalMax);
+		
+		String lecturesTotalMin = lecturesTotalMaxEl.getValue();
+		configs.setValue(CourseLecturesProvider.CONFIG_KEY_TOTAL_LECTURES_MAX, lecturesTotalMin);
+		
+		if (surveyLectureStartEl.isOneSelected()) {
+			String selectedKey = surveyLectureStartEl.getSelectedKey();
+			if (SURVEY_START_LAST.equals(selectedKey)) {
+				configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE,
+						CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_LAST);
+			} else {
+				configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE,
+						CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER);
+			}
+		} else {
+			configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE, null);
+		}
 		
-		String surveyLecture = surveyLectureEl.getValue();
-		configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE, surveyLecture);
+		String surveyLecture = surveyLectureEl.isVisible()? surveyLectureEl.getValue(): null;
+		configs.setValue(CourseLecturesProvider.CONFIG_KEY_SURVEY_LECTURE_NUMBER, surveyLecture);
 		
 		String minutesBeforeEnd = minutesBeforeEndEl.getValue();
 		configs.setValue(CourseLecturesProvider.CONFIG_KEY_MINUTES_BEFORE_END, minutesBeforeEnd);
diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties
index edfa0f522beb0425e8f566b8b2f0a2bcdd7e4cc7..af3600fac5636ec3bb2737c223a8f43000c75f3d 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_de.properties
@@ -1,6 +1,7 @@
 config.duration=Dauer der Datenerhebung (Tage)
 config.invitation.days=Einladung (Tage nach Start der Datenerhebung)
-config.lectures.total=Minimale Anzahl Lektionen des Betreuers
+config.lectures.total.max=Maximale Anzahl Lektionen des Betreuers
+config.lectures.total.min=Minimale Anzahl Lektionen des Betreuers
 config.minutes.before.end=Start x Minuten vor dem Ende des Lektionenblocks
 config.reminder1.days=Erinnerung 1 (Tage nach Start der Datenerhebung)
 config.reminder2.days=Erinnerung 2 (Tage nach Start der Datenerhebung)
@@ -9,13 +10,17 @@ config.roles.owner=Besitzer
 config.roles.participant=Teilnehmer
 config.roles.teaching.coach=Unterrichtender Betreuer
 config.roles=Rollen der Teilnehmer
-config.survey.lectures=Start im Lektionenblock mit der Lektion x
-config.title.help=Verf\u00fcgbare Variablen: {0}
+config.survey.last=Im letzten Lektionenblock
+config.survey.lectures=Lektionenblock mit der Lektion x
+config.survey.number=Im Lektionenblock mit der Lektion x
+config.survey.start=Start der Datenerhebung
+config.title.help=Verf\u00FCgbare Variablen: {0}
 config.title=Titel der Datenerhebung
 config.topic.coach=Beteuer
 config.topic.course=Kurs
 config.topic=Beurteilungsgegenstand
-error.wrong.number=$org.olat.modules.quality.ui\:error.wrong.error.wrong.number
+error.lectures.min.higher.max=Die maximale Anzahl Stunden muss gr\u00F6sser sein als die minimale Anzahl Stunden.
+error.wrong.number=$org.olat.modules.quality.ui\:error.wrong.number
 followup.config.previous=Erstbefragung
 followup.config.single.check=Datenerhebung, wenn Durchschnitt einer Frage
 followup.config.single.limit=Limit
@@ -24,8 +29,8 @@ followup.config.total.limit=Limit
 followup.generate.info=Beim Einschalten des Generators mit diesem Startzeitpunkt werden <b>{0}</b> neue Datenerhebungen generiert.
 followup.provider.display.name=Lektionen eines Betreuers in einem Kurs (Nachbefragung)
 generate.info=Beim Einschalten des Generators mit diesem Startzeitpunkt werden <b>{0}</b> neue Datenerhebungen generiert.
-limit.check.higher=gr\u00f6sser als (>)
-limit.check.higher.equal=gr\u00f6sser oder gleich als (\u2265)
+limit.check.higher=gr\u00F6sser als (>)
+limit.check.higher.equal=gr\u00F6sser oder gleich als (\u2265)
 limit.check.lower.equal=kleiner oder gleich als (\u2264)
 limit.check.lower=kleiner als (<)
 provider.display.name=Lektionen eines Betreuers in einem Kurs
diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties
index 47f3da621d021be95f5b57ada4dbf4648e720e96..7c91d403d70a3e52b29185ffac0660b49b1c145c 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_en.properties
@@ -1,7 +1,8 @@
 #Tue Sep 11 22:17:57 CEST 2018
 config.duration=Duration of the data collection (days)
 config.invitation.days=Invitation (days after data collection start)
-config.lectures.total=Teacher minimum lectures
+config.lectures.total.max=Teacher maximum lectures
+config.lectures.total.min=Teacher minimum lectures
 config.minutes.before.end=Start x minutes before the end of the lecture block
 config.reminder1.days=Reminder 1 (days after data collection start)
 config.reminder2.days=Reminder 2 (days after data collection start)
@@ -10,12 +11,16 @@ config.roles.owner=Owner
 config.roles.participant=Participant
 config.roles.teaching.coach=Teaching coach
 config.roles=Roles of participants
-config.survey.lectures=Start after lecture x
+config.survey.last=In the last lecture block
+config.survey.lectures=Lecture block with lecture x
+config.survey.number=In the lecture block with lecture x
+config.survey.start=Start of data collection
 config.title.help=Available variables\: {0}
 config.title=Title of the data collection
 config.topic.coach=Coach
 config.topic.course=Course
 config.topic=Topic
+error.lectures.min.higher.max=The maximum number of lectures has to be higher than the minimum number of lectures.
 error.wrong.number=$org.olat.modules.quality.ui\:error.wrong.error.wrong.number
 followup.config.previous=Erstbefragung
 followup.config.single.check=Data collection, if average of a question is
diff --git a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties
index 2cc83715ba9ef5c36b6e44d29c432d4e7616e682..7007fe82d8228f443416f28b9926ab962b695319 100644
--- a/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties
+++ b/src/main/java/org/olat/modules/quality/generator/provider/courselectures/ui/_i18n/LocalStrings_fr.properties
@@ -1,7 +1,8 @@
 #Tue Sep 11 21:32:13 CEST 2018
 config.duration=Dur\u00E9e de la collecte de donn\u00E9es (jours)
 config.invitation.days=Invitation (en jours apr\u00E8s le d\u00E9but de la collecte)
-config.lectures.total=Nombre minimum de cours blocs du charg\u00E9 de cours
+config.lectures.total.max=Nombre maximum de cours blocs du charg\u00E9 de cours
+config.lectures.total.min=Nombre minimum de cours blocs du charg\u00E9 de cours
 config.minutes.before.end=D\u00E9but x minutes avant la fin du cours bloc
 config.reminder1.days=Rappel n\u00B01 (jours apr\u00E8s le d\u00E9but de la collecte)
 config.reminder2.days=Rappel n\u00B02 (jours apr\u00E8s le d\u00E9but de la collecte)
@@ -10,7 +11,6 @@ config.roles.coach=Tous les coaches
 config.roles.owner=Propri\u00E9taire
 config.roles.participant=Participant
 config.roles.teaching.coach=Charg\u00E9 de cours
-config.survey.lectures=D\u00E9but apr\u00E8s le cours bloc x
 config.title=Nom de la collecte de donn\u00E9es
 config.title.help=Variables disponibles\: {0}
 config.topic=Sujet d'\u00E9valuation
diff --git a/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java b/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java
index 4301803a064033580804b7d85bad199a3c8d5600..dffb1fc5e6793f8a6d1746b4346b952652ce130b 100644
--- a/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java
+++ b/src/main/java/org/olat/modules/quality/ui/QualityUIFactory.java
@@ -480,7 +480,7 @@ public class QualityUIFactory {
 	public static boolean validateInteger(TextElement el, int min, int max) {
 		boolean allOk = true;
 		el.clearError();
-		if(el.isEnabled()) {
+		if(el.isEnabled() && el.isVisible()) {
 			String val = el.getValue();
 			if(StringHelper.containsNonWhitespace(val)) {
 				
@@ -505,7 +505,7 @@ public class QualityUIFactory {
 	public static boolean validateDouble(TextElement el, int min, int max) {
 		boolean allOk = true;
 		el.clearError();
-		if(el.isEnabled()) {
+		if(el.isEnabled() && el.isVisible()) {
 			String val = el.getValue();
 			if(StringHelper.containsNonWhitespace(val)) {
 				
@@ -530,7 +530,7 @@ public class QualityUIFactory {
 	public static boolean validateIsMandatory(TextElement el) {
 		boolean allOk = true;
 		el.clearError();
-		if(el.isEnabled()) {
+		if(el.isEnabled() && el.isVisible()) {
 			String value = el.getValue();
 			if (!StringHelper.containsNonWhitespace(value)) {
 				el.setErrorKey("form.mandatory.hover", null);
@@ -543,7 +543,7 @@ public class QualityUIFactory {
 	public static boolean validateIsMandatory(SingleSelection el) {
 		boolean allOk = true;
 		el.clearError();
-		if(el.isEnabled()) {
+		if(el.isEnabled() && el.isVisible()) {
 			if (!el.isOneSelected()) {
 				el.setErrorKey("form.mandatory.hover", null);
 				allOk = false;
@@ -555,7 +555,7 @@ public class QualityUIFactory {
 	public static boolean validateIsMandatory(MultipleSelectionElement el) {
 		boolean allOk = true;
 		el.clearError();
-		if(el.isEnabled()) {
+		if(el.isEnabled() && el.isVisible()) {
 			if (!el.isAtLeastSelected(1)) {
 				el.setErrorKey("form.mandatory.hover", null);
 				allOk = false;
@@ -567,7 +567,7 @@ public class QualityUIFactory {
 	public static boolean validateIsMandatory(DateChooser el) {
 		boolean allOk = true;
 		el.clearError();
-		if(el.isEnabled()) {
+		if(el.isEnabled() && el.isVisible()) {
 			if (el.getDate() == null) {
 				el.setErrorKey("form.mandatory.hover", null);
 				allOk = false;
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 78c453d43a22c8755db8f89aab49b899b6a28978..54e781991325621d776f98f6fb969527f1fbe314 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
@@ -452,6 +452,28 @@ public class CourseLecturesProviderDAOTest extends OlatTestCase {
 				.doesNotContain(lectureBlock4.getKey());
 	}
 	
+	@Test
+	public void shouldFilterLectureBlockInfosByMaxTotalLectures() {
+		Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("");
+		RepositoryEntry course1 = JunitTestHelper.createAndPersistRepositoryEntry();
+		RepositoryEntry course2 = JunitTestHelper.createAndPersistRepositoryEntry();
+		RepositoryEntry otherCourse = JunitTestHelper.createAndPersistRepositoryEntry();
+		LectureBlock lectureBlock1 = createLectureBlock(course1, teacher, 5);
+		LectureBlock lectureBlock2 = createLectureBlock(course2, teacher, 1);
+		LectureBlock lectureBlock3 = createLectureBlock(course2, teacher, 1);
+		LectureBlock lectureBlock4 = createLectureBlock(otherCourse, teacher, 10);
+		dbInstance.commitAndCloseSession();
+
+		SearchParameters searchParams = new SearchParameters();
+		searchParams.setTeacherRef(teacher);
+		searchParams.setMaxTotalLectures(6);
+		List<LectureBlockInfo> infos = sut.loadLectureBlockInfo(searchParams);
+
+		assertThat(infos).extracting(LectureBlockInfo::getLectureBlockKey)
+				.containsExactlyInAnyOrder(lectureBlock1.getKey(), lectureBlock2.getKey(), lectureBlock3.getKey())
+				.doesNotContain(lectureBlock4.getKey());
+	}
+	
 	@Test
 	public void shouldFilterLectureBlockInfosBySelectingLecture() {
 		Identity teacher = JunitTestHelper.createAndPersistIdentityAsRndUser("");