diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt
index 6487c53031b85b6f36c4f32befceb2551c069c21..c07e9fc33f51aa0087b1437a5e848d9e9af87f08 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/core/PersonCertificatesProvider.kt
@@ -56,7 +56,7 @@ class PersonCertificatesProvider @Inject constructor(
      * After calling this [personCertificates] will emit new values.
      * Setting it to null deletes it.
      */
-    suspend fun setCurrentCwaUser(personIdentifier: CertificatePersonIdentifier?) {
+    fun setCurrentCwaUser(personIdentifier: CertificatePersonIdentifier?) {
         Timber.d("setCurrentCwaUser(personIdentifier=%s)", personIdentifier)
         personCertificatesSettings.currentCwaUser.update { personIdentifier }
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt
index 26157fe839a7d7e98f5877d207b5bd5e78dd1ecc..484a22e52eaf52a1e85642bf4887cfe8c17f9ed7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/covidcertificate/person/ui/details/PersonDetailsViewModel.kt
@@ -55,9 +55,15 @@ class PersonDetailsViewModel @AssistedInject constructor(
         events.postValue(Back)
     }
 
+    private val qrcodeCache = mutableMapOf<String, Bitmap?>()
+
     private val qrCodeFlow: Flow<Bitmap?> = personCertificatesFlow.transform {
-        emit(null)
-        emit(qrCodeGenerator.createQrCode(it.highestPriorityCertificate.qrCode, margin = 0))
+        val input = it.highestPriorityCertificate.qrCode
+        emit(qrcodeCache[input]) // Initial state
+
+        val qrcode = qrcodeCache[input] ?: qrCodeGenerator.createQrCode(input, margin = 0)
+        qrcodeCache[input] = qrcode
+        emit(qrcode)
     }
 
     val uiState: LiveData<List<CertificateItem>> = combine(