diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt
index f6c762c39eeac9777537d1aca410ca6d2a6df74e..bc1b13566bd294854da6330ee9ae10fe773ea3e2 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsFragmentTest.kt
@@ -39,8 +39,6 @@ import io.mockk.every
 import io.mockk.impl.annotations.MockK
 import io.mockk.mockk
 import org.joda.time.Instant
-import org.joda.time.LocalDate
-import org.joda.time.format.DateTimeFormat
 import org.junit.After
 import org.junit.Before
 import org.junit.Test
@@ -157,11 +155,16 @@ class PersonDetailsFragmentTest : BaseUITest() {
         }
         every { containerId } returns tcsContainerId
         every { testType } returns "PCR-Test"
-        every { dateOfBirth } returns LocalDate.parse("18.04.1943", DateTimeFormat.forPattern("dd.MM.yyyy"))
+        every { dateOfBirthFormatted } returns "1943-04-18"
         every { sampleCollectedAt } returns Instant.parse("2021-05-31T11:35:00.000Z")
         every { registeredAt } returns Instant.parse("2021-05-21T11:35:00.000Z")
         every { personIdentifier } returns certificatePersonIdentifier
         every { qrCode } returns "qrCode"
+        every { personIdentifier } returns CertificatePersonIdentifier(
+            firstNameStandardized = "firstNameStandardized",
+            lastNameStandardized = "lastNameStandardized",
+            dateOfBirthFormatted = "1943-04-18"
+        )
     }
 
     private fun mockVaccinationCertificate(number: Int = 1, final: Boolean = false): VaccinationCertificate =
@@ -173,15 +176,21 @@ class PersonDetailsFragmentTest : BaseUITest() {
                 every { vaccination } returns mockk<DccV1.VaccinationData>().apply {
                     every { doseNumber } returns number
                     every { totalSeriesOfDoses } returns 2
-                    every { vaccinatedAt } returns localDate
+                    every { vaccinatedOn } returns localDate
                 }
             }
             every { containerId } returns vcContainerId
-            every { vaccinatedAt } returns localDate
+            every { vaccinatedOn } returns localDate
             every { personIdentifier } returns certificatePersonIdentifier
+            every { vaccinatedOn } returns Instant.parse("2021-06-01T11:35:00.000Z").toLocalDateUserTz()
+            every { personIdentifier } returns CertificatePersonIdentifier(
+                firstNameStandardized = "firstNameStandardized",
+                lastNameStandardized = "lastNameStandardized",
+                dateOfBirthFormatted = "1943-04-18"
+            )
             every { doseNumber } returns number
             every { totalSeriesOfDoses } returns 2
-            every { dateOfBirth } returns LocalDate.now()
+            every { dateOfBirthFormatted } returns "1981-03-20"
             every { isFinalShot } returns final
             every { qrCode } returns "qrCode"
         }
