diff --git a/src/main/java/org/olat/course/assessment/AssessmentForm.java b/src/main/java/org/olat/course/assessment/AssessmentForm.java
index d31be1fdb7a1f31a92a14c3b5182dc2cd607fd1c..5ed64928d3bdc0e1f88752b6b8a257a884ebcba2 100644
--- a/src/main/java/org/olat/course/assessment/AssessmentForm.java
+++ b/src/main/java/org/olat/course/assessment/AssessmentForm.java
@@ -163,7 +163,9 @@ public class AssessmentForm extends FormBasicController {
 	@Override
 	protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) {
 		if(saveAndCloseLink == source) {
-			fireEvent(ureq, Event.DONE_EVENT);
+			if(validateFormLogic(ureq)) {
+				fireEvent(ureq, Event.DONE_EVENT);
+			}
 		}
 		super.formInnerEvent(ureq, source, event);
 	}
@@ -182,7 +184,7 @@ public class AssessmentForm extends FormBasicController {
 	}
 
 	@Override
-	protected boolean validateFormLogic (UserRequest ureq) {
+	protected boolean validateFormLogic(UserRequest ureq) {
 		if (hasScore) {
 			try {
 				if(parseFloat(score) == null) {
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java b/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java
index 43ca3c07738e4caa1521812531f6e9c7a980d5d0..1f4a7febb2c9de42781bed381661863d4112115a 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/AssessedIdentityCheckListController.java
@@ -167,7 +167,11 @@ public class AssessedIdentityCheckListController extends FormBasicController {
 				pointEl.setExampleKey("checklist.point.example", new String[]{ "0", maxValue});
 			}
 			// hide when not yet checked
-			pointEl.setVisible(check.getChecked());
+			if(check != null) {
+				pointEl.setVisible(check.getChecked());
+			} else {
+				pointEl.setVisible(false);
+			}
 		}
 		
 		CheckboxWrapper wrapper = new CheckboxWrapper(checkbox, check, boxEl, pointEl);
@@ -197,13 +201,45 @@ public class AssessedIdentityCheckListController extends FormBasicController {
 			CheckboxWrapper wrapper = (CheckboxWrapper)boxEl.getUserObject();
 			doUpdateCheck(wrapper, boxEl.isAtLeastSelected(1));
 		} else if(saveAndCloseLink == source) {
-			doSave();
-			fireEvent(ureq, Event.DONE_EVENT);
+			if(validateFormLogic(ureq)) {
+				doSave();
+				fireEvent(ureq, Event.DONE_EVENT);
+			}
 		}
 		
 		super.formInnerEvent(ureq, source, event);
 	}
-	
+
+	@Override
+	protected boolean validateFormLogic(UserRequest ureq) {
+		
+		boolean allOk = true;
+		for(CheckboxWrapper wrapper:wrappers) {
+		
+			TextElement pointEl = wrapper.getPointEl();
+			if(pointEl != null) {
+				pointEl.clearError();
+				String val = pointEl.getValue();
+				if(StringHelper.containsNonWhitespace(val)) {
+					try {
+						Float max = wrapper.getCheckbox().getPoints();
+						float maxScore = max == null ? 0f : max.floatValue();
+						float score = Float.parseFloat(val);
+						if(score < 0f || score > maxScore) {
+							pointEl.setErrorKey("form.error.scoreOutOfRange", null);
+							allOk &= false;
+						}
+
+					} catch (NumberFormatException e) {
+						pointEl.setErrorKey("form.error.wrongFloat", null);
+						allOk &= false;
+					}
+				}
+			}
+		}
+		return allOk & super.validateFormLogic(ureq);
+	}
+
 	private void doSave() {
 		List<AssessmentBatch> batchElements = new ArrayList<>();
 		for(CheckboxWrapper wrapper:wrappers) {
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
index 71ace1756ace7e08fd785e15aaafe4905afd7e4b..6708b746f6ffe6c702c5adbfe3fc4fc37d82ae7b 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
+++ b/src/main/java/org/olat/course/nodes/cl/ui/CheckListAssessmentController.java
@@ -104,6 +104,7 @@ public class CheckListAssessmentController extends FormBasicController implement
 	private static final String[] onKeys = new String[] { "on" };
 	private static final String[] onValues = new String[] { "" };
 	
+	private final Float maxScore;
 	private final Date dueDate;
 	private final boolean withScore;
 	private final CheckboxList checkboxList;
@@ -174,6 +175,8 @@ public class CheckListAssessmentController extends FormBasicController implement
 		
 		Boolean hasScore = (Boolean)config.get(MSCourseNode.CONFIG_KEY_HAS_SCORE_FIELD);
 		withScore = (hasScore == null || hasScore.booleanValue());	
+		
+		maxScore = (Float)config.get(MSCourseNode.CONFIG_KEY_SCORE_MAX);
 
 		initForm(ureq);
 	}
@@ -346,7 +349,6 @@ public class CheckListAssessmentController extends FormBasicController implement
 	}
 	
 	private List<CheckListAssessmentRow> getAssessmentDataViews(List<AssessmentData> datas, List<Checkbox> checkbox) {
-		
 		List<CheckListAssessmentRow> dataViews = new ArrayList<>();
 		
 		int numOfcheckbox = checkbox.size();
@@ -368,6 +370,8 @@ public class CheckListAssessmentController extends FormBasicController implement
 				
 				if(check.getChecked() == null) continue;
 				
+				check.getCheckbox();
+				
 				Integer index = indexed.get(check.getCheckbox().getCheckboxId());
 				if(index != null) {
 					int i = index.intValue();
@@ -377,6 +381,10 @@ public class CheckListAssessmentController extends FormBasicController implement
 					}
 				}
 			}
+			
+			if(maxScore != null && maxScore.floatValue() > 0f && totalPoints > maxScore.floatValue()) {
+				totalPoints = maxScore.floatValue();
+			}
 			CheckListAssessmentRow row = new CheckListAssessmentRow(data.getIdentity(), checkBool, scores, totalPoints, userPropertyHandlers, getLocale());
 			dataViews.add(row);
 		}
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
index b02f4e6d54f8f13cb7ea9cf9e6dce66d413d2041..473dbb96bf6cf732af0e5048cbd29cb7b7db0fed 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_de.properties
@@ -127,6 +127,7 @@ pdf.export.checked=Erledigte Checkboxen als PDF
 award.point.on=Punkte vergeben bei Auswahl
 description=Beschreibung
 participants=Mitglieder
+form.error.scoreOutOfRange=$org.olat.course.assessment\:form.error.scoreOutOfRange
 file=Datei
 select.checkbox=Auswahl Checkbox
 signature=Unterschrift
diff --git a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties
index 952ca997239c88f394af7f875e7d7a162a8a25b8..18634aabd479c67632b059dc4d4de97de8b78be7 100644
--- a/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/course/nodes/cl/ui/_i18n/LocalStrings_en.properties
@@ -80,6 +80,7 @@ help.hover.config=Help regarding configuration
 help.hover.coach.assessment=Help regarding assessment and management of checklists
 help.hover.assessment.checkbox=help regarding assessment per box
 info.title=$org.olat.course.nodes.ms\:info.title
+form.error.scoreOutOfRange=$org.olat.course.assessment\:form.error.scoreOutOfRange
 label=Label
 label.controlled=Verified
 label.done=Done