diff --git a/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java b/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java
index 802da4d874c189f56727dacbdb71b5cc44291b99..0be0c0b04e1c387885f3b769f004472e4b50932e 100644
--- a/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java
+++ b/src/main/java/org/olat/modules/forms/model/xml/ScaleType.java
@@ -30,6 +30,12 @@ import org.olat.core.gui.translator.Translator;
  *
  */
 public enum ScaleType {
+	zeroToMax {
+		@Override
+		public double getStepValue(int numberOfSteps, int step) {
+			return step - 1;
+		}
+	},
 	oneToMax {
 		@Override
 		public double getStepValue(int numberOfSteps, int step) {
@@ -42,6 +48,12 @@ public enum ScaleType {
 			return numberOfSteps + 1 - step;
 		}
 	},
+	maxToZero {
+		@Override
+		public double getStepValue(int numberOfSteps, int step) {
+			return numberOfSteps - step;
+		}
+	},
 	zeroBallanced {
 		@Override
 		public double getStepValue(int numberOfSteps, int step) {
diff --git a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties
index 37f24403284d0b651e2f9a3063c0f4e824307b70..e99e270e69e447b037032fa4d8556cbe0526d5cb 100644
--- a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties
+++ b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_de.properties
@@ -135,7 +135,9 @@ rubric.report.variance.abrev=\u03C3\u00B2
 rubric.report.variance.title=Varianz
 rubric.scale.example.value=Wert: {0}
 rubric.scale.maxToOne=Absteigende Likert-Skala (x bis 1)
+rubric.scale.maxToZero=Absteigende Likert-Skala (x bis 0)
 rubric.scale.oneToMax=Aufsteigende Likert-Skala (1 bis x)
+rubric.scale.zeroToMax=Aufsteigende Likert-Skala (0 bis x)
 rubric.scale.type.help=Legen Sie die Werte der gew\u00E4hlten Skala fest. Die Werte werden in den Reports und der Analyse von Umfragen verwendet.
 rubric.scale.type=Skalentyp
 rubric.scale.zeroBallanced=Symmetrische Likert-Skala (-x bis x)
diff --git a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties
index 14c63b10feae3d6b2e8b79320a8f2fdd0a713868..8a93123794f950e891fe944866ecfb8b66e4b2b3 100644
--- a/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties
+++ b/src/main/java/org/olat/modules/forms/ui/_i18n/LocalStrings_en.properties
@@ -134,7 +134,9 @@ rubric.report.variance.abrev=\u03C3\u00B2
 rubric.report.variance.title=Variance
 rubric.scale.example.value=Value\: {0}
 rubric.scale.maxToOne=Descending Likert scale (x to 1)
+rubric.scale.maxToZero=Descending Likert scale (x to 0)
 rubric.scale.oneToMax=Ascending Likert scale (1 to x)
+rubric.scale.zeroToMax=Ascending Likert scale (0 to x)
 rubric.scale.type.help=Specify the values of the selected scale. The values are used in reports and the survey analysis.
 rubric.scale.type=Scale type
 rubric.scale.zeroBallanced=Ballanced Likert scale (-x to x)
diff --git a/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java b/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java
index 9b23b972d5b49dc2c42ee1909d23e46fb600096f..a6e867c7b88e7fee2c95d283e28afd5d2d29d4de 100644
--- a/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java
+++ b/src/test/java/org/olat/modules/forms/model/xml/ScaleTypeTest.java
@@ -19,8 +19,8 @@
  */
 package org.olat.modules.forms.model.xml;
 
-import static org.assertj.core.api.Assertions.assertThat;
 
+import org.assertj.core.api.SoftAssertions;
 import org.junit.Test;
 
 /**
@@ -33,40 +33,70 @@ public class ScaleTypeTest {
 	
 	@Test
 	public void shouldGetStepValueForOneToMax() {
-		assertThat(ScaleType.oneToMax.getStepValue(6, 1)).isEqualTo(1);
-		assertThat(ScaleType.oneToMax.getStepValue(6, 2)).isEqualTo(2);
-		assertThat(ScaleType.oneToMax.getStepValue(6, 3)).isEqualTo(3);
-		assertThat(ScaleType.oneToMax.getStepValue(6, 4)).isEqualTo(4);
-		assertThat(ScaleType.oneToMax.getStepValue(6, 5)).isEqualTo(5);
-		assertThat(ScaleType.oneToMax.getStepValue(6, 6)).isEqualTo(6);
+		SoftAssertions softly = new SoftAssertions();
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 1)).isEqualTo(1);
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 2)).isEqualTo(2);
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 3)).isEqualTo(3);
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 4)).isEqualTo(4);
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 5)).isEqualTo(5);
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 6)).isEqualTo(6);
+		softly.assertAll();
 	}
 
 	@Test
 	public void shouldGetStepValueForMaxToOne() {
-		assertThat(ScaleType.maxToOne.getStepValue(6, 1)).isEqualTo(6);
-		assertThat(ScaleType.maxToOne.getStepValue(6, 2)).isEqualTo(5);
-		assertThat(ScaleType.maxToOne.getStepValue(6, 3)).isEqualTo(4);
-		assertThat(ScaleType.maxToOne.getStepValue(6, 4)).isEqualTo(3);
-		assertThat(ScaleType.maxToOne.getStepValue(6, 5)).isEqualTo(2);
-		assertThat(ScaleType.maxToOne.getStepValue(6, 6)).isEqualTo(1);
+		SoftAssertions softly = new SoftAssertions();
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 1)).isEqualTo(6);
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 2)).isEqualTo(5);
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 3)).isEqualTo(4);
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 4)).isEqualTo(3);
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 5)).isEqualTo(2);
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 6)).isEqualTo(1);
+		softly.assertAll();
+	}
+	
+	@Test
+	public void shouldGetStepValueForZeroToMax() {
+		SoftAssertions softly = new SoftAssertions();
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 1)).isEqualTo(0);
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 2)).isEqualTo(1);
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 3)).isEqualTo(2);
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 4)).isEqualTo(3);
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 5)).isEqualTo(4);
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 6)).isEqualTo(5);
+		softly.assertAll();
+	}
+
+	@Test
+	public void shouldGetStepValueForMaxToZero() {
+		SoftAssertions softly = new SoftAssertions();
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 1)).isEqualTo(5);
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 2)).isEqualTo(4);
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 3)).isEqualTo(3);
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 4)).isEqualTo(2);
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 5)).isEqualTo(1);
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 6)).isEqualTo(0);
+		softly.assertAll();
 	}
 	
 	@Test
 	public void shouldGetValueForZeroBalanced() {
-		assertThat(ScaleType.zeroBallanced.getStepValue(6, 1)).isEqualTo(-2.5);
-		assertThat(ScaleType.zeroBallanced.getStepValue(6, 2)).isEqualTo(-1.5);
-		assertThat(ScaleType.zeroBallanced.getStepValue(6, 3)).isEqualTo(-0.5);
-		assertThat(ScaleType.zeroBallanced.getStepValue(6, 4)).isEqualTo(0.5);
-		assertThat(ScaleType.zeroBallanced.getStepValue(6, 5)).isEqualTo(1.5);
-		assertThat(ScaleType.zeroBallanced.getStepValue(6, 6)).isEqualTo(2.5);
+		SoftAssertions softly = new SoftAssertions();
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 1)).isEqualTo(-2.5);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 2)).isEqualTo(-1.5);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 3)).isEqualTo(-0.5);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 4)).isEqualTo(0.5);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 5)).isEqualTo(1.5);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 6)).isEqualTo(2.5);
 
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 1)).isEqualTo(-3);
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 2)).isEqualTo(-2);
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 3)).isEqualTo(-1);
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 4)).isEqualTo(0);
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 5)).isEqualTo(1);
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 6)).isEqualTo(2);
-		assertThat(ScaleType.zeroBallanced.getStepValue(7, 7)).isEqualTo(3);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 1)).isEqualTo(-3);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 2)).isEqualTo(-2);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 3)).isEqualTo(-1);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 4)).isEqualTo(0);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 5)).isEqualTo(1);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 6)).isEqualTo(2);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 7)).isEqualTo(3);
+		softly.assertAll();
 	}
 
 }