diff --git a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt
index 3d153f77e100233ba1f1cb2036769344a04dcd1f..18e15f0b9a8bbb96ca439f8d494a3544f42fcf71 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/RestoreBackupDataSource.kt
@@ -10,12 +10,11 @@ import org.futo.circles.auth.feature.cross_signing.CrossSigningDataSource
 import org.futo.circles.auth.model.KeyData
 import org.futo.circles.core.model.LoadingData
 import org.futo.circles.core.provider.MatrixSessionProvider
+import org.matrix.android.sdk.api.extensions.tryOrNull
 import org.matrix.android.sdk.api.listeners.StepProgressListener
-import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupLastVersionResult
+import org.matrix.android.sdk.api.session.crypto.keysbackup.BackupRecoveryKey
 import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
-import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysVersionResult
 import org.matrix.android.sdk.api.session.crypto.keysbackup.toKeysVersionResult
-import org.matrix.android.sdk.api.util.awaitCallback
 import javax.inject.Inject
 
 class RestoreBackupDataSource @Inject constructor(
@@ -59,6 +58,17 @@ class RestoreBackupDataSource @Inject constructor(
                         )
                     )
                 }
+
+                is StepProgressListener.Step.DecryptingKey -> {
+                    loadingLiveData.postValue(
+                        LoadingData(
+                            R.string.decrypting_key,
+                            step.progress,
+                            step.total,
+                            true
+                        )
+                    )
+                }
             }
         }
     }
@@ -102,18 +112,15 @@ class RestoreBackupDataSource @Inject constructor(
         val keysBackupService = getKeysBackupService()
         try {
             val keyVersion = getKeysVersion(keysBackupService)
-            awaitCallback {
-                keysBackupService.restoreKeysWithRecoveryKey(
-                    keyVersion,
-                    keyData.recoveryKey,
-                    null,
-                    MatrixSessionProvider.currentSession?.myUserId,
-                    progressObserver,
-                    it
-                )
-            }
+            keysBackupService.restoreKeysWithRecoveryKey(
+                keyVersion,
+                BackupRecoveryKey.fromBase64(keyData.recoveryKey),
+                null,
+                MatrixSessionProvider.currentSession?.myUserId,
+                progressObserver
+            )
             crossSigningDataSource.configureCrossSigning(keyData.keySpec)
-            trustOnDecrypt(keysBackupService, keyVersion)
+            keysBackupService.trustKeysBackupVersion(keyVersion, true)
         } catch (e: Throwable) {
             loadingLiveData.postValue(LoadingData(isLoading = false))
             throw e
@@ -155,21 +162,10 @@ class RestoreBackupDataSource @Inject constructor(
             ?: throw Exception(context.getString(R.string.backup_could_not_be_decrypted_with_key))
     }
 
-    private suspend fun trustOnDecrypt(
-        keysBackup: KeysBackupService,
-        keysVersionResult: KeysVersionResult
-    ) {
-        awaitCallback {
-            keysBackup.trustKeysBackupVersion(keysVersionResult, true, it)
-        }
-    }
-
     private fun getKeysBackupService() =
         MatrixSessionProvider.getSessionOrThrow().cryptoService().keysBackupService()
 
     private suspend fun getKeysVersion(keysBackupService: KeysBackupService) =
-        awaitCallback<KeysBackupLastVersionResult> {
-            keysBackupService.getCurrentVersion(it)
-        }.toKeysVersionResult()
+        tryOrNull { keysBackupService.getCurrentVersion() }?.toKeysVersionResult()
             ?: throw Exception(context.getString(R.string.failed_to_get_restore_keys_version))
 }
\ No newline at end of file
diff --git a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt
index 3342b4dc3d11e56ab0a348ff4cc717d461196da9..88e9b5630e6ea69a197f7e5f6738897abaabc1b3 100644
--- a/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt
+++ b/auth/src/main/java/org/futo/circles/auth/feature/pass_phrase/restore/SSSSDataSource.kt
@@ -48,7 +48,7 @@ class SSSSDataSource @Inject constructor() {
 
     suspend fun replaceBsSpeke4SKey() {
         val recoveryKey = MatrixSessionProvider.getSessionOrThrow()
-            .cryptoService().keysBackupService().getKeyBackupRecoveryKeyInfo()?.recoveryKey
+            .cryptoService().keysBackupService().getKeyBackupRecoveryKeyInfo()?.recoveryKey?.toBase64()
             ?: throw Exception("Recovery Key not found")
         val secret = extractCurveKeyFromRecoveryKey(recoveryKey)
             ?: throw Exception("Can not get secret from recovery key")
diff --git a/auth/src/main/res/values/strings.xml b/auth/src/main/res/values/strings.xml
index 6cbca7f00d986569b9932dc58a090485a3a35da9..725b891fb6847cb1913edfd388395a7b4c780a33 100644
--- a/auth/src/main/res/values/strings.xml
+++ b/auth/src/main/res/values/strings.xml
@@ -48,6 +48,7 @@
     <string name="computing_recovery_key">Computing recovery key.</string>
     <string name="downloading_keys">Downloading keys.</string>
     <string name="importing_keys">Importing keys.</string>
+    <string name="decrypting_key">Decrypting key.</string>
     <string name="failed_to_get_restore_keys_version">Failed to get latest restore keys version.</string>
     <string name="discard_current_registration_progress">Discard current registration progress?</string>
     <string name="domain">Domain</string>