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 1de6e298ada80c107b9da7fd9af3ff455a81f030..c03b84f39023d1999f7d0e38b93fa25b1e6d0d10 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,6 @@ 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.ExposureWindow
 import com.google.android.gms.nearby.exposurenotification.TemporaryExposureKey
 import com.google.android.material.snackbar.Snackbar
 import com.google.gson.Gson
@@ -120,7 +119,6 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
         binding.apply {
             buttonApiTestStart.setOnClickListener { start() }
             buttonApiGetExposureKeys.setOnClickListener { getExposureKeys() }
-            buttonApiGetCheckExposure.setOnClickListener { checkExposure() }
 
             buttonApiScanQrCode.setOnClickListener {
                 IntentIntegrator.forSupportFragment(this@TestForAPIFragment)
@@ -198,12 +196,6 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
         }
     }
 
-    override fun onResume() {
-        super.onResume()
-
-        updateExposureSummaryDisplay(null)
-    }
-
     private val prettyKey = { key: AppleLegacyKeyExchange.Key ->
         StringBuilder()
             .append("\nKey data: ${key.keyData}")
@@ -309,51 +301,6 @@ class TestForAPIFragment : Fragment(R.layout.fragment_test_for_a_p_i),
         }
     }
 
-    private fun checkExposure() {
-        Timber.d("Check Exposure")
-
-        lifecycleScope.launch {
-            try {
-                val exposureSummary = enfClient.exposureWindows()
-                updateExposureSummaryDisplay(exposureSummary)
-                showToast("Updated Exposure Summary")
-                Timber.d("Received exposure from QR Code")
-                Timber.i(exposureSummary.toString())
-            } catch (e: Exception) {
-                e.report(ExceptionCategory.EXPOSURENOTIFICATION)
-            }
-        }
-    }
-
-    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() {
 
         val myKeys =
diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml
index a4eb49227c15f443d2dde6b13eb76d3affca190c..30b10c80b5acd13b4e1e7963521ba2fe44500099 100644
--- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml
+++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_for_a_p_i.xml
@@ -61,36 +61,6 @@
                     android:layout_marginBottom="@dimen/spacing_tiny"
                     android:text="@string/test_api_exposure_summary_headline" />
 
-                <TextView
-                    android:id="@+id/label_exposure_summary_matchedKeyCount"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/test_api_body_matchedKeyCount" />
-
-                <TextView
-                    android:id="@+id/label_exposure_summary_daysSinceLastExposure"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/test_api_body_daysSinceLastExposure" />
-
-                <TextView
-                    android:id="@+id/label_exposure_summary_maximumRiskScore"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/test_api_body_maximumRiskScore" />
-
-                <TextView
-                    android:id="@+id/label_exposure_summary_summationRiskScore"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/test_api_body_summation_risk" />
-
-                <TextView
-                    android:id="@+id/label_exposure_summary_attenuation"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:text="@string/test_api_body_attenuation" />
-
                 <Button
                     android:id="@+id/button_api_scan_qr_code"
                     style="@style/buttonPrimary"
@@ -106,14 +76,6 @@
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/spacing_tiny"
                     android:text="@string/test_api_button_enter_other_keys" />
-
-                <Button
-                    android:id="@+id/button_api_get_check_exposure"
-                    style="@style/buttonPrimary"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="@dimen/spacing_tiny"
-                    android:text="@string/test_api_button_check_exposure" />
             </LinearLayout>
 
             <LinearLayout
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt
index bf0c6f5ccb9b3270b32163a14f03ffc7d73563df..5d4ce8b4fa847c50b9d659318de47d665ca981a3 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProvider.kt
@@ -25,13 +25,9 @@ class DefaultDiagnosisKeyProvider @Inject constructor(
             return true
         }
 
-        // Check version of ENF
-        try {
-            enfVersion.requireAtLeast(ENFVersion.V16)
-        } catch (e: Exception) {
-            Timber.e(e)
-            throw e
-        }
+        // Check version of ENF, WindowMode since v1.5, but version check since v1.6
+        // Will throw if requirement is not satisfied
+        enfVersion.requireMinimumVersion(ENFVersion.V1_6)
 
         if (!submissionQuota.consumeQuota(1)) {
             Timber.w("No key files submitted because not enough quota available.")
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersion.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersion.kt
index 044bff1afb98daa9eccec81ff055d187924447b7..7652fb055bdb64e4cbd76d4528a7047ffbfeef91 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersion.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersion.kt
@@ -9,7 +9,6 @@ import javax.inject.Singleton
 import kotlin.coroutines.resume
 import kotlin.coroutines.resumeWithException
 import kotlin.coroutines.suspendCoroutine
-import kotlin.math.abs
 
 @Singleton
 class DefaultENFVersion @Inject constructor(
@@ -23,22 +22,19 @@ class DefaultENFVersion @Inject constructor(
         null
     }
 
-    override suspend fun requireAtLeast(compareVersion: Long) {
-        if (!isAtLeast(compareVersion)) {
-            throw ENFVersion.Companion.UnsupportedENFVersionException()
-        }
-    }
-
-    override suspend fun isAtLeast(compareVersion: Long): Boolean {
-        if (!compareVersion.isCorrectVersionLength) throw IllegalArgumentException("given version has incorrect length")
-
-        return try {
-            internalGetENFClientVersion() >= compareVersion
+    override suspend fun requireMinimumVersion(required: Long) {
+        try {
+            val currentVersion = internalGetENFClientVersion()
+            if (currentVersion < required) {
+                val error = OutdatedENFVersionException(current = currentVersion, required = required)
+                Timber.e(error, "Version requirement not satisfied.")
+                throw error
+            } else {
+                Timber.d("Version requirement satisfied: current=$currentVersion, required=$required")
+            }
         } catch (apiException: ApiException) {
             if (apiException.statusCode != CommonStatusCodes.API_NOT_CONNECTED) {
                 throw apiException
-            } else {
-                return false
             }
         }
     }
@@ -48,12 +44,4 @@ class DefaultENFVersion @Inject constructor(
             .addOnSuccessListener { cont.resume(it) }
             .addOnFailureListener { cont.resumeWithException(it) }
     }
-
-    // check if a raw long has the correct length to be considered an API version
-    private val Long.isCorrectVersionLength
-        get(): Boolean = abs(this).toString().length == GOOGLE_API_VERSION_FIELD_LENGTH
-
-    companion object {
-        private const val GOOGLE_API_VERSION_FIELD_LENGTH = 8
-    }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/ENFVersion.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/ENFVersion.kt
index 0a01015653f27e659e5d0e90b577078b756c9778..b7d16994a91e0742d3910f3c22fd7323b31b6857 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/ENFVersion.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/ENFVersion.kt
@@ -1,24 +1,18 @@
 package de.rki.coronawarnapp.nearby.modules.version
 
 interface ENFVersion {
-    suspend fun getENFClientVersion(): Long?
-
     /**
-     * Indicates if the client runs above a certain version
-     *
-     * @return isAboveVersion, if connected to an old unsupported version, return false
+     * May return null if the API is currently not connected.
      */
-    suspend fun isAtLeast(compareVersion: Long): Boolean
+    suspend fun getENFClientVersion(): Long?
 
     /**
-     * Throws an [UnsupportedENFVersionException] if the client runs an old unsupported version of the ENF
+     * Throws an [OutdatedENFVersionException] if the client runs an old unsupported version of the ENF
+     * If the API is currently not connected, no exception will be thrown, we expect this to only be a temporary state
      */
-    suspend fun requireAtLeast(compareVersion: Long)
+    suspend fun requireMinimumVersion(required: Long)
 
     companion object {
-        const val V16 = 16000000L
-        const val V15 = 15000000L
-
-        class UnsupportedENFVersionException : Exception("The client runs an old unsupported version of the ENF")
+        const val V1_6 = 16000000L
     }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/OutdatedENFVersionException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/OutdatedENFVersionException.kt
new file mode 100644
index 0000000000000000000000000000000000000000..5cf38d6fb2e81becdbce33e9fba99fac2ec6127b
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/nearby/modules/version/OutdatedENFVersionException.kt
@@ -0,0 +1,6 @@
+package de.rki.coronawarnapp.nearby.modules.version
+
+class OutdatedENFVersionException(
+    val current: Long,
+    val required: Long
+) : Exception("Client is using an outdated ENF version: current=$current, required=$required")
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 4c2b2f955c6b11c0f0a33541b72d6149be4206ad..6a869aa15a472ceb4d54b28ebbb2413f016556d4 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
@@ -19,11 +19,9 @@ import de.rki.coronawarnapp.nearby.ENFModule
 import de.rki.coronawarnapp.playbook.Playbook
 import de.rki.coronawarnapp.playbook.PlaybookModule
 import de.rki.coronawarnapp.receiver.ReceiverBinder
-import de.rki.coronawarnapp.risk.ExposureResultStore
 import de.rki.coronawarnapp.risk.RiskModule
 import de.rki.coronawarnapp.service.ServiceBinder
 import de.rki.coronawarnapp.storage.SettingsRepository
-import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository
 import de.rki.coronawarnapp.submission.SubmissionModule
 import de.rki.coronawarnapp.submission.SubmissionTaskModule
 import de.rki.coronawarnapp.task.TaskController
@@ -85,15 +83,11 @@ interface ApplicationComponent : AndroidInjector<CoronaWarnApplication> {
 
     val enfClient: ENFClient
 
-    val exposureResultStore: ExposureResultStore
-
     val encryptedPreferencesFactory: EncryptedPreferencesFactory
     val errorResetTool: EncryptionErrorResetTool
 
     val playbook: Playbook
 
-    val interoperabilityRepository: InteroperabilityRepository
-
     val taskController: TaskController
 
     @AppScope val appScope: AppCoroutineScope
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 2d1890d30f5f492d038d8df7d82d931021860cdf..03b2b1f7a0f2b3c5313198d83369a2a978d274c4 100644
--- a/Corona-Warn-App/src/main/res/values-bg/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-bg/strings.xml
@@ -1257,17 +1257,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
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 102761a193ba2433ac9329ff7e256f4cf7fdd466..f8eaa6a2e06e2b1893ce39c6db4ba5b014fb3e53 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -1259,17 +1259,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
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 1671da109a0a5ad15f715b8594585729680b28d0..6b9d4ca42f8c7a9b242d2e1f1862b7caa903e1df 100644
--- a/Corona-Warn-App/src/main/res/values-en/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-en/strings.xml
@@ -1257,17 +1257,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
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 657e14803b0f9b1ef31c6b20af13af4fcc91f7ff..e6583c9af191c2f552c6c04953312988958f0e7f 100644
--- a/Corona-Warn-App/src/main/res/values-pl/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-pl/strings.xml
@@ -1257,17 +1257,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
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 1f52872f8b5de27c4bd6b3a0b8323732e798ef12..3bcca1384b7d4d00442d9525c768e0273cbdac85 100644
--- a/Corona-Warn-App/src/main/res/values-ro/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-ro/strings.xml
@@ -1257,17 +1257,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
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 2a391bcd3bd1f95dc11bdd464ec5dfc5d2719de3..2af4f639b65779e8db88d69aec94612aa733ebb8 100644
--- a/Corona-Warn-App/src/main/res/values-tr/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-tr/strings.xml
@@ -1257,17 +1257,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index d120c2c1a4bc91089abbbf63710b9e9091829397..b76608adbad8e9fdfeec178b7849432f9c1ab914 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -1263,17 +1263,7 @@
     <!-- NOTR -->
     <string name="test_api_button_check_exposure">"Check Exposure Summary"</string>
     <!-- NOTR -->
-    <string name="test_api_exposure_summary_headline">"Exposure summary"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_daysSinceLastExposure">"Days since last exposure: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_attenuation">"Attenuation Durations in Minutes: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_summation_risk">"Summation Risk Score: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_matchedKeyCount">"Matched key count: %1$s"</string>
-    <!-- NOTR -->
-    <string name="test_api_body_maximumRiskScore">"Maximum risk score %1$s"</string>
+    <string name="test_api_exposure_summary_headline">"Exposure Windows"</string>
     <!-- NOTR -->
     <string name="test_api_body_my_keys">"My keys (count: %1$d)"</string>
     <!-- NOTR -->
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt
index 0082ef6707c2149cc6c5f1ae2177fd4985af7a63..a8fdf34442f6c1a6992295762b66324d1c49462e 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/diagnosiskeyprovider/DefaultDiagnosisKeyProviderTest.kt
@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.nearby.modules.diagnosiskeyprovider
 
 import com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient
 import de.rki.coronawarnapp.nearby.modules.version.ENFVersion
+import de.rki.coronawarnapp.nearby.modules.version.OutdatedENFVersionException
 import io.kotest.matchers.shouldBe
 import io.mockk.MockKAnnotations
 import io.mockk.clearAllMocks
@@ -33,7 +34,7 @@ class DefaultDiagnosisKeyProviderTest : BaseTest() {
 
         coEvery { googleENFClient.provideDiagnosisKeys(any<List<File>>()) } returns MockGMSTask.forValue(null)
 
-        coEvery { enfVersion.requireAtLeast(any()) } returns Unit
+        coEvery { enfVersion.requireMinimumVersion(any()) } returns Unit
     }
 
     @AfterEach
@@ -49,11 +50,14 @@ class DefaultDiagnosisKeyProviderTest : BaseTest() {
 
     @Test
     fun `provide diagnosis keys with outdated ENF versions`() {
-        coEvery { enfVersion.requireAtLeast(any()) } throws ENFVersion.Companion.UnsupportedENFVersionException()
+        coEvery { enfVersion.requireMinimumVersion(any()) } throws OutdatedENFVersionException(
+            current = 9000,
+            required = 5000
+        )
 
         val provider = createProvider()
 
-        assertThrows<ENFVersion.Companion.UnsupportedENFVersionException> {
+        assertThrows<OutdatedENFVersionException> {
             runBlockingTest { provider.provideDiagnosisKeys(exampleKeyFiles) } shouldBe false
         }
 
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersionTest.kt
index 4f30d19a1f98a02a17d0650111b8fedb6ddae915..6d9e563b93dda599d64478739717998339f72d63 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersionTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/nearby/modules/version/DefaultENFVersionTest.kt
@@ -2,21 +2,21 @@ package de.rki.coronawarnapp.nearby.modules.version
 
 import com.google.android.gms.common.api.ApiException
 import com.google.android.gms.common.api.CommonStatusCodes.API_NOT_CONNECTED
+import com.google.android.gms.common.api.CommonStatusCodes.INTERNAL_ERROR
 import com.google.android.gms.common.api.Status
 import com.google.android.gms.nearby.exposurenotification.ExposureNotificationClient
+import io.kotest.assertions.throwables.shouldNotThrowAny
+import io.kotest.assertions.throwables.shouldThrow
 import io.kotest.matchers.shouldBe
-import io.mockk.Called
 import io.mockk.MockKAnnotations
 import io.mockk.clearAllMocks
 import io.mockk.every
 import io.mockk.impl.annotations.MockK
-import io.mockk.verify
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.test.runBlockingTest
 import org.junit.jupiter.api.AfterEach
 import org.junit.jupiter.api.BeforeEach
 import org.junit.jupiter.api.Test
-import org.junit.jupiter.api.assertThrows
 import testhelpers.gms.MockGMSTask
 
 @ExperimentalCoroutinesApi
@@ -39,61 +39,74 @@ internal class DefaultENFVersionTest {
     )
 
     @Test
-    fun `isAbove API v16 is true for v17`() {
+    fun `current version is newer than the required version`() {
         every { client.version } returns MockGMSTask.forValue(17000000L)
 
         runBlockingTest {
-            createInstance().isAtLeast(ENFVersion.V16) shouldBe true
+            createInstance().apply {
+                getENFClientVersion() shouldBe 17000000L
+                shouldNotThrowAny {
+                    requireMinimumVersion(ENFVersion.V1_6)
+                }
+            }
         }
     }
 
     @Test
-    fun `isAbove API v16 is false for v15`() {
+    fun `current version is older than the required version`() {
         every { client.version } returns MockGMSTask.forValue(15000000L)
 
         runBlockingTest {
-            createInstance().isAtLeast(ENFVersion.V16) shouldBe false
-        }
-    }
+            createInstance().apply {
+                getENFClientVersion() shouldBe 15000000L
 
-    @Test
-    fun `isAbove API v16 throws IllegalArgument for invalid version`() {
-        assertThrows<IllegalArgumentException> {
-            runBlockingTest {
-                createInstance().isAtLeast(1L)
+                shouldThrow<OutdatedENFVersionException> {
+                    requireMinimumVersion(ENFVersion.V1_6)
+                }
             }
-            verify { client.version wasNot Called }
         }
     }
 
     @Test
-    fun `isAbove API v16 false when APIException for too low version`() {
-        every { client.version } returns MockGMSTask.forError(ApiException(Status(API_NOT_CONNECTED)))
+    fun `current version is equal to the required version`() {
+        every { client.version } returns MockGMSTask.forValue(16000000L)
 
         runBlockingTest {
-            createInstance().isAtLeast(ENFVersion.V16) shouldBe false
+            createInstance().apply {
+                getENFClientVersion() shouldBe ENFVersion.V1_6
+                shouldNotThrowAny {
+                    requireMinimumVersion(ENFVersion.V1_6)
+                }
+            }
         }
     }
 
     @Test
-    fun `require API v16 throws UnsupportedENFVersionException for v15`() {
-        every { client.version } returns MockGMSTask.forValue(ENFVersion.V15)
+    fun `API_NOT_CONNECTED exceptions are not treated as failures`() {
+        every { client.version } returns MockGMSTask.forError(ApiException(Status(API_NOT_CONNECTED)))
 
-        assertThrows<ENFVersion.Companion.UnsupportedENFVersionException> {
-            runBlockingTest {
-                createInstance().requireAtLeast(ENFVersion.V16)
+        runBlockingTest {
+            createInstance().apply {
+                getENFClientVersion() shouldBe null
+                shouldNotThrowAny {
+                    requireMinimumVersion(ENFVersion.V1_6)
+                }
             }
         }
     }
 
     @Test
-    fun `require API v15 does not throw for v16`() {
-        every { client.version } returns MockGMSTask.forValue(ENFVersion.V16)
+    fun `rethrows unexpected exceptions`() {
+        every { client.version } returns MockGMSTask.forError(ApiException(Status(INTERNAL_ERROR)))
 
         runBlockingTest {
-            createInstance().requireAtLeast(ENFVersion.V15)
-        }
+            createInstance().apply {
+                getENFClientVersion() shouldBe null
 
-        verify { client.version }
+                shouldThrow<ApiException> {
+                    requireMinimumVersion(ENFVersion.V1_6)
+                }
+            }
+        }
     }
 }
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 ece66bfcb20995de6a14d2bc80487d8022177d2b..4af8bfe870a7f39adc6f71b9d1943fc93c6843ec 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
@@ -100,7 +100,7 @@ class ExposureWindowsCalculationTest : BaseTest() {
         debugLog("Test cases checked. Total count: ${json.testCases.size}")
 
         // 3 - Mock calculation configuration and create default risk level with it
-        jsonToConfiguration(json.defaultRiskCalculationConfiguration)
+        setupTestConfiguration(json.defaultRiskCalculationConfiguration)
         coEvery { appConfigProvider.getAppConfig() } returns testConfig
         every { appConfigProvider.currentConfig } returns flow { testConfig }
         logConfiguration(testConfig)
@@ -296,7 +296,7 @@ class ExposureWindowsCalculationTest : BaseTest() {
         debugLog(result.toString(), logLevel)
     }
 
-    private fun jsonToConfiguration(json: DefaultRiskCalculationConfiguration) {
+    private fun setupTestConfiguration(json: DefaultRiskCalculationConfiguration) {
 
         testConfig = ConfigDataContainer(
             serverTime = Instant.now(),