diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/storage/ExposureSummaryDaoTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/storage/ExposureSummaryDaoTest.kt
deleted file mode 100644
index 32df9c31bd567455f39b6541c680ada03eb64c44..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/storage/ExposureSummaryDaoTest.kt
+++ /dev/null
@@ -1,76 +0,0 @@
-package de.rki.coronawarnapp.storage
-
-import android.content.Context
-import androidx.room.Room
-import androidx.test.core.app.ApplicationProvider
-import androidx.test.ext.junit.runners.AndroidJUnit4
-import com.google.common.truth.Truth.assertThat
-import kotlinx.coroutines.runBlocking
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-/**
- * ExposureSummaryDao test.
- */
-@RunWith(AndroidJUnit4::class)
-class ExposureSummaryDaoTest {
-    private lateinit var dao: ExposureSummaryDao
-    private lateinit var db: AppDatabase
-
-    @Before
-    fun setUp() {
-        val context = ApplicationProvider.getApplicationContext<Context>()
-        db = Room.inMemoryDatabaseBuilder(
-            context, AppDatabase::class.java
-        ).build()
-        dao = db.exposureSummaryDao()
-    }
-
-    /**
-     * Test Create / Read DB operations.
-     */
-    @Test
-    fun testCROperations() {
-        runBlocking {
-            val testEntity1 = ExposureSummaryEntity().apply {
-                this.daysSinceLastExposure = 1
-                this.matchedKeyCount = 1
-                this.maximumRiskScore = 1
-                this.summationRiskScore = 1
-            }
-
-            val testEntity2 = ExposureSummaryEntity().apply {
-                this.daysSinceLastExposure = 2
-                this.matchedKeyCount = 2
-                this.maximumRiskScore = 2
-                this.summationRiskScore = 2
-            }
-
-            assertThat(dao.getExposureSummaryEntities().isEmpty()).isTrue()
-
-            val id1 = dao.insertExposureSummaryEntity(testEntity1)
-            var selectAll = dao.getExposureSummaryEntities()
-            var selectLast = dao.getLatestExposureSummary()
-            assertThat(dao.getExposureSummaryEntities().isEmpty()).isFalse()
-            assertThat(selectAll.size).isEqualTo(1)
-            assertThat(selectAll[0].id).isEqualTo(id1)
-            assertThat(selectLast).isNotNull()
-            assertThat(selectLast?.id).isEqualTo(id1)
-
-            val id2 = dao.insertExposureSummaryEntity(testEntity2)
-            selectAll = dao.getExposureSummaryEntities()
-            selectLast = dao.getLatestExposureSummary()
-            assertThat(selectAll.isEmpty()).isFalse()
-            assertThat(selectAll.size).isEqualTo(2)
-            assertThat(selectLast).isNotNull()
-            assertThat(selectLast?.id).isEqualTo(id2)
-        }
-    }
-
-    @After
-    fun closeDb() {
-        db.close()
-    }
-}
diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/api/ui/TestForAPIFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/api/ui/TestForAPIFragment.kt
index 1f9d0818c3d2772d62a7c6ee74c4c30c5f8b5006..cd1af3acc4181ceef7a5a314aaf1d96041c54d29 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/api/ui/TestForAPIFragment.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/api/ui/TestForAPIFragment.kt
@@ -16,7 +16,7 @@ import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.RecyclerView
 import androidx.viewpager2.widget.ViewPager2
 import com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient
-import com.google.android.gms.nearby.exposurenotification.ExposureSummary
+import com.google.android.gms.nearby.exposurenotification.ExposureWindow
 import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey
 import com.google.android.material.snackbar.Snackbar
 import com.google.gson.Gson
@@ -32,15 +32,12 @@ import de.rki.coronawarnapp.exception.ExceptionCategory
 import de.rki.coronawarnapp.exception.ExceptionCategory.INTERNAL
 import de.rki.coronawarnapp.exception.TransactionException
 import de.rki.coronawarnapp.exception.reporting.report
-import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
 import de.rki.coronawarnapp.nearby.InternalExposureNotificationPermissionHelper
 import de.rki.coronawarnapp.receiver.ExposureStateUpdateReceiver
 import de.rki.coronawarnapp.risk.TimeVariables
 import de.rki.coronawarnapp.server.protocols.AppleLegacyKeyExchange
 import de.rki.coronawarnapp.sharing.ExposureSharingService
 import de.rki.coronawarnapp.storage.AppDatabase
-import de.rki.coronawarnapp.storage.ExposureSummaryRepository
-import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.storage.tracing.TracingIntervalRepository
 import de.rki.coronawarnapp.test.menu.ui.TestMenuItem
 import de.rki.coronawarnapp.util.KeyFileHelper
@@ -89,6 +86,10 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
         AppInjector.component.enfClient
     }
 
+    private val exposureSummaryRepository by lazy {
+        AppInjector.component.exposureResultStore
+    }
+
     private var myExposureKeysJSON: String? = null
     private var myExposureKeys: List<TemporaryExposureKey>? = mutableListOf()
     private var otherExposureKey: AppleLegacyKeyExchange.Key? = null
@@ -96,8 +97,6 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
 
     private lateinit var internalExposureNotificationPermissionHelper: InternalExposureNotificationPermissionHelper
 
-    private var token: String? = null
-
     private lateinit var qrPager: ViewPager2
     private lateinit var qrPagerAdapter: RecyclerView.Adapter<QRPagerAdapter.QRViewHolder>
 
@@ -108,8 +107,6 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
 
-        token = UUID.randomUUID().toString()
-
         internalExposureNotificationPermissionHelper =
             InternalExposureNotificationPermissionHelper(this, this)
 
