diff --git a/config/baseline.xml b/config/baseline.xml
index b471c071385f05f2bbc05621c4a8b6bc650a2376..ba711b53270c937f32c1c7d143e86b7dd099a97c 100644
--- a/config/baseline.xml
+++ b/config/baseline.xml
@@ -13,9 +13,7 @@
         <ID>FunctionNaming:ToolRunRepository.kt$ToolRunRepository$fun findFirstByRepository_IdOrderByCreatedAtDesc(id:
             UUID): ToolRunEntity
         </ID>
-        <ID>FunctionNaming:ToolRunRepository.kt$ToolRunRepository$fun findFirstByRepository_IdOrderByCreatedAtDesc(id:
-            UUID): ToolRunEntity
-        </ID>
+        <ID>MagicNumber:KPITreeResponseDto.kt$KPITreeResponseDto$0.5</ID>
     </ManuallySuppressedIssues>
     <CurrentIssues/>
 </SmellBaseline>
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPIHierarchyEdgeDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPIHierarchyEdgeDto.kt
index 7ed7f2de54fed9c53cc631b1f03e23952d69f8b5..cc042cbf1f2e6dceb1bd371b22095548a0217d8c 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPIHierarchyEdgeDto.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPIHierarchyEdgeDto.kt
@@ -1,3 +1,8 @@
 package de.fraunhofer.iem.dataprovider.kpi.dto
 
-data class KPIHierarchyEdgeDto(val from: KpiCalculationDto, val to: KpiCalculationDto, val weight: Double)
+data class KPIHierarchyEdgeDto(
+    val from: KpiCalculationDto,
+    val to: KpiCalculationDto,
+    val plannedWeight: Double,
+    val actualWeight: Double = plannedWeight
+)
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeChildResponseDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeChildResponseDto.kt
index 8ffb91e6672cd751da4f051a97d3714003b2717c..6113f7339d87db923370fc02ae36e7c52b103f69 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeChildResponseDto.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeChildResponseDto.kt
@@ -1,3 +1,3 @@
 package de.fraunhofer.iem.dataprovider.kpi.dto
 
