diff --git a/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt b/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt
index 2ffbad539ef8df1543819ca9c44a13a836b3a298..6ac3f6dd6581dc23889cf9f157c3845cb69dd30e 100644
--- a/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt
+++ b/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt
@@ -4,7 +4,7 @@ import bindings.Bindings
 import bindings.UserDiscovery
 
 interface CrustDataSource {
-    suspend fun uploadBackup(path: String): ByteArray
+    suspend fun uploadBackup(path: String): Result<ByteArray>
     suspend fun recoverBackup(username: String): Result<ByteArray>
 }
 
@@ -14,10 +14,15 @@ class BindingsCrustMediator(
 ) : CrustDataSource {
 
 
-    override suspend fun uploadBackup(path: String): ByteArray {
-        return udManager?.let {
-            Bindings.uploadBackup(path, udManager, receptionRsaPrivateKey)
-        } ?: byteArrayOf()
+    override suspend fun uploadBackup(path: String): Result<ByteArray> {
+        return try {
+            udManager?.let {
+                val uploadSuccessReport = Bindings.uploadBackup(path, udManager, receptionRsaPrivateKey)
+                Result.success(uploadSuccessReport)
+            } ?: Result.failure(Exception("Failed to run backup. UserDiscovery not initialized."))
+        } catch (e: Exception) {
+            Result.failure(e)
+        }
     }
 
     override suspend fun recoverBackup(username: String): Result<ByteArray> {