diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md
index d291bdb330f99134a8ad3d66450028179654c8b5..fc9b825df03fd7dc2500dd9491466c9d80915bf7 100644
--- a/.github/pull_request_template.md
+++ b/.github/pull_request_template.md
@@ -7,11 +7,10 @@ Before submitting, please take the time to check the points below and provide so
 
 * [ ] Test your changes as thoroughly as possible before you commit them. Preferably, automate your test by unit/integration tests.
 * [ ] If this PR comes from a fork, please [Allow edits from maintainers](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/allowing-changes-to-a-pull-request-branch-created-from-a-fork)
-* [ ] Set a speaking title. Format: {task_name} (closes #{issue_number}). For example: Use logger (closes #41)
+* [ ] Set a speaking title. Format: {task_name} (closes #{issue_number}). For example: Use logger (closes # 41)
 * [ ] [Link your Pull Request to an issue](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue) (if applicable)
 * [ ] Create Work In Progress [WIP] pull requests only if you need clarification or an explicit review before you can continue your work item.
-* [ ] Make sure that your PR is not introducing _unncessary_ reformatting (e.g., introduced by on-save hooks in your IDE)
-* [ ] Check our [Contribution Guidelines](https://github.com/corona-warn-app/cwa-app-android/blob/master/CONTRIBUTING.md)
+* [ ] Make sure that your PR is not introducing _unnecessary_ reformatting (e.g., introduced by on-save hooks in your IDE)
 
 ## Description
 <!-- Please be brief in describing which issue is solved by your PR or which enhancement it brings -->
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4e5bb23367d0f310c5ccb4a48ac8da7c4965cbdb..210103484f04fd6ef4681c3ace195bac161d88e0 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -46,7 +46,7 @@ The following rule governs documentation contributions:
 
 ## Pull Request Checklist
 
-* Branch from the master branch and, if needed, rebase to the current master branch before submitting your pull request. If it doesn't merge cleanly with master, you may be asked to rebase your changes.
+* Branch from the dev branch and ensure it is up to date with the current dev branch before submitting your pull request. If it doesn't merge cleanly with dev, you may be asked to resolve the conflicts. Pull requests to master will be closed.
 
 * Commits should be as small as possible while ensuring that each commit is correct independently (i.e., each commit should compile and pass tests).
 
diff --git a/Corona-Warn-App/build.gradle b/Corona-Warn-App/build.gradle
index c81a276dfb6a7360e191aa80dfbce53d074757c0..534f5fe634dbc9be640e303d9d27b0d0dd26246a 100644
--- a/Corona-Warn-App/build.gradle
+++ b/Corona-Warn-App/build.gradle
@@ -32,8 +32,8 @@ android {
         applicationId 'de.rki.coronawarnapp'
         minSdkVersion 23
         targetSdkVersion 29
-        versionCode 6
-        versionName "0.5.6"
+        versionCode 7
+        versionName "0.8.0"
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
         buildConfigField "String", "DOWNLOAD_CDN_URL", "\"$DOWNLOAD_CDN_URL\""
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt
index 40a4b67b30f0ec859e9fd4523da86a00c275a635..668dd8864f56726aeb8c8add8d0236250fdde04e 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt
@@ -2,17 +2,52 @@ package de.rki.coronawarnapp
 
 import android.app.Application
 import android.content.Context
+import android.util.Log
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.LifecycleObserver
+import androidx.lifecycle.OnLifecycleEvent
+import androidx.lifecycle.ProcessLifecycleOwner
+import de.rki.coronawarnapp.notification.NotificationHelper
 
-class CoronaWarnApplication : Application() {
+class CoronaWarnApplication : Application(), LifecycleObserver {
 
     companion object {
+        val TAG: String? = CoronaWarnApplication::class.simpleName
         private lateinit var instance: CoronaWarnApplication
+
+        /* describes if the app is in foreground
+         * Initialized to false, because app could also be started by a background job.
+         * For the cases where the app is started via the launcher icon, the onAppForegrounded
+         * event will be called, setting it to true
+         */
+        var isAppInForeground = false
+
         fun getAppContext(): Context =
             instance.applicationContext
     }
 
     override fun onCreate() {
         instance = this
+        NotificationHelper.createNotificationChannel()
         super.onCreate()
+        ProcessLifecycleOwner.get().lifecycle.addObserver(this)
+    }
+
+    /**
+     * Callback when the app is open but backgrounded
+     */
+    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
+    fun onAppBackgrounded() {
+        isAppInForeground = false
+        Log.v(TAG, "App backgrounded")
+    }
+
+    /**
+     * Callback when the app is foregrounded
+     */
+    @OnLifecycleEvent(Lifecycle.Event.ON_START)
+    fun onAppForegrounded() {
+        isAppInForeground = true
+        Log.v(TAG, "App foregrounded")
     }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/RiskLevelCalculationException.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/RiskLevelCalculationException.kt
index 53aa3ab61350428ac2defb3621f451819f5648df..6f6216f1cdebcad652c3dfc86f790ea276d603af 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/RiskLevelCalculationException.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/RiskLevelCalculationException.kt
@@ -1,4 +1,4 @@
 package de.rki.coronawarnapp.exception
 
 class RiskLevelCalculationException(cause: Throwable) :
-    Exception("an exception occured during risk level calculation", cause)
+    Exception("an exception occurred during risk level calculation", cause)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt
index 74965554c01b0a905fb0c7d62966cddfeee7e895..68167454aaf53ae488865e5a01af6afb894f7d27 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/http/WebRequestBuilder.kt
@@ -192,7 +192,7 @@ object WebRequestBuilder {
     ) =
         suspendCoroutine<String> { cont ->
             val requestID = UUID.randomUUID()
-            val getTestResultRequest =
+            val getTANRequest =
                 TanRequest(
                     url,
                     requestID,
@@ -209,7 +209,7 @@ object WebRequestBuilder {
                     },
                     RequestErrorListener(requestID, cont)
                 )
-            RequestQueueHolder.addToRequestQueue(getTestResultRequest)
+            RequestQueueHolder.addToRequestQueue(getTANRequest)
             Log.d(TAG, "$requestID: Added $url to queue.")
         }
 
@@ -254,7 +254,7 @@ object WebRequestBuilder {
         Response.ErrorListener {
         override fun onErrorResponse(error: VolleyError?) {
             if (error != null) {
-                val webRequestException = WebRequestException("an error occured during a webrequest", error)
+                val webRequestException = WebRequestException("an error occurred during a webrequest", error)
                 webRequestException.report(de.rki.coronawarnapp.exception.ExceptionCategory.HTTP)
                 cont.resumeWithException(webRequestException)
             } else {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationConstants.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationConstants.kt
index 4ed48094bd84697992129ed7de88609aa265a817..1aba38cf9b0fe897f7284960db0b74d6aded9cb3 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationConstants.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationConstants.kt
@@ -17,7 +17,7 @@ object NotificationConstants {
     /**
      * Notification small icon String.xml path
      */
-    const val NOTIFICATION_SMALL_ICON = R.drawable.ic_app_launch_icon
+    const val NOTIFICATION_SMALL_ICON = R.drawable.ic_splash_logo
 
     /**
      * Notification channel name String.xml path
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationHelper.kt
index c41ff76fa880e048cccff1714080c775c38b7cad..4a1b47a284fb813af686f2ef71935ad612b1acfc 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/notification/NotificationHelper.kt
@@ -19,6 +19,7 @@ import kotlin.random.Random
 
 /**
  * Singleton class for notification handling
+ * Notifications should only be sent when the app is not in foreground.
  * The helper uses externalised constants for readability.
  *
  * @see NotificationConstants
@@ -91,14 +92,23 @@ object NotificationHelper {
     private fun buildNotification(title: String, content: String, visibility: Int): Notification? {
         val builder = NotificationCompat.Builder(CoronaWarnApplication.getAppContext(), channelId)
             .setSmallIcon(NotificationConstants.NOTIFICATION_SMALL_ICON)
-            .setContentTitle(title)
             .setPriority(NotificationCompat.PRIORITY_HIGH)
             .setVisibility(visibility)
             .setContentIntent(createPendingIntentToMainActivity())
             .setAutoCancel(true)
 
+        if (title.isNotEmpty()) {
+            builder.setContentTitle(title)
+        }
+
         if (visibility == NotificationCompat.VISIBILITY_PRIVATE) {
-            builder.setPublicVersion(buildNotification(title, content, NotificationCompat.VISIBILITY_PUBLIC))
+            builder.setPublicVersion(
+                buildNotification(
+                    title,
+                    content,
+                    NotificationCompat.VISIBILITY_PUBLIC
+                )
+            )
         } else if (visibility == NotificationCompat.VISIBILITY_PUBLIC) {
             builder.setContentText(content)
         }
@@ -128,7 +138,6 @@ object NotificationHelper {
      * @param visibility: Int
      */
     fun sendNotification(title: String, content: String, visibility: Int) {
-        createNotificationChannel()
         val notification = buildNotification(title, content, visibility) ?: return
         with(NotificationManagerCompat.from(CoronaWarnApplication.getAppContext())) {
             notify(Random.nextInt(), notification)
@@ -137,16 +146,16 @@ object NotificationHelper {
 
     /**
      * Send notification
-     * Build and send notification with predefined title and content.
-     * Visibility is auto set to NotificationCompat.VISIBILITY_PRIVATE
+     * Build and send notification with content and visibility.
+     * Notification is only sent if app is not in foreground.
      *
-     * @param title: String
      * @param content: String
-     *
-     * @see NotificationCompat.VISIBILITY_PRIVATE
+     * @param visibility: Int
      */
-    fun sendNotification(title: String, content: String) {
-        sendNotification(title, content, NotificationCompat.VISIBILITY_PRIVATE)
+    fun sendNotification(content: String, visibility: Int) {
+        if (!CoronaWarnApplication.isAppInForeground) {
+            sendNotification("", content, visibility)
+        }
     }
 
     /**
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevel.kt
index 9a912d19f5a18159e4013ac811e4798767d3c6e9..0f521a9d18849bfbca2d8ee19306508047d05b64 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/risk/RiskLevel.kt
@@ -40,5 +40,41 @@ enum class RiskLevel(val raw: Int) {
                 else -> UNDETERMINED
             }
         }
+
+        // risk level categories
+        private val HIGH_RISK_LEVELS = arrayOf(INCREASED_RISK)
+        private val LOW_RISK_LEVELS = arrayOf(
+            UNKNOWN_RISK_INITIAL,
+            NO_CALCULATION_POSSIBLE_TRACING_OFF,
+            LOW_LEVEL_RISK,
+            UNKNOWN_RISK_OUTDATED_RESULTS,
+            UNDETERMINED
+        )
+
+        /**
+         * Checks if the RiskLevel has change from a high to low or from low to high
+         *
+         * @param previousRiskLevel previously persisted RiskLevel
+         * @param currentRiskLevel newly calculated RiskLevel
+         * @return
+         */
+        fun riskLevelChangedBetweenLowAndHigh(
+            previousRiskLevel: RiskLevel,
+            currentRiskLevel: RiskLevel
+        ): Boolean {
+            var riskLevelChangedBetweenLowAndHigh = false
+            if (HIGH_RISK_LEVELS.contains(previousRiskLevel) && LOW_RISK_LEVELS.contains(
+                    currentRiskLevel
+                )
+            ) {
+                riskLevelChangedBetweenLowAndHigh = true
+            } else if (LOW_RISK_LEVELS.contains(previousRiskLevel) && HIGH_RISK_LEVELS.contains(
+                    currentRiskLevel
+                )
+            ) {
+                riskLevelChangedBetweenLowAndHigh = true
+            }
+            return riskLevelChangedBetweenLowAndHigh
+        }
     }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt
index b6751d06c724478e4fe715909b3cfff332a1727d..77f4d57c139bd54349221890e6e41a87f50f045a 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/service/submission/SubmissionService.kt
@@ -22,6 +22,7 @@ object SubmissionService {
             testTAN != null -> asyncRegisterDeviceViaTAN(testTAN)
             else -> throw NoGUIDOrTANSetException()
         }
+        LocalData.devicePairingSuccessfulTimestamp(System.currentTimeMillis())
     }
 
     private suspend fun asyncRegisterDeviceViaGUID(guid: String) {
@@ -73,6 +74,7 @@ object SubmissionService {
 
     fun deleteRegistrationToken() {
         LocalData.registrationToken(null)
+        LocalData.devicePairingSuccessfulTimestamp(0L)
     }
 
     private fun deleteAuthCode() {
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 f6ec3ec633dd8739577490319c13358a046c2c10..15e12326feff5d52cc0a5fb296df09869631a734 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
@@ -10,9 +10,9 @@ import de.rki.coronawarnapp.storage.keycache.KeyCacheEntity
 import de.rki.coronawarnapp.storage.tracing.TracingIntervalDao
 import de.rki.coronawarnapp.storage.tracing.TracingIntervalEntity
 import de.rki.coronawarnapp.util.Converters
+import de.rki.coronawarnapp.util.security.SecurityHelper
 import net.sqlcipher.database.SQLiteDatabase
 import net.sqlcipher.database.SupportFactory
-import java.util.UUID
 
 @Database(
     entities = [ExposureSummaryEntity::class, KeyCacheEntity::class, TracingIntervalEntity::class],
@@ -39,11 +39,8 @@ abstract class AppDatabase : RoomDatabase() {
         fun resetInstance(context: Context) = { instance = null }.also { getInstance(context) }
 
         private fun buildDatabase(context: Context): AppDatabase {
-            if (LocalData.databasePassword() == null) {
-                LocalData.databasePassword(UUID.randomUUID().toString().toCharArray())
-            }
             return Room.databaseBuilder(context, AppDatabase::class.java, DATABASE_NAME)
-                .openHelperFactory(SupportFactory(SQLiteDatabase.getBytes(LocalData.databasePassword())))
+                .openHelperFactory(SupportFactory(SQLiteDatabase.getBytes(SecurityHelper.getDBPassword())))
                 .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 4d7ce3c8bcefa4e1eec6dad11a554b770983e31f..7725698b6db5cbfd31fcb576e1ca0dd55ec010c3 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
@@ -1,6 +1,7 @@
 package de.rki.coronawarnapp.storage
 
 import android.content.SharedPreferences
+import androidx.core.content.edit
 import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.util.security.SecurityHelper.globalEncryptedSharedPreferencesInstance
@@ -37,12 +38,11 @@ object LocalData {
      *
      * @param value boolean if onboarding was completed
      */
-    fun isOnboarded(value: Boolean) = with(getSharedPreferenceInstance().edit()) {
+    fun isOnboarded(value: Boolean) = getSharedPreferenceInstance().edit(true) {
         putBoolean(
             CoronaWarnApplication.getAppContext()
                 .getString(R.string.preference_onboarding_completed), value
         )
-        commit()
     }
 
     /****************************************************
@@ -73,7 +73,7 @@ object LocalData {
      * @param value timestamp in ms
      */
     fun initialTracingActivationTimestamp(value: Long) =
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_initial_tracing_activation_time),
@@ -106,7 +106,7 @@ object LocalData {
      *
      * @param value timestamp in ms
      */
-    fun lastNonActiveTracingTimestamp(value: Long?) = with(getSharedPreferenceInstance().edit()) {
+    fun lastNonActiveTracingTimestamp(value: Long?) = getSharedPreferenceInstance().edit(true) {
         // TODO need this for nullable ref, shout not be goto for nullable storage
         putLong(
             CoronaWarnApplication.getAppContext().getString(
@@ -139,7 +139,7 @@ object LocalData {
      */
     fun totalNonActiveTracing(value: Long?) {
         // TODO need this for nullable ref, shout not be goto for nullable storage
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_total_non_active_tracing),
@@ -180,7 +180,7 @@ object LocalData {
      */
     fun lastTimeDiagnosisKeysFromServerFetch(value: Date?) {
         // TODO need this for nullable ref, shout not be goto for nullable storage
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_m_timestamp_diagnosis_keys_fetch),
@@ -205,7 +205,7 @@ object LocalData {
      * Sets the last timestamp the user manually triggered the key retrieval process
      */
     fun lastTimeManualDiagnosisKeysRetrieved(value: Long) =
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_m_timestamp_manual_diagnosis_keys_retrieval),
@@ -234,7 +234,7 @@ object LocalData {
      *
      * @param value UUID as string
      */
-    fun googleApiToken(value: String?) = with(getSharedPreferenceInstance().edit()) {
+    fun googleApiToken(value: String?) = getSharedPreferenceInstance().edit(true) {
         putString(
             CoronaWarnApplication.getAppContext()
                 .getString(R.string.preference_m_string_google_api_token),
@@ -262,7 +262,7 @@ object LocalData {
      * Toggles the user decision if notification should be enabled for a risk change
      *
      */
-    fun toggleNotificationsRiskEnabled() = with(getSharedPreferenceInstance().edit()) {
+    fun toggleNotificationsRiskEnabled() = getSharedPreferenceInstance().edit(true) {
         putBoolean(
             CoronaWarnApplication.getAppContext()
                 .getString(R.string.preference_notifications_risk_enabled),
@@ -277,7 +277,7 @@ object LocalData {
         true
     )
 
-    fun toggleNotificationsTestEnabled() = with(getSharedPreferenceInstance().edit()) {
+    fun toggleNotificationsTestEnabled() = getSharedPreferenceInstance().edit(true) {
         putBoolean(
             CoronaWarnApplication.getAppContext()
                 .getString(R.string.preference_notifications_test_enabled),
@@ -300,7 +300,7 @@ object LocalData {
      * Toggles the decision if background jobs are enabled
      *
      */
-    fun toggleBackgroundJobEnabled() = with(getSharedPreferenceInstance().edit()) {
+    fun toggleBackgroundJobEnabled() = getSharedPreferenceInstance().edit(true) {
         putBoolean(
             CoronaWarnApplication.getAppContext()
                 .getString(R.string.preference_background_job_allowed),
@@ -323,7 +323,7 @@ object LocalData {
      * Toggles the boolean if the user has mobile data enabled
      *
      */
-    fun toggleMobileDataEnabled() = with(getSharedPreferenceInstance().edit()) {
+    fun toggleMobileDataEnabled() = getSharedPreferenceInstance().edit(true) {
         putBoolean(
             CoronaWarnApplication.getAppContext()
                 .getString(R.string.preference_mobile_data_allowed),
@@ -353,7 +353,7 @@ object LocalData {
      * @param value registration token as string
      */
     fun registrationToken(value: String?) {
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putString(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_m_registration_token),
@@ -364,7 +364,7 @@ object LocalData {
     }
 
     fun inititalTestResultReceivedTimestamp(value: Long) =
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putLong(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_initial_result_received_time),
@@ -386,8 +386,26 @@ object LocalData {
         return timestamp
     }
 
-    fun numberOfSuccessfulSubmissions(value: Int) =
+    fun devicePairingSuccessfulTimestamp(value: Long) =
         with(getSharedPreferenceInstance().edit()) {
+            putLong(
+                CoronaWarnApplication.getAppContext()
+                    .getString(R.string.preference_device_pairing_successful_time),
+                value
+            )
+            commit()
+        }
+
+    fun devicePairingSuccessfulTimestamp(): Long? {
+        return getSharedPreferenceInstance().getLong(
+            CoronaWarnApplication.getAppContext()
+                .getString(R.string.preference_device_pairing_successful_time),
+            0L
+        )
+    }
+
+    fun numberOfSuccessfulSubmissions(value: Int) =
+        getSharedPreferenceInstance().edit(true) {
             putInt(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_number_successful_submissions),
@@ -411,7 +429,7 @@ object LocalData {
     )
 
     fun testGUID(value: String?) {
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putString(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_m_test_guid),
@@ -428,7 +446,7 @@ object LocalData {
     )
 
     fun authCode(value: String?) {
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putString(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_m_auth_code),
@@ -439,7 +457,7 @@ object LocalData {
     }
 
     fun isAllowedToSubmitDiagnosisKeys(isAllowedToSubmitDiagnosisKeys: Boolean) {
-        with(getSharedPreferenceInstance().edit()) {
+        getSharedPreferenceInstance().edit(true) {
             putBoolean(
                 CoronaWarnApplication.getAppContext()
                     .getString(R.string.preference_m_is_allowed_to_submit_diagnosis_keys),
@@ -457,7 +475,7 @@ object LocalData {
         )
     }
 
-    fun teletan(value: String?) = with(getSharedPreferenceInstance().edit()) {
+    fun teletan(value: String?) = getSharedPreferenceInstance().edit(true) {
         putString(
             CoronaWarnApplication.getAppContext().getString(R.string.preference_teletan),
             value
@@ -469,27 +487,6 @@ object LocalData {
         CoronaWarnApplication.getAppContext().getString(R.string.preference_teletan), null
     )
 
-    /****************************************************
-     * DATABASE PASSWORD
-     ****************************************************/
-
-    fun databasePassword(): CharArray? = getSharedPreferenceInstance().getString(
-        CoronaWarnApplication.getAppContext()
-            .getString(R.string.preference_database_password),
-        null
-    )?.toCharArray()
-
-    fun databasePassword(password: CharArray) {
-        with(getSharedPreferenceInstance().edit()) {
-            putString(
-                CoronaWarnApplication.getAppContext()
-                    .getString(R.string.preference_database_password),
-                password.toString()
-            )
-            commit()
-        }
-    }
-
     /****************************************************
      * ENCRYPTED SHARED PREFERENCES HANDLING
      ****************************************************/
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt
index 839ab07154fd8e9af0843b08226b5891f7228423..5d3546d60344dadc673df5f389c561195ce40388 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/SubmissionRepository.kt
@@ -19,12 +19,14 @@ object SubmissionRepository {
         val testResultValue =
             WebRequestBuilder.asyncGetTestResult(TEST_RESULT_URL, registrationToken)
         testResult.value = TestResult.fromInt(testResultValue)
-
+        if (testResult == TestResult.POSITIVE) {
+            LocalData.isAllowedToSubmitDiagnosisKeys(true)
+        }
         val initialTestResultReceivedTimestamp = LocalData.inititalTestResultReceivedTimestamp()
 
         if (initialTestResultReceivedTimestamp == null) {
             val currentTime = System.currentTimeMillis()
-            LocalData.initialTracingActivationTimestamp(currentTime)
+            LocalData.inititalTestResultReceivedTimestamp(currentTime)
             testResultReceivedDate.value = Date(currentTime)
         } else {
             testResultReceivedDate.value = Date(initialTestResultReceivedTimestamp)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt
index 3c24bf0a0e10113a9ac6b88a09454901b74c0ec8..43f434f3c175d7b42bd04cb022c143efbdb99e13 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt
@@ -49,7 +49,7 @@ class TracingIntervalRepository(private val tracingIntervalDao: TracingIntervalD
 
     suspend fun createInterval(from: Long, to: Long) {
         Log.v(TAG, "Insert Tracing Interval $from, $to")
-        if (to < from) throw IllegalArgumentException("to cannot be after from")
+        if (to < from) throw IllegalArgumentException("to cannot be after or equal from")
         tracingIntervalDao.insertInterval(TracingIntervalEntity().apply {
             this.from = from
             this.to = to
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt
index bcea122a2c9a865710c10fa9cba72a4d3d519d8c..48c521cae4c8a7f57ff0f2cd38afd7a2501c5531 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/RiskLevelTransaction.kt
@@ -1,9 +1,13 @@
 package de.rki.coronawarnapp.transaction
 
 import android.util.Log
+import androidx.core.app.NotificationCompat
 import com.google.android.gms.nearby.exposurenotification.ExposureSummary
+import de.rki.coronawarnapp.CoronaWarnApplication
+import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.exception.RiskLevelCalculationException
 import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
+import de.rki.coronawarnapp.notification.NotificationHelper
 import de.rki.coronawarnapp.risk.RiskLevel
 import de.rki.coronawarnapp.risk.RiskLevel.INCREASED_RISK
 import de.rki.coronawarnapp.risk.RiskLevel.LOW_LEVEL_RISK
@@ -444,6 +448,13 @@ object RiskLevelTransaction : Transaction() {
      * @param riskLevel
      */
     private fun updateRiskLevelScore(riskLevel: RiskLevel) {
+        val lastCalculatedScore = RiskLevelRepository.getLastCalculatedScore()
+        if (RiskLevel.riskLevelChangedBetweenLowAndHigh(lastCalculatedScore, riskLevel)) {
+            NotificationHelper.sendNotification(
+                CoronaWarnApplication.getAppContext().getString(R.string.notification_body),
+                NotificationCompat.PRIORITY_HIGH
+            )
+        }
         RiskLevelRepository.setRiskLevelScore(riskLevel)
     }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransaction.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransaction.kt
index 764d5b174c254764daed8778d5d2795ac07a7aaa..f998b199a8d28d28264b16c9a69a049204512717 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransaction.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/transaction/SubmitDiagnosisKeysTransaction.kt
@@ -7,6 +7,7 @@ import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction.SubmitDia
 import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction.SubmitDiagnosisKeysTransactionState.RETRIEVE_TAN
 import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction.SubmitDiagnosisKeysTransactionState.RETRIEVE_TEMPORARY_EXPOSURE_KEY_HISTORY
 import de.rki.coronawarnapp.transaction.SubmitDiagnosisKeysTransaction.SubmitDiagnosisKeysTransactionState.SUBMIT_KEYS
+import de.rki.coronawarnapp.util.ProtoFormatConverterExtensions.limitKeyCount
 import de.rki.coronawarnapp.util.ProtoFormatConverterExtensions.transformKeyHistoryToExternalFormat
 
 /**
@@ -58,6 +59,7 @@ object SubmitDiagnosisKeysTransaction : Transaction() {
          ****************************************************/
         val temporaryExposureKeyList = executeState(RETRIEVE_TEMPORARY_EXPOSURE_KEY_HISTORY) {
             InternalExposureNotificationClient.asyncGetTemporaryExposureKeyHistory()
+                .limitKeyCount()
                 .transformKeyHistoryToExternalFormat()
         }
         /****************************************************
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UiConstants.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UiConstants.kt
index 13f360e19ba4701815df30a213a3f515e9070a9e..4179af0c1439f9f834cc837f7a0da2c3f6fb1918 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UiConstants.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/UiConstants.kt
@@ -2,4 +2,7 @@ package de.rki.coronawarnapp.ui
 
 object UiConstants {
     const val INFORMATION_URI = "https://www.bundesregierung.de/c19app-intern"
+
+    // todo move to strings if translatable is needed? if yes include regex in CallHelper to filter non-numerical chars excluding '+'
+    const val TECHNICAL_HOTLINE = "tel:+49 800 7540001"
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt
index d3bc89ba19828b3230ed06f5392ee0654c9188b2..e05286d770da4d0625b4d7a2ff50343b5d917eb2 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationContactFragment.kt
@@ -6,7 +6,9 @@ import android.view.View
 import android.view.ViewGroup
 import de.rki.coronawarnapp.databinding.FragmentInformationContactBinding
 import de.rki.coronawarnapp.ui.BaseFragment
+import de.rki.coronawarnapp.ui.UiConstants
 import de.rki.coronawarnapp.ui.main.MainActivity
+import de.rki.coronawarnapp.util.CallHelper
 
 /**
  * Basic Fragment which only displays static content.
@@ -35,5 +37,8 @@ class InformationContactFragment : BaseFragment() {
         binding.informationContactHeader.informationHeader.headerButtonBack.buttonIcon.setOnClickListener {
             (activity as MainActivity).goBack()
         }
+        binding.informationContactNavigationRowPhone.navigationRow.setOnClickListener {
+            CallHelper.call(this, UiConstants.TECHNICAL_HOTLINE)
+        }
     }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainFragment.kt
index 20a6dcf1059b37bae8ee0ed8c6daab898119adf9..3c6049c93a1fbf543528ef2175cace3bf6340e08 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainFragment.kt
@@ -23,11 +23,12 @@ import de.rki.coronawarnapp.util.OpenUrlHelper
 
 /**
  * After the user has finished the onboarding this fragment will be the heart of the application.
- * Two VieModels are needed that this fragment shows all relevant information to the user.
+ * Three ViewModels are needed that this fragment shows all relevant information to the user.
  * Also the Menu is set here.
  *
  * @see tracingViewModel
  * @see settingsViewModel
+ * @see submissionViewModel
  * @see PopupMenu
  */
 class MainFragment : BaseFragment() {
@@ -86,6 +87,11 @@ class MainFragment : BaseFragment() {
                 MainFragmentDirections.actionMainFragmentToSubmissionResultFragment()
             )
         }
+        binding.mainTestPositive.submissionStatusCardPositiveResultShowButton.setOnClickListener {
+            doNavigate(
+                MainFragmentDirections.actionMainFragmentToSubmissionResultFragment()
+            )
+        }
         binding.mainTest.submissionStatusCardUnregistered.submissionStatusCardUnregisteredButton.setOnClickListener {
             doNavigate(
                 MainFragmentDirections.actionMainFragmentToSubmissionIntroFragment()
@@ -150,9 +156,7 @@ class MainFragment : BaseFragment() {
                         NotificationManagerCompat.from(requireContext()).areNotificationsEnabled()
                             .toString()
                     )
-                    NotificationHelper.createNotificationChannel()
                     NotificationHelper.sendNotification(
-                        getString(R.string.notification_headline),
                         getString(R.string.notification_body),
                         NotificationCompat.PRIORITY_HIGH
                     )
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt
index fe7b897c5b90958a7d3548e7632144356e8dc1d9..9bff3a7ade91187967d67c1d86f56429e787f95d 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainShareFragment.kt
@@ -1,6 +1,5 @@
 package de.rki.coronawarnapp.ui.main
 
-import android.content.Intent
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -10,6 +9,7 @@ import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentMainShareBinding
 import de.rki.coronawarnapp.ui.BaseFragment
 import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel
+import de.rki.coronawarnapp.util.ShareHelper
 
 /**
  * This fragment informs the user about what he is going to share and how he is going to help everybody with this :)
@@ -43,20 +43,10 @@ class MainShareFragment : BaseFragment() {
 
     private fun setButtonOnClickListener() {
         binding.mainShareButton.setOnClickListener {
-            share()
+            ShareHelper.shareText(this, getString(R.string.main_share_message), null)
         }
         binding.mainShareHeader.informationHeader.headerButtonBack.buttonIcon.setOnClickListener {
             (activity as MainActivity).goBack()
         }
     }
-
-    // TODO move to helper
-    private fun share() {
-        val share = Intent.createChooser(Intent().apply {
-            action = Intent.ACTION_SEND
-            type = "text/plain"
-            putExtra(Intent.EXTRA_TEXT, getString(R.string.main_share_message))
-        }, null)
-        startActivity(share)
-    }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt
index 4b95d319a4102deea83e6080cd83777d5c41bcb6..7984e7c41fc184794363b729314a45cce9f59cd7 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingNotificationsFragment.kt
@@ -1,20 +1,13 @@
 package de.rki.coronawarnapp.ui.onboarding
 
-import android.content.Intent
-import android.os.Build
 import android.os.Bundle
-import android.provider.Settings
-import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import androidx.appcompat.app.AlertDialog
 import androidx.core.app.NotificationManagerCompat
-import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentOnboardingNotificationsBinding
-import de.rki.coronawarnapp.storage.SettingsRepository
 import de.rki.coronawarnapp.ui.BaseFragment
-import de.rki.coronawarnapp.util.DialogHelper
 
 /**
  * This fragment ask the user if he wants to get notifications and finishes the onboarding afterwards.
@@ -45,12 +38,6 @@ class OnboardingNotificationsFragment : BaseFragment() {
 
     private fun setButtonOnClickListener() {
         binding.onboardingButtonFinish.setOnClickListener {
-            finishOrSettings()
-        }
-        binding.onboardingButtonDisable.setOnClickListener {
-            // Set default value for notifications to false
-            SettingsRepository.toggleNotificationsRiskEnabled()
-            SettingsRepository.toggleNotificationsTestEnabled()
             navigateToMain()
         }
         binding.onboardingButtonBack.buttonIcon.setOnClickListener {
@@ -58,55 +45,7 @@ class OnboardingNotificationsFragment : BaseFragment() {
         }
     }
 
-    private fun finishOrSettings() {
-        // If the os notifications settings are enabled the user can finish the onboarding.
-        // If the user want to get notifications but they are disabled on the os level he can go
-        // to the notification settings to activate them.
-        val areNotificationsEnabled =
-            NotificationManagerCompat.from(requireContext()).areNotificationsEnabled()
-        if (areNotificationsEnabled) {
-            navigateToMain()
-        } else {
-            showNotificationsDisabledDialog()
-        }
-    }
-
     private fun navigateToMain() {
         (requireActivity() as OnboardingActivity).completeOnboarding()
     }
-
-    private fun showNotificationsDisabledDialog() {
-        val dialog = DialogHelper.DialogInstance(
-            requireActivity(),
-            R.string.onboarding_notifications_headline,
-            R.string.onboarding_notifications_dialog_body,
-            R.string.onboarding_notifications_dialog_button_positive,
-            R.string.onboarding_notifications_dialog_button_negative,
-            {
-                navigateToNotificationSettings()
-            }, {
-                navigateToMain()
-            })
-        DialogHelper.showDialog(dialog)
-    }
-
-    private fun navigateToNotificationSettings() {
-        val intent = Intent()
-        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
-            Log.i(TAG, "current")
-            intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
-            intent.putExtra(
-                Settings.EXTRA_APP_PACKAGE,
-                requireContext().packageName
-            )
-        } else {
-            Log.i(TAG, "old")
-            intent.putExtra(
-                "app_package",
-                requireContext().packageName
-            )
-            intent.putExtra("app_uid", requireContext().applicationInfo.uid)
-        }
-        startActivity(intent)
-    }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt
index fe791014e5c8c9883506dcedc86e46995c3043c3..341a61b48ea63391675052076a8e80342f20528d 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragment.kt
@@ -60,7 +60,7 @@ class OnboardingTracingFragment : BaseFragment(),
             internalExposureNotificationPermissionHelper.requestPermissionToStartTracing()
         }
         binding.onboardingButtonDisable.setOnClickListener {
-            navigate()
+            showCancelDialog()
         }
         binding.onboardingButtonBack.buttonIcon.setOnClickListener {
             (activity as OnboardingActivity).goBack()
@@ -72,7 +72,7 @@ class OnboardingTracingFragment : BaseFragment(),
     }
 
     override fun onFailure(exception: Exception?) {
-        showCancelDialog()
+        navigate()
     }
 
     private fun showCancelDialog() {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt
index 30aaf81fa62368b34ba8c194b77192471764bcd8..570453ad9663339809c4b260a60b16ee09d06aa2 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsNotificationFragment.kt
@@ -1,8 +1,6 @@
 package de.rki.coronawarnapp.ui.settings
 
-import android.content.Intent
 import android.os.Bundle
-import android.provider.Settings
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -12,6 +10,7 @@ import de.rki.coronawarnapp.databinding.FragmentSettingsNotificationsBinding
 import de.rki.coronawarnapp.ui.main.MainActivity
 import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel
 import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel
+import de.rki.coronawarnapp.util.SettingsNavigationHelper
 
 /**
  * This is the setting notification page. Here the user sees his os notifications settings status.
@@ -57,15 +56,11 @@ class SettingsNotificationFragment : Fragment() {
         // Notifications about risk status
         val updateRiskNotificationSwitch =
             binding.settingsSwitchRowNotificationsRisk.settingsSwitchRowSwitch
-        val updateRiskNotificationRow =
-            binding.settingsSwitchRowNotificationsRisk.settingsSwitchRow
         // Notifications about test status
         val updateTestNotificationSwitch =
             binding.settingsSwitchRowNotificationsTest.settingsSwitchRowSwitch
-        val updateTestNotificationRow =
-            binding.settingsSwitchRowNotificationsTest.settingsSwitchRow
         // Settings
-        val settingsRow = binding.settingsNavigationRowSystem.settingsNavigationRow
+        val settingsRow = binding.settingsNavigationRowSystem.navigationRow
         val goBack =
             binding.settingsDetailsHeaderNotifications.settingsDetailsHeaderButtonBack.buttonIcon
         // Update Risk
@@ -75,9 +70,6 @@ class SettingsNotificationFragment : Fragment() {
                 settingsViewModel.toggleNotificationsRiskEnabled()
             }
         }
-        updateRiskNotificationRow.setOnClickListener {
-            settingsViewModel.toggleNotificationsRiskEnabled()
-        }
         // Update Test
         updateTestNotificationSwitch.setOnCheckedChangeListener { _, _ ->
             // android calls this listener also on start, so it has to be verified if the user pressed the switch
@@ -85,26 +77,12 @@ class SettingsNotificationFragment : Fragment() {
                 settingsViewModel.toggleNotificationsTestEnabled()
             }
         }
-        updateTestNotificationRow.setOnClickListener {
-            settingsViewModel.toggleNotificationsTestEnabled()
-        }
         goBack.setOnClickListener {
             (activity as MainActivity).goBack()
         }
         // System Settings
         settingsRow.setOnClickListener {
-            navigateToSettings()
+            SettingsNavigationHelper.toNotifications(requireContext())
         }
     }
-
-    private fun navigateToSettings() {
-        // Todo change to api level 23
-        val intent = Intent()
-        intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
-        intent.putExtra(
-            Settings.EXTRA_APP_PACKAGE,
-            requireContext().packageName
-        )
-        startActivity(intent)
-    }
 }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt
index e39eaf2a4cca75389bdeed7a063d74f157756f64..2b88b3c500216f50e8b610327a56c44c3bc5868b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt
@@ -9,6 +9,7 @@ import android.widget.Toast
 import androidx.fragment.app.activityViewModels
 import androidx.lifecycle.lifecycleScope
 import de.rki.coronawarnapp.databinding.FragmentSettingsTracingBinding
+import de.rki.coronawarnapp.exception.ExceptionCategory
 import de.rki.coronawarnapp.exception.report
 import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
 import de.rki.coronawarnapp.nearby.InternalExposureNotificationPermissionHelper
@@ -17,6 +18,7 @@ import de.rki.coronawarnapp.ui.ViewBlocker
 import de.rki.coronawarnapp.ui.main.MainActivity
 import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel
 import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel
+import de.rki.coronawarnapp.util.SettingsNavigationHelper
 import de.rki.coronawarnapp.worker.BackgroundWorkScheduler
 import kotlinx.coroutines.launch
 
@@ -57,29 +59,6 @@ class SettingsTracingFragment : BaseFragment(),
         setButtonOnClickListener()
     }
 
-    private fun setButtonOnClickListener() {
-        val switch = binding.settingsSwitchRowTracing.settingsSwitchRowSwitch
-        val row = binding.settingsSwitchRowTracing.settingsSwitchRow
-        internalExposureNotificationPermissionHelper =
-            InternalExposureNotificationPermissionHelper(this, this)
-        switch.setOnCheckedChangeListener { _, _ ->
-            // android calls this listener also on start, so it has to be verified if the user pressed the switch
-            if (switch.isPressed) {
-                ViewBlocker.runAndBlockInteraction(arrayOf(row, switch)) {
-                    startStopTracing()
-                }
-            }
-        }
-        row.setOnClickListener {
-            ViewBlocker.runAndBlockInteraction(arrayOf(row, switch)) {
-                startStopTracing()
-            }
-        }
-        binding.settingsDetailsHeaderTracing.settingsDetailsHeaderButtonBack.buttonIcon.setOnClickListener {
-            (activity as MainActivity).goBack()
-        }
-    }
-
     override fun onResume() {
         super.onResume()
         // refresh required data
@@ -103,21 +82,42 @@ class SettingsTracingFragment : BaseFragment(),
 
     override fun onFailure(exception: Exception?) {
         tracingViewModel.refreshIsTracingEnabled()
-        exception?.report(de.rki.coronawarnapp.exception.ExceptionCategory.EXPOSURENOTIFICATION)
+        exception?.report(ExceptionCategory.EXPOSURENOTIFICATION)
         // TODO
         Toast.makeText(
             requireContext(),
             exception?.localizedMessage ?: "Unknown Error",
             Toast.LENGTH_SHORT
         ).show()
-        tracingViewModel.refreshIsTracingEnabled()
+    }
+
+    private fun setButtonOnClickListener() {
+        val switch = binding.settingsTracingSwitchRow.settingsSwitchRowSwitch
+        internalExposureNotificationPermissionHelper =
+            InternalExposureNotificationPermissionHelper(this, this)
+        switch.setOnCheckedChangeListener { _, _ ->
+            // android calls this listener also on start, so it has to be verified if the user pressed the switch
+            if (switch.isPressed) {
+                ViewBlocker.runAndBlockInteraction(arrayOf(switch)) {
+                    startStopTracing()
+                }
+            }
+        }
+        binding.settingsTracingHeader.settingsDetailsHeaderButtonBack.buttonIcon.setOnClickListener {
+            (activity as MainActivity).goBack()
+        }
+        binding.settingsTracingStatusBluetooth.tracingStatusCardButton.setOnClickListener {
+            SettingsNavigationHelper.toConnections(requireContext())
+        }
+        binding.settingsTracingStatusConnection.tracingStatusCardButton.setOnClickListener {
+            SettingsNavigationHelper.toConnections(requireContext())
+        }
     }
 
     private fun startStopTracing() {
-        if (tracingViewModel.isTracingEnabled.value != null) {
-            // if tracing is enabled when listener is activated it should be disabled
-            if (tracingViewModel.isTracingEnabled.value!!) {
-                lifecycleScope.launch {
+        // if tracing is enabled when listener is activated it should be disabled
+        lifecycleScope.launch {
+            if (InternalExposureNotificationClient.asyncIsEnabled()) {
                     try {
                         Toast.makeText(
                             requireContext(),
@@ -125,19 +125,17 @@ class SettingsTracingFragment : BaseFragment(),
                             Toast.LENGTH_SHORT
                         )
                             .show()
-                        tracingViewModel.refreshIsTracingEnabled()
+
+                        InternalExposureNotificationClient.asyncStop()
                     } catch (exception: Exception) {
                         exception.report(
-                            de.rki.coronawarnapp.exception.ExceptionCategory.EXPOSURENOTIFICATION,
+                            ExceptionCategory.EXPOSURENOTIFICATION,
                             TAG,
                             null
                         )
-                        tracingViewModel.refreshIsTracingEnabled()
                     }
-                    InternalExposureNotificationClient.asyncStop()
                     tracingViewModel.refreshIsTracingEnabled()
                     BackgroundWorkScheduler.stopWorkScheduler()
-                }
             } else {
                 internalExposureNotificationPermissionHelper.requestPermissionToStartTracing()
             }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt
new file mode 100644
index 0000000000000000000000000000000000000000..14607969a6038acc50ab3d0f8969e855caff1c37
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionContactFragment.kt
@@ -0,0 +1,51 @@
+package de.rki.coronawarnapp.ui.submission
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import de.rki.coronawarnapp.R
+import de.rki.coronawarnapp.databinding.FragmentSubmissionContactBinding
+import de.rki.coronawarnapp.ui.BaseFragment
+import de.rki.coronawarnapp.ui.main.MainActivity
+import de.rki.coronawarnapp.util.CallHelper
+
+/**
+ * The [SubmissionContactFragment] allows requesting a teletan via phone
+ */
+class SubmissionContactFragment : BaseFragment() {
+
+    private lateinit var binding: FragmentSubmissionContactBinding
+
+    override fun onCreateView(
+        inflater: LayoutInflater,
+        container: ViewGroup?,
+        savedInstanceState: Bundle?
+    ): View? {
+        // get the binding reference by inflating it with the current layout
+        binding = FragmentSubmissionContactBinding.inflate(inflater)
+        return binding.root
+    }
+
+    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+        super.onViewCreated(view, savedInstanceState)
+        setButtonOnClickListener()
+    }
+
+    private fun setButtonOnClickListener() {
+        binding.submissionContactHeader.headerButtonBack.buttonIcon.setOnClickListener {
+            (activity as MainActivity).goBack()
+        }
+        binding.submissionContactButtonCall.setOnClickListener {
+            dial()
+        }
+        binding.submissionContactButtonEnter.setOnClickListener {
+            doNavigate(SubmissionContactFragmentDirections.actionSubmissionContactFragmentToSubmissionTanFragment())
+        }
+    }
+
+    private fun dial() = context?.let {
+        val number = getString(R.string.submission_contact_number)
+        CallHelper.call(this, "tel:$number")
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt
index 6b6778e384278ee026e0b67aa4f921f8320b930c..f362685bee62216d84fc3702277c48f2fd9a707f 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt
@@ -3,7 +3,6 @@ package de.rki.coronawarnapp.ui.submission
 import android.Manifest
 import android.content.pm.PackageManager
 import android.os.Bundle
-import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
@@ -48,7 +47,10 @@ class SubmissionDispatcherFragment : BaseFragment() {
             )
         }
         binding.submissionDispatcherTanTele.dispatcherCard.setOnClickListener {
-            Log.i(TAG, "TAN tele pressed")
+            doNavigate(
+                SubmissionDispatcherFragmentDirections
+                    .actionSubmissionDispatcherFragmentToSubmissionContactFragment()
+            )
         }
     }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanViewModel.kt
index 50f093824f5905dcd86f77816ca5d30f2a64d58f..22b63d2d9bb3d827f9d70225c4d0677354dbb239 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanViewModel.kt
@@ -13,7 +13,11 @@ class SubmissionTanViewModel : ViewModel() {
 
         private const val TAN_LENGTH = 7
         private val EXCLUDED_TAN_CHARS = listOf('0', 'O', 'I', '1')
-        private val VALID_TAN_CHARS = ('A'..'Z').plus('0'..'9').minus(EXCLUDED_TAN_CHARS)
+        private val VALID_TAN_CHARS =
+            ('a'..'z')
+                .plus('A'..'Z')
+                .plus('0'..'9')
+                .minus(EXCLUDED_TAN_CHARS)
     }
 
     val tan = MutableLiveData<String?>(null)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TanInput.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TanInput.kt
index 04c323b62d1f70c688e10bb2dbbb5f186437ebed..d1a251846533df73987b224954ebc59757d4869c 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TanInput.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TanInput.kt
@@ -15,7 +15,6 @@ import kotlinx.android.synthetic.main.view_tan_input.view.tan_input_textview_4
 import kotlinx.android.synthetic.main.view_tan_input.view.tan_input_textview_5
 import kotlinx.android.synthetic.main.view_tan_input.view.tan_input_textview_6
 import kotlinx.android.synthetic.main.view_tan_input.view.tan_input_textview_7
-import java.util.Locale
 
 class TanInput(context: Context, attrs: AttributeSet) : FrameLayout(context, attrs) {
 
@@ -46,7 +45,7 @@ class TanInput(context: Context, attrs: AttributeSet) : FrameLayout(context, att
     }
 
     private fun updateTan(text: CharSequence?) {
-        this.tan = text?.toString()?.toUpperCase(Locale.getDefault())
+        this.tan = text?.toString()
         updateDigits()
         notifyListener()
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TestResultStatus.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TestResultStatus.kt
deleted file mode 100644
index 231b2a52268d6c58b2584f5e28c94dac8a1a95df..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/TestResultStatus.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package de.rki.coronawarnapp.ui.submission
-
-enum class TestResultStatus {
-    IDLE, STARTED, FAILED, SUCCESS
-}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6194d713af1eb748405b417535a28d9d077ef9a4
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SimpleStepEntry.kt
@@ -0,0 +1,29 @@
+package de.rki.coronawarnapp.ui.view
+
+import android.content.Context
+import android.util.AttributeSet
+import androidx.core.content.withStyledAttributes
+import de.rki.coronawarnapp.R
+import kotlinx.android.synthetic.main.include_step_entry_simple_body.view.*
+
+/**
+ * The [SimpleStepEntry] is a step entry with title and text as content.
+ */
+class SimpleStepEntry @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0
+) : StepEntry(context, attrs, defStyleAttr) {
+
+    init {
+        inflate(context, R.layout.include_step_entry_simple_body, this)
+
+        context.withStyledAttributes(attrs, R.styleable.SimpleStepEntry) {
+            simple_step_entry_title.text =
+                getText(R.styleable.SimpleStepEntry_simple_step_entry_title)
+
+            simple_step_entry_body.text =
+                getText(R.styleable.SimpleStepEntry_simple_step_entry_text)
+        }
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/StepEntry.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/StepEntry.kt
new file mode 100644
index 0000000000000000000000000000000000000000..0b1f13a3d64ff8cfea517ac324c471d3d975abad
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/StepEntry.kt
@@ -0,0 +1,51 @@
+package de.rki.coronawarnapp.ui.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.View
+import android.view.ViewGroup
+import android.widget.FrameLayout
+import androidx.core.content.withStyledAttributes
+import de.rki.coronawarnapp.R
+import kotlinx.android.synthetic.main.view_step_entry.view.*
+
+/**
+ * The [StepEntry] displays one step in a sequence. Children can be added to define the content.
+ */
+open class StepEntry @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0
+) : FrameLayout(context, attrs, defStyleAttr) {
+
+    val body: FrameLayout?
+
+    init {
+        inflate(context, R.layout.view_step_entry, this)
+
+        body = findViewById(R.id.step_entry_wrapper_children)
+
+        context.withStyledAttributes(attrs, R.styleable.StepEntry) {
+            val icon = getDrawable(R.styleable.StepEntry_step_entry_icon)
+            step_entry_icon.setImageDrawable(icon)
+
+            val isFinal = getBoolean(R.styleable.StepEntry_step_entry_final, false)
+            step_entry_line.visibility = if (isFinal) {
+                View.INVISIBLE
+            } else {
+                View.VISIBLE
+            }
+        }
+    }
+
+    override fun addView(
+        child: View?,
+        index: Int,
+        params: ViewGroup.LayoutParams?
+    ) {
+        if (body == null)
+            super.addView(child, index, params)
+        else
+            body.addView(child, index, params)
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt
index 1fec0e4e1226d05b91e02297eed8aa3c73900a81..e1fda8bb4e794f61c1bc300aa34974c0871168e4 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt
@@ -60,6 +60,8 @@ class SubmissionViewModel : ViewModel() {
     fun deregisterTestFromDevice() {
         deleteTestGUID()
         SubmissionService.deleteRegistrationToken()
+        LocalData.isAllowedToSubmitDiagnosisKeys(false)
+        LocalData.inititalTestResultReceivedTimestamp(0L)
     }
 
     private fun executeRequestWithState(apiRequest: suspend () -> Unit, state: MutableLiveData<ApiRequestState>) {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CallHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CallHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..783c1e7f1d190f6aa694c96dedf0d56aee5dac98
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CallHelper.kt
@@ -0,0 +1,20 @@
+package de.rki.coronawarnapp.util
+
+import android.content.Intent
+import android.net.Uri
+import de.rki.coronawarnapp.ui.BaseFragment
+
+/**
+ * Helper object for intents triggering a phone call
+ * todo unify once necessary intents are final with share, external url and others
+ */
+object CallHelper {
+    fun call(fragment: BaseFragment, uri: String) {
+        fragment.startActivity(
+            Intent(
+                Intent.ACTION_DIAL,
+                Uri.parse(uri)
+            )
+        )
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt
index cd3fa001e221aa5ce2f3d56234ea63da69c0281d..580b38223e062e530aecba1a0736050f91680877 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt
@@ -2,17 +2,14 @@ package de.rki.coronawarnapp.util
 
 import android.bluetooth.BluetoothAdapter
 import android.content.Context
-import android.content.Intent
 import android.net.ConnectivityManager
 import android.net.Network
 import android.net.NetworkCapabilities
 import android.net.NetworkRequest
-import android.provider.Settings
 import android.util.Log
 import de.rki.coronawarnapp.exception.ExceptionCategory
 import de.rki.coronawarnapp.exception.report
 
-// TODO integrate the ConnectivityHelper into the UI logic (e.g. RiskLevelTransaction)
 object ConnectivityHelper {
     private val TAG: String? = ConnectivityHelper::class.simpleName
 
@@ -61,21 +58,6 @@ object ConnectivityHelper {
         return bAdapter.isEnabled
     }
 
-    fun navigateToBluetoothSettings(context: Context, onFailure: () -> Unit? = {}) {
-        val intent = Intent()
-        intent.action = Settings.ACTION_BLUETOOTH_SETTINGS
-        try {
-            context.startActivity(intent)
-        } catch (e: Exception) {
-            e.report(
-                ExceptionCategory.CONNECTIVITY,
-                TAG,
-                null
-            )
-            onFailure()
-        }
-    }
-
     abstract class NetworkCallback : ConnectivityManager.NetworkCallback() {
         abstract fun onNetworkAvailable()
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt
index a7a878fa2eccfa68e975cfb8b83b87a134e89485..a6891315cfbe831ea6698efdbcb1e246ed7edc73 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt
@@ -24,7 +24,6 @@ import android.util.Log
 import de.rki.coronawarnapp.storage.AppDatabase
 import de.rki.coronawarnapp.storage.FileStorageHelper
 import de.rki.coronawarnapp.storage.LocalData
-import java.util.UUID
 
 /**
  * Helper for supplying functionality regarding Data Retention
@@ -44,7 +43,6 @@ object DataRetentionHelper {
         LocalData.getSharedPreferenceInstance().edit().clear().apply()
         // Delete Database Instance
         AppDatabase.resetInstance(context)
-        LocalData.databasePassword(UUID.randomUUID().toString().toCharArray())
         // Export File Reset
         FileStorageHelper.getAllFilesInKeyExportDirectory().forEach { it.delete() }
         Log.w(TAG, "CWA LOCAL DATA DELETION COMPLETED.")
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt
index c4fe29eeaa6c7083395056c03ef2bcc518f5e12e..80325f9529aafad920dbe8a72e6c830c3f77e7ff 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ProtoFormatConverterExtensions.kt
@@ -9,6 +9,10 @@ object ProtoFormatConverterExtensions {
 
     private const val ROLLING_PERIOD = 144
     private const val DEFAULT_TRANSMISSION_RISK_LEVEL = 1
+    private const val MAXIMUM_KEYS = 14
+
+    fun List<TemporaryExposureKey>.limitKeyCount() =
+        this.sortedWith(compareBy({ it.rollingStartIntervalNumber })).asReversed().take(MAXIMUM_KEYS)
 
     fun List<TemporaryExposureKey>.transformKeyHistoryToExternalFormat() = this.map {
         KeyExportFormat.TemporaryExposureKey.newBuilder()
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/SettingsNavigationHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/SettingsNavigationHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..d172d0ecd28462400a9f73dbfe815a1b044a244f
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/SettingsNavigationHelper.kt
@@ -0,0 +1,49 @@
+package de.rki.coronawarnapp.util
+
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import android.provider.Settings
+
+/**
+ * A helper to navigate to the os settings, used in different places in the application,
+ * e.g. settings, notification settings, tracing settings...
+ */
+object SettingsNavigationHelper {
+
+    /**
+     * Navigate the user to the os connection settings.
+     *
+     * @param context
+     */
+    fun toConnections(context: Context) {
+        val intent = Intent(Settings.ACTION_WIRELESS_SETTINGS)
+        context.startActivity(intent)
+    }
+
+    /**
+     * Navigate the user to the os notification settings.
+     *
+     * @param context
+     */
+    // todo has to be tested on API23 on a device
+    fun toNotifications(context: Context) {
+        val intent = Intent()
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+            intent.action = Settings.ACTION_APP_NOTIFICATION_SETTINGS
+            intent.putExtra(
+                Settings.EXTRA_APP_PACKAGE,
+                context.packageName
+            )
+        } else {
+            intent.putExtra(
+                "app_package",
+                context.packageName
+            )
+            intent.putExtra("app_uid", context.applicationInfo.uid)
+        }
+        context.startActivity(intent)
+    }
+
+    // todo navigate storage settings
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ShareHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ShareHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..c2b07480683fabd640786c6ff14807fe084ff1af
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ShareHelper.kt
@@ -0,0 +1,14 @@
+package de.rki.coronawarnapp.util
+
+import android.content.Intent
+import de.rki.coronawarnapp.ui.BaseFragment
+
+object ShareHelper {
+    fun shareText(fragment: BaseFragment, text: String, title: String?) {
+        fragment.startActivity(Intent.createChooser(Intent().apply {
+            action = Intent.ACTION_SEND
+            type = "text/plain"
+            putExtra(Intent.EXTRA_TEXT, text)
+        }, title))
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt
index 0ad6e41b509d09280219944218908aa07c8fb081..20392db037e0c9e5414d2d7cd334f0d78738bda1 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt
@@ -264,21 +264,45 @@ fun formatNextUpdate(
     }
 }
 
+/**
+ * Formats the risk details subtitle text display depending on risk level
+ *
+ * @param riskLevelScore
+ * @return
+ */
+fun formatRiskDetailsRiskLevelSubtitle(riskLevelScore: Int?): String {
+    val appContext = CoronaWarnApplication.getAppContext()
+    return when (riskLevelScore) {
+        RiskLevelConstants.LOW_LEVEL_RISK,
+        RiskLevelConstants.INCREASED_RISK -> appContext.getString(R.string.risk_details_subtitle_infection_risk_past)
+        else -> appContext.getString(R.string.risk_details_subtitle_infection_risk)
+    }
+}
+
 /**
  * Formats the risk details text display for each risk level
  *
  * @param riskLevelScore
+ * @param daysSinceLastExposure
  * @return
  */
-fun formatRiskDetailsRiskLevelBody(riskLevelScore: Int?): String {
+fun formatRiskDetailsRiskLevelBody(riskLevelScore: Int?, daysSinceLastExposure: Int?): String {
     // TODO replace lorem ipsum by text from rki
     val appContext = CoronaWarnApplication.getAppContext()
+    val daysArg = daysSinceLastExposure.toString()
+
     return when (riskLevelScore) {
-        RiskLevelConstants.INCREASED_RISK -> appContext.getString(R.string.lorem_ipsum)
-        RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> appContext.getString(R.string.lorem_ipsum)
-        RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF -> appContext.getString(R.string.lorem_ipsum)
-        RiskLevelConstants.LOW_LEVEL_RISK -> appContext.getString(R.string.lorem_ipsum)
-        else -> appContext.getString(R.string.lorem_ipsum)
+        RiskLevelConstants.INCREASED_RISK -> {
+            appContext.getString(R.string.risk_details_information_body_increased_risk)
+                .format(daysArg)
+        }
+        RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS ->
+            appContext.getString(R.string.risk_details_information_body_outdated_risk)
+        RiskLevelConstants.LOW_LEVEL_RISK ->
+            appContext.getString(R.string.risk_details_information_body_low_risk)
+        RiskLevelConstants.UNKNOWN_RISK_INITIAL ->
+            appContext.getString(R.string.risk_details_information_body_unknown_risk)
+        else -> ""
     }
 }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt
index 5bdb444f9c12f4d974b5f272ae2f46f60f77ef90..41def653e3cd64fac11be87f556e81b26fa69baf 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt
@@ -3,6 +3,7 @@
 package de.rki.coronawarnapp.util.formatter
 
 import android.graphics.drawable.Drawable
+import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.R
 
 /*Texter*/
@@ -10,7 +11,7 @@ import de.rki.coronawarnapp.R
  * Formats the text display of settings item status depending on flag provided
  *
  * @param value
- * @return
+ * @return String
  */
 fun formatStatus(value: Boolean): String = formatText(
     value,
@@ -19,28 +20,63 @@ fun formatStatus(value: Boolean): String = formatText(
 )
 
 /**
- * Formats the main text display of tracing status depending on tracing status
+ * Formats the text display of settings notification status depending on notification values
  *
- * @param tracing
+ * @param notifications
+ * @param notificationsRisk
+ * @param notificationsTest
  * @return
  */
-fun formatTracingText(tracing: Boolean): String = formatText(
-    tracing,
-    R.string.settings_tracing_body_active,
-    R.string.settings_tracing_body_inactive
-)
+fun formatNotificationsStatusText(
+    notifications: Boolean,
+    notificationsRisk: Boolean,
+    notificationsTest: Boolean
+): String =
+    formatStatus((notifications && (notificationsRisk || notificationsTest)))
+
+/**
+ * Change the tracing text in the row based on the tracing status.
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return String
+ */
+fun formatTracingStatusText(tracing: Boolean, bluetooth: Boolean, connection: Boolean): String {
+    val appContext = CoronaWarnApplication.getAppContext()
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.CONNECTION, TracingStatusHelper.BLUETOOTH ->
+            appContext.getString(R.string.settings_tracing_status_restricted)
+        TracingStatusHelper.TRACING_ACTIVE ->
+            appContext.getString(R.string.settings_tracing_status_active)
+        TracingStatusHelper.TRACING_INACTIVE ->
+            appContext.getString(R.string.settings_tracing_status_inactive)
+        else -> ""
+    }
+}
 
 /**
  * Format the settings tracing description text display depending on tracing status
  *
  * @param tracing
- * @return
+ * @param bluetooth
+ * @param connection
+ * @return String
  */
-fun formatTracingDescription(tracing: Boolean): String = formatText(
-    tracing,
-    R.string.settings_tracing_body_active_description,
-    R.string.settings_tracing_body_inactive_description
-)
+fun formatTracingDescription(tracing: Boolean, bluetooth: Boolean, connection: Boolean): String {
+    val appContext = CoronaWarnApplication.getAppContext()
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.CONNECTION ->
+            appContext.getString(R.string.settings_tracing_body_connection_inactive)
+        TracingStatusHelper.BLUETOOTH ->
+            appContext.getString(R.string.settings_tracing_body_bluetooth_inactive)
+        TracingStatusHelper.TRACING_ACTIVE ->
+            appContext.getString(R.string.settings_tracing_body_active)
+        TracingStatusHelper.TRACING_INACTIVE ->
+            appContext.getString(R.string.settings_tracing_body_inactive)
+        else -> ""
+    }
+}
 
 /**
  * Formats the settings notifications title display depending on notifications status
@@ -66,46 +102,199 @@ fun formatNotificationsDescription(notifications: Boolean): String = formatText(
     R.string.settings_notifications_body_inactive
 )
 
+/**
+ * Formats the tracing body depending on the tracing status and the days since last exposure.
+ *
+ * @param tracing
+ * @param activeTracingDaysInRetentionPeriod
+ * @return String
+ */
+fun formatTracingStatusBody(tracing: Boolean, activeTracingDaysInRetentionPeriod: Long): String {
+    val appContext = CoronaWarnApplication.getAppContext()
+    val daysArg = activeTracingDaysInRetentionPeriod.toString()
+    return if (tracing) {
+        appContext.getString(R.string.settings_tracing_status_body_active)
+            .format(daysArg)
+    } else {
+        appContext.getString(R.string.settings_tracing_status_body_inactive)
+            .format(daysArg)
+    }
+}
+
 /*Styler*/
 /**
  * Formats the settings icon color depending on flag provided
  *
  * @param active
- * @return
+ * @return Int
  */
 fun formatIconColor(active: Boolean): Int =
     formatColor(active, R.color.settingsIconActive, R.color.settingsIconInactive)
 
+/**
+ * Formats the settings icon color for notifications depending on notification values
+ *
+ * @param notifications
+ * @param notificationsRisk
+ * @param notificationsTest
+ * @return Int
+ */
+fun formatIconColor(
+    notifications: Boolean,
+    notificationsRisk: Boolean,
+    notificationsTest: Boolean
+): Int =
+    formatIconColor((notifications && (notificationsRisk || notificationsTest)))
+
+/**
+ * Formats the tracing switch status based on the tracing status
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return Boolean
+ */
+fun formatTracingSwitch(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Boolean {
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.TRACING_ACTIVE -> true
+        else -> false
+    }
+}
+
+/**
+ * Formats the tracing switch enabled status based on the tracing status
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return Boolean
+ */
+fun formatTracingSwitchEnabled(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Boolean {
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.TRACING_ACTIVE, TracingStatusHelper.TRACING_INACTIVE -> true
+        else -> false
+    }
+}
+
 /**
  * Formats the main tracing icon depending on tracing status
  *
  * @param tracing
- * @return
+ * @param bluetooth
+ * @param connection
+ * @return Drawable
  */
-fun formatTracingIcon(tracing: Boolean): Drawable? =
-    formatDrawable(tracing, R.drawable.ic_tracing_on, R.drawable.ic_tracing_off)
+fun formatTracingIcon(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Drawable? {
+    val appContext = CoronaWarnApplication.getAppContext()
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.BLUETOOTH ->
+            appContext.getDrawable(R.drawable.ic_settings_tracing_bluetooth_inactive)
+        TracingStatusHelper.CONNECTION ->
+            appContext.getDrawable(R.drawable.ic_settings_tracing_connection_inactive)
+        TracingStatusHelper.TRACING_ACTIVE ->
+            appContext.getDrawable(R.drawable.ic_settings_tracing_active)
+        else ->
+            appContext.getDrawable(R.drawable.ic_settings_tracing_inactive)
+    }
+}
 
 /**
  * Formats the main tracing icon color depending on tracing status
  *
  * @param tracing
- * @return
+ * @param bluetooth
+ * @param connection
+ * @return Int
  */
-fun formatTracingIconColor(tracing: Boolean): Int =
-    formatColor(tracing, R.color.tracingIconActive, R.color.tracingIconInactive)
+fun formatTracingIconColor(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int {
+    val appContext = CoronaWarnApplication.getAppContext()
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.TRACING_ACTIVE ->
+            appContext.getColor(R.color.tracingIconActive)
+        else ->
+            appContext.getColor(R.color.tracingIconInactive)
+    }
+}
 
 /**
  * Formats the settings tracing details illustration depending on tracing status
  *
  * @param tracing
- * @return
+ * @param bluetooth
+ * @param connection
+ * @return Drawable
  */
-fun formatTracingImage(tracing: Boolean): Drawable? =
-    formatDrawable(
-        tracing,
-        R.drawable.ic_settings_illustration_tracing_on,
-        R.drawable.ic_settings_illustration_tracing_off
+fun formatTracingStatusImage(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Drawable? {
+    val appContext = CoronaWarnApplication.getAppContext()
+    return when (tracingStatusHelper(tracing, bluetooth, connection)) {
+        TracingStatusHelper.BLUETOOTH ->
+            appContext.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off)
+        TracingStatusHelper.CONNECTION ->
+            appContext.getDrawable(R.drawable.ic_settings_illustration_connection_off)
+        TracingStatusHelper.TRACING_ACTIVE ->
+            appContext.getDrawable(R.drawable.ic_settings_illustration_tracing_on)
+        else ->
+            appContext.getDrawable(R.drawable.ic_settings_illustration_tracing_off)
+    }
+}
+
+/**
+ * Change the visibility of the connection card based on the tracing status.
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return Int
+ */
+fun formatTracingStatusConnection(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int =
+    formatVisibility(
+        tracingStatusHelper(
+            tracing,
+            bluetooth,
+            connection
+        ) == TracingStatusHelper.CONNECTION
+    )
+
+/**
+ * Change the visibility of the bluetooth card based on the tracing status.
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return Int
+ */
+fun formatTracingStatusVisibilityBluetooth(
+    tracing: Boolean,
+    bluetooth: Boolean,
+    connection: Boolean
+): Int =
+    formatVisibility(
+        tracingStatusHelper(
+            tracing,
+            bluetooth,
+            connection
+        ) == TracingStatusHelper.BLUETOOTH
+    )
+
+/**
+ * Change the visibility of the tracing text based on the tracing status.
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return Int
+ */
+fun formatTracingStatusVisibilityTracing(
+    tracing: Boolean,
+    bluetooth: Boolean,
+    connection: Boolean
+): Int {
+    val tracingStatus = tracingStatusHelper(tracing, bluetooth, connection)
+    return formatVisibility(
+        tracingStatus == TracingStatusHelper.TRACING_ACTIVE ||
+                tracingStatus == TracingStatusHelper.TRACING_INACTIVE
     )
+}
 
 /**
  * Formats the settings notifications details illustration depending on notifications status
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt
index 85d151a146686ab271d8c29970722551e8c14c83..5d19352eef02c8ce867623592b399638e453dbfc 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt
@@ -7,15 +7,17 @@ import android.view.View
 import de.rki.coronawarnapp.CoronaWarnApplication
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.ui.submission.ApiRequestState
-import de.rki.coronawarnapp.ui.submission.TestResultStatus
 import de.rki.coronawarnapp.util.formatter.TestResult.INVALID
 import de.rki.coronawarnapp.util.formatter.TestResult.NEGATIVE
 import de.rki.coronawarnapp.util.formatter.TestResult.PENDING
 import de.rki.coronawarnapp.util.formatter.TestResult.POSITIVE
 import java.util.Date
 
-fun formatTestResultStatusVisibility(testResultStatus: TestResultStatus?): Int =
-    formatVisibility(testResultStatus != TestResultStatus.SUCCESS)
+fun formatTestResultSpinnerVisible(testResultStatus: ApiRequestState?): Int =
+    formatVisibility(testResultStatus != ApiRequestState.SUCCESS)
+
+fun formatTestResultVisible(testResultStatus: ApiRequestState?): Int =
+    formatVisibility(testResultStatus == ApiRequestState.SUCCESS)
 
 fun formatTestResultVirusNameTextVisible(testResult: TestResult?): Int {
     return when (testResult) {
@@ -112,22 +114,6 @@ fun formatSubmissionStatusCardContentButtonText(testResult: TestResult?): String
     }
 }
 
-fun formatSubmissionStatusCardContentButtonColor(testResult: TestResult?): Int {
-    val appContext = CoronaWarnApplication.getAppContext()
-    return when (testResult) {
-        INVALID, NEGATIVE, POSITIVE -> appContext.getColor(R.color.tracingIconActive)
-        else -> appContext.getColor(R.color.colorLight)
-    }
-}
-
-fun formatSubmissionStatusCardContentButtonTextColor(testResult: TestResult?): Int {
-    val appContext = CoronaWarnApplication.getAppContext()
-    return when (testResult) {
-        INVALID, NEGATIVE, POSITIVE -> appContext.getColor(R.color.colorLight)
-        else -> appContext.getColor(R.color.tracingIconActive)
-    }
-}
-
 fun formatSubmissionStatusCardContentStatusTextVisible(testResult: TestResult?): Int {
     return when (testResult) {
         POSITIVE, NEGATIVE, INVALID -> View.VISIBLE
@@ -172,3 +158,12 @@ fun formatSubmissionTanButtonTextColor(isValidTanFormat: Boolean) = formatColor(
     R.color.textColorLight,
     R.color.colorGreyDisabled
 )
+
+fun formatShowSubmissionStatusCard(testResult: TestResult?): Int =
+    formatVisibility(testResult != POSITIVE)
+
+fun formatShowSubmissionStatusPositiveCard(testResult: TestResult?): Int =
+    formatVisibility(testResult == POSITIVE)
+
+fun formatShowRiskStatusCard(testResult: TestResult?): Int =
+    formatVisibility(testResult != POSITIVE)
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt
new file mode 100644
index 0000000000000000000000000000000000000000..f7328e1aa89bb511a90c5d5f09d7cfa5f0c6e9d0
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt
@@ -0,0 +1,47 @@
+package de.rki.coronawarnapp.util.formatter
+
+/**
+ * This stati are used for the first row in the main fragment and in the tracing settings,
+ * to change the ui depending on the different system stati.
+ */
+object TracingStatusHelper {
+    const val TRACING_ACTIVE = 0
+    const val TRACING_INACTIVE = 1
+    const val BLUETOOTH = 2
+    const val CONNECTION = 3
+}
+
+/**
+ * The following table explains the different stati which can appear in the ui.
+ * This follows this prioritization: Tracing, Bluetooth, Connection
+ * Connection will only be relevant in one exact case, Bluetooth is relevant in two different cases,
+ * but independently from the Connection status. And in every other case Tracing will be shown.
+ *
+ * | Tracing | Bluetooth | Connection | Result     |
+ * |---------|-----------|------------|------------|
+ * | OFF     | OFF       | ON         | TRACING*   |
+ * | OFF     | ON        | OFF        | TRACING*   |
+ * | OFF     | ON        | ON         | TRACING*   |
+ * | OFF     | OFF       | OFF        | TRACING*   |
+ * | ON      | ON        | ON         | TRACING    |
+ * | ON      | OFF       | ON         | BLUETOOTH  |
+ * | ON      | OFF       | OFF        | BLUETOOTH  |
+ * | ON      | ON        | OFF        | CONNECTION |
+ * *circle has to be disabled via another formatter
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @return Int
+ */
+fun tracingStatusHelper(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int {
+    return if (tracing && bluetooth && !connection) {
+        TracingStatusHelper.CONNECTION
+    } else if (tracing && !bluetooth) {
+        TracingStatusHelper.BLUETOOTH
+    } else if (tracing) {
+        TracingStatusHelper.TRACING_ACTIVE
+    } else {
+        TracingStatusHelper.TRACING_INACTIVE
+    }
+}
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityHelper.kt
index ebfba90caa418dce311de797e0e15b51e1454b52..c4ab75ad0ab2df7b1c14ffb8e703ef63f7b3f9bf 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityHelper.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityHelper.kt
@@ -24,16 +24,30 @@ import android.content.SharedPreferences
 import androidx.security.crypto.EncryptedSharedPreferences
 import androidx.security.crypto.MasterKeys
 import de.rki.coronawarnapp.CoronaWarnApplication
+import java.security.KeyStore
 
+/**
+ * Key Store and Password Access
+ */
 object SecurityHelper {
     private const val SHARED_PREF_NAME = "shared_preferences_cwa"
     private val keyGenParameterSpec = MasterKeys.AES256_GCM_SPEC
     private val masterKeyAlias = MasterKeys.getOrCreate(keyGenParameterSpec)
+    private const val AndroidKeyStore = "AndroidKeyStore"
+
+    private val keyStore: KeyStore by lazy {
+        KeyStore.getInstance(AndroidKeyStore).also {
+            it.load(null)
+        }
+    }
 
     val globalEncryptedSharedPreferencesInstance: SharedPreferences by lazy {
         CoronaWarnApplication.getAppContext().getEncryptedSharedPrefs(SHARED_PREF_NAME)
     }
 
+    /**
+     * Initializes the private encrypted key store
+     */
     private fun Context.getEncryptedSharedPrefs(fileName: String) = EncryptedSharedPreferences
         .create(
             fileName,
@@ -42,4 +56,12 @@ object SecurityHelper {
             EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
             EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
         )
+
+    /**
+     * Retrieves the Master Key from the Android KeyStore to use in SQLCipher
+     */
+    fun getDBPassword() = keyStore
+        .getKey(masterKeyAlias, null)
+        .toString()
+        .toCharArray()
 }
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_risk_details_share.xml b/Corona-Warn-App/src/main/res/drawable/ic_risk_details_share.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1a8cf443f4989ea3a49720f29f61a057aa3ec183
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_risk_details_share.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="28dp"
+    android:height="28dp"
+    android:viewportWidth="28"
+    android:viewportHeight="28">
+  <path
+      android:fillColor="#ffffff"
+      android:fillType="nonZero"
+      android:pathData="M20.4535,12.2791C19.8564,9.2499 17.196,6.9758 14,6.9758c-2.5375,0 -4.7413,1.44 -5.8389,3.5472 -2.6429,0.281 -4.6974,2.5199 -4.6974,5.233 0,2.9063 2.3619,5.2682 5.2682,5.2682L20.1462,21.0242c2.4234,0 4.3901,-1.9668 4.3901,-4.3901 0,-2.318 -1.8,-4.197 -4.0828,-4.355zM15.7561,14.878v3.5121L12.2439,18.3901L12.2439,14.878L9.6099,14.878L13.6927,10.7952c0.1756,-0.1756 0.4478,-0.1756 0.6234,0l4.074,4.0828z"
+      android:strokeWidth="0.878027"
+      android:strokeColor="#00000000" />
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_bluetooth_off.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_bluetooth_off.xml
new file mode 100644
index 0000000000000000000000000000000000000000..326e296d851df5c37c5b14d121e0d1b959e9e698
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_bluetooth_off.xml
@@ -0,0 +1,207 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="360dp"
+    android:height="221dp"
+    android:viewportWidth="360"
+    android:viewportHeight="221">
+    <group>
+        <clip-path android:pathData="M0.25,0.983h359.75v220h-359.75z" />
+        <path
+            android:fillColor="#EFF4F7"
+            android:fillType="nonZero"
+            android:pathData="M272.302,56.233m-19.597,0a19.597,19.597 0,1 1,39.194 0a19.597,19.597 0,1 1,-39.194 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CEDEE7"
+            android:fillType="nonZero"
+            android:pathData="M272.302,56.233m-13.634,0a13.634,13.634 0,1 1,27.268 0a13.634,13.634 0,1 1,-27.268 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#EFF4F7"
+            android:fillType="nonZero"
+            android:pathData="M98.681,80.98m-20.07,0a20.07,20.07 0,1 1,40.14 0a20.07,20.07 0,1 1,-40.14 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CEDEE7"
+            android:fillType="nonZero"
+            android:pathData="M98.681,80.98m-13.966,0a13.966,13.966 0,1 1,27.932 0a13.966,13.966 0,1 1,-27.932 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#FFC2B0"
+            android:fillType="evenOdd"
+            android:pathData="M318.328,61.418C316.524,64.119 316.947,67.721 319.329,69.935C320.998,71.171 322.666,69.703 322.666,67.945C322.452,66.264 322.117,64.602 321.665,62.969C321.356,61.89 320.33,61.7 319.997,60.87"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M306.082,18.233l0.734,8.02l-7.433,0.688l-1.393,-8.517z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M296.363,11.765C296.363,24.843 309.002,24.288 309.319,11.765C309.144,-1.115 296.522,-1.082 296.363,11.765"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#8D8D99"
+            android:fillType="evenOdd"
+            android:pathData="M314.107,62.496C323.05,64.213 311.763,125.12 311.137,135.479L307.8,135.578C307.275,135.429 305.515,77.316 304.105,78.353C302.248,84.653 300.042,90.847 297.498,96.906C296.58,109.785 296.722,123.312 295.354,135.885L291.842,136.714C290.507,137.17 288.905,97.055 288.455,96.773L290.841,78.652C291.183,78.37 293.302,62.496 294.662,63.251L314.082,62.512"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#B2DBF0"
+            android:fillType="evenOdd"
+            android:pathData="M275.224,58.656C273.706,59.212 270.753,55.438 272.855,54.393C277.76,51.955 281.84,44.748 282.315,44.217C285.519,40.336 288.855,31.287 292.534,26.942C295.512,24.454 296.197,25.067 299.4,24.337C301.068,27.464 304.664,26.403 306.691,24.926C306.808,24.86 307.275,24.926 307.342,24.926C323.192,24.669 322.958,51.864 320.205,62.189C319.805,62.338 319.538,62.687 317.611,62.413C317.611,62.413 316.985,54.435 316.977,54.435C316.585,51.117 315.392,38.677 313.915,36.803C314.199,43.379 315.5,54.559 316.284,62.736C316.284,63.002 315.867,63.275 315.6,63.275L294.878,63.533C294.628,63.533 293.944,62.977 293.944,62.703C293.794,54.302 294.828,44.209 293.994,36.587C291.809,40.825 280.171,56.856 275.224,58.648"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M307.825,134.765L311.388,135.213C311.479,135.213 312.464,138.622 312.831,140.115C313.365,141.873 312.831,144.261 311.212,145.091C309.828,145.854 308.76,146.559 307.292,145.091C305.823,143.623 305.573,142.702 306.19,140.164C306.808,137.627 307.767,134.765 307.767,134.732"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M284.784,140.546L289.965,137.933L295.88,131.34C298.207,133.397 297.94,135.022 297.94,135.022C297.94,136.076 296.981,142.777 296.981,142.777L295.996,142.777L294.962,137.096C290.666,144.8 294.962,142.395 283.934,142.777C283.801,141.939 284.117,141.094 284.768,140.546"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M297.356,14.709C296.18,17.081 301.36,21.476 299.742,24.371C298.991,26.295 291.441,29.347 291.4,24.877C298.115,24.321 291.525,14.145 293.686,8.737C294.42,3.073 303.554,-1.704 308.109,2.716C315.659,8.887 306.549,23.102 314.724,24.959C314.382,29.886 307.091,26.386 305.815,23.649C304.046,18.922 311.655,16.326 307.767,7.427C306.427,10.069 304.146,12.12 301.369,13.183"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M276.159,62.131C276.217,62.521 271.787,61.144 271.654,61.177C270.82,61.517 268.501,51.308 268.192,50.893C268.008,50.769 268.45,49.989 268.926,49.939L273.039,50.611C274.24,49.956 276.125,60.887 276.509,61.293C276.659,61.708 276.417,61.899 276.159,62.123"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M269.251,55.355C269.668,55.007 270.002,56.466 270.703,56.583C271.475,56.707 272.184,57.08 272.722,57.644C276.234,63.673 265.781,61.973 269.251,55.355"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="evenOdd"
+            android:pathData="M80.554,50.641C80.554,50.641 89.616,65.136 95.26,75.266C95.659,75.978 98.004,79.548 98.128,80.236C98.128,80.236 97.688,85.205 95.535,84.021C88.46,76.094 77.229,57.971 73.904,54.493C70.138,50.558 80.554,50.641 80.554,50.641Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M65.125,170.891L55.797,163.934C54.211,163.316 52.482,163.158 50.809,163.478C49.978,163.652 49.895,163.047 49.912,163.801L48.964,166.891C48.083,168.953 48.448,170.535 50.809,171.438C54.226,172.374 61.982,176.457 65.457,173.873C66.97,173.111 67.12,171.653 65.158,170.891"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M83.597,168.357L73.288,162.145C71.778,161.705 70.168,161.734 68.675,162.227C67.843,162.476 67.951,161.888 67.802,162.625L67.112,165.797C66.422,167.918 67.112,169.392 69.514,170.088L78.825,172.076C81.319,172.506 88.377,170.419 83.597,168.357"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#8C8C99"
+            android:fillType="nonZero"
+            android:pathData="M47.908,83.963C48.108,81.163 76.896,80.277 77.088,84.667C78.858,125.129 77.171,152.652 74.419,161.78C74.373,161.931 74.308,162.075 74.228,162.211C73.214,163.727 70.903,163.751 68.899,162.791C68.212,162.445 67.797,161.726 67.843,160.96C68.392,150.06 67.278,127.092 63.138,105.391C63.08,105.092 63.013,104.388 62.98,104.695C62.98,104.695 56.329,161.068 56.221,164.911C56.163,167.181 52.896,167.636 51.607,166.858C51.183,166.592 49.862,165.541 49.82,164.944C48.349,144.129 46.96,97.124 47.908,83.963Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="nonZero"
+            android:pathData="M73.072,22.314C73.787,7.554 46.802,13.344 57.734,29.321C59.306,31.682 60.694,35.235 64.185,36.039L65.291,25.933C68.758,23.49 71.9,21.593 73.072,22.314Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M58.325,25.362C56.28,24.293 55.914,26.778 56.762,28.468C57.385,29.777 59.214,31.442 59.488,29.57C59.214,28.849 59.081,25.834 58.325,25.362Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M93.939,88.485C93.872,88.933 98.868,87.376 99.018,87.417C99.941,87.798 102.568,76.268 102.917,75.821C103.125,75.688 102.626,74.802 102.086,74.752L97.455,75.498C96.092,74.769 93.972,87.094 93.54,87.574C93.382,88.013 93.648,88.237 93.939,88.485Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M101.72,80.84C101.254,80.443 100.888,82.091 100.057,82.224C99.186,82.364 98.385,82.786 97.779,83.425C93.855,90.233 105.635,88.311 101.72,80.84Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M48.199,90.788C47.093,89.38 45.057,86.771 43.211,84.377C36.91,76.252 47.642,64.068 52.663,58.046L44.724,53.623C34.89,74.247 29.12,79.399 45.639,93.728C46.146,97.671 53.794,99.949 55.373,95.675C55.872,92.619 51.317,90.25 48.199,90.788Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#B1DAEF"
+            android:fillType="evenOdd"
+            android:pathData="M74.968,41.629C71.642,38.159 66.056,38.755 60.835,38.441C57.137,39.22 53.561,40.491 50.203,42.218C49.58,42.508 49.003,42.888 48.49,43.344C47.357,44.169 46.429,45.243 45.78,46.483C40.343,54.352 35.879,69.899 34.308,75.158C33.643,77.403 40.385,79.813 41.79,78.471C44.508,75.871 47.659,64.631 47.659,64.631L47.709,87.293C47.709,87.952 48.086,88.553 48.681,88.842C55.581,92.155 70.994,91.045 76.115,88.701C76.816,88.377 77.275,87.689 77.304,86.92L77.528,79.987C77.761,73.146 77.57,67.604 77.753,60.175L82.674,69.12C83.095,69.776 83.769,70.232 84.536,70.379C87.524,70.316 90.123,68.322 90.946,65.459C91.361,64.291 81.336,47.477 74.968,41.629Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="evenOdd"
+            android:pathData="M64.061,42.391C64.945,42.542 65.852,42.308 66.552,41.749C67.253,41.191 67.68,40.36 67.727,39.468L68.084,30.033C68.114,29.227 67.82,28.442 67.268,27.852C66.716,27.262 65.951,26.914 65.141,26.886C64.253,26.723 63.338,26.948 62.628,27.505C61.918,28.061 61.483,28.895 61.434,29.793L59.771,38.822C59.713,40.478 62.365,42.333 64.044,42.391"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M73.072,22.297C72.524,16.499 64.684,17.054 59.846,20.641C59.463,22.119 58.957,23.562 58.333,24.956C58.74,26.994 58.981,30.216 59.721,32.137C60.935,34.042 65.058,37.579 67.785,37.314C72.565,35.409 73.629,25.751 73.072,22.297Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="nonZero"
+            android:pathData="M72.84,20.21C72.84,20.21 75.566,13.642 72.241,12.085C70.056,11.127 67.568,11.127 65.383,12.085C63.213,13.161 61.567,12.432 59.804,13.609C54.243,17.377 54.251,20.575 56.163,26.29C56.446,25.064 56.828,25.147 57.369,24.236C58.757,25.967 59.106,25.619 59.173,28.609C59.173,29.247 59.447,30.116 59.106,30.456C58.607,30.953 59.397,31.897 59.555,32.187C60.769,34.092 64.335,38.283 67.818,37.985C70.188,37.778 71.385,33.57 72.307,30.754C71.185,33.554 71.094,30.613 69.381,30.754C68.417,30.862 65.391,30.307 64.676,31.193C64.22,31.787 63.387,31.941 62.747,31.549C61.589,31.094 60.719,30.115 60.403,28.915C60.32,28.435 60.228,28.004 60.153,27.607C60.153,27.424 60.104,27.25 60.079,27.06L60.079,27.06C59.788,25.403 59.804,24.194 61.043,21.908C60.942,21.155 61.15,20.394 61.619,19.795C62.088,19.197 62.78,18.812 63.537,18.727C63.537,18.653 63.537,18.595 63.446,18.545C66.673,17.769 70.079,18.373 72.84,20.21L72.84,20.21ZM65.856,31.69L69.306,31.74C69.98,31.74 69.705,32.568 69.589,32.99C69.115,34.929 65.782,34.647 65.366,32.792C65.225,32.386 65.266,31.69 65.856,31.69Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M188.867,221.031C188.187,213.401 187.706,205.763 186.786,198.142C184.862,182.276 182.224,166.511 179.911,150.695C171.858,149.659 166.251,148.97 166.251,148.97C166.251,148.97 151.431,146.607 151.224,153.399C151.017,160.191 167.728,163.633 167.728,163.633L169.079,163.633L170.274,173.51C170.274,173.51 157.228,189.268 158.165,194.526C159.103,199.784 167.288,197.495 167.288,197.495C167.288,197.495 162.478,211.834 166.169,215.616C168.872,218.394 171.601,217.175 171.601,217.175C171.601,217.175 164.759,223.378 167.844,228.902C169.196,231.331 177.165,232.036 177.165,232.036L190.045,231.63C189.195,228.163 188.805,224.6 188.884,221.031"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#FFFFFF"
+            android:fillType="evenOdd"
+            android:pathData="M193.296,260.706C188.431,261.386 183.934,257.999 183.244,253.135L166.492,133.935C165.812,129.069 169.2,124.572 174.064,123.883L221.842,117.174C226.708,116.489 231.208,119.879 231.893,124.746L248.646,243.937C249.325,248.805 245.933,253.304 241.066,253.989L193.296,260.706Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#00000000"
+            android:fillType="evenOdd"
+            android:pathData="M241.397,253.947L193.619,260.665C188.753,261.344 184.257,257.951 183.576,253.085L166.824,133.893C166.493,131.556 167.105,129.183 168.525,127.297C169.946,125.412 172.058,124.168 174.395,123.842L222.165,117.124C227.03,116.444 231.527,119.832 232.217,124.696L248.961,243.871C249.297,246.211 248.688,248.588 247.269,250.478C245.85,252.369 243.738,253.617 241.397,253.947Z"
+            android:strokeWidth="4.03"
+            android:strokeColor="#4A4A4A" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M285.626,209.744C285.626,209.744 279.281,208.085 272.804,198.415C266.327,188.745 260.364,165.549 256.093,163.069C256.093,163.069 254.526,142.808 244.126,141.282C244.126,141.282 240.809,126.612 239.73,126.578C238.652,126.545 232.98,126.404 231.271,133.561C229.563,140.719 231.769,153.863 238.561,157.678C238.561,157.678 250.462,241.623 250.479,241.872C250.81,248.631 250.139,248.283 249.226,250.589C257.321,252.629 300.462,265.641 335.941,276.422L335.941,221.048L285.626,209.744Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#C00F2D"
+            android:fillType="nonZero"
+            android:pathData="M215.558,173.504L201.988,163.278L203.342,172.915L204.074,178.118L188.061,166.049L185.807,169.042L203.935,182.703L196.622,192.407L199.614,194.662L205.332,187.073L207.418,201.912L215.405,191.389L223.853,197.744L226.124,194.724L209.181,181.966L211.453,178.95L215.558,173.504ZM206.957,171.712L210.312,174.241L208.426,176.726L207.573,176.102L206.957,171.712ZM209.869,192.435L209.042,186.552L212.397,189.08L209.869,192.435Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#FFFFFF"
+            android:fillType="nonZero"
+            android:pathData="M201.102,175.861l2.24,-2.947l8.111,6.036l-2.147,3.13z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+    </group>
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_connection_off.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_connection_off.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01661cf05c6c2b7a0f42c63142d32107c3ad46a9
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_connection_off.xml
@@ -0,0 +1,201 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="360dp"
+    android:height="221dp"
+    android:viewportWidth="360"
+    android:viewportHeight="221">
+    <group>
+        <clip-path android:pathData="M0.25,0.983h359.75v220h-359.75z" />
+        <path
+            android:fillColor="#EFF4F7"
+            android:fillType="nonZero"
+            android:pathData="M272.302,56.233m-19.597,0a19.597,19.597 0,1 1,39.194 0a19.597,19.597 0,1 1,-39.194 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CEDEE7"
+            android:fillType="nonZero"
+            android:pathData="M272.302,56.233m-13.634,0a13.634,13.634 0,1 1,27.268 0a13.634,13.634 0,1 1,-27.268 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#EFF4F7"
+            android:fillType="nonZero"
+            android:pathData="M98.681,80.98m-20.07,0a20.07,20.07 0,1 1,40.14 0a20.07,20.07 0,1 1,-40.14 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CEDEE7"
+            android:fillType="nonZero"
+            android:pathData="M98.681,80.98m-13.966,0a13.966,13.966 0,1 1,27.932 0a13.966,13.966 0,1 1,-27.932 0"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#FFC2B0"
+            android:fillType="evenOdd"
+            android:pathData="M318.328,61.418C316.524,64.119 316.947,67.721 319.329,69.935C320.998,71.171 322.666,69.703 322.666,67.945C322.452,66.264 322.117,64.602 321.665,62.969C321.356,61.89 320.33,61.7 319.997,60.87"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M306.082,18.233l0.734,8.02l-7.433,0.688l-1.393,-8.517z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M296.363,11.765C296.363,24.843 309.002,24.288 309.319,11.765C309.144,-1.115 296.522,-1.082 296.363,11.765"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#8D8D99"
+            android:fillType="evenOdd"
+            android:pathData="M314.107,62.496C323.05,64.213 311.763,125.12 311.137,135.479L307.8,135.578C307.275,135.429 305.515,77.316 304.105,78.353C302.248,84.653 300.042,90.847 297.498,96.906C296.58,109.785 296.722,123.312 295.354,135.885L291.842,136.714C290.507,137.17 288.905,97.055 288.455,96.773L290.841,78.652C291.183,78.37 293.302,62.496 294.662,63.251L314.082,62.512"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#B2DBF0"
+            android:fillType="evenOdd"
+            android:pathData="M275.224,58.656C273.706,59.212 270.753,55.438 272.855,54.393C277.76,51.955 281.84,44.748 282.315,44.217C285.519,40.336 288.855,31.287 292.534,26.942C295.512,24.454 296.197,25.067 299.4,24.337C301.068,27.464 304.664,26.403 306.691,24.926C306.808,24.86 307.275,24.926 307.342,24.926C323.192,24.669 322.958,51.864 320.205,62.189C319.805,62.338 319.538,62.687 317.611,62.413C317.611,62.413 316.985,54.435 316.977,54.435C316.585,51.117 315.392,38.677 313.915,36.803C314.199,43.379 315.5,54.559 316.284,62.736C316.284,63.002 315.867,63.275 315.6,63.275L294.878,63.533C294.628,63.533 293.944,62.977 293.944,62.703C293.794,54.302 294.828,44.209 293.994,36.587C291.809,40.825 280.171,56.856 275.224,58.648"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M307.825,134.765L311.388,135.213C311.479,135.213 312.464,138.622 312.831,140.115C313.365,141.873 312.831,144.261 311.212,145.091C309.828,145.854 308.76,146.559 307.292,145.091C305.823,143.623 305.573,142.702 306.19,140.164C306.808,137.627 307.767,134.765 307.767,134.732"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M284.784,140.546L289.965,137.933L295.88,131.34C298.207,133.397 297.94,135.022 297.94,135.022C297.94,136.076 296.981,142.777 296.981,142.777L295.996,142.777L294.962,137.096C290.666,144.8 294.962,142.395 283.934,142.777C283.801,141.939 284.117,141.094 284.768,140.546"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M297.356,14.709C296.18,17.081 301.36,21.476 299.742,24.371C298.991,26.295 291.441,29.347 291.4,24.877C298.115,24.321 291.525,14.145 293.686,8.737C294.42,3.073 303.554,-1.704 308.109,2.716C315.659,8.887 306.549,23.102 314.724,24.959C314.382,29.886 307.091,26.386 305.815,23.649C304.046,18.922 311.655,16.326 307.767,7.427C306.427,10.069 304.146,12.12 301.369,13.183"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M276.159,62.131C276.217,62.521 271.787,61.144 271.654,61.177C270.82,61.517 268.501,51.308 268.192,50.893C268.008,50.769 268.45,49.989 268.926,49.939L273.039,50.611C274.24,49.956 276.125,60.887 276.509,61.293C276.659,61.708 276.417,61.899 276.159,62.123"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M269.251,55.355C269.668,55.007 270.002,56.466 270.703,56.583C271.475,56.707 272.184,57.08 272.722,57.644C276.234,63.673 265.781,61.973 269.251,55.355"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="evenOdd"
+            android:pathData="M80.554,50.641C80.554,50.641 89.616,65.136 95.26,75.266C95.659,75.978 98.004,79.548 98.128,80.236C98.128,80.236 97.688,85.205 95.535,84.021C88.46,76.094 77.229,57.971 73.904,54.493C70.138,50.558 80.554,50.641 80.554,50.641Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M65.125,170.891L55.797,163.934C54.211,163.316 52.482,163.158 50.809,163.478C49.978,163.652 49.895,163.047 49.912,163.801L48.964,166.891C48.083,168.953 48.448,170.535 50.809,171.438C54.226,172.374 61.982,176.457 65.457,173.873C66.97,173.111 67.12,171.653 65.158,170.891"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M83.597,168.357L73.288,162.145C71.778,161.705 70.168,161.734 68.675,162.227C67.843,162.476 67.951,161.888 67.802,162.625L67.112,165.797C66.422,167.918 67.112,169.392 69.514,170.088L78.825,172.076C81.319,172.506 88.377,170.419 83.597,168.357"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#8C8C99"
+            android:fillType="nonZero"
+            android:pathData="M47.908,83.963C48.108,81.163 76.896,80.277 77.088,84.667C78.858,125.129 77.171,152.652 74.419,161.78C74.373,161.931 74.308,162.075 74.228,162.211C73.214,163.727 70.903,163.751 68.899,162.791C68.212,162.445 67.797,161.726 67.843,160.96C68.392,150.06 67.278,127.092 63.138,105.391C63.08,105.092 63.013,104.388 62.98,104.695C62.98,104.695 56.329,161.068 56.221,164.911C56.163,167.181 52.896,167.636 51.607,166.858C51.183,166.592 49.862,165.541 49.82,164.944C48.349,144.129 46.96,97.124 47.908,83.963Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="nonZero"
+            android:pathData="M73.072,22.314C73.787,7.554 46.802,13.344 57.734,29.321C59.306,31.682 60.694,35.235 64.185,36.039L65.291,25.933C68.758,23.49 71.9,21.593 73.072,22.314Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M58.325,25.362C56.28,24.293 55.914,26.778 56.762,28.468C57.385,29.777 59.214,31.442 59.488,29.57C59.214,28.849 59.081,25.834 58.325,25.362Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="evenOdd"
+            android:pathData="M93.939,88.485C93.872,88.933 98.868,87.376 99.018,87.417C99.941,87.798 102.568,76.268 102.917,75.821C103.125,75.688 102.626,74.802 102.086,74.752L97.455,75.498C96.092,74.769 93.972,87.094 93.54,87.574C93.382,88.013 93.648,88.237 93.939,88.485Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M101.72,80.84C101.254,80.443 100.888,82.091 100.057,82.224C99.186,82.364 98.385,82.786 97.779,83.425C93.855,90.233 105.635,88.311 101.72,80.84Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M48.199,90.788C47.093,89.38 45.057,86.771 43.211,84.377C36.91,76.252 47.642,64.068 52.663,58.046L44.724,53.623C34.89,74.247 29.12,79.399 45.639,93.728C46.146,97.671 53.794,99.949 55.373,95.675C55.872,92.619 51.317,90.25 48.199,90.788Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#B1DAEF"
+            android:fillType="evenOdd"
+            android:pathData="M74.968,41.629C71.642,38.159 66.056,38.755 60.835,38.441C57.137,39.22 53.561,40.491 50.203,42.218C49.58,42.508 49.003,42.888 48.49,43.344C47.357,44.169 46.429,45.243 45.78,46.483C40.343,54.352 35.879,69.899 34.308,75.158C33.643,77.403 40.385,79.813 41.79,78.471C44.508,75.871 47.659,64.631 47.659,64.631L47.709,87.293C47.709,87.952 48.086,88.553 48.681,88.842C55.581,92.155 70.994,91.045 76.115,88.701C76.816,88.377 77.275,87.689 77.304,86.92L77.528,79.987C77.761,73.146 77.57,67.604 77.753,60.175L82.674,69.12C83.095,69.776 83.769,70.232 84.536,70.379C87.524,70.316 90.123,68.322 90.946,65.459C91.361,64.291 81.336,47.477 74.968,41.629Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="evenOdd"
+            android:pathData="M64.061,42.391C64.945,42.542 65.852,42.308 66.552,41.749C67.253,41.191 67.68,40.36 67.727,39.468L68.084,30.033C68.114,29.227 67.82,28.442 67.268,27.852C66.716,27.262 65.951,26.914 65.141,26.886C64.253,26.723 63.338,26.948 62.628,27.505C61.918,28.061 61.483,28.895 61.434,29.793L59.771,38.822C59.713,40.478 62.365,42.333 64.044,42.391"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#CB8E75"
+            android:fillType="nonZero"
+            android:pathData="M73.072,22.297C72.524,16.499 64.684,17.054 59.846,20.641C59.463,22.119 58.957,23.562 58.333,24.956C58.74,26.994 58.981,30.216 59.721,32.137C60.935,34.042 65.058,37.579 67.785,37.314C72.565,35.409 73.629,25.751 73.072,22.297Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#4A4A4A"
+            android:fillType="nonZero"
+            android:pathData="M72.84,20.21C72.84,20.21 75.566,13.642 72.241,12.085C70.056,11.127 67.568,11.127 65.383,12.085C63.213,13.161 61.567,12.432 59.804,13.609C54.243,17.377 54.251,20.575 56.163,26.29C56.446,25.064 56.828,25.147 57.369,24.236C58.757,25.967 59.106,25.619 59.173,28.609C59.173,29.247 59.447,30.116 59.106,30.456C58.607,30.953 59.397,31.897 59.555,32.187C60.769,34.092 64.335,38.283 67.818,37.985C70.188,37.778 71.385,33.57 72.307,30.754C71.185,33.554 71.094,30.613 69.381,30.754C68.417,30.862 65.391,30.307 64.676,31.193C64.22,31.787 63.387,31.941 62.747,31.549C61.589,31.094 60.719,30.115 60.403,28.915C60.32,28.435 60.228,28.004 60.153,27.607C60.153,27.424 60.104,27.25 60.079,27.06L60.079,27.06C59.788,25.403 59.804,24.194 61.043,21.908C60.942,21.155 61.15,20.394 61.619,19.795C62.088,19.197 62.78,18.812 63.537,18.727C63.537,18.653 63.537,18.595 63.446,18.545C66.673,17.769 70.079,18.373 72.84,20.21L72.84,20.21ZM65.856,31.69L69.306,31.74C69.98,31.74 69.705,32.568 69.589,32.99C69.115,34.929 65.782,34.647 65.366,32.792C65.225,32.386 65.266,31.69 65.856,31.69Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M188.867,221.031C188.187,213.401 187.706,205.763 186.786,198.142C184.862,182.276 182.224,166.511 179.911,150.695C171.858,149.659 166.251,148.97 166.251,148.97C166.251,148.97 151.431,146.607 151.224,153.399C151.017,160.191 167.728,163.633 167.728,163.633L169.079,163.633L170.274,173.51C170.274,173.51 157.228,189.268 158.165,194.526C159.103,199.784 167.288,197.495 167.288,197.495C167.288,197.495 162.478,211.834 166.169,215.616C168.872,218.394 171.601,217.175 171.601,217.175C171.601,217.175 164.759,223.378 167.844,228.902C169.196,231.331 177.165,232.036 177.165,232.036L190.045,231.63C189.195,228.163 188.805,224.6 188.884,221.031"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#FFFFFF"
+            android:fillType="evenOdd"
+            android:pathData="M193.296,260.706C188.431,261.386 183.934,257.999 183.244,253.135L166.492,133.935C165.812,129.069 169.2,124.572 174.064,123.883L221.842,117.174C226.708,116.489 231.208,119.879 231.893,124.746L248.646,243.937C249.325,248.805 245.933,253.304 241.066,253.989L193.296,260.706Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#00000000"
+            android:fillType="evenOdd"
+            android:pathData="M241.397,253.947L193.619,260.665C188.753,261.344 184.257,257.951 183.576,253.085L166.824,133.893C166.493,131.556 167.105,129.183 168.525,127.297C169.946,125.412 172.058,124.168 174.395,123.842L222.165,117.124C227.03,116.444 231.527,119.832 232.217,124.696L248.961,243.871C249.297,246.211 248.688,248.588 247.269,250.478C245.85,252.369 243.738,253.617 241.397,253.947Z"
+            android:strokeWidth="4.03"
+            android:strokeColor="#4A4A4A" />
+        <path
+            android:fillColor="#F7B994"
+            android:fillType="evenOdd"
+            android:pathData="M285.626,209.744C285.626,209.744 279.281,208.085 272.804,198.415C266.327,188.745 260.364,165.549 256.093,163.069C256.093,163.069 254.526,142.808 244.126,141.282C244.126,141.282 240.809,126.612 239.73,126.578C238.652,126.545 232.98,126.404 231.271,133.561C229.563,140.719 231.769,153.863 238.561,157.678C238.561,157.678 250.462,241.623 250.479,241.872C250.81,248.631 250.139,248.283 249.226,250.589C257.321,252.629 300.462,265.641 335.941,276.422L335.941,221.048L285.626,209.744Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+        <path
+            android:fillColor="#C00F2D"
+            android:fillType="nonZero"
+            android:pathData="M188.271,166.198L186.039,169.16L192.167,173.777C189.75,175.466 187.611,177.501 185.853,179.832L189.923,182.899C191.834,180.631 194.175,178.732 196.818,177.282L200.119,179.77C197.303,181.014 194.837,182.852 192.881,185.128L197.323,188.476C199.422,186.149 202.265,184.48 205.539,183.854L210.362,187.488C209.208,187.27 208.005,187.219 206.779,187.392C204.208,187.753 201.974,188.979 200.305,190.723L208.069,196.573L213.266,189.676L223.738,197.568L225.969,194.606L188.271,166.198ZM204.198,169.029C202.632,169.249 201.13,169.624 199.669,170.086L205.507,174.488C211.429,173.791 217.121,175.321 221.743,178.428L224.807,174.362C219.122,170.076 211.804,167.96 204.198,169.029ZM210.349,178.134L217.757,183.717L219.511,181.389C216.804,179.607 213.672,178.471 210.349,178.134Z"
+            android:strokeWidth="1"
+            android:strokeColor="#00000000" />
+    </group>
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_tracing_on.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_active.xml
similarity index 100%
rename from Corona-Warn-App/src/main/res/drawable/ic_tracing_on.xml
rename to Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_active.xml
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_bluetooth.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_bluetooth.xml
new file mode 100644
index 0000000000000000000000000000000000000000..66c42c5e858be53b624901794abfc46536214256
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_bluetooth.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="42dp"
+    android:height="42dp"
+    android:viewportWidth="42"
+    android:viewportHeight="42">
+    <path
+        android:fillColor="#0071F0"
+        android:fillType="evenOdd"
+        android:pathData="M21,1C32.0457,1 41,9.9543 41,21C41,32.0457 32.0457,41 21,41C9.9543,41 1,32.0457 1,21C1,9.9543 9.9543,1 21,1ZM20.2935,10.586L20.2935,18.586L16.7245,15.016L15.3105,16.431L19.8795,21L15.2925,25.587L16.7065,27.001L20.2935,23.414L20.2935,31.414L26.7075,25L22.7075,21L26.7075,17L20.2935,10.586ZM22.2935,23.414L23.8795,25L22.2935,26.586L22.2935,23.414ZM22.2935,15.414L23.8795,17L22.2935,18.586L22.2935,15.414Z"
+        android:strokeWidth="1"
+        android:strokeColor="#00000000" />
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_bluetooth_inactive.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_bluetooth_inactive.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c241107eb76957afb13f01a7b8c18e286b6f3445
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_bluetooth_inactive.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="22dp"
+    android:height="22dp"
+    android:viewportWidth="22"
+    android:viewportHeight="22">
+    <path
+        android:fillColor="#C00F2D"
+        android:fillType="nonZero"
+        android:pathData="M2.414,1.43L8.566,7.583L8.5655,7.5846L12.397,11.412L12.397,11.414L20.4068,19.4179L18.9816,20.8458L14.9877,16.8581L9.983,21.828L9.983,13.828L6.396,17.415L4.982,16.001L9.569,11.414L1,2.845L2.414,1.43ZM11.983,13.828L11.983,17L13.569,15.414L11.983,13.828ZM9.983,1L16.397,7.414L13.8225,9.9885L13.812,9.998L12.236,8.44L12.3872,8.5875L13.569,7.414L11.983,5.828L11.983,8.19L9.982,6.212L9.983,1Z"
+        android:strokeWidth="1"
+        android:strokeColor="#00000000" />
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_connection.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_connection.xml
new file mode 100644
index 0000000000000000000000000000000000000000..734f6ebf89019f28d5932e16337d0cb03f7bc0d4
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_connection.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="42dp"
+    android:height="42dp"
+    android:viewportWidth="42"
+    android:viewportHeight="42">
+    <path
+        android:fillColor="#0071F0"
+        android:fillType="evenOdd"
+        android:pathData="M21,1C32.0457,1 41,9.9543 41,21C41,32.0457 32.0457,41 21,41C9.9543,41 1,32.0457 1,21C1,9.9543 9.9543,1 21,1ZM21.001,23.5C19.601,23.5 18.3159,23.987 17.2939,24.793L21.001,28.5L24.708,24.793C23.686,23.987 22.401,23.5 21.001,23.5ZM21.001,18.5C18.222,18.5 15.688,19.543 13.749,21.248L15.8701,23.3691C17.2611,22.2041 19.05,21.5 21.001,21.5C22.952,21.5 24.7418,22.2031 26.1318,23.3691L28.251,21.25C26.313,19.544 23.78,18.5 21.001,18.5ZM21.001,13.5C16.859,13.5 13.1086,15.1786 10.3936,17.8926L12.3369,19.8359C14.6399,17.7699 17.671,16.5 21.001,16.5C24.331,16.5 27.363,17.7689 29.665,19.8359L31.6064,17.8945C28.8924,15.1795 25.143,13.5 21.001,13.5Z"
+        android:strokeWidth="1"
+        android:strokeColor="#00000000" />
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_connection_inactive.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_connection_inactive.xml
new file mode 100644
index 0000000000000000000000000000000000000000..42e277ea0e266a85f70005a7b0bc11f8a8f332d9
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_connection_inactive.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="21dp"
+    android:height="21dp"
+    android:viewportWidth="21"
+    android:viewportHeight="21">
+    <path
+        android:fillColor="#C00F2D"
+        android:fillType="nonZero"
+        android:pathData="M2.3145,1L0.9004,2.4141L3.8262,5.3398C2.4087,6.0602 1.1139,6.9866 0,8.0996L1.9434,10.043C3.1338,8.9748 4.5264,8.1366 6.0469,7.5605L7.623,9.1367C6.0257,9.5901 4.5707,10.3863 3.3555,11.4551L5.4766,13.5762C6.7722,12.4911 8.4155,11.8135 10.2109,11.7246L12.5137,14.0273C11.9142,13.8243 11.275,13.707 10.6074,13.707C9.2074,13.707 7.9224,14.194 6.9004,15L10.6074,18.707L13.9004,15.4141L18.9004,20.4141L20.3145,19L2.3145,1ZM10.6074,3.707C9.7544,3.707 8.9244,3.7946 8.1094,3.9316L10.8965,6.7207C14.1115,6.7927 17.0365,8.037 19.2715,10.043L21.2129,8.1016C18.4989,5.3866 14.7494,3.707 10.6074,3.707ZM13.209,9.0313L16.7461,12.5684L17.8574,11.457C16.5454,10.302 14.958,9.4602 13.209,9.0313Z"
+        android:strokeWidth="1"
+        android:strokeColor="#00000000" />
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_tracing_off.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_inactive.xml
similarity index 100%
rename from Corona-Warn-App/src/main/res/drawable/ic_tracing_off.xml
rename to Corona-Warn-App/src/main/res/drawable/ic_settings_tracing_inactive.xml
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_step_1.xml b/Corona-Warn-App/src/main/res/drawable/ic_step_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..45b7619813715d86a2674a15dd04062a07af6232
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_step_1.xml
@@ -0,0 +1,6 @@
+<vector android:height="40dp" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#007FAD" android:fillType="nonZero"
+        android:pathData="M13,17C12.45,17 12,16.55 12,16L12,9L11,9C10.45,9 10,8.55 10,8C10,7.45 10.45,7 11,7L13,7C13.55,7 14,7.45 14,8L14,16C14,16.55 13.55,17 13,17Z"
+        android:strokeColor="#00000000" android:strokeWidth="1"/>
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_step_2.xml b/Corona-Warn-App/src/main/res/drawable/ic_step_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..64729728a7d9d365bbc6e967176bfe02a05dce39
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_step_2.xml
@@ -0,0 +1,6 @@
+<vector android:height="40dp" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#007FAD" android:fillType="nonZero"
+        android:pathData="M15,11C15,12.1 14.1,13 13,13L11,13L11,15L14,15C14.55,15 15,15.45 15,16C15,16.55 14.55,17 14,17L10,17C9.45,17 9,16.55 9,16L9,13C9,11.9 9.9,11 11,11L13,11L13,9L10,9C9.45,9 9,8.55 9,8C9,7.45 9.45,7 10,7L13,7C14.1,7 15,7.9 15,9L15,11Z"
+        android:strokeColor="#00000000" android:strokeWidth="1"/>
+</vector>
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_step_background.xml b/Corona-Warn-App/src/main/res/drawable/ic_step_background.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b1270b99fb04d28dc7e525f7c0d7b14771236fab
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_step_background.xml
@@ -0,0 +1,19 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="40dp"
+    android:height="40dp"
+    android:viewportWidth="40"
+    android:viewportHeight="40">
+    <path
+        android:fillAlpha="0.1"
+        android:fillColor="#17191A"
+        android:fillType="evenOdd"
+        android:pathData="M20,32L20,32A0.5,0.5 0,0 1,20.5 32.5L20.5,151.5A0.5,0.5 0,0 1,20 152L20,152A0.5,0.5 0,0 1,19.5 151.5L19.5,32.5A0.5,0.5 0,0 1,20 32z"
+        android:strokeWidth="1"
+        android:strokeColor="#00000000" />
+    <path
+        android:fillColor="#F5F5F5"
+        android:fillType="evenOdd"
+        android:pathData="M20,20m-20,0a20,20 0,1 1,40 0a20,20 0,1 1,-40 0"
+        android:strokeWidth="1"
+        android:strokeColor="#00000000" />
+</vector>
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml
index 22505136a4e95e8d6b08adfab7968b7a8d8d0140..e222be48e288780a838123e5aa56309a8cf2085f 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml
@@ -25,31 +25,26 @@
                 app:title="@{@string/information_about_title}" />
 
             <TextView
-                android:id="@+id/text_sample_1"
+                android:id="@+id/information_about_body_emphasized"
+                style="@style/textMultilineEmphasized"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:text="@string/lorem_ipsum"
+                android:layout_marginTop="@dimen/spacing_small"
+                android:text="@string/information_about_body_emphasized"
                 app:layout_constraintEnd_toStartOf="@+id/guideline_end"
                 app:layout_constraintStart_toEndOf="@+id/guideline_start"
                 app:layout_constraintTop_toBottomOf="@+id/information_about_header" />
 
             <TextView
-                android:id="@+id/text_sample_2"
+                android:id="@+id/information_about_body"
+                style="@style/textMultiline"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:text="@string/lorem_ipsum"
+                android:layout_marginTop="@dimen/spacing_small"
+                android:text="@string/information_about_body"
                 app:layout_constraintEnd_toStartOf="@+id/guideline_end"
                 app:layout_constraintStart_toEndOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/text_sample_1" />
-
-            <TextView
-                android:id="@+id/text_sample_3"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:text="@string/lorem_ipsum"
-                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
-                app:layout_constraintStart_toEndOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/text_sample_2" />
+                app:layout_constraintTop_toBottomOf="@+id/information_about_body_emphasized" />
 
             <androidx.constraintlayout.widget.Guideline
                 android:id="@+id/guideline_top"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml
index 905c5283a35228542e8f66fd9a879344b0ebdcd0..a8b9be9aa338e651c01958eb1381856314c9d502 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml
@@ -16,6 +16,7 @@
                 layout="@layout/include_information_details_header"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
+                app:body="@{@string/information_contact_body}"
                 app:headline="@{@string/information_contact_headline}"
                 app:icon="@{@drawable/ic_back}"
                 app:illustration="@{@drawable/ic_information_illustration_contact}"
@@ -25,31 +26,54 @@
                 app:title="@{@string/information_contact_title}" />
 
             <TextView
-                android:id="@+id/text_sample_1"
+                android:id="@+id/information_contact_subtitle_phone"
+                style="@style/textLargeEmphasized"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:text="@string/lorem_ipsum"
+                android:layout_marginTop="@dimen/spacing_small"
+                android:text="@string/information_contact_subtitle_phone"
                 app:layout_constraintEnd_toStartOf="@+id/guideline_end"
                 app:layout_constraintStart_toEndOf="@+id/guideline_start"
                 app:layout_constraintTop_toBottomOf="@+id/information_contact_header" />
 
+            <include
+                android:id="@+id/information_contact_navigation_row_phone"
+                layout="@layout/include_navigation_row"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/information_contact_subtitle_phone"
+                app:subtitle="@{@string/information_contact_button_phone}" />
+
             <TextView
-                android:id="@+id/text_sample_2"
+                android:id="@+id/information_contact_body_phone"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:text="@string/lorem_ipsum"
-                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
-                app:layout_constraintStart_toEndOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/text_sample_1" />
+                android:text="@string/information_contact_body_phone"
+                app:layout_constraintEnd_toEndOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/information_contact_navigation_row_phone" />
 
             <TextView
-                android:id="@+id/text_sample_3"
+                android:id="@+id/information_contact_body_open"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:text="@string/lorem_ipsum"
-                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
-                app:layout_constraintStart_toEndOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/text_sample_2" />
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:text="@string/information_contact_body_open"
+                app:layout_constraintEnd_toEndOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/information_contact_body_phone" />
+
+            <TextView
+                android:id="@+id/information_contact_body_other"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:text="@string/information_contact_body_other"
+                app:layout_constraintEnd_toEndOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/information_contact_body_open" />
 
             <androidx.constraintlayout.widget.Guideline
                 android:id="@+id/guideline_top"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_main.xml b/Corona-Warn-App/src/main/res/layout/fragment_main.xml
index 9c1cc09a774eaca3390b7f11c824748569949746..a9ab393c0b0a4d134832b89ae92c1e1bc3fa8b06 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_main.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_main.xml
@@ -6,6 +6,7 @@
     <data>
 
         <import type="de.rki.coronawarnapp.util.formatter.FormatterSettingsHelper" />
+        <import type="de.rki.coronawarnapp.util.formatter.FormatterSubmissionHelper" />
 
         <variable
             name="submissionViewModel"
@@ -26,7 +27,7 @@
         android:fillViewport="true"
         tools:context="de.rki.coronawarnapp.ui.main.MainFragment">
 
-        <!-- todo apply merge tags throught xml when applicable (eod) -->
+        <!-- todo apply merge tags through xml when applicable (eod) -->
         <androidx.constraintlayout.widget.ConstraintLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content">
@@ -94,7 +95,7 @@
                     style="@style/textLargeEmphasized"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
-                    android:text="@{FormatterSettingsHelper.formatTracingText(tracingViewModel.isTracingEnabled())}"
+                    android:text="@{FormatterSettingsHelper.formatTracingDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintHorizontal_bias="0.0"
                     app:layout_constraintStart_toStartOf="parent"
@@ -105,8 +106,8 @@
                     android:layout_width="@dimen/icon_size_main_card"
                     android:layout_height="@dimen/icon_size_main_card"
                     android:importantForAccessibility="no"
-                    android:src="@{FormatterSettingsHelper.formatTracingIcon(tracingViewModel.isTracingEnabled())}"
-                    android:tint="@{FormatterSettingsHelper.formatTracingIconColor(tracingViewModel.isTracingEnabled())}"
+                    android:src="@{FormatterSettingsHelper.formatTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
+                    android:tint="@{FormatterSettingsHelper.formatTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintTop_toTopOf="parent" />
@@ -125,6 +126,7 @@
             <include
                 android:id="@+id/main_risk"
                 layout="@layout/include_risk_card"
+                android:visibility="@{FormatterSubmissionHelper.formatShowRiskStatusCard(submissionViewModel.testResult)}"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_normal"
@@ -135,15 +137,28 @@
                 app:showDetails="@{false}"
                 app:tracingViewModel="@{tracingViewModel}" />
 
+            <include
+                android:id="@+id/main_test_positive"
+                layout="@layout/include_submission_status_card_positive"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:visibility="@{FormatterSubmissionHelper.formatShowSubmissionStatusPositiveCard(submissionViewModel.testResult)}"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/main_risk"
+                app:registerDate="@{submissionViewModel.testResultReceivedDate}" />
+
             <include
                 android:id="@+id/main_test"
                 layout="@layout/include_submission_status_card"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_normal"
+                android:visibility="@{FormatterSubmissionHelper.formatShowSubmissionStatusCard(submissionViewModel.testResult)}"
                 app:layout_constraintEnd_toStartOf="@+id/guideline_end"
                 app:layout_constraintStart_toStartOf="@+id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@+id/main_risk"
+                app:layout_constraintTop_toBottomOf="@+id/main_test_positive"
                 app:submissionViewModel="@{submissionViewModel}" />
 
             <include
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml
index b28518783ed8beb6ec99867fd162a5ec94f494f0..90bf72d714f6c6af018b2bf83ee1b49105557c3f 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml
@@ -21,7 +21,6 @@
             android:layout_width="0dp"
             android:layout_height="0dp"
             app:body="@{@string/onboarding_notifications_body}"
-            app:bodyEmphasized="@{@string/onboarding_notifications_body}"
             app:headline="@{@string/onboarding_notifications_headline}"
             app:illustration="@{@drawable/ic_onboarding_illustration_notification}"
             app:layout_constraintBottom_toTopOf="@+id/guideline_bottom"
@@ -40,17 +39,6 @@
             app:layout_constraintStart_toStartOf="@id/guideline_start"
             app:layout_constraintTop_toBottomOf="@id/guideline_bottom" />
 
-        <Button
-            android:id="@+id/onboarding_button_disable"
-            style="@style/buttonLight"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/spacing_small"
-            android:text="@string/onboarding_button_disable"
-            app:layout_constraintEnd_toEndOf="@id/guideline_end"
-            app:layout_constraintStart_toStartOf="@id/guideline_start"
-            app:layout_constraintTop_toBottomOf="@id/onboarding_button_finish" />
-
         <androidx.constraintlayout.widget.Guideline
             android:id="@+id/guideline_top"
             android:layout_width="wrap_content"
@@ -63,7 +51,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:orientation="horizontal"
-            app:layout_constraintGuide_end="@dimen/guideline_action_large" />
+            app:layout_constraintGuide_end="@dimen/guideline_action" />
 
         <androidx.constraintlayout.widget.Guideline
             android:id="@+id/guideline_start"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml
index de864fd99c61caec067c680fbd9b312fb15113dc..03214a4ac06ea59b1e850204d2c79e0015bd517b 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml
@@ -21,7 +21,6 @@
             android:layout_width="0dp"
             android:layout_height="0dp"
             app:body="@{@string/onboarding_test_body}"
-            app:bodyEmphasized="@{@string/onboarding_test_body_emphasized}"
             app:headline="@{@string/onboarding_test_headline}"
             app:illustration="@{@drawable/ic_onboarding_illustration_test}"
             app:layout_constraintBottom_toTopOf="@+id/guideline_bottom"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml
index c1e96c83a43fb6cafe10166a2a22c92cafeb908b..8335d8010a8101f2568c0e33efb1553060b95c51 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml
@@ -44,7 +44,7 @@
                 app:tracingViewModel="@{tracingViewModel}" />
 
             <TextView
-                android:id="@+id/risk_details_behavior_subtitle"
+                android:id="@+id/risk_details_behavior_headline"
                 style="@style/textLargeEmphasized"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
@@ -54,6 +54,17 @@
                 app:layout_constraintStart_toStartOf="@+id/guideline_start"
                 app:layout_constraintTop_toBottomOf="@+id/risk_details_risk_card" />
 
+            <TextView
+                android:id="@+id/risk_details_behavior_subtitle"
+                style="@style/textMultiline"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_tiny"
+                android:text="@string/risk_details_subtitle_behavior"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/risk_details_behavior_headline" />
+
             <androidx.constraintlayout.widget.ConstraintLayout
                 android:id="@+id/risk_details_behavior_wrapper"
                 android:layout_width="0dp"
@@ -100,7 +111,7 @@
                 app:layout_constraintTop_toBottomOf="@id/risk_details_behavior_wrapper">
 
                 <TextView
-                    android:id="@+id/risk_details_information_subtitle"
+                    android:id="@+id/risk_details_information_headline"
                     style="@style/textLargeEmphasized"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
@@ -110,15 +121,15 @@
                     app:layout_constraintTop_toTopOf="parent" />
 
                 <TextView
-                    android:id="@+id/risk_details_information_subtitle_details"
+                    android:id="@+id/risk_details_information_subtitle"
                     style="@style/textMultiline"
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/spacing_tiny"
-                    android:text="@string/risk_details_body_infection_risk"
+                    android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelSubtitle(tracingViewModel.riskLevel)}"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/risk_details_information_subtitle" />
+                    app:layout_constraintTop_toBottomOf="@+id/risk_details_information_headline" />
 
                 <TextView
                     android:id="@+id/risk_details_information_body"
@@ -126,10 +137,22 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/spacing_small"
-                    android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel)}"
+                    android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure)}"
+                    android:visibility="@{FormatterHelper.formatVisibilityText(FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure))}"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toBottomOf="@+id/risk_details_information_subtitle" />
+
+                <TextView
+                    android:id="@+id/risk_details_information_body_notice"
+                    style="@style/textMultiline"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/spacing_small"
+                    android:text="@string/risk_details_information_body_notice"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/risk_details_information_subtitle_details" />
+                    app:layout_constraintTop_toBottomOf="@+id/risk_details_information_body" />
 
             </androidx.constraintlayout.widget.ConstraintLayout>
 
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml
index 6449baa93678dcd8828e2e97791b81b4077aad46..67e2b03b3174becbd80c67ef9f289d4eda00798c 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml
@@ -5,6 +5,8 @@
 
     <data>
 
+        <import type="de.rki.coronawarnapp.util.formatter.FormatterSettingsHelper" />
+
         <variable
             name="tracingViewModel"
             type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" />
@@ -12,6 +14,7 @@
         <variable
             name="settingsViewModel"
             type="de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel" />
+
     </data>
 
     <ScrollView
@@ -42,12 +45,13 @@
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_normal"
                 app:body="@{@string/settings_tracing_body_description}"
-                app:icon="@{@drawable/ic_tracing_on}"
+                app:icon="@{@drawable/ic_settings_tracing_active}"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@+id/settings_header"
                 app:showDivider="@{true}"
-                app:status="@{tracingViewModel.isTracingEnabled()}"
+                app:color="@{FormatterSettingsHelper.formatIconColor(tracingViewModel.isTracingEnabled())}"
+                app:statusText="@{FormatterSettingsHelper.formatTracingStatusText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
                 app:subtitle="@{@string/settings_tracing_title}"
                 app:tracingViewModel="@{tracingViewModel}" />
 
@@ -62,7 +66,8 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@+id/settings_tracing"
                 app:showDivider="@{true}"
-                app:status="@{settingsViewModel.isNotificationsEnabled()}"
+                app:color="@{FormatterSettingsHelper.formatIconColor(settingsViewModel.isNotificationsEnabled(), settingsViewModel.isNotificationsRiskEnabled(), settingsViewModel.isNotificationsTestEnabled())}"
+                app:statusText="@{FormatterSettingsHelper.formatNotificationsStatusText(settingsViewModel.isNotificationsEnabled(), settingsViewModel.isNotificationsRiskEnabled(), settingsViewModel.isNotificationsTestEnabled())}"
                 app:subtitle="@{@string/settings_notifications_title}"
                 app:tracingViewModel="@{tracingViewModel}" />
 
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml
index b1a66f4e2c9707c181edf359fe3ad644e817071c..f37e92a586d2745a047892182c53496c495f13da 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml
@@ -53,8 +53,9 @@
                 app:layout_constraintTop_toBottomOf="@+id/settings_details_header_notifications"
                 app:showDivider="@{true}"
                 app:status="@{settingsViewModel.isNotificationsRiskEnabled()}"
-                app:subtitle="@{@string/settings_notifications_subtitle_update_risk}"
-                app:tracingViewModel="@{tracingViewModel}" />
+                app:statusText="@{FormatterSettingsHelper.formatStatus(settingsViewModel.isNotificationsRiskEnabled())}"
+                app:enabled="@{true}"
+                app:subtitle="@{@string/settings_notifications_subtitle_update_risk}" />
 
             <include
                 android:id="@+id/settings_switch_row_notifications_test"
@@ -67,12 +68,13 @@
                 app:layout_constraintTop_toBottomOf="@+id/settings_switch_row_notifications_risk"
                 app:showDivider="@{true}"
                 app:status="@{settingsViewModel.isNotificationsTestEnabled()}"
-                app:subtitle="@{@string/settings_notifications_subtitle_update_test}"
-                app:tracingViewModel="@{tracingViewModel}" />
+                app:enabled="@{true}"
+                app:statusText="@{FormatterSettingsHelper.formatStatus(settingsViewModel.isNotificationsTestEnabled())}"
+                app:subtitle="@{@string/settings_notifications_subtitle_update_test}" />
 
             <include
                 android:id="@+id/settings_navigation_row_system"
-                layout="@layout/include_settings_navigation_row"
+                layout="@layout/include_navigation_row"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_normal"
@@ -80,7 +82,7 @@
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@+id/settings_switch_row_notifications_test"
-                app:showDivider="@{true}" />
+                app:subtitle="@{@string/settings_notifications_button_open_settings}" />
 
             <androidx.constraintlayout.widget.Guideline
                 android:id="@+id/guideline_top"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml
index c116d5d3ea59cccdd9121e1f4222a3f99a63b580..7d9a23c23a7c99769075d9898897fd706c96213e 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml
@@ -30,43 +30,104 @@
             android:layout_height="wrap_content">
 
             <include
-                android:id="@+id/settings_details_header_tracing"
+                android:id="@+id/settings_tracing_header"
                 layout="@layout/include_settings_details_header"
-                android:layout_width="0dp"
+                android:layout_width="@dimen/match_constraint"
                 android:layout_height="wrap_content"
                 app:headline="@{@string/settings_tracing_headline}"
                 app:icon="@{@drawable/ic_close}"
-                app:illustration="@{FormatterSettingsHelper.formatTracingImage(tracingViewModel.isTracingEnabled())}"
+                app:illustration="@{FormatterSettingsHelper.formatTracingStatusImage(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="parent"
                 app:title="@{@string/settings_tracing_title}" />
 
             <include
-                android:id="@+id/settings_switch_row_tracing"
+                android:id="@+id/settings_tracing_switch_row"
                 layout="@layout/include_settings_switch_row"
-                android:layout_width="0dp"
+                android:layout_width="@dimen/match_constraint"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_normal"
-                app:body="@{FormatterSettingsHelper.formatTracingDescription(tracingViewModel.isTracingEnabled())}"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@+id/settings_details_header_tracing"
+                app:enabled="@{FormatterSettingsHelper.formatTracingSwitchEnabled(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
                 app:showDivider="@{true}"
-                app:status="@{tracingViewModel.isTracingEnabled()}"
-                app:subtitle="@{@string/settings_tracing_title}"
-                app:tracingViewModel="@{tracingViewModel}" />
+                app:layout_constraintTop_toBottomOf="@+id/settings_tracing_header"
+                app:status="@{FormatterSettingsHelper.formatTracingSwitch(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
+                app:statusText="@{FormatterSettingsHelper.formatTracingStatusText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
+                app:subtitle="@{@string/settings_tracing_title}" />
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:id="@+id/settings_tracing_status"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_small"
+                app:layout_constraintEnd_toEndOf="@id/guideline_end"
+                app:layout_constraintStart_toStartOf="@id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/settings_tracing_switch_row">
+
+                <include
+                    android:id="@+id/settings_tracing_status_bluetooth"
+                    layout="@layout/include_tracing_status_card"
+                    android:layout_width="@dimen/match_constraint"
+                    android:layout_height="wrap_content"
+                    android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityBluetooth(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
+                    app:body="@{@string/settings_tracing_status_bluetooth_body}"
+                    app:buttonText="@{@string/settings_tracing_status_bluetooth_button}"
+                    app:headline="@{@string/settings_tracing_status_bluetooth_headline}"
+                    app:icon="@{@drawable/ic_settings_tracing_bluetooth}"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <include
+                    android:id="@+id/settings_tracing_status_connection"
+                    layout="@layout/include_tracing_status_card"
+                    android:layout_width="@dimen/match_constraint"
+                    android:layout_height="wrap_content"
+                    android:visibility="@{FormatterSettingsHelper.formatTracingStatusConnection(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
+                    app:body="@{@string/settings_tracing_status_connection_body}"
+                    app:buttonText="@{@string/settings_tracing_status_connection_button}"
+                    app:headline="@{@string/settings_tracing_status_connection_headline}"
+                    app:icon="@{@drawable/ic_settings_tracing_connection}"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:id="@+id/settings_tracing_status_tracing"
+                    android:layout_width="@dimen/match_constraint"
+                    android:layout_height="wrap_content"
+                    android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent">
+
+                    <TextView
+                        android:id="@+id/settings_tracing_status_tracing_body"
+                        style="@style/textMultiline"
+                        android:layout_width="@dimen/match_constraint"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="@dimen/spacing_small"
+                        android:text="@{FormatterSettingsHelper.formatTracingStatusBody(tracingViewModel.isTracingEnabled(), tracingViewModel.activeTracingDaysInRetentionPeriod)}"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent" />
+
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
+            </androidx.constraintlayout.widget.ConstraintLayout>
 
             <TextView
                 android:id="@+id/settings_tracing_body"
                 style="@style/textMultiline"
-                android:layout_width="0dp"
+                android:layout_width="@dimen/match_constraint"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_small"
                 android:text="@string/settings_tracing_body_text"
                 app:layout_constraintEnd_toEndOf="@id/guideline_end"
                 app:layout_constraintStart_toStartOf="@id/guideline_start"
-                app:layout_constraintTop_toBottomOf="@id/settings_switch_row_tracing" />
+                app:layout_constraintTop_toBottomOf="@id/settings_tracing_status" />
 
             <androidx.constraintlayout.widget.Guideline
                 android:id="@+id/guideline_start"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_contact.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_contact.xml
new file mode 100644
index 0000000000000000000000000000000000000000..18b6108f6eae667fb78fb9e22792054c0fbb07bf
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_contact.xml
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
+        tools:context=".ui.submission.SubmissionContactFragment">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <include
+                android:id="@+id/submission_contact_header"
+                layout="@layout/include_header"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                app:icon="@{@drawable/ic_back}"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent"
+                app:title="@{@string/submission_contact_title}" />
+
+            <include
+                layout="@layout/include_submission_contact"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="@dimen/match_constraint"
+                app:layout_constraintBottom_toTopOf="@id/guideline_bottom"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_contact_header" />
+
+            <Button
+                android:id="@+id/submission_contact_button_call"
+                style="@style/buttonPrimary"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:text="@string/submission_contact_button_call"
+                android:textAllCaps="true"
+                app:layout_constraintBottom_toTopOf="@+id/submission_contact_button_enter"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/guideline_bottom" />
+
+            <Button
+                android:id="@+id/submission_contact_button_enter"
+                style="@style/buttonGrey"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:text="@string/submission_contact_button_enter"
+                android:textAllCaps="true"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/submission_contact_button_call" />
+
+            <androidx.constraintlayout.widget.Guideline
+                android:id="@+id/guideline_bottom"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                app:layout_constraintGuide_end="@dimen/guideline_action_large" />
+
+            <include layout="@layout/merge_guidelines_common" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </ScrollView>
+</layout>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml
index ea3ae1b4af565b514be71776e29e613c7e0c9924..5a9d11f1b352172bfb2d9e4cf160719f1725eec9 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result.xml
@@ -26,11 +26,23 @@
             app:layout_constraintTop_toTopOf="parent"
             app:title="@{@string/submission_test_result_headline}" />
 
+        <ProgressBar
+            android:id="@+id/submission_test_result_spinner"
+            style="?android:attr/progressBarStyle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="@{FormatterSubmissionHelper.formatTestResultSpinnerVisible(submissionViewModel.testResultState)}"
+            app:layout_constraintBottom_toBottomOf="@+id/submission_test_result_button_container"
+            app:layout_constraintEnd_toStartOf="@+id/submission_test_result_guideline_end"
+            app:layout_constraintStart_toStartOf="@+id/submission_test_result_guideline_start"
+            app:layout_constraintTop_toTopOf="@+id/submission_test_result_guideline_top" />
+
         <ScrollView
             android:layout_width="@dimen/match_constraint"
             android:layout_height="@dimen/match_constraint"
             android:layout_marginBottom="@dimen/spacing_normal"
             android:fillViewport="true"
+            android:visibility="@{FormatterSubmissionHelper.formatTestResultVisible(submissionViewModel.testResultState)}"
             app:layout_constraintBottom_toTopOf="@+id/submission_test_result_button_container"
             app:layout_constraintEnd_toStartOf="@+id/submission_test_result_guideline_end"
             app:layout_constraintStart_toStartOf="@+id/submission_test_result_guideline_start"
@@ -113,6 +125,7 @@
             android:id="@+id/submission_test_result_button_container"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:visibility="@{FormatterSubmissionHelper.formatTestResultVisible(submissionViewModel.testResultState)}"
             app:layout_constraintBottom_toBottomOf="@id/submission_test_result_guideline_bottom">
 
             <Button
diff --git a/Corona-Warn-App/src/main/res/layout/include_information_details.xml b/Corona-Warn-App/src/main/res/layout/include_information_details.xml
index e2e8cbc020fc82f5daafa3f56d1d0a5ca3303f8a..2a56e45954aabf1292a97aa34443c596fdc224a2 100644
--- a/Corona-Warn-App/src/main/res/layout/include_information_details.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_information_details.xml
@@ -55,7 +55,7 @@
             android:layout_marginTop="@dimen/spacing_tiny"
             android:text="@{body}"
             android:visibility="@{FormatterHelper.formatVisibilityText(body)}"
-            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintEnd_toEndOf="@id/guideline_end"
             app:layout_constraintStart_toStartOf="@id/guideline_start"
             app:layout_constraintTop_toBottomOf="@+id/information_details_header_headline"
             tools:text="@string/settings_title" />
diff --git a/Corona-Warn-App/src/main/res/layout/include_settings_navigation_row.xml b/Corona-Warn-App/src/main/res/layout/include_navigation_row.xml
similarity index 50%
rename from Corona-Warn-App/src/main/res/layout/include_settings_navigation_row.xml
rename to Corona-Warn-App/src/main/res/layout/include_navigation_row.xml
index a4b2d167fd4e3703727c113ae2e3d813a4856389..79826222250f19c7c6870a8bd545d5ead45abd32 100644
--- a/Corona-Warn-App/src/main/res/layout/include_settings_navigation_row.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_navigation_row.xml
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
 
     <data>
 
@@ -13,8 +14,12 @@
             type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" />
 
         <variable
-            name="showDivider"
-            type="Boolean" />
+            name="icon"
+            type="android.graphics.drawable.Drawable" />
+
+        <variable
+            name="subtitle"
+            type="String" />
     </data>
 
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -22,7 +27,7 @@
         android:layout_height="wrap_content">
 
         <androidx.constraintlayout.widget.ConstraintLayout
-            android:id="@+id/settings_navigation_row"
+            android:id="@+id/navigation_row"
             style="@style/row"
             android:layout_width="0dp"
             android:layout_height="wrap_content"
@@ -30,15 +35,31 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent">
 
+            <ImageView
+                android:id="@+id/navigation_row_icon"
+                style="@style/icon"
+                android:layout_width="@dimen/icon_size_settings"
+                android:layout_height="@dimen/icon_size_settings"
+                android:layout_marginEnd="@dimen/spacing_small"
+                android:contentDescription="@string/lorem_ipsum"
+                android:src="@{icon}"
+                android:visibility="@{FormatterHelper.formatVisibilityIcon(icon)}"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/navigation_row_subtitle"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
             <TextView
-                android:id="@+id/settings_navigation_row_subtitle"
+                android:id="@+id/navigation_row_subtitle"
                 style="@style/textLink"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
-                android:text="@string/settings_notifications_button_open_settings"
+                android:text="@{subtitle}"
+                app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
+                app:layout_constraintStart_toEndOf="@+id/navigation_row_icon"
+                app:layout_constraintTop_toTopOf="parent"
+                tools:text="@string/settings_notifications_button_open_settings" />
 
         </androidx.constraintlayout.widget.ConstraintLayout>
 
diff --git a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml
index b6d27dcb5ea25f7a8dea3161983ac53299a4bb1f..6262c16d1a511cf6010ca45989256be141ee6056 100644
--- a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml
@@ -5,6 +5,8 @@
 
     <data>
 
+        <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" />
+
         <variable
             name="illustration"
             type="android.graphics.drawable.Drawable" />
@@ -84,11 +86,12 @@
 
             <TextView
                 android:id="@+id/onboarding_body_emphasized"
-                style="@style/textMultilineEmphasized"
+                style="@style/textMultiline"
                 android:layout_width="0dp"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="@dimen/spacing_normal"
                 android:text="@{bodyEmphasized}"
+                android:visibility="@{FormatterHelper.formatVisibilityText(bodyEmphasized)}"
                 app:layout_constraintEnd_toEndOf="@id/guideline_end"
                 app:layout_constraintStart_toStartOf="@id/guideline_start"
                 app:layout_constraintTop_toBottomOf="@id/onboarding_body"
diff --git a/Corona-Warn-App/src/main/res/layout/include_setting_row.xml b/Corona-Warn-App/src/main/res/layout/include_setting_row.xml
index ae19f259ccf51ef8fcae991bb9a1376ed44a7485..303bc36e88017eb7124aeb3ca29f0e1bdc4a3e64 100644
--- a/Corona-Warn-App/src/main/res/layout/include_setting_row.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_setting_row.xml
@@ -21,8 +21,12 @@
             type="String" />
 
         <variable
-            name="status"
-            type="Boolean" />
+            name="color"
+            type="Integer" />
+
+        <variable
+            name="statusText"
+            type="String" />
 
         <variable
             name="body"
@@ -53,7 +57,7 @@
                 android:layout_height="@dimen/icon_size_settings"
                 android:importantForAccessibility="no"
                 android:src="@{icon}"
-                android:tint="@{FormatterSettingsHelper.formatIconColor(status)}"
+                android:tint="@{color}"
                 app:layout_constraintBottom_toBottomOf="@id/settings_row_header"
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toTopOf="@id/settings_row_header" />
@@ -80,7 +84,7 @@
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:paddingTop="@dimen/spacing_mega_tiny"
-                    android:text="@{FormatterSettingsHelper.formatStatus(status)}"
+                    android:text="@{statusText}"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
diff --git a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml b/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml
index b0ac35e19204e983087a79230712e82188d319bd..f332d875ca7b850880c2677e1d477dd72a391277 100644
--- a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml
@@ -10,18 +10,22 @@
 
         <import type="android.view.View" />
 
-        <variable
-            name="tracingViewModel"
-            type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" />
-
         <variable
             name="subtitle"
             type="String" />
 
+        <variable
+            name="enabled"
+            type="Boolean" />
+
         <variable
             name="status"
             type="Boolean" />
 
+        <variable
+            name="statusText"
+            type="String" />
+
         <variable
             name="body"
             type="String" />
@@ -70,7 +74,7 @@
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/spacing_mega_tiny"
-                    android:text="@{FormatterSettingsHelper.formatStatus(status)}"
+                    android:text="@{statusText}"
                     app:layout_constraintBottom_toBottomOf="parent"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
@@ -83,6 +87,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:checked="@{status}"
+                android:enabled="@{enabled}"
                 android:theme="@style/switchBase"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintEnd_toEndOf="parent"
diff --git a/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml b/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37b841fb07d730da89d63011ba747d3e96588c87
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/include_step_entry_simple_body.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/simple_step_entry_title"
+        style="@style/textTitle"
+        android:layout_width="@dimen/match_constraint"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Title" />
+
+    <TextView
+        android:id="@+id/simple_step_entry_body"
+        android:layout_width="@dimen/match_constraint"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/spacing_small"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/simple_step_entry_title"
+        tools:text="Text" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml b/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml
new file mode 100644
index 0000000000000000000000000000000000000000..29e22f9867ad95a13b80347544cbae5905c74629
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_contact.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <ScrollView
+        style="@style/fadingScrollView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+            <ImageView
+                android:id="@+id/submission_contact_illustration"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:src="@drawable/ic_information_illustration_contact"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <TextView
+                android:id="@+id/submission_contact_body"
+                style="@style/textMultiline"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_small"
+                android:text="@string/submission_contact_body"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@id/submission_contact_illustration" />
+
+            <TextView
+                android:id="@+id/submission_contact_headline"
+                style="@style/textTitle"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:text="@string/submission_contact_headline"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="@id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/submission_contact_body" />
+
+
+            <de.rki.coronawarnapp.ui.view.StepEntry
+                android:id="@+id/submission_contact_step_1"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@id/submission_contact_headline"
+                app:step_entry_final="false"
+                app:step_entry_icon="@drawable/ic_step_1">
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content">
+
+                    <TextView
+                        android:id="@+id/submission_contact_step_1_body"
+                        android:layout_width="@dimen/match_constraint"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="@dimen/button_icon_margin"
+                        android:text="@string/submission_contact_step_1_body"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent" />
+
+                    <TextView
+                        android:id="@+id/submission_contact_step_1_number"
+                        style="@style/textTitle"
+                        android:layout_width="@dimen/match_constraint"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="@dimen/spacing_small"
+                        android:text="@string/submission_contact_number"
+                        android:textColor="@color/textColorBlue"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toBottomOf="@id/submission_contact_step_1_body" />
+
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
+            </de.rki.coronawarnapp.ui.view.StepEntry>
+
+            <de.rki.coronawarnapp.ui.view.StepEntry
+                android:id="@+id/submission_contact_step_2"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                app:layout_constraintEnd_toStartOf="@+id/guideline_end"
+                app:layout_constraintStart_toStartOf="@+id/guideline_start"
+                app:layout_constraintTop_toBottomOf="@+id/submission_contact_step_1"
+                app:step_entry_final="true"
+                app:step_entry_icon="@drawable/ic_step_2">
+
+                <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="@string/submission_contact_step_2_body" />
+
+            </de.rki.coronawarnapp.ui.view.StepEntry>
+
+            <include layout="@layout/merge_guidelines_common" />
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+    </ScrollView>
+</layout>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml
index 926a1467e563568d9ecec687f23340faa7e4fc95..da52b909d66b53d276d5b92d9e94cd3017b94f25 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_content.xml
@@ -22,9 +22,6 @@
             style="@style/textTitle"
             android:layout_width="@dimen/match_constraint"
             android:layout_height="wrap_content"
-            android:layout_marginStart="@dimen/spacing_normal"
-            android:layout_marginTop="@dimen/spacing_normal"
-            android:layout_marginEnd="@dimen/spacing_normal"
             android:text="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentTitleText(testResult)}"
             app:layout_constraintEnd_toStartOf="@+id/submission_status_card_unregistered_icon"
             app:layout_constraintStart_toStartOf="parent"
@@ -32,36 +29,36 @@
 
         <TextView
             android:id="@+id/submission_status_card_content_subtitle"
-            android:layout_width="@dimen/submission_status_card_text_width"
-            android:layout_height="@dimen/match_constraint"
-            android:layout_marginTop="@dimen/spacing_normal"
-            android:layout_marginBottom="@dimen/spacing_tiny"
+            style="@style/textSubTitle"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginVertical="@dimen/spacing_tiny"
             android:text="@{FormatterSubmissionHelper.formatTestResultStatusText(testResult)}"
             android:textColor="@{FormatterSubmissionHelper.formatTestResultStatusColor(testResult)}"
             android:visibility="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentStatusTextVisible(testResult)}"
             app:layout_constraintBottom_toTopOf="@+id/submission_status_card_content_body"
-            app:layout_constraintStart_toStartOf="@+id/submission_status_card_content_title" />
+            app:layout_constraintEnd_toStartOf="@+id/submission_status_card_unregistered_icon"
+            app:layout_constraintStart_toStartOf="@+id/submission_status_card_content_title"
+            app:layout_constraintTop_toBottomOf="@+id/submission_status_card_content_title" />
 
         <TextView
             android:id="@+id/submission_status_card_content_body"
-            android:layout_width="@dimen/submission_status_card_text_width"
-            android:layout_height="@dimen/match_constraint"
-            android:layout_marginTop="@dimen/spacing_normal"
+            style="@style/textMultiline"
+            android:layout_width="@dimen/match_constraint"
             android:layout_marginBottom="@dimen/spacing_normal"
+            android:layout_height="wrap_content"
             android:text="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentBodyText(testResult)}"
             app:layout_constraintBottom_toTopOf="@+id/submission_status_card_content_button"
+            app:layout_constraintEnd_toStartOf="@+id/submission_status_card_unregistered_icon"
             app:layout_constraintStart_toStartOf="@+id/submission_status_card_content_title" />
 
         <Button
             android:id="@+id/submission_status_card_content_button"
             android:layout_width="@dimen/match_constraint"
             android:layout_height="wrap_content"
-            android:layout_marginHorizontal="@dimen/spacing_normal"
-            android:layout_marginVertical="@dimen/spacing_normal"
-            android:backgroundTint="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentButtonColor(testResult)}"
+            style="@style/buttonPrimary"
+            android:layout_marginTop="@dimen/spacing_normal"
             android:text="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentButtonText(testResult)}"
-            android:textColor="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentButtonTextColor(testResult)}"
-            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/submission_status_card_unregistered_icon" />
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml
index 25d7fc4a69ea4c589f9bde28e4f100fb5a605935..fa86d9e570a8e5856df3eed797b8d30232790c11 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_fetching.xml
@@ -11,11 +11,10 @@
         <TextView
             android:id="@+id/submission_status_card_fetching_title"
             style="@style/textTitle"
-            android:layout_width="@dimen/submission_status_card_text_width"
+            android:layout_width="@dimen/match_constraint"
             android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/spacing_normal"
-            android:layout_marginStart="@dimen/spacing_normal"
             android:text="@string/submission_status_card_title_fetching"
+            app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
@@ -31,23 +30,23 @@
 
         <TextView
             android:id="@+id/submission_status_card_fetching_body"
-            android:layout_width="@dimen/submission_status_card_fetching_body_width"
+            style="@style/textMultiline"
             android:layout_height="wrap_content"
             android:layout_marginStart="@dimen/spacing_normal"
+            android:layout_width="@dimen/match_constraint"
             android:text="@string/submission_status_card_body_fetching"
-            app:layout_constraintStart_toEndOf="@+id/submission_status_card_fetching_spinner"
             app:layout_constraintBottom_toBottomOf="@+id/submission_status_card_fetching_spinner"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@+id/submission_status_card_fetching_spinner"
             app:layout_constraintTop_toTopOf="@+id/submission_status_card_fetching_spinner" />
 
         <Button
             android:id="@+id/submission_status_card_fetching_button"
             style="@style/buttonLight"
             android:layout_height="wrap_content"
-            android:layout_marginHorizontal="@dimen/spacing_normal"
-            android:layout_marginVertical="@dimen/spacing_normal"
+            android:layout_marginTop="@dimen/spacing_normal"
             android:layout_width="@dimen/match_constraint"
             android:text="@string/submission_status_card_button_show_details"
-            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/submission_status_card_fetching_spinner" />
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15178a69e3f88483d792992676c47f9a53baed3d
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_positive.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <import type="de.rki.coronawarnapp.util.formatter.TestResult" />
+
+        <import type="de.rki.coronawarnapp.risk.RiskLevelConstants" />
+
+        <variable
+            name="registerDate"
+            type="java.util.Date" />
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/submission_status_card_positive"
+        style="@style/card"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/submission_status_card_positive_container"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <TextView
+                android:id="@+id/submission_status_card_positive_title"
+                style="@style/textTitle"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:text="@string/submission_status_card_positive_result_title"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <include
+                android:id="@+id/submission_status_card_positive_result_card"
+                layout="@layout/include_test_result_card"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_status_card_positive_title"
+                app:registerDate="@{registerDate}"
+                app:testResult="@{TestResult.POSITIVE}" />
+
+            <TextView
+                android:id="@+id/submission_status_card_positive_result_subtitle"
+                style="@style/textSubTitle"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:text="@string/submission_status_card_positive_result_subtitle"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_status_card_positive_result_card" />
+
+            <include
+                android:id="@+id/submission_status_card_positive_result_contagious"
+                layout="@layout/include_risk_details_behavior_row"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                app:body="@{@string/submission_status_card_positive_result_contagious}"
+                app:icon="@{@drawable/ic_risk_card_contact_increased}"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_status_card_positive_result_subtitle"
+                app:riskLevel="@{RiskLevelConstants.INCREASED_RISK}" />
+
+            <include
+                android:id="@+id/submission_status_card_positive_result_isolate"
+                layout="@layout/include_risk_details_behavior_row"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                app:body="@{@string/submission_status_card_positive_result_isolate}"
+                app:icon="@{@drawable/ic_risk_details_home}"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_status_card_positive_result_contagious"
+                app:riskLevel="@{RiskLevelConstants.INCREASED_RISK}" />
+
+            <include
+                android:id="@+id/submission_status_card_positive_result_share"
+                layout="@layout/include_risk_details_behavior_row"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                app:body="@{@string/submission_status_card_positive_result_share}"
+                app:icon="@{@drawable/ic_risk_details_share}"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_status_card_positive_result_isolate"
+                app:riskLevel="@{RiskLevelConstants.INCREASED_RISK}" />
+
+            <Button
+                android:id="@+id/submission_status_card_positive_result_show_button"
+                style="@style/buttonPrimary"
+                android:layout_width="@dimen/match_constraint"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="@dimen/spacing_normal"
+                android:text="@string/submission_status_card_positive_result_show_button"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@+id/submission_status_card_positive_result_share" />
+
+
+        </androidx.constraintlayout.widget.ConstraintLayout>
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml
index 99dc51e19a41681217f706e7d3fd386cd775b26b..57e9e70d645f487bb9f1559568af2f4f928b8e93 100644
--- a/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml
+++ b/Corona-Warn-App/src/main/res/layout/include_submission_status_card_unregistered.xml
@@ -11,35 +11,32 @@
         <TextView
             android:id="@+id/submission_status_card_unregistered_title"
             style="@style/textTitle"
-            android:layout_width="@dimen/submission_status_card_text_width"
+            android:layout_width="@dimen/match_constraint"
             android:layout_height="wrap_content"
-            android:layout_marginTop="@dimen/spacing_normal"
-            android:layout_marginStart="@dimen/spacing_normal"
             android:text="@string/submission_status_card_title_unregistered"
+            app:layout_constraintEnd_toStartOf="@+id/submission_status_card_unregistered_icon"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent" />
 
 
         <TextView
             android:id="@+id/submission_status_card_unregistered_body"
-            android:layout_width="@dimen/submission_status_card_text_width"
-            android:layout_height="@dimen/match_constraint"
-            android:layout_marginTop="@dimen/spacing_normal"
+            style="@style/textMultiline"
+            android:layout_width="@dimen/match_constraint"
             android:layout_marginBottom="@dimen/spacing_normal"
+            android:layout_height="wrap_content"
             android:text="@string/submission_status_card_body_unregistered"
             app:layout_constraintBottom_toTopOf="@+id/submission_status_card_unregistered_button"
+            app:layout_constraintEnd_toStartOf="@+id/submission_status_card_unregistered_icon"
             app:layout_constraintStart_toStartOf="@+id/submission_status_card_unregistered_title" />
 
         <Button
             android:id="@+id/submission_status_card_unregistered_button"
             android:layout_width="@dimen/match_constraint"
             android:layout_height="wrap_content"
-            android:layout_marginHorizontal="@dimen/spacing_normal"
-            android:layout_marginVertical="@dimen/spacing_normal"
-            android:backgroundTint="@color/tracingIconActive"
+            style="@style/buttonPrimary"
+            android:layout_marginTop="@dimen/spacing_normal"
             android:text="@string/submission_status_card_button_unregistered"
-            android:textColor="@color/colorLight"
-            app:layout_constraintBottom_toBottomOf="parent"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/submission_status_card_unregistered_icon" />
diff --git a/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml b/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7edd210a2ac052829934954cc7b67c6ac1fb8c51
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/include_tracing_status_card.xml
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <data>
+
+        <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" />
+
+        <import type="android.view.View" />
+
+        <variable
+            name="tracingViewModel"
+            type="de.rki.coronawarnapp.ui.viewmodel.TracingViewModel" />
+
+        <variable
+            name="icon"
+            type="android.graphics.drawable.Drawable" />
+
+        <variable
+            name="headline"
+            type="String" />
+
+        <variable
+            name="body"
+            type="String" />
+
+        <variable
+            name="buttonText"
+            type="String" />
+
+
+    </data>
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:id="@+id/tracing_status_card"
+        style="@style/cardTracing"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <androidx.constraintlayout.widget.ConstraintLayout
+            android:id="@+id/tracing_status_card_header"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent">
+
+            <TextView
+                android:id="@+id/tracing_status_card_header_headline"
+                style="@style/textLargeEmphasized"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_marginEnd="@dimen/spacing_small"
+                android:text="@{headline}"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toStartOf="@+id/tracing_status_card_header_icon"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toTopOf="parent" />
+
+            <ImageView
+                android:id="@+id/tracing_status_card_header_icon"
+                style="@style/iconTracingStatus"
+                android:layout_width="@dimen/icon_size_main_card_end"
+                android:layout_height="@dimen/icon_size_main_card_end"
+                android:importantForAccessibility="no"
+                android:src="@{icon}"
+                android:visibility="@{FormatterHelper.formatVisibilityIcon(icon)}"
+                app:layout_constraintBottom_toBottomOf="parent"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toEndOf="@+id/tracing_status_card_header_headline"
+                app:layout_constraintTop_toTopOf="parent" />
+        </androidx.constraintlayout.widget.ConstraintLayout>
+
+        <TextView
+            android:id="@+id/tracing_status_card_body"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/spacing_tiny"
+            android:text="@{body}"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tracing_status_card_header" />
+
+        <Button
+            android:id="@+id/tracing_status_card_button"
+            style="@style/buttonPrimary"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@dimen/spacing_normal"
+            android:text="@{buttonText}"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tracing_status_card_body" />
+    </androidx.constraintlayout.widget.ConstraintLayout>
+</layout>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/layout/view_step_entry.xml b/Corona-Warn-App/src/main/res/layout/view_step_entry.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bcde333ba9cd008322bad8be87fb41f63a123b07
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/view_step_entry.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<merge xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <ImageView
+            android:id="@+id/step_entry_icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:background="@drawable/ic_step_background"
+            android:src="@drawable/ic_step_1"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toTopOf="parent" />
+
+        <FrameLayout
+            android:id="@+id/step_entry_wrapper_children"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/spacing_small"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toEndOf="@id/step_entry_icon"
+            app:layout_constraintTop_toTopOf="parent">
+
+        </FrameLayout>
+
+        <View
+            android:id="@+id/step_entry_placeholder"
+            android:layout_width="@dimen/match_constraint"
+            android:layout_height="@dimen/spacing_large"
+            app:layout_constraintEnd_toEndOf="parent"
+            app:layout_constraintStart_toStartOf="@id/step_entry_icon"
+            app:layout_constraintTop_toBottomOf="@id/step_entry_wrapper_children" />
+
+        <View
+            android:id="@+id/step_entry_line"
+            android:layout_width="@dimen/test_result_step_progress_line_width"
+            android:layout_height="@dimen/match_constraint"
+            android:background="@color/colorGreyLight"
+            app:layout_constraintBottom_toBottomOf="@+id/step_entry_placeholder"
+            app:layout_constraintEnd_toEndOf="@id/step_entry_icon"
+            app:layout_constraintStart_toStartOf="@id/step_entry_icon"
+            app:layout_constraintTop_toBottomOf="@id/step_entry_icon" />
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+</merge>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml
index 79d7f72c4b7512dc65f6e01b12b7a8d342f169f0..34de99e14045e07dce22f1febf452d397a366a31 100644
--- a/Corona-Warn-App/src/main/res/navigation/nav_graph.xml
+++ b/Corona-Warn-App/src/main/res/navigation/nav_graph.xml
@@ -186,6 +186,9 @@
         <action
             android:id="@+id/action_submissionDispatcherFragment_to_submissionQRCodeScanFragment"
             app:destination="@id/submissionQRCodeScanFragment" />
+        <action
+            android:id="@+id/action_submissionDispatcherFragment_to_submissionContactFragment"
+            app:destination="@id/submissionContactFragment" />
     </fragment>
     <fragment
         android:id="@+id/submissionResultPositiveOtherWarningFragment"
@@ -289,4 +292,12 @@
             app:popUpTo="@id/mainFragment"
             app:popUpToInclusive="true" />
     </fragment>
+    <fragment
+        android:id="@+id/submissionContactFragment"
+        android:name="de.rki.coronawarnapp.ui.submission.SubmissionContactFragment"
+        android:label="SubmissionContactFragment">
+        <action
+            android:id="@+id/action_submissionContactFragment_to_submissionTanFragment"
+            app:destination="@id/submissionTanFragment" />
+    </fragment>
 </navigation>
diff --git a/Corona-Warn-App/src/main/res/values/attrs.xml b/Corona-Warn-App/src/main/res/values/attrs.xml
index 1219d8118bacb3c90fe4162f01a33e8d0c873872..afb0e6a41109408ff125496d3f02cac7ab5b06e2 100644
--- a/Corona-Warn-App/src/main/res/values/attrs.xml
+++ b/Corona-Warn-App/src/main/res/values/attrs.xml
@@ -7,4 +7,14 @@
         <attr name="onboarding_exchangeable_body" format="string" />
         <attr name="onboarding_exchangeable_body_notifications" format="string" />
     </declare-styleable> -->
+
+    <declare-styleable name="StepEntry">
+        <attr name="step_entry_icon" format="integer" />
+        <attr name="step_entry_final" format="boolean" />
+    </declare-styleable>
+
+    <declare-styleable name="SimpleStepEntry">
+        <attr name="simple_step_entry_title" format="string" />
+        <attr name="simple_step_entry_text" format="string" />
+    </declare-styleable>
 </resources>
\ No newline at end of file
diff --git a/Corona-Warn-App/src/main/res/values/dimens.xml b/Corona-Warn-App/src/main/res/values/dimens.xml
index 059bde7bdefa0953b46ec5dba80429ad2442d7d0..8ce610c0aef2f9885b4b56a4a15aa5a175a56720 100644
--- a/Corona-Warn-App/src/main/res/values/dimens.xml
+++ b/Corona-Warn-App/src/main/res/values/dimens.xml
@@ -15,7 +15,6 @@
     <!-- header height -->
     <dimen name="header">50dp</dimen>
 
-
     <!-- elevation -->
     <dimen name="elevation_strong">10dp</dimen>
     <dimen name="elevation_weak">4dp</dimen>
@@ -43,9 +42,6 @@
     <!-- card -->
     <dimen name="card_padding">@dimen/spacing_normal</dimen>
     <dimen name="card_divider">1dp</dimen>
-    <dimen name="submission_status_card_text_width">200dp</dimen>
-    <dimen name="submission_status_card_fetching_body_width">150dp</dimen>
-
 
     <!-- general -->
     <dimen name="radius_button">@dimen/spacing_tiny</dimen>
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index a8e6d18035bf47c1e1017cb9b93a09e275d5bc1b..7eea5ff9ec66620f609c8d9ba40fdb70c6945fd2 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -47,6 +47,9 @@
     <string name="preference_m_registration_token">
         <xliff:g id="preference">preference_m_registration_token</xliff:g>
     </string>
+    <string name="preference_device_pairing_successful_time">
+        <xliff:g id="preference">preference_device_pairing_successful_time</xliff:g>
+    </string>
     <string name="preference_initial_tracing_activation_time">
         <xliff:g id="preference">preference_initial_tracing_activation_time</xliff:g>
     </string>
@@ -84,10 +87,12 @@
     <!-- ####################################
                      Menu
     ###################################### -->
+    <!-- Todo remove 'final' comments once all text are finalized, strings flagged with final can still change however its unlikely  -->
+    <!-- Todo pluralize strings when necessary -->
+    <!-- Todo include date formats when necessary -->
     <string name="menu_help">Ãœberblick</string>
-    <string name="menu_information">App Informationen</string>
-    <string name="menu_settings">Einstellungen</string>
-    <string name="menu_share">Teilen Sie die App</string>
+    <string name="menu_information">App-Informationen</string> <!-- final -->
+    <string name="menu_settings">Einstellungen</string> <!-- final -->
 
     <!-- ####################################
                Notification (nt)
@@ -106,43 +111,43 @@
         <xliff:g id="notification_id">1</xliff:g>
     </string>
     <string name="notification_headline">Risk notification title</string>
-    <string name="notification_body">Risk notification content"</string>
+    <string name="notification_body">Es gibt Neuigkeiten von Ihrer Corona-Warn-App</string>
 
     <!-- ####################################
                     Cards
     ###################################### -->
 
     <!-- Generic - used in multiple cards -->
-    <string name="risk_card_body_contact">Bisher keine Risikobegegnung</string>
+    <string name="risk_card_body_contact">Bisher keine Risiko-Begegnungen</string> <!-- final -->
     <string name="risk_card_body_contact_value">%1$s Risikobegegnungen</string>
-    <string name="risk_card_body_saved_days">%1$s von 14 Tage protokolliert</string>
+    <string name="risk_card_body_saved_days">%1$s von 14 Tagen aktiv</string> <!-- final -->
     <string name="risk_card_body_not_yet_fetched">Kontakte wurden noch nicht überprüft.</string>
     <string name="risk_card_body_time_fetched">Aktualisiert: %1$s</string>
     <string name="risk_card_body_next_update">Nächste Aktualisierung in: %1$s</string>
-    <string name="risk_card_button_update">Aktualisieren</string>
+    <string name="risk_card_button_update">Aktualisieren</string> <!-- final -->
     <string name="risk_card_button_cooldown">Aktualisierung in %1$s</string>
-    <string name="risk_card_button_enable_tracing">Risikoermittlung einschalten</string>
-    <string name="risk_card_body_tracing_off">Schalten Sie die Risikoermittlung ein, um Ihr Risiko zu aktualisieren.</string>
+    <string name="risk_card_button_enable_tracing">Risiko-Ermittlung einschalten</string> <!-- final -->
+    <string name="risk_card_body_tracing_off">Aktivieren Sie die Risiko-Ermittlung, um Ihre heutige Risiko-Einschätzung zu berechnen.</string> <!-- final -->
 
     <!-- LOW_RISK -->
-    <string name="risk_card_low_risk_headline">Niedriges Risiko</string>
+    <string name="risk_card_low_risk_headline">Niedriges Risiko</string>  <!-- final -->
     <!-- INCREASED_RISK -->
-    <string name="risk_card_increased_risk_headline">Erhöhtes Risiko</string>
+    <string name="risk_card_increased_risk_headline">Erhöhtes Risiko</string> <!-- final -->
     <string name="risk_card_increased_risk_body_contact_last">%1$s Tage seit der letzten Begegnung</string>
     <!-- UNKNOWN_RISK -->
-    <string name="risk_card_unknown_risk_headline">Unbekanntes Risiko</string>
-    <string name="risk_card_unknown_risk_body">Da Sie die Risiko-Ermittlung noch nicht lange genug aktiviert haben, konnten wir für Sie kein Infektionsrisiko berechnen.</string>
+    <string name="risk_card_unknown_risk_headline">Unbekanntes Risiko</string>  <!-- final -->
+    <string name="risk_card_unknown_risk_body">Da Sie die Risiko-Ermittlung noch nicht lange genug aktiviert haben, konnten wir für Sie kein Infektionsrisiko berechnen.</string> <!-- final -->
     <!-- NO_CALCULATION_POSSIBLE -->
     <!-- TODO: no screens available -->
-    <string name="risk_card_no_calculation_possible_headline">Risikoermittlung gestoppt</string>
+    <string name="risk_card_no_calculation_possible_headline">Risiko-Ermittlung gestoppt</string> <!-- final -->
     <string name="risk_card_no_calculation_possible_body_saved_risk">Letzte Ermittlung:\n%1$s</string>
     <!-- OUTDATED_RISK-->
     <!-- TODO: no screens available -->
-    <string name="risk_card_outdated_risk_headline">Veraltetes Risiko</string>
-    <string name="risk_card_outdated_risk_body">Da Sie die Risiko-Ermittlung zu lange nicht aktiviert hatten, ist Ihr Infektionsrisiko veraltet. Bitte aktualisieren Sie Ihr Risiko. </string>
+    <string name="risk_card_outdated_risk_headline">Risiko-Ermittlung nicht möglich</string> <!-- final -->
+    <string name="risk_card_outdated_risk_body">Ihre Risiko-Berechnung konnte seit mehr als 24 Stunden nicht aktualisiert werden.</string> <!-- final -->
     <!-- LOADING -->
-    <string name="risk_card_loading_headline">Prüfung läuft</string>
-    <string name="risk_card_loading_body">Es werden aktuelle Daten heruntergeladen und geprüft. Dies kann mehrere Minuten dauern.</string>
+    <string name="risk_card_loading_headline">Prüfung läuft…</string> <!-- final -->
+    <string name="risk_card_loading_body">Es werden aktuelle Daten heruntergeladen und geprüft. Dies kann mehrere Minuten dauern.</string> <!-- final -->
     <!-- Test Result Card -->
     <string name="test_result_card_headline">Ihr Befund:</string>
     <string name="test_result_card_virus_name_text">SARS-CoV-2</string>
@@ -165,22 +170,27 @@
     <string name="submission_status_card_button_unregistered">Informieren &amp; mitmachen</string>
     <string name="submission_status_card_button_show_results">Ergebnis anzeigen</string>
     <string name="submission_status_card_button_show_details">Details anzeigen</string>
+    <string name="submission_status_card_positive_result_title">Positives Ergebnis</string>
+    <string name="submission_status_card_positive_result_subtitle">Bitte beachten Sie:</string>
+    <string name="submission_status_card_positive_result_show_button">Test-Ergebnis anzeigen</string>
+    <string name="submission_status_card_positive_result_contagious">@string/submission_done_contagious</string>
+    <string name="submission_status_card_positive_result_isolate">@string/submission_done_isolate</string>
+    <string name="submission_status_card_positive_result_share">Teilen Sie Ihre Zufallskennungen, damit andere gewarnt werden können.</string>
 
     <!-- ####################################
                     Main
     ###################################### -->
-    <string name="main_title">Ãœbersicht</string>
     <!-- About COVID-19 -->
-    <string name="main_about_headline">Häufige Fragen</string>
-    <string name="main_about_body">Finden Sie verlässliche Antworten und konkrete Informationen, wie Sie sich schützen und anderen helfen können.</string>
+    <string name="main_about_headline">Häufige Fragen</string> <!-- final -->
+    <string name="main_about_body">Hier finden Sie Antworten auf häufig gestellte Fragen rund um die Corona-Warn-App.</string> <!-- final -->
 
     <!-- ####################################
                    Main - Share
     ###################################### -->
-    <string name="main_share_title">Corona-Warn-App teilen</string>
-    <string name="main_share_headline">Gemeinsam Corona bekämpfen</string>
-    <string name="main_share_body">Je mehr Menschen mitmachen, desto schneller durchbrechen wir dir Infektionsketten. Laden Sie Familie, Freunde und Bekannte zum Download ein!</string>
-    <string name="main_share_button">Download-Link versenden</string>
+    <string name="main_share_title">Corona-Warn-App teilen</string>  <!-- final -->
+    <string name="main_share_headline">Gemeinsam Corona bekämpfen</string> <!-- final -->
+    <string name="main_share_body">Je mehr Menschen mitmachen, desto besser durchbrechen wir Infektionsketten. Laden Sie Familie, Freunde und Bekannte ein!</string> <!-- final -->
+    <string name="main_share_button">Download-Link versenden</string> <!-- final -->
     <string name="main_share_message">
         Erzähle es jedem!<xliff:g id="line_break">\n</xliff:g>
         <xliff:g id="hashtag">#</xliff:g>zusammenDieKurveAbflachen<xliff:g id="line_break">\n</xliff:g>
@@ -193,67 +203,64 @@
     <!-- ####################################
                Risk Details
     ###################################### -->
-    <string name="risk_details_headline_behavior">Verhalten Sie sich richtig</string>
-    <string name="risk_details_behavior_body_stay_home">Bleiben Sie zu Hause</string>
-    <string name="risk_details_behavior_body_avoid_contact">Vermeiden Sie sozialen Kontakt</string>
-    <string name="risk_details_behavior_body_contact_doctor">Für Fragen zu auftretenden Symptomen, Testmöglichkeiten und weiteren Absonderungsmaßnahmen wenden Sie sich bitte an:</string>
-    <string name="risk_details_behavior_body_wash_hands">Waschen Sie Ihre Hände</string>
-    <string name="risk_details_behavior_body_wear_mask">Tragen Sie eine Schutzmaske</string>
-    <string name="risk_details_behavior_body_stay_away">Halten Sie 2 Meter Abstand zu anderen Personen</string>
-    <string name="risk_details_behavior_body_cough_sneeze">Husten und Niesen Sie in Ihre Armbeuge</string>
-    <string name="risk_details_behavior_increased_body_1">- Ihren Hausartzt/Ihre Hausärtztin</string>
-    <string name="risk_details_behavior_increased_body_2">- Den Kassenärtzlichen Notdienst (Tel: 116117)</string>
-    <string name="risk_details_behavior_increased_body_3">- Ihr Gesundheitsamt</string>
-    <string name="risk_details_headline_infection_risk">Infektionsrisiko</string>
-    <string name="risk_details_body_infection_risk">So wird Ihr Risiko ermittelt</string>
+    <string name="risk_details_headline_behavior">Verhalten</string> <!-- final -->
+    <string name="risk_details_subtitle_behavior">So verhalten Sie sich richtig</string> <!-- final -->
+    <string name="risk_details_behavior_body_stay_home">Begeben Sie sich umgehend nach Hause bzw. bleiben Sie zu Hause.</string> <!-- final -->
+    <string name="risk_details_behavior_body_contact_doctor">Für Fragen zu auftretenden Symptomen, Testmöglichkeiten und weiteren Isolationsmaßnahmen wenden Sie sich bitte an eine der folgenden Stellen:</string> <!-- final -->
+    <string name="risk_details_behavior_body_wash_hands">Waschen Sie Ihre Hände regelmäßig.</string> <!-- final -->
+    <string name="risk_details_behavior_body_wear_mask">Tragen Sie einen Mundschutz bei Kontakt mit anderen Personen.</string> <!-- final -->
+    <string name="risk_details_behavior_body_stay_away">Halten Sie mindestens 1,5 Meter Abstand zu anderen Personen.</string> <!-- final -->
+    <string name="risk_details_behavior_body_cough_sneeze">Niesen oder husten Sie in die Armbeuge oder in ein Taschentuch.</string> <!-- final -->
+    <string name="risk_details_behavior_increased_body_1">- Ihre Hausärztin/Ihren Hausarzt</string> <!-- final -->
+    <string name="risk_details_behavior_increased_body_2">- Den Kassenärztlichen Bereitschaftsdienst unter der Telefonnummer: 116117</string> <!-- final -->
+    <string name="risk_details_behavior_increased_body_3">- Ihr Gesundheitsamt</string> <!-- final -->
+    <string name="risk_details_headline_infection_risk">Infektionsrisiko</string> <!-- final -->
+    <string name="risk_details_subtitle_infection_risk_past">So wurde Ihr Risiko ermittelt</string> <!-- final -->
+    <string name="risk_details_subtitle_infection_risk">So wird Ihr Risiko ermittelt</string> <!-- final -->
+    <string name="risk_details_information_body_unknown_risk">Da Sie die Risiko-Ermittlung noch nicht lange genug aktiviert haben, konnten wir für Sie kein Infektionsrisiko berechnen.</string> <!-- final -->
+    <string name="risk_details_information_body_outdated_risk">Ihre Risiko-Berechnung konnte seit mehr als 24 Stunden nicht aktualisiert werden.</string>
+    <string name="risk_details_information_body_low_risk">Sie haben ein niedriges Infektionsrisiko, da keine Begegnung mit nachweislich Coronapositiv getesteten Personen aufgezeichnet wurde oder sich Ihre Begegnung auf kurze Zeit und einen größeren Abstand beschränkt hat.</string> <!-- final -->
+    <string name="risk_details_information_body_increased_risk">Sie haben ein erhöhtes Infektionsrisiko, da Sie zuletzt vor %1$s Tagen mindestens einer- Corona positiv-getesteten Person über einen längeren Zeitraum und mit einem geringen Abstand begegnet sind.</string>
+    <string name="risk_details_information_body_notice">Das Infektionsrisiko wird anhand der Daten der Risiko-Ermittlung unter Berücksichtigung von Abstand und Dauer lokal auf Ihrem Smartphone berechnet. Ihr Infektionsrisiko ist für niemanden einsehbar und wird nicht weitergegeben.</string> <!-- final -->
     <string name="risk_details_button_update">@string/risk_card_button_update</string>
     <string name="risk_details_button_enable_tracing">@string/risk_card_button_enable_tracing</string>
-    <!-- TODO check if needed -->
-    <string name="main_government_headline">Gesundheitsamt anrufen</string>
 
     <!-- ####################################
               Onboarding
     ###################################### -->
-    <string name="onboarding_title">Onboarding</string>
     <string name="onboarding_image_description">IS MISSING</string>
-    <string name="onboarding_button_finish">Zustimmen</string>
+    <string name="onboarding_button_finish">Weiter</string> <!-- final -->
     <string name="onboarding_button_disable">Nicht aktivieren</string>
     <string name="onboarding_button_next">Weiter</string>
-    <string name="onboarding_button_start">Los Geht\'s</string>
+    <string name="onboarding_button_start">Los Geht\'s</string> <!-- final -->
     <string name="onboarding_button_back_description">Zurück</string>
     <!-- 1 Together -->
-    <string name="onboarding_headline">Zusammen gegen Corona</string>
-    <string name="onboarding_subtitle">@string/lorem_ipsum</string>
-    <string name="onboarding_body">@string/lorem_ipsum</string>
-    <string name="onboarding_body_emphasized">@string/lorem_ipsum</string>
+    <string name="onboarding_headline">Gemeinsam Corona bekämpfen</string> <!-- final -->
+    <string name="onboarding_subtitle">Mehr Schutz für Sie und uns alle. Mit der Corona-Warn-App durchbrechen wir Infektionsketten schneller.</string> <!-- final -->
+    <string name="onboarding_body">Machen Sie Ihr Smartphone zum Corona-Warn-System. Überblicken Sie Ihren Risikostatus und erfahren Sie, ob in den letzten 14 Tagen infizierte Personen in ihrer Nähe waren.</string> <!-- final -->
+    <string name="onboarding_body_emphasized">Die App merkt sich Begegnungen zwischen Menschen, indem ihre Smartphones verschlüsselte Zufallscodes austauschen. Und zwar ohne dabei auf persönliche Daten zuzugreifen.</string> <!-- final -->
     <!-- 2 Privacy -->
     <string name="onboarding_privacy_headline">Datenschutz</string>
     <string name="onboarding_privacy_subtitle">Verantwortliche Stelle im Sinne des Art. 4 Abs. 7 DSGVO: \n \n Robert Koch-Institut\nNordufer 20\n13353 Berlin</string>
     <string name="onboarding_privacy_body">@string/lorem_ipsum</string>
     <string name="onboarding_privacy_body_emphasized">@string/lorem_ipsum</string>
     <!-- 3 Permission -->
-    <string name="onboarding_tracing_headline">Wie Sie die Risikoerkennung ermöglichen</string>
-    <string name="onboarding_tracing_subtitle">@string/lorem_ipsum</string>
-    <string name="onboarding_tracing_body">@string/lorem_ipsum</string>
-    <string name="onboarding_tracing_body_emphasized">@string/lorem_ipsum</string>
+    <string name="onboarding_tracing_headline">Wie Sie die Risiko-Ermittlung ermöglichen</string> <!-- final -->
+    <string name="onboarding_tracing_subtitle">Um zu erkennen, ob für Sie ein Ansteckungsrisiko vorliegt, müssen Sie die Risiko-Ermittlung aktivieren.</string> <!-- final -->
+    <string name="onboarding_tracing_body">Die Risiko-Ermittlung funktioniert, indem Ihr Handy per Bluetooth verschlüsselte Zufallscodes anderer Nutzerinnen und Nutzer empfängt und Ihren eigenen Zufallscode an deren Smartphones weitergibt. Die Funktion lässt sich jederzeit wieder deaktivieren.</string> <!-- final -->
+    <string name="onboarding_tracing_body_emphasized">Die verschlüsselten Zufallscodes geben nur Auskunft über das Datum, die Dauer und die anhand der Signalstärke berechnete Entfernung zu Ihren Mitmenschen. Persönliche Daten wie Name, Adresse oder Aufenthaltsort werden zu keiner Zeit erfasst. Konkrete Rückschlüsse auf Personen sind nicht möglich.</string> <!-- final -->
     <string name="onboarding_tracing_dialog_headline">Berechtigung</string>
-    <string name="onboarding_tracing_dialog_body">Corona-Warn-App kann dadurch keine Benachrichtigungen zu COVID-19-Risikostatus versenden und empfangen. Sie können die Funktion jederzeit einschalten.</string>
-    <string name="onboarding_tracing_dialog_button_positive">Trotzdem weiter</string>
-    <string name="onboarding_tracing_dialog_button_negative">Zurück</string>
+    <string name="onboarding_tracing_dialog_body">Corona-Warn-App kann dadurch keine Benachrichtigungen zum COVID-19-Risikostatus versenden und empfangen. Sie können die Funktion jederzeit ausschalten.</string> <!-- final -->
+    <string name="onboarding_tracing_dialog_button_positive">Nicht aktivieren</string> <!-- final -->
+    <string name="onboarding_tracing_dialog_button_negative">Zurück</string> <!-- final -->
     <!-- 4 Tracing -->
-    <string name="onboarding_test_headline">Sie sind positiv getestet?</string>
-    <string name="onboarding_test_subtitle">@string/lorem_ipsum</string>
-    <string name="onboarding_test_body">@string/lorem_ipsum</string>
-    <string name="onboarding_test_body_emphasized">Umfeldaufnahme aktivieren</string>
+    <string name="onboarding_test_headline">Falls Sie positiv getestet werden …</string> <!-- final -->
+    <string name="onboarding_test_subtitle">… teilen Sie es bitte über die Corona-Warn-App mit. Freiwillig und sicher. Für die Gesundheit aller.</string> <!-- final -->
+    <string name="onboarding_test_body">Ihre Mitteilung wird zuverlässig verschlüsselt über einen sicheren Server weiterverarbeitet. Die Personen, deren verschlüsselte Zufallscodes Sie gesammelt haben, erhalten nun eine Warnung und Informationen darüber, wie sie weiter vorgehen sollen.</string> <!-- final -->
     <!-- 5 Datashare -->
-    <string name="onboarding_notifications_headline">Warnungen erhalten, Risiken kennen</string>
-    <string name="onboarding_notifications_subtitle">@string/lorem_ipsum</string>
-    <string name="onboarding_notifications_body">@string/lorem_ipsum</string>
-    <string name="onboarding_notifications_body_emphasized">@string/lorem_ipsum</string>
-    <string name="onboarding_notifications_dialog_headline">Erlaubnis</string>
-    <string name="onboarding_notifications_dialog_body">Die Benachrichtigungen für die Corona-Warn-App sind ausgestellt. Um Sie bezüglich Ihres Status immer auf dem neusten Stand zu halten wäre es hilfreich wenn sie ihre Benachrichtigungen aktivieren.</string>
-    <string name="onboarding_notifications_dialog_button_positive">Zu den Einstellungen</string>
-    <string name="onboarding_notifications_dialog_button_negative">Trotzdem weiter</string> <!--<string name="onboarding_privacy_body_emphasized_address"></string> -->
+    <string name="onboarding_notifications_headline">Warnungen erhalten, Risiken erkennen</string> <!-- final -->
+    <string name="onboarding_notifications_subtitle">Die App kann Sie automatisch über Ihren Risikostatus informieren und bei Neuinfektionen von Menschen, denen Sie begegnet sind, warnen. Erlauben Sie der App jetzt, Sie zu benachrichtigen.</string> <!-- final -->
+    <string name="onboarding_notifications_body">Auf diese Weise können Sie sich zum Schutz Ihrer Mitmenschen in Isolation begeben und nach entsprechender Abklärung testen lassen.</string> <!-- final -->
 
     <!-- ####################################
                   Settings
@@ -270,6 +277,19 @@
     <string name="settings_tracing_body_active_description">Risiko-Ermittlung ist aktiv. Eine verlässliche Risikoprüfung kann nur mit dauerhaft aktivierter Risiko-Ermittlung durchgeführt werden.</string>
     <string name="settings_tracing_body_inactive_description">Risiko-Ermittlung ist gestoppt. Eine verlässliche Risikoprüfung kann nur mit dauerhaft aktivierter Risiko-Ermittlung durchgeführt werden.</string>
     <string name="settings_tracing_body_text">@string/lorem_ipsum</string>
+    <string name="settings_tracing_status_active">Aktiv</string>
+    <string name="settings_tracing_status_inactive">Gestoppt</string>
+    <string name="settings_tracing_status_restricted">Eingeschränkt</string>
+    <string name="settings_tracing_body_connection_inactive">Keine Internetverbindung</string>
+    <string name="settings_tracing_body_bluetooth_inactive">Bluetooth deaktiviert</string>
+    <string name="settings_tracing_status_bluetooth_headline">Bluetooth aktivieren</string>
+    <string name="settings_tracing_status_bluetooth_body">Die Risiko-Ermittlung benötigt aktiviertes Bluetooth um Begegnungen zu protokollieren. Bitte aktivieren Sie Bluetooth in Ihren Einstellungen.</string>
+    <string name="settings_tracing_status_bluetooth_button">Einstellungen öffnen</string>
+    <string name="settings_tracing_status_connection_headline">Internetverbindung aktivieren</string>
+    <string name="settings_tracing_status_connection_body">Die Risiko-Ermittlung benötigt eine Internetverbindung um Risikobegegnungen berechnen zu können. Bitte aktivieren Sie WLAN oder Mobile Daten in Ihren Einstellungen.</string>
+    <string name="settings_tracing_status_connection_button">Einstellungen öffnen</string>
+    <string name="settings_tracing_status_body_active">Risiko-Ermittlung ist seit %1$s Tagen aktiv.</string>
+    <string name="settings_tracing_status_body_inactive">Die Risiko-Ermittlung umfasst %1$s von 14 Tagen.</string>
     <!-- Notifications -->
     <string name="settings_notifications_title">Mitteilungen</string>
     <string name="settings_notifications_headline_active">Möchten Sie Mitteilungen zu Ihrem Covid-19-Risikostatus aktivieren?</string>
@@ -293,19 +313,27 @@
     <!-- ####################################
                App Information
     ###################################### -->
-    <string name="information_title">Information</string>
-    <string name="information_about_title">Ãœber die App</string>
-    <string name="information_about_headline">Gemeinsam Corona bekämpfen</string>
-    <string name="information_privacy_title">Datenschutzinformation</string>
+    <string name="information_title">App-Informationen</string>  <!-- final -->
+    <string name="information_about_title">Ãœber die App</string>  <!-- final -->
+    <string name="information_about_headline">Gemeinsam Corona bekämpfen</string> <!-- final -->
+    <string name="information_about_body_emphasized">Das Robert Koch-Institut (RKI) als zentrale Einrichtung des Bundes im Bereich der Öffentlichen Gesundheit und als nationalesPublic-Health-Institut veröffentlicht die Corona-Warn-App für die gesamte Bundesregierung. Die App ist die digitale Ergänzung zu Abstandhalten, Hygiene und Alltagsmaske.</string> <!-- final -->
+    <string name="information_about_body">Wer sie nutzt, hilft, Infektionsketten schnell nachzuverfolgen und zu durchbrechen. Die App speichert dezentral – auf Ihrem Smartphone –  Begegnungen mit anderen.Sie werden informiert, wenn Sie Kontakt mit nachweislich infizierten Personen hatten.Ihre Privatsphärebleibt dabeibestens geschützt.</string> <!-- final -->
+    <string name="information_privacy_title">Datenschutzinformation</string> <!-- final -->
     <string name="information_privacy_headline">@string/lorem_ipsum</string>
-    <string name="information_terms_title">Nutzungsbedingungen</string>
+    <string name="information_terms_title">Nutzungsbedingungen</string> <!-- final -->
     <string name="information_terms_headline">@string/lorem_ipsum</string>
-    <string name="information_contact_title">Kontakt</string>
-    <string name="information_contact_headline">Wie können wir Ihnen helfen?</string>
-    <string name="information_help_title">Häufige Fragen</string>
-    <string name="information_technical_title">Rechtliche Hinweise</string>
+    <string name="information_contact_title">Technische Hotline</string> <!-- final -->
+    <string name="information_contact_headline">Wie können wir Ihnen helfen?</string> <!-- final -->
+    <string name="information_contact_body">Für technische Fragen rund um die Corona-Warn-App können Sie sich direkt an unsere  technische Hotline wenden.</string> <!-- final -->
+    <string name="information_contact_subtitle_phone">Technische Hotline:</string> <!-- final -->
+    <string name="information_contact_button_phone">+49 (0)800 7540001</string> <!-- final -->
+    <string name="information_contact_body_phone">Unser Kundenservice ist für Sie da.</string> <!-- final -->
+    <string name="information_contact_body_open">Unsere Öffnungszeiten:\nMo – Fr: 08:00 – 22:00 Uhr\nSa – So: 10:00 – 22:00 Uhr\nEs gelten die Preise Ihres Telefonanbieters.</string>
+    <string name="information_contact_body_other">Für gesundheitliche Fragen, wenden Sie sich bitte an Ihre Hausarztpraxis oder die Hotline des ärztlichen Bereitschaftsdienstes 116 117.</string> <!-- final -->
+    <string name="information_help_title">Häufige Fragen</string> <!-- final -->
+    <string name="information_technical_title">Rechtliche Hinweise</string> <!-- final -->
     <string name="information_technical_headline">FTP/SFTP/FTPS client uses libs</string>
-    <string name="information_legal_title">Impressum</string>
+    <string name="information_legal_title">Impressum</string> <!-- final -->
     <string name="information_legal_headline">Herausgeber</string>
     <string name="information_legal_body">SAP Deutschland SE &amp; Co. KG \n \nHauptsitz: \nSAP Deutschland SE &amp; Co. KG \nHasso-Plattner-Ring 7 \n69190 Walldorf </string>
 
@@ -369,7 +397,7 @@
     <string name="submission_test_result_invalid_remove_test_button">Test entfernen</string>
     <!-- Submission Tan -->
     <string name="submission_tan_title">TAN Eingabe</string>
-    <string name="submission_tan_body">Geben Sie bitte die TAN Nummer ihres Befundes ein. Die TAN ist 7-stellig und Groß- und Kleinschreibung muss nicht beachtet werden.</string>
+    <string name="submission_tan_body">Geben Sie bitte die TAN Nummer ihres Befundes ein. Die TAN ist 7-stellig.</string>
     <string name="submission_tan_button_text">Weiter</string>
     <!-- Submission Intro -->
     <string name="submission_intro_title">Wurden Sie getestet?</string>
@@ -410,7 +438,15 @@
     <string name="submission_done_contagious">Sie sind ansteckend.</string>
     <string name="submission_done_isolate">Bitte isolieren Sie sich von anderen Personen.</string>
     <string name="submission_done_button_done">Fertig</string>
-
+    <!-- Submission Contact -->
+    <string name="submission_contact_title">TAN anfragen</string>
+    <string name="submission_contact_headline">Info zum Ablauf:</string>
+    <string name="submission_contact_body">Wir teilen Ihnen Ihren TAN-Code gerne per Telefon mit.</string>
+    <string name="submission_contact_button_call">Anrufen</string>
+    <string name="submission_contact_button_enter">TAN-Code eingeben</string>
+    <string name="submission_contact_step_1_body"><![CDATA[Hotline anrufen & TAN erfragen:]]></string>
+    <string name="submission_contact_number">0800 7540002</string>
+    <string name="submission_contact_step_2_body">Test per TAN-Eingabe in der App registrieren</string>
 
     <!-- ####################################
            Just for Development
diff --git a/Corona-Warn-App/src/main/res/values/styles.xml b/Corona-Warn-App/src/main/res/values/styles.xml
index 90a64872f85541b920ec49d5cdea7fc3f6922e56..101aaced153d1ffdd5af895541c387a0471d3d6a 100644
--- a/Corona-Warn-App/src/main/res/values/styles.xml
+++ b/Corona-Warn-App/src/main/res/values/styles.xml
@@ -111,6 +111,12 @@
         <item name="android:backgroundTint">@color/card_light</item>
         <item name="android:elevation">@dimen/elevation_strong</item>
     </style>
+
+    <style name="cardTracing">
+        <item name="android:padding">@dimen/card_padding</item>
+        <item name="android:background">@drawable/card</item>
+        <item name="android:backgroundTint">@color/colorGreyLight</item>
+    </style>
     <!-- todo unify padding with main card - tbr -->
     <style name="cardSubmission">
         <item name="android:background">@drawable/card</item>
@@ -189,6 +195,10 @@
         <item name="android:tint">@color/stableIconColor</item>
     </style>
 
+    <style name="iconTracingStatus">
+        <item name="android:tint">@color/colorPrimary</item>
+    </style>
+
     <!-- ####################################
           Progress Bar
     ###################################### -->
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTest.kt
new file mode 100644
index 0000000000000000000000000000000000000000..936221f8158ce1435c2ec2790eebfc722fc45242
--- /dev/null
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/risk/RiskLevelTest.kt
@@ -0,0 +1,80 @@
+package de.rki.coronawarnapp.risk
+
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+class RiskLevelTest {
+
+    @Test
+    fun testRiskLevelChangedFromHighToHigh() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.INCREASED_RISK,
+            RiskLevel.INCREASED_RISK
+        )
+        assertFalse(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromLowToLow() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.UNKNOWN_RISK_INITIAL,
+            RiskLevel.LOW_LEVEL_RISK
+        )
+        assertFalse(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromLowToHigh() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.UNKNOWN_RISK_INITIAL,
+            RiskLevel.INCREASED_RISK
+        )
+        assertTrue(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromHighToLow() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.INCREASED_RISK,
+            RiskLevel.UNKNOWN_RISK_INITIAL
+        )
+        assertTrue(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromUndeterminedToLow() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.UNDETERMINED,
+            RiskLevel.UNKNOWN_RISK_INITIAL
+        )
+        assertFalse(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromUndeterminedToHigh() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.UNDETERMINED,
+            RiskLevel.INCREASED_RISK
+        )
+        assertTrue(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromLowToUndetermined() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.UNKNOWN_RISK_INITIAL,
+            RiskLevel.UNDETERMINED
+        )
+        assertFalse(riskLevelHasChanged)
+    }
+
+    @Test
+    fun testRiskLevelChangedFromHighToUndetermined() {
+        val riskLevelHasChanged = RiskLevel.riskLevelChangedBetweenLowAndHigh(
+            RiskLevel.INCREASED_RISK,
+            RiskLevel.UNDETERMINED
+        )
+        assertTrue(riskLevelHasChanged)
+    }
+}
diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RiskLevelTransactionTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RiskLevelTransactionTest.kt
index f34ab80e2844b8bb50444ab5e5acbd255734a952..0b7d19b4f90010c6f6d34f67708fea2ac1af2171 100644
--- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RiskLevelTransactionTest.kt
+++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/transaction/RiskLevelTransactionTest.kt
@@ -2,6 +2,7 @@ package de.rki.coronawarnapp.transaction
 
 import com.google.android.gms.nearby.exposurenotification.ExposureSummary
 import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient
+import de.rki.coronawarnapp.risk.RiskLevel
 import de.rki.coronawarnapp.risk.RiskLevel.INCREASED_RISK
 import de.rki.coronawarnapp.risk.RiskLevel.LOW_LEVEL_RISK
 import de.rki.coronawarnapp.risk.RiskLevel.NO_CALCULATION_POSSIBLE_TRACING_OFF
@@ -44,16 +45,14 @@ class RiskLevelTransactionTest {
         mockkObject(RiskLevelTransaction)
         mockkObject(TimeVariables)
         mockkObject(ExposureSummaryRepository.Companion)
+        mockkObject(RiskLevel.Companion)
 
         every { ExposureSummaryRepository.getExposureSummaryRepository() } returns esRepositoryMock
 
         every { RiskLevelRepository.getLastCalculatedScore() } returns UNDETERMINED
 
-        every { RiskLevelRepository.setRiskLevelScore(NO_CALCULATION_POSSIBLE_TRACING_OFF) } just Runs
-        every { RiskLevelRepository.setRiskLevelScore(UNKNOWN_RISK_OUTDATED_RESULTS) } just Runs
-        every { RiskLevelRepository.setRiskLevelScore(INCREASED_RISK) } just Runs
-        every { RiskLevelRepository.setRiskLevelScore(UNKNOWN_RISK_INITIAL) } just Runs
-        every { RiskLevelRepository.setRiskLevelScore(LOW_LEVEL_RISK) } just Runs
+        every { RiskLevelRepository.setRiskLevelScore(any()) } just Runs
+        every { RiskLevel.riskLevelChangedBetweenLowAndHigh(any(), any()) } returns false
     }
 
     /** Test case for [NO_CALCULATION_POSSIBLE_TRACING_OFF] */
@@ -298,7 +297,7 @@ class RiskLevelTransactionTest {
         every { TimeVariables.getLastTimeDiagnosisKeysFromServerFetch() } returns System.currentTimeMillis()
             .minus(TimeUnit.MINUTES.toMillis(30))
 
-        // teh active tracing duration is above the threshold
+        // the active tracing duration is above the threshold
         every { TimeVariables.getTimeActiveTracingDuration() } returns twoHoursAboveMinActiveTracingDuration
 
         coEvery { RiskScoreClassificationService.asyncRetrieveRiskScoreClassification() } returns testRiskScoreClassification
diff --git a/README.md b/README.md
index 1874a40087171fa914a9e2b4a3d327c95f9b3694..af2f5f7d82e7730c5ab80f021fe13737ee8d4afe 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,7 @@
 
 <p align="center">
   <a href="#development">Development</a> •
-  <a href="#architecture--documentation">Documenation</a> •
+  <a href="#architecture--documentation">Documentation</a> •
   <a href="#how-to-contribute">Contribute</a> •
   <a href="#support--feedback">Support</a> •
   <a href="https://github.com/corona-warn-app/cwa-app-android/releases">Changelog</a> •
@@ -27,18 +27,20 @@ The goal of this project is to develop the official Corona-Warn-App for Germany
 * [3 UI](https://github.com/corona-warn-app/cwa-app-android/wiki/3-UI)
 * [4 Exposure Notification Google API](https://github.com/corona-warn-app/cwa-app-android/wiki/4-Exposure-Notification-Google-API)
 * [5 Packages](https://github.com/corona-warn-app/cwa-app-android/wiki/5-Packages)
-    
+
 ## Known Issues
 
-* The Exposure Notification API is gonna block you from successfully testing the Application unless you are whitelisted inside GMS.
-* The Submission Flow is currently not working inside the Test Fragment and is heavily WIP
-* The Exception Handler may not include every exception and thus some Toasts (temporary) might not show the error or cause crashes
+* The Exposure Notification API is going to block you from successfully testing the Application unless you are whitelisted inside GMS.
+* The Submission Flow is currently not working inside the Test Fragment and is heavily WIP.
+* The Exception Handler is heavily WIP and may not include every exception and thus some Toasts (temporary) might not show the error or cause crashes, this also applies to error handling in general.
 * The Storage is currently based on Encrypted Shared Preferences and SQL Cipher (SQLite) - this could change in the future
 * The App could crash, it is generally heavily WIP. We do not guarantee stability right now.
 * Test Coverage is generally low and needs to be improved. We appreciate your help here!
 * In General every TODO can be regarded as an issue. You are free to tackle the TODO's anytime!
 * We are aware of the Play Store Limitations of GMS.
-* Without your own server instance (e.g. a local docker setup), you will not be able to test the Application. For help, please refer to the [server implementation](https://github.com/corona-warn-app/cwa-server)
+* Without your own server instance (e.g. a local Docker setup), you will not be able to test the Application. For help, please refer to the [server implementation](https://github.com/corona-warn-app/cwa-server).
+* Strings in general are WIP, the base language is German, the English translation will be provided by SAP.
+* Application design is WIP (e.g. colors, fonts, screen layout) and will be provided once it is final.
 
 ## Architecture & Documentation
 
diff --git a/build.gradle b/build.gradle
index 3c94bf20e6abfcadd117070cfe73683da8c87097..af42440199669815f3e95d04508be2e3bf37f501 100644
--- a/build.gradle
+++ b/build.gradle
@@ -47,6 +47,7 @@ subprojects {
     ktlint {
         debug = true
         ignoreFailures = false
+        coloredOutput = false
     }
 }
 
diff --git a/docs/architecture-overview.md b/docs/architecture-overview.md
index 4d5d2dea37a3b8ede32614e07537384899a810a8..35a8c106789ddbd561676bc62e32698c49e247fb 100644
--- a/docs/architecture-overview.md
+++ b/docs/architecture-overview.md
@@ -20,20 +20,20 @@ The key functionality of the CWA-Client is divided into the following pillars:
 The Exposure Tracing Management component uses the native implementation of the Exposure Notification Framework provided by Google and Apple to activate, deactivate or check the status of the tracing functionality. If exposure tracing is activated by the user the activation-status of needed technical services (e.g. Bluetooth) is verified as well. To calculate the Exposure Risk Level of the user the active tracing time is considered. As a result initial tracing activation timestamp as well as the time were tracing was deactivated during the last 14 days is persisted.
 
 ### Exposure Risk Level Calculation
-The Exposure Risk Level Calculation is implemented using the native implementations of Google and Apple. To use the API's with the needed data the client loads the available DiagnosisKeys for the calculation time range of 14 days from the [CWA-Distribution service](https://github.com/corona-warn-app/cwa-server/blob/master/docs/architecture-overview.md). To reduce the network footprint a local DiagnosisKey cache is used. With the diagnosisKeys the client passes the fresh downloaded exposure risk calculation configuration to the API of the mobile operation system. Finally the exposure risk level of the user is selected using the matched exposure risk level range for the maximum exposure risk happened in the last 14 days. The calculated exposure risk level and the exposure risk summary (maximumRiskScore, daysSinceLastExposure and matchedKeyCount) together with the calculation timestamp are stored on the client to allow the user the access to his latest calculation results when he is offline. The exposure risk level calculation is implemented as background online-only functionality ensuring that the latest diagnosisKeys as well as the latest configuration are used. If a risk level change happened during background processing a local notification is raised. For configuration and error scenarios during offline hours an assignment to error risk levels is implemented.
+The Exposure Risk Level Calculation is implemented using the native implementations of Google and Apple. To use the APIs with the needed data the client loads the available DiagnosisKeys for the calculation time range of 14 days from the [CWA-Distribution service](https://github.com/corona-warn-app/cwa-server/blob/master/docs/architecture-overview.md). To reduce the network footprint a local DiagnosisKey cache is used. With the diagnosisKeys the client passes the fresh downloaded exposure risk calculation configuration to the API of the mobile operation system. Finally the exposure risk level of the user is selected using the matched exposure risk level range for the maximum exposure risk happened in the last 14 days. The calculated exposure risk level and the exposure risk summary (maximumRiskScore, daysSinceLastExposure and matchedKeyCount) together with the calculation timestamp are stored on the client to allow the user the access to his latest calculation results when he is offline. The exposure risk level calculation is implemented as background online-only functionality ensuring that the latest diagnosisKeys as well as the latest configuration are used. If a risk level change happened during background processing a local notification is raised. For configuration and error scenarios during offline hours an assignment to error risk levels is implemented.
 
 ### Test Result Access
 The Test Result Access component implements the HTTP choreography provided by the [CWA-Verification service](https://github.com/corona-warn-app/cwa-verification-server/blob/master/docs/architecture-overview.md). Using the testGUID (scanned by a QR-Code) or the teleTAN (manually entered) the client receives a registration token which identifies a long term session. In the testGUID variant the client accesses the test result as online-only functionality. This ensures that the latest test data is shown and only the minimum needed data is stored on the client. To minimize the data footprint shared with other push technology server side infrastructures a periodic polling mechanism between client and CWA-Verification service checks in the background if a test result is available and informs the user via a local notification. In the teleTAN scenario no test result is retrieved using the registrationToken since the user is already known as COVID-19 positive.
 
 ### Diagnosis Key Submission
-Once a user is tested positive the Diagnosis Key Submission component can be used. The software component uses the persisted registrationToken to access a Submission-TAN from the [CWA-Verification service](https://github.com/corona-warn-app/cwa-verification-server/blob/master/docs/architecture-overview.md). After accessing the Submission-TAN the available TemporaryExposureKeys are retrieved as DiagnosisKey by the corresponding mobile OS API's. Every TemporaryExposureKey is enriched with the TransmissionRiskDefaultParameter fitting to the key creation day. The latest TransmissionRiskDefaultParameters are accessed by the [CWA-Distribution service](https://github.com/corona-warn-app/cwa-verification-server/blob/master/docs/architecture-overview.md). To allow in the future the introduction of subsequent TemporaryExposureKey submissions with delta semantics to the previous submission the timestamp of the last successful diagnosisKey submission is persisted.
+Once a user is tested positive the Diagnosis Key Submission component can be used. The software component uses the persisted registrationToken to access a Submission-TAN from the [CWA-Verification service](https://github.com/corona-warn-app/cwa-verification-server/blob/master/docs/architecture-overview.md). After accessing the Submission-TAN the available TemporaryExposureKeys are retrieved as DiagnosisKey by the corresponding mobile OS APIs. Every TemporaryExposureKey is enriched with the TransmissionRiskDefaultParameter fitting to the key creation day. The latest TransmissionRiskDefaultParameters are accessed by the [CWA-Distribution service](https://github.com/corona-warn-app/cwa-verification-server/blob/master/docs/architecture-overview.md). To allow in the future the introduction of subsequent TemporaryExposureKey submissions with delta semantics to the previous submission the timestamp of the last successful diagnosisKey submission is persisted.
 
 ## Libraries
 
 ### Google Exposure Notification
 [Link to Google's page](https://www.google.com/covid19/exposurenotifications/)
 
-### ZXing Embeded
+### ZXing Embedded
 Barcode scanning library by https://journeyapps.com/ based on ZXing decoder.
 
 This library is being used for embedded QR code scanning process during TAN submission to help end users of the application quickly submit their SARS-CoV-2 results without installing additional scanning software.
@@ -93,7 +93,7 @@ Databinding is the final component to connect the various view types and viewmod
 ## Storage and Encryption
 
 ### Database
-The [Room Persistence Library](https://developer.android.com/topic/libraries/architecture/room) is used to store Exposure Summaries retrieved from the Exposure Notification API. These are used to calculate risks levels in accordance to specifications provided by the Robert Koch-Institut. Also we use it as a local persistance library for various complex data structures, e.g. cached date intervals or a map to our downloaded key files. The Room Library uses SQLite by default.
+The [Room Persistence Library](https://developer.android.com/topic/libraries/architecture/room) is used to store Exposure Summaries retrieved from the Exposure Notification API. These are used to calculate risks levels in accordance to specifications provided by the Robert Koch-Institut. Also we use it as a local persistence library for various complex data structures, e.g. cached date intervals or a map to our downloaded key files. The Room Library uses SQLite by default.
 
 [SQLCipher](https://www.zetetic.net/sqlcipher/) is used to encrypt the database. Thus a key is initialised for the database access the first time we access it. The AppDatabase stores the key inside the shared preferences, which are themselves encrypted and bound to the master key from the android key store. On application reset (in the settings), the complete database is reinitialised. The password is randomly generated and is not used outside the storage package for accessing the data.
 
@@ -116,7 +116,7 @@ Concrete Data Objects:
 * database password
 * flag to check if we can submit diagnosis keys
 * the number of successful submissions
-* a flag that stores wether notifications are enabled
+* a flag that stores whether notifications are enabled
 * the token used for accessing the exposure summaries
 * the last time diagnosis keys were retrieved manually
 * the last time diagnosis keys were fetched from the server
diff --git a/docs/images/Architecture_Overview_v1.svg b/docs/images/Architecture_Overview_v1.svg
index dbf6286fa8e129c22cad2ee9ec6be85d0b1955d5..20995f1ca3b9a29fa9c4140ef46e91796503dd40 100755
--- a/docs/images/Architecture_Overview_v1.svg
+++ b/docs/images/Architecture_Overview_v1.svg
@@ -906,7 +906,7 @@
 						x="27.59" dy="1.2em" class="st5">Key Access</tspan></text>		</g>
 		<g id="shape2793-130" v:mID="2793" v:groupContext="shape" transform="translate(-21.1295,334.302) rotate(-90)">
 			<title>vert/hor (rw) access.2793</title>
-			<desc>Exposure Risk Calculation (Configuration &#38; positve DiagnosisK...</desc>
+			<desc>Exposure Risk Calculation (Configuration &#38; positive DiagnosisK...</desc>
 			<v:custProps>
 				<v:cp v:nameU="FMCType" v:lbl="Type" v:type="0" v:format="@" v:invis="true" v:langID="1031" v:val="VT4(connection)"/>
 			</v:custProps>
@@ -925,7 +925,7 @@
 			<path d="M0 640.14 L-73.99 640.14" class="st19"/>
 			<text x="603.57" y="14.95" transform="rotate(90)" class="st18" v:langID="1031"><v:paragraph v:horizAlign="2"/><v:tabList/>Exposure<v:newlineChar/><tspan
 						x="580.01" dy="1.2em" class="st5">Risk Calculation<v:newlineChar/></tspan><tspan x="494.19" dy="1.2em"
-						class="st5">(</tspan>Configuration &#38; positve DiagnosisKeys)</text>		</g>
+						class="st5">(</tspan>Configuration &#38; positive DiagnosisKeys)</text>		</g>
 		<g id="shape2798-139" v:mID="2798" v:groupContext="shape" transform="translate(546.369,-338.964)">
 			<title>storage</title>
 			<desc>DiagnosisKeyCache</desc>