         }
     }
 
-    private func showVerify(transaction: MXSASTransaction, animated: Bool) {
+    private func showVerifyBySAS(transaction: MXSASTransaction, animated: Bool) {
         let coordinator = DeviceVerificationVerifyCoordinator(session: self.session, transaction: transaction, verificationKind: self.verificationKind)
         coordinator.delegate = self
         coordinator.start()
 
+        self.add(childCoordinator: coordinator)
+        self.navigationRouter.push(coordinator, animated: animated) { [weak self] in
+            self?.remove(childCoordinator: coordinator)
+        }
+    }
+    
+    private func showVerifyByScanning(keyVerificationRequest: MXKeyVerificationRequest, animated: Bool) {
+        let coordinator = KeyVerificationVerifyByScanningCoordinator(session: self.session, keyVerificationRequest: keyVerificationRequest)
+        coordinator.delegate = self
+        coordinator.start()
+        
         self.add(childCoordinator: coordinator)
         self.navigationRouter.push(coordinator, animated: animated) { [weak self] in
             self?.remove(childCoordinator: coordinator)


extension DeviceVerificationCoordinator: DeviceVerificationIncomingCoordinatorDelegate {
    func deviceVerificationIncomingCoordinator(_ coordinator: DeviceVerificationIncomingCoordinatorType, didAcceptTransaction transaction: MXSASTransaction) {
        self.showVerify(transaction: transaction, animated: true)
    }

    func deviceVerificationIncomingCoordinatorDidCancel(_ coordinator: DeviceVerificationIncomingCoordinatorType) {

}

extension DeviceVerificationCoordinator: DeviceVerificationDataLoadingCoordinatorDelegate {
    
    func deviceVerificationDataLoadingCoordinator(_ coordinator: DeviceVerificationDataLoadingCoordinatorType, didAcceptKeyVerificationRequest keyVerificationRequest: MXKeyVerificationRequest) {
        self.showVerifyByScanning(keyVerificationRequest: keyVerificationRequest, animated: true)
    }
    
    func deviceVerificationDataLoadingCoordinator(_ coordinator: DeviceVerificationDataLoadingCoordinatorType, didLoadUser user: MXUser, device: MXDeviceInfo) {

        if let incomingTransaction = self.incomingTransaction {