-data class KPITreeChildResponseDto(val kpi: KPITreeResponseDto, val weight: Double)
+data class KPITreeChildResponseDto(val kpi: KPITreeResponseDto, val plannedWeight: Double, val actualWeight: Double)
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeResponseDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeResponseDto.kt
index 4369ab0b95dbe3376fafa16d4d0d278b03e55ae7..fe62fda0bae7b5f05d4ba03f06dbc3b44aab7198 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeResponseDto.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KPITreeResponseDto.kt
@@ -9,4 +9,16 @@ data class KPITreeResponseDto(
     val children: List<KPITreeChildResponseDto>,
     val isEmpty: Boolean,
     val order: Int = 1
-)
+) {
+    val amountOfMissingDataChildren: Double = children.sumOf {
+        if (it.actualWeight == 0.0) {
+            it.plannedWeight
+        } else {
+            0.0
+        }
+    }
+
+    val amountOfMissingDataTree: Double = children.sumOf {
+        it.kpi.amountOfMissingDataChildren
+    }
+}
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt
index e8add33265e1c8c41f537e37722bb46968b984a2..03f234f2d8c290ad4b6ed02f1ada84086920e3f8 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/dto/KpiCalculationDto.kt
@@ -28,7 +28,11 @@ class KpiCalculationDto(
     fun calculateKPI() {
         if (calculationStrategy != null) {
             try {
-                this.value = calculationStrategy.calculateKPI(this.hierarchyEdges)
+                val valueAndEdges = calculationStrategy.calculateKPI(this.hierarchyEdges)
+                this.value = valueAndEdges.first
+                this.hierarchyEdges.clear()
+                this.hierarchyEdges.addAll(valueAndEdges.second)
+
                 this.isEmpty = false
             } catch (exception: Exception) {
                 logger.error("Exception during KPI calculation for $kind with $calculationStrategy")
@@ -56,7 +60,7 @@ class KpiCalculationDto(
     fun toViewModel(): KPITreeResponseDto {
         val children = this.hierarchyEdges.map {
             val child = it.to.toViewModel()
-            KPITreeChildResponseDto(child, it.weight)
+            KPITreeChildResponseDto(kpi = child, plannedWeight = it.plannedWeight, actualWeight = it.actualWeight)
         }
 
         return this.kind.toViewModel(value = value ?: -1, children = children, isEmpty = isEmpty)
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/service/KPIService.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/service/KPIService.kt
index 793a9baeee89e5f89cf31925a946a4aba40b6aed..cfe145a51bbdef99a8f08738f4a41cdabb65f977 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/service/KPIService.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/service/KPIService.kt
@@ -28,7 +28,7 @@ class KPIService(
     fun removeKPIChildrenLowerThanSecondLevel(kpiTreeResponseDto: KPITreeResponseDto): KPITreeResponseDto {
         val children: List<KPITreeChildResponseDto> = kpiTreeResponseDto.children.map {
             KPITreeChildResponseDto(
-                KPITreeResponseDto(
+                kpi = KPITreeResponseDto(
                     value = it.kpi.value,
                     name = it.kpi.name,
                     description = it.kpi.description,
@@ -38,7 +38,8 @@ class KPIService(
                     it.kpi.isEmpty,
                     order = it.kpi.order
                 ),
-                it.weight
+                actualWeight = it.actualWeight,
+                plannedWeight = it.plannedWeight
             )
         }
 
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt
index ca143284a624509a07debe2b70b0d8103a48508d..157e8d977bc8672d8d76b67167b498b1fece72fe 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/AggregationKPICalculationStrategy.kt
@@ -9,25 +9,51 @@ class AggregationKPICalculationStrategy : KPICalculationStrategy {
      * If a child is empty it is removed from the calculation and its
      * corresponding edge weight is distributed evenly between the
      * remaining children.
+     * The method returns the KPIs value as well as the updated
+     * KPIHierarchyEdgeDtos with the actual used weight.
      */
-    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int {
+    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Pair<Int, List<KPIHierarchyEdgeDto>> {
         if (children.none { !it.to.isEmpty() } || children.isEmpty()) {
             throw Exception("KPI aggregation of empty children can't be calculated.")
         }
 
         val emptyChildren: List<KPIHierarchyEdgeDto> = children.filter { it.to.isEmpty() }
+
         val notEmptyChildren = children.toMutableList()
         notEmptyChildren.removeAll(emptyChildren)
 
         val additionalWeightPerElement: Double = if (notEmptyChildren.isNotEmpty()) {
-            val unusedWeight = emptyChildren.sumOf { it.weight }
+            val unusedWeight = emptyChildren.sumOf { it.plannedWeight }
             unusedWeight / notEmptyChildren.size
         } else {
             0.0
         }
 
-        return notEmptyChildren.sumOf { child ->
-            (child.to.getValue().toFloat() * (child.weight + additionalWeightPerElement)).toInt()
+        val weightedEdges: MutableList<KPIHierarchyEdgeDto> = emptyChildren
+            .map {
+                KPIHierarchyEdgeDto(
+                    from = it.from,
+                    to = it.to,
+                    plannedWeight = it.plannedWeight,
+                    actualWeight = 0.0
+                )
+            }.toMutableList()
+
+        var value = 0
+
+        notEmptyChildren.forEach { child ->
+            val actualWeight = (child.plannedWeight + additionalWeightPerElement)
+            weightedEdges.add(
+                KPIHierarchyEdgeDto(
+                    from = child.from,
+                    to = child.to,
+                    plannedWeight = child.plannedWeight,
+                    actualWeight = actualWeight
+                )
+            )
+            value += (child.to.getValue().toFloat() * actualWeight).toInt()
         }
+
+        return Pair(value, weightedEdges)
     }
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/KPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/KPICalculationStrategy.kt
index 7f715b85ebd7c5f6f7d34b2c6a0b914152d5ccec..d80d4c55f34988c4def4a537726d3fe5c2dfe0c9 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/KPICalculationStrategy.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/KPICalculationStrategy.kt
@@ -3,5 +3,5 @@ package de.fraunhofer.iem.dataprovider.kpi.strategy
 import de.fraunhofer.iem.dataprovider.kpi.dto.KPIHierarchyEdgeDto
 
 fun interface KPICalculationStrategy {
-    fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int
+    fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Pair<Int, List<KPIHierarchyEdgeDto>>
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt
index a65c51b750ffbe91953633c4c745527b6bf13ae9..b22771aeb9834bcd56355ceed99e2845df013fed 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/MaximumKPICalculationStrategy.kt
@@ -5,7 +5,7 @@ import de.fraunhofer.iem.dataprovider.kpi.dto.KPIHierarchyEdgeDto
 class MaximumKPICalculationStrategy : KPICalculationStrategy {
     // TODO: Currently it's tailored to the maximum dependency vulnerability score, this should change in the future
     @Suppress("MagicNumber")
-    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int {
+    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Pair<Int, List<KPIHierarchyEdgeDto>> {
         if (children.none { !it.to.isEmpty() } || children.isEmpty()) {
             throw Exception("KPI maximum of empty children can't be calculated")
         }
@@ -18,6 +18,6 @@ class MaximumKPICalculationStrategy : KPICalculationStrategy {
                 }
             }
         }
-        return (100 - (maximum))
+        return Pair((100 - (maximum)), children)
     }
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RatioKPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RatioKPICalculationStrategy.kt
index cfdbbd60a5314e404f940140c3c61479dee7862f..1f258d8ad9b6e42664d81b6d848287c8e2c80baa 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RatioKPICalculationStrategy.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RatioKPICalculationStrategy.kt
@@ -4,15 +4,15 @@ import de.fraunhofer.iem.dataprovider.kpi.dto.KPIHierarchyEdgeDto
 
 class RatioKPICalculationStrategy : KPICalculationStrategy {
     @Suppress("MagicNumber")
-    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int {
+    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Pair<Int, List<KPIHierarchyEdgeDto>> {
         if (children.size != 2) {
             throw Exception("Requires exactly two children")
         }
         val firstValue = children[0].to.getValue()
         val secondValue = children[1].to.getValue()
         if (firstValue >= secondValue) {
-            return ((secondValue.toDouble() / firstValue.toDouble()) * 100).toInt()
+            return Pair(((secondValue.toDouble() / firstValue.toDouble()) * 100).toInt(), children)
         }
-        return ((firstValue.toDouble() / secondValue.toDouble()) * 100).toInt()
+        return Pair(((firstValue.toDouble() / secondValue.toDouble()) * 100).toInt(), children)
     }
 }
diff --git a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RawValueKPICalculationStrategy.kt b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RawValueKPICalculationStrategy.kt
index 5f477b02d802953fed874dfb653688412b8dc9c9..7a8e662945c7e2e7109f2c8ce3144c33569f7ea3 100644
--- a/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RawValueKPICalculationStrategy.kt
+++ b/src/main/kotlin/de/fraunhofer/iem/dataprovider/kpi/strategy/RawValueKPICalculationStrategy.kt
@@ -3,7 +3,7 @@ package de.fraunhofer.iem.dataprovider.kpi.strategy
 import de.fraunhofer.iem.dataprovider.kpi.dto.KPIHierarchyEdgeDto
 
 class RawValueKPICalculationStrategy(private val value: Int) : KPICalculationStrategy {
-    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Int {
-        return this.value
+    override fun calculateKPI(children: List<KPIHierarchyEdgeDto>): Pair<Int, List<KPIHierarchyEdgeDto>> {
+        return Pair(this.value, children)
     }
 }