diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt
index c7d115bc504008facadbaf809f25495c639438a7..4667f7a03bf324bf02aa57aaf3be0001faa85ebd 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/greencertificate/GreenCertificateTestFragment.kt
@@ -8,7 +8,6 @@ import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentTestGreenCertificateBinding
 import de.rki.coronawarnapp.test.menu.ui.TestMenuItem
 import de.rki.coronawarnapp.util.di.AutoInject
-import de.rki.coronawarnapp.util.ui.doNavigate
 import de.rki.coronawarnapp.util.ui.viewBinding
 import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
 import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
@@ -23,15 +22,6 @@ class GreenCertificateTestFragment : Fragment(R.layout.fragment_test_green_certi
 
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
-
-        binding.apply {
-            detailsScreen.setOnClickListener {
-                doNavigate(
-                    GreenCertificateTestFragmentDirections
-                        .actionGreenCertificateTestFragmentToGreenCertificateDetailsFragment()
-                )
-            }
-        }
     }
 
     companion object {
diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml
index b35ae07c4ee791a7744cd05a5c8b6917343b1e60..5e07771e4d0e334dd912273bcb75e17f9199eaad 100644
--- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml
+++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_green_certificate.xml
@@ -17,11 +17,5 @@
             android:layout_height="wrap_content"
             android:text="Request DCC screen" />
 
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/details_screen"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="Details screen" />
-
     </LinearLayout>
 </androidx.core.widget.NestedScrollView>
diff --git a/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml b/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml
index 0e531f26af962639a18c07bc84e222c19160dc9c..25b660b5b216cbcbcdfca797d2d7f101f3476049 100644
--- a/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml
+++ b/Corona-Warn-App/src/deviceForTesters/res/navigation/test_nav_graph.xml
@@ -194,14 +194,6 @@
         android:name="de.rki.coronawarnapp.test.greencertificate.GreenCertificateTestFragment"
         android:label="GreenCertificateTestFragment"
         tools:layout="@layout/fragment_test_green_certificate" >
-        <action
-            android:id="@+id/action_greenCertificateTestFragment_to_greenCertificateDetailsFragment"
-            app:destination="@id/greenCertificateDetailsFragment" />
     </fragment>
-    <fragment
-        android:id="@+id/greenCertificateDetailsFragment"
-        android:name="de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsFragment"
-        android:label="GreenCertificateDetailsFragment"
-        tools:layout="@layout/fragment_greencertificate_details" />
 
 </navigation>
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/CovidCertificateUIModule.kt
similarity index 71%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/CovidCertificateUIModule.kt
index 62cacdaf517d4f183508f95368ab68c367e92937..10506dcec1ff69ad4ec21ec27d734eaadd967b44 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/GreenCertificateUIModule.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/CovidCertificateUIModule.kt
@@ -4,15 +4,15 @@ import dagger.Module
 import dagger.android.ContributesAndroidInjector
 import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragment
 import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragmentModule
-import de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsFragment
-import de.rki.coronawarnapp.greencertificate.ui.certificates.details.GreenCertificateDetailsModule
+import de.rki.coronawarnapp.greencertificate.ui.certificates.details.CovidCertificateDetailsFragment
+import de.rki.coronawarnapp.greencertificate.ui.certificates.details.CovidCertificateDetailsModule
 
 @Module
-abstract class GreenCertificateUIModule {
+abstract class CovidCertificateUIModule {
 
     @ContributesAndroidInjector(modules = [CertificatesFragmentModule::class])
     abstract fun certificatesFragment(): CertificatesFragment
 
-    @ContributesAndroidInjector(modules = [GreenCertificateDetailsModule::class])
-    abstract fun certificateDetailsFragment(): GreenCertificateDetailsFragment
+    @ContributesAndroidInjector(modules = [CovidCertificateDetailsModule::class])
+    abstract fun certificateDetailsFragment(): CovidCertificateDetailsFragment
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragment.kt
index b9be3ef8f0c8da5a2f8bc30338d97b99cff70bd6..7c699297cea3f1e691611bed57d5245e3e18790a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragment.kt
@@ -47,6 +47,12 @@ class CertificatesFragment : Fragment(R.layout.fragment_certificates), AutoInjec
                     findNestedGraph(R.id.vaccination_nav_graph).startDestination = R.id.vaccinationQrCodeScanFragment
                     doNavigate(CertificatesFragmentDirections.actionCertificatesFragmentToVaccinationNavGraph())
                 }
+                is CertificatesFragmentEvents.GoToCovidCertificateDetailScreen -> {
+                    doNavigate(
+                        CertificatesFragmentDirections
+                            .actionCertificatesFragmentToCovidCertificateDetailsFragment(event.identifier)
+                    )
+                }
             }
         }
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragmentEvents.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragmentEvents.kt
index 4682805714cb0ae55fca91abc0b7b34f03bc00d0..dfff785888822adf39098a12d7f3ac5e26e7c8dd 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragmentEvents.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesFragmentEvents.kt
@@ -5,4 +5,6 @@ sealed class CertificatesFragmentEvents {
     data class OpenVaccinationRegistrationGraph(val registrationAcknowledged: Boolean) : CertificatesFragmentEvents()
 
     data class GoToVaccinationList(val personIdentifierCodeSha256: String) : CertificatesFragmentEvents()
+
+    data class GoToCovidCertificateDetailScreen(val identifier: String) : CertificatesFragmentEvents()
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesViewModel.kt
index 096e18dd55507a767f70df5f1eca6ae0026776ec..da600d0cf9a5606e35c405cfe09cac21928b0a99 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/CertificatesViewModel.kt
@@ -106,7 +106,14 @@ class CertificatesViewModel @AssistedInject constructor(
                         testDate = certificate.registeredAt,
                         testPerson =
                         certificate.toTestCertificate(null)?.firstName + " " +
-                            certificate.toTestCertificate(null)?.lastName
+                            certificate.toTestCertificate(null)?.lastName,
+                        onClickAction = {
+                            events.postValue(
+                                CertificatesFragmentEvents.GoToCovidCertificateDetailScreen(
+                                    certificate.identifier
+                                )
+                            )
+                        }
                     )
                 )
             }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateCard.kt
