Repository: thunderbird/thunderbird-android (language: kotlin)

Issue:
Dropdown Drawer - change the account selection UI to dropdown list
The account selection should open a dropdown list of accounts instead of the siderail.

<img width="300" alt="Image" src="https://github.com/user-attachments/assets/c3c2f9b2-b6a4-411c-af1d-f72fa0f437fe" />

<img width="300" alt="Image" src="https://github.com/user-attachments/assets/5ade76c4-4408-47c8-aa1c-eafc6b299748" />



Discussion hints:
nan

Pull request: feat(drawer): change drawer layout to dropdown ui
Resolves #9189

Depends on #9358

This changes the drawer ui to a true dropdown ui solution, hidden behind a feature flag.

## Main Features

1. **Unified Folder Support**: 
   - Added a unified account view that aggregates content from multiple accounts
   - Implemented a unified inbox that shows messages from all accounts in one place

2. **Drawer Layout Improvements**:
   - Added support for two drawer UI modes: dropdown drawer and side rail drawer to keep changes minimal when the feature flag is not enabled
   - Improved folder selection and navigation between accounts
   - Enhanced the account list view with better selection states

3. **UI/UX Enhancements**:
   - Fixed selection state for nested folders
   - Improved avatar color selection for dark mode

## Technical Changes

1. **Architecture**:
   - Created a dedicated repository for unified folders (`UnifiedFolderRepository`)
   - Implemented search functionality to support unified inbox views
   - Added proper message counting for unified folders
   - Created new domain entities: `UnifiedDisplayAccount`, `UnifiedDisplayFolder`, and `UnifiedDisplayFolderType`

2. **Bug Fixes**:
   - Fixed issues with folder selection in nested folders
   - Fixed account selection to only trigger when the account is different
   - Removed deselect functionality that was preventing folders from being selected
   - Fixed management of folders when unified account is shown

3. **Feature Flags**:
   - Added feature flags to control the drawer functionality:
     - `enable_dropdown_drawer`: Controls the overall drawer feature (dropdown vs. side rail)
     - `enable_dropdown_drawer_ui`: Controls the UI mode (dropdown with expandable folders vs. side rail with expandable folders)
     
| Name       | Screenshot                                  |
|-----------------------|----------------------------------------------------|
| Unified Account          | <img src="https://github.com/user-attachments/assets/33cd82fa-ef7a-464e-bae1-7242f11b5e59" alt="Unified Account" width="300" /> |
| Account List          | <img src="https://github.com/user-attachments/assets/5adc9c2b-7600-40c4-a732-8f4bc09789d1" alt="Account List" width="300" /> |
| Account View         | <img src="https://github.com/user-attachments/assets/8d538380-252b-4a3d-a1fa-da0fff41394e" alt="Account View" width="300" /> |
| Account View with nested selection         | <img src="https://github.com/user-attachments/assets/65c7b47b-4299-4b4b-bc97-a6f2369e95af" alt="Account View" width="300" /> |


Test command: ./gradlew :feature:navigation:drawer:dropdown:testDebugUnitTest --tests "net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerViewKtTest" --tests "net.thunderbird.feature.navigation.drawer.dropdown.domain.usecase.GetDisplayFoldersForAccountTest" --tests "net.thunderbird.feature.navigation.drawer.dropdown.domain.usecase.GetDisplayTreeFolderTest" --tests "net.thunderbird.feature.navigation.drawer.dropdown.data.UnifiedFolderRepositoryTest" --tests "net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerViewModelTest"

Fix patch:
diff --git a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/Icons.kt b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/Icons.kt
index b985620483d..20698343286 100644
--- a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/Icons.kt
+++ b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/atom/icon/Icons.kt
@@ -8,6 +8,7 @@ import androidx.compose.material.icons.filled.Outbox
 import androidx.compose.material.icons.filled.Star
 import androidx.compose.material.icons.filled.VisibilityOff
 import androidx.compose.material.icons.outlined.AccountCircle
+import androidx.compose.material.icons.outlined.Add
 import androidx.compose.material.icons.outlined.AllInbox
 import androidx.compose.material.icons.outlined.Archive
 import androidx.compose.material.icons.outlined.Check
@@ -22,6 +23,8 @@ import androidx.compose.material.icons.outlined.ExpandMore
 import androidx.compose.material.icons.outlined.Folder
 import androidx.compose.material.icons.outlined.Inbox
 import androidx.compose.material.icons.outlined.Info
+import androidx.compose.material.icons.outlined.KeyboardArrowDown
+import androidx.compose.material.icons.outlined.KeyboardArrowUp
 import androidx.compose.material.icons.outlined.Menu
 import androidx.compose.material.icons.outlined.Report
 import androidx.compose.material.icons.outlined.Security
