             }, failure: { [weak self] error in
                 self?.update(viewState: .error(error))
             })
-        }
+            
+            continueLoadData()
+        } else {
+            //  be sure that session has completed its first sync
+            if session.state >= MXSessionStateRunning {
+                continueLoadData()
+            } else {
+                //  show loader
+                self.update(viewState: .loading)
+                NotificationCenter.default.addObserver(self, selector: #selector(sessionStateChanged), name: .mxSessionStateDidChange, object: session)
+            }
+        }
+    }
+    
+    @objc
+    private func sessionStateChanged() {
+        if session.state >= MXSessionStateRunning {
+            NotificationCenter.default.removeObserver(self, name: .mxSessionStateDidChange, object: session)
+            continueLoadData()
+        }
+    }
+    
+    private func continueLoadData() {
+        //  update availability again
+        self.secretsRecoveryAvailability = session.crypto.recoveryService.vc_availability
         
         let viewData = KeyVerificationSelfVerifyWaitViewData(isNewSignIn: self.isNewSignIn, secretsRecoveryAvailability: self.secretsRecoveryAvailability)
         

    private let keyVerificationService: KeyVerificationService
    private let verificationManager: MXKeyVerificationManager
    private let isNewSignIn: Bool
    private let secretsRecoveryAvailability: SecretsRecoveryAvailability
    private var keyVerificationRequest: MXKeyVerificationRequest?
    
    // MARK: Public

            switch self.secretsRecoveryAvailability {
            case .notAvailable:
                fatalError("Should not happen: When recovery is not available button is hidden")
            case .available(let secretsRecoveryMode):
                self.coordinatorDelegate?.keyVerificationSelfVerifyWaitViewModel(self, wantsToRecoverSecretsWith: secretsRecoveryMode)
            }
        }
    }