index bcdf4a77eb9c53e5044e0c03baf8ff4726bb35ec..52154f49fac62cad9c93e3873cf02abf0cb5bc6e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateCard.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateCard.kt
@@ -4,9 +4,10 @@ import android.view.ViewGroup
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.CovidTestSuccessCardBinding
 import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesAdapter
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat
 import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer
 import org.joda.time.Instant
-import org.joda.time.format.DateTimeFormat
 
 class CovidTestCertificateCard(parent: ViewGroup) :
     CertificatesAdapter.CertificatesItemVH<CovidTestCertificateCard.Item, CovidTestSuccessCardBinding>(
@@ -23,14 +24,10 @@ class CovidTestCertificateCard(parent: ViewGroup) :
         payloads: List<Any>
     ) -> Unit = { item, _ ->
 
-        val dateTime = item.testDate.toDateTime()
-        val dateFormat = DateTimeFormat.shortDate()
-        val timeFormat = DateTimeFormat.shortTime()
-
         testTime.text = context.getString(
             R.string.test_certificate_time,
-            dateTime.toString(dateFormat),
-            dateTime.toString(timeFormat),
+            item.testDate.toShortDayFormat(),
+            item.testDate.toShortTimeFormat(),
         )
 
         personName.text = item.testPerson
@@ -39,6 +36,7 @@ class CovidTestCertificateCard(parent: ViewGroup) :
     data class Item(
         override val testDate: Instant,
         val testPerson: String,
+        val onClickAction: (Item) -> Unit,
     ) : CovidCertificateTestItem, HasPayloadDiffer {
         override fun diffPayload(old: Any, new: Any): Any? = if (old::class == new::class) new else null
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateErrorCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateErrorCard.kt
index 52f0fbc9c8f8ef3aa2ca475f2b2bb7748b9eece7..63e1e5a5484ed78394243cc4cf5ef2cb56512317 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateErrorCard.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/cards/CovidTestCertificateErrorCard.kt
@@ -4,9 +4,10 @@ import android.view.ViewGroup
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.CovidTestErrorCardBinding
 import de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesAdapter
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat
 import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer
 import org.joda.time.Instant
-import org.joda.time.format.DateTimeFormat
 
 class CovidTestCertificateErrorCard(parent: ViewGroup) :
     CertificatesAdapter.CertificatesItemVH<CovidTestCertificateErrorCard.Item, CovidTestErrorCardBinding>(
@@ -23,14 +24,10 @@ class CovidTestCertificateErrorCard(parent: ViewGroup) :
         payloads: List<Any>
     ) -> Unit = { item, _ ->
 
-        val dateTime = item.testDate.toDateTime()
-        val dateFormat = DateTimeFormat.shortDate()
-        val timeFormat = DateTimeFormat.shortTime()
-
         testTime.text = context.getString(
             R.string.test_certificate_time,
-            dateTime.toString(dateFormat),
-            dateTime.toString(timeFormat),
+            item.testDate.toShortDayFormat(),
+            item.testDate.toShortTimeFormat(),
         )
 
         retryButton.setOnClickListener { item.onClickAction(item) }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..592be573684cb914b3eee2ff5df58f8d3a2ff60b
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsFragment.kt
@@ -0,0 +1,172 @@
+package de.rki.coronawarnapp.greencertificate.ui.certificates.details
+
+import android.graphics.Bitmap
+import android.os.Bundle
+import android.view.View
+import android.widget.LinearLayout
+import androidx.coordinatorlayout.widget.CoordinatorLayout
+import androidx.fragment.app.Fragment
+import androidx.navigation.fragment.FragmentNavigatorExtras
+import androidx.navigation.fragment.findNavController
+import androidx.navigation.fragment.navArgs
+import com.google.android.material.appbar.AppBarLayout
+import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.bugreporting.ui.toErrorDialogBuilder
+import de.rki.coronawarnapp.covidcertificate.test.TestCertificate
+import de.rki.coronawarnapp.databinding.FragmentCovidCertificateDetailsBinding
+import de.rki.coronawarnapp.ui.qrcode.fullscreen.QrCodeFullScreenFragmentArgs
+import de.rki.coronawarnapp.ui.view.onOffsetChange
+import de.rki.coronawarnapp.util.DialogHelper
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortDayFormat
+import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat
+import de.rki.coronawarnapp.util.di.AutoInject
+import de.rki.coronawarnapp.util.setUrl
+import de.rki.coronawarnapp.util.ui.popBackStack
+import de.rki.coronawarnapp.util.ui.viewBinding
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
+import de.rki.coronawarnapp.util.viewmodel.cwaViewModelsAssisted
+import javax.inject.Inject
+
+class CovidCertificateDetailsFragment : Fragment(R.layout.fragment_covid_certificate_details), AutoInject {
+
+    @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory
+    private val binding by viewBinding<FragmentCovidCertificateDetailsBinding>()
+    private val args by navArgs<CovidCertificateDetailsFragmentArgs>()
+    private val viewModel: CovidCertificateDetailsViewModel by cwaViewModelsAssisted(
+        factoryProducer = { viewModelFactory },
+        constructorCall = { factory, _ ->
+            factory as CovidCertificateDetailsViewModel.Factory
+            factory.create(
+                testCertificateIdentifier = args.testCertificateIdentifier
+            )
+        }
+    )
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) {
+        qrCodeCard.title.setText(R.string.detail_green_certificate_card_title)
+        appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha ->
+            title.alpha = titleAlpha
+            subtitle.alpha = subtitleAlpha
+        }
+
+        bindTravelNoticeViews()
+        bindToolbar()
+        setToolbarOverlay()
+
+        viewModel.qrCode.observe(viewLifecycleOwner) { onQrCodeReady(it) }
+        viewModel.errors.observe(viewLifecycleOwner) { onError(it) }
+        viewModel.events.observe(viewLifecycleOwner) { onNavEvent(it) }
+        viewModel.covidCertificate.observe(viewLifecycleOwner) { it?.let { onCertificateReady(it) } }
+    }
+
+    private fun FragmentCovidCertificateDetailsBinding.onCertificateReady(
+        testCertificate: TestCertificate
+    ) {
+        qrCodeCard.subtitle.text = getString(
+            R.string.detail_green_certificate_card_subtitle,
+            testCertificate.sampleCollectedAt.toShortDayFormat(),
+            testCertificate.sampleCollectedAt.toShortTimeFormat(),
+        )
+        name.text = testCertificate.run { "$firstName $lastName" }
+        birthDate.text = testCertificate.dateOfBirth.toDayFormat()
+        diseaseType.text = testCertificate.targetName
+        testType.text = testCertificate.testType
+        testName.text = testCertificate.testName
+        testManufacturer.text = testCertificate.testNameAndManufactor
+        testDate.text = "%s %s".format(
+            testCertificate.sampleCollectedAt.toShortDayFormat(),
+            testCertificate.sampleCollectedAt.toShortTimeFormat()
+        )
+        testResult.text = testCertificate.testResult
+        testCenter.text = testCertificate.testCenter
+        certificateCountry.text = testCertificate.certificateCountry
+        certificateIssuer.text = testCertificate.certificateIssuer
+        certificateId.text = testCertificate.certificateId
+    }
+
+    private fun FragmentCovidCertificateDetailsBinding.onQrCodeReady(bitmap: Bitmap?) {
+        qrCodeCard.apply {
+            image.setImageBitmap(bitmap)
+            progressBar.hide()
+            bitmap?.let { image.setOnClickListener { viewModel.openFullScreen() } }
+        }
+    }
+
+    private fun FragmentCovidCertificateDetailsBinding.onError(error: Throwable) {
+        qrCodeCard.progressBar.hide()
+        error.toErrorDialogBuilder(requireContext()).show()
+    }
+
+    private fun FragmentCovidCertificateDetailsBinding.onNavEvent(event: CovidCertificateDetailsNavigation) {
+        when (event) {
+            CovidCertificateDetailsNavigation.Back -> popBackStack()
+            is CovidCertificateDetailsNavigation.FullQrCode -> findNavController().navigate(
+                R.id.action_global_qrCodeFullScreenFragment,
+                QrCodeFullScreenFragmentArgs(event.qrCodeText).toBundle(),
+                null,
+                FragmentNavigatorExtras(qrCodeCard.image to qrCodeCard.image.transitionName)
+            )
+        }
+    }
+
+    private fun FragmentCovidCertificateDetailsBinding.bindTravelNoticeViews() {
+        if (travelNoticeGerman.text ==
+            getString(R.string.green_certificate_attribute_certificate_travel_notice_german)
+        ) {
+            travelNoticeGerman.setUrl(
+                R.string.green_certificate_attribute_certificate_travel_notice_german,
+                R.string.green_certificate_travel_notice_link_de,
+                R.string.green_certificate_travel_notice_link_de
+            )
+        }
+
+        if (travelNoticeEnglish.text ==
+            getString(R.string.green_certificate_attribute_certificate_travel_notice_english)
+        ) {
+            travelNoticeEnglish.setUrl(
+                R.string.green_certificate_attribute_certificate_travel_notice_english,
+                R.string.green_certificate_travel_notice_link_en,
+                R.string.green_certificate_travel_notice_link_en
+            )
+        }
+    }
+
+    private fun FragmentCovidCertificateDetailsBinding.bindToolbar() = toolbar.apply {
+        setNavigationOnClickListener { popBackStack() }
+        setOnMenuItemClickListener {
+            when (it.itemId) {
+                R.id.menu_covid_certificate_delete -> {
+                    DialogHelper.showDialog(deleteTestConfirmationDialog)
+                    true
+                }
+                else -> onOptionsItemSelected(it)
+            }
+        }
+    }
+
+    private fun setToolbarOverlay() {
+        val width = requireContext().resources.displayMetrics.widthPixels
+        val params: CoordinatorLayout.LayoutParams = binding.scrollView.layoutParams as (CoordinatorLayout.LayoutParams)
+
+        val textParams = binding.subtitle.layoutParams as (LinearLayout.LayoutParams)
+        textParams.bottomMargin = (width / 3) + 170
+        binding.subtitle.requestLayout()
+
+        val behavior: AppBarLayout.ScrollingViewBehavior = params.behavior as (AppBarLayout.ScrollingViewBehavior)
+        behavior.overlayTop = (width / 3) + 170
+    }
+
+    private val deleteTestConfirmationDialog by lazy {
+        DialogHelper.DialogInstance(
+            requireActivity(),
+            R.string.green_certificate_details_dialog_remove_test_title,
+            R.string.green_certificate_details_dialog_remove_test_message,
+            R.string.green_certificate_details_dialog_remove_test_button_positive,
+            R.string.green_certificate_details_dialog_remove_test_button_negative,
+            positiveButtonFunction = {
+                viewModel.onDeleteTestConfirmed()
+            }
+        )
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsModule.kt
similarity index 73%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsModule.kt
index 363a483bf8bd6ba41eb6fb1e408055eb3bda9189..5b77eb139d510dd6694a444b6fc0325459280932 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsModule.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsModule.kt
@@ -8,12 +8,12 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
 import de.rki.coronawarnapp.util.viewmodel.CWAViewModelKey
 
 @Module
-abstract class GreenCertificateDetailsModule {
+abstract class CovidCertificateDetailsModule {
 
     @Binds
     @IntoMap
-    @CWAViewModelKey(GreenCertificateDetailsViewModel::class)
+    @CWAViewModelKey(CovidCertificateDetailsViewModel::class)
     abstract fun greenCertificateDetailsFragment(
-        factory: GreenCertificateDetailsViewModel.Factory
+        factory: CovidCertificateDetailsViewModel.Factory
     ): CWAViewModelFactory<out CWAViewModel>
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsNavigation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsNavigation.kt
new file mode 100644
index 0000000000000000000000000000000000000000..b1e6b4e12de0691fb7947961a54edff4e0a01584
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsNavigation.kt
@@ -0,0 +1,6 @@
+package de.rki.coronawarnapp.greencertificate.ui.certificates.details
+
+sealed class CovidCertificateDetailsNavigation {
+    object Back : CovidCertificateDetailsNavigation()
+    data class FullQrCode(val qrCodeText: String) : CovidCertificateDetailsNavigation()
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsViewModel.kt
new file mode 100644
index 0000000000000000000000000000000000000000..f882c1c6a4a380e276fcba0639737ed562a29a2b
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/CovidCertificateDetailsViewModel.kt
@@ -0,0 +1,66 @@
+package de.rki.coronawarnapp.greencertificate.ui.certificates.details
+
+import android.graphics.Bitmap
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.asLiveData
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+import de.rki.coronawarnapp.coronatest.TestCertificateRepository
+import de.rki.coronawarnapp.coronatest.type.TestCertificateIdentifier
+import de.rki.coronawarnapp.covidcertificate.test.TestCertificate
+import de.rki.coronawarnapp.presencetracing.checkins.qrcode.QrCodeGenerator
+import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
+import de.rki.coronawarnapp.util.ui.SingleLiveEvent
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
+import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory
+import kotlinx.coroutines.flow.map
+import timber.log.Timber
+
+class CovidCertificateDetailsViewModel @AssistedInject constructor(
+    dispatcherProvider: DispatcherProvider,
+    @Assisted private val testCertificateIdentifier: TestCertificateIdentifier,
+    private val qrCodeGenerator: QrCodeGenerator,
+    private val testCertificateRepository: TestCertificateRepository
+) : CWAViewModel(dispatcherProvider) {
+
+    private var qrCodeText: String? = null
+    private val bitmapStateData = MutableLiveData<Bitmap>()
+    val qrCode: LiveData<Bitmap> = bitmapStateData
+    val events = SingleLiveEvent<CovidCertificateDetailsNavigation>()
+    val errors = SingleLiveEvent<Throwable>()
+    val covidCertificate = testCertificateRepository.certificates.map { certificates ->
+        certificates.find { it.identifier == testCertificateIdentifier }?.toTestCertificate(null)
+            .also { generateQrCode(it) }
+    }.asLiveData(dispatcherProvider.Default)
+
+    fun onClose() = events.postValue(CovidCertificateDetailsNavigation.Back)
+
+    fun openFullScreen() = qrCodeText?.let { events.postValue(CovidCertificateDetailsNavigation.FullQrCode(it)) }
+
+    fun onDeleteTestConfirmed() = launch {
+        Timber.d("Removing Test Certificate=$testCertificateIdentifier")
+        testCertificateRepository.deleteCertificate(testCertificateIdentifier)
+        events.postValue(CovidCertificateDetailsNavigation.Back)
+    }
+
+    private fun generateQrCode(testCertificate: TestCertificate?) = launch {
+        try {
+            bitmapStateData.postValue(
+                testCertificate?.let { certificate ->
+                    qrCodeGenerator.createQrCode(certificate.qrCode.also { qrCodeText = it })
+                }
+            )
+        } catch (e: Exception) {
+            Timber.d(e, "generateQrCode failed for covidCertificate=%s", testCertificateIdentifier)
+            bitmapStateData.postValue(null)
+            errors.postValue(e)
+        }
+    }
+
+    @AssistedFactory
+    interface Factory : CWAViewModelFactory<CovidCertificateDetailsViewModel> {
+        fun create(testCertificateIdentifier: TestCertificateIdentifier): CovidCertificateDetailsViewModel
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt
deleted file mode 100644
index ff9e0a78ba067f6d66397a33b22fe303151a6c80..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsFragment.kt
+++ /dev/null
@@ -1,84 +0,0 @@
-package de.rki.coronawarnapp.greencertificate.ui.certificates.details
-
-import android.os.Bundle
-import android.view.View
-import android.widget.LinearLayout
-import androidx.coordinatorlayout.widget.CoordinatorLayout
-import androidx.fragment.app.Fragment
-import com.google.android.material.appbar.AppBarLayout
-import de.rki.coronawarnapp.R
-import de.rki.coronawarnapp.databinding.FragmentGreencertificateDetailsBinding
-import de.rki.coronawarnapp.ui.view.onOffsetChange
-import de.rki.coronawarnapp.util.di.AutoInject
-import de.rki.coronawarnapp.util.setUrl
-import de.rki.coronawarnapp.util.ui.popBackStack
-import de.rki.coronawarnapp.util.ui.viewBinding
-import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
-import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
-import javax.inject.Inject
-
-class GreenCertificateDetailsFragment : Fragment(R.layout.fragment_greencertificate_details), AutoInject {
-
-    @Inject lateinit var viewModelFactory: CWAViewModelFactoryProvider.Factory
-    private val binding: FragmentGreencertificateDetailsBinding by viewBinding()
-    private val viewModel: GreenCertificateDetailsViewModel by cwaViewModels { viewModelFactory }
-
-    override fun onViewCreated(view: View, savedInstanceState: Bundle?) =
-        with(binding) {
-            toolbar.setNavigationOnClickListener { popBackStack() }
-
-            qrCodeCard.title.text = getString(R.string.detail_green_certificate_card_title)
-            qrCodeCard.subtitle.text = "Test durchgeführt am 12.05.21 18:01" // will be changed
-
-            appBarLayout.onOffsetChange { titleAlpha, subtitleAlpha ->
-                title.alpha = titleAlpha
-                subtitle.alpha = subtitleAlpha
-            }
-
-            if (travelNoticeGerman.text ==
-                requireContext().getString(R.string.green_certificate_attribute_certificate_travel_notice_german)
-            ) {
-                travelNoticeGerman.setUrl(
-                    R.string.green_certificate_attribute_certificate_travel_notice_german,
-                    R.string.green_certificate_travel_notice_link_de,
-                    R.string.green_certificate_travel_notice_link_de
-                )
-            }
-
-            if (travelNoticeEnglish.text ==
-                requireContext().getString(R.string.green_certificate_attribute_certificate_travel_notice_english)
-            ) {
-                travelNoticeEnglish.setUrl(
-                    R.string.green_certificate_attribute_certificate_travel_notice_english,
-                    R.string.green_certificate_travel_notice_link_en,
-                    R.string.green_certificate_travel_notice_link_en
-                )
-            }
-
-            setToolbarOverlay()
-
-            viewModel.qrCode.observe(viewLifecycleOwner) {
-                qrCodeCard.image.setImageBitmap(it)
-                it?.let {
-                    qrCodeCard.image.setOnClickListener { viewModel.openFullScreen() }
-                    qrCodeCard.progressBar.hide()
-                }
-            }
-
-            // TODO: Will in the future be called when the data is loaded from the database
-            viewModel.generateQrCode()
-        }
-
-    private fun setToolbarOverlay() {
-        val width = requireContext().resources.displayMetrics.widthPixels
-        val params: CoordinatorLayout.LayoutParams = binding.scrollView.layoutParams
-            as (CoordinatorLayout.LayoutParams)
-
-        val textParams = binding.subtitle.layoutParams as (LinearLayout.LayoutParams)
-        textParams.bottomMargin = (width / 3) + 170
-        binding.subtitle.requestLayout()
-
-        val behavior: AppBarLayout.ScrollingViewBehavior = params.behavior as (AppBarLayout.ScrollingViewBehavior)
-        behavior.overlayTop = (width / 3) + 170
-    }
-}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt
deleted file mode 100644
index 029b09bdc085eb4cedc5b22bf9b86dabee7e6db1..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsNavigation.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package de.rki.coronawarnapp.greencertificate.ui.certificates.details
-
-sealed class GreenCertificateDetailsNavigation {
-    object Back : GreenCertificateDetailsNavigation()
-    data class FullQrCode(val qrCodeText: String) : GreenCertificateDetailsNavigation()
-}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt
deleted file mode 100644
index c1996855f250724b0466791cdd1de45dcc5a1e05..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/greencertificate/ui/certificates/details/GreenCertificateDetailsViewModel.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-package de.rki.coronawarnapp.greencertificate.ui.certificates.details
-
-import android.graphics.Bitmap
-import androidx.lifecycle.asLiveData
-import dagger.assisted.AssistedFactory
-import dagger.assisted.AssistedInject
-import de.rki.coronawarnapp.presencetracing.checkins.qrcode.QrCodeGenerator
-import de.rki.coronawarnapp.util.coroutine.DispatcherProvider
-import de.rki.coronawarnapp.util.ui.SingleLiveEvent
-import de.rki.coronawarnapp.util.viewmodel.CWAViewModel
-import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory
-import kotlinx.coroutines.flow.MutableStateFlow
-import timber.log.Timber
-
-class GreenCertificateDetailsViewModel @AssistedInject constructor(
-    private val qrCodeGenerator: QrCodeGenerator,
-    dispatcherProvider: DispatcherProvider,
-) : CWAViewModel(dispatcherProvider) {
-
-    private var qrCodeText: String? = null
-    private val mutableStateFlow = MutableStateFlow<Bitmap?>(null)
-    val qrCode = mutableStateFlow.asLiveData(dispatcherProvider.Default)
-
-    val events = SingleLiveEvent<GreenCertificateDetailsNavigation>()
-
-    fun onClose() = events.postValue(GreenCertificateDetailsNavigation.Back)
-
-    fun openFullScreen() = qrCodeText?.let { events.postValue(GreenCertificateDetailsNavigation.FullQrCode(it)) }
-
-    /* TODO: Adapt to Green Certificate */
-    fun generateQrCode() = launch {
-        try {
-            mutableStateFlow.value = qrCodeGenerator.createQrCode("Sample String")
-        } catch (e: Exception) {
-            Timber.d(e, "generateQrCode failed for greenCertificate=%s", "Sample Certificate")
-            mutableStateFlow.value = null
-        }
-    }
-
-    @AssistedFactory
-    interface Factory : SimpleCWAViewModelFactory<GreenCertificateDetailsViewModel>
-}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivityModule.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivityModule.kt
index 552d7ccb8691c8d2b08a431b3ac725e87cf89804..d902ba1adcec59e262896568405930b275c753a3 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivityModule.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivityModule.kt
@@ -5,7 +5,7 @@ import dagger.Module
 import dagger.android.ContributesAndroidInjector
 import dagger.multibindings.IntoMap
 import de.rki.coronawarnapp.datadonation.analytics.ui.AnalyticsUIModule
-import de.rki.coronawarnapp.greencertificate.ui.GreenCertificateUIModule
+import de.rki.coronawarnapp.greencertificate.ui.CovidCertificateUIModule
 import de.rki.coronawarnapp.release.NewReleaseInfoFragment
 import de.rki.coronawarnapp.release.NewReleaseInfoFragmentModule
 import de.rki.coronawarnapp.tracing.ui.details.TracingDetailsFragmentModule
@@ -42,7 +42,7 @@ import de.rki.coronawarnapp.vaccination.ui.VaccinationUIModule
         PresenceTracingUIModule::class,
         RATProfileUIModule::class,
         VaccinationUIModule::class,
-        GreenCertificateUIModule::class,
+        CovidCertificateUIModule::class,
     ]
 )
 abstract class MainActivityModule {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt
index fb41bfffa07a8878bcf3fbb1f94618534a250e3f..897f618ef8b4b1c654e2aacb7ac839810ad88517 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/TimeAndDateExtensions.kt
@@ -25,6 +25,7 @@ object TimeAndDateExtensions {
 
     private val dayFormatter = DateTimeFormat.forPattern("dd.MM.yyyy")
     private val dayFormatter2DigitYear = DateTimeFormat.forPattern("dd.MM.yy")
+    private val shortTime = DateTimeFormat.shortTime()
 
     fun getCurrentHourUTC(): Int = DateTime(Instant.now(), DateTimeZone.UTC).hourOfDay().get()
 
@@ -119,6 +120,16 @@ object TimeAndDateExtensions {
      */
     fun LocalDate.toDayFormat(): String = toString(dayFormatter)
 
+    /**
+     * Returns a readable time String with the format "hh:mm" like 12:00 of a LocalDate
+     */
+    fun LocalDate.toShortTimeFormat(): String = toString(shortTime)
+
+    /**
+     * Returns a readable time String with the format "hh:mm" like 12:00 of a LocalDate
+     */
+    fun Instant.toShortTimeFormat(): String = toString(shortTime)
+
     /**
      * Returns a readable date String with the format "dd.MM.yy" like 23.05.89 of an Instant
      */
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_covid_certificate_details.xml
similarity index 93%
rename from Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml
rename to Corona-Warn-App/src/main/res/layout/fragment_covid_certificate_details.xml
index 057a3da6aa7a3487beec29da4cee0fa991857ce9..51c900e23a289674cda44afb8d1c64683a580d91 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_greencertificate_details.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_covid_certificate_details.xml
@@ -44,10 +44,10 @@
                     android:layout_marginTop="90dp"
                     android:layout_marginBottom="12dp"
                     android:gravity="center"
+                    android:text="@string/detail_green_certificate_title"
                     android:textColor="@android:color/white"
                     android:textSize="20sp"
-                    android:textStyle="bold"
-                    android:text="@string/detail_green_certificate_title"/>
+                    android:textStyle="bold" />
 
                 <TextView
                     android:id="@+id/subtitle"
@@ -59,7 +59,7 @@
                     android:gravity="center"
                     android:text="@string/detail_green_certificate_test_type"
                     android:textColor="@android:color/white"
-                    android:textSize="18sp"/>
+                    android:textSize="18sp" />
 
             </LinearLayout>
 
@@ -67,8 +67,10 @@
                 android:id="@+id/toolbar"
                 android:layout_width="match_parent"
                 android:layout_height="?attr/actionBarSize"
+                android:theme="@style/CWAToolbar.Theme"
                 app:layout_collapseMode="pin"
                 app:layout_scrollFlags="scroll|enterAlways"
+                app:menu="@menu/menu_covid_certificate_detail"
                 app:navigationIcon="@drawable/ic_back"
                 app:navigationIconTint="@android:color/white">
 
@@ -82,7 +84,7 @@
                     <ImageView
                         android:layout_width="match_parent"
                         android:layout_height="wrap_content"
-                        android:layout_marginEnd="72dp"
+                        android:layout_marginEnd="32dp"
                         android:importantForAccessibility="no"
                         app:srcCompat="@drawable/ic_cwa_logo_white" />
 
@@ -115,7 +117,7 @@
                 android:layout_marginBottom="6dp" />
 
             <LinearLayout
-                style="@style/Card.Greencertificate"
+                style="@style/Card.GreenCertificate"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="24dp"
@@ -134,7 +136,6 @@
                     style="@style/body1"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:text="Andrea Schneider"
                     tools:text="Andrea Schneider" />
 
                 <TextView
@@ -150,7 +151,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="18.04.1943"
                     tools:text="18.04.1943" />
 
                 <TextView
@@ -166,7 +166,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="SARS-CoV-2"
                     tools:text="SARS-CoV-2" />
 
                 <TextView
@@ -182,7 +181,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="Rapid Antigen Test"
                     tools:text="Rapid Antigen Test" />
 
                 <TextView
@@ -193,12 +191,11 @@
                     android:text="@string/green_certificate_attribute_test_name" />
 
                 <TextView
-                    android:id="@+id/medical_product_name"
+                    android:id="@+id/test_name"
                     style="@style/body1"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="Xep"
                     tools:text="Xep" />
 
                 <TextView
@@ -214,7 +211,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="Xup"
                     tools:text="Xup" />
 
                 <TextView
@@ -230,7 +226,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="12.05.21 19:00"
                     tools:text="12.05.21 19:00" />
 
                 <TextView
@@ -246,7 +241,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="negative"
                     tools:text="negative" />
 
                 <TextView
@@ -262,7 +256,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="AB123"
                     tools:text="AB123" />
 
                 <TextView
@@ -273,12 +266,11 @@
                     android:text="@string/green_certificate_attribute_state_of_testing" />
 
                 <TextView
-                    android:id="@+id/test_country"
+                    android:id="@+id/certificate_country"
                     style="@style/body1"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="Germany"
                     tools:text="Germany" />
 
                 <TextView
@@ -294,7 +286,6 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="G05930482748454836478695764787840"
                     tools:text="G05930482748454836478695764787840" />
 
 
@@ -311,14 +302,13 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="05930482748454836478695764787840"
                     tools:text="05930482748454836478695764787840" />
 
 
             </LinearLayout>
 
             <LinearLayout
-                style="@style/Card.Greencertificate"
+                style="@style/Card.GreenCertificate"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="24dp"
@@ -332,7 +322,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="4dp"
-                    android:text="@string/green_certificate_attribute_certificate_travel_notice_german"/>
+                    android:text="@string/green_certificate_attribute_certificate_travel_notice_german" />
 
                 <TextView
                     android:id="@+id/travel_notice_english"
@@ -340,7 +330,7 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="24dp"
-                    android:text="@string/green_certificate_attribute_certificate_travel_notice_english"/>
+                    android:text="@string/green_certificate_attribute_certificate_travel_notice_english" />
             </LinearLayout>
         </LinearLayout>
 
diff --git a/Corona-Warn-App/src/main/res/menu/menu_covid_certificate_detail.xml b/Corona-Warn-App/src/main/res/menu/menu_covid_certificate_detail.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4ae3a0733d51d12c97901516365d9ec307aedcad
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/menu/menu_covid_certificate_detail.xml
@@ -0,0 +1,6 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+    <item
+        android:id="@+id/menu_covid_certificate_delete"
+        android:title="@string/green_certificate_details_menu_item_delete" />
+</menu>
diff --git a/Corona-Warn-App/src/main/res/navigation/green_certificate_graph.xml b/Corona-Warn-App/src/main/res/navigation/green_certificate_graph.xml
index 3605a787c2a0d0ae5ca3b732be091d62d7a506c3..079b0875aeb370f9271a863695c3e3a45d18a436 100644
--- a/Corona-Warn-App/src/main/res/navigation/green_certificate_graph.xml
+++ b/Corona-Warn-App/src/main/res/navigation/green_certificate_graph.xml
@@ -9,11 +9,14 @@
         android:id="@+id/certificatesFragment"
         android:name="de.rki.coronawarnapp.greencertificate.ui.certificates.CertificatesFragment"
         android:label="fragment_certificates"
-        tools:layout="@layout/fragment_certificates" >
+        tools:layout="@layout/fragment_certificates">
 
         <action
             android:id="@+id/action_certificatesFragment_to_vaccinationNavGraph"
             app:destination="@id/vaccination_nav_graph" />
+        <action
+            android:id="@+id/action_certificatesFragment_to_covidCertificateDetailsFragment"
+            app:destination="@id/covidCertificateDetailsFragment" />
 
     </fragment>
 
@@ -21,7 +24,7 @@
         android:id="@+id/vaccinationConsentFragment"
         android:name="de.rki.coronawarnapp.vaccination.ui.consent.VaccinationConsentFragment"
         android:label="vaccination_consent_fragment"
-        tools:layout="@layout/vaccination_consent_fragment" >
+        tools:layout="@layout/vaccination_consent_fragment">
         <argument
             android:name="showBottomNav"
             android:defaultValue="true"
@@ -42,4 +45,14 @@
         android:label="privacyFragment"
         tools:layout="@layout/fragment_information_privacy" />
 
+    <fragment
+        android:id="@+id/covidCertificateDetailsFragment"
+        android:name="de.rki.coronawarnapp.greencertificate.ui.certificates.details.CovidCertificateDetailsFragment"
+        android:label="CovidCertificateDetailsFragment"
+        tools:layout="@layout/fragment_covid_certificate_details">
+
+        <argument
+            android:name="testCertificateIdentifier"
+            app:argType="string" />
+    </fragment>
 </navigation>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml b/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml
index 6c4b5a1fd37f036a741723cb8a013ae602e6aeb0..ff33ad18b4aba6f656a3f78135e1b86908f91e68 100644
--- a/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/green_certificate_strings.xml
@@ -32,10 +32,23 @@
     <string name="detail_green_certificate_test_type">SARS-CoV-2-Test</string>
     <!-- XTXT: Detail green certificate card title -->
     <string name="detail_green_certificate_card_title">"Testzertifikat"</string>
+    <!-- XTXT: Detail green certificate card subtitle -->
+    <string name="detail_green_certificate_card_subtitle">"Test durchgeführt am %1$s %2$s"</string>
     <!-- XTXT: Detail green certificate travel notice link en -->
     <string name="green_certificate_travel_notice_link_en">"https://reopen.europa.eu/en"</string>
     <!-- XTXT: Detail green certificate travel notice link de -->
     <string name="green_certificate_travel_notice_link_de">"https://reopen.europa.eu/de"</string>
+    <!-- XTXT: Detail green certificate menu item: delete -->
+    <string name="green_certificate_details_menu_item_delete">"Entfernen"</string>
+    <!-- XTXT: Detail green certificate diaglog title -->
+    <string name="green_certificate_details_dialog_remove_test_title">"Wollen Sie das Testzertifikat wirklich entfernen?"</string>
+    <!-- XTXT: Detail green certificate diaglog message -->
+    <string name="green_certificate_details_dialog_remove_test_message">"Wenn Sie das Testzertifikat entfernen, können Sie es nicht mehr als Nachweis in der App verwenden."</string>
+    <!-- XTXT: Detail green certificate diaglog positive -->
+    <string name="green_certificate_details_dialog_remove_test_button_positive">"Entfernen"</string>
+    <!-- XTXT: Detail green certificate diaglog negative -->
+    <string name="green_certificate_details_dialog_remove_test_button_negative">"Abbrechen"</string>
+
     <!-- XTXT: Green certificate main screen title -->
     <string name="certification_screen_title">Zertifikate</string>
     <!-- XTXT: Green certificate menu item -->
diff --git a/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml b/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml
index 6a483d2260b82384a763d94daaab5774cddc9b57..22122ad766053a60e180e9e46fa8d37a35cfa551 100644
--- a/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml
+++ b/Corona-Warn-App/src/main/res/values/green_certificate_strings.xml
@@ -32,10 +32,23 @@
     <string name="detail_green_certificate_test_type">"SARS-CoV-2 Test"</string>
     <!-- XTXT: Detail green certificate card title -->
     <string name="detail_green_certificate_card_title">"Test Certificate"</string>
+    <!-- XTXT: Detail green certificate card subtitle -->
+    <string name="detail_green_certificate_card_subtitle">"Test durchgeführt am %1$s %2$s"</string>
     <!-- XTXT: Detail green certificate travel notice link en -->
     <string name="green_certificate_travel_notice_link_en">"https://reopen.europa.eu/en"</string>
     <!-- XTXT: Detail green certificate travel notice link de -->
     <string name="green_certificate_travel_notice_link_de">"https://reopen.europa.eu/de"</string>
+    <!-- XTXT: Detail green certificate menu item: delete -->
+    <string name="green_certificate_details_menu_item_delete">"Entfernen"</string>
+    <!-- XTXT: Detail green certificate diaglog title -->
+    <string name="green_certificate_details_dialog_remove_test_title">"Wollen Sie das Testzertifikat wirklich entfernen?"</string>
+    <!-- XTXT: Detail green certificate diaglog message -->
+    <string name="green_certificate_details_dialog_remove_test_message">"Wenn Sie das Testzertifikat entfernen, können Sie es nicht mehr als Nachweis in der App verwenden."</string>
+    <!-- XTXT: Detail green certificate diaglog positive -->
+    <string name="green_certificate_details_dialog_remove_test_button_positive">"Abbrechen"</string>
+    <!-- XTXT: Detail green certificate diaglog negative -->
+    <string name="green_certificate_details_dialog_remove_test_button_negative">"Entfernen"</string>
+
     <!-- XTXT: Green certificate main screen title -->
     <string name="certification_screen_title">"Certificates"</string>
     <!-- XTXT: Green certificate menu item -->
diff --git a/Corona-Warn-App/src/main/res/values/styles.xml b/Corona-Warn-App/src/main/res/values/styles.xml
index e81fe78b15ebf0a921ed33b1a094de345cec4f18..5577e401916f0278a009ae24ab8f956924cde910 100644
--- a/Corona-Warn-App/src/main/res/values/styles.xml
+++ b/Corona-Warn-App/src/main/res/values/styles.xml
@@ -239,7 +239,7 @@
         <item name="android:backgroundTint">@color/colorVaccinationCardBackground</item>
     </style>
 
-    <style name="Card.Greencertificate" parent="Card.NoElevation">
+    <style name="Card.GreenCertificate" parent="Card.NoElevation">
         <item name="android:backgroundTint">@color/colorVaccinationCardBackground</item>
     </style>
 
diff --git a/translation_v2.json b/translation_v2.json
index 286c27bb7e472ca064376dfb75f361d424b53a59..a5c864007ef79c13cfbbc071c2fb16fd65c8b0c9 100644
--- a/translation_v2.json
+++ b/translation_v2.json
@@ -12,7 +12,8 @@
             "event_registration_strings.xml",
             "antigen_strings.xml",
             "vaccination_strings.xml",
-            "green_certificate_strings.xml"
+            "green_certificate_strings.xml",
+            "green_certificate_attribute_strings.xml"
           ],
           "targetFolderPath": "../values-[langCode]"
         }