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 26e3fd83b6de1c0855b55f9492c9e3184d599129..116691500e85a9a70dc3f36d2f79e766522080ac 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
@@ -32,31 +32,31 @@ import org.olat.core.gui.translator.Translator;
 public enum ScaleType {
 	zeroToMax {
 		@Override
-		public double getStepValue(int numberOfSteps, int step) {
+		public double getStepValue(int numberOfSteps, double step) {
 			return step - 1;
 		}
 	},
 	oneToMax {
 		@Override
-		public double getStepValue(int numberOfSteps, int step) {
+		public double getStepValue(int numberOfSteps, double step) {
 			return step;
 		}
 	},
 	maxToOne {
 		@Override
-		public double getStepValue(int numberOfSteps, int step) {
+		public double getStepValue(int numberOfSteps, double step) {
 			return numberOfSteps + 1 - step;
 		}
 	},
 	maxToZero {
 		@Override
-		public double getStepValue(int numberOfSteps, int step) {
+		public double getStepValue(int numberOfSteps, double step) {
 			return numberOfSteps - step;
 		}
 	},
 	zeroBallanced {
 		@Override
-		public double getStepValue(int numberOfSteps, int step) {
+		public double getStepValue(int numberOfSteps, double step) {
 			double offset = (numberOfSteps - 1) / 2.0;
 			return step - 1 - offset;
 		}
@@ -70,7 +70,7 @@ public enum ScaleType {
 	 * @param weight (optionl)
 	 * @return 
 	 */
-	public double getStepValue(int numberOfSteps, int step, Integer weight) {
+	public double getStepValue(int numberOfSteps, double step, Integer weight) {
 		double stepValue = getStepValue(numberOfSteps, step);
 		return weight != null
 				? stepValue * weight.intValue()
@@ -78,7 +78,7 @@ public enum ScaleType {
 		
 	};
 	
-	abstract double getStepValue(int numberOfSteps, int step);
+	abstract double getStepValue(int numberOfSteps, double step);
 
 	public String getKey() {
 		return name();
diff --git a/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java b/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java
index f53afe1fb41c9abdd2aeca5faa19af0a198c74f7..bec5eba1efa6310f65a5b226a14eb26807b7551e 100644
--- a/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java
+++ b/src/main/java/org/olat/modules/quality/analysis/manager/StatisticsCalculator.java
@@ -103,7 +103,7 @@ public class StatisticsCalculator {
 		log.debug("Raw grouped statistic: " + rawStatistic.toString());
 		Double rawAvg = rawStatistic.getRawAvg();
 		boolean rawAvgMaxGood = !rubric.isStartGoodRating();
-		Double scaledAvg = getScaledAvg(rubric, rawAvg);
+		Double scaledAvg = rubric.getScaleType().getStepValue(rubric.getSteps(), rawAvg, rubric.getWeight());
 		RubricRating rating = evaluationFormManager.getRubricRating(rubric, scaledAvg);
 		int steps = rubric.getSteps();
 		GroupedStatistic statistic = new GroupedStatisticImpl(rawStatistic.getIdentifier(), rawStatistic.getMultiKey(),
@@ -112,24 +112,6 @@ public class StatisticsCalculator {
 		return statistic;
 	}
 
-	private Double getScaledAvg(Rubric rubric, Double rawAvg) {
-		Double scaledAvg = rawAvg;
-		switch (rubric.getScaleType()) {
-		case maxToOne: {
-			scaledAvg = rubric.getSteps() + 1 - rawAvg;
-			break;
-		}
-		case zeroBallanced: {
-			double offset = (rubric.getSteps() - 1) / 2.0;
-			scaledAvg = rawAvg - 1 - offset;
-			break;
-		}
-		default:
-			break;
-		}
-		return scaledAvg;
-	}
-
 	MultiTrendSeries<String> getTrendsByIdentifiers(GroupedStatistics<GroupedStatistic> statistics, TemporalGroupBy temporalGroupBy) {
 		Set<TemporalKey> temporalKeys = new HashSet<>();
 		for (GroupedStatisticKeys groupedStatistic : statistics.getStatistics()) {
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 a6e867c7b88e7fee2c95d283e28afd5d2d29d4de..e18e0e3278635d01d5faf393c634cba6cae72508 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
@@ -98,5 +98,17 @@ public class ScaleTypeTest {
 		softly.assertThat(ScaleType.zeroBallanced.getStepValue(7, 7)).isEqualTo(3);
 		softly.assertAll();
 	}
+	
+	@Test
+	public void shouldGetWeightedValue() {
+		SoftAssertions softly = new SoftAssertions();
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 2, null)).isEqualTo(2);
+		softly.assertThat(ScaleType.oneToMax.getStepValue(6, 2, 2)).isEqualTo(4);
+		softly.assertThat(ScaleType.maxToOne.getStepValue(6, 3, 3)).isEqualTo(12);
+		softly.assertThat(ScaleType.zeroToMax.getStepValue(6, 2, 2)).isEqualTo(2);
+		softly.assertThat(ScaleType.maxToZero.getStepValue(6, 2, 1)).isEqualTo(4);
+		softly.assertThat(ScaleType.zeroBallanced.getStepValue(6, 3, 3)).isEqualTo(-1.5);
+		softly.assertAll();
+	}
 
 }