diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt
index 4a11a2ed4da149940286c01abacf67c6b3d8462b..6d8defa366dc9eb4731a8d77464b1be3778084cd 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/SubmissionResultPositiveOtherWarningViewModel.kt
@@ -13,9 +13,7 @@ import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
 import de.rki.coronawarnapp.submission.SubmissionTask
 import de.rki.coronawarnapp.submission.Symptoms
 import de.rki.coronawarnapp.task.TaskController
-import de.rki.coronawarnapp.task.TaskState
 import de.rki.coronawarnapp.task.common.DefaultTaskRequest
-import de.rki.coronawarnapp.ui.submission.ApiRequestState
 import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
 import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
 import de.rki.coronawarnapp.util.ui.SingleLiveEvent
@@ -24,6 +22,7 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
 import kotlinx.coroutines.flow.combineTransform
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.flow.onEach
 import timber.log.Timber
 import java.util.UUID
 
@@ -35,48 +34,35 @@ class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor(
     interoperabilityRepository: InteroperabilityRepository,
     private val testResultNotificationService: TestResultNotificationService
 ) : CWAViewModel(dispatcherProvider = dispatcherProvider) {
-
     private var currentSubmissionRequestId: UUID? = null
+
     private val currentSubmission = taskController.tasks
-            .map { it.find { taskInfo -> taskInfo.taskState.type == SubmissionTask::class }?.taskState }
-    private val submissionState = currentSubmission
-            .map { taskState ->
+        .map { it.find { taskInfo -> taskInfo.taskState.request.id == currentSubmissionRequestId }?.taskState }
+        .onEach {
+            it?.let {
                 when {
-                    taskState == null -> ApiRequestState.IDLE
-                    taskState.isFailed -> ApiRequestState.FAILED.also { updateUI(taskState) }
-                    taskState.isFinished -> ApiRequestState.SUCCESS.also { updateUI(taskState) }
-                    else -> ApiRequestState.STARTED
+                    it.isFailed -> submissionError.postValue(it.error)
+                    it.isSuccessful -> routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSubmissionDone)
                 }
             }
-    val submissionError = SingleLiveEvent<Throwable>()
+        }
 
     val uiState = combineTransform(
-            submissionState,
-            interoperabilityRepository.countryListFlow
+        currentSubmission,
+        interoperabilityRepository.countryListFlow
     ) { state, countries ->
         WarnOthersState(
-                apiRequestState = state,
-                countryList = countries
+            submitTaskState = state,
+            countryList = countries
         ).also { emit(it) }
     }.asLiveData(context = dispatcherProvider.Default)
 
+    val submissionError = SingleLiveEvent<Throwable>()
     val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent()
 
     val requestKeySharing = SingleLiveEvent<Unit>()
     val showEnableTracingEvent = SingleLiveEvent<Unit>()
 
-    private fun updateUI(taskState: TaskState) {
-        if (taskState.request.id == currentSubmissionRequestId) {
-            currentSubmissionRequestId = null
-            when {
-                taskState.isFailed ->
-                    submissionError.postValue(taskState.error ?: return)
-                taskState.isSuccessful ->
-                    routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSubmissionDone)
-            }
-        }
-    }
-
     fun onBackPressed() {
         routeToScreen.postValue(SubmissionNavigationEvents.NavigateToTestResult)
     }
@@ -104,10 +90,10 @@ class SubmissionResultPositiveOtherWarningViewModel @AssistedInject constructor(
     private fun submitDiagnosisKeys(keys: List<TemporaryExposureKey>) {
         Timber.d("submitDiagnosisKeys(keys=%s, symptoms=%s)", keys, symptoms)
         val registrationToken =
-                LocalData.registrationToken() ?: throw NoRegistrationTokenSetException()
+            LocalData.registrationToken() ?: throw NoRegistrationTokenSetException()
         val taskRequest = DefaultTaskRequest(
-                SubmissionTask::class,
-                SubmissionTask.Arguments(registrationToken, keys, symptoms)
+            SubmissionTask::class,
+            SubmissionTask.Arguments(registrationToken, keys, symptoms)
         )
         currentSubmissionRequestId = taskRequest.id
         taskController.submit(taskRequest)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/WarnOthersState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/WarnOthersState.kt
index 33809f6b7780c42c014d3c0bfb0698deee4aab2b..e224181fb79770ca69535a7630325574f703a6d8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/WarnOthersState.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/warnothers/WarnOthersState.kt
@@ -1,17 +1,16 @@
 package de.rki.coronawarnapp.ui.submission.warnothers
 
+import de.rki.coronawarnapp.task.TaskState
 import de.rki.coronawarnapp.ui.Country
-import de.rki.coronawarnapp.ui.submission.ApiRequestState
 
 data class WarnOthersState(
-    val apiRequestState: ApiRequestState,
+    val submitTaskState: TaskState?,
     val countryList: List<Country>
 ) {
 
     fun isSubmitButtonEnabled(): Boolean =
-        apiRequestState == ApiRequestState.IDLE || apiRequestState == ApiRequestState.FAILED
+        submitTaskState == null || submitTaskState.isFailed
 
-    fun isSubmitSpinnerVisible(): Boolean {
-        return apiRequestState == ApiRequestState.STARTED
-    }
+    fun isSubmitSpinnerVisible(): Boolean =
+        submitTaskState != null && submitTaskState.isActive
 }