diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..efa8c183172a97117b9699750c27a696c82feea0
--- /dev/null
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/submission/SubmissionTestResultConsentGivenFragmentTest.kt
@@ -0,0 +1,69 @@
+package de.rki.coronawarnapp.ui.submission
+
+import androidx.fragment.app.testing.launchFragment
+import androidx.fragment.app.testing.launchFragmentInContainer
+import androidx.navigation.NavController
+import androidx.navigation.Navigation
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import dagger.Module
+import dagger.android.ContributesAndroidInjector
+import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenFragment
+import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenViewModel
+import io.mockk.MockKAnnotations
+import io.mockk.impl.annotations.MockK
+import org.junit.After
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mockito.mock
+import org.mockito.Mockito.verify
+import testhelpers.BaseUITest
+
+@RunWith(AndroidJUnit4::class)
+class SubmissionTestResultConsentGivenFragmentTest : BaseUITest() {
+
+    @MockK lateinit var viewModel: SubmissionTestResultConsentGivenViewModel
+
+    @Before
+    fun setup() {
+        MockKAnnotations.init(this, relaxed = true)
+        setupMockViewModel(object : SubmissionTestResultConsentGivenViewModel.Factory {
+            override fun create(): SubmissionTestResultConsentGivenViewModel = viewModel
+        })
+    }
+
+    @After
+    fun teardown() {
+        clearAllViewModels()
+    }
+
+    @Test
+    fun launch_fragment() {
+        launchFragment<SubmissionTestResultConsentGivenFragment>()
+    }
+
+   @Test
+    fun testEventConsentGivenContinueWithSymptomsClicked() {
+
+        val mockNavController = mock(NavController::class.java)
+        val scenario = launchFragmentInContainer<SubmissionTestResultConsentGivenFragment>()
+
+        scenario.onFragment { fragment ->
+            Navigation.setViewNavController(fragment.requireView(), mockNavController)
+        }
+        // Verify that performing a click prompts the correct Navigation action
+        onView(ViewMatchers.withId(R.id.submission_test_result_button_consent_given_continue)).perform(ViewActions.click())
+        verify(mockNavController).navigate(R.id.action_submissionTestResultConsentGivenFragment_to_submissionSymptomIntroductionFragment)
+    }
+
+}
+
+@Module
+abstract class SubmissionTestResultConsentGivenTestModule {
+    @ContributesAndroidInjector
+    abstract fun submissionTestResultScreen(): SubmissionTestResultConsentGivenViewModel
+}
diff --git a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
index e50180f6ccf93867a659830bf1b655a25e592831..0fce202eef347669311b3d540ae1949728ed57f8 100644
--- a/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
+++ b/Corona-Warn-App/src/androidTest/java/testhelpers/FragmentTestModuleRegistrar.kt
@@ -13,12 +13,13 @@ import de.rki.coronawarnapp.ui.submission.SubmissionDispatcherTestModule
 import de.rki.coronawarnapp.ui.submission.SubmissionDoneTestModule
 import de.rki.coronawarnapp.ui.submission.SubmissionIntroTestModule
 import de.rki.coronawarnapp.ui.submission.SubmissionOtherWarningTestModule
-import de.rki.coronawarnapp.ui.submission.SubmissionQRInfoFragmentModule
 import de.rki.coronawarnapp.ui.submission.SubmissionQRScanFragmentModule
 import de.rki.coronawarnapp.ui.submission.SubmissionSymptomCalendarFragmentTestModule
 import de.rki.coronawarnapp.ui.submission.SubmissionSymptomIntroFragmentTestModule
 import de.rki.coronawarnapp.ui.submission.SubmissionTanTestModule
+import de.rki.coronawarnapp.ui.submission.SubmissionTestResultConsentGivenTestModule
 import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestModule
+import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenModule
 
 @Module(
     includes = [
@@ -35,13 +36,13 @@ import de.rki.coronawarnapp.ui.submission.SubmissionTestResultTestModule
         SubmissionDispatcherTestModule::class,
         SubmissionTanTestModule::class,
         SubmissionTestResultTestModule::class,
+        SubmissionTestResultConsentGivenTestModule::class,
         SubmissionOtherWarningTestModule::class,
         SubmissionSymptomIntroFragmentTestModule::class,
         SubmissionSymptomCalendarFragmentTestModule::class,
         SubmissionContactTestModule::class,
         SubmissionDoneTestModule::class,
-        SubmissionQRInfoFragmentModule::class,
-        SubmissionQRScanFragmentModule::class
+        SubmissionQRScanFragmentModule::class,
     ]
 )
 class FragmentTestModuleRegistrar
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..340274ecb9399bb6b7c95d5672dd184d7a42cbff
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenFragment.kt
@@ -0,0 +1,133 @@
+package de.rki.coronawarnapp.ui.submission.testresult
+
+import android.app.AlertDialog
+import android.os.Bundle
+import android.view.View
+import android.view.accessibility.AccessibilityEvent
+import androidx.fragment.app.Fragment
+import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.databinding.FragmentSubmissionTestResultConsentGivenBinding
+import de.rki.coronawarnapp.exception.http.CwaClientError
+import de.rki.coronawarnapp.exception.http.CwaServerError
+import de.rki.coronawarnapp.exception.http.CwaWebException
+import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
+import de.rki.coronawarnapp.util.DialogHelper
+import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withFailure
+import de.rki.coronawarnapp.util.di.AutoInject
+import de.rki.coronawarnapp.util.ui.doNavigate
+import de.rki.coronawarnapp.util.ui.observe2
+import de.rki.coronawarnapp.util.ui.viewBindingLazy
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
+import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
+import javax.inject.Inject
+
+class SubmissionTestResultConsentGivenFragment : Fragment(R.layout.fragment_submission_test_result_consent_given),
+    AutoInject {
+
+    @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory
+    private val viewModel: SubmissionTestResultConsentGivenViewModel by cwaViewModels { viewModelFactory }
+
+    private val binding: FragmentSubmissionTestResultConsentGivenBinding by viewBindingLazy()
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+
+        viewModel.uiState.observe2(this) {
+            binding.uiState = it
+            with(binding) {
+                submissionTestResultSection
+                    .setTestResultSection(uiState?.deviceUiState, uiState?.testResultReceivedDate)
+            }
+            it.deviceUiState.withFailure {
+                if (it is CwaWebException) {
+                    DialogHelper.showDialog(buildErrorDialog(it))
+                }
+            }
+        }
+
+        setButtonOnClickListener()
+
+        viewModel.showCancelDialog.observe2(this) {
+            showCancelDialog()
+        }
+
+        viewModel.routeToScreen.observe2(this) {
+            when (it) {
+                is SubmissionNavigationEvents.NavigateToSymptomIntroduction ->
+                    doNavigate(
+                        SubmissionTestResultConsentGivenFragmentDirections
+                            .actionSubmissionTestResultConsentGivenFragmentToSubmissionSymptomIntroductionFragment()
+                    )
+                is SubmissionNavigationEvents.NavigateToMainActivity ->
+                    doNavigate(
+                        SubmissionTestResultConsentGivenFragmentDirections
+                            .actionSubmissionTestResultConsentGivenFragmentToHomeFragment()
+                    )
+            }
+        }
+    }
+
+    private fun navigateToMainScreen() =
+        doNavigate(
+            SubmissionTestResultConsentGivenFragmentDirections
+                .actionSubmissionTestResultConsentGivenFragmentToHomeFragment()
+        )
+
+    private fun buildErrorDialog(exception: CwaWebException): DialogHelper.DialogInstance {
+        return when (exception) {
+            is CwaClientError, is CwaServerError -> DialogHelper.DialogInstance(
+                requireActivity(),
+                R.string.submission_error_dialog_web_generic_error_title,
+                getString(
+                    R.string.submission_error_dialog_web_generic_network_error_body,
+                    exception.statusCode
+                ),
+                R.string.submission_error_dialog_web_generic_error_button_positive,
+                null,
+                true,
+                ::navigateToMainScreen
+            )
+            else -> DialogHelper.DialogInstance(
+                requireActivity(),
+                R.string.submission_error_dialog_web_generic_error_title,
+                R.string.submission_error_dialog_web_generic_error_body,
+                R.string.submission_error_dialog_web_generic_error_button_positive,
+                null,
+                true,
+                ::navigateToMainScreen
+            )
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        binding.submissionTestResultContainer.sendAccessibilityEvent(AccessibilityEvent.TYPE_ANNOUNCEMENT)
+    }
+
+    private fun setButtonOnClickListener() {
+        binding.submissionTestResultButtonConsentGivenContinue.setOnClickListener {
+            viewModel.onContinuePressed()
+        }
+
+        binding.submissionTestResultButtonConsentGivenContinueWithoutSymptoms.setOnClickListener {
+            viewModel.onShowCancelDialog()
+        }
+
+        binding.submissionTestResultConsentGivenHeader.headerButtonBack.buttonIcon.setOnClickListener {
+            viewModel.onShowCancelDialog()
+        }
+    }
+
+    private fun showCancelDialog() {
+        AlertDialog.Builder(requireContext()).apply {
+            setTitle(R.string.submission_error_dialog_confirm_cancellation_title)
+            setMessage(R.string.submission_error_dialog_confirm_cancellation_body)
+            setPositiveButton(R.string.submission_error_dialog_confirm_cancellation_button_positive) { _, _ ->
+                viewModel.cancelTestSubmission()
+            }
+            setNegativeButton(R.string.submission_error_dialog_confirm_cancellation_button_negative) { _, _ ->
+                // NOOP
+            }
+        }.show()
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenModule.kt
new file mode 100644
index 0000000000000000000000000000000000000000..da01d964c0ea6c9a1e6b852d164c2e8dcb851ed5
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenModule.kt
@@ -0,0 +1,18 @@
+package de.rki.coronawarnapp.ui.submission.testresult
+
+import dagger.Binds
+import dagger.Module
+import dagger.multibindings.IntoMap
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModelKey
+
+@Module
+abstract class SubmissionTestResultConsentGivenModule {
+    @Binds
+    @IntoMap
+    @CWAViewModelKey(SubmissionTestResultConsentGivenViewModel::class)
+    abstract fun submissionTestResultConsentGivenFragment(
+        factory: SubmissionTestResultConsentGivenViewModel.Factory
+    ): CWAViewModelFactory<out CWAViewModel>
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..17013ae991af3588be656b4018911dd43a58285e
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModel.kt
@@ -0,0 +1,69 @@
+package de.rki.coronawarnapp.ui.submission.testresult
+
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.asLiveData
+import com.squareup.inject.assisted.AssistedInject
+import de.rki.coronawarnapp.storage.SubmissionRepository
+import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
+import de.rki.coronawarnapp.util.DeviceUIState
+import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess
+import de.rki.coronawarnapp.util.ui.SingleLiveEvent
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
+import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.combineTransform
+import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.sync.withLock
+import timber.log.Timber
+
+class SubmissionTestResultConsentGivenViewModel @AssistedInject constructor(
+    private val submissionRepository: SubmissionRepository
+) : CWAViewModel() {
+
+    private val showRedeemedTokenWarning = SingleLiveEvent<Unit>()
+    private var wasRedeemedTokenErrorShown = false
+    private val tokenErrorMutex = Mutex()
+
+    val uiState: LiveData<TestResultUIState> = combineTransform(
+        submissionRepository.deviceUIStateFlow,
+        submissionRepository.testResultReceivedDateFlow
+    ) { deviceUiState, resultDate ->
+
+        tokenErrorMutex.withLock {
+            if (!wasRedeemedTokenErrorShown) {
+                deviceUiState.withSuccess {
+                    if (it == DeviceUIState.PAIRED_REDEEMED) {
+                        wasRedeemedTokenErrorShown = true
+                        showRedeemedTokenWarning.postValue(Unit)
+                    }
+                }
+            }
+        }
+
+        TestResultUIState(
+            deviceUiState = deviceUiState,
+            testResultReceivedDate = resultDate
+        ).let { emit(it) }
+    }.asLiveData(context = Dispatchers.Default)
+
+    val routeToScreen: SingleLiveEvent<SubmissionNavigationEvents> = SingleLiveEvent()
+
+    val showCancelDialog = SingleLiveEvent<Unit>()
+
+    fun onContinuePressed() {
+        Timber.d("Beginning symptom flow")
+        routeToScreen.postValue(SubmissionNavigationEvents.NavigateToSymptomIntroduction)
+    }
+
+    fun onShowCancelDialog() {
+        showCancelDialog.postValue(Unit)
+    }
+
+    fun cancelTestSubmission() {
+        Timber.d("Submission was cancelled.")
+        routeToScreen.postValue(SubmissionNavigationEvents.NavigateToMainActivity)
+    }
+
+    @AssistedInject.Factory
+    interface Factory : SimpleCWAViewModelFactory<SubmissionTestResultConsentGivenViewModel>
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt
index 7f84c13b03b80093910b1d6bf50a9364696aa39a..7aa2716938965569330dd8f33f38e051a01cae1e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultFragment.kt
@@ -76,6 +76,10 @@ class SubmissionTestResultFragment : Fragment(R.layout.fragment_submission_test_
 
         viewModel.uiState.observe2(this) {
             binding.uiState = it
+            with(binding) {
+                submissionTestResultContent.submissionTestResultSection
+                        .setTestResultSection(uiState?.deviceUiState, uiState?.testResultReceivedDate)
+            }
             it.deviceUiState.withFailure {
                 if (it is CwaWebException) {
                     DialogHelper.showDialog(buildErrorDialog(it))
@@ -147,7 +151,7 @@ class SubmissionTestResultFragment : Fragment(R.layout.fragment_submission_test_
     private fun setButtonOnClickListener() {
         binding.submissionTestResultButtonPendingRefresh.setOnClickListener {
             viewModel.refreshDeviceUIState()
-            binding.submissionTestResultContent.submissionTestResultCard.testResultCard
+            binding.submissionTestResultContent.submissionTestResultSection
                 .sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
         }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt
index 667755dd48337165a64ecef61d7b6bcc668b5e56..7473b283054fc66bfa14faba6180813f95d4d946 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/viewmodel/SubmissionFragmentModule.kt
@@ -16,6 +16,8 @@ import de.rki.coronawarnapp.ui.submission.symptoms.introduction.SubmissionSympto
 import de.rki.coronawarnapp.ui.submission.symptoms.introduction.SubmissionSymptomIntroductionModule
 import de.rki.coronawarnapp.ui.submission.tan.SubmissionTanFragment
 import de.rki.coronawarnapp.ui.submission.tan.SubmissionTanModule
+import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenFragment
+import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenModule
 import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultFragment
 import de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultModule
 import de.rki.coronawarnapp.ui.submission.warnothers.SubmissionResultPositiveOtherWarningFragment
@@ -62,4 +64,7 @@ internal abstract class SubmissionFragmentModule {
 
     @ContributesAndroidInjector(modules = [SubmissionConsentModule::class])
     abstract fun submissionConsentScreen(): SubmissionConsentFragment
+
+    @ContributesAndroidInjector(modules = [SubmissionTestResultConsentGivenModule::class])
+    abstract fun submissionTestResultConsentGivenScreen(): SubmissionTestResultConsentGivenFragment
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0a84f8e0bd59961c871258307db6645fbc1e50aa
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt
@@ -0,0 +1,89 @@
+package de.rki.coronawarnapp.ui.view
+
+import android.content.Context
+import android.graphics.drawable.Drawable
+import android.text.Spannable
+import android.text.SpannableString
+import android.util.AttributeSet
+import androidx.appcompat.content.res.AppCompatResources.getDrawable
+import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.content.withStyledAttributes
+import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.util.DeviceUIState
+import de.rki.coronawarnapp.util.NetworkRequestWrapper
+import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toUIFormat
+import de.rki.coronawarnapp.util.formatter.formatTestResult
+import kotlinx.android.synthetic.main.view_test_result_section.view.*
+import java.util.Date
+
+/**
+ * The [TestResultSectionView] Displays the appropriate test result.
+ */
+class TestResultSectionView @JvmOverloads
+constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0
+) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+    init {
+        inflate(context, R.layout.view_test_result_section, this)
+        context.withStyledAttributes(attrs, R.styleable.TestResultSection) {
+            test_result_section_headline.text =
+                getText(R.styleable.TestResultSection_test_result_section_headline)
+            test_result_section_content.text =
+                getText(R.styleable.TestResultSection_test_result_section_content)
+            test_result_section_registered_at_text.text =
+                getText(R.styleable.TestResultSection_test_result_section_registered_at_text)
+            val resultIconId = getResourceId(R.styleable.TestResultSection_test_result_section_status_icon, 0)
+            if (resultIconId != 0) {
+                val drawable = getDrawable(context, resultIconId)
+                test_result_section_status_icon.setImageDrawable(drawable)
+            }
+        }
+    }
+
+    fun setTestResultSection(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?, registeredAt: Date?) {
+        test_result_section_registered_at_text.text = formatTestResultRegisteredAtText(registeredAt)
+        val testResultIcon = formatTestStatusIcon(uiState)
+        test_result_section_status_icon.setImageDrawable(testResultIcon)
+        test_result_section_content.text = formatTestResultSectionContent(uiState)
+    }
+
+    private fun formatTestStatusIcon(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Drawable? {
+        return uiState.withSuccess(R.drawable.ic_test_result_illustration_invalid) {
+            when (it) {
+                DeviceUIState.PAIRED_NO_RESULT -> R.drawable.ic_test_result_illustration_pending
+                DeviceUIState.PAIRED_POSITIVE_TELETAN,
+                DeviceUIState.PAIRED_POSITIVE -> R.drawable.ic_test_result_illustration_positive
+                DeviceUIState.PAIRED_NEGATIVE -> R.drawable.ic_test_result_illustration_negative
+                DeviceUIState.PAIRED_ERROR,
+                DeviceUIState.PAIRED_REDEEMED -> R.drawable.ic_test_result_illustration_invalid
+                else -> R.drawable.ic_test_result_illustration_invalid
+            }
+        }.let { context.getDrawable(it) }
+    }
+
+    private fun formatTestResultRegisteredAtText(registeredAt: Date?): String {
+        return context.getString(R.string.test_result_card_registered_at_text)
+            .format(registeredAt?.toUIFormat(context))
+    }
+
+    private fun formatTestResultSectionContent(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Spannable {
+        return uiState.withSuccess(SpannableString("")) {
+            when (it) {
+                DeviceUIState.PAIRED_NO_RESULT ->
+                    SpannableString(context.getString(R.string.test_result_card_status_pending))
+                DeviceUIState.PAIRED_ERROR,
+                DeviceUIState.PAIRED_REDEEMED ->
+                    SpannableString(context.getString(R.string.test_result_card_status_invalid))
+
+                DeviceUIState.PAIRED_POSITIVE,
+                DeviceUIState.PAIRED_POSITIVE_TELETAN,
+                DeviceUIState.PAIRED_NEGATIVE -> formatTestResult(uiState)
+                else -> SpannableString("")
+            }
+        }
+    }
+}
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ef59dcf819b7e3fe1a26d4f6287281cea6ddf40
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_consent_given.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" />
+
+        <variable
+            name="uiState"
+            type="de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/submission_test_result_container"
+        android:contentDescription="@string/submission_test_result_headline"
+        android:accessibilityLiveRegion="assertive"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <include
+            android:id="@+id/submission_test_result_consent_given_header"
+            layout="@layout/include_header"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            app:icon="@{@drawable/ic_close}"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            app:title="@{@string/submission_test_result_consent_given_heading}" />
+
+        <ScrollView
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="@dimen/match_constraint"
+            app:layout_constraintEnd_toEndOf="@+id/guideline_end"
+            app:layout_constraintStart_toStartOf="@+id/guideline_start"
+            android:fillViewport="true"
+            app:layout_constraintTop_toBottomOf="@+id/submission_test_result_consent_given_header"
+            app:layout_constraintBottom_toTopOf="@+id/include_submission_test_result_consent_given_buttons"
+            app:layout_constraintVertical_bias="1.0">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:focusable="true">
+
+                <de.rki.coronawarnapp.ui.view.TestResultSectionView
+                    android:id="@+id/submission_test_result_section"
+                    android:layout_width="@dimen/match_constraint"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/spacing_small"
+                    android:focusable="true"
+                    android:importantForAccessibility="yes"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <TextView
+                    android:id="@+id/submission_test_result_consent_given_subtitle"
+                    style="@style/headline6"
+                    android:layout_width="@dimen/match_constraint"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/spacing_medium"
+                    android:accessibilityHeading="true"
+                    android:text="@string/submission_test_result_consent_given_subtitle"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/submission_test_result_section" />
+
+                <TextView
+                    android:id="@+id/submission_test_result_consent_given_body"
+                    style="@style/body1"
+                    android:layout_width="@dimen/match_constraint"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/spacing_medium"
+                    android:accessibilityHeading="true"
+                    android:text="@string/submission_test_result_consent_given_body"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/submission_test_result_consent_given_subtitle" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </ScrollView>
+
+        <androidx.constraintlayout.widget.Barrier
+            android:id="@+id/include_submission_test_result_consent_given_buttons"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            app:barrierAllowsGoneWidgets="false"
+            app:barrierDirection="top"
+            app:constraint_referenced_ids="submission_test_result_button_consent_given_continue" />
+
+        <Button
+            android:id="@+id/submission_test_result_button_consent_given_continue"
+            style="@style/buttonPrimary"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:text="@string/submission_test_result_positive_continue_button_with_symptoms"
+            app:layout_constraintBottom_toTopOf="@+id/submission_test_result_button__consent_given_continue_without_symptoms"
+            app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+            app:layout_constraintStart_toStartOf="@id/guideline_start"
+            app:layout_constraintTop_toBottomOf="@+id/guideline_action_large" />
+
+        <Button
+            android:id="@+id/submission_test_result_button_consent_given_continue_without_symptoms"
+            style="@style/buttonPrimary"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:text="@string/submission_test_result_consent_given_breakup_button"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+            app:layout_constraintStart_toStartOf="@id/guideline_start"
+            app:layout_constraintTop_toBottomOf="@+id/submission_test_result_button_consent_given_continue" />
+
+        <include layout="@layout/merge_guidelines_side" />
+
+        <androidx.constraintlayout.widget.Guideline
+            android:id="@+id/guideline_action_large"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            app:layout_constraintGuide_end="@dimen/guideline_action_large" />
+
+        <androidx.constraintlayout.widget.Guideline
+            android:id="@+id/guideline_action"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            app:layout_constraintGuide_end="@dimen/guideline_action" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_consent_body.xml b/Corona-Warn-App/src/main/res/layout/include_submission_consent_body.xml
index 2531e8dc114346c9b70f5a4645f29ad03b37f8e9..614f2551624d31249258d6721de3bd784e9e31e7 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_consent_body.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_consent_body.xml
@@ -15,7 +15,7 @@
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="@id/submission_consent_your_consent_subsection_headline"
-        app:layout_constraintBottom_toBottomOf="@id/submission_consent_main_fourth_point"
+        app:layout_constraintBottom_toBottomOf="@id/submission_consent_your_consent_subsection_third_point"
         style="@style/cardGrey"/>
 
     <TextView
@@ -101,6 +101,7 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="@dimen/bullet_point_size"
         android:paddingStart="@dimen/spacing_normal"
+        android:paddingBottom="@dimen/spacing_normal"
         app:layout_constraintEnd_toEndOf="@id/guideline_end"
         app:layout_constraintStart_toStartOf="@id/guideline_start"
         app:layout_constraintTop_toBottomOf="@id/submission_consent_your_consent_subsection_second_point"
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml b/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml
index a564e5c9632c893c096db4b4829bc72603ab5550..8089131c01cb6182307d3e144b576bedcfa8afd3 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_test_result.xml
@@ -3,9 +3,7 @@
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <data>
-
         <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" />
-
         <variable
             name="uiState"
             type="de.rki.coronawarnapp.ui.submission.testresult.TestResultUIState" />
@@ -20,19 +18,17 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
 
-            <include
-                android:id="@+id/submission_test_result_card"
-                layout="@layout/include_test_result_card"
+            <de.rki.coronawarnapp.ui.view.TestResultSectionView
+                android:id="@+id/submission_test_result_section"
                 android:layout_width="@dimen/match_constraint"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_small"
                 android:focusable="true"
                 android:importantForAccessibility="yes"
-                app:deviceUIState="@{uiState.deviceUiState}"
+                app:test_result_section_headline="@string/test_result_card_headline"
                 app:layout_constraintEnd_toEndOf="@+id/guideline_card_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
-                app:layout_constraintTop_toTopOf="parent"
-                app:registerDate="@{uiState.testResultReceivedDate}" />
+                app:layout_constraintTop_toTopOf="parent"/>
 
             <TextView
                 android:id="@+id/submission_test_result_subtitle"
@@ -44,7 +40,7 @@
                 android:text="@string/submission_test_result_subtitle"
                 app:layout_constraintEnd_toEndOf="@+id/guideline_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/submission_test_result_card" />
+                app:layout_constraintTop_toBottomOf="@+id/submission_test_result_section" />
 
             <include
                 android:id="@+id/submission_test_result_pending_steps"
diff --git a/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml b/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml
index 01364c7898c6942746da48f840b496513e186caf..a55bff2725d226ff13def243c9238e5718276169 100644
--- a/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml
@@ -4,9 +4,7 @@
     xmlns:tools="http://schemas.android.com/tools">
 
     <data>
-
         <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" />
-
         <variable
             name="registerDate"
             type="java.util.Date" />
diff --git a/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml b/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml
new file mode 100644
index 0000000000000000000000000000000000000000..946edfe5923246f02a31e235f5c7831296bd108c
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/view_test_result_section.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/test_result_card"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:background="@drawable/card_dark"
+        android:focusable="true"
+        android:padding="@dimen/card_padding">
+
+        <TextView
+            android:id="@+id/test_result_section_headline"
+            style="@style/body2"
+            android:accessibilityHeading="true"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="@dimen/spacing_small"
+            app:layout_constraintEnd_toStartOf="@id/test_result_section_status_icon"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:text="Ihr Befund"/>
+
+        <TextView
+            android:id="@+id/test_result_section_content"
+            style="@style/headline5"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="@dimen/spacing_small"
+            android:layout_marginBottom="@dimen/spacing_normal"
+            app:layout_constraintBottom_toTopOf="@id/test_result_section_registered_at_text"
+            app:layout_constraintEnd_toStartOf="@id/test_result_section_status_icon"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@id/test_result_section_headline"
+            tools:text="SARS-CoV-2 Negativ" />
+
+        <ImageView
+            android:id="@+id/test_result_section_status_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:importantForAccessibility="no"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintTop_toTopOf="parent"
+            tools:src="@drawable/ic_test_result_illustration_negative" />
+
+        <TextView
+            android:id="@+id/test_result_section_registered_at_text"
+            style="@style/body2"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/spacing_normal"
+            android:layout_marginEnd="@dimen/spacing_small"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toStartOf="@id/test_result_section_status_icon"
+            app:layout_constraintStart_toStartOf="parent"
+            tools:text="@string/test_result_card_registered_at_text" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</merge>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml
index 6504b4320f74afcef0cf088db168861b14f5d35d..79905c44a608b0849ac5530887c3426bec918c0b 100644
--- a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml
+++ b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml
@@ -395,4 +395,16 @@
             app:destination="@id/informationPrivacyFragment" />
     </fragment>
 
+    <fragment
+        android:id="@+id/submissionTestResultConsentGivenFragment"
+        android:name="de.rki.coronawarnapp.ui.submission.testresult.SubmissionTestResultConsentGivenFragment"
+        android:label="SubmissionTestResultConsentFragment" >
+        <action
+            android:id="@+id/action_submissionTestResultConsentGivenFragment_to_homeFragment"
+            app:popUpTo="@id/mainFragment"
+            app:popUpToInclusive="false"/>
+        <action
+            android:id="@+id/action_submissionTestResultConsentGivenFragment_to_submissionSymptomIntroductionFragment"
+            app:destination="@id/submissionSymptomIntroductionFragment" />
+    </fragment>
 </navigation>
diff --git a/Corona-Warn-App/src/main/res/values-de/legal_strings.xml b/Corona-Warn-App/src/main/res/values-de/legal_strings.xml
index 02e0a21c7223a9c03c7f3b85d90373e607159e40..35cc3a54d3bfbd95207e9d8eb479899cea23bbee 100644
--- a/Corona-Warn-App/src/main/res/values-de/legal_strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/legal_strings.xml
@@ -22,14 +22,6 @@
     <string name="submission_consent_your_consent_subsection_second_point">"<b>Wenn Sie positiv auf Corona getestet wurden, teilt die App Ihr Testergebnis, um Nutzer, denen Sie begegnet sind, zu warnen. Dies betrifft Nutzer von offiziellen Corona-Apps der oben genannten Länder. Wenn Sie zusätzlich Angaben zum Beginn Ihrer Symptome machen, werden auch diese geteilt.</b>"</string>
     <!-- YTXT: Body for consent sub section your consent subtext third point  -->
     <string name="submission_consent_your_consent_subsection_third_point">"Sie können Ihr Einverständnis jederzeit zurücknehmen. Die Einstellung hierfür finden Sie unter „Test anzeigen“. Vor dem Teilen werden Sie nochmal auf Ihr Einverständnis hingewiesen und um Freigabe Ihres Testergebnisses gebeten."</string>
-    <!-- YTXT: Body for consent main section first point  -->
-    <string name="submission_consent_main_first_point">"Ihr Einverständnis ist freiwillig."</string>
-    <!-- YTXT: Body for consent main section second point  -->
-    <string name="submission_consent_main_second_point">"Sie können Ihr Testergebnis auch abrufen, wenn Sie dies nicht teilen. Wenn Sie ihr Testergebnis teilen, helfen Sie jedoch mit, Ihre Mitmenschen vor Ansteckungen zu schützen."</string>
-    <!-- YTXT: Body for consent main section third point  -->
-    <string name="submission_consent_main_third_point">"Ihre Identität bleibt geheim. Andere Nutzer erfahren nicht, wer sein Testergebnis geteilt hat."</string>
-    <!-- YTXT: Body for consent main section fourth point  -->
-    <string name="submission_consent_main_fourth_point">"Sie können Ihr Einverständnis abgeben, wenn Sie mindestens 16 Jahre alt sind."</string>
     <!-- YTXT: Body for your consent screen agreement share test results -->
     <string name="submission_your_consent_agreement_share_test_results">"<b>Wenn Sie positiv auf Corona getestet wurden, teilt die App Ihr Testergebnis, um Nutzer zu warnen, denen Sie begegnet sind.</b>\n\n<b>Die Warnung erreicht Nutzer von offiziellen Corona-Apps der folgenden teilnehmenden Länder:</b>"</string>
     <!-- YTXT: Body for your consent screen agreement share symptoms -->
diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml
index 3df815452531e193db77cd23fa939caceaec3e62..b9b156ba817e2a87ba22428f273226805a0d29b8 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -845,6 +845,14 @@
     <string name="submission_consent_help_by_warning_others_body">"Wenn Sie positiv auf Corona getestet wurden, können Sie Ihre Mitmenschen über die App warnen. Die Warnung funktioniert in mehreren Ländern. Derzeit nehmen folgende Länder teil:"</string>
     <!-- YTXT: Page bottom text for consent screen -->
     <string name="submission_consent_main_bottom_body">"Ausführliche Informationen zur Datenverarbeitung und Ihrem Einverständnis"</string>
+    <!-- YTXT: Body for consent main section first point  -->
+    <string name="submission_consent_main_first_point">"Ihr Einverständnis ist freiwillig."</string>
+    <!-- YTXT: Body for consent main section second point  -->
+    <string name="submission_consent_main_second_point">"Sie können Ihr Testergebnis auch abrufen, wenn Sie dies nicht teilen. Wenn Sie ihr Testergebnis teilen, helfen Sie jedoch mit, Ihre Mitmenschen vor Ansteckungen zu schützen."</string>
+    <!-- YTXT: Body for consent main section third point  -->
+    <string name="submission_consent_main_third_point">"Ihre Identität bleibt geheim. Andere Nutzer erfahren nicht, wer sein Testergebnis geteilt hat."</string>
+    <!-- YTXT: Body for consent main section fourth point  -->
+    <string name="submission_consent_main_fourth_point">"Sie können Ihr Einverständnis abgeben, wenn Sie mindestens 16 Jahre alt sind."</string>
 
     <!-- Submission Test Result -->
     <!-- XHED: Page headline for test result  -->
@@ -903,6 +911,16 @@
     <string name="submission_test_result_card_positive_title">"SARS-CoV-2 positiv"</string>
     <!-- YTXT: Body text for test result card positive -->
     <string name="submission_test_result_card_positive_body">"Das Virus SARS-CoV-2 wurde bei Ihnen nachgewiesen."</string>
+    <!-- XHED: Page headline for test result with consent given  -->
+    <string name="submission_test_result_consent_given_heading">"Ihr Testergebnis"</string>
+    <!-- XHED: Subtitle text for test result card with consent given -->
+    <string name="submission_test_result_consent_given_subtitle">"Vielen Dank, dass Sie mithelfen, die Verbreitung von Corona zu bekämpfen."</string>
+    <!-- YTXT: body text for test result card with consent given -->
+    <string name="submission_test_result_consent_given_body">"<b>Ihre Mitmenschen werden jetzt gewarnt.</b> <br/><br/>Bitte helfen Sie nun, die Genauigkeit der Warnungen zu verbessern. Geben Sie hierfür im nächsten Schritt an, wann Sie erstmals Symptome hatten. Sie können diesen Schritt jederzeit abbrechen."</string>
+    <!-- XBUT: button text for the 'break up' button option on test result consent given page -->
+    <string name="submission_test_result_consent_given_breakup_button">"Beenden"</string>
+
+
 
     <!-- Submission Tan -->
     <!-- XHED: Page title for TAN submission pge -->
@@ -978,6 +996,18 @@
     <!-- XHED: Title for the interop country list-->
     <string name="submission_interoperability_list_title">"Folgende Länder nehmen derzeit an der länderübergreifenden Risiko-Ermittlung teil:"</string>
 
+    <!-- Test result positive and no consent given -->
+    <!-- XHED: Title for test result positive and no consent given-->
+    <string name="submission_test_result_positive_no_consent_subtitle">Bitte helfen Sie mit!</string>
+    <!-- XTXT: First bullet point when test result is positive and consent is requested for key sharing-->
+    <string name="submission_test_result_positive_no_consent_text_1"><b>Helfen Sie mit, Ihre Mitmenschen vor Ansteckungen zu schützen und teilen Sie Ihr Testergebnis.</b></string>
+    <!-- XTXT: Second bullet point when test result is positive and consent is requested for key sharing-->
+    <string name="submission_test_result_positive_no_consent_text_2">Ihre Identität bleibt dabei geheim. Andere Nutzer erfahren nicht, wer das Testergebnis geteilt hat.</string>
+    <!-- XTXT: Third bullet point when test result is positive and consent is requested for key sharing-->
+    <string name="submission_test_result_positive_no_consent_text_3">Bitte beachten Sie unbedingt die Hinweise des zuständigen Gesundheitsamtes und bleiben Sie zuhause, um andere Personen nicht anzustecken.</string>
+    <!-- XBUT: Button for giving consent for key sharing -->
+    <string name="submission_test_result_positive_no_consent_button_warn_others">Andere warnen</string>
+
     <!-- Submission Country Selector -->
     <!-- XHED: Page title for the submission country selection page -->
     <string name="submission_positive_country_selection_title">"Europaweit warnen"</string>
@@ -1098,9 +1128,9 @@
     <!-- XHED: Page title for the various submission status: unregistered -->
     <string name="submission_status_card_title_unregistered">"Wurden Sie getestet?"</string>
     <!-- XHED: Page title for the various submission status: pending -->
-    <string name="submission_status_card_title_pending">"Ergebnis liegt noch nicht vor"</string>
+    <string name="submission_status_card_title_pending">"Testergebnis liegt noch nicht vor"</string>
     <!-- XHED: Page title for the various submission status: available -->
-    <string name="submission_status_card_title_available">"Ihr Ergebnis liegt vor"</string>
+    <string name="submission_status_card_title_available">"Ihr Testergebnis liegt vor"</string>
     <!-- XHED: Page title for the various submission status: positive -->
     <string name="submission_status_card_title_positive">"Befund positiv"</string>
     <!-- XHED: Page title for the various submission status fetch failed -->
diff --git a/Corona-Warn-App/src/main/res/values-tr/legal_strings.xml b/Corona-Warn-App/src/main/res/values-tr/legal_strings.xml
index 6b044f685f5c72047460ac9ee7b07d4337877962..e55d14e7c9165e3a0073ff427386e6c7e5ceb4cb 100644
--- a/Corona-Warn-App/src/main/res/values-tr/legal_strings.xml
+++ b/Corona-Warn-App/src/main/res/values-tr/legal_strings.xml
@@ -22,12 +22,4 @@
     <string name="submission_consent_your_consent_subsection_second_point"></string>
     <!-- YTXT: Body for consent sub section your consent subtext third point  -->
     <string name="submission_consent_your_consent_subsection_third_point"></string>
-    <!-- YTXT: Body for consent main section first point  -->
-    <string name="submission_consent_main_first_point"></string>
-    <!-- YTXT: Body for consent main section second point  -->
-    <string name="submission_consent_main_second_point"></string>
-    <!-- YTXT: Body for consent main section third point  -->
-    <string name="submission_consent_main_third_point"></string>
-    <!-- YTXT: Body for consent main section fourth point  -->
-    <string name="submission_consent_main_fourth_point"></string>
 </resources>
diff --git a/Corona-Warn-App/src/main/res/values/attrs.xml b/Corona-Warn-App/src/main/res/values/attrs.xml
index b7e4364179abe0e2572a1b164430e7011644c3b8..02f64f4b6df4ba6192a85f936900df20a1d6ce7a 100644
--- a/Corona-Warn-App/src/main/res/values/attrs.xml
+++ b/Corona-Warn-App/src/main/res/values/attrs.xml
@@ -12,13 +12,17 @@
         <attr name="step_entry_icon" format="integer" />
         <attr name="step_entry_final" format="boolean" />
     </declare-styleable>
-
     <declare-styleable name="SimpleStepEntry">
         <attr name="simple_step_entry_title" format="string" />
         <attr name="simple_step_entry_text" format="string" />
     </declare-styleable>
-
     <declare-styleable name="BulletPointList">
         <attr name="entries" format="reference" />
     </declare-styleable>
+    <declare-styleable name="TestResultSection">
+        <attr name="test_result_section_headline" format="string" />
+        <attr name="test_result_section_content" format="string" />
+        <attr name="test_result_section_status_icon" format="reference" />
+        <attr name="test_result_section_registered_at_text" format="string" />
+    </declare-styleable>
 </resources>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/values/legal_strings.xml b/Corona-Warn-App/src/main/res/values/legal_strings.xml
index 3e80f3942ecbe85ffc6006018b2b80d2f8a663ec..442caf74f7afe63260437ddf3f25b7794ab8cd88 100644
--- a/Corona-Warn-App/src/main/res/values/legal_strings.xml
+++ b/Corona-Warn-App/src/main/res/values/legal_strings.xml
@@ -23,14 +23,6 @@
     <string name="submission_consent_your_consent_subsection_second_point" translatable="false"></string>
     <!-- YTXT: Body for consent sub section your consent subtext third point  -->
     <string name="submission_consent_your_consent_subsection_third_point" translatable="false"></string>
-    <!-- YTXT: Body for consent main section first point  -->
-    <string name="submission_consent_main_first_point" translatable="false"></string>
-    <!-- YTXT: Body for consent main section second point  -->
-    <string name="submission_consent_main_second_point" translatable="false"></string>
-    <!-- YTXT: Body for consent main section third point  -->
-    <string name="submission_consent_main_third_point" translatable="false"></string>
-    <!-- YTXT: Body for consent main section fourth point  -->
-    <string name="submission_consent_main_fourth_point" translatable="false"></string>
     <!-- YTXT: Your consent screen agreement share test results -->
     <string name="submission_your_consent_agreement_share_test_results" translatable="false">""</string>
     <!-- YTXT: Your consent screen agreement share symptoms -->
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index 5080e0ad08571819f0077898676ba7acd9fc12d4..77f5d6e104b9cc1499bb34f56e3d121ef8e0d273 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -849,6 +849,14 @@
     <string name="submission_consent_help_by_warning_others_body"></string>
     <!-- YTXT: Page bottom text for consent screen -->
     <string name="submission_consent_main_bottom_body"></string>
+    <!-- YTXT: Body for consent main section first point  -->
+    <string name="submission_consent_main_first_point"></string>
+    <!-- YTXT: Body for consent main section second point  -->
+    <string name="submission_consent_main_second_point"></string>
+    <!-- YTXT: Body for consent main section third point  -->
+    <string name="submission_consent_main_third_point"></string>
+    <!-- YTXT: Body for consent main section fourth point  -->
+    <string name="submission_consent_main_fourth_point"></string>
 
     <!-- Submission Test Result -->
     <!-- XHED: Page headline for test result  -->
@@ -907,6 +915,15 @@
     <string name="submission_test_result_card_positive_title">"SARS-CoV-2 positive"</string>
     <!-- YTXT: Body text for test result card positive -->
     <string name="submission_test_result_card_positive_body">"You have been diagnosed with the SARS-CoV-2 virus."</string>
+    <!-- XHED: Page headline for test result with consent given  -->
+    <string name="submission_test_result_consent_given_heading">""</string>
+    <!-- YTXT: Subtitle text for test result card with consent given -->
+    <string name="submission_test_result_consent_given_subtitle">""</string>
+    <!-- YTXT: body text for test result card with consent given -->
+    <string name="submission_test_result_consent_given_body">""</string>
+    <!-- XBUT: button text for the 'break up' button option on test result consent given page -->
+    <string name="submission_test_result_consent_given_breakup_button">""</string>
+
 
     <!-- Submission Tan -->
     <!-- XHED: Page title for TAN submission pge -->
@@ -981,6 +998,18 @@
     <!-- XHED: Title for the interop country list-->
     <string name="submission_interoperability_list_title">"The following countries currently participate in transnational exposure logging:"</string>
 
+    <!-- Test result positive and no consent given -->
+    <!-- XHED: Title for test result positive and no consent given-->
+    <string name="submission_test_result_positive_no_consent_subtitle"></string>
+    <!-- XTXT: First bullet point when test result is positive and consent is requested for key sharing-->
+    <string name="submission_test_result_positive_no_consent_text_1"></string>
+    <!-- XTXT: Second bullet point when test result is positive and consent is requested for key sharing-->
+    <string name="submission_test_result_positive_no_consent_text_2"></string>
+    <!-- XTXT: Third bullet point when test result is positive and consent is requested for key sharing-->
+    <string name="submission_test_result_positive_no_consent_text_3"></string>
+    <!-- XBUT: Button for giving consent for key sharing -->
+    <string name="submission_test_result_positive_no_consent_button_warn_others"></string>
+
     <!-- Submission Country Selector -->
     <!-- XHED: Page title for the submission country selection page -->
     <string name="submission_positive_country_selection_title"></string>
@@ -1426,5 +1455,4 @@
     <!-- XBUT: Title for the interoperability onboarding Settings-Button if no network is available -->
     <string name="interoperability_onboarding_list_button_title_no_network">"Open Device Settings"</string>
 
-
 </resources>
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..13b2daaca059c2fc35e2c52104e971f9ad1025be
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/submission/testresult/SubmissionTestResultConsentGivenViewModelTest.kt
@@ -0,0 +1,41 @@
+package de.rki.coronawarnapp.ui.submission.testresult
+
+import de.rki.coronawarnapp.storage.SubmissionRepository
+import de.rki.coronawarnapp.ui.submission.viewmodel.SubmissionNavigationEvents
+import io.kotest.matchers.shouldBe
+import io.mockk.MockKAnnotations
+import io.mockk.impl.annotations.MockK
+import org.junit.jupiter.api.BeforeEach
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.extension.ExtendWith
+import testhelpers.BaseTest
+import testhelpers.extensions.InstantExecutorExtension
+
+@ExtendWith(InstantExecutorExtension::class)
+class SubmissionTestResultConsentGivenViewModelTest : BaseTest() {
+    @MockK
+    lateinit var submissionRepository: SubmissionRepository
+    lateinit var viewModel: SubmissionTestResultConsentGivenViewModel
+
+    @BeforeEach
+    fun setUp() {
+        MockKAnnotations.init(this, relaxed = true)
+    }
+
+    private fun createViewModel() = SubmissionTestResultConsentGivenViewModel(submissionRepository)
+
+    @Test
+    fun testOnConsentProvideSymptomsButtonClick() {
+        viewModel = createViewModel()
+        viewModel.onContinuePressed()
+        viewModel.routeToScreen.value shouldBe SubmissionNavigationEvents.NavigateToSymptomIntroduction
+
+    }
+
+    @Test
+    fun testOnCancelled() {
+        viewModel = createViewModel()
+        viewModel.cancelTestSubmission()
+        viewModel.routeToScreen.value shouldBe SubmissionNavigationEvents.NavigateToMainActivity
+    }
+}