diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt
index c518230d7a1a0f59dab7b17da660454efd018fb2..1857d1273d104960dc38bbc1b253818e580ea4ab 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/TimeVariables.kt
@@ -181,13 +181,17 @@ object TimeVariables {
     suspend fun getActiveTracingDaysInRetentionPeriod(): Long {
         // the active tracing time during the retention period - all non active tracing times
         val tracingActiveMS = getTimeRangeFromRetentionPeriod()
+        val retentionPeriodInMS = getDefaultRetentionPeriodInMS()
+        val lastNonActiveTracingTimestamp = LocalData.lastNonActiveTracingTimestamp()
+        val current = System.currentTimeMillis()
+        val retentionTimestamp = current - retentionPeriodInMS
         val inactiveTracingIntervals = TracingIntervalRepository
             .getDateRepository(CoronaWarnApplication.getAppContext())
             .getIntervals()
             .toMutableList()
 
         // by default the tracing is assumed to be activated
-        // if the API is reachable we set the value accordingly 
+        // if the API is reachable we set the value accordingly
         val enIsDisabled = try {
             !InternalExposureNotificationClient.asyncIsEnabled()
         } catch (e: ApiException) {
@@ -195,21 +199,22 @@ object TimeVariables {
             false
         }
 
-        if (enIsDisabled) {
-            val current = System.currentTimeMillis()
-            val lastTimeTracingWasNotActivated = minOf(
-                LocalData.lastNonActiveTracingTimestamp() ?: current,
-                current - tracingActiveMS
-            )
-
+        // lastNonActiveTracingTimestamp could be null when en is disabled
+        // it only gets updated when you turn the en back on
+        // if en is disabled and lastNonActiveTracingTimestamp != null, only then we add a pair to
+        // the inactive intervals list to account for the time of inactivity between the last time
+        // en was not active and now.
+        if (enIsDisabled && lastNonActiveTracingTimestamp != null) {
+            val lastTimeTracingWasNotActivated = LocalData.lastNonActiveTracingTimestamp() ?: current
             inactiveTracingIntervals.add(Pair(lastTimeTracingWasNotActivated, current))
         }
-
-        val finalTracingMS = tracingActiveMS - inactiveTracingIntervals
-            .map { it.second - it.first }
+        val inactiveTracingMS = inactiveTracingIntervals
+            .map { it.second - maxOf(it.first, retentionTimestamp) }
             .sum()
 
-        return finalTracingMS.roundUpMsToDays()
+        // because we delete periods that are past 14 days but tracingActiveMS counts from first
+        // ever activation, there are edge cases where tracingActiveMS gets to be > 14 days
+        return (minOf(tracingActiveMS, retentionPeriodInMS) - inactiveTracingMS).roundUpMsToDays()
     }
 
     /****************************************************
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt
index 0f34787c36abdac94c4c5dccce2270b19895c83a..2daf3d847bed99a233c2292a0672f90b281b1c78 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt
@@ -66,7 +66,7 @@ class TracingIntervalRepository(private val tracingIntervalDao: TracingIntervalD
 
         return tracingIntervalDao
             .getAllIntervals()
-            .map { Pair(maxOf(it.from, retentionTimestamp), it.to) }
+            .map { Pair(it.from, it.to) }
             .also { Timber.d("Intervals: $it") }
     }
 }