 // MARK: Screen transitions
 extension AppViewController {
 
-    func swapViewController(_ newViewController: UIViewController, completion: @escaping Block) {
+    @discardableResult
+    func swapViewController(_ newViewController: UIViewController) -> Promise<Void> {
+        let (promise, resolve, _) = Promise<Void>.pending()
         newViewController.view.alpha = 0
 
         visibleViewController?.willMove(toParentViewController: nil)


        let parentNavController = ElloNavigationController(rootViewController: loggedOutController)

        swapViewController(parentNavController) {
            if let deepLinkPath = self.deepLinkPath {
                self.navigateToDeepLink(deepLinkPath)
                self.deepLinkPath = nil
            }
        }
    }


            newViewController.didMove(toParentViewController: self)

            self.visibleViewController = newViewController
            resolve(Void())
        })

        return promise
    }

    func removeViewController(_ completion: @escaping Block = {}) {