@@ -53,6 +56,9 @@ object Icons {
         val AccountCircle: ImageVector
             get() = MaterialIcons.Outlined.AccountCircle
 
+        val Add: ImageVector
+            get() = MaterialIcons.Outlined.Add
+
         val AllInbox: ImageVector
             get() = MaterialIcons.Outlined.AllInbox
 
@@ -62,6 +68,12 @@ object Icons {
         val ArrowBack: ImageVector
             get() = MaterialIcons.AutoMirrored.Outlined.ArrowBack
 
+        val KeyboardArrowDown: ImageVector
+            get() = MaterialIcons.Outlined.KeyboardArrowDown
+
+        val KeyboardArrowUp: ImageVector
+            get() = MaterialIcons.Outlined.KeyboardArrowUp
+
         val Check: ImageVector
             get() = MaterialIcons.Outlined.Check
 
diff --git a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItem.kt b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItem.kt
index 5a65b17adcf..0b8247ffedc 100644
--- a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItem.kt
+++ b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItem.kt
@@ -9,6 +9,16 @@ import androidx.compose.ui.text.style.TextOverflow
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelLarge
 import androidx.compose.material3.NavigationDrawerItem as Material3NavigationDrawerItem
 
+/**
+ * A navigation drawer item that can be used in a navigation drawer.
+ *
+ * @param label The content of the label to be displayed in the item as a String.
+ * @param selected Whether this item is selected.
+ * @param onClick The callback to be invoked when this item is clicked.
+ * @param modifier The [Modifier] to be applied to this item.
+ * @param icon An optional composable that represents an icon for this item.
+ * @param badge An optional composable that represents a badge for this item.
+ */
 @Composable
 fun NavigationDrawerItem(
     label: String,
@@ -18,7 +28,7 @@ fun NavigationDrawerItem(
     icon: (@Composable () -> Unit)? = null,
     badge: (@Composable () -> Unit)? = null,
 ) {
-    Material3NavigationDrawerItem(
+    NavigationDrawerItem(
         label = {
             TextLabelLarge(
                 text = label,
@@ -28,14 +38,22 @@ fun NavigationDrawerItem(
         },
         selected = selected,
         onClick = onClick,
-        modifier = Modifier
-            .padding(NavigationDrawerItemDefaults.ItemPadding)
-            .then(modifier),
+        modifier = modifier,
         icon = icon,
         badge = badge,
     )
 }
 
+/**
+ * A navigation drawer item that can be used in a navigation drawer.
+ *
+ * @param label The content of the label to be displayed in the item as AnnotatedString.
+ * @param selected Whether this item is selected.
+ * @param onClick The callback to be invoked when this item is clicked.
+ * @param modifier The [Modifier] to be applied to this item.
+ * @param icon An optional composable that represents an icon for this item.
+ * @param badge An optional composable that represents a badge for this item.
+ */
 @Composable
 fun NavigationDrawerItem(
     label: AnnotatedString,
@@ -45,7 +63,7 @@ fun NavigationDrawerItem(
     icon: (@Composable () -> Unit)? = null,
     badge: (@Composable () -> Unit)? = null,
 ) {
-    Material3NavigationDrawerItem(
+    NavigationDrawerItem(
         label = {
             TextLabelLarge(
                 text = label,
@@ -55,6 +73,35 @@ fun NavigationDrawerItem(
         },
         selected = selected,
         onClick = onClick,
+        modifier = modifier,
+        icon = icon,
+        badge = badge,
+    )
+}
+
+/**
+ * A navigation drawer item that can be used in a navigation drawer.
+ *
+ * @param label The content of the label to be displayed in the item.
+ * @param selected Whether this item is selected.
+ * @param onClick The callback to be invoked when this item is clicked.
+ * @param modifier The [Modifier] to be applied to this item.
+ * @param icon An optional composable that represents an icon for this item.
+ * @param badge An optional composable that represents a badge for this item.
+ */
+@Composable
+fun NavigationDrawerItem(
+    label: @Composable () -> Unit,
+    selected: Boolean,
+    onClick: () -> Unit,
+    modifier: Modifier = Modifier,
+    icon: (@Composable () -> Unit)? = null,
+    badge: (@Composable () -> Unit)? = null,
+) {
+    Material3NavigationDrawerItem(
+        label = label,
+        selected = selected,
+        onClick = onClick,
         modifier = Modifier
             .padding(NavigationDrawerItemDefaults.ItemPadding)
             .then(modifier),
diff --git a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadge.kt b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadge.kt
index d4c331080b5..49785054873 100644
--- a/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadge.kt
+++ b/core/ui/compose/designsystem/src/main/kotlin/app/k9mail/core/ui/compose/designsystem/organism/drawer/NavigationDrawerItemBadge.kt
@@ -28,15 +28,15 @@ fun NavigationDrawerItemBadge(
         modifier = modifier,
         verticalAlignment = Alignment.CenterVertically,
     ) {
+        TextLabelLarge(
+            text = label,
+        )
         if (imageVector != null) {
             Icon(
                 imageVector = imageVector,
                 modifier = Modifier.size(MainTheme.sizes.iconSmall)
-                    .padding(end = MainTheme.spacings.quarter),
+                    .padding(start = MainTheme.spacings.quarter),
             )
         }
-        TextLabelLarge(
-            text = label,
-        )
     }
 }
diff --git a/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt b/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt
index 08e460cbae8..5fcc9c5585d 100644
--- a/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt
+++ b/core/ui/compose/theme2/common/src/main/kotlin/app/k9mail/core/ui/compose/theme2/SelectThemeColorScheme.kt
@@ -6,6 +6,7 @@ import androidx.compose.material3.dynamicDarkColorScheme
 import androidx.compose.material3.dynamicLightColorScheme
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.compositeOver
 import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.platform.LocalContext
 import com.google.android.material.color.MaterialColors
@@ -114,6 +115,23 @@ private fun ColorScheme.toDynamicThemeColorScheme(
     )
 }
 
+/**
+ * The color roles of a theme accent color. They are used to define the main accent color and its complementary colors
+ * in a Material Design theme.
+ *
+ * These roles are used to create a harmonious color scheme that works well together.
+ *
+ * The roles are:
+ * - `accent`: The main accent color.
+ * - `onAccent`: The color used for text and icons on top of the accent color.
+ * - `accentContainer`: A container color that complements the accent color.
+ * - `onAccentContainer`: The color used for text and icons on top of the accent container color.
+ *
+ * @param accent The main accent color.
+ * @param onAccent The color used for text and icons on top of the accent color.
+ * @param accentContainer A container color that complements the accent color.
+ * @param onAccentContainer The color used for text and icons on top of the accent container color.
+ */
 data class ColorRoles(
     val accent: Color,
     val onAccent: Color,
@@ -121,8 +139,24 @@ data class ColorRoles(
     val onAccentContainer: Color,
 )
 
+/**
+ * Returns a harmonized color that is derived from the given color and the target color.
+ *
+ * This function uses Material Colors to harmonize the two colors.
+ *
+ * @param target The target color to harmonize with.
+ * @return A new color that is harmonized with the target color.
+ */
 fun Color.toHarmonizedColor(target: Color) = Color(MaterialColors.harmonize(toArgb(), target.toArgb()))
 
+/**
+ * Returns a [ColorRoles] object that contains the accent colors derived from the given color.
+ *
+ * This function uses Material Colors to retrieve the accent colors based on the provided color.
+ *
+ * @param context The context to use for retrieving the color roles.
+ * @return A [ColorRoles] object containing the accent colors.
+ */
 fun Color.toColorRoles(context: Context): ColorRoles {
     val colorRoles = MaterialColors.getColorRoles(context, this.toArgb())
     return ColorRoles(
@@ -132,3 +166,17 @@ fun Color.toColorRoles(context: Context): ColorRoles {
         onAccentContainer = Color(colorRoles.onAccentContainer),
     )
 }
+
+/**
+ * Returns a surface container color that is a composite of the given color and the theme surface container color.
+ *
+ * The alpha value is applied to the given color before compositing.
+ *
+ * @param alpha The alpha value to apply to the color.
+ * @return A new color that is a composite of the given color and the theme surface container color.
+ */
+@Composable
+fun Color.toSurfaceContainer(alpha: Float): Color {
+    val color = copy(alpha = alpha)
+    return color.compositeOver(MainTheme.colors.surfaceContainer)
+}
diff --git a/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/AvatarOutlined.kt b/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/AvatarOutlined.kt
index f11deb022fa..7a048644750 100644
--- a/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/AvatarOutlined.kt
+++ b/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/AvatarOutlined.kt
@@ -10,17 +10,16 @@ import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleLarge
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextTitleMedium
-import app.k9mail.core.ui.compose.theme2.ColorRoles
 import app.k9mail.core.ui.compose.theme2.MainTheme
-import app.k9mail.core.ui.compose.theme2.toColorRoles
+import app.k9mail.core.ui.compose.theme2.toSurfaceContainer
+
+private const val AVATAR_ALPHA = 0.2f
 
 @Composable
 fun AvatarOutlined(
@@ -30,18 +29,18 @@ fun AvatarOutlined(
     size: AvatarSize = AvatarSize.MEDIUM,
     onClick: (() -> Unit)? = null,
 ) {
-    val context = LocalContext.current
-    val colorRoles = color.toColorRoles(context)
+    val avatarColor = calculateAvatarColor(color)
+    val containerColor = avatarColor.toSurfaceContainer(alpha = AVATAR_ALPHA)
 
     AvatarLayout(
-        color = color,
-        colorRoles = colorRoles,
+        color = containerColor,
+        borderColor = avatarColor,
         onClick = onClick,
         modifier = modifier.size(getAvatarSize(size)),
     ) {
         AvatarPlaceholder(
+            color = avatarColor,
             displayName = name,
-            color = color,
             size = size,
         )
         // TODO: Add image loading
@@ -51,19 +50,19 @@ fun AvatarOutlined(
 @Composable
 private fun AvatarLayout(
     color: Color,
-    colorRoles: ColorRoles,
+    borderColor: Color,
     modifier: Modifier = Modifier,
     onClick: (() -> Unit)? = null,
     content: @Composable BoxScope.() -> Unit,
 ) {
     Surface(
-        color = colorRoles.accentContainer,
+        color = color,
+        shape = CircleShape,
         modifier = modifier
-            .clip(CircleShape)
             .border(
                 width = 2.dp,
                 shape = CircleShape,
-                color = color,
+                color = borderColor,
             )
             .clickable(
                 enabled = onClick != null,
diff --git a/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/CalculateAvatarColor.kt b/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/CalculateAvatarColor.kt
new file mode 100644
index 00000000000..97b1ce3bc83
--- /dev/null
+++ b/feature/account/avatar/impl/src/main/kotlin/net/thunderbird/feature/account/avatar/ui/CalculateAvatarColor.kt
@@ -0,0 +1,15 @@
+package net.thunderbird.feature.account.avatar.ui
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import app.k9mail.core.ui.compose.theme2.toHarmonizedColor
+
+@Composable
+internal fun calculateAvatarColor(accountColor: Color): Color {
+    return if (accountColor == Color.Unspecified) {
+        MainTheme.colors.tertiary
+    } else {
+        accountColor.toHarmonizedColor(MainTheme.colors.surface)
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContentPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContentPreview.kt
index f7f8897c3f9..5a9d1d8fa18 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContentPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContentPreview.kt
@@ -10,8 +10,8 @@ import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import kotlinx.collections.immutable.persistentListOf
 import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_ACCOUNT
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_FOLDER
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.UNIFIED_FOLDER
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.createAccountList
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.createDisplayFolderList
@@ -37,8 +37,8 @@ internal fun DrawerContentWithAccountPreview() {
     PreviewWithTheme {
         DrawerContent(
             state = DrawerContract.State(
-                accounts = persistentListOf(DISPLAY_ACCOUNT),
-                selectedAccountId = DISPLAY_ACCOUNT.id,
+                accounts = persistentListOf(MAIL_DISPLAY_ACCOUNT),
+                selectedAccountId = MAIL_DISPLAY_ACCOUNT.id,
                 folders = persistentListOf(),
             ),
             onEvent = {},
@@ -53,7 +53,7 @@ internal fun DrawerContentWithFoldersPreview() {
         DrawerContent(
             state = DrawerContract.State(
                 accounts = persistentListOf(
-                    DISPLAY_ACCOUNT,
+                    MAIL_DISPLAY_ACCOUNT,
                 ),
                 selectedAccountId = null,
                 folders = persistentListOf(
@@ -73,9 +73,9 @@ internal fun DrawerContentWithSelectedFolderPreview() {
         DrawerContent(
             state = DrawerContract.State(
                 accounts = persistentListOf(
-                    DISPLAY_ACCOUNT,
+                    MAIL_DISPLAY_ACCOUNT,
                 ),
-                selectedAccountId = DISPLAY_ACCOUNT.id,
+                selectedAccountId = MAIL_DISPLAY_ACCOUNT.id,
                 folders = persistentListOf(
                     UNIFIED_FOLDER,
                     DISPLAY_FOLDER,
@@ -94,9 +94,9 @@ internal fun DrawerContentWithSelectedUnifiedFolderPreview() {
         DrawerContent(
             state = DrawerContract.State(
                 accounts = persistentListOf(
-                    DISPLAY_ACCOUNT,
+                    MAIL_DISPLAY_ACCOUNT,
                 ),
-                selectedAccountId = DISPLAY_ACCOUNT.id,
+                selectedAccountId = MAIL_DISPLAY_ACCOUNT.id,
                 folders = persistentListOf(
                     UNIFIED_FOLDER,
                     DISPLAY_FOLDER,
@@ -117,9 +117,9 @@ internal fun DrawerContentSingleAccountPreview() {
         DrawerContent(
             state = DrawerContract.State(
                 accounts = persistentListOf(
-                    DISPLAY_ACCOUNT,
+                    MAIL_DISPLAY_ACCOUNT,
                 ),
-                selectedAccountId = DISPLAY_ACCOUNT.id,
+                selectedAccountId = MAIL_DISPLAY_ACCOUNT.id,
                 folders = displayFolders,
                 selectedFolderId = displayFolders[0].id,
                 config = DrawerConfig(
@@ -142,9 +142,9 @@ internal fun DrawerContentSingleAccountWithAccountSelectionPreview() {
         DrawerContent(
             state = DrawerContract.State(
                 accounts = persistentListOf(
-                    DISPLAY_ACCOUNT,
+                    MAIL_DISPLAY_ACCOUNT,
                 ),
-                selectedAccountId = DISPLAY_ACCOUNT.id,
+                selectedAccountId = MAIL_DISPLAY_ACCOUNT.id,
                 folders = displayFolders,
                 selectedFolderId = displayFolders[0].id,
                 config = DrawerConfig(
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatarPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatarPreview.kt
index b74c6816db5..2e52af58d21 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatarPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatarPreview.kt
@@ -3,14 +3,14 @@ package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.tooling.preview.Preview
 import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_ACCOUNT
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
 
 @Composable
 @Preview(showBackground = true)
 internal fun AccountAvatarPreview() {
     PreviewWithThemes {
         AccountAvatar(
-            account = DISPLAY_ACCOUNT,
+            account = MAIL_DISPLAY_ACCOUNT,
             onClick = {},
             selected = false,
         )
@@ -22,7 +22,7 @@ internal fun AccountAvatarPreview() {
 internal fun AccountAvatarWithUnreadCountPreview() {
     PreviewWithThemes {
         AccountAvatar(
-            account = DISPLAY_ACCOUNT.copy(
+            account = MAIL_DISPLAY_ACCOUNT.copy(
                 unreadMessageCount = 12,
             ),
             onClick = {},
@@ -36,7 +36,7 @@ internal fun AccountAvatarWithUnreadCountPreview() {
 internal fun AccountAvatarWithUnreadCountMaxedPreview() {
     PreviewWithThemes {
         AccountAvatar(
-            account = DISPLAY_ACCOUNT.copy(
+            account = MAIL_DISPLAY_ACCOUNT.copy(
                 unreadMessageCount = 100,
             ),
             onClick = {},
@@ -50,7 +50,7 @@ internal fun AccountAvatarWithUnreadCountMaxedPreview() {
 internal fun AccountAvatarSelectedPreview() {
     PreviewWithThemes {
         AccountAvatar(
-            account = DISPLAY_ACCOUNT.copy(
+            account = MAIL_DISPLAY_ACCOUNT.copy(
                 color = 0xFFFF0000.toInt(),
             ),
             onClick = {},
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemBadgePreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemBadgePreview.kt
new file mode 100644
index 00000000000..8fcdd75137d
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemBadgePreview.kt
@@ -0,0 +1,53 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
+
+@Composable
+@Preview(showBackground = true)
+internal fun AccountListItemBadgePreview() {
+    PreviewWithThemes {
+        AccountListItemBadge(
+            unreadCount = 5,
+            starredCount = 3,
+            showStarredCount = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun AccountListItemBadgeWithMaxUnreadPreview() {
+    PreviewWithThemes {
+        AccountListItemBadge(
+            unreadCount = 999,
+            starredCount = 0,
+            showStarredCount = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun AccountListItemBadgeWithStarsPreview() {
+    PreviewWithThemes {
+        AccountListItemBadge(
+            unreadCount = 5,
+            starredCount = 3,
+            showStarredCount = true,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun AccountListItemBadgeWithStarsAndMaxCountPreview() {
+    PreviewWithThemes {
+        AccountListItemBadge(
+            unreadCount = 5,
+            starredCount = 999,
+            showStarredCount = true,
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemPreview.kt
index 0a6331b7f7b..bb2e4d457c6 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemPreview.kt
@@ -3,16 +3,17 @@ package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.tooling.preview.Preview
 import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_ACCOUNT
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
 
 @Composable
 @Preview(showBackground = true)
 internal fun AccountListItemPreview() {
     PreviewWithThemes {
         AccountListItem(
-            account = DISPLAY_ACCOUNT,
+            account = MAIL_DISPLAY_ACCOUNT,
             onClick = { },
             selected = false,
+            showStarredCount = false,
         )
     }
 }
@@ -22,9 +23,10 @@ internal fun AccountListItemPreview() {
 internal fun AccountListItemSelectedPreview() {
     PreviewWithThemes {
         AccountListItem(
-            account = DISPLAY_ACCOUNT,
+            account = MAIL_DISPLAY_ACCOUNT,
             onClick = { },
             selected = true,
+            showStarredCount = false,
         )
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListPreview.kt
index 2c3d44bc468..aab0b7d97c2 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListPreview.kt
@@ -4,7 +4,7 @@ import androidx.compose.runtime.Composable
 import androidx.compose.ui.tooling.preview.Preview
 import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
 import kotlinx.collections.immutable.persistentListOf
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_ACCOUNT
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
 
 @Composable
 @Preview(showBackground = true)
@@ -12,12 +12,11 @@ internal fun AccountListPreview() {
     PreviewWithTheme {
         AccountList(
             accounts = persistentListOf(
-                DISPLAY_ACCOUNT,
+                MAIL_DISPLAY_ACCOUNT,
             ),
             selectedAccount = null,
             onAccountClick = { },
-            onSettingsClick = { },
-            onSyncAllAccountsClick = { },
+            showStarredCount = false,
         )
     }
 }
@@ -28,12 +27,11 @@ internal fun AccountListWithSelectedPreview() {
     PreviewWithTheme {
         AccountList(
             accounts = persistentListOf(
-                DISPLAY_ACCOUNT,
+                MAIL_DISPLAY_ACCOUNT,
             ),
-            selectedAccount = DISPLAY_ACCOUNT,
+            selectedAccount = MAIL_DISPLAY_ACCOUNT,
             onAccountClick = { },
-            onSettingsClick = { },
-            onSyncAllAccountsClick = { },
+            showStarredCount = false,
         )
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountViewPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountViewPreview.kt
index a4ded2e76d3..244b0c9cef8 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountViewPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountViewPreview.kt
@@ -3,52 +3,28 @@ package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.tooling.preview.Preview
 import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_ACCOUNT
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
 
 @Composable
 @Preview(showBackground = true)
 internal fun AccountViewPreview() {
     PreviewWithThemes {
         AccountView(
-            account = DISPLAY_ACCOUNT,
+            account = MAIL_DISPLAY_ACCOUNT,
             onClick = {},
-            showAvatar = false,
+            showAccountSelection = true,
         )
     }
 }
 
 @Composable
 @Preview(showBackground = true)
-internal fun AccountViewWithColorPreview() {
+internal fun AccountViewWithoutAccountPreview() {
     PreviewWithThemes {
         AccountView(
-            account = DISPLAY_ACCOUNT,
+            account = MAIL_DISPLAY_ACCOUNT,
             onClick = {},
-            showAvatar = false,
-        )
-    }
-}
-
-@Composable
-@Preview(showBackground = true)
-internal fun AccountViewWithLongDisplayName() {
-    PreviewWithThemes {
-        AccountView(
-            account = DISPLAY_ACCOUNT,
-            onClick = {},
-            showAvatar = false,
-        )
-    }
-}
-
-@Composable
-@Preview(showBackground = true)
-internal fun AccountViewWithLongEmailPreview() {
-    PreviewWithThemes {
-        AccountView(
-            account = DISPLAY_ACCOUNT,
-            onClick = {},
-            showAvatar = false,
+            showAccountSelection = false,
         )
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadgePreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadgePreview.kt
index 87f126aa05a..ae0466cf9a7 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadgePreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadgePreview.kt
@@ -1,8 +1,6 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.folder
 
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.mutableStateOf
-import androidx.compose.runtime.remember
 import androidx.compose.ui.tooling.preview.Preview
 import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
 
@@ -101,16 +99,3 @@ internal fun FolderListItemBadgeWith1000CountsPreview() {
         )
     }
 }
-
-@Composable
-@Preview(showBackground = true)
-internal fun FolderListItemBadgeWithExpandableStatePreview() {
-    PreviewWithThemes {
-        FolderListItemBadge(
-            unreadCount = 1000,
-            starredCount = 1000,
-            showStarredCount = true,
-            expandableState = remember { mutableStateOf(false) },
-        )
-    }
-}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemPreview.kt
index fca0ddb3b58..cc4ea0586f2 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemPreview.kt
@@ -16,7 +16,7 @@ internal fun FolderListItemPreview() {
     PreviewWithThemes {
         FolderListItem(
             displayFolder = DISPLAY_FOLDER,
-            selected = false,
+            selectedFolderId = "unknown",
             showStarredCount = false,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
@@ -30,7 +30,7 @@ internal fun FolderListItemSelectedPreview() {
     PreviewWithThemes {
         FolderListItem(
             displayFolder = DISPLAY_FOLDER,
-            selected = true,
+            selectedFolderId = DISPLAY_FOLDER.id,
             showStarredCount = false,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
@@ -44,7 +44,7 @@ internal fun FolderListItemWithStarredPreview() {
     PreviewWithThemes {
         FolderListItem(
             displayFolder = DISPLAY_FOLDER,
-            selected = false,
+            selectedFolderId = "unknown",
             showStarredCount = true,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
@@ -58,7 +58,7 @@ internal fun FolderListItemWithStarredSelectedPreview() {
     PreviewWithThemes {
         FolderListItem(
             displayFolder = DISPLAY_FOLDER,
-            selected = true,
+            selectedFolderId = DISPLAY_FOLDER.id,
             showStarredCount = true,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
@@ -76,7 +76,7 @@ internal fun FolderListItemWithInboxFolderPreview() {
                     type = FolderType.INBOX,
                 ),
             ),
-            selected = false,
+            selectedFolderId = "unknown",
             showStarredCount = true,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
@@ -90,7 +90,7 @@ internal fun FolderListItemWithUnifiedFolderPreview() {
     PreviewWithThemes {
         FolderListItem(
             displayFolder = UNIFIED_FOLDER,
-            selected = false,
+            selectedFolderId = "unknown",
             showStarredCount = false,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
@@ -105,10 +105,25 @@ internal fun FolderListItemWithUnifiedFolderSelectedPreview() {
         FolderListItem(
             displayFolder = UNIFIED_FOLDER,
             treeFolder = DISPLAY_TREE_FOLDER_WITH_UNIFIED_FOLDER,
-            selected = false,
+            selectedFolderId = UNIFIED_FOLDER.id,
             showStarredCount = false,
             onClick = {},
             folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
         )
     }
 }
+
+@Composable
+@Preview(showBackground = true)
+internal fun FolderListItemStarredCountPreview() {
+    PreviewWithThemes {
+        FolderListItem(
+            displayFolder = UNIFIED_FOLDER,
+            treeFolder = DISPLAY_TREE_FOLDER_WITH_UNIFIED_FOLDER,
+            selectedFolderId = null,
+            showStarredCount = true,
+            onClick = {},
+            folderNameFormatter = FolderNameFormatter(LocalContext.current.resources),
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItemPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItemPreview.kt
index 032250f1f20..6c42510ea3e 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItemPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItemPreview.kt
@@ -12,7 +12,7 @@ internal fun SettingListItemPreview() {
         SettingListItem(
             label = "Settings",
             onClick = {},
-            imageVector = Icons.Outlined.Settings,
+            icon = Icons.Outlined.Settings,
         )
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListPreview.kt
index 5a48e4925db..182c3ed882f 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListPreview.kt
@@ -8,22 +8,22 @@ import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
 @Preview(showBackground = true)
 internal fun SettingListPreview() {
     PreviewWithTheme {
-        SettingList(
-            onAccountSelectorClick = {},
+        FolderSettingList(
             onManageFoldersClick = {},
-            showAccountSelector = false,
+            onSettingsClick = {},
+            isUnifiedAccount = false,
         )
     }
 }
 
 @Composable
 @Preview(showBackground = true)
-internal fun SettingListShowAccountSelectorPreview() {
+internal fun SettingListWithUnifiedAccountPreview() {
     PreviewWithTheme {
-        SettingList(
-            onAccountSelectorClick = {},
+        FolderSettingList(
             onManageFoldersClick = {},
-            showAccountSelector = true,
+            onSettingsClick = {},
+            isUnifiedAccount = true,
         )
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountIndicatorPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountIndicatorPreview.kt
similarity index 62%
rename from feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountIndicatorPreview.kt
rename to feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountIndicatorPreview.kt
index b4a7ca13a21..f82afaff0fa 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountIndicatorPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountIndicatorPreview.kt
@@ -1,20 +1,19 @@
-package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
 
 import androidx.compose.foundation.layout.height
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.toArgb
 import androidx.compose.ui.tooling.preview.Preview
 import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
 import app.k9mail.core.ui.compose.theme2.MainTheme
 
 @Composable
 @Preview(showBackground = true)
-internal fun AccountIndicatorPreview() {
+internal fun SideRailAccountIndicatorPreview() {
     PreviewWithThemes {
-        AccountIndicator(
-            accountColor = 0,
+        SideRailAccountIndicator(
+            accountColor = Color.Unspecified,
             modifier = Modifier.height(MainTheme.spacings.double),
         )
     }
@@ -22,10 +21,10 @@ internal fun AccountIndicatorPreview() {
 
 @Composable
 @Preview(showBackground = true)
-internal fun AccountIndicatorPreviewWithYellowAccountColor() {
+internal fun SideRailAccountIndicatorPreviewWithYellowAccountColor() {
     PreviewWithThemes {
-        AccountIndicator(
-            accountColor = Color.Yellow.toArgb(),
+        SideRailAccountIndicator(
+            accountColor = Color.Yellow,
             modifier = Modifier.height(MainTheme.spacings.double),
         )
     }
@@ -33,10 +32,10 @@ internal fun AccountIndicatorPreviewWithYellowAccountColor() {
 
 @Composable
 @Preview(showBackground = true)
-internal fun AccountIndicatorPreviewWithGrayAccountColor() {
+internal fun SideRailAccountIndicatorPreviewWithGrayAccountColor() {
     PreviewWithThemes {
-        AccountIndicator(
-            accountColor = Color.Gray.toArgb(),
+        SideRailAccountIndicator(
+            accountColor = Color.Gray,
             modifier = Modifier.height(MainTheme.spacings.double),
         )
     }
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListItemPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListItemPreview.kt
new file mode 100644
index 00000000000..c4a9656c0d6
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListItemPreview.kt
@@ -0,0 +1,30 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountListItemPreview() {
+    PreviewWithThemes {
+        SideRailAccountListItem(
+            account = MAIL_DISPLAY_ACCOUNT,
+            onClick = { },
+            selected = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountListItemSelectedPreview() {
+    PreviewWithThemes {
+        SideRailAccountListItem(
+            account = MAIL_DISPLAY_ACCOUNT,
+            onClick = { },
+            selected = true,
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListPreview.kt
new file mode 100644
index 00000000000..6ce318ee009
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListPreview.kt
@@ -0,0 +1,39 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
+import kotlinx.collections.immutable.persistentListOf
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountListPreview() {
+    PreviewWithTheme {
+        SideRailAccountList(
+            accounts = persistentListOf(
+                MAIL_DISPLAY_ACCOUNT,
+            ),
+            selectedAccount = null,
+            onAccountClick = { },
+            onSettingsClick = { },
+            onSyncAllAccountsClick = { },
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountListWithSelectedPreview() {
+    PreviewWithTheme {
+        SideRailAccountList(
+            accounts = persistentListOf(
+                MAIL_DISPLAY_ACCOUNT,
+            ),
+            selectedAccount = MAIL_DISPLAY_ACCOUNT,
+            onAccountClick = { },
+            onSettingsClick = { },
+            onSyncAllAccountsClick = { },
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountViewPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountViewPreview.kt
new file mode 100644
index 00000000000..0c8593b6892
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountViewPreview.kt
@@ -0,0 +1,54 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import app.k9mail.core.ui.compose.designsystem.PreviewWithThemes
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountViewPreview() {
+    PreviewWithThemes {
+        SideRailAccountView(
+            account = MAIL_DISPLAY_ACCOUNT,
+            onClick = {},
+            showAvatar = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountViewWithColorPreview() {
+    PreviewWithThemes {
+        SideRailAccountView(
+            account = MAIL_DISPLAY_ACCOUNT,
+            onClick = {},
+            showAvatar = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountViewWithLongDisplayName() {
+    PreviewWithThemes {
+        SideRailAccountView(
+            account = MAIL_DISPLAY_ACCOUNT,
+            onClick = {},
+            showAvatar = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailAccountViewWithLongEmailPreview() {
+    PreviewWithThemes {
+        SideRailAccountView(
+            account = MAIL_DISPLAY_ACCOUNT,
+            onClick = {},
+            showAvatar = false,
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingItemPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingItemPreview.kt
similarity index 75%
rename from feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingItemPreview.kt
rename to feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingItemPreview.kt
index 01475c07e57..6c132a434f9 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingItemPreview.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingItemPreview.kt
@@ -1,4 +1,4 @@
-package net.thunderbird.feature.navigation.drawer.dropdown.ui.setting
+package net.thunderbird.feature.navigation.drawer.siderail.ui.setting
 
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.tooling.preview.Preview
@@ -7,9 +7,9 @@ import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
 
 @Composable
 @Preview(showBackground = true)
-internal fun SettingItemPreview() {
+internal fun SideRailSettingItemPreview() {
     PreviewWithThemes {
-        SettingItem(
+        SideRailSettingItem(
             icon = Icons.Outlined.Settings,
             label = "Setting",
             onClick = {},
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingListPreview.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingListPreview.kt
new file mode 100644
index 00000000000..fd893eb423c
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingListPreview.kt
@@ -0,0 +1,29 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.setting
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.tooling.preview.Preview
+import app.k9mail.core.ui.compose.designsystem.PreviewWithTheme
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailSettingListPreview() {
+    PreviewWithTheme {
+        SideRailSettingList(
+            onAccountSelectorClick = {},
+            onManageFoldersClick = {},
+            showAccountSelector = false,
+        )
+    }
+}
+
+@Composable
+@Preview(showBackground = true)
+internal fun SideRailSettingListShowAccountSelectorPreview() {
+    PreviewWithTheme {
+        SideRailSettingList(
+            onAccountSelectorClick = {},
+            onManageFoldersClick = {},
+            showAccountSelector = true,
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/DropDownDrawer.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/DropDownDrawer.kt
index d68cf3781c4..998207b3817 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/DropDownDrawer.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/DropDownDrawer.kt
@@ -11,8 +11,9 @@ import net.thunderbird.core.featureflag.FeatureFlagProvider
 import net.thunderbird.core.ui.theme.api.FeatureThemeProvider
 import net.thunderbird.feature.navigation.drawer.api.NavigationDrawer
 import net.thunderbird.feature.navigation.drawer.api.R
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.createDisplayAccountFolderId
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.createMailDisplayAccountFolderId
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerView
 import org.koin.core.component.KoinComponent
 import org.koin.core.component.inject
@@ -22,6 +23,7 @@ internal data class FolderDrawerState(
     val selectedFolderId: String? = null,
 )
 
+@Suppress("LongParameterList")
 class DropDownDrawer(
     override val parent: AppCompatActivity,
     private val openAccount: (accountId: String) -> Unit,
@@ -29,6 +31,7 @@ class DropDownDrawer(
     private val openUnifiedFolder: () -> Unit,
     private val openManageFolders: () -> Unit,
     private val openSettings: () -> Unit,
+    private val openAddAccount: () -> Unit,
     createDrawerListener: () -> DrawerLayout.DrawerListener,
 ) : NavigationDrawer, KoinComponent {
 
@@ -54,6 +57,7 @@ class DropDownDrawer(
                     openUnifiedFolder = openUnifiedFolder,
                     openManageFolders = openManageFolders,
                     openSettings = openSettings,
+                    openAddAccount = openAddAccount,
                     featureFlagProvider = featureFlagProvider,
                     closeDrawer = { close() },
                 )
@@ -74,7 +78,7 @@ class DropDownDrawer(
         drawerState.update {
             it.copy(
                 selectedAccountUuid = accountUuid,
-                selectedFolderId = createDisplayAccountFolderId(accountUuid, folderId),
+                selectedFolderId = createMailDisplayAccountFolderId(accountUuid, folderId),
             )
         }
     }
@@ -82,7 +86,8 @@ class DropDownDrawer(
     override fun selectUnifiedInbox() {
         drawerState.update {
             it.copy(
-                selectedFolderId = DisplayUnifiedFolderType.INBOX.id,
+                selectedAccountUuid = UnifiedDisplayAccount.UNIFIED_ACCOUNT_ID,
+                selectedFolderId = UnifiedDisplayFolderType.INBOX.id,
             )
         }
     }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepository.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepository.kt
index 622897cf5c0..707f4828d10 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepository.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepository.kt
@@ -4,8 +4,8 @@ import app.k9mail.legacy.message.controller.MessageCountsProvider
 import kotlinx.coroutines.flow.Flow
 import kotlinx.coroutines.flow.map
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 import net.thunderbird.feature.search.LocalMessageSearch
 import net.thunderbird.feature.search.api.MessageSearchField
 import net.thunderbird.feature.search.api.SearchAttribute
@@ -14,20 +14,20 @@ internal class UnifiedFolderRepository(
     private val messageCountsProvider: MessageCountsProvider,
 ) : DomainContract.UnifiedFolderRepository {
 
-    override fun getDisplayUnifiedFolderFlow(unifiedFolderType: DisplayUnifiedFolderType): Flow<DisplayUnifiedFolder> {
+    override fun getUnifiedDisplayFolderFlow(unifiedFolderType: UnifiedDisplayFolderType): Flow<UnifiedDisplayFolder> {
         return messageCountsProvider.getMessageCountsFlow(createUnifiedFolderSearch(unifiedFolderType)).map {
-            DisplayUnifiedFolder(
+            UnifiedDisplayFolder(
                 id = UNIFIED_INBOX_ID,
-                unifiedType = DisplayUnifiedFolderType.INBOX,
+                unifiedType = UnifiedDisplayFolderType.INBOX,
                 unreadMessageCount = it.unread,
                 starredMessageCount = it.starred,
             )
         }
     }
 
-    private fun createUnifiedFolderSearch(unifiedFolderType: DisplayUnifiedFolderType): LocalMessageSearch {
+    private fun createUnifiedFolderSearch(unifiedFolderType: UnifiedDisplayFolderType): LocalMessageSearch {
         return when (unifiedFolderType) {
-            DisplayUnifiedFolderType.INBOX -> return createUnifiedInboxSearch()
+            UnifiedDisplayFolderType.INBOX -> return createUnifiedInboxSearch()
         }
     }
 
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/DomainContract.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/DomainContract.kt
index 54cca215e10..85be41f0bab 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/DomainContract.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/DomainContract.kt
@@ -5,8 +5,8 @@ import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalCon
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 
 internal interface DomainContract {
 
@@ -20,11 +20,11 @@ internal interface DomainContract {
         }
 
         fun interface GetDisplayAccounts {
-            operator fun invoke(): Flow<List<DisplayAccount>>
+            operator fun invoke(showUnifiedAccount: Boolean): Flow<List<DisplayAccount>>
         }
 
         fun interface GetDisplayFoldersForAccount {
-            operator fun invoke(accountId: String, includeUnifiedFolders: Boolean): Flow<List<DisplayFolder>>
+            operator fun invoke(accountId: String): Flow<List<DisplayFolder>>
         }
 
         fun interface GetDisplayTreeFolder {
@@ -47,6 +47,6 @@ internal interface DomainContract {
     }
 
     interface UnifiedFolderRepository {
-        fun getDisplayUnifiedFolderFlow(unifiedFolderType: DisplayUnifiedFolderType): Flow<DisplayUnifiedFolder>
+        fun getUnifiedDisplayFolderFlow(unifiedFolderType: UnifiedDisplayFolderType): Flow<UnifiedDisplayFolder>
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccount.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccount.kt
index 32fa62b8c97..342783c5a80 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccount.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccount.kt
@@ -1,10 +1,7 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.domain.entity
 
-internal data class DisplayAccount(
-    val id: String,
-    val name: String,
-    val email: String,
-    val color: Int,
-    val unreadMessageCount: Int,
-    val starredMessageCount: Int,
-)
+sealed interface DisplayAccount {
+    val id: String
+    val unreadMessageCount: Int
+    val starredMessageCount: Int
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayAccount.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayAccount.kt
new file mode 100644
index 00000000000..9a5cff0d3ed
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayAccount.kt
@@ -0,0 +1,10 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.domain.entity
+
+internal data class MailDisplayAccount(
+    override val id: String,
+    val name: String,
+    val email: String,
+    val color: Int,
+    override val unreadMessageCount: Int,
+    override val starredMessageCount: Int,
+) : DisplayAccount
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccountFolder.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt
similarity index 63%
rename from feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccountFolder.kt
rename to feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt
index 5e32dbef7f0..ee14c89efd4 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayAccountFolder.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/MailDisplayFolder.kt
@@ -2,16 +2,16 @@ package net.thunderbird.feature.navigation.drawer.dropdown.domain.entity
 
 import net.thunderbird.feature.mail.folder.api.Folder
 
-internal data class DisplayAccountFolder(
+internal data class MailDisplayFolder(
     val accountId: String,
     val folder: Folder,
     val isInTopGroup: Boolean,
     override val unreadMessageCount: Int,
     override val starredMessageCount: Int,
 ) : DisplayFolder {
-    override val id: String = createDisplayAccountFolderId(accountId, folder.id)
+    override val id: String = createMailDisplayAccountFolderId(accountId, folder.id)
 }
 
-fun createDisplayAccountFolderId(accountId: String, folderId: Long): String {
+fun createMailDisplayAccountFolderId(accountId: String, folderId: Long): String {
     return "${accountId}_$folderId"
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayAccount.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayAccount.kt
new file mode 100644
index 00000000000..745788d0381
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayAccount.kt
@@ -0,0 +1,12 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.domain.entity
+
+data class UnifiedDisplayAccount(
+    override val unreadMessageCount: Int,
+    override val starredMessageCount: Int,
+) : DisplayAccount {
+    override val id: String = UNIFIED_ACCOUNT_ID
+
+    companion object {
+        const val UNIFIED_ACCOUNT_ID = "unified_account"
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayUnifiedFolder.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayFolder.kt
similarity index 69%
rename from feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayUnifiedFolder.kt
rename to feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayFolder.kt
index 3278266291c..7d9c0770062 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayUnifiedFolder.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayFolder.kt
@@ -1,8 +1,8 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.domain.entity
 
-internal data class DisplayUnifiedFolder(
+internal data class UnifiedDisplayFolder(
     override val id: String,
-    val unifiedType: DisplayUnifiedFolderType,
+    val unifiedType: UnifiedDisplayFolderType,
     override val unreadMessageCount: Int,
     override val starredMessageCount: Int,
 ) : DisplayFolder
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayUnifiedFolderType.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayFolderType.kt
similarity index 83%
rename from feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayUnifiedFolderType.kt
rename to feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayFolderType.kt
index 52917df1468..b8a54d7d758 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/DisplayUnifiedFolderType.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/entity/UnifiedDisplayFolderType.kt
@@ -5,7 +5,7 @@ package net.thunderbird.feature.navigation.drawer.dropdown.domain.entity
  *
  * The id is unique for each unified folder type.
  */
-internal enum class DisplayUnifiedFolderType(
+internal enum class UnifiedDisplayFolderType(
     val id: String,
 ) {
     INBOX("unified_inbox"),
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayAccounts.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayAccounts.kt
index 797630724d9..f716984b507 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayAccounts.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayAccounts.kt
@@ -18,6 +18,8 @@ import net.thunderbird.core.android.account.AccountManager
 import net.thunderbird.core.android.account.LegacyAccount
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UseCase
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
 
 internal class GetDisplayAccounts(
     private val accountManager: AccountManager,
@@ -27,7 +29,7 @@ internal class GetDisplayAccounts(
 ) : UseCase.GetDisplayAccounts {
 
     @OptIn(ExperimentalCoroutinesApi::class)
-    override fun invoke(): Flow<List<DisplayAccount>> {
+    override fun invoke(showUnifiedAccount: Boolean): Flow<List<DisplayAccount>> {
         return accountManager.getAccountsFlow()
             .flatMapLatest { accounts ->
                 val messageCountsFlows: List<Flow<MessageCounts>> = accounts.map { account ->
@@ -35,8 +37,8 @@ internal class GetDisplayAccounts(
                 }
 
                 combine(messageCountsFlows) { messageCountsList ->
-                    messageCountsList.mapIndexed { index, messageCounts ->
-                        DisplayAccount(
+                    val displayAccounts = messageCountsList.mapIndexed { index, messageCounts ->
+                        MailDisplayAccount(
                             id = accounts[index].uuid,
                             name = accounts[index].displayName,
                             email = accounts[index].email,
@@ -45,10 +47,25 @@ internal class GetDisplayAccounts(
                             starredMessageCount = messageCounts.starred,
                         )
                     }
+
+                    if (showUnifiedAccount) {
+                        withUnifiedAccount(displayAccounts)
+                    } else {
+                        displayAccounts
+                    }
                 }
             }
     }
 
+    private fun withUnifiedAccount(accounts: List<DisplayAccount>): List<DisplayAccount> {
+        val unified = UnifiedDisplayAccount(
+            unreadMessageCount = accounts.sumOf { it.unreadMessageCount },
+            starredMessageCount = accounts.sumOf { it.starredMessageCount },
+        )
+
+        return listOf(unified) + accounts
+    }
+
     private fun getMessageCountsFlow(account: LegacyAccount): Flow<MessageCounts> {
         return callbackFlow {
             send(messageCountsProvider.getMessageCounts(account))
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccount.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccount.kt
index 45659d64660..b925b9a484c 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccount.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccount.kt
@@ -2,25 +2,28 @@ package net.thunderbird.feature.navigation.drawer.dropdown.domain.usecase
 
 import app.k9mail.legacy.ui.folder.DisplayFolderRepository
 import kotlinx.coroutines.flow.Flow
-import kotlinx.coroutines.flow.combine
-import kotlinx.coroutines.flow.flowOf
 import kotlinx.coroutines.flow.map
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UnifiedFolderRepository
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UseCase
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 
 internal class GetDisplayFoldersForAccount(
     private val displayFolderRepository: DisplayFolderRepository,
     private val unifiedFolderRepository: UnifiedFolderRepository,
 ) : UseCase.GetDisplayFoldersForAccount {
-    override fun invoke(accountId: String, includeUnifiedFolders: Boolean): Flow<List<DisplayFolder>> {
-        val accountFoldersFlow: Flow<List<DisplayFolder>> =
-            displayFolderRepository.getDisplayFoldersFlow(accountId).map { displayFolders ->
+    override fun invoke(accountId: String): Flow<List<DisplayFolder>> {
+        if (accountId == UnifiedDisplayAccount.UNIFIED_ACCOUNT_ID) {
+            return unifiedFolderRepository.getUnifiedDisplayFolderFlow(UnifiedDisplayFolderType.INBOX)
+                .map { displayUnifiedFolder ->
+                    listOf(displayUnifiedFolder)
+                }
+        } else {
+            return displayFolderRepository.getDisplayFoldersFlow(accountId).map { displayFolders ->
                 displayFolders.map { displayFolder ->
-                    DisplayAccountFolder(
+                    MailDisplayFolder(
                         accountId = accountId,
                         folder = displayFolder.folder,
                         isInTopGroup = displayFolder.isInTopGroup,
@@ -29,21 +32,6 @@ internal class GetDisplayFoldersForAccount(
                     )
                 }
             }
-
-        val unifiedFoldersFlow: Flow<List<DisplayFolder>> = if (includeUnifiedFolders) {
-            unifiedFolderRepository.getDisplayUnifiedFolderFlow(DisplayUnifiedFolderType.INBOX)
-                .map { displayUnifiedFolder ->
-                    listOf(displayUnifiedFolder)
-                }
-        } else {
-            flowOf(emptyList<DisplayUnifiedFolder>())
-        }
-
-        return combine(
-            accountFoldersFlow,
-            unifiedFoldersFlow,
-        ) { accountFolders, unifiedFolders ->
-            unifiedFolders + accountFolders
         }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt
index e45f91bae25..05ade0c3e12 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolder.kt
@@ -5,16 +5,16 @@ import kotlinx.collections.immutable.toImmutableList
 import net.thunderbird.feature.mail.folder.api.Folder
 import net.thunderbird.feature.mail.folder.api.FolderType
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UseCase
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
 
 internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder {
     private var placeholderCounter = 0L
 
     override fun invoke(folders: List<DisplayFolder>, maxDepth: Int): DisplayTreeFolder {
-        val unifiedFolderTreeList = folders.filterIsInstance<DisplayUnifiedFolder>().map {
+        val unifiedFolderTreeList = folders.filterIsInstance<UnifiedDisplayFolder>().map {
             DisplayTreeFolder(
                 displayFolder = it,
                 displayName = it.unifiedType.id,
@@ -24,7 +24,7 @@ internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder {
             )
         }
 
-        val accountFolders = folders.filterIsInstance<DisplayAccountFolder>().map {
+        val accountFolders = folders.filterIsInstance<MailDisplayFolder>().map {
             val path = flattenPath(it.folder.name, maxDepth)
             println("Flattened path for ${it.folder.name} → $path")
             path to it
@@ -51,7 +51,7 @@ internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder {
     }
 
     private fun buildAccountFolderTree(
-        paths: List<Pair<List<String>, DisplayAccountFolder>>,
+        paths: List<Pair<List<String>, MailDisplayFolder>>,
         parentPath: String = "",
     ): List<DisplayTreeFolder> {
         return paths.groupBy { it.first.getOrNull(0) ?: "(Unnamed)" }
@@ -87,9 +87,9 @@ internal class GetDisplayTreeFolder : UseCase.GetDisplayTreeFolder {
             }
     }
 
-    private fun createPlaceholderFolder(name: String): DisplayAccountFolder {
+    private fun createPlaceholderFolder(name: String): MailDisplayFolder {
         placeholderCounter += 1
-        return DisplayAccountFolder(
+        return MailDisplayFolder(
             accountId = "placeholder",
             folder = Folder(
                 id = placeholderCounter,
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContent.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContent.kt
index 75ca1643404..5acae62c39c 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContent.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContent.kt
@@ -1,27 +1,36 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui
 
-import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.slideInVertically
+import androidx.compose.animation.slideOutVertically
+import androidx.compose.animation.togetherWith
 import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.navigationBars
 import androidx.compose.foundation.layout.statusBars
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
+import app.k9mail.core.ui.compose.theme2.MainTheme
 import net.thunderbird.core.ui.compose.common.modifier.testTagAsResourceId
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Event
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.State
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.AccountList
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.AccountView
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.getDisplayCutOutHorizontalInsetPadding
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.DRAWER_WIDTH
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getAdditionalWidth
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.folder.FolderList
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.setting.SettingList
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.setting.AccountSettingList
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.setting.FolderSettingList
 
 @Composable
 internal fun DrawerContent(
@@ -37,52 +46,111 @@ internal fun DrawerContent(
             .width(DRAWER_WIDTH + additionalWidth)
             .fillMaxHeight()
             .testTagAsResourceId("DrawerContent"),
+        color = MainTheme.colors.surfaceContainerLow,
     ) {
         val selectedAccount = state.accounts.firstOrNull { it.id == state.selectedAccountId }
-        Column {
+        val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+
+        Column(
+            modifier = Modifier
+                .windowInsetsPadding(WindowInsets.navigationBars)
+                .windowInsetsPadding(horizontalInsetPadding),
+        ) {
             selectedAccount?.let {
                 AccountView(
                     account = selectedAccount,
-                    onClick = { onEvent(Event.OnAccountViewClick(selectedAccount)) },
-                    showAvatar = state.config.showAccountSelector,
+                    onClick = { onEvent(Event.OnAccountSelectorClick) },
+                    showAccountSelection = state.showAccountSelection,
                 )
 
                 DividerHorizontal()
             }
-            Row {
-                AnimatedVisibility(
-                    visible = state.config.showAccountSelector,
-                ) {
-                    AccountList(
-                        accounts = state.accounts,
+            AnimatedContent(
+                targetState = state.showAccountSelection,
+                label = "AccountSelectorVisibility",
+                transitionSpec = {
+                    if (targetState) {
+                        slideInVertically { -it } togetherWith slideOutVertically { it }
+                    } else {
+                        slideInVertically { it } togetherWith slideOutVertically { -it }
+                    }
+                },
+            ) { targetState ->
+                if (targetState) {
+                    AccountContent(
+                        state = state,
+                        onEvent = onEvent,
                         selectedAccount = selectedAccount,
-                        onAccountClick = { onEvent(Event.OnAccountClick(it)) },
-                        onSyncAllAccountsClick = { onEvent(Event.OnSyncAllAccounts) },
-                        onSettingsClick = { onEvent(Event.OnSettingsClick) },
-                    )
-                }
-                Column(
-                    modifier = Modifier
-                        .weight(1f)
-                        .fillMaxSize(),
-                ) {
-                    FolderList(
-                        rootFolder = state.rootFolder,
-                        selectedFolder = state.folders.firstOrNull { it.id == state.selectedFolderId },
-                        onFolderClick = { folder ->
-                            onEvent(Event.OnFolderClick(folder))
-                        },
-                        showStarredCount = state.config.showStarredCount,
-                        modifier = Modifier.weight(1f),
                     )
-                    DividerHorizontal()
-                    SettingList(
-                        onAccountSelectorClick = { onEvent(Event.OnAccountSelectorClick) },
-                        onManageFoldersClick = { onEvent(Event.OnManageFoldersClick) },
-                        showAccountSelector = state.config.showAccountSelector,
+                } else {
+                    FolderContent(
+                        state = state,
+                        onEvent = onEvent,
                     )
                 }
             }
         }
     }
 }
+
+@Composable
+private fun AccountContent(
+    state: State,
+    onEvent: (Event) -> Unit,
+    selectedAccount: DisplayAccount?,
+) {
+    Surface(
+        color = MainTheme.colors.surfaceContainerLow,
+    ) {
+        Column(
+            modifier = Modifier.fillMaxSize(),
+        ) {
+            AccountList(
+                accounts = state.accounts,
+                selectedAccount = selectedAccount,
+                onAccountClick = { onEvent(Event.OnAccountClick(it)) },
+                showStarredCount = state.config.showStarredCount,
+                modifier = Modifier.weight(1f),
+            )
+            DividerHorizontal()
+            AccountSettingList(
+                onAddAccountClick = { onEvent(Event.OnAddAccountClick) },
+                onSyncAllAccountsClick = { onEvent(Event.OnSyncAllAccounts) },
+            )
+        }
+    }
+}
+
+@Composable
+private fun FolderContent(
+    state: State,
+    onEvent: (Event) -> Unit,
+) {
+    val isUnifiedAccount = remember(state.selectedAccountId) {
+        state.accounts.any { it.id == state.selectedAccountId && it is UnifiedDisplayAccount }
+    }
+
+    Surface(
+        color = MainTheme.colors.surfaceContainerLow,
+    ) {
+        Column(
+            modifier = Modifier.fillMaxSize(),
+        ) {
+            FolderList(
+                rootFolder = state.rootFolder,
+                selectedFolder = state.selectedFolder,
+                onFolderClick = { folder ->
+                    onEvent(Event.OnFolderClick(folder))
+                },
+                showStarredCount = state.config.showStarredCount,
+                modifier = Modifier.weight(1f),
+            )
+            DividerHorizontal()
+            FolderSettingList(
+                onManageFoldersClick = { onEvent(Event.OnManageFoldersClick) },
+                onSettingsClick = { onEvent(Event.OnSettingsClick) },
+                isUnifiedAccount = isUnifiedAccount,
+            )
+        }
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContract.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContract.kt
index 02503ead34d..7a03a3e3ed8 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContract.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerContract.kt
@@ -31,6 +31,8 @@ internal interface DrawerContract {
         ),
         val folders: ImmutableList<DisplayFolder> = persistentListOf(),
         val selectedFolderId: String? = null,
+        val selectedFolder: DisplayFolder? = null,
+        val showAccountSelection: Boolean = false,
         val isLoading: Boolean = false,
     )
 
@@ -45,6 +47,7 @@ internal interface DrawerContract {
         data object OnSettingsClick : Event
         data object OnSyncAccount : Event
         data object OnSyncAllAccounts : Event
+        data object OnAddAccountClick : Event
     }
 
     sealed interface Effect {
@@ -53,6 +56,7 @@ internal interface DrawerContract {
         data object OpenUnifiedFolder : Effect
         data object OpenManageFolders : Effect
         data object OpenSettings : Effect
+        data object OpenAddAccount : Effect
         data object CloseDrawer : Effect
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerView.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerView.kt
index 913dd8c6059..47c5af6fbd8 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerView.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerView.kt
@@ -12,6 +12,7 @@ import net.thunderbird.feature.navigation.drawer.dropdown.FolderDrawerState
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Effect
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Event
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.ViewModel
+import net.thunderbird.feature.navigation.drawer.siderail.ui.SideRailDrawerContent
 import org.koin.androidx.compose.koinViewModel
 
 @Suppress("LongParameterList")
@@ -23,6 +24,7 @@ internal fun DrawerView(
     openUnifiedFolder: () -> Unit,
     openManageFolders: () -> Unit,
     openSettings: () -> Unit,
+    openAddAccount: () -> Unit,
     closeDrawer: () -> Unit,
     featureFlagProvider: FeatureFlagProvider,
     viewModel: ViewModel = koinViewModel<DrawerViewModel>(),
@@ -38,6 +40,7 @@ internal fun DrawerView(
             Effect.OpenUnifiedFolder -> openUnifiedFolder()
             is Effect.OpenManageFolders -> openManageFolders()
             is Effect.OpenSettings -> openSettings()
+            Effect.OpenAddAccount -> openAddAccount()
             Effect.CloseDrawer -> closeDrawer()
         }
     }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt
index b3fd2063b94..793e71437e5 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModel.kt
@@ -16,10 +16,10 @@ import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UseCase
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Effect
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Event
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.State
@@ -30,6 +30,7 @@ import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.View
  * for the ripple effect to finish.
  */
 private const val DRAWER_CLOSE_DELAY = 250L
+private const val ACCOUNT_CLOSE_DELAY = 150L
 
 @Suppress("MagicNumber", "TooManyFunctions")
 internal class DrawerViewModel(
@@ -65,10 +66,15 @@ internal class DrawerViewModel(
         }
     }
 
+    @OptIn(ExperimentalCoroutinesApi::class)
     private suspend fun loadAccounts() {
-        getDisplayAccounts().collectLatest { accounts ->
-            updateAccounts(accounts)
-        }
+        state.map { it.config.showUnifiedFolders }
+            .distinctUntilChanged()
+            .flatMapLatest { showUnifiedFolders ->
+                getDisplayAccounts(showUnifiedFolders)
+            }.collectLatest { accounts ->
+                updateAccounts(accounts)
+            }
     }
 
     private fun updateAccounts(accounts: List<DisplayAccount>) {
@@ -86,32 +92,65 @@ internal class DrawerViewModel(
     @OptIn(ExperimentalCoroutinesApi::class)
     private suspend fun loadFolders() {
         state.map {
-            it.selectedAccountId?.let { accountId ->
-                Pair(accountId, it.config.showUnifiedFolders)
-            }
+            it.selectedAccountId
         }.filterNotNull()
             .distinctUntilChanged()
-            .flatMapLatest { (accountId, showUnifiedInbox) ->
-                getDisplayFoldersForAccount(accountId, showUnifiedInbox)
+            .flatMapLatest { accountId ->
+                getDisplayFoldersForAccount(accountId)
             }.collect { folders ->
                 updateFolders(folders, getDisplayTreeFolder(folders, maxNestingLevel))
             }
     }
 
     private fun updateFolders(displayFolders: List<DisplayFolder>, rootFolder: DisplayTreeFolder) {
-        val selectedFolder = displayFolders.find {
+        // First try to find the folder in the flat list
+        var selectedFolder = displayFolders.find {
             it.id == state.value.selectedFolderId
-        } ?: displayFolders.firstOrNull()
+        }
+
+        // If not found, try to find it in the tree hierarchy
+        if (selectedFolder == null) {
+            selectedFolder = findFolderById(rootFolder, state.value.selectedFolderId)
+        }
+
+        // If still not found, default to the first folder
+        if (selectedFolder == null) {
+            selectedFolder = displayFolders.firstOrNull() ?: rootFolder.children.firstOrNull()?.displayFolder
+        }
 
         updateState {
             it.copy(
                 rootFolder = rootFolder,
                 folders = displayFolders.toImmutableList(),
                 selectedFolderId = selectedFolder?.id,
+                selectedFolder = selectedFolder,
             )
         }
     }
 
+    /**
+     * Recursively searches for a folder with the given ID in the DisplayTreeFolder hierarchy.
+     */
+    private fun findFolderById(treeFolder: DisplayTreeFolder, folderId: String?): DisplayFolder? {
+        if (folderId == null) return null
+
+        return if (treeFolder.displayFolder?.id == folderId) {
+            treeFolder.displayFolder
+        } else {
+            // Recursively search in children
+            var folder: DisplayFolder? = null
+            for (child in treeFolder.children) {
+                val found = findFolderById(child, folderId)
+                if (found != null) {
+                    folder = found
+                    break
+                }
+            }
+
+            folder
+        }
+    }
+
     override fun event(event: Event) {
         when (event) {
             is Event.SelectAccount -> selectAccount(event.accountId)
@@ -126,30 +165,55 @@ internal class DrawerViewModel(
             }
 
             Event.OnAccountSelectorClick -> {
-                saveDrawerConfig(
-                    state.value.config.copy(showAccountSelector = state.value.config.showAccountSelector.not()),
-                ).launchIn(viewModelScope)
+                viewModelScope.launch {
+                    saveDrawerConfig(
+                        state.value.config.copy(showAccountSelector = state.value.config.showAccountSelector.not()),
+                    ).launchIn(viewModelScope)
+                    delay(ACCOUNT_CLOSE_DELAY)
+                    updateState {
+                        it.copy(showAccountSelection = it.showAccountSelection.not())
+                    }
+                }
             }
 
             Event.OnManageFoldersClick -> emitEffect(Effect.OpenManageFolders)
             Event.OnSettingsClick -> emitEffect(Effect.OpenSettings)
             Event.OnSyncAccount -> onSyncAccount()
             Event.OnSyncAllAccounts -> onSyncAllAccounts()
+            Event.OnAddAccountClick -> emitEffect(Effect.OpenAddAccount)
         }
     }
 
     private fun selectAccount(accountId: String?) {
-        updateState {
-            it.copy(
-                selectedAccountId = accountId,
-            )
+        if (accountId != state.value.selectedAccountId) {
+            viewModelScope.launch {
+                updateState {
+                    it.copy(
+                        selectedAccountId = accountId,
+                    )
+                }
+                delay(ACCOUNT_CLOSE_DELAY)
+                updateState {
+                    it.copy(
+                        showAccountSelection = false,
+                    )
+                }
+            }
         }
     }
 
     private fun selectFolder(folderId: String?) {
+        // Find the folder with the given ID
+        val folder = folderId?.let {
+            state.value.folders.find { it.id == folderId }
+                // If not found, try to find it in the tree hierarchy
+                ?: findFolderById(state.value.rootFolder, folderId)
+        }
+
         updateState {
             it.copy(
                 selectedFolderId = folderId,
+                selectedFolder = folder,
             )
         }
     }
@@ -172,14 +236,17 @@ internal class DrawerViewModel(
     }
 
     private fun openFolder(folder: DisplayFolder) {
-        if (folder is DisplayAccountFolder) {
+        // Update the selected folder ID in the state
+        selectFolder(folder.id)
+
+        if (folder is MailDisplayFolder) {
             emitEffect(
                 Effect.OpenFolder(
                     accountId = folder.accountId,
                     folderId = folder.folder.id,
                 ),
             )
-        } else if (folder is DisplayUnifiedFolder) {
+        } else if (folder is UnifiedDisplayFolder) {
             emitEffect(Effect.OpenUnifiedFolder)
         }
 
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatar.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatar.kt
index de84fd9dac8..ba0ef7e9956 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatar.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountAvatar.kt
@@ -11,9 +11,10 @@ import androidx.compose.ui.unit.dp
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelSmall
 import app.k9mail.core.ui.compose.theme2.ColorRoles
-import app.k9mail.core.ui.compose.theme2.toColorRoles
 import net.thunderbird.feature.account.avatar.ui.Avatar
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountColor
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountName
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.labelForCount
 
 @Composable
@@ -23,9 +24,10 @@ internal fun AccountAvatar(
     modifier: Modifier = Modifier,
     onClick: ((DisplayAccount) -> Unit)? = null,
 ) {
-    val context = LocalContext.current
-    val accountColor = calculateAccountColor(account.color)
-    val accountColorRoles = accountColor.toColorRoles(context)
+    val name = getDisplayAccountName(account)
+    val color = getDisplayAccountColor(account)
+    val accountColor = rememberCalculatedAccountColor(color)
+    val accountColorRoles = rememberCalculatedAccountColorRoles(accountColor)
 
     Box(
         modifier = modifier,
@@ -33,7 +35,7 @@ internal fun AccountAvatar(
     ) {
         Avatar(
             color = accountColor,
-            name = account.name,
+            name = name,
             onClick = onClick?.let { { onClick(account) } },
             selected = selected,
         )
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountList.kt
index 9358558c4cd..9f51eb08998 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountList.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountList.kt
@@ -1,82 +1,42 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 
-import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.foundation.layout.fillMaxHeight
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.rememberLazyListState
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.unit.dp
-import app.k9mail.core.ui.compose.designsystem.atom.Surface
-import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
 import app.k9mail.core.ui.compose.theme2.MainTheme
 import kotlinx.collections.immutable.ImmutableList
-import net.thunderbird.feature.navigation.drawer.dropdown.R
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.setting.SettingItem
 
 @Composable
 internal fun AccountList(
     accounts: ImmutableList<DisplayAccount>,
     selectedAccount: DisplayAccount?,
     onAccountClick: (DisplayAccount) -> Unit,
-    onSyncAllAccountsClick: () -> Unit,
-    onSettingsClick: () -> Unit,
+    showStarredCount: Boolean,
     modifier: Modifier = Modifier,
 ) {
-    Surface(
-        modifier = modifier,
-        color = MainTheme.colors.surfaceContainer,
-    ) {
-        val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+    val listState = rememberLazyListState()
 
-        Column(
-            modifier = Modifier
-                .fillMaxHeight()
-                .windowInsetsPadding(WindowInsets.navigationBars)
-                .windowInsetsPadding(horizontalInsetPadding)
-                .width(MainTheme.sizes.large),
-        ) {
-            LazyColumn(
-                modifier = Modifier.weight(1f),
-                contentPadding = PaddingValues(vertical = MainTheme.spacings.default),
-            ) {
-                items(
-                    items = accounts,
-                    key = { account -> account.id },
-                ) { account ->
-                    AccountListItem(
-                        account = account,
-                        onClick = { onAccountClick(account) },
-                        selected = selectedAccount == account,
-                    )
-                }
-            }
-            Column(
-                modifier = Modifier.padding(vertical = MainTheme.spacings.oneHalf),
-            ) {
-                SettingItem(
-                    icon = Icons.Outlined.Sync,
-                    label = stringResource(id = R.string.navigation_drawer_dropdown_action_sync_all_accounts),
-                    onClick = onSyncAllAccountsClick,
-                )
-                // Hack to compensate the column placement at an uneven coordinate, caused by the 1.dp divider.
-                Spacer(modifier = Modifier.height(7.dp))
-                SettingItem(
-                    icon = Icons.Outlined.Settings,
-                    label = stringResource(id = R.string.navigation_drawer_dropdown_action_settings),
-                    onClick = onSettingsClick,
-                )
-            }
+    LazyColumn(
+        state = listState,
+        modifier = modifier
+            .fillMaxWidth(),
+        contentPadding = PaddingValues(vertical = MainTheme.spacings.default),
+    ) {
+        items(
+            items = accounts,
+            key = { account -> account.id },
+        ) { account ->
+            AccountListItem(
+                account = account,
+                onClick = { onAccountClick(account) },
+                selected = selectedAccount == account,
+                showStarredCount = showStarredCount,
+            )
         }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItem.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItem.kt
index ffed8f8709a..7cbcf7029e1 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItem.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItem.kt
@@ -1,30 +1,82 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
 import androidx.compose.runtime.Composable
-import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.withStyle
+import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge
+import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium
+import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItem
 import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.account.avatar.ui.AvatarOutlined
+import net.thunderbird.feature.account.avatar.ui.AvatarSize
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountColor
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountName
 
 @Composable
 internal fun AccountListItem(
     account: DisplayAccount,
     onClick: (DisplayAccount) -> Unit,
     selected: Boolean,
+    showStarredCount: Boolean,
     modifier: Modifier = Modifier,
 ) {
-    Box(
-        modifier = modifier.width(MainTheme.sizes.large)
-            .padding(vertical = MainTheme.spacings.half),
-        contentAlignment = Alignment.Center,
+    val color = getDisplayAccountColor(account)
+    val name = getDisplayAccountName(account)
+
+    NavigationDrawerItem(
+        label = { AccountLabel(account = account) },
+        selected = selected,
+        onClick = { onClick(account) },
+        modifier = modifier.fillMaxWidth()
+            .height(MainTheme.sizes.large),
+        icon = {
+            AvatarOutlined(
+                color = color,
+                name = name,
+                size = AvatarSize.MEDIUM,
+            )
+        },
+        badge = {
+            AccountListItemBadge(
+                unreadCount = account.unreadMessageCount,
+                starredCount = account.starredMessageCount,
+                showStarredCount = showStarredCount,
+            )
+        },
+    )
+}
+
+@Composable
+private fun AccountLabel(
+    account: DisplayAccount,
+    modifier: Modifier = Modifier,
+) {
+    val name = getDisplayAccountName(account)
+
+    Column(
+        verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.half),
+        modifier = modifier.fillMaxWidth(),
     ) {
-        AccountAvatar(
-            account = account,
-            onClick = onClick,
-            selected = selected,
+        TextBodyLarge(
+            text = buildAnnotatedString {
+                withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) {
+                    append(name)
+                }
+            },
         )
+        if (account is MailDisplayAccount && account.name != account.email) {
+            TextBodyMedium(
+                text = account.email,
+            )
+        }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemBadge.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemBadge.kt
new file mode 100644
index 00000000000..5c1ae3bb709
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountListItemBadge.kt
@@ -0,0 +1,64 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.width
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItemBadge
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.labelForCount
+
+@Composable
+internal fun AccountListItemBadge(
+    unreadCount: Int,
+    starredCount: Int,
+    showStarredCount: Boolean,
+    modifier: Modifier = Modifier,
+) {
+    AccountCountAndStarredBadge(
+        unreadCount = unreadCount,
+        starredCount = starredCount,
+        showStarredCount = showStarredCount,
+        modifier = modifier,
+    )
+}
+
+@Composable
+private fun AccountCountAndStarredBadge(
+    unreadCount: Int,
+    starredCount: Int,
+    showStarredCount: Boolean,
+    modifier: Modifier = Modifier,
+) {
+    Column(
+        modifier = modifier,
+        horizontalAlignment = Alignment.End,
+    ) {
+        val resources = LocalContext.current.resources
+
+        if (unreadCount > 0) {
+            NavigationDrawerItemBadge(
+                label = labelForCount(
+                    count = unreadCount,
+                    resources = resources,
+                ),
+                imageVector = if (showStarredCount) Icons.Filled.Dot else null,
+            )
+        }
+
+        if (showStarredCount && starredCount > 0) {
+            Spacer(modifier = Modifier.Companion.width(MainTheme.spacings.half))
+            NavigationDrawerItemBadge(
+                label = labelForCount(
+                    count = starredCount,
+                    resources = resources,
+                ),
+                imageVector = Icons.Filled.Star,
+            )
+        }
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountView.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountView.kt
index dfde5df7a23..ba2cf4ad6e2 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountView.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountView.kt
@@ -1,102 +1,142 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 
-import androidx.compose.animation.AnimatedVisibility
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.IntrinsicSize
 import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.WindowInsetsSides
-import androidx.compose.foundation.layout.defaultMinSize
 import androidx.compose.foundation.layout.displayCutout
-import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.only
 import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.layout.windowInsetsPadding
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.withStyle
 import androidx.compose.ui.unit.LayoutDirection
-import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge
 import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium
 import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.account.avatar.ui.AvatarOutlined
+import net.thunderbird.feature.account.avatar.ui.AvatarSize
+import net.thunderbird.feature.navigation.drawer.dropdown.R
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.AnimatedExpandIcon
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountColor
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountName
 
-@Suppress("LongMethod")
 @Composable
 internal fun AccountView(
     account: DisplayAccount,
     onClick: () -> Unit,
-    showAvatar: Boolean,
+    showAccountSelection: Boolean,
     modifier: Modifier = Modifier,
 ) {
-    Row(
-        modifier = Modifier.fillMaxWidth()
-            .height(intrinsicSize = IntrinsicSize.Max),
-        verticalAlignment = Alignment.CenterVertically,
+    AccountLayout(
+        onClick = onClick,
+        modifier = modifier,
     ) {
-        AnimatedVisibility(visible = showAvatar) {
-            Surface(
-                color = MainTheme.colors.surfaceContainer,
-                modifier = Modifier.fillMaxHeight(),
-            ) {
-                val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+        if (showAccountSelection) {
+            AccountSelectionView()
+        } else {
+            AccountSelectedView(
+                account = account,
+            )
+        }
+
+        AnimatedExpandIcon(
+            isExpanded = showAccountSelection,
+            modifier = Modifier.padding(end = MainTheme.spacings.double),
+            tint = MainTheme.colors.onSurfaceVariant,
+        )
+    }
+}
+
+@Composable
+private fun RowScope.AccountSelectedView(
+    account: DisplayAccount,
+) {
+    val color = getDisplayAccountColor(account)
+    val name = getDisplayAccountName(account)
 
-                Box(
-                    modifier = Modifier
-                        .windowInsetsPadding(horizontalInsetPadding)
-                        .width(MainTheme.sizes.large),
-                    contentAlignment = Alignment.Center,
-                ) {
-                    AccountAvatar(
-                        account = account,
-                        onClick = null,
-                        selected = false,
-                    )
+    AvatarOutlined(
+        color = color,
+        name = name,
+        size = AvatarSize.MEDIUM,
+    )
+    Column(
+        verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.half),
+        modifier = Modifier
+            .fillMaxWidth()
+            .weight(1f),
+    ) {
+        TextBodyLarge(
+            text = buildAnnotatedString {
+                withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) {
+                    append(name)
                 }
-            }
+            },
+        )
+        if (account is MailDisplayAccount && account.name != account.email) {
+            TextBodyMedium(
+                text = account.email,
+            )
         }
+    }
+}
+
+@Composable
+private fun RowScope.AccountSelectionView() {
+    TextBodyLarge(
+        text = buildAnnotatedString {
+            withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) {
+                append(stringResource(R.string.navigation_drawer_dropdown_avount_view_selection_title))
+            }
+        },
+        modifier = Modifier
+            .fillMaxWidth()
+            .weight(1f),
+    )
+}
+
+@Composable
+private fun AccountLayout(
+    onClick: () -> Unit,
+    modifier: Modifier = Modifier,
+    content: @Composable RowScope.() -> Unit,
+) {
+    val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+
+    Box(
+        modifier = modifier
+            .windowInsetsPadding(horizontalInsetPadding)
+            .clickable(onClick = onClick)
+            .padding(
+                top = MainTheme.spacings.default,
+                start = MainTheme.spacings.triple,
+                end = MainTheme.spacings.double,
+                bottom = MainTheme.spacings.default,
+            ),
+    ) {
         Row(
-            modifier = modifier
-                .clickable(onClick = onClick)
-                .height(intrinsicSize = IntrinsicSize.Max)
+            modifier = Modifier
                 .fillMaxWidth()
-                .defaultMinSize(minHeight = MainTheme.sizes.large)
-                .padding(
-                    top = MainTheme.spacings.double,
-                    start = MainTheme.spacings.double,
-                    end = MainTheme.spacings.triple,
-                    bottom = MainTheme.spacings.double,
-                ),
+                .height(MainTheme.sizes.large),
             verticalAlignment = Alignment.CenterVertically,
+            horizontalArrangement = Arrangement.spacedBy(MainTheme.spacings.double),
         ) {
-            AccountIndicator(
-                accountColor = account.color,
-                modifier = Modifier
-                    .fillMaxHeight()
-                    .padding(end = MainTheme.spacings.oneHalf),
-            )
-            Column(
-                verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.half),
-            ) {
-                TextBodyLarge(
-                    text = account.name,
-                    color = MainTheme.colors.onSurface,
-                )
-                if (account.name != account.email) {
-                    TextBodyMedium(
-                        text = account.email,
-                        color = MainTheme.colors.onSurfaceVariant,
-                    )
-                }
-            }
+            content()
         }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColor.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColor.kt
index 96760de0498..d99ec4cf19d 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColor.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColor.kt
@@ -1,15 +1,31 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
 
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
 import androidx.compose.ui.graphics.Color
 import app.k9mail.core.ui.compose.theme2.MainTheme
 import app.k9mail.core.ui.compose.theme2.toHarmonizedColor
 
+/**
+ * Calculates the account color based on the provided account color and surface color.
+ *
+ * If the account color is unspecified, it returns the fallback color.
+ * Otherwise, it harmonizes the account color with the surface color.
+ *
+ * @param accountColor The color of the account.
+ * @param fallbackColor The fallback color to use if the account color is unspecified.
+ */
 @Composable
-internal fun calculateAccountColor(accountColor: Int): Color {
-    return if (accountColor == 0) {
-        MainTheme.colors.primary
-    } else {
-        Color(accountColor).toHarmonizedColor(MainTheme.colors.surface)
+internal fun rememberCalculatedAccountColor(
+    accountColor: Color,
+    fallbackColor: Color = MainTheme.colors.primary,
+): Color {
+    val surfaceColor = MainTheme.colors.surface
+    return remember(accountColor, surfaceColor, fallbackColor) {
+        if (accountColor == Color.Unspecified) {
+            fallbackColor
+        } else {
+            accountColor.toHarmonizedColor(surfaceColor)
+        }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColorRoles.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColorRoles.kt
new file mode 100644
index 00000000000..19d00b7ae1e
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/CalculateAccountColorRoles.kt
@@ -0,0 +1,27 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import app.k9mail.core.ui.compose.theme2.ColorRoles
+import app.k9mail.core.ui.compose.theme2.toColorRoles
+
+/**
+ * Calculates the color roles for the given account color.
+ *
+ * This function is used to derive the color roles for an account based on its color and
+ * use remember to avoid unnecessary recomputations.
+ *
+ * @param accountColor The color of the account.
+ */
+@Composable
+internal fun rememberCalculatedAccountColorRoles(
+    accountColor: Color,
+): ColorRoles {
+    val context = LocalContext.current
+
+    return remember(accountColor) {
+        accountColor.toColorRoles(context)
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/common/AnimatedExpandIcon.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/common/AnimatedExpandIcon.kt
new file mode 100644
index 00000000000..fe392c84dda
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/common/AnimatedExpandIcon.kt
@@ -0,0 +1,30 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.common
+
+import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.rotate
+import androidx.compose.ui.graphics.Color
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+
+@Composable
+internal fun AnimatedExpandIcon(
+    isExpanded: Boolean,
+    modifier: Modifier = Modifier,
+    tint: Color? = null,
+) {
+    val rotationAngle by animateFloatAsState(
+        targetValue = if (isExpanded) 180f else 0f,
+        label = "rotationAngle",
+    )
+
+    Icon(
+        imageVector = Icons.Outlined.KeyboardArrowDown,
+        contentDescription = null,
+        tint = tint,
+        modifier = modifier
+            .rotate(rotationAngle),
+    )
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/common/DisplayAccountUtils.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/common/DisplayAccountUtils.kt
new file mode 100644
index 00000000000..54257ff1472
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/common/DisplayAccountUtils.kt
@@ -0,0 +1,38 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.common
+
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.R
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
+
+@Composable
+internal fun getDisplayAccountColor(account: DisplayAccount): Color {
+    return when (account) {
+        is UnifiedDisplayAccount -> {
+            MainTheme.colors.onSurfaceVariant
+        }
+        is MailDisplayAccount -> {
+            Color(account.color)
+        }
+
+        else -> throw IllegalArgumentException("Unknown account type: ${account::class.java.simpleName}")
+    }
+}
+
+@Composable
+internal fun getDisplayAccountName(account: DisplayAccount): String {
+    return when (account) {
+        is UnifiedDisplayAccount -> {
+            stringResource(R.string.navigation_drawer_dropdown_unified_account_title)
+        }
+        is MailDisplayAccount -> {
+            account.name
+        }
+
+        else -> throw IllegalArgumentException("Unknown account type: ${account::class.java.simpleName}")
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderList.kt
index b60aa3d5cb6..50883e52551 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderList.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderList.kt
@@ -2,7 +2,6 @@ package net.thunderbird.feature.navigation.drawer.dropdown.ui.folder
 
 import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.LazyColumn
 import androidx.compose.foundation.lazy.items
 import androidx.compose.foundation.lazy.rememberLazyListState
@@ -10,12 +9,10 @@ import androidx.compose.runtime.Composable
 import androidx.compose.runtime.remember
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.LocalContext
-import app.k9mail.core.ui.compose.designsystem.atom.DividerHorizontal
 import app.k9mail.core.ui.compose.theme2.MainTheme
 import app.k9mail.legacy.ui.folder.FolderNameFormatter
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
 
 @Composable
 internal fun FolderList(
@@ -31,8 +28,7 @@ internal fun FolderList(
 
     LazyColumn(
         state = listState,
-        modifier = modifier
-            .fillMaxWidth(),
+        modifier = modifier.fillMaxWidth(),
         contentPadding = PaddingValues(vertical = MainTheme.spacings.default),
     ) {
         items(
@@ -45,22 +41,11 @@ internal fun FolderList(
                     "Null DisplayFolder for folder ${folder.displayName}"
                 },
                 treeFolder = folder,
-                selected = currentDisplayFolder == selectedFolder,
                 showStarredCount = showStarredCount,
                 onClick = onFolderClick,
                 folderNameFormatter = folderNameFormatter,
                 selectedFolderId = selectedFolder?.id,
             )
-            if (currentDisplayFolder is DisplayUnifiedFolder) {
-                DividerHorizontal(
-                    modifier = Modifier
-                        .fillMaxWidth()
-                        .padding(
-                            vertical = MainTheme.spacings.default,
-                            horizontal = MainTheme.spacings.triple,
-                        ),
-                )
-            }
         }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt
index 4a41986a0c5..9261aad3726 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItem.kt
@@ -1,42 +1,52 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.folder
 
 import androidx.compose.animation.animateContentSize
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.MutableState
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
 import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.style.TextOverflow
 import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon
 import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+import app.k9mail.core.ui.compose.designsystem.atom.text.TextLabelLarge
 import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItem
 import app.k9mail.core.ui.compose.theme2.MainTheme
 import app.k9mail.legacy.ui.folder.FolderNameFormatter
 import net.thunderbird.feature.mail.folder.api.FolderType
 import net.thunderbird.feature.navigation.drawer.dropdown.R
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.AnimatedExpandIcon
 
 @Composable
 internal fun FolderListItem(
     displayFolder: DisplayFolder,
-    selected: Boolean,
     onClick: (DisplayFolder) -> Unit,
     showStarredCount: Boolean,
     folderNameFormatter: FolderNameFormatter,
+    selectedFolderId: String?,
     modifier: Modifier = Modifier,
     treeFolder: DisplayTreeFolder? = null,
     parentPrefix: String? = "",
-    selectedFolderId: String? = null,
     indentationLevel: Int = 1,
 ) {
-    var isExpanded = rememberSaveable { mutableStateOf(false) }
+    val isExpanded = rememberSaveable { mutableStateOf(false) }
 
     var unreadCount = displayFolder.unreadMessageCount
     var starredCount = displayFolder.starredMessageCount
@@ -52,8 +62,20 @@ internal fun FolderListItem(
             .animateContentSize(),
     ) {
         NavigationDrawerItem(
-            label = mapFolderName(displayFolder, folderNameFormatter, parentPrefix),
-            selected = selected,
+            label = {
+                NavigationDrawerLabel(
+                    label = mapFolderName(displayFolder, folderNameFormatter, parentPrefix),
+                    expandableState = if (treeFolder !== null && treeFolder.children.isNotEmpty()) isExpanded else null,
+                    badge = {
+                        FolderListItemBadge(
+                            unreadCount = unreadCount,
+                            starredCount = starredCount,
+                            showStarredCount = showStarredCount,
+                        )
+                    },
+                )
+            },
+            selected = selectedFolderId == displayFolder.id,
             onClick = { onClick(displayFolder) },
             modifier = Modifier.fillMaxWidth(),
             icon = {
@@ -61,26 +83,18 @@ internal fun FolderListItem(
                     imageVector = mapFolderIcon(displayFolder),
                 )
             },
-            badge = {
-                FolderListItemBadge(
-                    unreadCount = unreadCount,
-                    starredCount = starredCount,
-                    showStarredCount = showStarredCount,
-                    expandableState = if (treeFolder !== null && treeFolder.children.isNotEmpty()) isExpanded else null,
-                )
-            },
         )
 
         // Managing children
         if (!isExpanded.value) return
         if (treeFolder === null) return
         for (child in treeFolder.children) {
-            var displayParent = treeFolder.displayFolder
-            var displayChild = child.displayFolder
-            if (displayChild === null) continue
+            val displayParent = treeFolder.displayFolder
+            val displayChild = child.displayFolder
+            if (displayChild == null) continue
             FolderListItem(
                 displayFolder = displayChild,
-                selected = selectedFolderId?.let { displayChild.id == selectedFolderId } == true,
+                selectedFolderId = selectedFolderId,
                 showStarredCount = showStarredCount,
                 onClick = onClick,
                 folderNameFormatter = folderNameFormatter,
@@ -88,13 +102,52 @@ internal fun FolderListItem(
                     .fillMaxWidth()
                     .padding(start = MainTheme.spacings.double * indentationLevel),
                 treeFolder = child,
-                parentPrefix = if (displayParent is DisplayAccountFolder) displayParent.folder.name else null,
+                parentPrefix = if (displayParent is MailDisplayFolder) displayParent.folder.name else null,
                 indentationLevel = indentationLevel + 1,
             )
         }
     }
 }
 
+@Composable
+private fun NavigationDrawerLabel(
+    label: String,
+    badge: @Composable () -> Unit,
+    modifier: Modifier = Modifier,
+    expandableState: MutableState<Boolean>? = null,
+) {
+    Row(
+        modifier = modifier
+            .fillMaxWidth(),
+        verticalAlignment = Alignment.CenterVertically,
+    ) {
+        TextLabelLarge(
+            text = label,
+            overflow = TextOverflow.Ellipsis,
+            maxLines = 2,
+            modifier = Modifier.weight(1f),
+        )
+        if (expandableState?.value != null) {
+            Box(
+                modifier = Modifier
+                    .size(MainTheme.sizes.iconAvatar)
+                    .padding(
+                        start = MainTheme.spacings.quarter,
+                        end = MainTheme.spacings.quarter,
+                    )
+                    .clip(CircleShape)
+                    .clickable(onClick = { expandableState.value = !expandableState.value }),
+                contentAlignment = Alignment.Center,
+            ) {
+                AnimatedExpandIcon(
+                    isExpanded = expandableState.value,
+                )
+            }
+        }
+        badge()
+    }
+}
+
 @Composable
 private fun mapFolderName(
     displayFolder: DisplayFolder,
@@ -102,28 +155,28 @@ private fun mapFolderName(
     parentPrefix: String? = "",
 ): String {
     return when (displayFolder) {
-        is DisplayAccountFolder -> folderNameFormatter.displayName(displayFolder.folder).removePrefix("$parentPrefix/")
-        is DisplayUnifiedFolder -> mapUnifiedFolderName(displayFolder)
+        is MailDisplayFolder -> folderNameFormatter.displayName(displayFolder.folder).removePrefix("$parentPrefix/")
+        is UnifiedDisplayFolder -> mapUnifiedFolderName(displayFolder)
         else -> throw IllegalArgumentException("Unknown display folder: $displayFolder")
     }
 }
 
 @Composable
-private fun mapUnifiedFolderName(folder: DisplayUnifiedFolder): String {
+private fun mapUnifiedFolderName(folder: UnifiedDisplayFolder): String {
     return when (folder.unifiedType) {
-        DisplayUnifiedFolderType.INBOX -> stringResource(R.string.navigation_drawer_dropdown_unified_inbox_title)
+        UnifiedDisplayFolderType.INBOX -> stringResource(R.string.navigation_drawer_dropdown_unified_inbox_title)
     }
 }
 
 private fun mapFolderIcon(folder: DisplayFolder): ImageVector {
     return when (folder) {
-        is DisplayAccountFolder -> mapDisplayAccountFolderIcon(folder)
-        is DisplayUnifiedFolder -> mapDisplayUnifiedFolderIcon(folder)
+        is MailDisplayFolder -> mapDisplayAccountFolderIcon(folder)
+        is UnifiedDisplayFolder -> mapDisplayUnifiedFolderIcon(folder)
         else -> throw IllegalArgumentException("Unknown display folder type: $folder")
     }
 }
 
-private fun mapDisplayAccountFolderIcon(folder: DisplayAccountFolder): ImageVector {
+private fun mapDisplayAccountFolderIcon(folder: MailDisplayFolder): ImageVector {
     return when (folder.folder.type) {
         FolderType.INBOX -> Icons.Outlined.Inbox
         FolderType.OUTBOX -> Icons.Outlined.Outbox
@@ -136,8 +189,8 @@ private fun mapDisplayAccountFolderIcon(folder: DisplayAccountFolder): ImageVect
     }
 }
 
-private fun mapDisplayUnifiedFolderIcon(folder: DisplayUnifiedFolder): ImageVector {
+private fun mapDisplayUnifiedFolderIcon(folder: UnifiedDisplayFolder): ImageVector {
     when (folder.unifiedType) {
-        DisplayUnifiedFolderType.INBOX -> return Icons.Outlined.AllInbox
+        UnifiedDisplayFolderType.INBOX -> return Icons.Outlined.AllInbox
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadge.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadge.kt
index 5d96d20f8d6..8eada0b22c9 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadge.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/folder/FolderListItemBadge.kt
@@ -1,21 +1,12 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.folder
 
-import androidx.compose.foundation.clickable
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.size
 import androidx.compose.foundation.layout.width
-import androidx.compose.foundation.shape.CircleShape
 import androidx.compose.runtime.Composable
-import androidx.compose.runtime.MutableState
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.clip
 import androidx.compose.ui.platform.LocalContext
-import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon
 import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
 import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerItemBadge
 import app.k9mail.core.ui.compose.theme2.MainTheme
@@ -27,14 +18,11 @@ internal fun FolderListItemBadge(
     starredCount: Int,
     showStarredCount: Boolean,
     modifier: Modifier = Modifier,
-    expandableState: MutableState<Boolean>? = null,
 ) {
     FolderCountAndStarredBadge(
         unreadCount = unreadCount,
         starredCount = starredCount,
         showStarredCount = showStarredCount,
-        onClick = { expandableState?.value = !expandableState.value },
-        isExpanded = expandableState?.value,
         modifier = modifier,
     )
 }
@@ -44,13 +32,11 @@ private fun FolderCountAndStarredBadge(
     unreadCount: Int,
     starredCount: Int,
     showStarredCount: Boolean,
-    onClick: () -> Unit,
     modifier: Modifier = Modifier,
-    isExpanded: Boolean? = null,
 ) {
-    Row(
+    Column(
         modifier = modifier,
-        verticalAlignment = Alignment.CenterVertically,
+        horizontalAlignment = Alignment.End,
     ) {
         val resources = LocalContext.current.resources
 
@@ -74,21 +60,5 @@ private fun FolderCountAndStarredBadge(
                 imageVector = Icons.Filled.Star,
             )
         }
-
-        if (isExpanded != null) {
-            Box(
-                modifier = Modifier
-                    .height(MainTheme.sizes.iconAvatar)
-                    .padding(start = MainTheme.spacings.quarter)
-                    .clip(CircleShape)
-                    .clickable(onClick = onClick),
-                contentAlignment = Alignment.Center,
-            ) {
-                Icon(
-                    imageVector = if (isExpanded) Icons.Outlined.ExpandLess else Icons.Outlined.ExpandMore,
-                    modifier = Modifier.size(MainTheme.sizes.iconLarge),
-                )
-            }
-        }
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/AccountSettingList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/AccountSettingList.kt
new file mode 100644
index 00000000000..7c98cc12055
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/AccountSettingList.kt
@@ -0,0 +1,38 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.setting
+
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.R
+
+@Composable
+internal fun AccountSettingList(
+    onAddAccountClick: () -> Unit,
+    onSyncAllAccountsClick: () -> Unit,
+    modifier: Modifier = Modifier,
+) {
+    SettingList(
+        modifier = modifier
+            .padding(vertical = MainTheme.spacings.default)
+            .fillMaxWidth(),
+    ) {
+        item {
+            SettingListItem(
+                label = stringResource(id = R.string.navigation_drawer_dropdown_action_sync_all_accounts),
+                onClick = onSyncAllAccountsClick,
+                icon = Icons.Outlined.Sync,
+            )
+        }
+        item {
+            SettingListItem(
+                label = stringResource(id = R.string.navigation_drawer_dropdown_action_add_account),
+                onClick = onAddAccountClick,
+                icon = Icons.Outlined.Add,
+            )
+        }
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/FolderSettingList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/FolderSettingList.kt
new file mode 100644
index 00000000000..5d0511fb907
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/FolderSettingList.kt
@@ -0,0 +1,41 @@
+package net.thunderbird.feature.navigation.drawer.dropdown.ui.setting
+
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.R
+
+@Composable
+internal fun FolderSettingList(
+    onManageFoldersClick: () -> Unit,
+    onSettingsClick: () -> Unit,
+    isUnifiedAccount: Boolean,
+    modifier: Modifier = Modifier,
+) {
+    SettingList(
+        modifier = modifier
+            .padding(vertical = MainTheme.spacings.default)
+            .fillMaxWidth(),
+    ) {
+        if (isUnifiedAccount.not()) {
+            item {
+                SettingListItem(
+                    label = stringResource(R.string.navigation_drawer_dropdown_action_manage_folders),
+                    onClick = onManageFoldersClick,
+                    icon = Icons.Outlined.FolderManaged,
+                )
+            }
+        }
+        item {
+            SettingListItem(
+                label = stringResource(id = R.string.navigation_drawer_dropdown_action_settings),
+                onClick = onSettingsClick,
+                icon = Icons.Outlined.Settings,
+            )
+        }
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingList.kt
index eb5573fee8f..9475e106f01 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingList.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingList.kt
@@ -1,48 +1,28 @@
 package net.thunderbird.feature.navigation.drawer.dropdown.ui.setting
 
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.foundation.lazy.grid.GridCells
+import androidx.compose.foundation.lazy.grid.LazyGridScope
+import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.stringResource
-import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
-import app.k9mail.core.ui.compose.theme2.MainTheme
-import net.thunderbird.feature.navigation.drawer.dropdown.R
+import app.k9mail.core.ui.compose.common.window.WindowSizeClass
+import app.k9mail.core.ui.compose.common.window.getWindowSizeInfo
 
 @Composable
 internal fun SettingList(
-    onAccountSelectorClick: () -> Unit,
-    onManageFoldersClick: () -> Unit,
-    showAccountSelector: Boolean,
     modifier: Modifier = Modifier,
+    content: LazyGridScope.() -> Unit,
 ) {
-    Column(
-        modifier = modifier
-            .padding(vertical = MainTheme.spacings.default)
-            .windowInsetsPadding(WindowInsets.navigationBars)
-            .fillMaxWidth(),
+    val windowSizeInfo = getWindowSizeInfo()
+    val isLandscape = windowSizeInfo.screenWidth > windowSizeInfo.screenHeight
+    val useMultipleRows = isLandscape && windowSizeInfo.screenWidthSizeClass != WindowSizeClass.Compact
+
+    val rows = if (useMultipleRows) 2 else 1
+
+    LazyVerticalGrid(
+        columns = GridCells.Fixed(rows),
+        modifier = modifier,
     ) {
-        SettingListItem(
-            label = stringResource(R.string.navigation_drawer_dropdown_action_manage_folders),
-            onClick = onManageFoldersClick,
-            imageVector = Icons.Outlined.FolderManaged,
-        )
-        SettingListItem(
-            label = if (showAccountSelector) {
-                stringResource(R.string.navigation_drawer_dropdown_action_hide_accounts)
-            } else {
-                stringResource(R.string.navigation_drawer_dropdown_action_show_accounts)
-            },
-            onClick = onAccountSelectorClick,
-            imageVector = if (showAccountSelector) {
-                Icons.Outlined.ChevronLeft
-            } else {
-                Icons.Outlined.ChevronRight
-            },
-        )
+        content()
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItem.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItem.kt
index afdc5dc7245..ff0587e8609 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItem.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingListItem.kt
@@ -10,7 +10,7 @@ import app.k9mail.core.ui.compose.designsystem.organism.drawer.NavigationDrawerI
 internal fun SettingListItem(
     label: String,
     onClick: () -> Unit,
-    imageVector: ImageVector,
+    icon: ImageVector,
     modifier: Modifier = Modifier,
 ) {
     NavigationDrawerItem(
@@ -20,7 +20,7 @@ internal fun SettingListItem(
         selected = false,
         icon = {
             Icon(
-                imageVector = imageVector,
+                imageVector = icon,
             )
         },
     )
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/SideRailDrawerContent.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/SideRailDrawerContent.kt
similarity index 88%
rename from feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/SideRailDrawerContent.kt
rename to feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/SideRailDrawerContent.kt
index a596a49b1f3..3bdf284a776 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/SideRailDrawerContent.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/SideRailDrawerContent.kt
@@ -1,4 +1,4 @@
-package net.thunderbird.feature.navigation.drawer.dropdown.ui
+package net.thunderbird.feature.navigation.drawer.siderail.ui
 
 import androidx.compose.animation.AnimatedVisibility
 import androidx.compose.foundation.layout.Column
@@ -16,12 +16,12 @@ import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import net.thunderbird.core.ui.compose.common.modifier.testTagAsResourceId
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Event
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.State
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.AccountList
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.AccountView
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.DRAWER_WIDTH
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getAdditionalWidth
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.folder.FolderList
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.setting.SettingList
+import net.thunderbird.feature.navigation.drawer.siderail.ui.account.SideRailAccountList
+import net.thunderbird.feature.navigation.drawer.siderail.ui.account.SideRailAccountView
+import net.thunderbird.feature.navigation.drawer.siderail.ui.setting.SideRailSettingList
 
 @Composable
 internal fun SideRailDrawerContent(
@@ -41,7 +41,7 @@ internal fun SideRailDrawerContent(
         val selectedAccount = state.accounts.firstOrNull { it.id == state.selectedAccountId }
         Column {
             selectedAccount?.let {
-                AccountView(
+                SideRailAccountView(
                     account = selectedAccount,
                     onClick = { onEvent(Event.OnAccountViewClick(selectedAccount)) },
                     showAvatar = state.config.showAccountSelector,
@@ -53,7 +53,7 @@ internal fun SideRailDrawerContent(
                 AnimatedVisibility(
                     visible = state.config.showAccountSelector,
                 ) {
-                    AccountList(
+                    SideRailAccountList(
                         accounts = state.accounts,
                         selectedAccount = selectedAccount,
                         onAccountClick = { onEvent(Event.OnAccountClick(it)) },
@@ -76,7 +76,7 @@ internal fun SideRailDrawerContent(
                         modifier = Modifier.weight(1f),
                     )
                     DividerHorizontal()
-                    SettingList(
+                    SideRailSettingList(
                         onAccountSelectorClick = { onEvent(Event.OnAccountSelectorClick) },
                         onManageFoldersClick = { onEvent(Event.OnManageFoldersClick) },
                         showAccountSelector = state.config.showAccountSelector,
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountIndicator.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountIndicator.kt
similarity index 64%
rename from feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountIndicator.kt
rename to feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountIndicator.kt
index 448013e7dac..33f6adf5e15 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/account/AccountIndicator.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountIndicator.kt
@@ -1,15 +1,17 @@
-package net.thunderbird.feature.navigation.drawer.dropdown.ui.account
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
 
 import androidx.compose.foundation.layout.defaultMinSize
 import androidx.compose.foundation.layout.width
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
 import app.k9mail.core.ui.compose.designsystem.atom.Surface
 import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.rememberCalculatedAccountColor
 
 @Composable
-internal fun AccountIndicator(
-    accountColor: Int,
+internal fun SideRailAccountIndicator(
+    accountColor: Color,
     modifier: Modifier = Modifier,
 ) {
     Surface(
@@ -18,7 +20,7 @@ internal fun AccountIndicator(
             .defaultMinSize(
                 minHeight = MainTheme.spacings.default,
             ),
-        color = calculateAccountColor(accountColor),
+        color = rememberCalculatedAccountColor(accountColor),
         shape = MainTheme.shapes.medium,
     ) {}
 }
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountList.kt
new file mode 100644
index 00000000000..8c43ac1f1cf
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountList.kt
@@ -0,0 +1,83 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.navigationBars
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import app.k9mail.core.ui.compose.designsystem.atom.Surface
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import kotlinx.collections.immutable.ImmutableList
+import net.thunderbird.feature.navigation.drawer.dropdown.R
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.getDisplayCutOutHorizontalInsetPadding
+import net.thunderbird.feature.navigation.drawer.siderail.ui.setting.SideRailSettingItem
+
+@Composable
+internal fun SideRailAccountList(
+    accounts: ImmutableList<DisplayAccount>,
+    selectedAccount: DisplayAccount?,
+    onAccountClick: (DisplayAccount) -> Unit,
+    onSyncAllAccountsClick: () -> Unit,
+    onSettingsClick: () -> Unit,
+    modifier: Modifier = Modifier,
+) {
+    Surface(
+        modifier = modifier,
+        color = MainTheme.colors.surfaceContainer,
+    ) {
+        val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+
+        Column(
+            modifier = Modifier
+                .fillMaxHeight()
+                .windowInsetsPadding(WindowInsets.navigationBars)
+                .windowInsetsPadding(horizontalInsetPadding)
+                .width(MainTheme.sizes.large),
+        ) {
+            LazyColumn(
+                modifier = Modifier.weight(1f),
+                contentPadding = PaddingValues(vertical = MainTheme.spacings.default),
+            ) {
+                items(
+                    items = accounts,
+                    key = { account -> account.id },
+                ) { account ->
+                    SideRailAccountListItem(
+                        account = account,
+                        onClick = { onAccountClick(account) },
+                        selected = selectedAccount == account,
+                    )
+                }
+            }
+            Column(
+                modifier = Modifier.padding(vertical = MainTheme.spacings.oneHalf),
+            ) {
+                SideRailSettingItem(
+                    icon = Icons.Outlined.Sync,
+                    label = stringResource(id = R.string.navigation_drawer_dropdown_action_sync_all_accounts),
+                    onClick = onSyncAllAccountsClick,
+                )
+                // Hack to compensate the column placement at an uneven coordinate, caused by the 1.dp divider.
+                Spacer(modifier = Modifier.height(7.dp))
+                SideRailSettingItem(
+                    icon = Icons.Outlined.Settings,
+                    label = stringResource(id = R.string.navigation_drawer_dropdown_action_settings),
+                    onClick = onSettingsClick,
+                )
+            }
+        }
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListItem.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListItem.kt
new file mode 100644
index 00000000000..a906354d333
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountListItem.kt
@@ -0,0 +1,31 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
+
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.AccountAvatar
+
+@Composable
+internal fun SideRailAccountListItem(
+    account: DisplayAccount,
+    onClick: (DisplayAccount) -> Unit,
+    selected: Boolean,
+    modifier: Modifier = Modifier,
+) {
+    Box(
+        modifier = modifier.width(MainTheme.sizes.large)
+            .padding(vertical = MainTheme.spacings.half),
+        contentAlignment = Alignment.Center,
+    ) {
+        AccountAvatar(
+            account = account,
+            onClick = onClick,
+            selected = selected,
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountView.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountView.kt
new file mode 100644
index 00000000000..41bfed68ae1
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/account/SideRailAccountView.kt
@@ -0,0 +1,115 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.account
+
+import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.IntrinsicSize
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.WindowInsetsSides
+import androidx.compose.foundation.layout.defaultMinSize
+import androidx.compose.foundation.layout.displayCutout
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.only
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalLayoutDirection
+import androidx.compose.ui.unit.LayoutDirection
+import app.k9mail.core.ui.compose.designsystem.atom.Surface
+import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyLarge
+import app.k9mail.core.ui.compose.designsystem.atom.text.TextBodyMedium
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.account.AccountAvatar
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountColor
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.common.getDisplayAccountName
+
+@Suppress("LongMethod")
+@Composable
+internal fun SideRailAccountView(
+    account: DisplayAccount,
+    onClick: () -> Unit,
+    showAvatar: Boolean,
+    modifier: Modifier = Modifier,
+) {
+    Row(
+        modifier = Modifier.fillMaxWidth()
+            .height(intrinsicSize = IntrinsicSize.Max),
+        verticalAlignment = Alignment.CenterVertically,
+    ) {
+        AnimatedVisibility(visible = showAvatar) {
+            Surface(
+                color = MainTheme.colors.surfaceContainer,
+                modifier = Modifier.fillMaxHeight(),
+            ) {
+                val horizontalInsetPadding = getDisplayCutOutHorizontalInsetPadding()
+
+                Box(
+                    modifier = Modifier
+                        .windowInsetsPadding(horizontalInsetPadding)
+                        .width(MainTheme.sizes.large),
+                    contentAlignment = Alignment.Center,
+                ) {
+                    AccountAvatar(
+                        account = account,
+                        onClick = null,
+                        selected = false,
+                    )
+                }
+            }
+        }
+        Row(
+            modifier = modifier
+                .clickable(onClick = onClick)
+                .height(intrinsicSize = IntrinsicSize.Max)
+                .fillMaxWidth()
+                .defaultMinSize(minHeight = MainTheme.sizes.large)
+                .padding(
+                    top = MainTheme.spacings.double,
+                    start = MainTheme.spacings.double,
+                    end = MainTheme.spacings.triple,
+                    bottom = MainTheme.spacings.double,
+                ),
+            verticalAlignment = Alignment.CenterVertically,
+        ) {
+            val color = getDisplayAccountColor(account)
+            val name = getDisplayAccountName(account)
+
+            SideRailAccountIndicator(
+                accountColor = color,
+                modifier = Modifier
+                    .fillMaxHeight()
+                    .padding(end = MainTheme.spacings.oneHalf),
+            )
+            Column(
+                verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.half),
+            ) {
+                TextBodyLarge(
+                    text = name,
+                    color = MainTheme.colors.onSurface,
+                )
+                if (account is MailDisplayAccount && account.name != account.email) {
+                    TextBodyMedium(
+                        text = account.email,
+                        color = MainTheme.colors.onSurfaceVariant,
+                    )
+                }
+            }
+        }
+    }
+}
+
+@Composable
+fun getDisplayCutOutHorizontalInsetPadding(): WindowInsets {
+    val isRtl = LocalLayoutDirection.current == LayoutDirection.Rtl
+    return WindowInsets.displayCutout.only(if (isRtl) WindowInsetsSides.Right else WindowInsetsSides.Left)
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingItem.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingItem.kt
similarity index 92%
rename from feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingItem.kt
rename to feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingItem.kt
index bf49f253994..ea640b97005 100644
--- a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/setting/SettingItem.kt
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingItem.kt
@@ -1,4 +1,4 @@
-package net.thunderbird.feature.navigation.drawer.dropdown.ui.setting
+package net.thunderbird.feature.navigation.drawer.siderail.ui.setting
 
 import androidx.compose.foundation.clickable
 import androidx.compose.foundation.layout.Box
@@ -14,7 +14,7 @@ import app.k9mail.core.ui.compose.designsystem.atom.icon.Icon
 import app.k9mail.core.ui.compose.theme2.MainTheme
 
 @Composable
-internal fun SettingItem(
+internal fun SideRailSettingItem(
     icon: ImageVector,
     label: String,
     onClick: () -> Unit,
diff --git a/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingList.kt b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingList.kt
new file mode 100644
index 00000000000..d94083d57f0
--- /dev/null
+++ b/feature/navigation/drawer/dropdown/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/ui/setting/SideRailSettingList.kt
@@ -0,0 +1,49 @@
+package net.thunderbird.feature.navigation.drawer.siderail.ui.setting
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.navigationBars
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.windowInsetsPadding
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import app.k9mail.core.ui.compose.designsystem.atom.icon.Icons
+import app.k9mail.core.ui.compose.theme2.MainTheme
+import net.thunderbird.feature.navigation.drawer.dropdown.R
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.setting.SettingListItem
+
+@Composable
+internal fun SideRailSettingList(
+    onAccountSelectorClick: () -> Unit,
+    onManageFoldersClick: () -> Unit,
+    showAccountSelector: Boolean,
+    modifier: Modifier = Modifier,
+) {
+    Column(
+        modifier = modifier
+            .padding(vertical = MainTheme.spacings.default)
+            .windowInsetsPadding(WindowInsets.navigationBars)
+            .fillMaxWidth(),
+    ) {
+        SettingListItem(
+            label = stringResource(R.string.navigation_drawer_dropdown_action_manage_folders),
+            onClick = onManageFoldersClick,
+            icon = Icons.Outlined.FolderManaged,
+        )
+        SettingListItem(
+            label = if (showAccountSelector) {
+                stringResource(R.string.navigation_drawer_dropdown_action_hide_accounts)
+            } else {
+                stringResource(R.string.navigation_drawer_dropdown_action_show_accounts)
+            },
+            onClick = onAccountSelectorClick,
+            icon = if (showAccountSelector) {
+                Icons.Outlined.ChevronLeft
+            } else {
+                Icons.Outlined.ChevronRight
+            },
+        )
+    }
+}
diff --git a/feature/navigation/drawer/dropdown/src/main/res/values/strings.xml b/feature/navigation/drawer/dropdown/src/main/res/values/strings.xml
index c23b2b9959e..49c8cc83a7d 100644
--- a/feature/navigation/drawer/dropdown/src/main/res/values/strings.xml
+++ b/feature/navigation/drawer/dropdown/src/main/res/values/strings.xml
@@ -1,11 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="navigation_drawer_dropdown_action_settings">Settings</string>
+    <string name="navigation_drawer_dropdown_avount_view_selection_title">Account list</string>
+    <string name="navigation_drawer_dropdown_unified_account_title">Unified Account</string>
     <string name="navigation_drawer_dropdown_action_manage_folders">Manage folders</string>
     <string name="navigation_drawer_dropdown_action_sync_all_accounts">Sync all accounts</string>
+    <string name="navigation_drawer_dropdown_action_add_account">Add account</string>
     <string name="navigation_drawer_dropdown_action_show_accounts">Show accounts</string>
     <string name="navigation_drawer_dropdown_action_hide_accounts">Hide accounts</string>
-    <string name="navigation_drawer_dropdown_unified_inbox_title">Unified Inbox</string>
+    <string name="navigation_drawer_dropdown_unified_inbox_title">Inbox</string>
     <!-- This is displayed as the unread count of a folder in the folder drawer when the number of unread messages exceeds 99. Space is extremely limited. Keep this as short as possible. -->
     <string name="navigation_drawer_dropdown_folder_item_badge_count_greater_than_99">99+</string>
     <!-- This is displayed as the unread count of a folder in the folder drawer when the number of unread messages exceeds 1000. Space is extremely limited. Keep this as short as possible. -->
diff --git a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt
index 822c9059672..d67b1b86ff6 100644
--- a/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt
+++ b/feature/navigation/drawer/siderail/src/main/kotlin/net/thunderbird/feature/navigation/drawer/siderail/SideRailDrawer.kt
@@ -79,6 +79,7 @@ class SideRailDrawer(
     override fun selectUnifiedInbox() {
         drawerState.update {
             it.copy(
+                selectedAccountUuid = "unified_account",
                 selectedFolderId = DisplayUnifiedFolderType.INBOX.id,
             )
         }
diff --git a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt
index 075c29b572f..af8eb9bab61 100644
--- a/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt
+++ b/legacy/ui/legacy/src/main/java/com/fsck/k9/activity/MessageList.kt
@@ -70,6 +70,7 @@ import net.thunderbird.core.logging.legacy.Log
 import net.thunderbird.core.preference.GeneralSettingsManager
 import net.thunderbird.feature.navigation.drawer.api.NavigationDrawer
 import net.thunderbird.feature.navigation.drawer.dropdown.DropDownDrawer
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
 import net.thunderbird.feature.navigation.drawer.siderail.SideRailDrawer
 import net.thunderbird.feature.search.LocalMessageSearch
 import net.thunderbird.feature.search.SearchAccount
@@ -659,6 +660,7 @@ open class MessageList :
                 navigationDrawer = DropDownDrawer(
                     parent = this,
                     openAccount = { accountId -> openRealAccount(accountId) },
+                    openAddAccount = { launchAddAccountScreen() },
                     openFolder = { accountId, folderId -> openFolder(accountId, folderId) },
                     openUnifiedFolder = { openUnifiedInbox() },
                     openManageFolders = { launchManageFoldersScreen() },
@@ -744,14 +746,25 @@ open class MessageList :
         ManageFoldersActivity.launch(this, account!!)
     }
 
+    private fun launchAddAccountScreen() {
+        FeatureLauncherActivity.launch(
+            context = this,
+            target = FeatureLauncherTarget.AccountSetup,
+        )
+    }
+
     fun openRealAccount(accountId: String) {
-        val account = accountManager.getAccount(accountId) ?: return
-        val folderId = defaultFolderProvider.getDefaultFolder(account)
+        if (accountId == UnifiedDisplayAccount.UNIFIED_ACCOUNT_ID) {
+            openUnifiedInbox()
+        } else {
+            val account = accountManager.getAccount(accountId) ?: return
+            val folderId = defaultFolderProvider.getDefaultFolder(account)
 
-        val search = LocalMessageSearch()
-        search.addAllowedFolder(folderId)
-        search.addAccountUuid(account.uuid)
-        actionDisplaySearch(this, search, noThreading = false, newTask = false)
+            val search = LocalMessageSearch()
+            search.addAllowedFolder(folderId)
+            search.addAccountUuid(account.uuid)
+            actionDisplaySearch(this, search, noThreading = false, newTask = false)
+        }
     }
 
     private fun performSearch(search: LocalMessageSearch) {
@@ -1500,7 +1513,6 @@ open class MessageList :
                     !generalSettingsManager.getSettings().isShowUnifiedInbox -> drawer.deselect()
 
                 search.id == SearchAccount.UNIFIED_INBOX -> drawer.selectUnifiedInbox()
-                else -> drawer.deselect()
             }
         } ?: logger.warn(TAG) { "Couldn't select folder for $accountUuid as LocalSearch is null." }
     }


Test patch:
diff --git a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/FakeData.kt b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/FakeData.kt
index ed1bf22c95c..029373f7ba2 100644
--- a/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/FakeData.kt
+++ b/feature/navigation/drawer/dropdown/src/debug/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/FakeData.kt
@@ -10,12 +10,13 @@ import net.thunderbird.core.android.account.Identity
 import net.thunderbird.core.android.account.LegacyAccount
 import net.thunderbird.feature.mail.folder.api.Folder
 import net.thunderbird.feature.mail.folder.api.FolderType
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 
 internal object FakeData {
 
@@ -38,7 +39,12 @@ internal object FakeData {
         email = EMAIL_ADDRESS
     }
 
-    val DISPLAY_ACCOUNT = DisplayAccount(
+    val UNIFIED_DISPLAY_ACCOUNT = UnifiedDisplayAccount(
+        unreadMessageCount = 224,
+        starredMessageCount = 42,
+    )
+
+    val MAIL_DISPLAY_ACCOUNT = MailDisplayAccount(
         id = ACCOUNT_ID_RAW,
         name = DISPLAY_NAME,
         email = EMAIL_ADDRESS,
@@ -54,7 +60,7 @@ internal object FakeData {
         isLocalOnly = false,
     )
 
-    val DISPLAY_FOLDER = DisplayAccountFolder(
+    val DISPLAY_FOLDER = MailDisplayFolder(
         accountId = ACCOUNT_ID_RAW,
         folder = FOLDER,
         isInTopGroup = false,
@@ -86,9 +92,9 @@ internal object FakeData {
         children = persistentListOf(),
     )
 
-    val UNIFIED_FOLDER = DisplayUnifiedFolder(
+    val UNIFIED_FOLDER = UnifiedDisplayFolder(
         id = "unified_inbox",
-        unifiedType = DisplayUnifiedFolderType.INBOX,
+        unifiedType = UnifiedDisplayFolderType.INBOX,
         unreadMessageCount = 123,
         starredMessageCount = 567,
     )
@@ -140,9 +146,9 @@ internal object FakeData {
         ),
     )
 
-    fun createAccountList(): PersistentList<DisplayAccount> {
+    fun createAccountList(): PersistentList<MailDisplayAccount> {
         return persistentListOf(
-            DisplayAccount(
+            MailDisplayAccount(
                 id = "account1",
                 name = "job@example.com",
                 email = "job@example.com",
@@ -150,7 +156,7 @@ internal object FakeData {
                 unreadMessageCount = 2,
                 starredMessageCount = 0,
             ),
-            DisplayAccount(
+            MailDisplayAccount(
                 id = "account2",
                 name = "Jodie Doe",
                 email = "jodie@example.com",
@@ -158,7 +164,7 @@ internal object FakeData {
                 unreadMessageCount = 12,
                 starredMessageCount = 0,
             ),
-            DisplayAccount(
+            MailDisplayAccount(
                 id = "account3",
                 name = "John Doe",
                 email = "john@example.com",
diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepositoryTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepositoryTest.kt
index 672fced2aef..ae9befce4da 100644
--- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepositoryTest.kt
+++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/data/UnifiedFolderRepositoryTest.kt
@@ -6,8 +6,8 @@ import assertk.assertions.isEqualTo
 import kotlin.test.Test
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.test.runTest
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 import net.thunderbird.feature.search.api.MessageSearchField
 import net.thunderbird.feature.search.api.SearchAttribute
 
@@ -24,12 +24,12 @@ internal class UnifiedFolderRepositoryTest {
         val testSubject = UnifiedFolderRepository(
             messageCountsProvider = messageCountsProvider,
         )
-        val folderType = DisplayUnifiedFolderType.INBOX
+        val folderType = UnifiedDisplayFolderType.INBOX
 
-        val result = testSubject.getDisplayUnifiedFolderFlow(folderType).first()
+        val result = testSubject.getUnifiedDisplayFolderFlow(folderType).first()
 
         assertThat(result).isEqualTo(
-            DisplayUnifiedFolder(
+            UnifiedDisplayFolder(
                 id = "unified_inbox",
                 unifiedType = folderType,
                 unreadMessageCount = 2,
diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/FakeUnifiedFolderRepository.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/FakeUnifiedFolderRepository.kt
index 0424d079846..66a8a4b0174 100644
--- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/FakeUnifiedFolderRepository.kt
+++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/FakeUnifiedFolderRepository.kt
@@ -2,13 +2,13 @@ package net.thunderbird.feature.navigation.drawer.dropdown.domain.usecase
 
 import kotlinx.coroutines.flow.Flow
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UnifiedFolderRepository
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 
 internal class FakeUnifiedFolderRepository(
-    private val displayUnifiedFolderFlow: Flow<DisplayUnifiedFolder>,
+    private val displayUnifiedFolderFlow: Flow<UnifiedDisplayFolder>,
 ) : UnifiedFolderRepository {
-    override fun getDisplayUnifiedFolderFlow(unifiedFolderType: DisplayUnifiedFolderType): Flow<DisplayUnifiedFolder> {
+    override fun getUnifiedDisplayFolderFlow(unifiedFolderType: UnifiedDisplayFolderType): Flow<UnifiedDisplayFolder> {
         return displayUnifiedFolderFlow
     }
 }
diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccountTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccountTest.kt
index cc6472299a4..5f13f8348fe 100644
--- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccountTest.kt
+++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayFoldersForAccountTest.kt
@@ -8,17 +8,18 @@ import kotlinx.coroutines.flow.MutableStateFlow
 import kotlinx.coroutines.flow.first
 import kotlinx.coroutines.test.runTest
 import net.thunderbird.account.fake.FakeAccountData.ACCOUNT_ID_RAW
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData
 import app.k9mail.legacy.ui.folder.DisplayFolder as LegacyDisplayFolder
 
 internal class GetDisplayFoldersForAccountTest {
 
     @Test
-    fun `should return only account folders when includeUnifiedFolders is false`() = runTest {
+    fun `should return account folders when account id is regular`() = runTest {
         val accountId = ACCOUNT_ID_RAW
         val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS)
         val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow)
@@ -29,14 +30,14 @@ internal class GetDisplayFoldersForAccountTest {
             unifiedFolderRepository = unifiedFolderRepository,
         )
 
-        val result = testSubject(accountId, includeUnifiedFolders = false).first()
+        val result = testSubject(accountId).first()
 
         assertThat(result).isEqualTo(DISPLAY_ACCOUNT_FOLDERS)
     }
 
     @Test
-    fun `should return account folders and unified folders when includeUnifiedFolders is true`() = runTest {
-        val accountId = ACCOUNT_ID_RAW
+    fun `should return unifed account folders when account id is unified`() = runTest {
+        val accountId = UnifiedDisplayAccount.UNIFIED_ACCOUNT_ID
         val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS)
         val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow)
         val unifiedFolderFlow = MutableStateFlow(DISPLAY_UNIFIED_FOLDER)
@@ -46,13 +47,13 @@ internal class GetDisplayFoldersForAccountTest {
             unifiedFolderRepository = unifiedFolderRepository,
         )
 
-        val result = testSubject(accountId, includeUnifiedFolders = true).first()
+        val result = testSubject(accountId).first()
 
-        assertThat(result).isEqualTo(DISPLAY_UNIFIED_FOLDERS + DISPLAY_ACCOUNT_FOLDERS)
+        assertThat(result).isEqualTo(DISPLAY_UNIFIED_FOLDERS)
     }
 
     @Test
-    fun `should emit new list when account folders or unified folders emit new items`() = runTest {
+    fun `should only emit new list when account folders emit new items`() = runTest {
         val accountId = ACCOUNT_ID_RAW
         val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS)
         val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow)
@@ -63,16 +64,36 @@ internal class GetDisplayFoldersForAccountTest {
             unifiedFolderRepository = unifiedFolderRepository,
         )
 
-        testSubject(accountId, includeUnifiedFolders = true).test {
-            assertThat(awaitItem()).isEqualTo(DISPLAY_UNIFIED_FOLDERS + DISPLAY_ACCOUNT_FOLDERS)
+        testSubject(accountId).test {
+            assertThat(awaitItem()).isEqualTo(DISPLAY_ACCOUNT_FOLDERS)
 
             legacyDisplayFolderFlow.emit(LEGACY_DISPLAY_FOLDERS_2)
 
-            assertThat(awaitItem()).isEqualTo(DISPLAY_UNIFIED_FOLDERS + DISPLAY_ACCOUNT_FOLDERS_2)
+            assertThat(awaitItem()).isEqualTo(DISPLAY_ACCOUNT_FOLDERS_2)
+
+            unifiedFolderFlow.emit(DISPLAY_UNIFIED_FOLDER_2)
+        }
+    }
 
+    @Test
+    fun `should only emit new list when unified account folders emit new items`() = runTest {
+        val accountId = UnifiedDisplayAccount.UNIFIED_ACCOUNT_ID
+        val legacyDisplayFolderFlow = MutableStateFlow(LEGACY_DISPLAY_FOLDERS)
+        val displayFolderRepository = FakeDisplayFolderRepository(legacyDisplayFolderFlow)
+        val unifiedFolderFlow = MutableStateFlow(DISPLAY_UNIFIED_FOLDER)
+        val unifiedFolderRepository = FakeUnifiedFolderRepository(unifiedFolderFlow)
+        val testSubject = GetDisplayFoldersForAccount(
+            displayFolderRepository = displayFolderRepository,
+            unifiedFolderRepository = unifiedFolderRepository,
+        )
+
+        testSubject(accountId).test {
+            assertThat(awaitItem()).isEqualTo(DISPLAY_UNIFIED_FOLDERS)
+
+            legacyDisplayFolderFlow.emit(LEGACY_DISPLAY_FOLDERS_2)
             unifiedFolderFlow.emit(DISPLAY_UNIFIED_FOLDER_2)
 
-            assertThat(awaitItem()).isEqualTo(listOf(DISPLAY_UNIFIED_FOLDER_2) + DISPLAY_ACCOUNT_FOLDERS_2)
+            assertThat(awaitItem()).isEqualTo(listOf(DISPLAY_UNIFIED_FOLDER_2))
         }
     }
 
@@ -105,16 +126,16 @@ internal class GetDisplayFoldersForAccountTest {
             starredMessageCount = 0,
         )
 
-        val DISPLAY_UNIFIED_FOLDER = DisplayUnifiedFolder(
+        val DISPLAY_UNIFIED_FOLDER = UnifiedDisplayFolder(
             id = "unified_inbox",
-            unifiedType = DisplayUnifiedFolderType.INBOX,
+            unifiedType = UnifiedDisplayFolderType.INBOX,
             unreadMessageCount = 2,
             starredMessageCount = 2,
         )
 
-        val DISPLAY_UNIFIED_FOLDER_2 = DisplayUnifiedFolder(
+        val DISPLAY_UNIFIED_FOLDER_2 = UnifiedDisplayFolder(
             id = "unified_inbox",
-            unifiedType = DisplayUnifiedFolderType.INBOX,
+            unifiedType = UnifiedDisplayFolderType.INBOX,
             unreadMessageCount = 3,
             starredMessageCount = 3,
         )
@@ -122,14 +143,14 @@ internal class GetDisplayFoldersForAccountTest {
         val DISPLAY_UNIFIED_FOLDERS = listOf(DISPLAY_UNIFIED_FOLDER)
 
         val DISPLAY_ACCOUNT_FOLDERS = listOf<DisplayFolder>(
-            DisplayAccountFolder(
+            MailDisplayFolder(
                 accountId = ACCOUNT_ID_RAW,
                 folder = FakeData.FOLDER,
                 isInTopGroup = false,
                 unreadMessageCount = 0,
                 starredMessageCount = 0,
             ),
-            DisplayAccountFolder(
+            MailDisplayFolder(
                 accountId = ACCOUNT_ID_RAW,
                 folder = FakeData.FOLDER.copy(
                     id = 2,
@@ -141,7 +162,7 @@ internal class GetDisplayFoldersForAccountTest {
             ),
         )
 
-        val DISPLAY_ACCOUNT_FOLDERS_2 = DISPLAY_ACCOUNT_FOLDERS + DisplayAccountFolder(
+        val DISPLAY_ACCOUNT_FOLDERS_2 = DISPLAY_ACCOUNT_FOLDERS + MailDisplayFolder(
             accountId = ACCOUNT_ID_RAW,
             folder = FakeData.FOLDER.copy(
                 id = 3,
diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt
index 5a1d868b731..0598feaccbd 100644
--- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt
+++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/domain/usecase/GetDisplayTreeFolderTest.kt
@@ -7,11 +7,11 @@ import kotlinx.collections.immutable.ImmutableList
 import kotlinx.collections.immutable.persistentListOf
 import net.thunderbird.feature.mail.folder.api.Folder
 import net.thunderbird.feature.mail.folder.api.FolderType
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 
 class GetDisplayTreeFolderTest {
 
@@ -52,7 +52,7 @@ class GetDisplayTreeFolderTest {
     fun `should create tree from display unified folder`() {
         // arrange
         val unifiedFolder = createDisplayUnifiedFolder(
-            unifiedFolderType = DisplayUnifiedFolderType.INBOX,
+            unifiedFolderType = UnifiedDisplayFolderType.INBOX,
             unreadMessageCount = 5,
             starredMessageCount = 2,
         )
@@ -84,7 +84,7 @@ class GetDisplayTreeFolderTest {
     fun `should create tree from unified folders and regular folders`() {
         // arrange
         val unifiedFolder = createDisplayUnifiedFolder(
-            unifiedFolderType = DisplayUnifiedFolderType.INBOX,
+            unifiedFolderType = UnifiedDisplayFolderType.INBOX,
             unreadMessageCount = 3,
             starredMessageCount = 1,
         )
@@ -173,7 +173,7 @@ class GetDisplayTreeFolderTest {
                 nestedWeird.starredMessageCount,
             children = persistentListOf(
                 DisplayTreeFolder(
-                    displayFolder = DisplayAccountFolder(
+                    displayFolder = MailDisplayFolder(
                         accountId = "accountId",
                         folder = Folder(id = 1, name = "Inbox", type = FolderType.REGULAR, isLocalOnly = false),
                         isInTopGroup = true,
@@ -186,7 +186,7 @@ class GetDisplayTreeFolderTest {
                     children = persistentListOf(),
                 ),
                 DisplayTreeFolder(
-                    displayFolder = DisplayAccountFolder(
+                    displayFolder = MailDisplayFolder(
                         accountId = "accountId",
                         folder = Folder(id = 2, name = "", type = FolderType.REGULAR, isLocalOnly = false),
                         isInTopGroup = true,
@@ -198,7 +198,7 @@ class GetDisplayTreeFolderTest {
                     totalStarredCount = 4,
                     children = persistentListOf(
                         DisplayTreeFolder(
-                            displayFolder = DisplayAccountFolder(
+                            displayFolder = MailDisplayFolder(
                                 accountId = "placeholder",
                                 folder = Folder(
                                     id = 1L,
@@ -215,7 +215,7 @@ class GetDisplayTreeFolderTest {
                             totalStarredCount = 2,
                             children = persistentListOf(
                                 DisplayTreeFolder(
-                                    displayFolder = DisplayAccountFolder(
+                                    displayFolder = MailDisplayFolder(
                                         accountId = "accountId",
                                         folder = Folder(
                                             id = 3,
@@ -237,7 +237,7 @@ class GetDisplayTreeFolderTest {
                     ),
                 ),
                 DisplayTreeFolder(
-                    displayFolder = DisplayAccountFolder(
+                    displayFolder = MailDisplayFolder(
                         accountId = "placeholder",
                         folder = Folder(id = 2, name = "valid1", type = FolderType.REGULAR, isLocalOnly = false),
                         isInTopGroup = true,
@@ -249,7 +249,7 @@ class GetDisplayTreeFolderTest {
                     totalStarredCount = 3,
                     children = persistentListOf(
                         DisplayTreeFolder(
-                            displayFolder = DisplayAccountFolder(
+                            displayFolder = MailDisplayFolder(
                                 accountId = "placeholder",
                                 folder = Folder(
                                     id = 3L,
@@ -266,7 +266,7 @@ class GetDisplayTreeFolderTest {
                             totalStarredCount = 3,
                             children = persistentListOf(
                                 DisplayTreeFolder(
-                                    displayFolder = DisplayAccountFolder(
+                                    displayFolder = MailDisplayFolder(
                                         accountId = "accountId",
                                         folder = Folder(
                                             id = 4,
@@ -431,8 +431,8 @@ class GetDisplayTreeFolderTest {
             unreadMessageCount: Int,
             starredMessageCount: Int,
             accountId: String = "accountId",
-        ): DisplayAccountFolder {
-            return DisplayAccountFolder(
+        ): MailDisplayFolder {
+            return MailDisplayFolder(
                 accountId = accountId,
                 folder = Folder(
                     id = folderId,
@@ -447,11 +447,11 @@ class GetDisplayTreeFolderTest {
         }
 
         fun createDisplayUnifiedFolder(
-            unifiedFolderType: DisplayUnifiedFolderType,
+            unifiedFolderType: UnifiedDisplayFolderType,
             unreadMessageCount: Int,
             starredMessageCount: Int,
-        ): DisplayUnifiedFolder {
-            return DisplayUnifiedFolder(
+        ): UnifiedDisplayFolder {
+            return UnifiedDisplayFolder(
                 id = unifiedFolderType.name.lowercase(),
                 unifiedType = unifiedFolderType,
                 unreadMessageCount = unreadMessageCount,
diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewKtTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewKtTest.kt
index 2f31ce54a99..0bcf3c68a27 100644
--- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewKtTest.kt
+++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewKtTest.kt
@@ -34,6 +34,7 @@ internal class DrawerViewKtTest : ComposeTest() {
                 openUnifiedFolder = { counter.openUnifiedFolderCount++ },
                 openManageFolders = { counter.openManageFoldersCount++ },
                 openSettings = { counter.openSettingsCount++ },
+                openAddAccount = { counter.openAddAccountCount++ },
                 closeDrawer = { counter.closeDrawerCount++ },
                 featureFlagProvider = FakeFeatureFlagProvider(isEnabled = true),
                 viewModel = viewModel,
@@ -42,7 +43,7 @@ internal class DrawerViewKtTest : ComposeTest() {
 
         assertThat(counter).isEqualTo(verifyCounter)
 
-        viewModel.effect(Effect.OpenAccount(FakeData.DISPLAY_ACCOUNT.id))
+        viewModel.effect(Effect.OpenAccount(FakeData.MAIL_DISPLAY_ACCOUNT.id))
 
         verifyCounter.openAccountCount++
         assertThat(counter).isEqualTo(verifyCounter)
@@ -66,6 +67,9 @@ internal class DrawerViewKtTest : ComposeTest() {
 
         verifyCounter.closeDrawerCount++
         viewModel.effect(Effect.CloseDrawer)
+
+        verifyCounter.openAddAccountCount++
+        viewModel.effect(Effect.OpenAddAccount)
     }
 
     @Test
@@ -85,6 +89,7 @@ internal class DrawerViewKtTest : ComposeTest() {
                 openUnifiedFolder = { },
                 openManageFolders = { },
                 openSettings = { },
+                openAddAccount = { },
                 closeDrawer = { },
                 featureFlagProvider = FakeFeatureFlagProvider(isEnabled = true),
                 viewModel = viewModel,
@@ -123,6 +128,7 @@ internal class DrawerViewKtTest : ComposeTest() {
                 openUnifiedFolder = {},
                 openManageFolders = {},
                 openSettings = {},
+                openAddAccount = {},
                 closeDrawer = {},
                 featureFlagProvider = FakeFeatureFlagProvider(isEnabled = true),
                 viewModel = viewModel,
@@ -157,6 +163,7 @@ internal class DrawerViewKtTest : ComposeTest() {
         var openUnifiedFolderCount: Int = 0,
         var openManageFoldersCount: Int = 0,
         var openSettingsCount: Int = 0,
+        var openAddAccountCount: Int = 0,
         var closeDrawerCount: Int = 0,
     )
 }
diff --git a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt
index 7614574388b..9b845976de8 100644
--- a/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt
+++ b/feature/navigation/drawer/dropdown/src/test/kotlin/net/thunderbird/feature/navigation/drawer/dropdown/ui/DrawerViewModelTest.kt
@@ -23,16 +23,16 @@ import net.thunderbird.feature.mail.folder.api.Folder
 import net.thunderbird.feature.mail.folder.api.FolderType
 import net.thunderbird.feature.navigation.drawer.api.NavigationDrawerExternalContract.DrawerConfig
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.DomainContract.UseCase
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccount
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayAccountFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayFolder
 import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayTreeFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolder
-import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.DisplayUnifiedFolderType
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayAccount
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.MailDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolder
+import net.thunderbird.feature.navigation.drawer.dropdown.domain.entity.UnifiedDisplayFolderType
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Effect
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.Event
 import net.thunderbird.feature.navigation.drawer.dropdown.ui.DrawerContract.State
-import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.DISPLAY_ACCOUNT
+import net.thunderbird.feature.navigation.drawer.dropdown.ui.FakeData.MAIL_DISPLAY_ACCOUNT
 import org.junit.Rule
 import org.mockito.Mockito.mock
 import org.mockito.Mockito.times
@@ -71,12 +71,12 @@ internal class DrawerViewModelTest {
     @Test
     fun `should change loading state when OnSyncAccount event is received`() = runMviTest {
         val initialState = State(
-            accounts = listOf(DISPLAY_ACCOUNT).toImmutableList(),
-            selectedAccountId = DISPLAY_ACCOUNT.id,
+            accounts = listOf(MAIL_DISPLAY_ACCOUNT).toImmutableList(),
+            selectedAccountId = MAIL_DISPLAY_ACCOUNT.id,
         )
         val testSubject = createTestSubject(
             initialState = initialState,
-            displayAccountsFlow = flow { emit(listOf(DISPLAY_ACCOUNT)) },
+            displayAccountsFlow = flow { emit(listOf(MAIL_DISPLAY_ACCOUNT)) },
             syncAccountFlow = flow {
                 delay(25)
                 emit(Result.success(Unit))
@@ -220,7 +220,7 @@ internal class DrawerViewModelTest {
 
     @Test
     fun `should set selected account to null when no accounts are present`() = runTest {
-        val getDisplayAccountsFlow = MutableStateFlow(emptyList<DisplayAccount>())
+        val getDisplayAccountsFlow = MutableStateFlow(emptyList<MailDisplayAccount>())
         val testSubject = createTestSubject(
             displayAccountsFlow = getDisplayAccountsFlow,
         )
@@ -316,6 +316,7 @@ internal class DrawerViewModelTest {
             selectedAccountId = displayAccounts[0].id,
             folders = displayFoldersMap[displayAccounts[0].id]!!.toImmutableList(),
             selectedFolderId = displayFoldersMap[displayAccounts[0].id]!![0].id,
+            selectedFolder = displayFoldersMap[displayAccounts[0].id]!![0],
         )
         val testSubject = createTestSubject(
             displayAccountsFlow = getDisplayAccountsFlow,
@@ -328,6 +329,9 @@ internal class DrawerViewModelTest {
         val displayFolders = displayFoldersMap[displayAccounts[0].id] ?: emptyList()
         testSubject.event(Event.OnFolderClick(displayFolders[1]))
 
+        // Consume the state update
+        turbines.awaitStateItem()
+
         assertThat(turbines.awaitEffectItem()).isEqualTo(
             Effect.OpenFolder(
                 accountId = displayFolders[1].accountId,
@@ -355,6 +359,7 @@ internal class DrawerViewModelTest {
                 selectedAccountId = displayAccounts[0].id,
                 folders = displayFoldersMap[displayAccounts[0].id]!!.toImmutableList(),
                 selectedFolderId = displayFoldersMap[displayAccounts[0].id]!![0].id,
+                selectedFolder = displayFoldersMap[displayAccounts[0].id]!![0],
             )
             val testSubject = createTestSubject(
                 displayAccountsFlow = getDisplayAccountsFlow,
@@ -367,6 +372,9 @@ internal class DrawerViewModelTest {
             val displayFolders = displayFoldersMap[displayAccounts[0].id] ?: emptyList()
             testSubject.event(Event.OnFolderClick(displayFolders[1]))
 
+            // Consume the state update
+            turbines.awaitStateItem()
+
             assertThat(turbines.awaitEffectItem()).isEqualTo(Effect.OpenUnifiedFolder)
 
             turbines.assertThatAndEffectTurbineConsumed {
@@ -387,7 +395,7 @@ internal class DrawerViewModelTest {
             ).thenReturn(flowOf(Unit))
 
             val testSubject = createTestSubject(
-                initialState = State(config = drawerConfigWithAccountSelectorDisabled),
+                initialState = State(config = drawerConfigWithAccountSelectorDisabled, showAccountSelection = false),
                 saveDrawerConfig = saveDrawerConfig,
                 drawerConfigFlow = flowOf(drawerConfigWithAccountSelectorDisabled),
             )
@@ -398,6 +406,9 @@ internal class DrawerViewModelTest {
             advanceUntilIdle()
             verify(saveDrawerConfig, times(1)).invoke(captor.capture())
             assertThat(captor.firstValue).isEqualTo(drawerConfigWithAccountSelectorEnabled)
+
+            // Verify that showAccountSelection is toggled after the delay
+            assertThat(testSubject.state.value.showAccountSelection).isEqualTo(true)
         }
 
     @Suppress("MaxLineLength")
@@ -413,7 +424,7 @@ internal class DrawerViewModelTest {
             ).thenReturn(flowOf(Unit))
 
             val testSubject = createTestSubject(
-                initialState = State(config = drawerConfigWithAccountSelectorEnabled),
+                initialState = State(config = drawerConfigWithAccountSelectorEnabled, showAccountSelection = false),
                 saveDrawerConfig = saveDrawerConfig,
                 drawerConfigFlow = flowOf(drawerConfigWithAccountSelectorEnabled),
             )
@@ -424,6 +435,9 @@ internal class DrawerViewModelTest {
             advanceUntilIdle()
             verify(saveDrawerConfig, times(1)).invoke(captor.capture())
             assertThat(captor.firstValue).isEqualTo(drawerConfigWithAccountSelectorDisabled)
+
+            // Verify that showAccountSelection is toggled after the delay
+            assertThat(testSubject.state.value.showAccountSelection).isEqualTo(true)
         }
 
     @Test
@@ -453,7 +467,7 @@ internal class DrawerViewModelTest {
     private fun createTestSubject(
         initialState: State = State(),
         drawerConfigFlow: Flow<DrawerConfig> = flow { emit(createDrawerConfig()) },
-        displayAccountsFlow: Flow<List<DisplayAccount>> = flow { emit(emptyList()) },
+        displayAccountsFlow: Flow<List<MailDisplayAccount>> = flow { emit(emptyList()) },
         displayFoldersFlow: Flow<Map<String, List<DisplayFolder>>> = flow { emit(emptyMap()) },
         displayTreeFolder: DisplayTreeFolder = DisplayTreeFolder(
             displayFolder = null,
@@ -470,7 +484,7 @@ internal class DrawerViewModelTest {
             initialState = initialState,
             getDrawerConfig = { drawerConfigFlow },
             getDisplayAccounts = { displayAccountsFlow },
-            getDisplayFoldersForAccount = { accountId, _ ->
+            getDisplayFoldersForAccount = { accountId ->
                 displayFoldersFlow.map { it[accountId] ?: emptyList() }
             },
             getDisplayTreeFolder = { folders, maxDepth ->
@@ -500,8 +514,8 @@ internal class DrawerViewModelTest {
         email: String = "test@example.com",
         unreadCount: Int = 0,
         starredCount: Int = 0,
-    ): DisplayAccount {
-        return DisplayAccount(
+    ): MailDisplayAccount {
+        return MailDisplayAccount(
             id = id,
             name = name,
             email = email,
@@ -511,7 +525,7 @@ internal class DrawerViewModelTest {
         )
     }
 
-    private fun createDisplayAccountList(count: Int): List<DisplayAccount> {
+    private fun createDisplayAccountList(count: Int): List<MailDisplayAccount> {
         return List(count) { index ->
             createDisplayAccount(
                 id = "uuid-$index",
@@ -526,7 +540,7 @@ internal class DrawerViewModelTest {
         type: FolderType = FolderType.REGULAR,
         unreadCount: Int = 0,
         starredCount: Int = 0,
-    ): DisplayAccountFolder {
+    ): MailDisplayFolder {
         val folder = Folder(
             id = id,
             name = name,
@@ -534,7 +548,7 @@ internal class DrawerViewModelTest {
             isLocalOnly = false,
         )
 
-        return DisplayAccountFolder(
+        return MailDisplayFolder(
             accountId = accountId,
             folder = folder,
             isInTopGroup = false,
@@ -543,7 +557,7 @@ internal class DrawerViewModelTest {
         )
     }
 
-    private fun createDisplayFolderList(count: Int): List<DisplayAccountFolder> {
+    private fun createDisplayFolderList(count: Int): List<MailDisplayFolder> {
         return List(count) { index ->
             createDisplayFolder(
                 id = index.toLong() + 100,
@@ -553,11 +567,11 @@ internal class DrawerViewModelTest {
 
     private fun createDisplayUnifiedFolder(
         id: String = "unified_inbox",
-        unifiedType: DisplayUnifiedFolderType = DisplayUnifiedFolderType.INBOX,
+        unifiedType: UnifiedDisplayFolderType = UnifiedDisplayFolderType.INBOX,
         unreadCount: Int = 0,
         starredCount: Int = 0,
-    ): DisplayUnifiedFolder {
-        return DisplayUnifiedFolder(
+    ): UnifiedDisplayFolder {
+        return UnifiedDisplayFolder(
             id = id,
             unifiedType = unifiedType,
             unreadMessageCount = unreadCount,