diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt
index 82f7d6f3b81fd95fc2db2b8e192a6bae5f196598..49823d1a8dd83f764c63dc78c1217f55123ee297 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RetrieveDiagnosisKeysTransaction.kt
@@ -116,6 +116,16 @@ object RetrieveDiagnosisKeysTransaction : Transaction() {
 
     /** initiates the transaction. This suspend function guarantees a successful transaction once completed. */
     suspend fun start() = lockAndExecuteUnique {
+        /**
+         * Handles the case when the ENClient got disabled but the Transaction is still scheduled
+         * in a background job. Also it acts as a failure catch in case the orchestration code did
+         * not check in before.
+         */
+        if (!InternalExposureNotificationClient.asyncIsEnabled()) {
+            Timber.w("EN is not enabled, skipping RetrieveDiagnosisKeys")
+            executeClose()
+            return@lockAndExecuteUnique
+        }
         /****************************************************
          * INIT TRANSACTION
          ****************************************************/
@@ -193,8 +203,6 @@ object RetrieveDiagnosisKeysTransaction : Transaction() {
      * Executes the INIT Transaction State
      */
     private suspend fun executeSetup() = executeState(SETUP) {
-        if (!InternalExposureNotificationClient.asyncIsEnabled())
-            throw IllegalStateException("The Exposure Notification Framework must be active, check your tracing status")
         lastFetchDateForRollback.set(LocalData.lastTimeDiagnosisKeysFromServerFetch())
         val currentDate = Date(System.currentTimeMillis())
         Timber.d("using $currentDate as current date in Transaction.")