@@ -168,8 +165,7 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
 
             buttonRetrieveExposureSummary.setOnClickListener {
                 vm.launch {
-                    val summary = ExposureSummaryRepository.getExposureSummaryRepository()
-                        .getExposureSummaryEntities().toString()
+                    val summary = exposureSummaryRepository.exposureWindowEntities.toString()
 
                     withContext(Dispatchers.Main) {
                         showToast(summary)
@@ -274,9 +270,6 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
         if (null == otherExposureKey) {
             showToast("No other keys provided. Please fill the EditText with the JSON containing keys")
         } else {
-            token = UUID.randomUUID().toString()
-            LocalData.googleApiToken(token)
-
             val appleKeyList = mutableListOf<AppleLegacyKeyExchange.Key>()
 
             for (key in otherExposureKeyList) {
@@ -298,7 +291,7 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
 
             val dir = File(
                 File(requireContext().getExternalFilesDir(null), "key-export"),
-                token ?: ""
+                UUID.randomUUID().toString()
             )
             dir.mkdirs()
 
@@ -306,13 +299,13 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
             lifecycleScope.launch {
                 googleFileList = KeyFileHelper.asyncCreateExportFiles(appleFiles, dir)
 
-                Timber.i("Provide ${googleFileList.count()} files with ${appleKeyList.size} keys with token $token")
+                Timber.i("Provide ${googleFileList.count()} files with ${appleKeyList.size} keys")
                 try {
                     // only testing implementation: this is used to wait for the broadcastreceiver of the OS / EN API
                     enfClient.provideDiagnosisKeys(
                         googleFileList
                     )
-                    showToast("Provided ${appleKeyList.size} keys to Google API with token $token")
+                    showToast("Provided ${appleKeyList.size} keys to Google API")
                 } catch (e: Exception) {
                     e.report(ExceptionCategory.EXPOSURENOTIFICATION)
                 }
@@ -321,15 +314,14 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
     }
 
     private fun checkExposure() {
-        Timber.d("Check Exposure with token $token")
+        Timber.d("Check Exposure")
 
         lifecycleScope.launch {
             try {
-                val exposureSummary =
-                    InternalExposureNotificationClient.asyncGetExposureSummary(token!!)
+                val exposureSummary = enfClient.exposureWindows()
                 updateExposureSummaryDisplay(exposureSummary)
-                showToast("Updated Exposure Summary with token $token")
-                Timber.d("Received exposure with token $token from QR Code")
+                showToast("Updated Exposure Summary")
+                Timber.d("Received exposure from QR Code")
                 Timber.i(exposureSummary.toString())
             } catch (e: Exception) {
                 e.report(ExceptionCategory.EXPOSURENOTIFICATION)
@@ -337,32 +329,33 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
         }
     }
 
-    private fun updateExposureSummaryDisplay(exposureSummary: ExposureSummary?) {
-
-        binding.labelExposureSummaryMatchedKeyCount.text = getString(
-            R.string.test_api_body_matchedKeyCount,
-            (exposureSummary?.matchedKeyCount ?: "-").toString()
-        )
-
-        binding.labelExposureSummaryDaysSinceLastExposure.text = getString(
-            R.string.test_api_body_daysSinceLastExposure,
-            (exposureSummary?.daysSinceLastExposure ?: "-").toString()
-        )
-
-        binding.labelExposureSummaryMaximumRiskScore.text = getString(
-            R.string.test_api_body_maximumRiskScore,
-            (exposureSummary?.maximumRiskScore ?: "-").toString()
-        )
-
-        binding.labelExposureSummarySummationRiskScore.text = getString(
-            R.string.test_api_body_summation_risk,
-            (exposureSummary?.summationRiskScore ?: "-").toString()
-        )
-
-        binding.labelExposureSummaryAttenuation.text = getString(
-            R.string.test_api_body_attenuation,
-            (exposureSummary?.attenuationDurationsInMinutes?.joinToString() ?: "-").toString()
-        )
+    private fun updateExposureSummaryDisplay(windows: List<ExposureWindow>?) {
+
+        // FIXME
+//        binding.labelExposureSummaryMatchedKeyCount.text = getString(
+//            R.string.test_api_body_matchedKeyCount,
+//            (exposureSummary?.matchedKeyCount ?: "-").toString()
+//        )
+//
+//        binding.labelExposureSummaryDaysSinceLastExposure.text = getString(
+//            R.string.test_api_body_daysSinceLastExposure,
+//            (exposureSummary?.daysSinceLastExposure ?: "-").toString()
+//        )
+//
+//        binding.labelExposureSummaryMaximumRiskScore.text = getString(
+//            R.string.test_api_body_maximumRiskScore,
+//            (exposureSummary?.maximumRiskScore ?: "-").toString()
+//        )
+//
+//        binding.labelExposureSummarySummationRiskScore.text = getString(
+//            R.string.test_api_body_summation_risk,
+//            (exposureSummary?.summationRiskScore ?: "-").toString()
+//        )
+//
+//        binding.labelExposureSummaryAttenuation.text = getString(
+//            R.string.test_api_body_attenuation,
+//            (exposureSummary?.attenuationDurationsInMinutes?.joinToString() ?: "-").toString()
+//        )
     }
 
     private fun updateKeysDisplay() {
diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragment.kt
index f9834cdc79257082699d1f3606c70d72d74252d4..9c8a948bbb59512e6e875b2d55714ca7ddcd0bd5 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragment.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragment.kt
@@ -79,7 +79,7 @@ class TestRiskLevelCalculationFragment : Fragment(R.layout.fragment_test_risk_le
         vm.apiKeysProvidedEvent.observe2(this) { event ->
             Toast.makeText(
                 requireContext(),
-                "Provided ${event.keyCount} keys to Google API with token ${event.token}",
+                "Provided ${event.keyCount} keys to Google API",
                 Toast.LENGTH_SHORT
             ).show()
         }
diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt
index 3e0afe10007afd1115b73f493acb55448d8356a2..9f7b65e8d1aaf6a5c27e50c71302e3fcced189d1 100644
--- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt
+++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt
@@ -102,7 +102,6 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
                     LocalData.lastCalculatedRiskLevel(RiskLevel.UNDETERMINED.raw)
                     LocalData.lastSuccessfullyCalculatedRiskLevel(RiskLevel.UNDETERMINED.raw)
                     LocalData.lastTimeDiagnosisKeysFromServerFetch(null)
-                    LocalData.googleApiToken(null)
                 } catch (e: Exception) {
                     e.report(ExceptionCategory.INTERNAL)
                 }
@@ -176,14 +175,10 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
     }
 
     data class DiagnosisKeyProvidedEvent(
-        val keyCount: Int,
-        val token: String
+        val keyCount: Int
     )
 
     fun provideDiagnosisKey(transmissionNumber: Int, key: AppleLegacyKeyExchange.Key) {
-        val token = UUID.randomUUID().toString()
-        LocalData.googleApiToken(token)
-
         val appleKeyList = mutableListOf<AppleLegacyKeyExchange.Key>()
 
         AppleLegacyKeyExchange.Key.newBuilder()
@@ -200,23 +195,20 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor(
                 .build()
         )
 
-        val dir = File(File(context.getExternalFilesDir(null), "key-export"), token)
+        val dir = File(File(context.getExternalFilesDir(null), "key-export"), UUID.randomUUID().toString())
         dir.mkdirs()
 
         var googleFileList: List<File>
         launch {
             googleFileList = KeyFileHelper.asyncCreateExportFiles(appleFiles, dir)
 
-            Timber.i("Provide ${googleFileList.count()} files with ${appleKeyList.size} keys with token $token")
+            Timber.i("Provide ${googleFileList.count()} files with ${appleKeyList.size} keys")
             try {
                 // only testing implementation: this is used to wait for the broadcastreceiver of the OS / EN API
-                enfClient.provideDiagnosisKeys(
-                    googleFileList
-                )
+                enfClient.provideDiagnosisKeys(googleFileList)
                 apiKeysProvidedEvent.postValue(
                     DiagnosisKeyProvidedEvent(
-                        keyCount = appleFiles.size,
-                        token = token
+                        keyCount = appleFiles.size
                     )
                 )
             } catch (e: Exception) {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/DownloadDiagnosisKeysTask.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/DownloadDiagnosisKeysTask.kt
index 42b2008d5c8b23a2b47ed084d2b382d5c15923f3..f5d5bef1d355c112083eb08190bb1aa942adabf8 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/DownloadDiagnosisKeysTask.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/DownloadDiagnosisKeysTask.kt
@@ -26,7 +26,6 @@ import org.joda.time.Duration
 import org.joda.time.Instant
 import timber.log.Timber
 import java.util.Date
-import java.util.UUID
 import javax.inject.Inject
 import javax.inject.Provider
 
@@ -69,9 +68,8 @@ class DownloadDiagnosisKeysTask @Inject constructor(
             Timber.tag(TAG).d("Using $currentDate as current date in task.")
 
             /****************************************************
-             * RETRIEVE TOKEN
+             * DOWNLOAD KEYS
              ****************************************************/
-            val token = retrieveToken(rollbackItems)
             throwIfCancelled()
 
             // RETRIEVE RISK SCORE PARAMETERS
@@ -113,10 +111,8 @@ class DownloadDiagnosisKeysTask @Inject constructor(
             )
 
             Timber.tag(TAG).d("Attempting submission to ENF")
-            val isSubmissionSuccessful = enfClient.provideDiagnosisKeys(
-                keyFiles = availableKeyFiles
-            )
-            Timber.tag(TAG).d("Diagnosis Keys provided (success=%s, token=%s)", isSubmissionSuccessful, token)
+            val isSubmissionSuccessful = enfClient.provideDiagnosisKeys(availableKeyFiles)
+            Timber.tag(TAG).d("Diagnosis Keys provided (success=%s)", isSubmissionSuccessful)
 
             internalProgress.send(Progress.ApiSubmissionFinished)
             throwIfCancelled()
@@ -179,16 +175,6 @@ class DownloadDiagnosisKeysTask @Inject constructor(
         LocalData.lastTimeDiagnosisKeysFromServerFetch(currentDate)
     }
 
-    private fun retrieveToken(rollbackItems: MutableList<RollbackItem>): String {
-        val googleAPITokenForRollback = LocalData.googleApiToken()
-        rollbackItems.add {
-            LocalData.googleApiToken(googleAPITokenForRollback)
-        }
-        return UUID.randomUUID().toString().also {
-            LocalData.googleApiToken(it)
-        }
-    }
-
     private fun noKeysFetchedToday(): Boolean {
         val currentDate = DateTime(timeStamper.nowUTC, DateTimeZone.UTC)
         val lastFetch = DateTime(
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/ExposureStateUpdateWorker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/ExposureStateUpdateWorker.kt
index b0c92e94c97c65e27ed314b736c0a94589c994c8..f52f40756020923d3d36f364bb91f0d05d2cdcc7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/ExposureStateUpdateWorker.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/ExposureStateUpdateWorker.kt
@@ -4,14 +4,12 @@ import android.content.Context
 import androidx.work.CoroutineWorker
 import androidx.work.WorkerParameters
 import com.google.android.gms.common.api.ApiException
-import com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient
 import com.squareup.inject.assisted.Assisted
 import com.squareup.inject.assisted.AssistedInject
 import de.rki.coronawarnapp.exception.ExceptionCategory
-import de.rki.coronawarnapp.exception.NoTokenException
 import de.rki.coronawarnapp.exception.reporting.report
 import de.rki.coronawarnapp.risk.RiskLevelTask
-import de.rki.coronawarnapp.storage.ExposureSummaryRepository
+import de.rki.coronawarnapp.risk.ExposureResultStore
 import de.rki.coronawarnapp.task.TaskController
 import de.rki.coronawarnapp.task.common.DefaultTaskRequest
 import de.rki.coronawarnapp.util.worker.InjectedWorkerFactory
@@ -20,19 +18,16 @@ import timber.log.Timber
 class ExposureStateUpdateWorker @AssistedInject constructor(
     @Assisted val context: Context,
     @Assisted workerParams: WorkerParameters,
+    private val exposureResultStore: ExposureResultStore,
+    private val enfClient: ENFClient,
     private val taskController: TaskController
 ) : CoroutineWorker(context, workerParams) {
 
     override suspend fun doWork(): Result {
         try {
             Timber.v("worker to persist exposure summary started")
-            val token = inputData.getString(ExposureNotificationClient.EXTRA_TOKEN)
-                ?: throw NoTokenException(IllegalArgumentException("no token was found in the intent"))
-            Timber.v("valid token $token retrieved")
-            InternalExposureNotificationClient
-                .asyncGetExposureSummary(token).also {
-                    ExposureSummaryRepository.getExposureSummaryRepository()
-                        .insertExposureSummaryEntity(it)
+            enfClient.exposureWindows().also {
+                    exposureResultStore.exposureWindowEntities = Pair(it, null)
                     Timber.v("exposure summary state updated: $it")
                 }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt
index 53c0aa60066a0dc91d8212d7d03d93bfda8faeb3..2284f36d64cc0dd7ba523a72a403bafd99340938 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/InternalExposureNotificationClient.kt
@@ -1,6 +1,5 @@
 package de.rki.coronawarnapp.nearby
 
-import com.google.android.gms.nearby.exposurenotification.ExposureSummary
 import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey
 import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.risk.TimeVariables
@@ -118,22 +117,4 @@ object InternalExposureNotificationClient {
                     cont.resumeWithException(it)
                 }
         }
-
-    /**
-     * Retrieves the ExposureSummary object that matches the token from
-     * provideDiagnosisKeys() that you provide to the method. The ExposureSummary
-     * object provides a high-level overview of the exposure that a user has experienced.
-     *
-     * @param token
-     * @return
-     */
-    suspend fun asyncGetExposureSummary(token: String): ExposureSummary =
-        suspendCoroutine { cont ->
-            exposureNotificationClient.getExposureSummary(token)
-                .addOnSuccessListener {
-                    cont.resume(it)
-                }.addOnFailureListener {
-                    cont.resumeWithException(it)
-                }
-        }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/DefaultRiskLevels.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/DefaultRiskLevels.kt
index 07481acc9cee3c8901f40b6c34a24fc2d0ebb255..5104df0c88dc1af7398840b6396528091825a056 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/DefaultRiskLevels.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/DefaultRiskLevels.kt
@@ -22,6 +22,8 @@ import de.rki.coronawarnapp.server.protocols.internal.v2.RiskCalculationParamete
 import de.rki.coronawarnapp.storage.LocalData
 import de.rki.coronawarnapp.storage.RiskLevelRepository
 import de.rki.coronawarnapp.util.TimeAndDateExtensions.millisecondsToHours
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.onEach
 import kotlinx.coroutines.runBlocking
 import org.joda.time.Instant
@@ -32,7 +34,8 @@ typealias ProtoRiskLevel = RiskCalculationParametersOuterClass.NormalizedTimeToR
 
 @Singleton
 class DefaultRiskLevels @Inject constructor(
-    private val appConfigProvider: AppConfigProvider
+    private val appConfigProvider: AppConfigProvider,
+    private val exposureResultStore: ExposureResultStore
 ) : RiskLevels {
     private var appConfig: ConfigData
 
@@ -107,7 +110,19 @@ class DefaultRiskLevels @Inject constructor(
 
         val aggregatedResult = aggregateResults(riskResultsPerWindow)
 
-        return aggregatedResult.totalRiskLevel == ProtoRiskLevel.HIGH
+        exposureResultStore.exposureWindowEntities = Pair(exposureWindows, aggregatedResult)
+
+        val highRisk = aggregatedResult.totalRiskLevel == ProtoRiskLevel.HIGH
+
+        if (highRisk) {
+            internalMatchedKeyCount.value = aggregatedResult.totalMinimumDistinctEncountersWithHighRisk
+            internalDaysSinceLastExposure.value = aggregatedResult.numberOfDaysWithHighRisk
+        } else {
+            internalMatchedKeyCount.value = aggregatedResult.totalMinimumDistinctEncountersWithLowRisk
+            internalDaysSinceLastExposure.value = aggregatedResult.numberOfDaysWithLowRisk
+        }
+
+        return highRisk
     }
 
     override fun isActiveTracingTimeAboveThreshold(): Boolean {
@@ -470,5 +485,11 @@ class DefaultRiskLevels @Inject constructor(
                 !maxExclusive && value.toDouble() > max -> false
                 else -> true
             }
+
+        private val internalMatchedKeyCount = MutableStateFlow(0)
+        val matchedKeyCount: Flow<Int> = internalMatchedKeyCount
+
+        private val internalDaysSinceLastExposure = MutableStateFlow(0)
+        val daysSinceLastExposure: Flow<Int> = internalDaysSinceLastExposure
     }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/ExposureResultStore.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/ExposureResultStore.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d58a2848b302ca489b6dde9f11188a510acfd095
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/ExposureResultStore.kt
@@ -0,0 +1,16 @@
+package de.rki.coronawarnapp.risk
+
+import com.google.android.gms.nearby.exposurenotification.ExposureWindow
+import de.rki.coronawarnapp.risk.result.AggregatedRiskResult
+import javax.inject.Inject
+
+class ExposureResultStore @Inject constructor() {
+
+    private var entities: Pair<List<ExposureWindow>, AggregatedRiskResult?> = Pair(emptyList(), null)
+
+    var exposureWindowEntities: Pair<List<ExposureWindow>, AggregatedRiskResult?>
+        get() = entities
+        set(value) {
+            entities = value
+        }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt
index 66fc87e9d7b3b18e41d0a565b070c6c8e4eb2ad4..1f37983a9d50edb4ab09fa0b658c65833b3d1e77 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt
@@ -62,7 +62,6 @@ abstract class AppDatabase : RoomDatabase() {
             val keyRepository = AppInjector.component.keyCacheRepository
             runBlocking { keyRepository.clear() } // TODO this is not nice
             TracingIntervalRepository.resetInstance()
-            ExposureSummaryRepository.resetInstance()
         }
 
         private fun buildDatabase(context: Context): AppDatabase {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt
deleted file mode 100644
index bd02029445025f01ca0deee0ece67037445c4874..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt
+++ /dev/null
@@ -1,70 +0,0 @@
-package de.rki.coronawarnapp.storage
-
-import com.google.android.gms.nearby.exposurenotification.ExposureSummary
-import de.rki.coronawarnapp.CoronaWarnApplication
-import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
-import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.MutableStateFlow
-
-class ExposureSummaryRepository(private val exposureSummaryDao: ExposureSummaryDao) {
-    companion object {
-        @Volatile
-        private var instance: ExposureSummaryRepository? = null
-
-        private fun getInstance(exposureSummaryDao: ExposureSummaryDao) =
-            instance ?: synchronized(this) {
-                instance ?: ExposureSummaryRepository(exposureSummaryDao).also { instance = it }
-            }
-
-        fun resetInstance() = synchronized(this) {
-            instance = null
-        }
-
-        fun getExposureSummaryRepository(): ExposureSummaryRepository {
-            return getInstance(
-                AppDatabase.getInstance(CoronaWarnApplication.getAppContext())
-                    .exposureSummaryDao()
-            )
-        }
-
-        private val internalMatchedKeyCount = MutableStateFlow(0)
-        val matchedKeyCount: Flow<Int> = internalMatchedKeyCount
-
-        private val internalDaysSinceLastExposure = MutableStateFlow(0)
-        val daysSinceLastExposure: Flow<Int> = internalDaysSinceLastExposure
-    }
-
-    suspend fun getExposureSummaryEntities() = exposureSummaryDao.getExposureSummaryEntities()
-        .map { it.convertToExposureSummary() }
-
-    suspend fun insertExposureSummaryEntity(exposureSummary: ExposureSummary) =
-        ExposureSummaryEntity().apply {
-            this.daysSinceLastExposure = exposureSummary.daysSinceLastExposure
-            this.matchedKeyCount = exposureSummary.matchedKeyCount
-            this.maximumRiskScore = exposureSummary.maximumRiskScore
-            this.summationRiskScore = exposureSummary.summationRiskScore
-            this.attenuationDurationsInMinutes =
-                exposureSummary.attenuationDurationsInMinutes.toTypedArray().toList()
-        }.run {
-            exposureSummaryDao.insertExposureSummaryEntity(this)
-            internalMatchedKeyCount.value = matchedKeyCount
-            internalDaysSinceLastExposure.value = daysSinceLastExposure
-        }
-
-    suspend fun getLatestExposureSummary(token: String) {
-        if (InternalExposureNotificationClient.asyncIsEnabled())
-            InternalExposureNotificationClient.asyncGetExposureSummary(token).also {
-                internalMatchedKeyCount.value = it.matchedKeyCount
-                internalDaysSinceLastExposure.value = it.daysSinceLastExposure
-            }
-    }
-
-    private fun ExposureSummaryEntity.convertToExposureSummary() =
-        ExposureSummary.ExposureSummaryBuilder()
-            .setAttenuationDurations(this.attenuationDurationsInMinutes.toIntArray())
-            .setDaysSinceLastExposure(this.daysSinceLastExposure)
-            .setMatchedKeyCount(this.matchedKeyCount)
-            .setMaximumRiskScore(this.maximumRiskScore)
-            .setSummationRiskScore(this.summationRiskScore)
-            .build()
-}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
index 04b08cdd10b8ef86ebcb046d27c86077fdc6fbf9..a0bac95d628ced3831ab7b40a88ee818eace30a7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt
@@ -446,34 +446,6 @@ object LocalData {
         }
     }
 
-    /****************************************************
-     * EXPOSURE NOTIFICATION DATA
-     ****************************************************/
-
-    /**
-     * Gets the last token that was used to provide the diagnosis keys to the Exposure Notification API
-     *
-     * @return UUID as string
-     */
-    fun googleApiToken(): String? = getSharedPreferenceInstance().getString(
-        CoronaWarnApplication.getAppContext()
-            .getString(R.string.preference_string_google_api_token),
-        null
-    )
-
-    /**
-     * Sets the last token that was used to provide the diagnosis keys to the Exposure Notification API
-     *
-     * @param value UUID as string
-     */
-    fun googleApiToken(value: String?) = getSharedPreferenceInstance().edit(true) {
-        putString(
-            CoronaWarnApplication.getAppContext()
-                .getString(R.string.preference_string_google_api_token),
-            value
-        )
-    }
-
     /****************************************************
      * SETTINGS DATA
      ****************************************************/
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt
index 0658b10604134435f471c5ef6f351372f18bdcb0..ada8c8b9b4cf663521d5ea2e029f98b0a1b03d84 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/TracingRepository.kt
@@ -2,8 +2,6 @@ package de.rki.coronawarnapp.storage
 
 import android.content.Context
 import de.rki.coronawarnapp.diagnosiskeys.download.DownloadDiagnosisKeysTask
-import de.rki.coronawarnapp.exception.ExceptionCategory
-import de.rki.coronawarnapp.exception.reporting.report
 import de.rki.coronawarnapp.nearby.ENFClient
 import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
 import de.rki.coronawarnapp.risk.RiskLevelTask
@@ -88,8 +86,6 @@ class TracingRepository @Inject constructor(
      * Regardless of whether the transactions where successful or not the
      * lastTimeDiagnosisKeysFetchedDate is updated. But the the value will only be updated after a
      * successful go through from the RetrievelDiagnosisKeysTransaction.
-     *
-     * @see RiskLevelRepository
      */
     fun refreshDiagnosisKeys() {
         scope.launch {
@@ -172,33 +168,6 @@ class TracingRepository @Inject constructor(
         }
     }
 
-    /**
-     * Exposure summary
-     * Refresh the following variables in TracingRepository
-     * - daysSinceLastExposure
-     * - matchedKeysCount
-     *
-     * @see TracingRepository
-     */
-    fun refreshExposureSummary() {
-        scope.launch {
-            try {
-                val token = LocalData.googleApiToken()
-                if (token != null) {
-                    ExposureSummaryRepository.getExposureSummaryRepository()
-                        .getLatestExposureSummary(token)
-                }
-                Timber.tag(TAG).v("retrieved latest exposure summary from db")
-            } catch (e: Exception) {
-                e.report(
-                    ExceptionCategory.EXPOSURENOTIFICATION,
-                    TAG,
-                    null
-                )
-            }
-        }
-    }
-
     fun refreshLastSuccessfullyCalculatedScore() {
         RiskLevelRepository.refreshLastSuccessfullyCalculatedScore()
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/Symptoms.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/Symptoms.kt
index 769df6264d8d24e3abd186fd2acfd57e110e30e4..0743eb1aaa05b52dccde5cde3b2f29e057bded17 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/Symptoms.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/submission/Symptoms.kt
@@ -6,6 +6,9 @@ import org.joda.time.LocalDate
 
 @Parcelize
 data class Symptoms(
+    /**
+     * this is null if there are no symptoms or there is no information
+     */
     val startOfSymptoms: StartOf?,
     val symptomIndication: Indication
 ) : Parcelable {
@@ -36,7 +39,7 @@ data class Symptoms(
 
     companion object {
         val NO_INFO_GIVEN = Symptoms(
-            startOfSymptoms = null, // FIXME  should this be null?
+            startOfSymptoms = null,
             symptomIndication = Indication.NO_INFORMATION
         )
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt
index ea111127b91b13506bd3a057672c47a837e4d555..86c98ead527c42cc9cefb9daf890c4a67cd131ae 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt
@@ -103,7 +103,6 @@ class HomeFragmentViewModel @AssistedInject constructor(
         SubmissionRepository.refreshDeviceUIState()
         // TODO the ordering here is weird, do we expect these to run in sequence?
         tracingRepository.refreshRiskLevel()
-        tracingRepository.refreshExposureSummary()
         tracingRepository.refreshLastTimeDiagnosisKeysFetchedDate()
         tracingRepository.refreshActiveTracingDaysInRetentionPeriod()
         TimerHelper.checkManualKeyRetrievalTimer()
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateProvider.kt
index 7e2f05d5beb481da9c76f9bcaacf0eb5f77f90ac..0997dc50f9ba59a66be689cbbc85216514160edf 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/card/TracingCardStateProvider.kt
@@ -1,7 +1,7 @@
 package de.rki.coronawarnapp.ui.tracing.card
 
 import dagger.Reusable
-import de.rki.coronawarnapp.storage.ExposureSummaryRepository
+import de.rki.coronawarnapp.risk.DefaultRiskLevels
 import de.rki.coronawarnapp.storage.RiskLevelRepository
 import de.rki.coronawarnapp.storage.SettingsRepository
 import de.rki.coronawarnapp.storage.TracingRepository
@@ -37,10 +37,10 @@ class TracingCardStateProvider @Inject constructor(
         tracingRepository.tracingProgress.onEach {
             Timber.v("tracingProgress: $it")
         },
-        ExposureSummaryRepository.matchedKeyCount.onEach {
+        DefaultRiskLevels.matchedKeyCount.onEach {
             Timber.v("matchedKeyCount: $it")
         },
-        ExposureSummaryRepository.daysSinceLastExposure.onEach {
+        DefaultRiskLevels.daysSinceLastExposure.onEach {
             Timber.v("daysSinceLastExposure: $it")
         },
         tracingRepository.activeTracingDaysInRetentionPeriod.onEach {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt
index 2075f82ed79aa0788b3aeec2707de2a86c338597..8ca9c951cf54a9571c124fb2ccc0f6c6cf306a89 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/RiskDetailsFragmentViewModel.kt
@@ -36,7 +36,6 @@ class RiskDetailsFragmentViewModel @AssistedInject constructor(
 
     fun refreshData() {
         tracingRepository.refreshRiskLevel()
-        tracingRepository.refreshExposureSummary()
         tracingRepository.refreshLastTimeDiagnosisKeysFetchedDate()
         TimerHelper.checkManualKeyRetrievalTimer()
         tracingRepository.refreshActiveTracingDaysInRetentionPeriod()
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/TracingDetailsStateProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/TracingDetailsStateProvider.kt
index f07401a32682540a0227eaacdc45e854a11d78df..f7265e75ca6d55b046c24db8aa6f23a7cbd73004 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/TracingDetailsStateProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/tracing/details/TracingDetailsStateProvider.kt
@@ -1,7 +1,7 @@
 package de.rki.coronawarnapp.ui.tracing.details
 
 import dagger.Reusable
-import de.rki.coronawarnapp.storage.ExposureSummaryRepository
+import de.rki.coronawarnapp.risk.DefaultRiskLevels
 import de.rki.coronawarnapp.storage.RiskLevelRepository
 import de.rki.coronawarnapp.storage.SettingsRepository
 import de.rki.coronawarnapp.storage.TracingRepository
@@ -30,8 +30,8 @@ class TracingDetailsStateProvider @Inject constructor(
         RiskLevelRepository.riskLevelScore,
         RiskLevelRepository.riskLevelScoreLastSuccessfulCalculated,
         tracingRepository.tracingProgress,
-        ExposureSummaryRepository.matchedKeyCount,
-        ExposureSummaryRepository.daysSinceLastExposure,
+        DefaultRiskLevels.matchedKeyCount,
+        DefaultRiskLevels.daysSinceLastExposure,
         tracingRepository.activeTracingDaysInRetentionPeriod,
         tracingRepository.lastTimeDiagnosisKeysFetched,
         backgroundModeStatus.isAutoModeEnabled,
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt
index af2cb89a00f2cbb07c2f27e5abdff7d7728abafd..b9452f8b00b29de6d1775d730fa6127dc71191a2 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt
@@ -22,6 +22,7 @@ import de.rki.coronawarnapp.receiver.ReceiverBinder
 import de.rki.coronawarnapp.risk.RiskModule
 import de.rki.coronawarnapp.service.ServiceBinder
 import de.rki.coronawarnapp.storage.SettingsRepository
+import de.rki.coronawarnapp.risk.ExposureResultStore
 import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
 import de.rki.coronawarnapp.submission.SubmissionModule
 import de.rki.coronawarnapp.submission.SubmissionTaskModule
@@ -84,6 +85,8 @@ interface ApplicationComponent : AndroidInjector<CoronaWarnApplication> {
 
     val enfClient: ENFClient
 
+    val exposureResultStore: ExposureResultStore
+
     val encryptedPreferencesFactory: EncryptedPreferencesFactory
     val errorResetTool: EncryptionErrorResetTool
 
diff --git a/Corona-Warn-App/src/main/res/values-bg/strings.xml b/Corona-Warn-App/src/main/res/values-bg/strings.xml
index 7190043852699ba78b8454cb60ccc1dadfe9f525..2d1890d30f5f492d038d8df7d82d931021860cdf 100644
--- a/Corona-Warn-App/src/main/res/values-bg/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-bg/strings.xml
@@ -24,8 +24,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml
index 23ae7c9f347ebabfc55eb32eaa7a804d95d174cb..1bcba1244b8455e96b9adc6aa5e0a02929325c4c 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -25,8 +25,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/main/res/values-en/strings.xml b/Corona-Warn-App/src/main/res/values-en/strings.xml
index 9d8ce585c349ee851eb51c61acf866140fad5166..1671da109a0a5ad15f715b8594585729680b28d0 100644
--- a/Corona-Warn-App/src/main/res/values-en/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-en/strings.xml
@@ -24,8 +24,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/main/res/values-pl/strings.xml b/Corona-Warn-App/src/main/res/values-pl/strings.xml
index 7a02cc77e432e7b759abccf6b70709355bc9e5bb..657e14803b0f9b1ef31c6b20af13af4fcc91f7ff 100644
--- a/Corona-Warn-App/src/main/res/values-pl/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-pl/strings.xml
@@ -24,8 +24,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/main/res/values-ro/strings.xml b/Corona-Warn-App/src/main/res/values-ro/strings.xml
index 450e1d43d8ed8d36d654740c95fa828f1fa4ce01..1f52872f8b5de27c4bd6b3a0b8323732e798ef12 100644
--- a/Corona-Warn-App/src/main/res/values-ro/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-ro/strings.xml
@@ -24,8 +24,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/main/res/values-tr/strings.xml b/Corona-Warn-App/src/main/res/values-tr/strings.xml
index 6cfc04d3387a2264a34c84c8fcfa388f74338253..2a391bcd3bd1f95dc11bdd464ec5dfc5d2719de3 100644
--- a/Corona-Warn-App/src/main/res/values-tr/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-tr/strings.xml
@@ -24,8 +24,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index 35bfadc55443338cd197aaef22edde94a91473bf..403af63265f1f6c69c28ffbba7d8962711407c2c 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -25,8 +25,6 @@
     <!-- NOTR -->
     <string name="preference_timestamp_manual_diagnosis_keys_retrieval"><xliff:g id="preference">"preference_timestamp_manual_diagnosis_keys_retrieval"</xliff:g></string>
     <!-- NOTR -->
-    <string name="preference_string_google_api_token"><xliff:g id="preference">"preference_m_string_google_api_token"</xliff:g></string>
-    <!-- NOTR -->
     <string name="preference_background_job_allowed"><xliff:g id="preference">"preference_background_job_enabled"</xliff:g></string>
     <!-- NOTR -->
     <string name="preference_mobile_data_allowed"><xliff:g id="preference">"preference_mobile_data_enabled"</xliff:g></string>
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt
index 41c26ebc228f6cfb69f986bda0f11a74db80ad58..a2064a8350322f7cc9e4509b928b94b0669dd3d7 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/windows/ExposureWindowsCalculationTest.kt
@@ -16,6 +16,7 @@ import de.rki.coronawarnapp.nearby.windows.entities.configuration.JsonMinutesAtA
 import de.rki.coronawarnapp.nearby.windows.entities.configuration.JsonNormalizedTimeToRiskLevelMapping
 import de.rki.coronawarnapp.nearby.windows.entities.configuration.JsonTrlFilter
 import de.rki.coronawarnapp.risk.DefaultRiskLevels
+import de.rki.coronawarnapp.risk.ExposureResultStore
 import de.rki.coronawarnapp.risk.result.AggregatedRiskResult
 import de.rki.coronawarnapp.risk.result.RiskResult
 import de.rki.coronawarnapp.server.protocols.internal.v2.RiskCalculationParametersOuterClass
@@ -48,6 +49,7 @@ class ExposureWindowsCalculationTest : BaseTest() {
     @MockK lateinit var appConfigProvider: AppConfigProvider
     @MockK lateinit var configData: ConfigData
     @MockK lateinit var timeStamper: TimeStamper
+    @MockK lateinit var exposureResultStore: ExposureResultStore
 
     private lateinit var riskLevels: DefaultRiskLevels
     private lateinit var testConfig: ConfigData
@@ -102,7 +104,7 @@ class ExposureWindowsCalculationTest : BaseTest() {
         coEvery { appConfigProvider.getAppConfig() } returns testConfig
         every { appConfigProvider.currentConfig } returns flow { testConfig }
         logConfiguration(testConfig)
-        riskLevels = DefaultRiskLevels(appConfigProvider)
+        riskLevels = DefaultRiskLevels(appConfigProvider, exposureResultStore)
 
         // 4 - Mock and log exposure windows
         val allExposureWindows = mutableListOf<ExposureWindow>()
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelsTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelsTest.kt
index 3bc127ce14bb8a51656b2bf7417c8e07c4deee0d..26b3cd86f7952399c02b0929698f7c3761558714 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelsTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelsTest.kt
@@ -14,6 +14,7 @@ import testhelpers.BaseTest
 class RiskLevelsTest : BaseTest() {
 
     @MockK lateinit var appConfigProvider: AppConfigProvider
+    @MockK lateinit var exposureResultStore: ExposureResultStore
     private lateinit var riskLevels: DefaultRiskLevels
 
     @Before
@@ -23,7 +24,7 @@ class RiskLevelsTest : BaseTest() {
         coEvery { appConfigProvider.getAppConfig() } returns mockk()
         every { appConfigProvider.currentConfig } returns mockk()
 
-        riskLevels = DefaultRiskLevels(appConfigProvider)
+        riskLevels = DefaultRiskLevels(appConfigProvider, exposureResultStore)
     }
 
     @Test
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/ExposureSummaryRepositoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/ExposureSummaryRepositoryTest.kt
deleted file mode 100644
index b4a6ffd64b8a5ba18289f74bd437da2b0d63e769..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/ExposureSummaryRepositoryTest.kt
+++ /dev/null
@@ -1,112 +0,0 @@
-package de.rki.coronawarnapp.storage
-
-import com.google.android.gms.nearby.exposurenotification.ExposureSummary
-import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
-import io.mockk.MockKAnnotations
-import io.mockk.coEvery
-import io.mockk.coVerify
-import io.mockk.every
-import io.mockk.impl.annotations.MockK
-import io.mockk.mockk
-import io.mockk.mockkObject
-import io.mockk.unmockkAll
-import kotlinx.coroutines.runBlocking
-import org.junit.After
-import org.junit.Before
-import org.junit.Test
-import java.util.UUID
-
-/**
- * ExposureSummaryRepository test.
- */
-class ExposureSummaryRepositoryTest {
-
-    @MockK
-    private lateinit var dao: ExposureSummaryDao
-    private lateinit var repository: ExposureSummaryRepository
-
-    @Before
-    fun setUp() {
-        MockKAnnotations.init(this)
-        repository = ExposureSummaryRepository(dao)
-
-        mockkObject(InternalExposureNotificationClient)
-        coEvery { InternalExposureNotificationClient.asyncGetExposureSummary(any()) } returns buildSummary()
-        coEvery { InternalExposureNotificationClient.asyncIsEnabled() } returns true
-
-        coEvery { dao.getExposureSummaryEntities() } returns listOf()
-        coEvery { dao.getLatestExposureSummary() } returns null
-        coEvery { dao.insertExposureSummaryEntity(any()) } returns 0
-    }
-
-    /**
-     * Test DAO is called.
-     */
-    @Test
-    fun testGet() {
-        runBlocking {
-            repository.getExposureSummaryEntities()
-
-            coVerify {
-                dao.getExposureSummaryEntities()
-            }
-        }
-    }
-
-    /**
-     * Test DAO is called.
-     */
-    @Test
-    fun testGetLatest() {
-        runBlocking {
-            val token = UUID.randomUUID().toString()
-            repository.getLatestExposureSummary(token)
-
-            coVerify {
-                InternalExposureNotificationClient.asyncGetExposureSummary(token)
-            }
-        }
-    }
-
-    /**
-     * Test DAO is called.
-     */
-    @Test
-    fun testInsert() {
-        val es = mockk<ExposureSummary>()
-        every { es.attenuationDurationsInMinutes } returns intArrayOf(0)
-        every { es.daysSinceLastExposure } returns 1
-        every { es.matchedKeyCount } returns 1
-        every { es.maximumRiskScore } returns 0
-        every { es.summationRiskScore } returns 0
-
-        runBlocking {
-            repository.insertExposureSummaryEntity(es)
-
-            coVerify {
-                dao.insertExposureSummaryEntity(any())
-            }
-        }
-    }
-
-    private fun buildSummary(
-        maxRisk: Int = 0,
-        lowAttenuation: Int = 0,
-        midAttenuation: Int = 0,
-        highAttenuation: Int = 0
-    ): ExposureSummary {
-        val intArray = IntArray(3)
-        intArray[0] = lowAttenuation
-        intArray[1] = midAttenuation
-        intArray[2] = highAttenuation
-        return ExposureSummary.ExposureSummaryBuilder()
-            .setMaximumRiskScore(maxRisk)
-            .setAttenuationDurations(intArray)
-            .build()
-    }
-
-    @After
-    fun cleanUp() {
-        unmockkAll()
-    }
-}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/worker/WorkerBinderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/worker/WorkerBinderTest.kt
index 468877bbaaa72b0dfc9f3177073a15d4b6e7024c..88976e539bab83ed2fb7aa482ee3f35e26557652 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/worker/WorkerBinderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/worker/WorkerBinderTest.kt
@@ -6,7 +6,9 @@ import dagger.Module
 import dagger.Provides
 import de.rki.coronawarnapp.deadman.DeadmanNotificationScheduler
 import de.rki.coronawarnapp.deadman.DeadmanNotificationSender
+import de.rki.coronawarnapp.nearby.ENFClient
 import de.rki.coronawarnapp.playbook.Playbook
+import de.rki.coronawarnapp.risk.ExposureResultStore
 import de.rki.coronawarnapp.task.TaskController
 import de.rki.coronawarnapp.util.di.AssistedInjectModule
 import io.github.classgraph.ClassGraph
@@ -87,4 +89,11 @@ class MockProvider {
 
     @Provides
     fun taskController(): TaskController = mockk()
+
+    // For ExposureStateUpdateWorker
+    @Provides
+    fun enfClient(): ENFClient = mockk()
+
+    @Provides
+    fun exposureSummaryRepository(): ExposureResultStore = mockk()
 }