@@ -190,7 +199,7 @@ class PersonDetailsFragmentTest : BaseUITest() {
         mockk<RecoveryCertificate>().apply {
             every { fullName } returns "Andrea Schneider"
             every { certificateId } returns "recoveryCertificateId"
-            every { dateOfBirth } returns LocalDate.now()
+            every { dateOfBirthFormatted } returns "1981-03-20"
             every { validUntil } returns Instant.parse("2021-05-31T11:35:00.000Z").toLocalDateUserTz()
             every { personIdentifier } returns certificatePersonIdentifier
             every { qrCode } returns "qrCode"
@@ -198,7 +207,7 @@ class PersonDetailsFragmentTest : BaseUITest() {
         }
 
     private val certificatePersonIdentifier = CertificatePersonIdentifier(
-        dateOfBirth = LocalDate.parse("01.01.2020", DateTimeFormat.forPattern("dd.MM.yyyy")),
+        dateOfBirthFormatted = "1981-03-20",
         firstNameStandardized = "firstNameStandardized",
         lastNameStandardized = "lastNameStandardized",
     )
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt
index db88403732638855df3d81d36efc995d45071c2e..fe7067dfa300ce9de250d43205fd9361081367fb 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonOverviewFragmentTest.kt
@@ -22,7 +22,6 @@ import io.mockk.every
 import io.mockk.impl.annotations.MockK
 import io.mockk.mockk
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import org.junit.After
 import org.junit.Before
 import org.junit.Test
@@ -185,7 +184,7 @@ class PersonOverviewFragmentTest : BaseUITest() {
         every { personIdentifier } returns CertificatePersonIdentifier(
             firstNameStandardized = "firstNameStandardized",
             lastNameStandardized = "lastNameStandardized",
-            dateOfBirth = LocalDate.now()
+            dateOfBirthFormatted = "1943-04-18"
         )
     }
 }
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt
index f283390d346214da573bc579226db8f8bd898fbd..ae0328185b47244047674cbccb5e884f90e2a525 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/test/ui/TestCertificateDetailsFragmentTest.kt
@@ -27,7 +27,6 @@ import io.mockk.impl.annotations.MockK
 import io.mockk.mockk
 import org.joda.time.DateTime
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import org.joda.time.format.DateTimeFormat
 import org.junit.After
 import org.junit.Before
@@ -107,6 +106,8 @@ class TestCertificateDetailsFragmentTest : BaseUITest() {
                     get() = "Xup"
                 override val sampleCollectedAt: Instant
                     get() = testDate
+                override val sampleCollectedAtFormatted: String
+                    get() = "12.05.2021 19:00"
                 override val testCenter: String
                     get() = "AB123"
                 override val registeredAt: Instant
@@ -129,8 +130,8 @@ class TestCertificateDetailsFragmentTest : BaseUITest() {
                     get() = "Schneider"
                 override val fullName: String
                     get() = "Schneider, Andrea"
-                override val dateOfBirth: LocalDate
-                    get() = LocalDate.parse("18.04.1943 00:00", formatter)
+                override val dateOfBirthFormatted: String
+                    get() = "1943-04-18"
                 override val personIdentifier: CertificatePersonIdentifier
                     get() = certificatePersonIdentifier
                 override val certificateIssuer: String
diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt
index a4fb1138b3a1fc51c15fbda6f3a39a521ed3a0fe..e5c9f598afe2fba1a80885172b3d2b73c4cf2da8 100644
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt
+++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragmentTest.kt
@@ -92,8 +92,9 @@ class VaccinationDetailsFragmentTest : BaseUITest() {
         val formatter = DateTimeFormat.forPattern("dd.MM.yyyy")
         val mockCertificate = mockk<VaccinationCertificate>().apply {
             every { fullName } returns "Max Mustermann"
-            every { dateOfBirth } returns LocalDate.parse("01.02.1976", formatter)
-            every { vaccinatedAt } returns LocalDate.parse("18.02.2021", formatter)
+            every { dateOfBirthFormatted } returns "01.02.1976"
+            every { vaccinatedOnFormatted } returns "18.02.2021"
+            every { vaccinatedOn } returns LocalDate.parse("18.02.2021", formatter)
             every { targetDisease } returns "COVID-19"
             every { medicalProductName } returns "Comirnaty"
             every { vaccineTypeName } returns "mRNA"
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt
index d97b5e1ecde0a56ff4654e5bc7424b7a392ab8c6..43d40d20f705116862de59bb630cc0889abac53b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensor.kt
@@ -21,10 +21,8 @@ class DccQrCodeCensor @Inject constructor() : BugCensor {
 
         synchronized(certsToCensor) { certsToCensor.toList() }.forEach {
             it.certificate.apply {
-                val dobFormatted = dateOfBirth.toString()
-
                 newMessage = newMessage.censor(
-                    dobFormatted,
+                    dateOfBirthFormatted,
                     "covidCertificate/dateOfBirth"
                 )
 
@@ -81,12 +79,12 @@ class DccQrCodeCensor @Inject constructor() : BugCensor {
             "vaccinationData/vaccineId"
         )
 
-        val vaccinatedAt = vaccinationData.vaccinatedAt.toString()
+        val vaccinatedOn = vaccinationData.vaccinatedOnFormatted
         newMessage = newMessage.censor(
-            vaccinatedAt,
-            "vaccinationData/vaccinatedAt"
+            vaccinatedOn,
+            "vaccinationData/vaccinatedOnFormatted"
         )
-        if (vaccinatedAt != vaccinationData.dt) {
+        if (vaccinatedOn != vaccinationData.dt) {
             newMessage = newMessage.censor(
                 vaccinationData.dt,
                 "vaccinationData/dt"
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt
index 1c07d217e525c5cc5996a41da2bc95e540c7237a..6a2b4a8952c34428bd80f5347cd22d89eafee0ca 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CertificatePersonIdentifier.kt
@@ -5,11 +5,10 @@ import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidHealthCerti
 import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidHealthCertificateException.ErrorCode.NAME_MISMATCH
 import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidVaccinationCertificateException
 import de.rki.coronawarnapp.util.HashExtensions.toSHA256
-import org.joda.time.LocalDate
 import timber.log.Timber
 
 data class CertificatePersonIdentifier(
-    @SerializedName("dateOfBirth") val dateOfBirth: LocalDate,
+    @SerializedName("dateOfBirth") val dateOfBirthFormatted: String,
     @SerializedName("familyNameStandardized") val lastNameStandardized: String,
     @SerializedName("givenNameStandardized") val firstNameStandardized: String?
 ) {
@@ -19,10 +18,9 @@ data class CertificatePersonIdentifier(
      */
     internal val code: String
         get() {
-            val dob = dateOfBirth.toString()
             val lastName = lastNameStandardized
             val firstName = firstNameStandardized
-            return "$dob#$lastName#$firstName"
+            return "$dateOfBirthFormatted#$lastName#$firstName"
         }
 
     /**
@@ -41,8 +39,8 @@ data class CertificatePersonIdentifier(
             Timber.d("Given name does not match, got ${other.firstNameStandardized}, expected $firstNameStandardized")
             throw InvalidVaccinationCertificateException(NAME_MISMATCH)
         }
-        if (dateOfBirth != other.dateOfBirth) {
-            Timber.d("Date of birth does not match, got ${other.dateOfBirth}, expected $dateOfBirth")
+        if (dateOfBirthFormatted != other.dateOfBirthFormatted) {
+            Timber.d("Date of birth does not match, got ${other.dateOfBirthFormatted}, expected $dateOfBirthFormatted")
             throw InvalidVaccinationCertificateException(DOB_MISMATCH)
         }
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt
index bf337960d81b34fc0e791adb3b3357908e78fb4c..928f30237a7414e0476e8b5880c417271e3e5298 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/CwaCovidCertificate.kt
@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.covidcertificate.common.certificate
 import de.rki.coronawarnapp.covidcertificate.common.qrcode.QrCodeString
 import de.rki.coronawarnapp.covidcertificate.common.repository.CertificateContainerId
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 
 /**
  * For use with the UI
@@ -17,7 +16,7 @@ interface CwaCovidCertificate {
     val firstName: String?
     val lastName: String
     val fullName: String
-    val dateOfBirth: LocalDate
+    val dateOfBirthFormatted: String
     val personIdentifier: CertificatePersonIdentifier
     val certificateIssuer: String
     val certificateCountry: String
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DateFormatting.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DateFormatting.kt
new file mode 100644
index 0000000000000000000000000000000000000000..8ac128429308e152f8fa8a0ee2bd69824d226fb5
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DateFormatting.kt
@@ -0,0 +1,31 @@
+package de.rki.coronawarnapp.covidcertificate.common.certificate
+
+import org.joda.time.DateTime
+import org.joda.time.DateTimeZone
+import org.joda.time.LocalDate
+import org.joda.time.format.DateTimeFormat
+import org.joda.time.format.DateTimeFormatterBuilder
+import org.joda.time.format.ISODateTimeFormat
+
+internal fun String.formatDate(): String {
+    val regex = "T\\d\\d:\\d\\d:\\d\\d(\\+\\d\\d:\\d\\d)?.*".toRegex()
+    return this.replace(regex, "")
+}
+
+internal fun String.formatDateTime(tz: DateTimeZone = DateTimeZone.getDefault()): String = try {
+    val pattern = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm 'GMT' ZZ")
+    DateTime.parse(
+        this,
+        DateTimeFormatterBuilder()
+            .append(ISODateTimeFormat.date())
+            .append(ISODateTimeFormat.timeParser().withOffsetParsed())
+            .toFormatter()
+    )
+        .toDateTime(tz)
+        .toString(pattern)
+        .removeSuffix(":00")
+} catch (e: Exception) {
+    this
+}
+
+internal fun String.parseLocalDate(): LocalDate = LocalDate.parse(this, DateTimeFormat.forPattern("yyyy-MM-dd"))
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt
index 03d32a9a39f6ef31fae648ce87ec67d6ed612f25..14479a08aa093af93e36d1dfaf12c0b55c513c94 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccQrCodeExtractor.kt
@@ -171,7 +171,7 @@ class DccQrCodeExtractor @Inject constructor(
         val cbor = coseDecoder.decode(this)
         DccData(
             header = headerParser.parse(cbor),
-            certificate = bodyParser.parse(cbor, mode).toCertificate
+            certificate = bodyParser.parse(cbor, mode).asCertificate
         ).also {
             DccQrCodeCensor.addCertificateToCensor(it)
         }.also {
@@ -193,26 +193,26 @@ class DccQrCodeExtractor @Inject constructor(
     private val DccV1.isRecoveryCertificate: Boolean
         get() = this.recoveries?.isNotEmpty() == true
 
-    private val DccV1.toCertificate: DccV1.MetaData
+    private val DccV1.asCertificate: DccV1.MetaData
         get() = when {
             isVaccinationCertificate -> VaccinationDccV1(
                 version = version,
                 nameData = nameData,
-                dateOfBirth = dateOfBirth,
+                dateOfBirthFormatted = dateOfBirthFormatted,
                 personIdentifier = personIdentifier,
                 vaccination = vaccinations!!.first()
             )
             isTestCertificate -> TestDccV1(
                 version = version,
                 nameData = nameData,
-                dateOfBirth = dateOfBirth,
+                dateOfBirthFormatted = dateOfBirthFormatted,
                 personIdentifier = personIdentifier,
                 test = tests!!.first()
             )
             isRecoveryCertificate -> RecoveryDccV1(
                 version = version,
                 nameData = nameData,
-                dateOfBirth = dateOfBirth,
+                dateOfBirthFormatted = dateOfBirthFormatted,
                 personIdentifier = personIdentifier,
                 recovery = recoveries!!.first()
             )
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt
index 8752cfda28be3ad0970f85c7c5589311785b485b..59879f150d4f01c593ed11b307678f16c707b03a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1.kt
@@ -1,13 +1,8 @@
 package de.rki.coronawarnapp.covidcertificate.common.certificate
 
 import com.google.gson.annotations.SerializedName
-import org.joda.time.DateTime
 import org.joda.time.Instant
 import org.joda.time.LocalDate
-import org.joda.time.format.DateTimeFormat
-import org.joda.time.format.DateTimeFormatterBuilder
-import org.joda.time.format.ISODateTimeFormat
-import timber.log.Timber
 
 data class DccV1(
     @SerializedName("ver") val version: String,
@@ -36,14 +31,12 @@ data class DccV1(
             }
     }
 
-    // Can't use lazy because GSON will NULL it, as we have no no-args constructor
-    private var dateOfBirthCache: LocalDate? = null
-    val dateOfBirth: LocalDate
-        get() = dateOfBirthCache ?: dob.toLocalDateLeniently().also { dateOfBirthCache = it }
+    val dateOfBirthFormatted: String
+        get() = dob.formatDate()
 
     val personIdentifier: CertificatePersonIdentifier
         get() = CertificatePersonIdentifier(
-            dateOfBirth = dateOfBirth,
+            dateOfBirthFormatted = dateOfBirthFormatted,
             lastNameStandardized = nameData.familyNameStandardized,
             firstNameStandardized = nameData.givenNameStandardized
         )
@@ -51,7 +44,7 @@ data class DccV1(
     interface MetaData {
         val version: String
         val nameData: NameData
-        val dateOfBirth: LocalDate
+        val dateOfBirthFormatted: String
         val payload: Payload
         val personIdentifier: CertificatePersonIdentifier
     }
@@ -79,12 +72,18 @@ data class DccV1(
         // Unique Certificate Identifier, e.g.  "ci": "urn:uvci:01:NL:PlA8UWS60Z4RZXVALl6GAZ"
         @SerializedName("ci") override val uniqueCertificateIdentifier: String
     ) : Payload {
-        val testedPositiveOn: LocalDate
-            get() = LocalDate.parse(fr)
+        val testedPositiveOnFormatted: String
+            get() = fr.formatDate()
+
+        val validFromFormatted: String
+            get() = df.formatDate()
         val validFrom: LocalDate
-            get() = LocalDate.parse(df)
+            get() = validFromFormatted.parseLocalDate()
+
+        val validUntilFormatted: String
+            get() = du.formatDate()
         val validUntil: LocalDate
-            get() = LocalDate.parse(du)
+            get() = validUntilFormatted.parseLocalDate()
     }
 
     data class VaccinationData(
@@ -109,10 +108,11 @@ data class DccV1(
         // Unique Certificate Identifier, e.g.  "ci": "urn:uvci:01:NL:PlA8UWS60Z4RZXVALl6GAZ"
         @SerializedName("ci") override val uniqueCertificateIdentifier: String
     ) : Payload {
-        // Can't use lazy because GSON will NULL it, as we have no no-args constructor
-        private var vaccinatedAtCache: LocalDate? = null
-        val vaccinatedAt: LocalDate
-            get() = vaccinatedAtCache ?: dt.toLocalDateLeniently().also { vaccinatedAtCache = it }
+        val vaccinatedOnFormatted: String
+            get() = dt.formatDate()
+
+        val vaccinatedOn: LocalDate
+            get() = vaccinatedOnFormatted.parseLocalDate()
     }
 
     data class TestCertificateData(
@@ -125,7 +125,7 @@ data class DccV1(
         // NAA Test Name (only for PCR tests, but not required) "nm": "Roche LightCycler qPCR",
         @SerializedName("nm") val testName: String? = null,
         // RAT Test name and manufacturer (only for RAT tests, but not required)
-        @SerializedName("ma") val testNameAndManufactor: String? = null,
+        @SerializedName("ma") val testNameAndManufacturer: String? = null,
         // Date/Time of Sample Collection (required) "sc": "2021-04-13T14:20:00+00:00"
         @SerializedName("sc") val sc: String,
         // Testing Center (required) "tc": "GGD Fryslân, L-Heliconweg",
@@ -140,31 +140,16 @@ data class DccV1(
 
         val sampleCollectedAt: Instant
             get() = Instant.parse(sc)
-    }
-}
 
-internal fun String.toLocalDateLeniently(): LocalDate = try {
-    LocalDate.parse(this, DateTimeFormat.forPattern("yyyy-MM-dd"))
-} catch (e: Exception) {
-    Timber.w("Irregular date string: %s", this)
-    try {
-        DateTime.parse(
-            this,
-            DateTimeFormatterBuilder()
-                .append(ISODateTimeFormat.date())
-                .append(ISODateTimeFormat.timeParser().withOffsetParsed())
-                .toFormatter()
-        ).toLocalDate()
-    } catch (giveUp: Exception) {
-        Timber.e("Invalid date string: %s", this)
-        throw giveUp
+        val sampleCollectedAtFormatted: String
+            get() = sc.formatDateTime()
     }
 }
 
 data class VaccinationDccV1(
     override val version: String,
     override val nameData: DccV1.NameData,
-    override val dateOfBirth: LocalDate,
+    override val dateOfBirthFormatted: String,
     override val personIdentifier: CertificatePersonIdentifier,
     val vaccination: DccV1.VaccinationData
 ) : DccV1.MetaData {
@@ -175,7 +160,7 @@ data class VaccinationDccV1(
 data class TestDccV1(
     override val version: String,
     override val nameData: DccV1.NameData,
-    override val dateOfBirth: LocalDate,
+    override val dateOfBirthFormatted: String,
     override val personIdentifier: CertificatePersonIdentifier,
     val test: DccV1.TestCertificateData
 ) : DccV1.MetaData {
@@ -186,7 +171,7 @@ data class TestDccV1(
 data class RecoveryDccV1(
     override val version: String,
     override val nameData: DccV1.NameData,
-    override val dateOfBirth: LocalDate,
+    override val dateOfBirthFormatted: String,
     override val personIdentifier: CertificatePersonIdentifier,
     val recovery: DccV1.RecoveryCertificateData
 ) : DccV1.MetaData {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt
index 702d1ef935a1e1cbbbcd56d1de6a6bb1426d8241..fb8cd6cfa3ee2a5ede7771c5634776f6b32cb0ea 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/common/certificate/DccV1Parser.kt
@@ -61,7 +61,7 @@ class DccV1Parser @Inject constructor(
             if (vaccinations.isNullOrEmpty())
                 throw InvalidVaccinationCertificateException(ErrorCode.NO_VACCINATION_ENTRY)
             Timber.w("Lenient: Vaccination data contained multiple entries.")
-            copy(vaccinations = listOf(vaccinations.maxByOrNull { it.vaccinatedAt }!!))
+            copy(vaccinations = listOf(vaccinations.maxByOrNull { it.vaccinatedOn }!!))
         }
         Mode.CERT_REC_STRICT ->
             if (recoveries?.size != 1)
@@ -88,9 +88,10 @@ class DccV1Parser @Inject constructor(
         // check for non null (Gson does not enforce it) + not blank & force date parsing
         require(version.isNotBlank())
         require(nameData.familyNameStandardized.isNotBlank())
-        dateOfBirth
+        dateOfBirthFormatted
         vaccinations?.forEach {
-            it.vaccinatedAt
+            it.vaccinatedOnFormatted
+            it.vaccinatedOn
             require(it.certificateIssuer.isNotBlank())
             require(it.certificateCountry.isNotBlank())
             require(it.marketAuthorizationHolderId.isNotBlank())
@@ -108,7 +109,9 @@ class DccV1Parser @Inject constructor(
             require(it.testType.isNotBlank())
         }
         recoveries?.forEach {
-            it.testedPositiveOn
+            it.testedPositiveOnFormatted
+            it.validFromFormatted
+            it.validUntilFormatted
             it.validFrom
             it.validUntil
             require(it.certificateIssuer.isNotBlank())
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt
index 18fcc6afd8090b88cdab4ba375762df27c159554..98424cb8acf5620172a6b517f1271c7883fccd4f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesExtensions.kt
@@ -65,9 +65,9 @@ private fun Collection<CwaCovidCertificate>.rule3FindRecentLastShot(
         with(it.rawCertificate.vaccination) { doseNumber == totalSeriesOfDoses }
     }
     .filter {
-        Days.daysBetween(it.rawCertificate.vaccination.vaccinatedAt, nowUtc.toLocalDateUtc()).days > 14
+        Days.daysBetween(it.rawCertificate.vaccination.vaccinatedOn, nowUtc.toLocalDateUtc()).days > 14
     }
-    .maxByOrNull { it.rawCertificate.vaccination.vaccinatedAt }
+    .maxByOrNull { it.rawCertificate.vaccination.vaccinatedOn }
 
 /**
  * 4
@@ -103,9 +103,9 @@ private fun Collection<CwaCovidCertificate>.rule5findTooRecentFinalShot(
         with(it.rawCertificate.vaccination) { doseNumber == totalSeriesOfDoses }
     }
     .filter {
-        Days.daysBetween(it.rawCertificate.vaccination.vaccinatedAt, nowUtc.toLocalDateUtc()).days <= 14
+        Days.daysBetween(it.rawCertificate.vaccination.vaccinatedOn, nowUtc.toLocalDateUtc()).days <= 14
     }
-    .maxByOrNull { it.rawCertificate.vaccination.vaccinatedAt }
+    .maxByOrNull { it.rawCertificate.vaccination.vaccinatedOn }
 
 /**
  * 6
@@ -116,7 +116,7 @@ private fun Collection<CwaCovidCertificate>.rule5findTooRecentFinalShot(
  */
 private fun Collection<CwaCovidCertificate>.rule6findOtherVaccinations(): CwaCovidCertificate? = this
     .filterIsInstance<VaccinationCertificate>()
-    .maxByOrNull { it.rawCertificate.vaccination.vaccinatedAt }
+    .maxByOrNull { it.rawCertificate.vaccination.vaccinatedOn }
 
 /**
  * 7
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt
index 2586d6d79961ae5a40872c44b74054589aad945c..cfe26a3967e69aaf70ea7bddf4eea0d913bcfdb9 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/CwaUserCard.kt
@@ -5,7 +5,6 @@ import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificates
 import de.rki.coronawarnapp.covidcertificate.person.ui.details.PersonDetailsAdapter
 import de.rki.coronawarnapp.databinding.CwaUserCardItemBinding
-import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat
 import de.rki.coronawarnapp.util.lists.diffutil.HasPayloadDiffer
 
 class CwaUserCard(parent: ViewGroup) :
@@ -25,9 +24,9 @@ class CwaUserCard(parent: ViewGroup) :
         val certificate = curItem.personCertificates.highestPriorityCertificate
         curItem.apply {
             userName.text = certificate.fullName
-            birthDate.text = context.getString(
+            dateOfBirth.text = context.getString(
                 R.string.person_details_cwa_user_birthdate,
-                certificate.dateOfBirth.toDayFormat()
+                certificate.dateOfBirthFormatted
             )
             cwaUserSwitch.isChecked = curItem.personCertificates.isCwaUser
             cwaUserSwitch.setOnCheckedChangeListener { _, isChecked -> onSwitch(isChecked) }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt
index 5b153148bf1e028a83ba1a0e186381cf8fa89986..8a9ea58e08d68036b7526ae2aa2f3f9c1a6cd8d8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/PersonDetailsQrCard.kt
@@ -47,7 +47,7 @@ class PersonDetailsQrCard(parent: ViewGroup) :
                     qrTitle.text = context.getString(R.string.vaccination_details_subtitle)
                     qrSubtitle.text = context.getString(
                         R.string.vaccination_certificate_vaccinated_on,
-                        certificate.vaccinatedAt.toShortDayFormat()
+                        certificate.vaccinatedOn.toShortDayFormat()
                     )
                 }
                 is RecoveryCertificate -> {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt
index e8b3d6bb0bcb887bb6e88e7bce258ba207456064..2aa22071c84677c2aa50004ff7f060efae9f193b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/items/VaccinationCertificateCard.kt
@@ -37,7 +37,7 @@ class VaccinationCertificateCard(parent: ViewGroup) :
         )
         certificateDate.text = context.getString(
             R.string.vaccination_certificate_vaccinated_on,
-            certificate.vaccinatedAt.toShortDayFormat()
+            certificate.vaccinatedOn.toShortDayFormat()
         )
         currentCertificate.isVisible = curItem.isCurrentCertificate
         val icon = when {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt
index e47e5d6df808dbbb3344f602cf5333a18625e43d..1745c91a8b5766513291ee57f243f7429bb65a8d 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/RecoveryCertificate.kt
@@ -7,7 +7,10 @@ import org.joda.time.LocalDate
 
 interface RecoveryCertificate : CwaCovidCertificate {
     override val containerId: RecoveryCertificateContainerId
-    val testedPositiveOn: LocalDate
+    val testedPositiveOnFormatted: String
+    val validFromFormatted: String
+    val validUntilFormatted: String
+
     val validFrom: LocalDate
     val validUntil: LocalDate
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt
index 6bec0fa62b56c9250b7d0385ea8bba687e237931..11a82d4ca809ad8d8e337454b79f4cbee3c5bd6c 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/recovery/core/storage/RecoveryCertificateContainer.kt
@@ -62,16 +62,22 @@ data class RecoveryCertificateContainer(
             override val fullName: String
                 get() = certificate.nameData.fullName
 
-            override val dateOfBirth: LocalDate
-                get() = certificate.dateOfBirth
+            override val dateOfBirthFormatted: String
+                get() = certificate.dateOfBirthFormatted
 
-            override val testedPositiveOn: LocalDate
-                get() = recoveryCertificate.testedPositiveOn
-            override val validFrom: LocalDate
-                get() = recoveryCertificate.validFrom
+            override val testedPositiveOnFormatted: String
+                get() = recoveryCertificate.testedPositiveOnFormatted
+
+            override val validUntilFormatted: String
+                get() = recoveryCertificate.validUntilFormatted
             override val validUntil: LocalDate
                 get() = recoveryCertificate.validUntil
 
+            override val validFromFormatted: String
+                get() = recoveryCertificate.validFromFormatted
+            override val validFrom: LocalDate
+                get() = recoveryCertificate.validFrom
+
             override val certificateIssuer: String
                 get() = header.issuer
             override val certificateCountry: String
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt
index 91aa04767cda6fa7665a12d723c608b340debbfc..47004fe8c4de0d88b263c42b6fb8999fca37cd3f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/TestCertificate.kt
@@ -25,6 +25,7 @@ interface TestCertificate : CwaCovidCertificate {
      */
     val testNameAndManufacturer: String?
     val sampleCollectedAt: Instant
+    val sampleCollectedAtFormatted: String
     val testCenter: String?
     val registeredAt: Instant
     val isUpdatingData: Boolean
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt
index c58017f612adf4537fa27997fc4a9593ca3b7951..7302fae2278571d6a8b63ff13173359200c3a343 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/core/storage/TestCertificateContainer.kt
@@ -14,7 +14,6 @@ import de.rki.coronawarnapp.covidcertificate.test.core.storage.types.GenericTest
 import de.rki.coronawarnapp.covidcertificate.test.core.storage.types.RetrievedTestCertificate
 import de.rki.coronawarnapp.covidcertificate.valueset.valuesets.TestCertificateValueSets
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import java.util.Locale
 
 data class TestCertificateContainer(
@@ -89,8 +88,8 @@ data class TestCertificateContainer(
             override val fullName: String
                 get() = certificate.nameData.fullName
 
-            override val dateOfBirth: LocalDate
-                get() = certificate.dateOfBirth
+            override val dateOfBirthFormatted: String
+                get() = certificate.dateOfBirthFormatted
 
             override val targetName: String
                 get() = valueSet?.getDisplayText(testCertificate.targetId) ?: testCertificate.targetId
@@ -101,9 +100,11 @@ data class TestCertificateContainer(
             override val testName: String?
                 get() = testCertificate.testName?.let { valueSet?.getDisplayText(it) ?: it }
             override val testNameAndManufacturer: String?
-                get() = testCertificate.testNameAndManufactor?.let { valueSet?.getDisplayText(it) ?: it }
+                get() = testCertificate.testNameAndManufacturer?.let { valueSet?.getDisplayText(it) ?: it }
             override val sampleCollectedAt: Instant
                 get() = testCertificate.sampleCollectedAt
+            override val sampleCollectedAtFormatted: String
+                get() = testCertificate.sampleCollectedAtFormatted
             override val testCenter: String?
                 get() = testCertificate.testCenter
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt
index d6c6f7ef5f3648c44c37ac17d36f59a0a039d445..fc3547f9cd1595045ab0ce3bb0a649143f54cbbc 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/test/ui/details/TestCertificateDetailsFragment.kt
@@ -18,10 +18,6 @@ import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate
 import de.rki.coronawarnapp.databinding.FragmentTestCertificateDetailsBinding
 import de.rki.coronawarnapp.ui.qrcode.fullscreen.QrCodeFullScreenFragmentArgs
 import de.rki.coronawarnapp.ui.view.onOffsetChange
-import de.rki.coronawarnapp.util.TimeAndDateExtensions.toDayFormat
-import de.rki.coronawarnapp.util.TimeAndDateExtensions.toHyphenSeparatedDate
-import de.rki.coronawarnapp.util.TimeAndDateExtensions.toShortTimeFormat
-import de.rki.coronawarnapp.util.TimeAndDateExtensions.toUserTimeZone
 import de.rki.coronawarnapp.util.di.AutoInject
 import de.rki.coronawarnapp.util.ui.popBackStack
 import de.rki.coronawarnapp.util.ui.viewBinding
@@ -63,17 +59,13 @@ class TestCertificateDetailsFragment : Fragment(R.layout.fragment_test_certifica
     private fun FragmentTestCertificateDetailsBinding.onCertificateReady(
         testCertificate: TestCertificate
     ) {
-        val testDateTime = testCertificate.sampleCollectedAt.toUserTimeZone()
-
-        name.text = testCertificate.run { "$lastName, $firstName" }
-        birthDate.text = testCertificate.dateOfBirth.toHyphenSeparatedDate()
+        name.text = testCertificate.fullName
+        dateOfBirth.text = testCertificate.dateOfBirthFormatted
         diseaseType.text = testCertificate.targetName
         testType.text = testCertificate.testType
         testName.text = testCertificate.testName
-        testDate.text = "%s %s".format(
-            testDateTime.toDayFormat(),
-            testDateTime.toShortTimeFormat()
-        )
+        testManufacturer.text = testCertificate.testNameAndManufacturer
+        testDate.text = testCertificate.sampleCollectedAtFormatted
         testResult.text = testCertificate.testResult
         certificateCountry.text = testCertificate.certificateCountry
         certificateIssuer.text = testCertificate.certificateIssuer
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt
index 3335f2ccb82f8fe3b767a4107fd39cf4a4f8d20b..f1b25d49ff1df25a0d3a77403411f812c51a808a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinatedPerson.kt
@@ -8,7 +8,6 @@ import de.rki.coronawarnapp.covidcertificate.valueset.valuesets.VaccinationValue
 import de.rki.coronawarnapp.util.TimeAndDateExtensions.toLocalDateUtc
 import org.joda.time.Duration
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 
 data class VaccinatedPerson(
     internal val data: VaccinatedPersonData,
@@ -36,11 +35,11 @@ data class VaccinatedPerson(
     val fullName: String
         get() = vaccinationCertificates.first().fullName
 
-    val dateOfBirth: LocalDate
-        get() = vaccinationCertificates.first().dateOfBirth
+    val dateOfBirthFormatted: String
+        get() = vaccinationCertificates.first().dateOfBirthFormatted
 
     val getMostRecentVaccinationCertificate: VaccinationCertificate
-        get() = vaccinationCertificates.maxByOrNull { it.vaccinatedAt } ?: throw IllegalStateException(
+        get() = vaccinationCertificates.maxByOrNull { it.vaccinatedOnFormatted } ?: throw IllegalStateException(
             "Every Vaccinated Person needs to have at least one vaccinationCertificate"
         )
 
@@ -56,10 +55,12 @@ data class VaccinatedPerson(
     fun getTimeUntilImmunity(nowUTC: Instant = Instant.now()): Duration? {
         val newestFullDose = vaccinationCertificates
             .filter { it.doseNumber == it.totalSeriesOfDoses }
-            .maxByOrNull { it.vaccinatedAt }
+            .maxByOrNull { it.vaccinatedOn }
             ?: return null
 
-        val immunityAt = newestFullDose.vaccinatedAt.toDateTimeAtStartOfDay().plus(IMMUNITY_WAITING_PERIOD)
+        val immunityAt = newestFullDose.vaccinatedOn
+            .toDateTimeAtStartOfDay()
+            .plus(IMMUNITY_WAITING_PERIOD)
 
         return Duration(nowUTC.toLocalDateUtc().toDateTimeAtStartOfDay(), immunityAt)
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt
index 39ae0f2a9cb3336b99842d031b48e30c4030a9e1..7b98c818fe17afe6be87af711b072fed82d336b5 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationCertificate.kt
@@ -8,7 +8,8 @@ import org.joda.time.LocalDate
 interface VaccinationCertificate : CwaCovidCertificate {
     override val containerId: VaccinationCertificateContainerId
 
-    val vaccinatedAt: LocalDate
+    val vaccinatedOn: LocalDate
+    val vaccinatedOnFormatted: String
     val targetDisease: String
     val vaccineTypeName: String
     val vaccineManufacturer: String
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt
index d2b5ba3b351eb50268dd56b84c497bae424b29d9..c33cc3da9416c48129d954a1b9ad6f80ef22db20 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainer.kt
@@ -84,11 +84,13 @@ data class VaccinationContainer internal constructor(
         override val fullName: String
             get() = certificate.nameData.fullName
 
-        override val dateOfBirth: LocalDate
-            get() = certificate.dateOfBirth
+        override val dateOfBirthFormatted: String
+            get() = certificate.dateOfBirthFormatted
 
-        override val vaccinatedAt: LocalDate
-            get() = vaccination.vaccinatedAt
+        override val vaccinatedOn: LocalDate
+            get() = vaccination.vaccinatedOn
+        override val vaccinatedOnFormatted: String
+            get() = vaccination.vaccinatedOnFormatted
 
         override val targetDisease: String
             get() = valueSet?.getDisplayText(vaccination.targetId) ?: vaccination.targetId
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt
index e43f3bb535ee895d8c41b14f665ddd7c61d1ba75..8824a33845ac253d11b611c90c51672f96fc3060 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/vaccination/ui/details/VaccinationDetailsFragment.kt
@@ -16,7 +16,6 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinationCertifi
 import de.rki.coronawarnapp.databinding.FragmentVaccinationDetailsBinding
 import de.rki.coronawarnapp.ui.qrcode.fullscreen.QrCodeFullScreenFragmentArgs
 import de.rki.coronawarnapp.ui.view.onOffsetChange
-import de.rki.coronawarnapp.util.TimeAndDateExtensions.toHyphenSeparatedDate
 import de.rki.coronawarnapp.util.di.AutoInject
 import de.rki.coronawarnapp.util.ui.popBackStack
 import de.rki.coronawarnapp.util.ui.viewBinding
@@ -111,7 +110,7 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail
         certificate: VaccinationCertificate
     ) {
         fullname.text = certificate.fullName
-        dateOfBirth.text = certificate.dateOfBirth.toHyphenSeparatedDate()
+        dateOfBirth.text = certificate.dateOfBirthFormatted
         medialProductName.text = certificate.medicalProductName
         vaccineTypeName.text = certificate.vaccineTypeName
         targetDisease.text = certificate.targetDisease
@@ -121,7 +120,7 @@ class VaccinationDetailsFragment : Fragment(R.layout.fragment_vaccination_detail
             certificate.doseNumber,
             certificate.totalSeriesOfDoses
         )
-        vaccinatedAt.text = certificate.vaccinatedAt.toHyphenSeparatedDate()
+        vaccinatedAt.text = certificate.vaccinatedOnFormatted
         certificateCountry.text = certificate.certificateCountry
         certificateIssuer.text = certificate.certificateIssuer
         certificateId.text = certificate.certificateId
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 f36aa29239360c9db6ff90613ce1c76f9cda1913..2ce3d7560b64fdce1e9c1badd3ea5d5f965ded7f 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
@@ -155,11 +155,6 @@ object TimeAndDateExtensions {
      * Returns a readable date String with the format "dd.MM.yy" like 23.05.89 of an LocalDate
      */
     fun LocalDate.toShortDayFormat(): String = toString(dayFormatter2DigitYear)
-
-    /**
-     * Returns a readable date String with the format "yyy.MM.dd" like 1983-05-23 of an LocalDate
-     */
-    fun LocalDate.toHyphenSeparatedDate(): String = toString(dateFormatterWithHyphenSeparator)
 }
 
 typealias HourInterval = Long
diff --git a/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml b/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml
index c58f96137ac6e57cfb3b61abaccd7eed500b62f6..70d7eaed7f637ecd9a4b7a3bf3eb5bcc1243f2b2 100644
--- a/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml
+++ b/Corona-Warn-App/src/main/res/layout/cwa_user_card_item.xml
@@ -23,7 +23,7 @@
         tools:text="Andrea Schneider" />
 
     <TextView
-        android:id="@+id/birth_date"
+        android:id="@+id/date_of_birth"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:text="@string/person_details_cwa_user_birthdate"
@@ -47,7 +47,7 @@
         android:layout_marginTop="@dimen/spacing_tiny"
         android:text="@string/person_details_cwa_user_description"
         android:textSize="14sp"
-        app:layout_constraintStart_toStartOf="@id/birth_date"
-        app:layout_constraintTop_toBottomOf="@id/birth_date" />
+        app:layout_constraintStart_toStartOf="@id/date_of_birth"
+        app:layout_constraintTop_toBottomOf="@id/date_of_birth" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml
index 33ee479ce01ba63221fafcdea6b5792a6f3646ff..990c83c47198c6f6f59cf49b8659586d247b7266 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_test_certificate_details.xml
@@ -155,7 +155,7 @@
                     android:text="@string/covid_certificate_attribute_date_of_birth" />
 
                 <TextView
-                    android:id="@+id/birth_date"
+                    android:id="@+id/date_of_birth"
                     style="@style/body1"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -325,4 +325,4 @@
 
     </androidx.core.widget.NestedScrollView>
 
-</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
+</androidx.coordinatorlayout.widget.CoordinatorLayout>
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt
index 4f6210b460b44d961778dbd94e736f717dbcd91b..b55c776e22798c341697a21f51ed347df5dab451 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/censors/vaccination/DccQrCodeCensorTest.kt
@@ -8,7 +8,6 @@ import io.kotest.matchers.shouldBe
 import io.mockk.MockKAnnotations
 import io.mockk.mockk
 import kotlinx.coroutines.test.runBlockingTest
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.AfterEach
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
@@ -28,7 +27,7 @@ internal class DccQrCodeCensorTest {
                 givenName = "Bob",
                 givenNameStandardized = "BOB"
             ),
-            dateOfBirth = LocalDate.parse("1969-11-16"),
+            dateOfBirthFormatted = "1969-11-16",
             vaccination = DccV1.VaccinationData(
                 targetId = "12345",
                 vaccineId = "1214765",
@@ -42,7 +41,7 @@ internal class DccQrCodeCensorTest {
                 uniqueCertificateIdentifier = "urn:uvci:01:NL:PlA8UWS60Z4RZXVALl6GAZ"
             ),
             personIdentifier = CertificatePersonIdentifier(
-                dateOfBirth = LocalDate.parse("1969-11-16"),
+                dateOfBirthFormatted = "1969-11-16",
                 lastNameStandardized = "KEVIN",
                 firstNameStandardized = "BOB"
             )
@@ -82,7 +81,7 @@ internal class DccQrCodeCensorTest {
             .compile()!!.censored shouldBe "Hello my name is nameData/familyName nameData/givenName, i was born at " +
             "covidCertificate/dateOfBirth, i have been vaccinated with: vaccinationData/targetId " +
             "vaccinationData/vaccineId vaccinationData/medicalProductId" +
-            " vaccinationData/marketAuthorizationHolderId vaccinationData/vaccinatedAt" +
+            " vaccinationData/marketAuthorizationHolderId vaccinationData/vaccinatedOnFormatted" +
             " vaccinationData/certificateCountry vaccinationData/certificateIssuer" +
             " vaccinationData/uniqueCertificateIdentifier"
     }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt
index 407c664a5d0905b0905c756db7a95341a4bab5ff..5eda4db0fb8a0512a8aaaf1310aaec83cc2017b0 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/CertificatePersonIdentifierTest.kt
@@ -7,19 +7,18 @@ import de.rki.coronawarnapp.covidcertificate.common.exception.InvalidVaccination
 import io.kotest.assertions.throwables.shouldNotThrowAny
 import io.kotest.assertions.throwables.shouldThrow
 import io.kotest.matchers.shouldBe
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.Test
 import testhelpers.BaseTest
 
 class CertificatePersonIdentifierTest : BaseTest() {
     private val testPersonMaxData = CertificatePersonIdentifier(
-        dateOfBirth = LocalDate.parse("1966-11-11"),
+        dateOfBirthFormatted = "1966-11-11",
         firstNameStandardized = "ANDREAS",
         lastNameStandardized = "ASTRA<EINS"
     )
 
     private val testPersonMin = CertificatePersonIdentifier(
-        dateOfBirth = LocalDate.parse("1900-01-01"),
+        dateOfBirthFormatted = "1900-01-01",
         lastNameStandardized = "#",
         firstNameStandardized = null
     )
@@ -40,7 +39,7 @@ class CertificatePersonIdentifierTest : BaseTest() {
     fun `person equality`() {
         val person1 = testPersonMaxData
         val person2 = CertificatePersonIdentifier(
-            dateOfBirth = LocalDate.parse("1966-11-11"),
+            dateOfBirthFormatted = "1966-11-11",
             firstNameStandardized = "ANDREAS",
             lastNameStandardized = "ASTRA<EINS"
         )
@@ -65,7 +64,7 @@ class CertificatePersonIdentifierTest : BaseTest() {
         }.errorCode shouldBe NAME_MISMATCH
 
         shouldThrow<InvalidVaccinationCertificateException> {
-            testPersonMaxData.requireMatch(testPersonMaxData.copy(dateOfBirth = LocalDate.parse("1900-12-31")))
+            testPersonMaxData.requireMatch(testPersonMaxData.copy(dateOfBirthFormatted = "1900-12-31"))
         }.errorCode shouldBe DOB_MISMATCH
     }
 }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/DateFormattingTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/DateFormattingTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..f8763397b84a1adf3f5de1d5141870b1e16289d2
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/common/DateFormattingTest.kt
@@ -0,0 +1,40 @@
+package de.rki.coronawarnapp.covidcertificate.common
+
+import de.rki.coronawarnapp.covidcertificate.common.certificate.formatDate
+import de.rki.coronawarnapp.covidcertificate.common.certificate.formatDateTime
+import io.kotest.matchers.shouldBe
+import org.joda.time.DateTimeZone
+import org.junit.jupiter.api.Test
+import testhelpers.BaseTest
+
+class DateFormattingTest : BaseTest() {
+
+    @Test
+    fun `format date of birth`() {
+        "1978-01-26T00:00:00".formatDate() shouldBe "1978-01-26"
+        "1964-08-12".formatDate() shouldBe "1964-08-12"
+        "1964-08".formatDate() shouldBe "1964-08"
+        "1964".formatDate() shouldBe "1964"
+        "".formatDate() shouldBe ""
+        "lorem-ipsum".formatDate() shouldBe "lorem-ipsum"
+    }
+
+    @Test
+    fun `format date`() {
+        "1964-08-12".formatDate() shouldBe "1964-08-12"
+        "1978-01-26T00:00:00".formatDate() shouldBe "1978-01-26"
+        "2021-03-18T15:31:00+02:00".formatDate() shouldBe "2021-03-18"
+        "lorem-ipsum".formatDate() shouldBe "lorem-ipsum"
+    }
+
+    @Test
+    fun `format date time`() {
+        val tz = DateTimeZone.forID("Europe/Berlin")
+        "2021-08-20T10:03:12Z".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02"
+        "2021-08-20T12:03:12+02".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02"
+        "2021-08-20T12:03:12+0200".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02"
+        "2021-08-20T12:03:12+02:00".formatDateTime(tz) shouldBe "2021-08-20 12:03 GMT +02"
+        "2021-08-20T09:03:12Z".formatDateTime(DateTimeZone.forID("HST")) shouldBe "2021-08-19 23:03 GMT -10"
+        "lorem-ipsum".formatDateTime() shouldBe "lorem-ipsum"
+    }
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt
index cb36b151c5212d10f10a31317f7626232f67450d..142fb17dd6c203b407bc896a7dbcb82acd274319 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesStorageTest.kt
@@ -8,7 +8,6 @@ import io.kotest.matchers.shouldBe
 import io.mockk.MockKAnnotations
 import io.mockk.every
 import io.mockk.impl.annotations.MockK
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
 import testhelpers.BaseTest
@@ -56,7 +55,7 @@ class PersonCertificatesStorageTest : BaseTest() {
         val testIdentifier = CertificatePersonIdentifier(
             firstNameStandardized = "firstname",
             lastNameStandardized = "lastname",
-            dateOfBirth = LocalDate.parse("1999-12-24")
+            dateOfBirthFormatted = "1999-12-24"
         )
 
         createInstance().apply {
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt
index a1337657922234ea74c2810d4834ed07d91af629..e05b1a76a4b88d165fd6bdd73afe3f37e785da94 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModelTest.kt
@@ -35,8 +35,6 @@ import io.mockk.just
 import io.mockk.mockk
 import kotlinx.coroutines.flow.flowOf
 import org.joda.time.Instant
-import org.joda.time.LocalDate
-import org.joda.time.format.DateTimeFormat
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
 import org.junit.jupiter.api.extension.ExtendWith
@@ -112,7 +110,7 @@ class PersonDetailsViewModelTest : BaseTest() {
             every { getVaccinationStatus(any()) } returns VaccinatedPerson.Status.IMMUNITY
         }
         every { vaccinationRepository.vaccinationInfos } returns flowOf(setOf(vaccinatedPerson))
-        personDetailsViewModel("b32983bc6be9a6f31055c7aa34f2767c34a1e99940016e91e35acfdc9bbb7e51")
+        personDetailsViewModel(certificatePersonIdentifier.codeSHA256)
             .apply {
                 uiState.getOrAwaitValue().apply {
                     get(0) as PersonDetailsQrCard.Item
@@ -164,7 +162,7 @@ class PersonDetailsViewModelTest : BaseTest() {
         }
         every { containerId } returns tcsContainerId
         every { testType } returns "PCR-Test"
-        every { dateOfBirth } returns LocalDate.parse("18.04.1943", DateTimeFormat.forPattern("dd.MM.yyyy"))
+        every { dateOfBirthFormatted } returns "18.04.1943"
         every { sampleCollectedAt } returns Instant.parse("2021-05-31T11:35:00.000Z")
         every { registeredAt } returns Instant.parse("2021-05-21T11:35:00.000Z")
         every { personIdentifier } returns certificatePersonIdentifier
@@ -179,11 +177,11 @@ class PersonDetailsViewModelTest : BaseTest() {
                 every { vaccination } returns mockk<DccV1.VaccinationData>().apply {
                     every { doseNumber } returns number
                     every { totalSeriesOfDoses } returns 2
-                    every { vaccinatedAt } returns localDate
+                    every { vaccinatedOn } returns localDate
                 }
             }
             every { containerId } returns vcContainerId
-            every { vaccinatedAt } returns localDate
+            every { vaccinatedOn } returns localDate
             every { personIdentifier } returns certificatePersonIdentifier
             every { doseNumber } returns number
             every { totalSeriesOfDoses } returns 2
@@ -201,7 +199,7 @@ class PersonDetailsViewModelTest : BaseTest() {
         }
 
     private val certificatePersonIdentifier = CertificatePersonIdentifier(
-        dateOfBirth = LocalDate.parse("01.01.2020", DateTimeFormat.forPattern("dd.MM.yyyy")),
+        dateOfBirthFormatted = "01.01.2020",
         firstNameStandardized = "firstNameStandardized",
         lastNameStandardized = "lastNameStandardized",
     )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt
index 7725b08c8ae95ff86fa4d6261f36bafaebda346d..97ecd232284d8d7a1dc0f980c0a4894d5dc460b3 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/person/ui/overview/PersonCertificatesData.kt
@@ -8,7 +8,6 @@ import de.rki.coronawarnapp.covidcertificate.person.core.PersonCertificates
 import de.rki.coronawarnapp.covidcertificate.test.core.TestCertificate
 import io.mockk.mockk
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import java.util.UUID
 
 object PersonCertificatesData {
@@ -54,6 +53,7 @@ fun testCertificate(
     override val testName: String = "testName"
     override val testNameAndManufacturer: String = "testNameAndManufacturer"
     override val sampleCollectedAt: Instant = Instant.EPOCH
+    override val sampleCollectedAtFormatted: String = ""
     override val testCenter: String = ""
     override val registeredAt: Instant = Instant.EPOCH
     override val isUpdatingData: Boolean = isUpdating
@@ -65,9 +65,9 @@ fun testCertificate(
     override val firstName: String = "firstName"
     override val lastName: String = "lastName"
     override val fullName: String = fullName
-    override val dateOfBirth: LocalDate = LocalDate.now()
+    override val dateOfBirthFormatted = "1981-03-20"
     override val personIdentifier = CertificatePersonIdentifier(
-        dateOfBirth = LocalDate(System.currentTimeMillis()),
+        dateOfBirthFormatted = "1981-03-20",
         lastNameStandardized = "lastNameStandardized",
         firstNameStandardized = "firstNameStandardized"
     )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt
index 128df76535cfd9dee18634df2556b31c39073e91..c60580c210e72a1e5892706da6549c707dee8c99 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateDccParserTest.kt
@@ -6,7 +6,6 @@ import de.rki.coronawarnapp.covidcertificate.common.certificate.DccV1Parser
 import de.rki.coronawarnapp.covidcertificate.test.TestData
 import io.kotest.matchers.shouldBe
 import okio.ByteString.Companion.decodeHex
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.Test
 
 class TestCertificateDccParserTest {
@@ -25,7 +24,7 @@ class TestCertificateDccParserTest {
                 givenNameStandardized shouldBe "GABRIELE"
             }
             dob shouldBe "1998-02-26"
-            dateOfBirth shouldBe LocalDate.parse("1998-02-26")
+            dateOfBirthFormatted shouldBe "1998-02-26"
             version shouldBe "1.2.1"
 
             with(tests!!.single()) {
@@ -36,7 +35,7 @@ class TestCertificateDccParserTest {
                 sampleCollectedAt shouldBe org.joda.time.Instant.parse("2021-02-20T12:34:56+00:00")
                 testType shouldBe "LP217198-3"
                 testCenter shouldBe "Testing center Vienna 1"
-                testNameAndManufactor shouldBe "1232"
+                testNameAndManufacturer shouldBe "1232"
                 testResult shouldBe "260415000"
             }
         }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt
index c9ee9ee0acd0d3e9c1f231a06fd8e153536bb1fe..1a0906ebfce13d5e91eedd98dc215dba52a03c25 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/test/core/qrcode/TestCertificateQRCodeExtractorTest.kt
@@ -14,7 +14,6 @@ import io.kotest.assertions.throwables.shouldThrow
 import io.kotest.matchers.shouldBe
 import okio.ByteString.Companion.decodeBase64
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.Test
 import testhelpers.BaseTest
 
@@ -40,7 +39,7 @@ class TestCertificateQRCodeExtractorTest : BaseTest() {
                 givenName shouldBe "Gabriele"
                 givenNameStandardized shouldBe "GABRIELE"
             }
-            dateOfBirth shouldBe LocalDate.parse("1998-02-26")
+            dateOfBirthFormatted shouldBe "1998-02-26"
             version shouldBe "1.2.1"
 
             with(test) {
@@ -51,7 +50,7 @@ class TestCertificateQRCodeExtractorTest : BaseTest() {
                 sampleCollectedAt shouldBe Instant.parse("2021-02-20T12:34:56+00:00")
                 testType shouldBe "LP217198-3"
                 testCenter shouldBe "Testing center Vienna 1"
-                testNameAndManufactor shouldBe "1232"
+                testNameAndManufacturer shouldBe "1232"
                 testResult shouldBe "260415000"
             }
         }
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt
index 4811bef61e55a7120c4ea7abc756b354940f600c..d0c2bd8391d792bcd0c6ca785072c7ea1aca26a7 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/VaccinationTestData.kt
@@ -10,7 +10,6 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.core.qrcode.Vaccination
 import de.rki.coronawarnapp.covidcertificate.vaccination.core.repository.storage.VaccinatedPersonData
 import de.rki.coronawarnapp.covidcertificate.vaccination.core.repository.storage.VaccinationContainer
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import javax.inject.Inject
 
 @Suppress("MaxLineLength")
@@ -30,7 +29,7 @@ class VaccinationTestData @Inject constructor(
             familyName = "Astrá Eins",
             familyNameStandardized = "ASTRA<EINS",
         ),
-        dateOfBirth = LocalDate.parse("1966-11-11"),
+        dateOfBirthFormatted = "1966-11-11",
         vaccination =
         DccV1.VaccinationData(
             targetId = "840539006",
@@ -45,7 +44,7 @@ class VaccinationTestData @Inject constructor(
             uniqueCertificateIdentifier = "01DE/00001/1119305005/7T1UG87G61Y7NRXIBQJDTYQ9#S",
         ),
         personIdentifier = CertificatePersonIdentifier(
-            dateOfBirth = LocalDate.parse("1966-11-11"),
+            dateOfBirthFormatted = "1966-11-11",
             lastNameStandardized = "ASTRA<EINS",
             firstNameStandardized = "ANDREAS"
         )
@@ -86,7 +85,7 @@ class VaccinationTestData @Inject constructor(
             familyName = "Astrá Eins",
             familyNameStandardized = "ASTRA<EINS",
         ),
-        dateOfBirth = LocalDate.parse("1966-11-11"),
+        dateOfBirthFormatted = "1966-11-11",
         vaccination = DccV1.VaccinationData(
             targetId = "840539006",
             vaccineId = "1119305005",
@@ -100,7 +99,7 @@ class VaccinationTestData @Inject constructor(
             uniqueCertificateIdentifier = "01DE/00001/1119305005/6IPYBAIDWEWRWW73QEP92FQSN#S",
         ),
         personIdentifier = CertificatePersonIdentifier(
-            dateOfBirth = LocalDate.parse("1966-11-11"),
+            dateOfBirthFormatted = "1966-11-11",
             lastNameStandardized = "ASTRA<EINS",
             firstNameStandardized = "ANDREAS"
         )
@@ -145,7 +144,7 @@ class VaccinationTestData @Inject constructor(
             familyName = "Johnson Gültig",
             familyNameStandardized = "JOHNSON<GUELTIG",
         ),
-        dateOfBirth = LocalDate.parse("1966-11-11"),
+        dateOfBirthFormatted = "1966-11-11",
         vaccination = DccV1.VaccinationData(
             targetId = "840539006",
             vaccineId = "1119305005",
@@ -159,7 +158,7 @@ class VaccinationTestData @Inject constructor(
             uniqueCertificateIdentifier = "01DE/00001/1119305005/3H24U2KVOTPCSINK7N64F2OB9#S",
         ),
         personIdentifier = CertificatePersonIdentifier(
-            dateOfBirth = LocalDate.parse("1966-11-11"),
+            dateOfBirthFormatted = "1966-11-11",
             lastNameStandardized = "JOHNSON<GUELTIG",
             firstNameStandardized = "BORIS"
         )
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt
index fe132556f40f9e14103c9e7436c125ece5ba8580..1146c6b8dd8b33d05954c3814e6d49964f7d1e23 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/qrcode/DccQrCodeExtractorTest.kt
@@ -18,7 +18,6 @@ import de.rki.coronawarnapp.covidcertificate.vaccination.core.VaccinationTestDat
 import io.kotest.assertions.throwables.shouldThrow
 import io.kotest.matchers.shouldBe
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
 import testhelpers.BaseTest
@@ -64,7 +63,7 @@ class DccQrCodeExtractorTest : BaseTest() {
                 givenName shouldBe "Gabriele"
                 givenNameStandardized shouldBe "GABRIELE"
             }
-            dateOfBirth shouldBe LocalDate.parse("1998-02-26")
+            dateOfBirthFormatted shouldBe "1998-02-26"
             version shouldBe "1.0.0"
 
             with(vaccination) {
@@ -78,7 +77,7 @@ class DccQrCodeExtractorTest : BaseTest() {
                 totalSeriesOfDoses shouldBe 2
                 targetId shouldBe "840539006"
                 vaccineId shouldBe "1119305005"
-                vaccinatedAt shouldBe LocalDate.parse("2021-02-18")
+                vaccinatedOnFormatted shouldBe "2021-02-18"
             }
         }
     }
@@ -188,7 +187,7 @@ class DccQrCodeExtractorTest : BaseTest() {
                 givenName shouldBe "СТАМО ГЕОРГИЕВ"
                 givenNameStandardized shouldBe "STAMO<GEORGIEV"
             }
-            dateOfBirth shouldBe LocalDate.parse("1978-01-26")
+            dateOfBirthFormatted shouldBe "1978-01-26"
             version shouldBe "1.0.0"
 
             vaccination.apply {
@@ -202,7 +201,7 @@ class DccQrCodeExtractorTest : BaseTest() {
                 totalSeriesOfDoses shouldBe 2
                 targetId shouldBe "840539006"
                 vaccineId shouldBe "J07BX03"
-                vaccinatedAt shouldBe LocalDate.parse("2021-03-09")
+                vaccinatedOnFormatted shouldBe "2021-03-09"
             }
         }
     }
@@ -250,8 +249,8 @@ class DccQrCodeExtractorTest : BaseTest() {
             mode = Mode.CERT_VAC_STRICT
         ).apply {
             this as VaccinationCertificateQRCode
-            data.certificate.dateOfBirth shouldBe LocalDate.parse("1964-08-12")
-            data.certificate.vaccination.vaccinatedAt shouldBe LocalDate.parse("2021-05-29")
+            data.certificate.dateOfBirthFormatted shouldBe "1964-08-12"
+            data.certificate.vaccination.vaccinatedOnFormatted shouldBe "2021-05-29"
         }
     }
 
@@ -262,8 +261,8 @@ class DccQrCodeExtractorTest : BaseTest() {
             mode = Mode.CERT_VAC_STRICT
         ).apply {
             this as VaccinationCertificateQRCode
-            data.certificate.dateOfBirth shouldBe LocalDate.parse("1978-01-26")
-            data.certificate.vaccination.vaccinatedAt shouldBe LocalDate.parse("2021-03-09")
+            data.certificate.dateOfBirthFormatted shouldBe "1978-01-26"
+            data.certificate.vaccination.vaccinatedOnFormatted shouldBe "2021-03-09"
         }
     }
 
@@ -274,8 +273,8 @@ class DccQrCodeExtractorTest : BaseTest() {
             mode = Mode.CERT_VAC_STRICT
         ).apply {
             this as VaccinationCertificateQRCode
-            data.certificate.dateOfBirth shouldBe LocalDate.parse("1958-11-11")
-            data.certificate.vaccination.vaccinatedAt shouldBe LocalDate.parse("2021-03-18")
+            data.certificate.dateOfBirthFormatted shouldBe "1958-11-11"
+            data.certificate.vaccination.vaccinatedOnFormatted shouldBe "2021-03-18"
         }
     }
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt
index 486398e3058b94168f26ebb6907bc7920b2c1ab9..6a91fe0132ae1b758026d464744e5378d6cb9e71 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/covidcertificate/vaccination/core/repository/storage/VaccinationContainerTest.kt
@@ -14,7 +14,6 @@ import io.mockk.every
 import io.mockk.mockk
 import io.mockk.verify
 import org.joda.time.Instant
-import org.joda.time.LocalDate
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
 import testhelpers.BaseTest
@@ -33,7 +32,7 @@ class VaccinationContainerTest : BaseTest() {
     @Test
     fun `person identifier calculation`() {
         testData.personAVac1Container.personIdentifier shouldBe CertificatePersonIdentifier(
-            dateOfBirth = LocalDate.parse("1966-11-11"),
+            dateOfBirthFormatted = "1966-11-11",
             firstNameStandardized = "ANDREAS",
             lastNameStandardized = "ASTRA<EINS"
         )
@@ -70,8 +69,8 @@ class VaccinationContainerTest : BaseTest() {
             firstName shouldBe "Andreas"
             lastName shouldBe "Astrá Eins"
             fullName shouldBe "Andreas Astrá Eins"
-            dateOfBirth shouldBe LocalDate.parse("1966-11-11")
-            vaccinatedAt shouldBe LocalDate.parse("2021-03-01")
+            dateOfBirthFormatted shouldBe "1966-11-11"
+            vaccinatedOnFormatted shouldBe "2021-03-01"
             vaccineTypeName shouldBe "1119305005"
             vaccineManufacturer shouldBe "ORG-100001699"
             medicalProductName shouldBe "EU/1/21/1529"
@@ -81,7 +80,7 @@ class VaccinationContainerTest : BaseTest() {
             certificateCountry shouldBe "Deutschland"
             certificateId shouldBe "01DE/00001/1119305005/7T1UG87G61Y7NRXIBQJDTYQ9#S"
             personIdentifier shouldBe CertificatePersonIdentifier(
-                dateOfBirth = LocalDate.parse("1966-11-11"),
+                dateOfBirthFormatted = "1966-11-11",
                 firstNameStandardized = "ANDREAS",
                 lastNameStandardized = "ASTRA<EINS"
             )
@@ -117,8 +116,8 @@ class VaccinationContainerTest : BaseTest() {
             firstName shouldBe "Andreas"
             lastName shouldBe "Astrá Eins"
             fullName shouldBe "Andreas Astrá Eins"
-            dateOfBirth shouldBe LocalDate.parse("1966-11-11")
-            vaccinatedAt shouldBe LocalDate.parse("2021-03-01")
+            dateOfBirthFormatted shouldBe "1966-11-11"
+            vaccinatedOnFormatted shouldBe "2021-03-01"
             vaccineTypeName shouldBe "Vaccine-Name"
             vaccineManufacturer shouldBe "Manufactorer-Name"
             medicalProductName shouldBe "MedicalProduct-Name"
@@ -128,7 +127,7 @@ class VaccinationContainerTest : BaseTest() {
             certificateCountry shouldBe "Deutschland"
             certificateId shouldBe "01DE/00001/1119305005/7T1UG87G61Y7NRXIBQJDTYQ9#S"
             personIdentifier shouldBe CertificatePersonIdentifier(
-                dateOfBirth = LocalDate.parse("1966-11-11"),
+                dateOfBirthFormatted = "1966-11-11",
                 firstNameStandardized = "ANDREAS",
                 lastNameStandardized = "ASTRA<EINS"
             )