diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt
index bc08e9d60a4b95f3d7a5ae90c1c3e1a7dcaca571..3c2da3aa538b007d7881ed8f4e521e02460f50af 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragment.kt
@@ -46,14 +46,13 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
         vm.tracingSettingsState.observe2(this) { state ->
             binding.settingsTracingState = state
 
-            binding.settingsTracingSwitchRow.settingsSwitchRow.apply {
+            binding.switchRow.apply {
                 when (state) {
                     TracingSettingsState.BluetoothDisabled,
                     TracingSettingsState.LocationDisabled -> setOnClickListener(null)
                     TracingSettingsState.TracingInactive,
                     TracingSettingsState.TracingActive -> setOnClickListener {
-                        val switch = binding.settingsTracingSwitchRow.settingsSwitchRowSwitch
-                        onTracingToggled(!switch.isChecked)
+                        onTracingToggled(!binding.switchRow.isChecked)
                     }
                 }
             }
@@ -73,7 +72,7 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
         }
 
         vm.isTracingSwitchChecked.observe2(this) { checked ->
-            binding.settingsTracingSwitchRow.settingsSwitchRowSwitch.isChecked = checked
+            binding.switchRow.setChecked(checked)
         }
 
         vm.ensErrorEvents.observe2(this) { error ->
@@ -98,12 +97,6 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
             popBackStack()
         }
 
-        val switch = binding.settingsTracingSwitchRow.settingsSwitchRowSwitch
-        switch.setOnCheckedChangeListener { view, isChecked ->
-            if (!view.isPressed) return@setOnCheckedChangeListener
-            onTracingToggled(isChecked)
-        }
-
         val bluetooth = binding.settingsTracingStatusBluetooth.tracingStatusCardButton
         bluetooth.setOnClickListener {
             ExternalActionHelper.toMainSettings(requireContext())
@@ -121,7 +114,10 @@ class SettingsTracingFragment : Fragment(R.layout.fragment_settings_tracing), Au
     }
 
     private fun onTracingToggled(isChecked: Boolean) {
-        vm.onTracingToggled(isChecked)
+        if (isChecked)
+            vm.turnTracingOn()
+        else
+            vm.turnTracingOff()
     }
 
     private fun navigateToInteroperability() {
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt
index d8eedf1c334362173e74a94fbc781f09acff7a8b..3ec86a0a71c21b36e1b2abb6f63d27f99f56b2ef 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/SettingsTracingFragmentViewModel.kt
@@ -104,19 +104,9 @@ class SettingsTracingFragmentViewModel @AssistedInject constructor(
             }
         )
 
-    fun onTracingToggled(isChecked: Boolean) {
+    fun turnTracingOn() {
         try {
-            if (isChecked) {
-                tracingPermissionHelper.startTracing()
-            } else {
-                isTracingSwitchChecked.postValue(false)
-                launch {
-                    if (InternalExposureNotificationClient.asyncIsEnabled()) {
-                        InternalExposureNotificationClient.asyncStop()
-                        exposureWindowRiskWorkScheduler.setPeriodicRiskCalculation(enabled = false)
-                    }
-                }
-            }
+            tracingPermissionHelper.startTracing()
         } catch (exception: Exception) {
             exception.report(
                 ExceptionCategory.EXPOSURENOTIFICATION,
@@ -126,6 +116,24 @@ class SettingsTracingFragmentViewModel @AssistedInject constructor(
         }
     }
 
+    fun turnTracingOff() {
+        isTracingSwitchChecked.postValue(false)
+        launch {
+            try {
+                if (InternalExposureNotificationClient.asyncIsEnabled()) {
+                    InternalExposureNotificationClient.asyncStop()
+                    exposureWindowRiskWorkScheduler.setPeriodicRiskCalculation(enabled = false)
+                }
+            } catch (exception: Exception) {
+                exception.report(
+                    ExceptionCategory.EXPOSURENOTIFICATION,
+                    SettingsTracingFragment.TAG,
+                    null
+                )
+            }
+        }
+    }
+
     fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
         tracingPermissionHelper.handleActivityResult(requestCode, resultCode, data)
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt
index 9c0d4b5d188f42f20294cd4dea86f2c3a11c44f0..1613ba258ef82499d699259d0592dab2ea57f958 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/analytics/SettingsPrivacyPreservingAnalyticsFragment.kt
@@ -29,7 +29,7 @@ class SettingsPrivacyPreservingAnalyticsFragment :
         super.onViewCreated(view, savedInstanceState)
 
         binding.apply {
-            settingsPpaHeader.headerButtonBack.buttonIcon.setOnClickListener {
+            settingsPpaHeader.setNavigationOnClickListener {
                 popBackStack()
             }
 
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt
index 38572c8ceb7966ed2fc29bd74e82239049356488..bd9eac9b26b758bca23ed18cc867bd19a15fc84b 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsFragment.kt
@@ -6,10 +6,10 @@ import android.view.accessibility.AccessibilityEvent
 import androidx.fragment.app.Fragment
 import de.rki.coronawarnapp.R
 import de.rki.coronawarnapp.databinding.FragmentSettingsNotificationsBinding
-import de.rki.coronawarnapp.ui.main.MainActivity
 import de.rki.coronawarnapp.util.ExternalActionHelper
 import de.rki.coronawarnapp.util.di.AutoInject
 import de.rki.coronawarnapp.util.ui.observe2
+import de.rki.coronawarnapp.util.ui.popBackStack
 import de.rki.coronawarnapp.util.ui.viewBindingLazy
 import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider
 import de.rki.coronawarnapp.util.viewmodel.cwaViewModels
@@ -43,49 +43,16 @@ class NotificationSettingsFragment :
     }
 
     private fun setButtonOnClickListener() {
-        // Notifications about risk status
-        val updateRiskNotificationSwitch =
-            binding.settingsSwitchRowNotificationsRisk.settingsSwitchRowSwitch
-        // Additional click target to toggle switch
-        val updateRiskNotificationRow =
-            binding.settingsSwitchRowNotificationsRisk.settingsSwitchRow
-        // Notifications about test status
-        val updateTestNotificationSwitch =
-            binding.settingsSwitchRowNotificationsTest.settingsSwitchRowSwitch
-        // Additional click target to toggle switch
-        val updateTestNotificationRow =
-            binding.settingsSwitchRowNotificationsTest.settingsSwitchRow
-        // Settings
-        val settingsRow = binding.settingsNotificationsCard.tracingStatusCardButton
-        val goBack =
-            binding.settingsNotificationsHeader.headerButtonBack.buttonIcon
-        // Update Risk
-        updateRiskNotificationSwitch.setOnCheckedChangeListener { view, _ ->
-            // Make sure that listener is called by user interaction
-            if (!view.isPressed) return@setOnCheckedChangeListener
-
+        binding.settingsSwitchRowNotificationsRisk.setOnClickListener {
             vm.toggleNotificationsRiskEnabled()
         }
-        // Additional click target to toggle switch
-        updateRiskNotificationRow.setOnClickListener {
-            if (updateRiskNotificationRow.isEnabled) vm.toggleNotificationsRiskEnabled()
-        }
-        // Update Test
-        updateTestNotificationSwitch.setOnCheckedChangeListener { view, _ ->
-            // Make sure that listener is called by user interaction
-            if (!view.isPressed) return@setOnCheckedChangeListener
-
+        binding.settingsSwitchRowNotificationsTest.setOnClickListener {
             vm.toggleNotificationsTestEnabled()
         }
-        // Additional click target to toggle switch
-        updateTestNotificationRow.setOnClickListener {
-            if (updateTestNotificationRow.isEnabled) vm.toggleNotificationsTestEnabled()
-        }
-        goBack.setOnClickListener {
-            (activity as MainActivity).goBack()
+        binding.settingsNotificationsHeader.setNavigationOnClickListener {
+            popBackStack()
         }
-        // System Settings
-        settingsRow.setOnClickListener {
+        binding.settingsNotificationsCard.tracingStatusCardButton.setOnClickListener {
             ExternalActionHelper.toNotifications(requireContext())
         }
     }
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt
index 093eddf09783b70c5be5db58d9b7e09a2fc7687b..4a7463b4d99504fe70f1d397840088db8efb1816 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/yourconsent/SubmissionYourConsentFragment.kt
@@ -37,13 +37,15 @@ class SubmissionYourConsentFragment : Fragment(R.layout.fragment_submission_your
         super.onViewCreated(view, savedInstanceState)
 
         vm.consent.observe2(this) {
-            binding.submissionYourConsentSwitch.status = it
-            binding.submissionYourConsentSwitch.statusText = getString(
-                if (it) {
-                    R.string.submission_your_consent_switch_status_on
-                } else {
-                    R.string.submission_your_consent_switch_status_off
-                }
+            binding.submissionYourConsentSwitch.setChecked(it)
+            binding.submissionYourConsentSwitch.setSubtitle(
+                getString(
+                    if (it) {
+                        R.string.submission_your_consent_switch_status_on
+                    } else {
+                        R.string.submission_your_consent_switch_status_off
+                    }
+                )
             )
         }
 
@@ -63,11 +65,7 @@ class SubmissionYourConsentFragment : Fragment(R.layout.fragment_submission_your
 
         binding.apply {
             submissionYourConsentTitle.headerButtonBack.buttonIcon.setOnClickListener { vm.goBack() }
-            submissionYourConsentSwitch.settingsSwitchRowSwitch.setOnCheckedChangeListener { view, _ ->
-                if (!view.isPressed) return@setOnCheckedChangeListener
-                vm.switchConsent()
-            }
-            submissionYourConsentSwitch.settingsSwitchRow.setOnClickListener { vm.switchConsent() }
+            submissionYourConsentSwitch.setOnClickListener { vm.switchConsent() }
             submissionYourConsentAgreementDetailsText.setOnClickListener { vm.goLegal() }
 
             submissionYourConsentAgreementShareSymptomsText.setText(
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ui/views/MoreInformationView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/MoreInformationView.kt
similarity index 99%
rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ui/views/MoreInformationView.kt
rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/MoreInformationView.kt
index 10871bb410845252a2a70bf8d28b8c198583ce51..89c4cafbdd1fce3d8a208424517f2b3b29e67536 100644
--- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ui/views/MoreInformationView.kt
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/MoreInformationView.kt
@@ -1,4 +1,4 @@
-package de.rki.coronawarnapp.util.ui.views
+package de.rki.coronawarnapp.ui.view
 
 import android.content.Context
 import android.util.AttributeSet
diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SwitchRowView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SwitchRowView.kt
new file mode 100644
index 0000000000000000000000000000000000000000..901d0b0705b8a04a4539ec335c90f50c89dbd63e
--- /dev/null
+++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/SwitchRowView.kt
@@ -0,0 +1,43 @@
+package de.rki.coronawarnapp.ui.view
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.TextView
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.google.android.material.switchmaterial.SwitchMaterial
+import de.rki.coronawarnapp.R
+
+class SwitchRowView @JvmOverloads constructor(
+    context: Context,
+    attrs: AttributeSet? = null,
+    defStyleAttr: Int = 0
+) : ConstraintLayout(context, attrs, defStyleAttr) {
+
+    private val switch by lazy { findViewById<SwitchMaterial>(R.id.switch_view) }
+    private val title by lazy { findViewById<TextView>(R.id.switch_title) }
+    private val subtitleView by lazy { findViewById<TextView>(R.id.switch_subtitle) }
+
+    init {
+        LayoutInflater.from(context).inflate(R.layout.switch_row, this, true)
+    }
+
+    fun setChecked(turnedOn: Boolean?) {
+        switch.isChecked = turnedOn ?: false
+    }
+
+    fun setTitle(text: String?) {
+        title.text = text
+    }
+
+    fun setSubtitle(text: String?) {
+        subtitleView.text = text
+    }
+
+    fun setSwitchEnabled(isEnabled: Boolean?) {
+        switch.isEnabled = isEnabled ?: false
+    }
+
+    val isChecked: Boolean
+        get() = switch.isChecked
+}
diff --git a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml
index 497d4491be0c86e6c0b32196ba1d18c9b0817be6..e0d43d04f557e4124a255dbc1fb046f6e983a5fb 100644
--- a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_fragment.xml
@@ -61,7 +61,7 @@
                 android:layout_marginVertical="24dp"
                 android:focusable="true" />
 
-            <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+            <de.rki.coronawarnapp.ui.view.MoreInformationView
                 android:id="@+id/debug_log_history_container"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -73,7 +73,7 @@
                 app:titleText="@string/debugging_debuglog_id_history_title"
                 tools:visibility="visible" />
 
-            <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+            <de.rki.coronawarnapp.ui.view.MoreInformationView
                 android:id="@+id/debug_log_privacy_information"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
diff --git a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml
index 33a772ec011e4cef6115a68f58f0d2f4cd5b9960..c5b191c1283b1102487f4ab76407a21e53a44e24 100644
--- a/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/bugreporting_debuglog_upload_fragment.xml
@@ -64,7 +64,7 @@
                 android:layout_marginVertical="24dp"
                 android:focusable="true" />
 
-            <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+            <de.rki.coronawarnapp.ui.view.MoreInformationView
                 android:id="@+id/debug_log_privacy_information"
                 android:layout_marginHorizontal="24dp"
                 android:layout_width="match_parent"
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 f97962270f1d8305cd082be0e9b76bbf5ce632c0..0b3690fb5d0b773ac7cc44431c31f72153670082 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
@@ -17,16 +17,15 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
-        <include
+        <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/settings_notifications_header"
-            layout="@layout/include_header"
+            style="@style/CWAToolbar.BackArrow"
             android:layout_width="0dp"
             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/settings_notifications_title}" />
+            app:title="@string/settings_notifications_title" />
 
         <ScrollView
             android:layout_width="0dp"
@@ -57,36 +56,49 @@
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toTopOf="parent" />
 
-                <include
+                <de.rki.coronawarnapp.ui.view.SwitchRowView
                     android:id="@+id/settings_switch_row_notifications_risk"
-                    layout="@layout/include_settings_switch_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/spacing_small"
                     gone="@{state != null &amp;&amp; !state.isNotificationsEnabled}"
-                    app:enabled="@{true}"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@+id/settings_notifications_header_details"
-                    app:showDivider="@{true}"
-                    app:status="@{state.isNotificationsRiskEnabled}"
-                    app:statusText="@{state.getRiskNotificationStatusText(context)}"
-                    app:subtitle="@{@string/settings_notifications_subtitle_update_risk}" />
-
-                <include
+                    app:checked="@{state.isNotificationsRiskEnabled}"
+                    app:subtitle="@{state.getRiskNotificationStatusText(context)}"
+                    app:switchEnabled="@{true}"
+                    app:title="@{@string/settings_notifications_subtitle_update_risk}" />
+
+                <View
+                    android:id="@+id/divider"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/card_divider"
+                    android:layout_marginHorizontal="@dimen/spacing_normal"
+                    android:background="@color/colorHairline"
+                    app:layout_constraintTop_toBottomOf="@id/settings_switch_row_notifications_risk" />
+
+                <de.rki.coronawarnapp.ui.view.SwitchRowView
                     android:id="@+id/settings_switch_row_notifications_test"
-                    layout="@layout/include_settings_switch_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
+                    android:layout_marginTop="@dimen/spacing_small"
                     gone="@{ state != null &amp;&amp; !state.isNotificationsEnabled}"
-                    app:enabled="@{true}"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@+id/settings_switch_row_notifications_risk"
-                    app:showDivider="@{true}"
-                    app:status="@{state.isNotificationsTestEnabled}"
-                    app:statusText="@{state.getTestNotificationStatusText(context)}"
-                    app:subtitle="@{@string/settings_notifications_subtitle_update_test}" />
+                    app:checked="@{state.isNotificationsTestEnabled}"
+                    app:subtitle="@{state.getTestNotificationStatusText(context)}"
+                    app:switchEnabled="@{true}"
+                    app:title="@{@string/settings_notifications_subtitle_update_test}" />
+
+                <View
+                    android:id="@+id/divider2"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/card_divider"
+                    android:layout_marginHorizontal="@dimen/spacing_normal"
+                    android:background="@color/colorHairline"
+                    app:layout_constraintTop_toBottomOf="@id/settings_switch_row_notifications_test" />
 
                 <include
                     android:id="@+id/settings_notifications_card"
@@ -125,4 +137,4 @@
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-</layout>
\ No newline at end of file
+</layout>
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml
index 0ecb4d8fc07dd6031e7e5d97930e8db5764540fd..eec2f250912951aac825936469576328b904fe19 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_privacy_preserving_analytics.xml
@@ -10,18 +10,15 @@
         android:fillViewport="true"
         android:focusable="true">
 
-        <include
+        <com.google.android.material.appbar.MaterialToolbar
             android:id="@+id/settings_ppa_header"
-            layout="@layout/include_header"
-            android:layout_width="0dp"
+            style="@style/CWAToolbar.BackArrow"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:contentDescription="@string/settings_background_priority_title"
-            android:focusable="true"
-            app:icon="@{@drawable/ic_back}"
             app:layout_constraintEnd_toEndOf="parent"
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toTopOf="parent"
-            app:title="@{@string/settings_privacy_preserving_analytics_title}" />
+            app:title="@string/settings_privacy_preserving_analytics_title" />
 
         <ScrollView
             android:id="@+id/scrollview"
@@ -64,9 +61,9 @@
                     android:text="@string/onboarding_ppa_body"
                     app:layout_constraintEnd_toEndOf="@id/body_end"
                     app:layout_constraintStart_toStartOf="@id/body_start"
-                    app:layout_constraintTop_toBottomOf="@+id/onboarding_illustration" />
+                    app:layout_constraintTop_toBottomOf="@id/onboarding_illustration" />
 
-                <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+                <de.rki.coronawarnapp.ui.view.MoreInformationView
                     android:id="@id/settings_ppa_switch_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
@@ -83,7 +80,7 @@
                     app:toggleOffText="@string/settings_off"
                     app:toggleOnText="@string/settings_on" />
 
-                <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+                <de.rki.coronawarnapp.ui.view.MoreInformationView
                     android:id="@id/federal_state_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
@@ -96,7 +93,7 @@
                     app:subtitleText="@string/onboarding_ppa_state_title"
                     app:titleText="@string/onboarding_ppa_state_title" />
 
-                <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+                <de.rki.coronawarnapp.ui.view.MoreInformationView
                     android:id="@id/district_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
@@ -105,11 +102,11 @@
                     app:isTopDividerVisible="false"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/federal_state_row"
+                    app:layout_constraintTop_toBottomOf="@id/federal_state_row"
                     app:subtitleText="@string/onboarding_ppa_district_title"
                     app:titleText="@string/onboarding_ppa_district_title" />
 
-                <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+                <de.rki.coronawarnapp.ui.view.MoreInformationView
                     android:id="@id/age_group_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
@@ -129,9 +126,9 @@
                     android:layout_height="wrap_content"
                     android:layout_marginTop="32dp"
                     android:orientation="vertical"
-                    app:layout_constraintEnd_toStartOf="@+id/guideline_card_end"
-                    app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
-                    app:layout_constraintTop_toBottomOf="@+id/age_group_row">
+                    app:layout_constraintEnd_toStartOf="@id/guideline_card_end"
+                    app:layout_constraintStart_toStartOf="@id/guideline_card_start"
+                    app:layout_constraintTop_toBottomOf="@id/age_group_row">
 
                     <TextView
                         android:id="@id/legal_title"
@@ -215,7 +212,7 @@
                         android:text="@string/ppa_onboarding_privacy_information_point_sixteen"
                         app:layout_constraintEnd_toEndOf="parent"
                         app:layout_constraintStart_toStartOf="@id/bullet_point_consent"
-                        app:layout_constraintTop_toBottomOf="@+id/legal_point_identity" />
+                        app:layout_constraintTop_toBottomOf="@id/legal_point_identity" />
 
                     <androidx.appcompat.widget.AppCompatImageView
                         android:id="@id/bullet_point_sixteen"
@@ -229,7 +226,7 @@
 
                 </androidx.constraintlayout.widget.ConstraintLayout>
 
-                <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+                <de.rki.coronawarnapp.ui.view.MoreInformationView
                     android:id="@id/more_info_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
@@ -238,7 +235,7 @@
                     android:focusable="true"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/consent_layout"
+                    app:layout_constraintTop_toBottomOf="@id/consent_layout"
                     app:titleText="@string/onboarding_ppa_more_info_title" />
 
                 <androidx.constraintlayout.widget.Guideline
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 95ba2919e5222e310134520cb6fb1d7e250f2d40..6037070b77a23cfa09b5ac62975d615227b9eec6 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
@@ -77,20 +77,25 @@
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@id/illustration" />
 
-                <include
-                    android:id="@+id/settings_tracing_switch_row"
-                    layout="@layout/include_settings_switch_row"
+                <de.rki.coronawarnapp.ui.view.SwitchRowView
+                    android:id="@+id/switch_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
-                    android:layout_marginTop="@dimen/spacing_normal"
-                    app:enabled="@{settingsTracingState.isTracingSwitchEnabled()}"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@id/information_details_header_headline"
-                    app:showDivider="@{true}"
-                    app:status="@{settingsTracingState.isTracingSwitchChecked()}"
-                    app:statusText="@{settingsTracingState.getTracingStatusText(context)}"
-                    app:subtitle="@{@string/settings_tracing_title}" />
+                    app:checked="@{settingsTracingState.isTracingSwitchChecked()}"
+                    app:subtitle="@{settingsTracingState.getTracingStatusText(context)}"
+                    app:switchEnabled="@{settingsTracingState.isTracingSwitchEnabled()}"
+                    app:title="@{@string/settings_tracing_title}" />
+
+                <View
+                    android:id="@+id/divider"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/card_divider"
+                    android:layout_marginHorizontal="@dimen/spacing_normal"
+                    android:background="@color/colorHairline"
+                    app:layout_constraintTop_toBottomOf="@+id/switch_row" />
 
                 <androidx.constraintlayout.widget.ConstraintLayout
                     android:id="@+id/settingsInteroperabilityRow"
@@ -101,7 +106,7 @@
                     android:background="?android:selectableItemBackground"
                     app:layout_constraintStart_toStartOf="@id/guideline_start"
                     app:layout_constraintEnd_toStartOf="@id/guideline_end"
-                    app:layout_constraintTop_toBottomOf="@id/settings_tracing_switch_row">
+                    app:layout_constraintTop_toBottomOf="@id/switch_row">
 
                     <androidx.appcompat.widget.AppCompatImageView
                         android:id="@+id/flag_eu"
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml
index 6afea3003ca30db6bce0e8f2d62bbe96c696d352..20ee30c8264574e6cb9bedc72c0e2314a4026fb9 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_your_consent.xml
@@ -37,18 +37,24 @@
                 android:layout_height="wrap_content"
                 android:focusable="true">
 
-                <include
+                <de.rki.coronawarnapp.ui.view.SwitchRowView
                     android:id="@+id/submission_your_consent_switch"
-                    layout="@layout/include_settings_switch_row"
                     android:layout_width="0dp"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="@dimen/spacing_small"
-                    app:enabled="@{true}"
                     app:layout_constraintEnd_toEndOf="parent"
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toTopOf="parent"
-                    app:showDivider="@{true}"
-                    app:subtitle="@{@string/submission_your_consent_switch_subtitle}" />
+                    app:switchEnabled="@{true}"
+                    app:title="@{@string/submission_your_consent_switch_subtitle}" />
+
+                <View
+                    android:id="@+id/divider"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/card_divider"
+                    android:layout_marginHorizontal="@dimen/spacing_normal"
+                    android:background="@color/colorHairline"
+                    app:layout_constraintTop_toBottomOf="@id/submission_your_consent_switch" />
 
                 <TextView
                     android:id="@+id/submission_your_consent_about_text"
@@ -59,7 +65,7 @@
                     android:text="@string/submission_your_consent_about_agreement"
                     app:layout_constraintEnd_toEndOf="@id/guideline_end"
                     app:layout_constraintStart_toStartOf="@id/guideline_start"
-                    app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_switch" />
+                    app:layout_constraintTop_toBottomOf="@id/submission_your_consent_switch" />
 
                 <LinearLayout
                     android:id="@+id/submission_your_consent_agreement_card"
@@ -69,9 +75,9 @@
                     android:layout_marginTop="@dimen/spacing_medium"
                     android:focusable="true"
                     android:orientation="vertical"
-                    app:layout_constraintEnd_toStartOf="@+id/guideline_card_end"
-                    app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
-                    app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_about_text">
+                    app:layout_constraintEnd_toStartOf="@id/guideline_card_end"
+                    app:layout_constraintStart_toStartOf="@id/guideline_card_start"
+                    app:layout_constraintTop_toBottomOf="@id/submission_your_consent_about_text">
 
                     <TextView
                         android:id="@+id/submission_your_consent_agreement_title"
@@ -81,7 +87,7 @@
                         android:layout_marginEnd="@dimen/spacing_small"
                         android:accessibilityHeading="true"
                         android:contentDescription="@string/submission_your_consent_agreement_title"
-                        android:text="@string/submission_your_consent_agreement_title"/>
+                        android:text="@string/submission_your_consent_agreement_title" />
 
                     <TextView
                         android:id="@+id/submission_your_consent_agreement_share_test_results_text"
@@ -114,8 +120,8 @@
                     android:layout_marginTop="@dimen/spacing_medium"
                     android:background="@color/colorHairline"
                     app:layout_constraintEnd_toEndOf="@+id/guideline_end"
-                    app:layout_constraintStart_toStartOf="@+id/guideline_start"
-                    app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_agreement_card" />
+                    app:layout_constraintStart_toStartOf="@id/guideline_start"
+                    app:layout_constraintTop_toBottomOf="@id/submission_your_consent_agreement_card" />
 
                 <TextView
                     android:id="@+id/submission_your_consent_agreement_details_text"
@@ -128,7 +134,7 @@
                     android:text="@string/submission_your_consent_agreement_details"
                     app:layout_constraintEnd_toEndOf="@id/guideline_end"
                     app:layout_constraintStart_toStartOf="@id/guideline_start"
-                    app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_agreement_details_divider_top" />
+                    app:layout_constraintTop_toBottomOf="@id/submission_your_consent_agreement_details_divider_top" />
 
                 <View
                     android:id="@+id/submission_your_consent_agreement_details_divider_bottom"
@@ -136,8 +142,8 @@
                     android:layout_height="@dimen/card_divider"
                     android:background="@color/colorHairline"
                     app:layout_constraintEnd_toEndOf="@+id/guideline_end"
-                    app:layout_constraintStart_toStartOf="@+id/guideline_start"
-                    app:layout_constraintTop_toBottomOf="@+id/submission_your_consent_agreement_details_text" />
+                    app:layout_constraintStart_toStartOf="@id/guideline_start"
+                    app:layout_constraintTop_toBottomOf="@id/submission_your_consent_agreement_details_text" />
 
                 <include layout="@layout/merge_guidelines_side" />
                 <include layout="@layout/merge_guidelines_card" />
@@ -157,4 +163,4 @@
 
     </androidx.constraintlayout.widget.ConstraintLayout>
 
-</layout>
\ No newline at end of file
+</layout>
diff --git a/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml b/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml
index efc8de075f85d24fbc314810b5e3daa55472ef85..d353db870dab7c855bbe9eefab89fc3309a3cc2c 100644
--- a/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml
+++ b/Corona-Warn-App/src/main/res/layout/fragment_trace_location_onboarding.xml
@@ -250,7 +250,7 @@
 
             </androidx.constraintlayout.widget.ConstraintLayout>
 
-            <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+            <de.rki.coronawarnapp.ui.view.MoreInformationView
                 android:id="@+id/check_in_onboarding_privacy"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
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
deleted file mode 100644
index ccab31e83d96b4de4c1f9e434da38e717af6b484..0000000000000000000000000000000000000000
--- a/Corona-Warn-App/src/main/res/layout/include_settings_switch_row.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?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>
-        <variable
-            name="subtitle"
-            type="String" />
-
-        <variable
-            name="enabled"
-            type="Boolean" />
-
-        <variable
-            name="status"
-            type="Boolean" />
-
-        <variable
-            name="statusText"
-            type="String" />
-
-        <variable
-            name="showDivider"
-            type="Boolean" />
-
-    </data>
-
-    <androidx.constraintlayout.widget.ConstraintLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content">
-
-        <androidx.constraintlayout.widget.ConstraintLayout
-            android:id="@+id/settings_switch_row"
-            style="@style/row"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:focusable="true"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent">
-
-            <androidx.constraintlayout.widget.ConstraintLayout
-                android:id="@+id/settings_switch_row_header"
-                android:layout_width="0dp"
-                android:layout_height="wrap_content"
-                android:layout_marginEnd="@dimen/spacing_normal"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toStartOf="@+id/settings_switch_row_switch"
-                app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toTopOf="parent">
-
-                <TextView
-                    android:id="@+id/settings_switch_row_header_subtitle"
-                    style="@style/subtitle"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:text="@{subtitle}"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toTopOf="parent" />
-
-                <TextView
-                    android:id="@+id/settings_switch_row_header_body"
-                    style="@style/body2Medium"
-                    android:layout_width="0dp"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="@dimen/spacing_mega_tiny"
-                    android:accessibilityLiveRegion="assertive"
-                    android:text="@{statusText}"
-                    app:layout_constraintBottom_toBottomOf="parent"
-                    app:layout_constraintEnd_toEndOf="parent"
-                    app:layout_constraintStart_toStartOf="parent"
-                    app:layout_constraintTop_toBottomOf="@+id/settings_switch_row_header_subtitle" />
-
-            </androidx.constraintlayout.widget.ConstraintLayout>
-
-            <com.google.android.material.switchmaterial.SwitchMaterial
-                android:id="@+id/settings_switch_row_switch"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:checked="@{status}"
-                android:importantForAccessibility="no"
-                android:enabled="@{enabled}"
-                android:contentDescription="@{subtitle + ` ` + status}"
-                android:theme="@style/switchBase"
-                app:layout_constraintBottom_toBottomOf="parent"
-                app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintTop_toTopOf="parent" />
-
-        </androidx.constraintlayout.widget.ConstraintLayout>
-
-        <include
-            android:id="@+id/divider"
-            layout="@layout/include_divider"
-            android:layout_width="0dp"
-            android:layout_height="@dimen/card_divider"
-            gone="@{!showDivider}"
-            app:layout_constraintEnd_toEndOf="@id/guideline_end"
-            app:layout_constraintStart_toStartOf="@id/guideline_start"
-            app:layout_constraintTop_toBottomOf="@+id/settings_switch_row" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/guideline_start"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_begin="@dimen/guideline_start" />
-
-        <androidx.constraintlayout.widget.Guideline
-            android:id="@+id/guideline_end"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            app:layout_constraintGuide_end="@dimen/guideline_end" />
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
-
-</layout>
diff --git a/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml b/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml
index 8921df8adde5035c5eab401e38ec40c7b7cd1186..e8edce2e075fa3a689e3697f6d15eaee982e5950 100644
--- a/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/rat_profile_onboarding_fragment.xml
@@ -246,7 +246,7 @@
                     app:layout_constraintTop_toBottomOf="@id/rat_profile_onboarding_body6" />
 
             </androidx.constraintlayout.widget.ConstraintLayout>
-            <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+            <de.rki.coronawarnapp.ui.view.MoreInformationView
                 android:id="@+id/rat_profile_onboarding_privacy"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
diff --git a/Corona-Warn-App/src/main/res/layout/switch_row.xml b/Corona-Warn-App/src/main/res/layout/switch_row.xml
new file mode 100644
index 0000000000000000000000000000000000000000..502698f17d03759a11dc7ff7ac88bfeea12bcd5a
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/layout/switch_row.xml
@@ -0,0 +1,51 @@
+<?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:id="@+id/switch_row"
+    style="@style/row"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:focusable="true"
+    app:layout_constraintEnd_toEndOf="parent"
+    app:layout_constraintStart_toStartOf="parent"
+    app:layout_constraintTop_toTopOf="parent">
+
+    <TextView
+        android:id="@+id/switch_title"
+        style="@style/subtitle"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="@dimen/spacing_normal"
+        app:layout_constraintEnd_toStartOf="@+id/switch_view"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="Setting" />
+
+    <TextView
+        android:id="@+id/switch_subtitle"
+        style="@style/body2Medium"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="@dimen/spacing_mega_tiny"
+        android:layout_marginEnd="@dimen/spacing_normal"
+        android:accessibilityLiveRegion="assertive"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/switch_view"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/switch_title"
+        tools:text="Active" />
+
+    <com.google.android.material.switchmaterial.SwitchMaterial
+        android:id="@+id/switch_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:clickable="false"
+        android:importantForAccessibility="no"
+        android:theme="@style/switchBase"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml b/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml
index de5948e1fe8de67d48496593342c7b4bda2dde40..c7326c58b36f99479702aad56d81a6d1149cd79e 100644
--- a/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml
+++ b/Corona-Warn-App/src/main/res/layout/trace_location_organizer_qr_code_info_fragment.xml
@@ -148,7 +148,7 @@
                 app:layout_constraintStart_toStartOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/trace_location_qr_time_sheet_text" />
 
-            <de.rki.coronawarnapp.util.ui.views.MoreInformationView
+            <de.rki.coronawarnapp.ui.view.MoreInformationView
                 android:id="@+id/privacy_information"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
@@ -182,4 +182,4 @@
         app:layout_constraintStart_toStartOf="parent"
         tools:text="@string/acknowledge_button" />
 
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/Corona-Warn-App/src/main/res/values/attrs.xml b/Corona-Warn-App/src/main/res/values/attrs.xml
index c6977d75c07901faf2d06a0cc07b0de3f285bc46..d49dd03c1be761c2fef3f03a4c54f94f8e00aa2c 100644
--- a/Corona-Warn-App/src/main/res/values/attrs.xml
+++ b/Corona-Warn-App/src/main/res/values/attrs.xml
@@ -54,4 +54,4 @@
     <declare-styleable name="TraceLocationHighlightView">
         <attr name="android:text" />
     </declare-styleable>
-</resources>
\ No newline at end of file
+</resources>