diff --git a/mailbox-android/src/main/AndroidManifest.xml b/mailbox-android/src/main/AndroidManifest.xml
index 84f503a7181790a82856f0ab9be5e433104d6370..cb70c9be8fe1298cc5fe8c92c7c02837517978b1 100644
--- a/mailbox-android/src/main/AndroidManifest.xml
+++ b/mailbox-android/src/main/AndroidManifest.xml
@@ -37,13 +37,13 @@
             android:exported="false"
             android:label="@string/prefs_title" />
         <activity
-            android:name=".android.ui.WipeCompleteActivity"
+            android:name=".android.ui.wipe.WipeCompleteActivity"
             android:excludeFromRecents="true"
             android:launchMode="singleInstance"
             android:process=":briar_mailbox_wipe_complete"
             android:theme="@style/Theme.BriarMailbox.NoActionBar" />
         <activity
-            android:name=".android.ui.StartupFailureActivity"
+            android:name=".android.ui.startup.StartupFailureActivity"
             android:excludeFromRecents="true"
             android:exported="false"
             android:finishOnTaskLaunch="true"
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxPreferences.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxPreferences.kt
index ce7a571f30e5f8fb1a02bc45e4aef6539373fd3a..859e43c988775bb00d8cee6bd8cd3369af2863e5 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxPreferences.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxPreferences.kt
@@ -24,7 +24,7 @@ import android.content.SharedPreferences
 import androidx.core.content.edit
 import androidx.preference.PreferenceManager.getDefaultSharedPreferences
 import dagger.hilt.android.qualifiers.ApplicationContext
