diff --git a/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt b/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt
index b3a1c89761e46bf3ad9b5f378378759a8faa3579..97241bf5d3906d220885348e7ac1c48d349aaabe 100644
--- a/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt
+++ b/app/src/main/java/net/novagamestudios/kaffeekasse/ui/Updates.kt
@@ -46,6 +46,7 @@ import cafe.adriel.voyager.core.model.ScreenModel
 import cafe.adriel.voyager.core.model.screenModelScope
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.launch
+import net.novagamestudios.common_utils.Logger
 import net.novagamestudios.common_utils.compose.DashedShape
 import net.novagamestudios.common_utils.compose.components.CircularLoadingBox
 import net.novagamestudios.common_utils.compose.components.ColumnCenter
@@ -54,6 +55,7 @@ import net.novagamestudios.common_utils.compose.components.RowCenter
 import net.novagamestudios.common_utils.compose.components.TransparentListItem
 import net.novagamestudios.common_utils.compose.state.ReentrantActionState
 import net.novagamestudios.common_utils.compose.state.collectAsStateIn
+import net.novagamestudios.common_utils.error
 import net.novagamestudios.common_utils.toastLong
 import net.novagamestudios.kaffeekasse.App
 import net.novagamestudios.kaffeekasse.App.Companion.settings
@@ -65,6 +67,8 @@ import net.novagamestudios.kaffeekasse.repositories.InstallStatus
 import net.novagamestudios.kaffeekasse.repositories.RepositoryProvider
 import net.novagamestudios.kaffeekasse.repositories.UpdateController
 import net.novagamestudios.kaffeekasse.repositories.releases.Releases
+import net.novagamestudios.kaffeekasse.ui.util.Toasts
+import net.novagamestudios.kaffeekasse.ui.util.ToastsState
 import net.novagamestudios.kaffeekasse.ui.util.openInBrowser
 import net.novagamestudios.kaffeekasse.ui.util.screenmodel.GlobalScreenModelFactory
 import net.novagamestudios.kaffeekasse.ui.util.screenmodel.ScreenModelProvider
@@ -75,12 +79,14 @@ class UpdatesScreenModel private constructor(
     private val releases: Releases,
     private val updateController: UpdateController,
     private val gitLabProjectUrl: String
-) : ScreenModel {
+) : ScreenModel, Logger {
     var showAppInfo by mutableStateOf(false)
 
     private val checkingMutex = ReentrantActionState()
     val isChecking by checkingMutex
 
+    val toasts = ToastsState()
+
     val newerReleases by releases.newerReleases
         .map { it.orEmpty() }
         .collectAsStateIn(screenModelScope, emptyList())
@@ -104,7 +110,12 @@ class UpdatesScreenModel private constructor(
         screenModelScope.launch {
             checkingMutex.trueWhile {
                 releases.newerReleases.value = null
-                releases.fetchNewerReleases()
+                try {
+                    releases.fetchNewerReleases()
+                } catch (e: Throwable) {
+                    error (e) { "Failed to fetch newer releases" }
+                    toasts.short("Failed to check for updates: ${e.message}")
+                }
             }
         }
     }
@@ -159,6 +170,7 @@ fun UpdateDialogs(model: UpdatesScreenModel = UpdatesScreenModel.model) {
         newerReleases = model.newerReleases,
         onStartUpdate = { model.update() }
     )
+    Toasts(model.toasts)
 }
 
 @Composable