diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt
index 0db2d0ed6f9343596216423d14c64f380f662583..651c5721e2244a230dd33447a5f6f0896b014279 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/coronatest/qrcode/CoronaTestQRCode.kt
@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.coronatest.qrcode
 import android.os.Parcelable
 import de.rki.coronawarnapp.coronatest.TestRegistrationRequest
 import de.rki.coronawarnapp.coronatest.type.CoronaTest
-import de.rki.coronawarnapp.util.HashExtensions.toSHA256
 import kotlinx.parcelize.IgnoredOnParcel
 import kotlinx.parcelize.Parcelize
 import org.joda.time.Instant
@@ -49,7 +48,8 @@ sealed class CoronaTestQRCode : Parcelable, TestRegistrationRequest {
 
         @IgnoredOnParcel
         override val registrationIdentifier: String
-            get() = hash.toSHA256()
+            // We hash in the VerificationServer.retrieveRegistrationToken which was needed anyway for PCR
+            get() = hash
     }
 }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt
index 155f7c318ef9c79cc23ebee375b77792b0bfa56a..82dfa27637e6d3e7cf99272366987f3e5fb93554 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/SubmissionRepository.kt
@@ -48,7 +48,7 @@ class SubmissionRepository @Inject constructor(
         scope.launch {
             val test = coronaTestRepository.coronaTests.first().singleOrNull { it.type == type }
                 ?: throw IllegalStateException("No test of type $type available")
-
+            Timber.tag(TAG).v("giveConsentToSubmission(type=$type): %s", test)
             coronaTestRepository.updateConsent(identifier = test.identifier, consented = true)
         }
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt
index 18b06cf6fb6758a5cf76164c7ad981ab36942cd4..eae290615228d629cf126a1affe9e62b1d78796a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/qrcode/scan/SubmissionQRCodeScanViewModel.kt
@@ -39,13 +39,16 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor(
     val scanStatusValue = SingleLiveEvent<ScanStatus>()
 
     fun validateTestGUID(rawResult: String) = launch {
+        Timber.d("validateTestGUID(rawResult=$rawResult)")
         try {
             val coronaTestQRCode = qrCodeValidator.validate(rawResult)
+            Timber.d("validateTestGUID() coronaTestQRCode=%s", coronaTestQRCode)
             // TODO this needs to be adapted to work for different types
             QRCodeCensor.lastGUID = coronaTestQRCode.registrationIdentifier
             scanStatusValue.postValue(ScanStatus.SUCCESS)
 
             val coronaTest = submissionRepository.testForType(coronaTestQRCode.type).first()
+            Timber.d("validateTestGUID() existingTest=%s", coronaTest)
 
             if (coronaTest != null) {
                 routeToScreen.postValue(
@@ -75,12 +78,14 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor(
     @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
     internal suspend fun doDeviceRegistration(coronaTestQRCode: CoronaTestQRCode) {
         try {
+            Timber.d("doDeviceRegistration(coronaTestQRCode=%s)", coronaTestQRCode)
             registrationState.postValue(RegistrationState(ApiRequestState.STARTED))
             val coronaTest = submissionRepository.registerTest(coronaTestQRCode)
+            Timber.d("doDeviceRegistration() coronaTest=$coronaTest")
             if (isConsentGiven) {
                 submissionRepository.giveConsentToSubmission(type = coronaTestQRCode.type)
             }
-            checkTestResult(coronaTest.testResult)
+            checkTestResult(coronaTestQRCode, coronaTest)
             registrationState.postValue(
                 RegistrationState(
                     ApiRequestState.SUCCESS,
@@ -108,16 +113,15 @@ class SubmissionQRCodeScanViewModel @AssistedInject constructor(
         }
     }
 
-    private fun checkTestResult(testResult: CoronaTestResult) {
-        if (testResult == CoronaTestResult.PCR_REDEEMED) {
-            throw InvalidQRCodeException()
+    private fun checkTestResult(request: CoronaTestQRCode, test: CoronaTest) {
+        if (test.testResult == CoronaTestResult.PCR_REDEEMED) {
+            throw InvalidQRCodeException("CoronaTestResult already redeemed ${request.registrationIdentifier}")
         }
     }
 
     private fun deregisterTestFromDevice(coronaTest: CoronaTestQRCode) {
         launch {
-            Timber.d("deregisterTestFromDevice()")
-
+            Timber.d("deregisterTestFromDevice(coronaTest=%s)", coronaTest)
             submissionRepository.removeTestFromDevice(type = coronaTest.type)
             routeToScreen.postValue(SubmissionNavigationEvents.NavigateToMainActivity)
         }