-import org.briarproject.mailbox.android.ui.WipeCompleteFragment
+import org.briarproject.mailbox.android.ui.wipe.WipeCompleteFragment
 import javax.inject.Inject
 
 class MailboxPreferences @Inject constructor(@ApplicationContext val context: Context) {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt
index 5d94053ba090f1db43cd022dedb0236384c94ab5..2ab01db223fa2b1d26a1aa00e3c2d2645c6986ef 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/MailboxService.kt
@@ -35,10 +35,10 @@ import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManager
 import org.briarproject.mailbox.R
 import org.briarproject.mailbox.android.MailboxNotificationManager.Companion.NOTIFICATION_MAIN_ID
 import org.briarproject.mailbox.android.StatusManager.Starting
-import org.briarproject.mailbox.android.ui.StartupFailureActivity
-import org.briarproject.mailbox.android.ui.StartupFailureActivity.Companion.EXTRA_START_RESULT
-import org.briarproject.mailbox.android.ui.StartupFailureActivity.StartupFailure
-import org.briarproject.mailbox.android.ui.WipeCompleteActivity
+import org.briarproject.mailbox.android.ui.startup.StartupFailureActivity
+import org.briarproject.mailbox.android.ui.startup.StartupFailureActivity.Companion.EXTRA_START_RESULT
+import org.briarproject.mailbox.android.ui.startup.StartupFailureActivity.StartupFailure
+import org.briarproject.mailbox.android.ui.wipe.WipeCompleteActivity
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager.StartResult.CLOCK_ERROR
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager.StartResult.LIFECYCLE_REUSE
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/MainActivity.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/MainActivity.kt
index 86fc899458490504c0f4b2a99a03a3c2d0dd5f1c..90210646fc2198def283bff4e23912d2636e6080 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/MainActivity.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/MainActivity.kt
@@ -64,6 +64,7 @@ import org.briarproject.mailbox.android.StatusManager.Stopping
 import org.briarproject.mailbox.android.StatusManager.Undecided
 import org.briarproject.mailbox.android.StatusManager.Wiping
 import org.briarproject.mailbox.android.ui.settings.SettingsActivity
+import org.briarproject.mailbox.android.ui.wipe.WipeCompleteActivity
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager.LifecycleState.NOT_STARTED
 import org.briarproject.mailbox.core.util.LogUtils.info
 import org.slf4j.LoggerFactory.getLogger
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/QrCodeFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/QrCodeFragment.kt
similarity index 94%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/QrCodeFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/QrCodeFragment.kt
index db5a5893b04454565b44a662e9a5f50e13f8fec0..b947a9ba94c04d267514e37be0732f29531e32a4 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/QrCodeFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/QrCodeFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.setup
 
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -37,6 +37,8 @@ import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.R
 import org.briarproject.mailbox.android.StatusManager.MailboxAppState
 import org.briarproject.mailbox.android.StatusManager.StartedSettingUp
+import org.briarproject.mailbox.android.ui.MailboxViewModel
+import org.briarproject.mailbox.android.ui.launchAndRepeatWhileStarted
 
 @AndroidEntryPoint
 class QrCodeFragment : Fragment(), MenuProvider {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/QrCodeLinkFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/QrCodeLinkFragment.kt
similarity index 94%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/QrCodeLinkFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/QrCodeLinkFragment.kt
index f4ec10cde7cc70c0fe1ca9cbc2f926abcd1d6e5c..cd421ebda40626c4790ef13987583004d8fce130 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/QrCodeLinkFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/QrCodeLinkFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.setup
 
 import android.content.ActivityNotFoundException
 import android.content.ClipData
@@ -41,6 +41,9 @@ import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.R
 import org.briarproject.mailbox.android.StatusManager.MailboxAppState
 import org.briarproject.mailbox.android.StatusManager.StartedSettingUp
+import org.briarproject.mailbox.android.ui.BackFragment
+import org.briarproject.mailbox.android.ui.MailboxViewModel
+import org.briarproject.mailbox.android.ui.launchAndRepeatWhileStarted
 
 @AndroidEntryPoint
 class QrCodeLinkFragment : BackFragment() {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/SetupCompleteFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/SetupCompleteFragment.kt
similarity index 97%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/SetupCompleteFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/SetupCompleteFragment.kt
index 54d420512eda53a2a2557263d1b2859e2f0c8673..19fa4f38beadf81e2ecb56ffbf6d67c469465944 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/SetupCompleteFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/setup/SetupCompleteFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.setup
 
 import android.os.Bundle
 import android.view.LayoutInflater
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/InitFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/InitFragment.kt
similarity index 97%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/InitFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/InitFragment.kt
index 0c6962e14f99e649f75ceca6458fc478d3dbb93c..ee8496180ff042e681493f9d6bcae0250db87682 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/InitFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/InitFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.startup
 
 import android.os.Bundle
 import android.view.LayoutInflater
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/OnboardingContainerFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/OnboardingContainerFragment.kt
similarity index 96%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/OnboardingContainerFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/OnboardingContainerFragment.kt
index 67ebc5dabd2e86b20f458ba29084e176e4b33f40..8d05855cba28000791a971fed06a1d313e450cf2 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/OnboardingContainerFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/OnboardingContainerFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.startup
 
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -27,6 +27,7 @@ import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import androidx.viewpager2.adapter.FragmentStateAdapter
 import androidx.viewpager2.widget.ViewPager2
+import org.briarproject.mailbox.android.ui.MailboxViewModel
 import org.briarproject.mailbox.databinding.FragmentOnboardingContainerBinding
 
 class OnboardingContainerFragment : Fragment() {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/OnboardingFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/OnboardingFragment.kt
similarity index 97%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/OnboardingFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/OnboardingFragment.kt
index ed45b3838f3c3e130a2ddacb26be533f4f2c10b7..140cecd0e58ea001cfa7e25bedfce990d847ae98 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/OnboardingFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/OnboardingFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.startup
 
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -31,6 +31,7 @@ import androidx.core.widget.ImageViewCompat
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import org.briarproject.mailbox.R
+import org.briarproject.mailbox.android.ui.MailboxViewModel
 import org.briarproject.mailbox.databinding.FragmentOnboardingBinding
 
 class Onboarding0Fragment : OnboardingFragment(
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StartupFailureActivity.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/StartupFailureActivity.kt
similarity index 84%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StartupFailureActivity.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/StartupFailureActivity.kt
index 866665aa389a75cf929a8cca4e6d83ddaabfc8ad..271c2a780cae969f8bad53c3063e5f9814f2d88d 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StartupFailureActivity.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/StartupFailureActivity.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.startup
 
 import android.content.Intent
 import android.os.Bundle
@@ -25,9 +25,9 @@ import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.R
-import org.briarproject.mailbox.android.ui.StartupFailureActivity.StartupFailure.CLOCK_ERROR
-import org.briarproject.mailbox.android.ui.StartupFailureActivity.StartupFailure.LIFECYCLE_REUSE
-import org.briarproject.mailbox.android.ui.StartupFailureActivity.StartupFailure.SERVICE_ERROR
+import org.briarproject.mailbox.android.ui.startup.StartupFailureActivity.StartupFailure.CLOCK_ERROR
+import org.briarproject.mailbox.android.ui.startup.StartupFailureActivity.StartupFailure.LIFECYCLE_REUSE
+import org.briarproject.mailbox.android.ui.startup.StartupFailureActivity.StartupFailure.SERVICE_ERROR
 
 @AndroidEntryPoint
 class StartupFailureActivity : AppCompatActivity() {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StartupFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/StartupFragment.kt
similarity index 93%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StartupFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/StartupFragment.kt
index 8dcd70430e1d18e69d59befbb74c9121aa4526b3..5a464f0ec1b35d4e057a9edd10d47d1edcba9f4d 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StartupFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/startup/StartupFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.startup
 
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -33,6 +33,8 @@ import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.R
 import org.briarproject.mailbox.android.StatusManager.MailboxAppState
 import org.briarproject.mailbox.android.StatusManager.Starting
+import org.briarproject.mailbox.android.ui.MailboxViewModel
+import org.briarproject.mailbox.android.ui.launchAndRepeatWhileStarted
 
 @AndroidEntryPoint
 class StartupFragment : Fragment() {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/ClockSkewFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/ClockSkewFragment.kt
similarity index 96%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/ClockSkewFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/ClockSkewFragment.kt
index c3d4189374830cba87bbdc387955b46f21fb724b..40cbe2c7eb4b811cff0bc0ecb321cf62336a03a1 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/ClockSkewFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/ClockSkewFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.status
 
 import android.os.Bundle
 import android.view.LayoutInflater
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/NoNetworkFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/NoNetworkFragment.kt
similarity index 96%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/NoNetworkFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/NoNetworkFragment.kt
index 43f4aaa2c8827651bcf5ed21ee7b601d06aca02c..8e4e48b880469dff990485531dec49506a5280ca 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/NoNetworkFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/NoNetworkFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.status
 
 import android.os.Bundle
 import android.view.LayoutInflater
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StatusFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/StatusFragment.kt
similarity index 95%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StatusFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/StatusFragment.kt
index 0c9e215588c31df68145f07c6068fe5528f22f7b..fd36123d49ab874023c2e76da58503edd1124a0c 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StatusFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/StatusFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.status
 
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -32,6 +32,8 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.R
 import org.briarproject.mailbox.android.UiUtils.formatDate
+import org.briarproject.mailbox.android.ui.MailboxViewModel
+import org.briarproject.mailbox.android.ui.launchAndRepeatWhileStarted
 
 @AndroidEntryPoint
 class StatusFragment : Fragment() {
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StoppingFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/StoppingFragment.kt
similarity index 96%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StoppingFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/StoppingFragment.kt
index 92e0d05d80201fd8a14c7f6cdd643cfe959f5622..f72dc0d1f0ae314aa1486f81f6ab6767440b213f 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/StoppingFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/status/StoppingFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.status
 
 import android.os.Bundle
 import android.view.LayoutInflater
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipeCompleteActivity.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipeCompleteActivity.kt
similarity index 96%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipeCompleteActivity.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipeCompleteActivity.kt
index aa95f8888f299a3de9138e4251cc8be4e253669d..d03549d91f61234771927d59d86a85c9530f3e43 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipeCompleteActivity.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipeCompleteActivity.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.wipe
 
 import android.os.Bundle
 import androidx.appcompat.app.AppCompatActivity
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipeCompleteFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipeCompleteFragment.kt
similarity index 95%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipeCompleteFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipeCompleteFragment.kt
index ce898e8b15114d42a9c9ce25207d8498ca341a1e..58aef8338dfcc68d3d83519bfca950cfd97c9c5d 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipeCompleteFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipeCompleteFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.wipe
 
 import android.os.Bundle
 import android.view.LayoutInflater
@@ -29,6 +29,7 @@ import androidx.fragment.app.Fragment
 import androidx.fragment.app.activityViewModels
 import dagger.hilt.android.AndroidEntryPoint
 import org.briarproject.mailbox.R
+import org.briarproject.mailbox.android.ui.MailboxViewModel
 import org.briarproject.mailbox.core.system.AndroidExecutor
 import org.briarproject.mailbox.core.system.System
 import org.slf4j.LoggerFactory.getLogger
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipingFragment.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipingFragment.kt
similarity index 96%
rename from mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipingFragment.kt
rename to mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipingFragment.kt
index 885e6b6165197516b3a015481b60a928874cb1a5..e0cc0de593a902dddc9d6bd1746fa3313f9ab2c4 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/WipingFragment.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/ui/wipe/WipingFragment.kt
@@ -17,7 +17,7 @@
  *
  */
 
-package org.briarproject.mailbox.android.ui
+package org.briarproject.mailbox.android.ui.wipe
 
 import android.os.Bundle
 import android.view.LayoutInflater
diff --git a/mailbox-android/src/main/res/layout/activity_wipe_complete.xml b/mailbox-android/src/main/res/layout/activity_wipe_complete.xml
index 272c018facf89437f29cd04f17d59097327875e8..cc458d355985b94f168b36a4ef131c4d096008b0 100644
--- a/mailbox-android/src/main/res/layout/activity_wipe_complete.xml
+++ b/mailbox-android/src/main/res/layout/activity_wipe_complete.xml
@@ -2,7 +2,7 @@
 <androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/fragmentContainer"
-    android:name="org.briarproject.mailbox.android.ui.WipeCompleteFragment"
+    android:name="org.briarproject.mailbox.android.ui.wipe.WipeCompleteFragment"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".android.ui.WipeCompleteActivity" />
+    tools:context=".android.ui.wipe.WipeCompleteActivity" />
diff --git a/mailbox-android/src/main/res/navigation/nav_main.xml b/mailbox-android/src/main/res/navigation/nav_main.xml
index fbb0eee8f501fe1631ceb4be70b7f03dffaae3cf..a727bfb4e76b2217a65114a7929591ec67b80ec6 100644
--- a/mailbox-android/src/main/res/navigation/nav_main.xml
+++ b/mailbox-android/src/main/res/navigation/nav_main.xml
@@ -7,12 +7,12 @@
 
     <fragment
         android:id="@+id/initFragment"
-        android:name="org.briarproject.mailbox.android.ui.InitFragment"
+        android:name="org.briarproject.mailbox.android.ui.startup.InitFragment"
         android:label="InitFragment"
         tools:layout="@layout/fragment_init" />
     <fragment
         android:id="@+id/onboardingFragment"
-        android:name="org.briarproject.mailbox.android.ui.OnboardingContainerFragment"
+        android:name="org.briarproject.mailbox.android.ui.startup.OnboardingContainerFragment"
         android:label="OnboardingContainerFragment"
         tools:layout="@layout/fragment_onboarding" />
     <fragment
@@ -22,12 +22,12 @@
         tools:layout="@layout/fragment_dont_kill_me" />
     <fragment
         android:id="@+id/startupFragment"
-        android:name="org.briarproject.mailbox.android.ui.StartupFragment"
+        android:name="org.briarproject.mailbox.android.ui.startup.StartupFragment"
         android:label="StartupFragment"
         tools:layout="@layout/fragment_startup" />
     <fragment
         android:id="@+id/qrCodeFragment"
-        android:name="org.briarproject.mailbox.android.ui.QrCodeFragment"
+        android:name="org.briarproject.mailbox.android.ui.setup.QrCodeFragment"
         android:label="@string/link_title"
         tools:layout="@layout/fragment_qr">
         <action
@@ -36,37 +36,37 @@
     </fragment>
     <fragment
         android:id="@+id/qrCodeLinkFragment"
-        android:name="org.briarproject.mailbox.android.ui.QrCodeLinkFragment"
+        android:name="org.briarproject.mailbox.android.ui.setup.QrCodeLinkFragment"
         android:label="@string/link_title"
         tools:layout="@layout/fragment_qr_link" />
     <fragment
         android:id="@+id/setupCompleteFragment"
-        android:name="org.briarproject.mailbox.android.ui.SetupCompleteFragment"
+        android:name="org.briarproject.mailbox.android.ui.setup.SetupCompleteFragment"
         android:label="SetupCompleteFragment"
         tools:layout="@layout/fragment_setup_complete" />
     <fragment
         android:id="@+id/statusFragment"
-        android:name="org.briarproject.mailbox.android.ui.StatusFragment"
+        android:name="org.briarproject.mailbox.android.ui.status.StatusFragment"
         android:label="StatusFragment"
         tools:layout="@layout/fragment_status" />
     <fragment
         android:id="@+id/noNetworkFragment"
-        android:name="org.briarproject.mailbox.android.ui.NoNetworkFragment"
+        android:name="org.briarproject.mailbox.android.ui.status.NoNetworkFragment"
         android:label="NoNetworkFragment"
         tools:layout="@layout/fragment_no_network" />
     <fragment
         android:id="@+id/clockSkewFragment"
-        android:name="org.briarproject.mailbox.android.ui.ClockSkewFragment"
+        android:name="org.briarproject.mailbox.android.ui.status.ClockSkewFragment"
         android:label="ClockSkewFragment"
         tools:layout="@layout/fragment_clock_skew" />
     <fragment
         android:id="@+id/stoppingFragment"
-        android:name="org.briarproject.mailbox.android.ui.StoppingFragment"
+        android:name="org.briarproject.mailbox.android.ui.status.StoppingFragment"
         android:label="StoppingFragment"
         tools:layout="@layout/fragment_stopping" />
     <fragment
         android:id="@+id/wipingFragment"
-        android:name="org.briarproject.mailbox.android.ui.WipingFragment"
+        android:name="org.briarproject.mailbox.android.ui.wipe.WipingFragment"
         android:label="WipingFragment"
         tools:layout="@layout/fragment_wiping" />
     <action