diff --git a/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt b/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt
index 358b46ee5fb845b2e4d19de97627769e1e5e1d0a..e7d6995061bb7c36189a6b5d248b7b86ac30a5e7 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationBanner.kt
@@ -23,7 +23,6 @@ import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.ColumnScope
 import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.Spacer
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
@@ -57,6 +56,7 @@ fun main() = preview {
 }
 
 @Composable
+// [ColumnScope] needed for proper [AnimatedVisibility] implementation
 fun ColumnScope.ExpirationBanner(onExpired: () -> Unit) {
 
     var daysLeft by remember { mutableStateOf(0) }
@@ -69,8 +69,8 @@ fun ColumnScope.ExpirationBanner(onExpired: () -> Unit) {
     LaunchedEffect(Unit) {
         periodicallyCheckIfExpired(
             reportDaysLeft = { daysLeft = it },
-            onExpiry = { expired = true; onExpired() },
-            reportHideThreshold = { showExpirationBanner = hideTimestamp <= it }
+            reportHideThreshold = { showExpirationBanner = hideTimestamp <= it },
+            onExpiry = { showExpirationBanner = false; expired = true; onExpired() },
         )
     }
 
@@ -102,13 +102,11 @@ fun ExpirationBanner(
             "${i18nP("expiration.banner.part1.nozero", daysLeft)} ${i18n("expiration.banner.part2")}"
         Text(
             text = text,
-            style = MaterialTheme.typography.body2
+            style = MaterialTheme.typography.body2,
+            modifier = Modifier.weight(1f, true)
         )
-        Spacer(Modifier.weight(1f))
-        IconButton(
-            onClick = hide,
-        ) {
-            Icon(Icons.Filled.Close, i18n("hide"), Modifier.size(32.dp))
+        IconButton(hide) {
+            Icon(Icons.Filled.Close, i18n("hide"), Modifier.size(24.dp))
         }
     }
 }
diff --git a/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationUtils.kt b/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationUtils.kt
index 0694ada55d9374f40e36f1b766ca3db3fb09618b..d6f438a97a93aaa856a09ad1a148f6b3ef95263f 100644
--- a/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationUtils.kt
+++ b/src/main/kotlin/org/briarproject/briar/desktop/expiration/ExpirationUtils.kt
@@ -32,7 +32,7 @@ object ExpirationUtils {
     private val HIDE_INTERVAL = 1.days.inWholeMilliseconds
 
     // for testing uncomment the following instead
-    // private val EXPIRE_AFTER = Instant.now().toEpochMilli() + 10.seconds.inWholeMilliseconds
+    // private val EXPIRE_AFTER = Instant.now().toEpochMilli() + 30.seconds.inWholeMilliseconds
     // private val CHECK_INTERVAL = 1.seconds.inWholeMilliseconds
     // private val HIDE_INTERVAL = 10.seconds.inWholeMilliseconds
 
@@ -46,16 +46,17 @@ object ExpirationUtils {
 
     suspend fun periodicallyCheckIfExpired(
         reportDaysLeft: (Int) -> Unit,
-        onExpiry: () -> Unit,
         reportHideThreshold: (Long) -> Unit,
+        onExpiry: () -> Unit,
     ) {
         while (true) {
-            reportDaysLeft(getDaysLeft())
             if (isExpired()) {
                 onExpiry()
+                break
+            } else {
+                reportDaysLeft(getDaysLeft())
+                reportHideThreshold(hideThreshold())
             }
-
-            reportHideThreshold(hideThreshold())
             delay(CHECK_INTERVAL)
         }
     }