diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollector.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollector.kt
index 914bd7cc0e81776c4b5700926e03cec87b980452..52b8be6d4a4c6d7012d4306dba6a3f0f759cf252 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollector.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollector.kt
@@ -19,6 +19,14 @@ class TestResultDataCollector @Inject constructor(
      *  exclude any registered test result before giving a consent
      */
     suspend fun saveTestResultAnalyticsSettings(testResult: TestResult) {
+        val validTestResults = listOf(
+            TestResult.POSITIVE,
+            TestResult.PENDING,
+            TestResult.NEGATIVE
+        )
+
+        if (testResult !in validTestResults) return // Not interested in other values
+
         if (analyticsSettings.analyticsEnabled.value) {
             val lastRiskResult = riskLevelStorage
                 .latestAndLastSuccessful
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt
index e4087abac71bccf897054b11663c304de677f51d..250fa3998c34879d1bf4895a14ca99087bc46008 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt
@@ -56,10 +56,12 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor(
         try {
             registrationState.postValue(RegistrationState(ApiRequestState.STARTED))
             val testResult = submissionRepository.asyncRegisterDeviceViaGUID(scanResult.guid!!)
+            // Order here is important. When `registrationState.postValue` is called before
+            // `saveTestResultAnalyticsSettings`, this coroutine will get canceled due to the navigation
+            // to the next screen.
+            testResultDataCollector.saveTestResultAnalyticsSettings(testResult)
             checkTestResult(testResult)
             registrationState.postValue(RegistrationState(ApiRequestState.SUCCESS, testResult))
-            // Order here is important. Save Analytics after SUCCESS
-            testResultDataCollector.saveTestResultAnalyticsSettings(testResult)
         } catch (err: CwaWebException) {
             registrationState.postValue(RegistrationState(ApiRequestState.FAILED))
             registrationError.postValue(err)
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollectorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollectorTest.kt
index 104a2d06deaafc25023c3edac0582567f65e10c4..a0a8ba370dda50e7c7e3a73c55339af02f6af696 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollectorTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/datadonation/analytics/modules/registeredtest/TestResultDataCollectorTest.kt
@@ -5,6 +5,7 @@ import de.rki.coronawarnapp.datadonation.analytics.storage.TestResultDonorSettin
 import de.rki.coronawarnapp.risk.RiskLevelResult
 import de.rki.coronawarnapp.risk.storage.RiskLevelStorage
 import de.rki.coronawarnapp.util.formatter.TestResult
+import io.mockk.Called
 import io.mockk.MockKAnnotations
 import io.mockk.Runs
 import io.mockk.every
@@ -66,4 +67,24 @@ class TestResultDataCollectorTest : BaseTest() {
             testResultDonorSettings.saveTestResultDonorDataAtRegistration(any(), any())
         }
     }
+
+    @Test
+    fun `saveTestResultAnalyticsSettings does not save data when TestResult is INVALID`() = runBlockingTest {
+        every { analyticsSettings.analyticsEnabled } returns mockFlowPreference(false)
+        testResultDataCollector.saveTestResultAnalyticsSettings(TestResult.INVALID)
+
+        verify {
+            analyticsSettings.analyticsEnabled wasNot Called
+        }
+    }
+
+    @Test
+    fun `saveTestResultAnalyticsSettings does not save data when TestResult is REDEEMED`() = runBlockingTest {
+        every { analyticsSettings.analyticsEnabled } returns mockFlowPreference(false)
+        testResultDataCollector.saveTestResultAnalyticsSettings(TestResult.REDEEMED)
+
+        verify {
+            analyticsSettings.analyticsEnabled wasNot Called
+        }
+    }
 }