diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt
index e2595e0cdb..59d26ba1fe 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/extension/details/ExtensionDetailsPresenter.kt
@@ -10,7 +10,7 @@ import eu.kanade.tachiyomi.extension.ExtensionManager
 import eu.kanade.tachiyomi.source.Source
 import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
+import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.system.LocaleHelper
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.flow.collectLatest
@@ -36,7 +36,7 @@ class ExtensionDetailsPresenter(
                 .collectLatest { extension ->
                     // If extension is null it's most likely uninstalled
                     if (extension == null) {
-                        launchUI {
+                        withUIContext {
                             view?.onExtensionUninstalled()
                         }
                         return@collectLatest
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt
index 79aa1926b9..d803eb40a4 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/browse/migration/search/SearchPresenter.kt
@@ -29,7 +29,6 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchCardItem
 import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchItem
 import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchPresenter
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
 import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.system.toast
 import uy.kohesive.injekt.Injekt
@@ -98,7 +97,7 @@ class SearchPresenter(
                 withUIContext { view?.applicationContext?.toast(e.message) }
             }
 
-            presenterScope.launchUI { replacingMangaRelay.call(Pair(false, manga)) }
+            withUIContext { replacingMangaRelay.call(Pair(false, manga)) }
         }
     }
 
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
index b4fa87fd9e..d02a51b316 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryController.kt
@@ -22,7 +22,7 @@ import eu.kanade.tachiyomi.ui.browse.source.globalsearch.GlobalSearchController
 import eu.kanade.tachiyomi.ui.main.MainActivity
 import eu.kanade.tachiyomi.ui.manga.MangaController
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
+import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.system.toast
 import eu.kanade.tachiyomi.widget.materialdialogs.QuadStateTextView
 import kotlinx.coroutines.cancel
@@ -182,7 +182,7 @@ class LibraryController(
                     else -> QuadStateTextView.State.UNCHECKED.ordinal
                 }
             }.toTypedArray()
-            launchUI {
+            withUIContext {
                 ChangeMangaCategoriesDialog(this@LibraryController, mangas.mapNotNull { it.toDomainManga() }, categories, preselected)
                     .showDialog(router)
             }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
index 10de78ff6f..2119a0c8c1 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaPresenter.kt
@@ -42,7 +42,6 @@ import eu.kanade.tachiyomi.ui.manga.track.TrackItem
 import eu.kanade.tachiyomi.util.chapter.ChapterSettingsHelper
 import eu.kanade.tachiyomi.util.chapter.getChapterSort
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
 import eu.kanade.tachiyomi.util.lang.toRelativeString
 import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.preference.asHotFlow
@@ -276,7 +275,7 @@ class MangaPresenter(
                     if (manga.toDbManga().removeCovers() > 0) {
                         updateManga.awaitUpdateCoverLastModified(manga.id)
                     }
-                    launchUI { onRemoved() }
+                    withUIContext { onRemoved() }
                 }
             } else {
                 // Add to library
@@ -284,7 +283,7 @@ class MangaPresenter(
                 if (onDuplicateExists != null) {
                     val duplicate = getDuplicateLibraryManga.await(manga.title, manga.source)
                     if (duplicate != null) {
-                        launchUI { onDuplicateExists(duplicate) }
+                        withUIContext { onDuplicateExists(duplicate) }
                         return@launchIO
                     }
                 }
@@ -299,7 +298,7 @@ class MangaPresenter(
                         val result = updateManga.awaitUpdateFavorite(manga.id, true)
                         if (!result) return@launchIO
                         moveMangaToCategory(defaultCategory)
-                        launchUI { onAdded() }
+                        withUIContext { onAdded() }
                     }
 
                     // Automatic 'Default' or no categories
@@ -307,11 +306,11 @@ class MangaPresenter(
                         val result = updateManga.awaitUpdateFavorite(manga.id, true)
                         if (!result) return@launchIO
                         moveMangaToCategory(null)
-                        launchUI { onAdded() }
+                        withUIContext { onAdded() }
                     }
 
                     // Choose a category
-                    else -> launchUI { onRequireCategory(manga, categories) }
+                    else -> withUIContext { onRequireCategory(manga, categories) }
                 }
 
                 // Finally match with enhanced tracking when available
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaFullCoverDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaFullCoverDialog.kt
index c8bf71f1e0..24f34aa331 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaFullCoverDialog.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/info/MangaFullCoverDialog.kt
@@ -28,7 +28,6 @@ import eu.kanade.tachiyomi.data.saver.Location
 import eu.kanade.tachiyomi.ui.base.controller.FullComposeController
 import eu.kanade.tachiyomi.util.editCover
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
 import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.system.logcat
 import eu.kanade.tachiyomi.util.system.toShareIntent
@@ -81,11 +80,11 @@ class MangaFullCoverDialog : FullComposeController<MangaFullCoverDialog.MangaFul
         viewScope.launchIO {
             try {
                 val uri = presenter.saveCover(activity, temp = true) ?: return@launchIO
-                launchUI {
+                withUIContext {
                     startActivity(uri.toShareIntent(activity))
                 }
             } catch (e: Throwable) {
-                launchUI {
+                withUIContext {
                     logcat(LogPriority.ERROR, e)
                     activity.toast(R.string.error_saving_cover)
                 }
@@ -98,11 +97,11 @@ class MangaFullCoverDialog : FullComposeController<MangaFullCoverDialog.MangaFul
         viewScope.launchIO {
             try {
                 presenter.saveCover(activity, temp = false)
-                launchUI {
+                withUIContext {
                     activity.toast(R.string.cover_saved)
                 }
             } catch (e: Throwable) {
-                launchUI {
+                withUIContext {
                     logcat(LogPriority.ERROR, e)
                     activity.toast(R.string.error_saving_cover)
                 }
@@ -209,13 +208,12 @@ class MangaFullCoverDialog : FullComposeController<MangaFullCoverDialog.MangaFul
             presenterScope.launchIO {
                 @Suppress("BlockingMethodInNonBlockingContext")
                 context.contentResolver.openInputStream(data)?.use {
-                    val result = try {
+                    try {
                         manga.editCover(context, it, updateManga, coverCache)
+                        withUIContext { view?.onSetCoverSuccess() }
                     } catch (e: Exception) {
-                        view?.onSetCoverError(e)
-                        false
+                        withUIContext { view?.onSetCoverError(e) }
                     }
-                    withUIContext { if (result) view?.onSetCoverSuccess() }
                 }
             }
         }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
index b6b04d3db3..902e313858 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/ReaderPresenter.kt
@@ -43,7 +43,6 @@ import eu.kanade.tachiyomi.util.chapter.getChapterSort
 import eu.kanade.tachiyomi.util.editCover
 import eu.kanade.tachiyomi.util.lang.byteSize
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
 import eu.kanade.tachiyomi.util.lang.takeBytes
 import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.storage.DiskUtil
@@ -665,7 +664,7 @@ class ReaderPresenter(
                         location = Location.Pictures.create(relativePath),
                     ),
                 )
-                launchUI {
+                withUIContext {
                     notifier.onComplete(uri)
                     view!!.onSaveImageResult(SaveImageResult.Success(uri))
                 }
@@ -702,7 +701,7 @@ class ReaderPresenter(
                         location = Location.Cache,
                     ),
                 )
-                launchUI {
+                withUIContext {
                     view!!.onShareImageResult(uri, page)
                 }
             }
@@ -720,20 +719,19 @@ class ReaderPresenter(
         val stream = page.stream ?: return
 
         presenterScope.launchIO {
-            val result = try {
+            try {
                 manga.editCover(context, stream())
-            } catch (e: Exception) {
-                false
-            }
-            launchUI {
-                val resultResult = if (!result) {
-                    SetAsCoverResult.Error
-                } else if (manga.isLocal() || manga.favorite) {
-                    SetAsCoverResult.Success
-                } else {
-                    SetAsCoverResult.AddToLibraryFirst
+                withUIContext {
+                    view?.onSetAsCoverResult(
+                        if (manga.isLocal() || manga.favorite) {
+                            SetAsCoverResult.Success
+                        } else {
+                            SetAsCoverResult.AddToLibraryFirst
+                        },
+                    )
                 }
-                view?.onSetAsCoverResult(resultResult)
+            } catch (e: Exception) {
+                withUIContext { view?.onSetAsCoverResult(SetAsCoverResult.Error) }
             }
         }
     }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryPresenter.kt
index 04e9a5fa44..8904a314e0 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryPresenter.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/ui/recent/history/HistoryPresenter.kt
@@ -25,8 +25,8 @@ import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.preference.PreferencesHelper
 import eu.kanade.tachiyomi.ui.base.presenter.BasePresenter
 import eu.kanade.tachiyomi.util.lang.launchIO
-import eu.kanade.tachiyomi.util.lang.launchUI
 import eu.kanade.tachiyomi.util.lang.toDateKey
+import eu.kanade.tachiyomi.util.lang.withUIContext
 import eu.kanade.tachiyomi.util.system.logcat
 import eu.kanade.tachiyomi.util.system.toast
 import kotlinx.coroutines.channels.Channel
@@ -112,7 +112,7 @@ class HistoryPresenter(
         presenterScope.launchIO {
             val result = deleteHistoryTable.await()
             if (!result) return@launchIO
-            launchUI {
+            withUIContext {
                 view?.activity?.toast(R.string.clear_history_completed)
             }
         }
diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt
index 292d9565ea..f544f783da 100644
--- a/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt
+++ b/app/src/main/java/eu/kanade/tachiyomi/util/MangaExtensions.kt
@@ -80,15 +80,12 @@ suspend fun DomainManga.editCover(
     stream: InputStream,
     updateManga: UpdateManga = Injekt.get(),
     coverCache: CoverCache = Injekt.get(),
-): Boolean {
-    return if (isLocal()) {
+) {
+    if (isLocal()) {
         LocalSource.updateCover(context, toDbManga(), stream)
         updateManga.awaitUpdateCoverLastModified(id)
     } else if (favorite) {
         coverCache.setCustomCoverToCache(toDbManga(), stream)
         updateManga.awaitUpdateCoverLastModified(id)
-    } else {
-        // We should never reach this block
-        false
     }
 }